1
1
import React , { createContext , useCallback , useEffect , useState } from 'react'
2
- import { getConfig , type ConfigDb } from '../lib/config-db.js'
2
+ import { defaultDnsJsonResolvers , defaultEnableGatewayProviders , defaultEnableRecursiveGateways , defaultEnableWebTransport , defaultEnableWss , defaultGateways , defaultRouters , getConfig , resetConfig , type ConfigDb } from '../lib/config-db.js'
3
3
import { isConfigPage } from '../lib/is-config-page.js'
4
4
import { getUiComponentLogger } from '../lib/logger.js'
5
5
@@ -10,12 +10,14 @@ export interface ConfigContextType extends ConfigDb {
10
10
isConfigExpanded : boolean
11
11
setConfigExpanded ( value : boolean ) : void
12
12
setConfig ( key : ConfigKey , value : any ) : void
13
+ resetConfig ( ) : Promise < void >
13
14
}
14
15
15
16
export const ConfigContext = createContext < ConfigContextType > ( {
16
17
isConfigExpanded : isLoadedInIframe ,
17
18
setConfigExpanded : ( value : boolean ) => { } ,
18
19
setConfig : ( key , value ) => { } ,
20
+ resetConfig : async ( ) => Promise . resolve ( ) ,
19
21
gateways : [ ] ,
20
22
routers : [ ] ,
21
23
dnsJsonResolvers : { } ,
@@ -28,30 +30,36 @@ export const ConfigContext = createContext<ConfigContextType>({
28
30
29
31
export const ConfigProvider = ( { children } : { children : JSX . Element [ ] | JSX . Element , expanded ?: boolean } ) : JSX . Element => {
30
32
const [ isConfigExpanded , setConfigExpanded ] = useState ( isConfigPage ( window . location . hash ) )
31
- const [ gateways , setGateways ] = useState < string [ ] > ( [ ] )
32
- const [ routers , setRouters ] = useState < string [ ] > ( [ ] )
33
- const [ dnsJsonResolvers , setDnsJsonResolvers ] = useState < Record < string , string > > ( { } )
34
- const [ enableWss , setEnableWss ] = useState ( false )
35
- const [ enableWebTransport , setEnableWebTransport ] = useState ( false )
36
- const [ enableGatewayProviders , setEnableGatewayProviders ] = useState ( false )
37
- const [ enableRecursiveGateways , setEnableRecursiveGateways ] = useState ( false )
33
+ const [ gateways , setGateways ] = useState < string [ ] > ( defaultGateways )
34
+ const [ routers , setRouters ] = useState < string [ ] > ( defaultRouters )
35
+ const [ dnsJsonResolvers , setDnsJsonResolvers ] = useState < Record < string , string > > ( defaultDnsJsonResolvers )
36
+ const [ enableWss , setEnableWss ] = useState ( defaultEnableWss )
37
+ const [ enableWebTransport , setEnableWebTransport ] = useState ( defaultEnableWebTransport )
38
+ const [ enableGatewayProviders , setEnableGatewayProviders ] = useState ( defaultEnableGatewayProviders )
39
+ const [ enableRecursiveGateways , setEnableRecursiveGateways ] = useState ( defaultEnableRecursiveGateways )
38
40
const [ debug , setDebug ] = useState ( '' )
39
41
const isExplicitlyLoadedConfigPage = isConfigPage ( window . location . hash )
42
+ const logger = getUiComponentLogger ( 'config-context' )
43
+ const log = logger . forComponent ( 'main' )
44
+
45
+ async function loadConfig ( ) : Promise < void > {
46
+ const config = await getConfig ( logger )
47
+ setGateways ( config . gateways )
48
+ setRouters ( config . routers )
49
+ setDnsJsonResolvers ( config . dnsJsonResolvers )
50
+ setEnableWss ( config . enableWss )
51
+ setEnableWebTransport ( config . enableWebTransport )
52
+ setEnableGatewayProviders ( config . enableGatewayProviders )
53
+ setEnableRecursiveGateways ( config . enableRecursiveGateways )
54
+ setDebug ( config . debug )
55
+ }
40
56
/**
41
57
* We need to make sure that the configDb types are loaded with the values from IDB
42
58
*/
43
59
useEffect ( ( ) => {
44
- void ( async ( ) => {
45
- const config = await getConfig ( getUiComponentLogger ( 'config-context' ) )
46
- setGateways ( config . gateways )
47
- setRouters ( config . routers )
48
- setDnsJsonResolvers ( config . dnsJsonResolvers )
49
- setEnableWss ( config . enableWss )
50
- setEnableWebTransport ( config . enableWebTransport )
51
- setEnableGatewayProviders ( config . enableGatewayProviders )
52
- setEnableRecursiveGateways ( config . enableRecursiveGateways )
53
- setDebug ( config . debug )
54
- } ) ( )
60
+ void loadConfig ( ) . catch ( ( err ) => {
61
+ log . error ( 'Error loading config' , err )
62
+ } )
55
63
} , [ ] )
56
64
57
65
/**
@@ -84,10 +92,16 @@ export const ConfigProvider = ({ children }: { children: JSX.Element[] | JSX.Ele
84
92
setDebug ( value )
85
93
break
86
94
default :
95
+ log . error ( `Unknown config key: ${ key } ` )
87
96
throw new Error ( `Unknown config key: ${ key } ` )
88
97
}
89
98
} , [ ] )
90
99
100
+ const resetConfigLocal = async ( ) : Promise < void > => {
101
+ await resetConfig ( )
102
+ await loadConfig ( )
103
+ }
104
+
91
105
const setConfigExpandedWrapped = ( value : boolean ) : void => {
92
106
if ( isLoadedInIframe || isExplicitlyLoadedConfigPage ) {
93
107
// ignore it
@@ -97,7 +111,7 @@ export const ConfigProvider = ({ children }: { children: JSX.Element[] | JSX.Ele
97
111
}
98
112
99
113
return (
100
- < ConfigContext . Provider value = { { isConfigExpanded, setConfigExpanded : setConfigExpandedWrapped , setConfig : setConfigLocal , gateways, routers, dnsJsonResolvers, enableWss, enableWebTransport, enableGatewayProviders, enableRecursiveGateways, debug } } >
114
+ < ConfigContext . Provider value = { { isConfigExpanded, setConfigExpanded : setConfigExpandedWrapped , setConfig : setConfigLocal , resetConfig : resetConfigLocal , gateways, routers, dnsJsonResolvers, enableWss, enableWebTransport, enableGatewayProviders, enableRecursiveGateways, debug } } >
101
115
{ children }
102
116
</ ConfigContext . Provider >
103
117
)
0 commit comments