Public Access
Added registration and settings page
This commit is contained in:
1 parent
b34234caa1
commit
2b5f77f0b9
12 files changed
+905
-142
No files matched your search
@@ -0,0 +1,47 @@
|
||||
import {createContext, useContext, useEffect, useState} from 'react';
|
||||
import {useTranslation} from 'react-i18next';
|
||||
|
||||
const DARK_MODE_STORAGE_KEY = 'tbp_dark_mode';
|
||||
|
||||
const PreferencesContext = createContext(null);
|
||||
|
||||
export function PreferencesProvider({children}) {
|
||||
const {i18n} = useTranslation();
|
||||
|
||||
const [isDarkMode, setIsDarkMode] = useState(() => {
|
||||
const stored = localStorage.getItem(DARK_MODE_STORAGE_KEY);
|
||||
return stored === null ? true : stored === 'true';
|
||||
});
|
||||
|
||||
useEffect(() => {
|
||||
if (isDarkMode) {
|
||||
document.documentElement.classList.add('dark');
|
||||
} else {
|
||||
document.documentElement.classList.remove('dark');
|
||||
}
|
||||
localStorage.setItem(DARK_MODE_STORAGE_KEY, String(isDarkMode));
|
||||
}, [isDarkMode]);
|
||||
|
||||
const setLanguage = (lang) => i18n.changeLanguage(lang);
|
||||
|
||||
return (
|
||||
<PreferencesContext.Provider
|
||||
value={{
|
||||
isDarkMode,
|
||||
setDarkMode: setIsDarkMode,
|
||||
language: i18n.language,
|
||||
setLanguage,
|
||||
}}
|
||||
>
|
||||
{children}
|
||||
</PreferencesContext.Provider>
|
||||
);
|
||||
}
|
||||
|
||||
export function usePreferences() {
|
||||
const ctx = useContext(PreferencesContext);
|
||||
if (!ctx) {
|
||||
throw new Error('usePreferences must be used inside <PreferencesProvider>');
|
||||
}
|
||||
return ctx;
|
||||
}
|
||||
Reference in new issue
Block a user