Files
my-links/inertia/contexts/dark_theme_context.tsx
Sonny 243984ca66 fix: theme persistence
save user theme preferences  in session instead of localStorage
2024-06-02 23:59:57 +02:00

45 lines
1.0 KiB
TypeScript

import { usePage } from '@inertiajs/react';
import { ReactNode, createContext, useEffect, useState } from 'react';
import { makeRequest } from '~/lib/request';
const LS_KEY = 'dark_theme';
export const DarkThemeContext = createContext({
isDarkTheme: true,
toggleDarkTheme: (_value: boolean) => {},
});
export default function DarkThemeContextProvider({
children,
}: {
children: ReactNode;
}) {
const { preferDarkTheme } = usePage<{ preferDarkTheme: boolean }>().props;
const [isDarkTheme, setDarkTheme] = useState<boolean>(preferDarkTheme);
const toggleDarkTheme = (value: boolean) => {
setDarkTheme(value);
makeRequest({
method: 'POST',
url: '/user/theme',
body: {
preferDarkTheme: value,
},
});
};
useEffect(() => {
localStorage.setItem(LS_KEY, String(isDarkTheme));
}, [isDarkTheme]);
return (
<DarkThemeContext.Provider
value={{
isDarkTheme,
toggleDarkTheme,
}}
>
{children}
</DarkThemeContext.Provider>
);
}