diff --git a/src/api/index.ts b/src/api/index.ts index 6bb1536..321608a 100644 --- a/src/api/index.ts +++ b/src/api/index.ts @@ -25,6 +25,7 @@ export * from './purse'; export * from './room'; export * from './room/events'; export * from './room/widgets'; +export * from './ui-settings'; export * from './user'; export * from './utils'; export * from './wired'; diff --git a/src/api/ui-settings/UiSettingsContext.tsx b/src/api/ui-settings/UiSettingsContext.tsx index 0bde41d..f9311cf 100644 --- a/src/api/ui-settings/UiSettingsContext.tsx +++ b/src/api/ui-settings/UiSettingsContext.tsx @@ -1,7 +1,14 @@ -import { GetCommunication, UiSettingsDataEvent, UiSettingsLoadComposer, UiSettingsSaveComposer } from '@nitrots/nitro-renderer'; -import { createContext, FC, PropsWithChildren, useCallback, useContext, useEffect, useRef, useState } from 'react'; +import { createContext, FC, PropsWithChildren, useCallback, useContext, useEffect, useState } from 'react'; import { DEFAULT_UI_SETTINGS, IUiSettings } from './IUiSettings'; +/** + * UI settings currently persist to localStorage only. The cross-device + * server-side sync (UiSettingsLoadComposer / UiSettingsSaveComposer / + * UiSettingsDataEvent) is a planned addition that requires both the + * renderer composer classes and the Arcturus packet handlers — none of + * which exist yet. Until those land, settings stay per-browser. + */ + const STORAGE_KEY = 'nitro.ui.settings'; interface IUiSettingsContext @@ -67,60 +74,9 @@ const ALL_CSS_VARS = [ '--ui-dark-bg', '--ui-dark-border' ]; -const sendComposer = (composer: any): void => -{ - try - { - GetCommunication()?.connection?.send(composer); - } - catch(e) - {} -}; - export const UiSettingsProvider: FC = ({ children }) => { const [ settings, setSettings ] = useState(loadSettings); - const serverSaveTimerRef = useRef>(null); - - // Carica dal server al mount e ascolta risposta - useEffect(() => - { - sendComposer(new UiSettingsLoadComposer()); - - const connection = GetCommunication()?.connection; - - if(!connection) return; - - const handler = (event: any) => - { - try - { - const parser = event.getParser(); - const json = parser?.settingsJson; - - if(json && json !== '{}') - { - const serverSettings = { ...DEFAULT_UI_SETTINGS, ...JSON.parse(json) }; - setSettings(serverSettings); - saveSettings(serverSettings); - } - } - catch(e) - {} - }; - - connection.addMessageEvent(new UiSettingsDataEvent(handler)); - }, []); - - const syncToServer = useCallback((settingsToSave: IUiSettings) => - { - if(serverSaveTimerRef.current) clearTimeout(serverSaveTimerRef.current); - - serverSaveTimerRef.current = setTimeout(() => - { - sendComposer(new UiSettingsSaveComposer(JSON.stringify(settingsToSave))); - }, 1000); - }, []); const updateSettings = useCallback((partial: Partial) => { @@ -128,18 +84,16 @@ export const UiSettingsProvider: FC = ({ children }) => { const updated = { ...prev, ...partial }; saveSettings(updated); - syncToServer(updated); return updated; }); - }, [ syncToServer ]); + }, []); const resetSettings = useCallback(() => { setSettings({ ...DEFAULT_UI_SETTINGS }); saveSettings(DEFAULT_UI_SETTINGS); - syncToServer(DEFAULT_UI_SETTINGS); - }, [ syncToServer ]); + }, []); const getHeaderStyle = useCallback((): React.CSSProperties => {