2022-08-30 11:21:25 +00:00
|
|
|
import React, {useEffect, useState} from 'react';
|
2022-07-15 04:34:06 +00:00
|
|
|
import {useColorScheme} from 'react-native';
|
|
|
|
import {IconButton} from 'react-native-paper';
|
|
|
|
import {SQLiteDatabase} from 'react-native-sqlite-storage';
|
2022-08-30 11:21:25 +00:00
|
|
|
import {Drawer, DrawerParamList} from './App';
|
2022-07-15 04:34:06 +00:00
|
|
|
import BestPage from './BestPage';
|
2022-08-30 11:21:25 +00:00
|
|
|
import {
|
|
|
|
addHidden,
|
|
|
|
addImage,
|
|
|
|
addNotify,
|
|
|
|
addSound,
|
|
|
|
createPlans,
|
|
|
|
createSets,
|
|
|
|
createSettings,
|
|
|
|
createWorkouts,
|
|
|
|
getDb,
|
|
|
|
} from './db';
|
2022-07-15 04:34:06 +00:00
|
|
|
import HomePage from './HomePage';
|
|
|
|
import PlanPage from './PlanPage';
|
|
|
|
import SettingsPage from './SettingsPage';
|
2022-08-26 03:10:28 +00:00
|
|
|
import WorkoutsPage from './WorkoutsPage';
|
2022-07-15 04:34:06 +00:00
|
|
|
|
|
|
|
interface Route {
|
|
|
|
name: keyof DrawerParamList;
|
|
|
|
component: React.ComponentType<any>;
|
|
|
|
icon: string;
|
|
|
|
}
|
|
|
|
|
2022-08-30 11:21:25 +00:00
|
|
|
export const DatabaseContext = React.createContext<SQLiteDatabase>(null as any);
|
|
|
|
|
|
|
|
export default function Routes() {
|
|
|
|
const [db, setDb] = useState<SQLiteDatabase | null>(null);
|
2022-07-15 04:34:06 +00:00
|
|
|
const dark = useColorScheme() === 'dark';
|
|
|
|
|
2022-08-30 11:21:25 +00:00
|
|
|
useEffect(() => {
|
|
|
|
const init = async () => {
|
|
|
|
const _db = await getDb();
|
|
|
|
try {
|
|
|
|
await _db.executeSql(createPlans);
|
|
|
|
await _db.executeSql(createSets);
|
|
|
|
await _db.executeSql(createSettings);
|
|
|
|
await _db.executeSql(createWorkouts);
|
|
|
|
await _db.executeSql(addSound).catch(() => null);
|
|
|
|
await _db.executeSql(addHidden).catch(() => null);
|
|
|
|
await _db.executeSql(addNotify).catch(() => null);
|
|
|
|
await _db.executeSql(addImage).catch(() => null);
|
|
|
|
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);
|
|
|
|
`);
|
|
|
|
} finally {
|
|
|
|
setDb(_db);
|
|
|
|
}
|
|
|
|
};
|
|
|
|
init();
|
|
|
|
}, []);
|
|
|
|
|
2022-07-15 04:34:06 +00:00
|
|
|
if (!db) return null;
|
|
|
|
|
|
|
|
const routes: Route[] = [
|
|
|
|
{name: 'Home', component: HomePage, icon: 'home'},
|
|
|
|
{name: 'Plans', component: PlanPage, icon: 'calendar'},
|
|
|
|
{name: 'Best', component: BestPage, icon: 'stats-chart'},
|
2022-08-26 03:10:28 +00:00
|
|
|
{name: 'Workouts', component: WorkoutsPage, icon: 'barbell'},
|
2022-07-15 04:34:06 +00:00
|
|
|
{name: 'Settings', component: SettingsPage, icon: 'settings'},
|
|
|
|
];
|
|
|
|
|
|
|
|
return (
|
|
|
|
<DatabaseContext.Provider value={db}>
|
|
|
|
<Drawer.Navigator
|
2022-08-22 06:03:33 +00:00
|
|
|
screenOptions={{
|
|
|
|
headerTintColor: dark ? 'white' : 'black',
|
|
|
|
swipeEdgeWidth: 1000,
|
|
|
|
}}>
|
2022-07-15 04:34:06 +00:00
|
|
|
{routes.map(route => (
|
|
|
|
<Drawer.Screen
|
|
|
|
key={route.name}
|
|
|
|
name={route.name}
|
|
|
|
component={route.component}
|
|
|
|
options={{
|
|
|
|
drawerIcon: ({focused}) => (
|
|
|
|
<IconButton
|
|
|
|
icon={focused ? route.icon : `${route.icon}-outline`}
|
|
|
|
/>
|
|
|
|
),
|
|
|
|
}}
|
|
|
|
/>
|
|
|
|
))}
|
|
|
|
</Drawer.Navigator>
|
|
|
|
</DatabaseContext.Provider>
|
|
|
|
);
|
|
|
|
}
|