This commit is contained in:
gpt-engineer-app[bot]
2026-01-06 00:04:17 +00:00
parent 7cf34c1c9b
commit 0753b8ff20
6 changed files with 1197 additions and 13 deletions
+53
View File
@@ -0,0 +1,53 @@
import { useState, useEffect, useCallback } from 'react';
interface MusicApiKeys {
youtubeApiKey: string;
soundcloudClientId: string;
}
const STORAGE_KEY = 'music-api-keys';
export const useMusicApiKeys = () => {
const [apiKeys, setApiKeys] = useState<MusicApiKeys>({
youtubeApiKey: '',
soundcloudClientId: '',
});
const [isLoaded, setIsLoaded] = useState(false);
useEffect(() => {
const stored = localStorage.getItem(STORAGE_KEY);
if (stored) {
try {
setApiKeys(JSON.parse(stored));
} catch (e) {
console.error('Failed to parse stored API keys');
}
}
setIsLoaded(true);
}, []);
const saveApiKeys = useCallback((keys: Partial<MusicApiKeys>) => {
setApiKeys(prev => {
const updated = { ...prev, ...keys };
localStorage.setItem(STORAGE_KEY, JSON.stringify(updated));
return updated;
});
}, []);
const clearApiKeys = useCallback(() => {
localStorage.removeItem(STORAGE_KEY);
setApiKeys({ youtubeApiKey: '', soundcloudClientId: '' });
}, []);
const hasYoutubeKey = Boolean(apiKeys.youtubeApiKey);
const hasSoundcloudKey = Boolean(apiKeys.soundcloudClientId);
return {
apiKeys,
saveApiKeys,
clearApiKeys,
hasYoutubeKey,
hasSoundcloudKey,
isLoaded,
};
};