| import { useCallback, useEffect, useState } from 'react' | |
| const ENV_DRAFT_KEY = 'ds2api_env_config_draft_v1' | |
| export function useAdminConfig({ token, showMessage, t }) { | |
| const [config, setConfig] = useState({ keys: [], accounts: [] }) | |
| const fetchConfig = useCallback(async () => { | |
| if (!token) return | |
| try { | |
| const res = await fetch('/admin/config', { | |
| headers: { 'Authorization': `Bearer ${token}` } | |
| }) | |
| if (res.ok) { | |
| const data = await res.json() | |
| if (data?.env_backed) { | |
| localStorage.setItem(ENV_DRAFT_KEY, JSON.stringify(data)) | |
| } else { | |
| localStorage.removeItem(ENV_DRAFT_KEY) | |
| } | |
| setConfig(data) | |
| } | |
| } catch (e) { | |
| console.error('Failed to fetch config:', e) | |
| showMessage('error', t('errors.fetchConfig', { error: e.message })) | |
| } | |
| }, [showMessage, t, token]) | |
| useEffect(() => { | |
| if (token) { | |
| const rawDraft = localStorage.getItem(ENV_DRAFT_KEY) | |
| if (rawDraft) { | |
| try { | |
| const draft = JSON.parse(rawDraft) | |
| if (draft?.env_backed) { | |
| setConfig(draft) | |
| } | |
| } catch (_e) { | |
| localStorage.removeItem(ENV_DRAFT_KEY) | |
| } | |
| } | |
| fetchConfig() | |
| } | |
| }, [fetchConfig, token]) | |
| return { | |
| config, | |
| fetchConfig, | |
| } | |
| } | |