import {createDrawerNavigator} from '@react-navigation/drawer'; import { DarkTheme as NavigationDarkTheme, DefaultTheme as NavigationDefaultTheme, NavigationContainer, } from '@react-navigation/native'; import React, {useEffect, useState} from 'react'; import {StatusBar, useColorScheme} from 'react-native'; import { DarkTheme as PaperDarkTheme, DefaultTheme as PaperDefaultTheme, Provider, Snackbar, } from 'react-native-paper'; import {SQLiteDatabase} from 'react-native-sqlite-storage'; import Ionicon from 'react-native-vector-icons/Ionicons'; import {addSound, createPlans, createSets, createSettings, getDb} from './db'; import Routes from './Routes'; export const Drawer = createDrawerNavigator(); export type DrawerParamList = { Home: {}; Settings: {}; Best: {}; Plans: {}; }; export const DatabaseContext = React.createContext({} as any); export const SnackbarContext = React.createContext<{ toast: (value: string, timeout: number) => void; }>({toast: () => null}); const CombinedDefaultTheme = { ...PaperDefaultTheme, ...NavigationDefaultTheme, colors: { ...PaperDefaultTheme.colors, ...NavigationDefaultTheme.colors, }, }; const CombinedDarkTheme = { ...PaperDarkTheme, ...NavigationDarkTheme, colors: { ...PaperDarkTheme.colors, ...NavigationDarkTheme.colors, }, }; const App = () => { const [db, setDb] = useState(null); const [snackbar, setSnackbar] = useState(''); const dark = useColorScheme() === 'dark'; useEffect(() => { const init = async () => { const _db = await getDb(); await _db.executeSql(createPlans); await _db.executeSql(createSets); await _db.executeSql(createSettings); await _db.executeSql(addSound).catch(() => null); setDb(_db); const [result] = await _db.executeSql(`SELECT * FROM settings LIMIT 1`); if (result.rows.length === 0) return _db.executeSql(` INSERT INTO settings(minutes,seconds,alarm,vibrate,predict,sets) VALUES(3,30,false,true,true,3); `); }; init(); }, []); const toast = (value: string, timeout: number) => { setSnackbar(value); setTimeout(() => setSnackbar(''), timeout); }; return ( }}> setSnackbar('')} visible={!!snackbar} action={{ label: 'Close', onPress: () => setSnackbar(''), color: dark ? CombinedDarkTheme.colors.primary : CombinedDefaultTheme.colors.primary, }}> {snackbar} ); }; export default App;