2022-09-25 04:49:26 +00:00
|
|
|
import {createDrawerNavigator} from '@react-navigation/drawer';
|
2022-09-24 01:57:51 +00:00
|
|
|
import React, {useContext, useEffect, useState} from 'react';
|
2022-07-15 04:34:06 +00:00
|
|
|
import {useColorScheme} from 'react-native';
|
|
|
|
import {IconButton} from 'react-native-paper';
|
2022-09-25 04:49:26 +00:00
|
|
|
import {CustomTheme} from './App';
|
2022-07-15 04:34:06 +00:00
|
|
|
import BestPage from './BestPage';
|
2022-09-23 01:52:33 +00:00
|
|
|
import {runMigrations} from './db';
|
2022-09-25 04:49:26 +00:00
|
|
|
import {DrawerParamList} from './drawer-param-list';
|
2022-07-15 04:34:06 +00:00
|
|
|
import HomePage from './HomePage';
|
|
|
|
import PlanPage from './PlanPage';
|
2022-09-24 03:29:24 +00:00
|
|
|
import Route from './route';
|
2022-10-01 03:01:07 +00:00
|
|
|
import Settings from './settings';
|
|
|
|
import {getSettings} from './settings.service';
|
2022-07-15 04:34:06 +00:00
|
|
|
import SettingsPage from './SettingsPage';
|
2022-10-01 03:01:07 +00:00
|
|
|
import {SettingsContext} from './use-settings';
|
2022-08-26 03:10:28 +00:00
|
|
|
import WorkoutsPage from './WorkoutsPage';
|
2022-07-15 04:34:06 +00:00
|
|
|
|
2022-09-25 04:49:26 +00:00
|
|
|
const Drawer = createDrawerNavigator<DrawerParamList>();
|
|
|
|
|
2022-08-30 11:21:25 +00:00
|
|
|
export default function Routes() {
|
2022-10-01 03:01:07 +00:00
|
|
|
const [settings, setSettings] = useState<Settings>();
|
2022-07-15 04:34:06 +00:00
|
|
|
const dark = useColorScheme() === 'dark';
|
2022-09-24 01:57:51 +00:00
|
|
|
const {setColor} = useContext(CustomTheme);
|
2022-07-15 04:34:06 +00:00
|
|
|
|
2022-08-30 11:21:25 +00:00
|
|
|
useEffect(() => {
|
2022-10-01 03:01:07 +00:00
|
|
|
runMigrations().then(async () => {
|
|
|
|
const gotSettings = await getSettings();
|
|
|
|
setSettings(gotSettings);
|
|
|
|
if (gotSettings.color) setColor(gotSettings.color);
|
|
|
|
});
|
2022-09-24 01:57:51 +00:00
|
|
|
}, [setColor]);
|
2022-08-30 11:21:25 +00:00
|
|
|
|
2022-10-01 03:01:07 +00:00
|
|
|
if (!settings) return null;
|
2022-07-15 04:34:06 +00:00
|
|
|
|
|
|
|
const routes: Route[] = [
|
|
|
|
{name: 'Home', component: HomePage, icon: 'home'},
|
2022-09-26 23:45:13 +00:00
|
|
|
{name: 'Plans', component: PlanPage, icon: 'event'},
|
|
|
|
{name: 'Best', component: BestPage, icon: 'insights'},
|
|
|
|
{name: 'Workouts', component: WorkoutsPage, icon: 'fitness-center'},
|
2022-07-15 04:34:06 +00:00
|
|
|
{name: 'Settings', component: SettingsPage, icon: 'settings'},
|
|
|
|
];
|
|
|
|
|
|
|
|
return (
|
2022-10-01 03:01:07 +00:00
|
|
|
<SettingsContext.Provider value={{settings, setSettings}}>
|
|
|
|
<Drawer.Navigator
|
|
|
|
screenOptions={{
|
|
|
|
headerTintColor: dark ? 'white' : 'black',
|
|
|
|
swipeEdgeWidth: 1000,
|
|
|
|
}}>
|
|
|
|
{routes.map(route => (
|
|
|
|
<Drawer.Screen
|
|
|
|
key={route.name}
|
|
|
|
name={route.name}
|
|
|
|
component={route.component}
|
|
|
|
options={{
|
|
|
|
drawerIcon: () => <IconButton icon={route.icon} />,
|
|
|
|
}}
|
|
|
|
/>
|
|
|
|
))}
|
|
|
|
</Drawer.Navigator>
|
|
|
|
</SettingsContext.Provider>
|
2022-07-15 04:34:06 +00:00
|
|
|
);
|
|
|
|
}
|