import { DarkTheme as NavigationDarkTheme, DefaultTheme as NavigationDefaultTheme, NavigationContainer, } from '@react-navigation/native'; import {useEffect, useMemo, useState} from 'react'; import {useColorScheme} from 'react-native'; import { DarkTheme as PaperDarkTheme, DefaultTheme as PaperDefaultTheme, Provider as PaperProvider, } from 'react-native-paper'; import MaterialIcon from 'react-native-vector-icons/MaterialIcons'; import {Color} from './color'; import {lightColors} from './colors'; import {runMigrations, settingsRepo} from './db'; import MassiveSnack from './MassiveSnack'; import Routes from './Routes'; import Settings from './settings'; import {SettingsContext} from './use-settings'; export const CombinedDefaultTheme = { ...NavigationDefaultTheme, ...PaperDefaultTheme, colors: { ...NavigationDefaultTheme.colors, ...PaperDefaultTheme.colors, }, }; export const CombinedDarkTheme = { ...NavigationDarkTheme, ...PaperDarkTheme, colors: { ...NavigationDarkTheme.colors, ...PaperDarkTheme.colors, primary: lightColors[0].hex, background: '#0E0E0E', }, }; const App = () => { const isDark = useColorScheme() === 'dark'; const [settings, setSettings] = useState(); const [color, setColor] = useState( isDark ? CombinedDarkTheme.colors.primary.toUpperCase() : CombinedDefaultTheme.colors.primary.toUpperCase(), ); useEffect(() => { runMigrations().then(async () => { const gotSettings = await settingsRepo.findOne({where: {}}); console.log(`${App.name}.runMigrations:`, {gotSettings}); setSettings(gotSettings); if (gotSettings.color) setColor(gotSettings.color); }); }, [setColor]); const theme = useMemo(() => { const darkTheme = { ...CombinedDarkTheme, colors: {...CombinedDarkTheme.colors, primary: color}, }; const lightTheme = { ...CombinedDefaultTheme, colors: {...CombinedDefaultTheme.colors, primary: color}, }; let value = isDark ? darkTheme : lightTheme; if (settings?.theme === 'dark') value = darkTheme; else if (settings?.theme === 'light') value = lightTheme; return value; }, [color, isDark, settings]); return ( }}> {settings && ( )} ); }; export default App;