diff --git a/BestList.tsx b/BestList.tsx index 94c4aff..dca9193 100644 --- a/BestList.tsx +++ b/BestList.tsx @@ -18,7 +18,7 @@ export default function BestList() { const refresh = useCallback(async () => { const weights = await getBestWeights(search); - console.log(BestList.name, {weights}); + console.log(`${BestList.name}.refresh:`, {length: weights.length}); let newBest: Set[] = []; for (const set of weights) { const reps = await getBestReps(set.name, set.weight); diff --git a/EditWorkout.tsx b/EditWorkout.tsx index b16b56f..594c2d6 100644 --- a/EditWorkout.tsx +++ b/EditWorkout.tsx @@ -5,7 +5,7 @@ import { useRoute, } from '@react-navigation/native'; import React, {useCallback, useState} from 'react'; -import {Pressable, ScrollView} from 'react-native'; +import {Pressable, ScrollView, View} from 'react-native'; import DocumentPicker from 'react-native-document-picker'; import {Button, Card, IconButton} from 'react-native-paper'; import {MARGIN, PADDING} from './constants'; @@ -13,10 +13,13 @@ import MassiveInput from './MassiveInput'; import {updateWorkouts} from './plan.service'; import Set from './set'; import {addSet, getSets, updateSetImage, updateSetName} from './set.service'; +import Workout from './workout'; +import {addWorkout, getWorkout, updateSteps} from './workout.service'; import {WorkoutsPageParams} from './WorkoutsPage'; export default function EditWorkout() { const [name, setName] = useState(''); + const [steps, setSteps] = useState(''); const [uri, setUri] = useState(); const {params} = useRoute>(); const navigation = useNavigation(); @@ -30,10 +33,11 @@ export default function EditWorkout() { headerRight: null, title: params.value.name ? params.value.name : 'New workout', }); - if (params.value.name) - getSets({search: params.value.name, limit: 1, offset: 0}).then(sets => - setUri(sets[0]?.image), - ); + if (!params.value.name) return; + getSets({search: params.value.name, limit: 1, offset: 0}).then(sets => + setUri(sets[0]?.image), + ); + getWorkout(params.value.name).then(workout => setSteps(workout.steps)); }, [navigation, params.value.name]), ); @@ -42,19 +46,22 @@ export default function EditWorkout() { params: params.value.name, name, uri, + steps, }); if (name) { await updateSetName(params.value.name, name); await updateWorkouts(params.value.name, name); } if (uri) await updateSetImage(params.value.name, uri); + if (steps) await updateSteps(params.value.name, steps); navigation.goBack(); - }, [navigation, params.value.name, name, uri]); + }, [navigation, params.value.name, name, uri, steps]); const add = useCallback(async () => { - await addSet({name, reps: 0, weight: 0, hidden: true} as Set); + await addSet({name, reps: 0, weight: 0, hidden: true, image: uri} as Set); + await addWorkout({name, steps} as Workout); navigation.goBack(); - }, [navigation, name]); + }, [navigation, name, steps, uri]); const save = useCallback(async () => { if (params.value.name) return update(); @@ -70,31 +77,36 @@ export default function EditWorkout() { }, []); return ( - - - {uri ? ( - - - - ) : ( - - )} - + )} + + + + - + ); } diff --git a/WorkoutList.tsx b/WorkoutList.tsx index ed02e71..a0254db 100644 --- a/WorkoutList.tsx +++ b/WorkoutList.tsx @@ -7,7 +7,7 @@ import React, {useCallback, useEffect, useState} from 'react'; import {FlatList} from 'react-native'; import {List} from 'react-native-paper'; import Page from './Page'; -import {getWorkouts} from './set.service'; +import {getDistinctSets} from './set.service'; import SetList from './SetList'; import Workout from './workout'; import WorkoutItem from './WorkoutItem'; @@ -23,7 +23,7 @@ export default function WorkoutList() { const navigation = useNavigation>(); const refresh = useCallback(async () => { - const newWorkouts = await getWorkouts({ + const newWorkouts = await getDistinctSets({ search: `%${search}%`, limit, offset: 0, @@ -59,7 +59,7 @@ export default function WorkoutList() { newOffset, search, }); - const newWorkouts = await getWorkouts({ + const newWorkouts = await getDistinctSets({ search: `%${search}%`, limit, offset: newOffset, @@ -73,7 +73,7 @@ export default function WorkoutList() { const onAdd = useCallback(async () => { navigation.navigate('EditWorkout', { - value: {name: '', sets: 3, image: ''}, + value: {name: '', sets: 3, image: '', steps: ''}, }); }, [navigation]); diff --git a/db.ts b/db.ts index 2fdab04..67e488d 100644 --- a/db.ts +++ b/db.ts @@ -71,6 +71,10 @@ const insertSettings = ` INSERT INTO settings(minutes) VALUES(3); `; +const addSteps = ` + ALTER TABLE workouts ADD COLUMN steps TEXT NULL; +`; + export let db: SQLiteDatabase; export const migrations = async () => { @@ -84,6 +88,7 @@ export const migrations = async () => { await db.executeSql(addNotify).catch(() => null); await db.executeSql(addImage).catch(() => null); await db.executeSql(addImages).catch(() => null); + await db.executeSql(addSteps).catch(() => null); const [result] = await db.executeSql(selectSettings); if (result.rows.length === 0) await db.executeSql(insertSettings); }; diff --git a/set.service.ts b/set.service.ts index 283b17f..b0f0d26 100644 --- a/set.service.ts +++ b/set.service.ts @@ -106,7 +106,7 @@ export const getNames = async (): Promise => { return values.map(value => value.name); }; -export const getWorkouts = async ({ +export const getDistinctSets = async ({ search, limit, offset, diff --git a/workout.service.ts b/workout.service.ts new file mode 100644 index 0000000..6945b6d --- /dev/null +++ b/workout.service.ts @@ -0,0 +1,27 @@ +import {db} from './db'; +import Workout from './workout'; + +export const getWorkout = async (name: string): Promise => { + const select = ` + SELECT * FROM workouts + WHERE workouts.name = ? + LIMIT 1 + `; + const [result] = await db.executeSql(select, [name]); + return result.rows.raw()[0]; +}; + +export const updateSteps = (name: string, steps: string): Promise => { + const select = ` + UPDATE workouts SET steps = ? WHERE name = ? + `; + return db.executeSql(select, [steps, name]); +}; + +export const addWorkout = (value: Workout) => { + const insert = ` + INSERT INTO workouts(name, steps) + VALUES (?, ?) + `; + return db.executeSql(insert, [value.name, value.steps]); +}; diff --git a/workout.ts b/workout.ts index a79b64a..324b638 100644 --- a/workout.ts +++ b/workout.ts @@ -2,4 +2,5 @@ export default interface Workout { name: string; sets: number; image: string; + steps: string; }