2022-06-30 06:50:52 +00:00
|
|
|
import {
|
2022-07-15 06:06:33 +00:00
|
|
|
DarkTheme as NavigationDarkTheme,
|
|
|
|
DefaultTheme as NavigationDefaultTheme,
|
2022-07-03 01:50:01 +00:00
|
|
|
NavigationContainer,
|
2022-10-31 04:22:08 +00:00
|
|
|
} from '@react-navigation/native'
|
|
|
|
import {useEffect, useMemo, useState} from 'react'
|
|
|
|
import {useColorScheme} from 'react-native'
|
2022-07-06 09:03:56 +00:00
|
|
|
import {
|
2022-07-15 06:06:33 +00:00
|
|
|
DarkTheme as PaperDarkTheme,
|
|
|
|
DefaultTheme as PaperDefaultTheme,
|
2022-10-29 23:56:58 +00:00
|
|
|
Provider as PaperProvider,
|
2022-10-31 04:22:08 +00:00
|
|
|
} from 'react-native-paper'
|
|
|
|
import MaterialIcon from 'react-native-vector-icons/MaterialIcons'
|
|
|
|
import {lightColors} from './colors'
|
2022-10-31 05:16:11 +00:00
|
|
|
import {AppDataSource} from './data-source'
|
|
|
|
import {settingsRepo} from './db'
|
2022-10-31 04:22:08 +00:00
|
|
|
import MassiveSnack from './MassiveSnack'
|
|
|
|
import Routes from './Routes'
|
|
|
|
import Settings from './settings'
|
2022-10-31 08:32:33 +00:00
|
|
|
import {defaultSettings, SettingsContext} from './use-settings'
|
2022-07-03 01:50:01 +00:00
|
|
|
|
2022-08-26 01:54:51 +00:00
|
|
|
export const CombinedDefaultTheme = {
|
2022-07-15 06:06:33 +00:00
|
|
|
...NavigationDefaultTheme,
|
2022-09-24 03:59:52 +00:00
|
|
|
...PaperDefaultTheme,
|
2022-07-15 06:06:33 +00:00
|
|
|
colors: {
|
|
|
|
...NavigationDefaultTheme.colors,
|
2022-09-24 03:59:52 +00:00
|
|
|
...PaperDefaultTheme.colors,
|
2022-07-15 06:06:33 +00:00
|
|
|
},
|
2022-10-31 04:22:08 +00:00
|
|
|
}
|
2022-10-14 04:24:02 +00:00
|
|
|
|
2022-08-26 01:54:51 +00:00
|
|
|
export const CombinedDarkTheme = {
|
2022-07-15 06:06:33 +00:00
|
|
|
...NavigationDarkTheme,
|
2022-09-24 03:59:52 +00:00
|
|
|
...PaperDarkTheme,
|
2022-07-15 06:06:33 +00:00
|
|
|
colors: {
|
|
|
|
...NavigationDarkTheme.colors,
|
2022-09-24 03:59:52 +00:00
|
|
|
...PaperDarkTheme.colors,
|
2022-09-26 23:19:19 +00:00
|
|
|
primary: lightColors[0].hex,
|
|
|
|
background: '#0E0E0E',
|
2022-07-15 06:06:33 +00:00
|
|
|
},
|
2022-10-31 04:22:08 +00:00
|
|
|
}
|
2022-07-15 06:06:33 +00:00
|
|
|
|
2022-07-01 01:42:42 +00:00
|
|
|
const App = () => {
|
2022-10-31 04:22:08 +00:00
|
|
|
const isDark = useColorScheme() === 'dark'
|
2022-10-31 08:00:10 +00:00
|
|
|
const [initialized, setInitialized] = useState(false)
|
2022-10-31 08:32:33 +00:00
|
|
|
const [settings, setSettings] = useState<Settings>({
|
|
|
|
...defaultSettings,
|
|
|
|
color: isDark
|
|
|
|
? CombinedDarkTheme.colors.primary
|
|
|
|
: CombinedDefaultTheme.colors.primary,
|
|
|
|
})
|
2022-10-04 01:35:56 +00:00
|
|
|
|
|
|
|
useEffect(() => {
|
2022-10-31 05:16:11 +00:00
|
|
|
AppDataSource.initialize().then(async () => {
|
2022-10-31 04:22:08 +00:00
|
|
|
const gotSettings = await settingsRepo.findOne({where: {}})
|
2022-10-31 05:16:11 +00:00
|
|
|
console.log(`${App.name}.useEffect:`, {gotSettings})
|
2022-10-31 04:22:08 +00:00
|
|
|
setSettings(gotSettings)
|
2022-10-31 08:00:10 +00:00
|
|
|
setInitialized(true)
|
2022-10-31 04:22:08 +00:00
|
|
|
})
|
2022-10-31 08:32:33 +00:00
|
|
|
}, [])
|
2022-10-04 01:35:56 +00:00
|
|
|
|
|
|
|
const theme = useMemo(() => {
|
2022-10-31 08:32:33 +00:00
|
|
|
const darkTheme = settings?.color
|
|
|
|
? {
|
|
|
|
...CombinedDarkTheme,
|
|
|
|
colors: {...CombinedDarkTheme.colors, primary: settings.color},
|
|
|
|
}
|
|
|
|
: CombinedDarkTheme
|
|
|
|
const lightTheme = settings?.color
|
|
|
|
? {
|
|
|
|
...CombinedDefaultTheme,
|
|
|
|
colors: {...CombinedDefaultTheme.colors, primary: settings.color},
|
|
|
|
}
|
|
|
|
: CombinedDefaultTheme
|
2022-10-31 04:22:08 +00:00
|
|
|
let value = isDark ? darkTheme : lightTheme
|
|
|
|
if (settings?.theme === 'dark') value = darkTheme
|
|
|
|
else if (settings?.theme === 'light') value = lightTheme
|
|
|
|
return value
|
2022-10-31 08:32:33 +00:00
|
|
|
}, [isDark, settings?.theme, settings?.color])
|
2022-07-06 09:03:56 +00:00
|
|
|
|
2022-10-31 08:00:10 +00:00
|
|
|
const settingsContext = useMemo(
|
|
|
|
() => ({settings, setSettings}),
|
|
|
|
[settings, setSettings],
|
|
|
|
)
|
|
|
|
|
2022-06-30 06:50:52 +00:00
|
|
|
return (
|
2022-10-31 08:32:33 +00:00
|
|
|
<PaperProvider
|
|
|
|
theme={theme}
|
|
|
|
settings={{icon: props => <MaterialIcon {...props} />}}>
|
|
|
|
<NavigationContainer theme={theme}>
|
|
|
|
<MassiveSnack>
|
|
|
|
{initialized && (
|
|
|
|
<SettingsContext.Provider value={settingsContext}>
|
|
|
|
<Routes />
|
|
|
|
</SettingsContext.Provider>
|
|
|
|
)}
|
|
|
|
</MassiveSnack>
|
|
|
|
</NavigationContainer>
|
|
|
|
</PaperProvider>
|
2022-10-31 04:22:08 +00:00
|
|
|
)
|
|
|
|
}
|
2022-06-30 06:50:52 +00:00
|
|
|
|
2022-10-31 04:22:08 +00:00
|
|
|
export default App
|