2022-07-06 09:03:56 +00:00
|
|
|
import {useAsyncStorage} from '@react-native-async-storage/async-storage';
|
2022-07-04 04:03:48 +00:00
|
|
|
import {createMaterialTopTabNavigator} from '@react-navigation/material-top-tabs';
|
2022-06-30 06:50:52 +00:00
|
|
|
import {
|
2022-07-03 01:50:01 +00:00
|
|
|
DarkTheme,
|
|
|
|
DefaultTheme,
|
|
|
|
NavigationContainer,
|
|
|
|
} from '@react-navigation/native';
|
2022-07-07 02:18:38 +00:00
|
|
|
import React, {useEffect, useState} from 'react';
|
2022-07-05 12:06:16 +00:00
|
|
|
import {StatusBar, useColorScheme} from 'react-native';
|
2022-07-06 09:03:56 +00:00
|
|
|
import {
|
|
|
|
DarkTheme as DarkThemePaper,
|
|
|
|
DefaultTheme as DefaultThemePaper,
|
|
|
|
Provider,
|
|
|
|
} from 'react-native-paper';
|
2022-07-07 02:18:38 +00:00
|
|
|
import {SQLiteDatabase} from 'react-native-sqlite-storage';
|
|
|
|
import Ionicon from 'react-native-vector-icons/Ionicons';
|
|
|
|
import {createPlans, createSets, getDb} from './db';
|
2022-07-03 01:50:01 +00:00
|
|
|
import Exercises from './Exercises';
|
|
|
|
import Home from './Home';
|
2022-07-06 05:40:53 +00:00
|
|
|
import Plans from './Plans';
|
2022-07-03 01:50:01 +00:00
|
|
|
import Settings from './Settings';
|
|
|
|
|
2022-07-04 04:03:48 +00:00
|
|
|
const Tab = createMaterialTopTabNavigator<RootStackParamList>();
|
2022-07-03 01:50:01 +00:00
|
|
|
export type RootStackParamList = {
|
|
|
|
Home: {};
|
|
|
|
Settings: {};
|
2022-07-04 04:03:48 +00:00
|
|
|
Exercises: {};
|
2022-07-06 05:40:53 +00:00
|
|
|
Plans: {};
|
2022-07-03 01:50:01 +00:00
|
|
|
};
|
|
|
|
|
2022-07-07 02:18:38 +00:00
|
|
|
export const DatabaseContext = React.createContext<SQLiteDatabase>({} as any);
|
2022-06-30 06:50:52 +00:00
|
|
|
|
2022-07-01 01:42:42 +00:00
|
|
|
const App = () => {
|
2022-07-07 02:18:38 +00:00
|
|
|
const [db, setDb] = useState<SQLiteDatabase | null>(null);
|
2022-07-01 01:42:42 +00:00
|
|
|
const dark = useColorScheme() === 'dark';
|
2022-07-06 09:03:56 +00:00
|
|
|
const {getItem: getMinutes, setItem: setMinutes} = useAsyncStorage('minutes');
|
|
|
|
const {getItem: getSeconds, setItem: setSeconds} = useAsyncStorage('seconds');
|
|
|
|
const {getItem: getAlarmEnabled, setItem: setAlarmEnabled} =
|
|
|
|
useAsyncStorage('alarmEnabled');
|
|
|
|
|
2022-07-07 02:18:38 +00:00
|
|
|
const init = async () => {
|
|
|
|
const gotDb = await getDb();
|
|
|
|
await gotDb.executeSql(createPlans);
|
|
|
|
await gotDb.executeSql(createSets);
|
|
|
|
setDb(gotDb);
|
2022-07-06 09:03:56 +00:00
|
|
|
const minutes = await getMinutes();
|
|
|
|
if (minutes === null) await setMinutes('3');
|
|
|
|
const seconds = await getSeconds();
|
|
|
|
if (seconds === null) await setSeconds('30');
|
|
|
|
const alarmEnabled = await getAlarmEnabled();
|
|
|
|
if (alarmEnabled === null) await setAlarmEnabled('false');
|
|
|
|
};
|
2022-06-30 06:50:52 +00:00
|
|
|
|
2022-07-03 01:50:01 +00:00
|
|
|
useEffect(() => {
|
2022-07-07 02:18:38 +00:00
|
|
|
init();
|
2022-07-03 01:50:01 +00:00
|
|
|
}, []);
|
2022-06-30 06:50:52 +00:00
|
|
|
|
|
|
|
return (
|
2022-07-06 09:03:56 +00:00
|
|
|
<Provider
|
|
|
|
theme={dark ? DarkThemePaper : DefaultThemePaper}
|
|
|
|
settings={{icon: props => <Ionicon {...props} />}}>
|
|
|
|
<NavigationContainer theme={dark ? DarkTheme : DefaultTheme}>
|
|
|
|
<StatusBar barStyle={dark ? 'light-content' : 'dark-content'} />
|
2022-07-07 02:18:38 +00:00
|
|
|
{db && (
|
|
|
|
<DatabaseContext.Provider value={db}>
|
|
|
|
<Tab.Navigator>
|
|
|
|
<Tab.Screen name="Home" component={Home} />
|
|
|
|
<Tab.Screen name="Plans" component={Plans} />
|
|
|
|
<Tab.Screen name="Exercises" component={Exercises} />
|
|
|
|
<Tab.Screen name="Settings" component={Settings} />
|
|
|
|
</Tab.Navigator>
|
|
|
|
</DatabaseContext.Provider>
|
|
|
|
)}
|
2022-07-06 09:03:56 +00:00
|
|
|
</NavigationContainer>
|
|
|
|
</Provider>
|
2022-06-30 06:50:52 +00:00
|
|
|
);
|
|
|
|
};
|
|
|
|
|
|
|
|
export default App;
|