@@ -11,6 +11,7 @@ import { Box, Button, Text } from "@questdb/react-components"
1111import { Refresh } from "@styled-icons/remix-line"
1212import { setValue } from "../../utils/localStorage" ;
1313import { StoreKey } from "../../utils/localStorage/types" ;
14+ import { Preferences } from '../../utils/questdb'
1415
1516enum View {
1617 loading = 0 ,
@@ -26,9 +27,11 @@ const reducer = (s: State, n: Partial<State>) => ({ ...s, ...n })
2627
2728const SettingContext = createContext < {
2829 settings : Settings
30+ preferences : Preferences
2931 consoleConfig : ConsoleConfig
3032 warnings : Warning [ ]
31- } > ( { settings : { } , consoleConfig : { } , warnings : [ ] } )
33+ refreshSettingsAndPreferences : ( ) => Promise < void >
34+ } > ( { settings : { } , preferences : { } , consoleConfig : { } , warnings : [ ] , refreshSettingsAndPreferences : ( ) => Promise . resolve ( ) } )
3235
3336const connectionError = (
3437 < >
@@ -47,13 +50,14 @@ export const SettingsProvider = ({
4750} ) => {
4851 const [ state , dispatch ] = useReducer ( reducer , initialState )
4952 const [ settings , setSettings ] = useState < Settings > ( { } )
53+ const [ preferences , _setPreferences ] = useState < Preferences > ( { } )
5054 const [ warnings , setWarnings ] = useState < Warning [ ] > ( [ ] )
5155 const [ consoleConfig , setConsoleConfig ] = useState < ConsoleConfig > ( { } )
5256
5357 const views : { [ key in View ] : ( ) => React . ReactNode } = {
5458 [ View . loading ] : ( ) => null ,
5559 [ View . ready ] : ( ) => (
56- < SettingContext . Provider value = { { settings, consoleConfig, warnings } } >
60+ < SettingContext . Provider value = { { settings, consoleConfig, warnings, preferences , refreshSettingsAndPreferences } } >
5761 { children }
5862 </ SettingContext . Provider >
5963 ) ,
@@ -101,6 +105,25 @@ export const SettingsProvider = ({
101105 }
102106 }
103107
108+ const setPreferences = ( preferences : Preferences ) => {
109+ if ( preferences ?. instance_name ) {
110+ const suffix = preferences ?. instance_type ? `${ preferences . instance_type . charAt ( 0 ) . toUpperCase ( ) } ${ preferences . instance_type . slice ( 1 ) } ` : 'QuestDB'
111+ const newTitle = `${ preferences . instance_name } | ${ suffix } `
112+ if ( document . title !== newTitle ) {
113+ document . title = newTitle
114+ }
115+ }
116+ _setPreferences ( preferences )
117+ }
118+
119+ const refreshSettingsAndPreferences = async ( ) => {
120+ const result = await fetchEndpoint ( "settings" , connectionError )
121+ if ( result ) {
122+ setSettings ( result . config )
123+ setPreferences ( { version : result [ "preferences.version" ] , ...result . preferences } )
124+ }
125+ }
126+
104127 useEffect ( ( ) => {
105128 const fetchAll = async ( ) => {
106129 const settings = await fetchEndpoint ( "settings" , connectionError )
@@ -111,6 +134,7 @@ export const SettingsProvider = ({
111134 )
112135 if ( settings ) {
113136 setSettings ( settings . config )
137+ setPreferences ( { version : settings [ "preferences.version" ] , ...settings . preferences } )
114138 setValue ( StoreKey . RELEASE_TYPE , settings [ "release.type" ] )
115139 }
116140 if ( warnings ) {
0 commit comments