🦉 Feature: configurable preset for users:

- twitter emoji
 - useSystemTheme
 - themeId
This commit is contained in:
2026-04-15 18:01:28 +02:00
parent 5423e8bb7a
commit 8c892f14f8
5 changed files with 39 additions and 15 deletions

View File

@@ -18,6 +18,8 @@ export type ClientConfig = {
};
hashRouter?: HashRouterConfig;
defaultSettings?: Record<string, unknown>;
};
const ClientConfigContext = createContext<ClientConfig | null>(null);

View File

@@ -12,6 +12,7 @@ import { FeatureCheck } from './FeatureCheck';
import { createRouter } from './Router';
import { ScreenSizeProvider, useScreenSize } from '../hooks/useScreenSize';
import { useCompositionEndTracking } from '../hooks/useComposingCheck';
import { ConfigSettingsApply } from '../../owl/components/ConfigSettingsApply';
const queryClient = new QueryClient();
@@ -37,6 +38,7 @@ function App() {
<ClientConfigProvider value={clientConfig}>
<QueryClientProvider client={queryClient}>
<JotaiProvider>
<ConfigSettingsApply />
<RouterProvider router={createRouter(clientConfig, screenSize)} />
</JotaiProvider>
<ReactQueryDevtools initialIsOpen={false} />

View File

@@ -83,11 +83,12 @@ const defaultSettings: Settings = {
developerTools: false,
};
export const getSettings = () => {
export const getSettings = (configDefaults?: Partial<Settings>) => {
const settings = localStorage.getItem(STORAGE_KEY);
if (settings === null) return defaultSettings;
if (settings === null) return { ...defaultSettings, ...configDefaults };
return {
...defaultSettings,
...configDefaults,
...(JSON.parse(settings) as Settings),
};
};

View File

@@ -0,0 +1,18 @@
import { useEffect, useRef } from 'react';
import { useAtom } from 'jotai';
import { useClientConfig } from '../../app/hooks/useClientConfig';
import { settingsAtom, getSettings, Settings } from '../../app/state/settings';
export function ConfigSettingsApply() {
const { defaultSettings: configDefaults } = useClientConfig();
const [, setSettings] = useAtom(settingsAtom);
const applied = useRef(false);
useEffect(() => {
if (applied.current || !configDefaults) return;
applied.current = true;
setSettings(getSettings(configDefaults as Partial<Settings>));
}, [configDefaults, setSettings]);
return null;
}