File size: 1,571 Bytes
8d3471e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
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,
    }
}