Remove redundant fetching of workout in EditWorkout

This commit is contained in:
Brandon Presley 2022-09-24 14:48:52 +12:00
parent 5c4e1964b0
commit fa56d48c25
6 changed files with 24 additions and 42 deletions

View File

@ -12,18 +12,18 @@ import ConfirmDialog from './ConfirmDialog';
import {MARGIN, PADDING} from './constants'; import {MARGIN, PADDING} from './constants';
import MassiveInput from './MassiveInput'; import MassiveInput from './MassiveInput';
import {updatePlanWorkouts} from './plan.service'; import {updatePlanWorkouts} from './plan.service';
import {addSet, getSet, updateManySet, updateSetImage} from './set.service'; import {addSet, updateManySet, updateSetImage} from './set.service';
import {WorkoutsPageParams} from './WorkoutsPage'; import {WorkoutsPageParams} from './WorkoutsPage';
export default function EditWorkout() { export default function EditWorkout() {
const {params} = useRoute<RouteProp<WorkoutsPageParams, 'EditWorkout'>>(); const {params} = useRoute<RouteProp<WorkoutsPageParams, 'EditWorkout'>>();
const [name, setName] = useState(params.value.name);
const [removeImage, setRemoveImage] = useState(false); const [removeImage, setRemoveImage] = useState(false);
const [showRemove, setShowRemove] = useState(false); const [showRemove, setShowRemove] = useState(false);
const [steps, setSteps] = useState(''); const [name, setName] = useState(params.value.name);
const [uri, setUri] = useState<string>(); const [steps, setSteps] = useState(params.value.steps);
const [minutes, setMinutes] = useState(''); const [uri, setUri] = useState(params.value.image);
const [seconds, setSeconds] = useState(''); const [minutes, setMinutes] = useState(params.value.minutes?.toString());
const [seconds, setSeconds] = useState(params.value.seconds?.toString());
const [sets, setSets] = useState(''); const [sets, setSets] = useState('');
const navigation = useNavigation(); const navigation = useNavigation();
@ -37,15 +37,6 @@ export default function EditWorkout() {
title: params.value.name || 'New workout', title: params.value.name || 'New workout',
}); });
if (!name) return; if (!name) return;
getSet(name).then(set => {
console.log(`${EditWorkout.name}.focus`, {set, name});
if (!set) return;
setUri(set.image);
setMinutes(set.minutes?.toString() ?? '3');
setSeconds(set.seconds?.toString() ?? '30');
setSets(set.sets?.toString() ?? '3');
setSteps(set.steps ?? '');
});
}, [navigation, name, params.value.name]), }, [navigation, name, params.value.name]),
); );
@ -54,8 +45,8 @@ export default function EditWorkout() {
oldName: params.value.name, oldName: params.value.name,
newName: name || params.value.name, newName: name || params.value.name,
sets, sets,
seconds, seconds: seconds?.toString() ?? '30',
minutes, minutes: minutes?.toString() ?? '3',
steps, steps,
}); });
await updatePlanWorkouts(params.value.name, name || params.value.name); await updatePlanWorkouts(params.value.name, name || params.value.name);
@ -70,9 +61,9 @@ export default function EditWorkout() {
weight: 0, weight: 0,
hidden: true, hidden: true,
image: uri, image: uri,
minutes: +minutes, minutes: minutes ? +minutes : 3,
seconds: +seconds, seconds: seconds ? +seconds : 30,
sets: +sets, sets: sets ? +sets : 3,
steps, steps,
}); });
navigation.goBack(); navigation.goBack();

View File

@ -3,15 +3,15 @@ import React, {useCallback, useState} from 'react';
import {GestureResponderEvent, Image} from 'react-native'; import {GestureResponderEvent, Image} from 'react-native';
import {List, Menu, Text} from 'react-native-paper'; import {List, Menu, Text} from 'react-native-paper';
import ConfirmDialog from './ConfirmDialog'; import ConfirmDialog from './ConfirmDialog';
import Set from './set';
import {deleteSetsBy} from './set.service'; import {deleteSetsBy} from './set.service';
import Workout from './workout';
import {WorkoutsPageParams} from './WorkoutsPage'; import {WorkoutsPageParams} from './WorkoutsPage';
export default function WorkoutItem({ export default function WorkoutItem({
item, item,
onRemoved, onRemoved,
}: { }: {
item: Workout; item: Set;
onRemoved: () => void; onRemoved: () => void;
}) { }) {
const [showMenu, setShowMenu] = useState(false); const [showMenu, setShowMenu] = useState(false);
@ -33,8 +33,8 @@ export default function WorkoutItem({
[setShowMenu, setAnchor], [setShowMenu, setAnchor],
); );
const minutes = item.minutes.toString().padStart(2, '0'); const minutes = item.minutes?.toString().padStart(2, '0');
const seconds = item.seconds.toString().padStart(2, '0'); const seconds = item.seconds?.toString().padStart(2, '0');
return ( return (
<> <>

View File

@ -7,16 +7,16 @@ import React, {useCallback, useEffect, useState} from 'react';
import {FlatList} from 'react-native'; import {FlatList} from 'react-native';
import {List} from 'react-native-paper'; import {List} from 'react-native-paper';
import Page from './Page'; import Page from './Page';
import Set from './set';
import {getDistinctSets} from './set.service'; import {getDistinctSets} from './set.service';
import SetList from './SetList'; import SetList from './SetList';
import Workout from './workout';
import WorkoutItem from './WorkoutItem'; import WorkoutItem from './WorkoutItem';
import {WorkoutsPageParams} from './WorkoutsPage'; import {WorkoutsPageParams} from './WorkoutsPage';
const limit = 15; const limit = 15;
export default function WorkoutList() { export default function WorkoutList() {
const [workouts, setWorkouts] = useState<Workout[]>(); const [workouts, setWorkouts] = useState<Set[]>();
const [offset, setOffset] = useState(0); const [offset, setOffset] = useState(0);
const [search, setSearch] = useState(''); const [search, setSearch] = useState('');
const [end, setEnd] = useState(false); const [end, setEnd] = useState(false);
@ -44,7 +44,7 @@ export default function WorkoutList() {
); );
const renderItem = useCallback( const renderItem = useCallback(
({item}: {item: Workout}) => ( ({item}: {item: Set}) => (
<WorkoutItem item={item} key={item.name} onRemoved={refresh} /> <WorkoutItem item={item} key={item.name} onRemoved={refresh} />
), ),
[refresh], [refresh],
@ -73,7 +73,7 @@ export default function WorkoutList() {
const onAdd = useCallback(async () => { const onAdd = useCallback(async () => {
navigation.navigate('EditWorkout', { navigation.navigate('EditWorkout', {
value: {name: '', sets: 3, image: '', steps: ''} as Workout, value: {name: '', sets: 3, image: '', steps: '', reps: 0, weight: 0},
}); });
}, [navigation]); }, [navigation]);

View File

@ -5,13 +5,13 @@ import React from 'react';
import {IconButton} from 'react-native-paper'; import {IconButton} from 'react-native-paper';
import {DrawerParamList} from './App'; import {DrawerParamList} from './App';
import EditWorkout from './EditWorkout'; import EditWorkout from './EditWorkout';
import Workout from './workout'; import Set from './set';
import WorkoutList from './WorkoutList'; import WorkoutList from './WorkoutList';
export type WorkoutsPageParams = { export type WorkoutsPageParams = {
WorkoutList: {}; WorkoutList: {};
EditWorkout: { EditWorkout: {
value: Workout; value: Set;
}; };
}; };
const Stack = createStackNavigator<WorkoutsPageParams>(); const Stack = createStackNavigator<WorkoutsPageParams>();

View File

@ -1,6 +1,5 @@
import {db} from './db'; import {db} from './db';
import Set from './set'; import Set from './set';
import Workout from './workout';
export const updateSet = async (value: Set) => { export const updateSet = async (value: Set) => {
const update = ` const update = `
@ -115,7 +114,7 @@ export const updateManySet = async ({
minutes: string; minutes: string;
seconds: string; seconds: string;
sets: string; sets: string;
steps: string; steps?: string;
}) => { }) => {
const update = ` const update = `
UPDATE sets SET name = ?, minutes = ?, seconds = ?, sets = ?, steps = ? UPDATE sets SET name = ?, minutes = ?, seconds = ?, sets = ?, steps = ?
@ -146,9 +145,9 @@ export const getDistinctSets = async ({
search, search,
limit, limit,
offset, offset,
}: PageParams): Promise<Workout[]> => { }: PageParams): Promise<Set[]> => {
const select = ` const select = `
SELECT DISTINCT name, image, sets, minutes, seconds SELECT name, image, sets, minutes, seconds, steps
FROM sets FROM sets
WHERE sets.name LIKE ? WHERE sets.name LIKE ?
GROUP BY sets.name GROUP BY sets.name

View File

@ -1,8 +0,0 @@
export default interface Workout {
name: string;
sets: number;
minutes: number;
seconds: number;
image: string;
steps: string;
}