Files
Blake KaufmanandGitHub 073f98c00c Add crash analytics for easier maintenance (#97)
* adding crashlytics package

* creating default crashlytics config options

* creating sheild icon for crash settings page

* adding crash reporting settings storage object

* created crash reports page

* created crash report helper functions

* adding crashlytics to login path

* fixing skip crash bug

* adding crash logs

* adding more crash logs

* created manually force crash helper function

* xcode fills
2025-04-11 09:17:21 -04:00

73 lines
1.8 KiB
JavaScript

import {
createContext,
useState,
useContext,
useEffect,
useMemo,
useCallback,
} from 'react';
import {getLocalStorageItem, setLocalStorageItem} from '../app/functions';
// Initiate context
const ThemeContextManager = createContext(null);
const GlobalThemeProvider = ({children}) => {
const [theme, setTheme] = useState(null);
const [darkModeType, setDarkModeType] = useState(null);
const toggleDarkModeType = useCallback(param => {
const mode = param ? 'dim' : 'lights-out';
setLocalStorageItem('darkModeType', mode);
setDarkModeType(param);
}, []);
const toggleTheme = useCallback(async param => {
const mode = param ? 'light' : 'dark';
setLocalStorageItem('colorScheme', mode);
setTheme(param);
}, []);
useEffect(() => {
(async () => {
const [storedTheme, savedDarkMode] = await Promise.all([
getLocalStorageItem('colorScheme'),
getLocalStorageItem('darkModeType'),
]);
const darkModeType =
savedDarkMode === null ? true : savedDarkMode === 'dim';
const theme = storedTheme === null ? false : storedTheme !== 'dark';
toggleTheme(theme);
toggleDarkModeType(darkModeType);
})();
}, []);
const contextValue = useMemo(
() => ({
theme,
toggleTheme,
darkModeType,
toggleDarkModeType,
}),
[theme, toggleTheme, darkModeType, toggleDarkModeType],
);
return (
<ThemeContextManager.Provider value={contextValue}>
{children}
</ThemeContextManager.Provider>
);
};
function useGlobalThemeContext() {
const context = useContext(ThemeContextManager);
if (!context) {
throw new Error(
'useGlobalThemeContext must be used within a GlobalThemeProvider',
);
}
return context;
}
export {ThemeContextManager, GlobalThemeProvider, useGlobalThemeContext};