From 463852e6a6c11606a040dc85a4d2e6ae84300c3c Mon Sep 17 00:00:00 2001 From: Brandon Presley Date: Fri, 28 Oct 2022 18:59:54 +1300 Subject: [PATCH] Prevent double searching everywhere Also change variable names. Search should represent the act of searching, rather than the value being typed by the user. --- BestList.tsx | 26 +++++++++++++++----------- Page.tsx | 10 +++++----- PlanList.tsx | 30 +++++++++++++++++------------- SetForm.tsx | 2 +- SetList.tsx | 27 +++++++++++++-------------- SettingsPage.tsx | 14 +++++++------- WorkoutList.tsx | 42 +++++++++++++++++++++++++----------------- set.service.ts | 12 +++++------- 8 files changed, 88 insertions(+), 75 deletions(-) diff --git a/BestList.tsx b/BestList.tsx index ae1de94..97cf8e1 100644 --- a/BestList.tsx +++ b/BestList.tsx @@ -3,7 +3,7 @@ import { useFocusEffect, useNavigation, } from '@react-navigation/native'; -import {useCallback, useEffect, useState} from 'react'; +import {useCallback, useState} from 'react'; import {FlatList, Image} from 'react-native'; import {List} from 'react-native-paper'; import {getBestReps, getBestWeights} from './best.service'; @@ -15,12 +15,12 @@ import {useSettings} from './use-settings'; export default function BestList() { const [bests, setBests] = useState(); - const [search, setSearch] = useState(''); + const [term, setTerm] = useState(''); const navigation = useNavigation>(); const {settings} = useSettings(); - const refresh = useCallback(async () => { - const weights = await getBestWeights(search); + const refresh = useCallback(async (value: string) => { + const weights = await getBestWeights(value); console.log(`${BestList.name}.refresh:`, {length: weights.length}); let newBest: Set[] = []; for (const set of weights) { @@ -28,17 +28,21 @@ export default function BestList() { newBest.push(...reps); } setBests(newBest); - }, [search]); + }, []); useFocusEffect( useCallback(() => { - refresh(); - }, [refresh]), + refresh(term); + }, [refresh, term]), ); - useEffect(() => { - refresh(); - }, [search, refresh]); + const search = useCallback( + (value: string) => { + setTerm(value); + refresh(value); + }, + [refresh], + ); const renderItem = ({item}: {item: Set}) => ( - + {bests?.length === 0 ? ( void; - search: string; - setSearch: (value: string) => void; + term: string; + search: (value: string) => void; }) { return ( diff --git a/PlanList.tsx b/PlanList.tsx index 8522cef..81d3cc6 100644 --- a/PlanList.tsx +++ b/PlanList.tsx @@ -3,7 +3,7 @@ import { useFocusEffect, useNavigation, } from '@react-navigation/native'; -import {useCallback, useEffect, useState} from 'react'; +import {useCallback, useState} from 'react'; import {FlatList} from 'react-native'; import {List} from 'react-native-paper'; import DrawerHeader from './DrawerHeader'; @@ -14,29 +14,33 @@ import {getPlans} from './plan.service'; import PlanItem from './PlanItem'; export default function PlanList() { - const [search, setSearch] = useState(''); + const [term, setTerm] = useState(''); const [plans, setPlans] = useState(); const navigation = useNavigation>(); - const refresh = useCallback(async () => { - getPlans(search).then(setPlans); - }, [search]); + const refresh = useCallback(async (value: string) => { + getPlans(value).then(setPlans); + }, []); useFocusEffect( useCallback(() => { - refresh(); - }, [refresh]), + refresh(term); + }, [refresh, term]), ); - useEffect(() => { - refresh(); - }, [search, refresh]); + const search = useCallback( + (value: string) => { + setTerm(value); + refresh(value); + }, + [refresh], + ); const renderItem = useCallback( ({item}: {item: Plan}) => ( - + refresh(term)} /> ), - [refresh], + [refresh, term], ); const onAdd = () => @@ -45,7 +49,7 @@ export default function PlanList() { return ( <> - + {plans?.length === 0 ? ( gotSet?.image, ); console.log(`${SetForm.name}.handleSubmit:`, {image}); diff --git a/SetList.tsx b/SetList.tsx index f55e0b4..66a597c 100644 --- a/SetList.tsx +++ b/SetList.tsx @@ -20,17 +20,17 @@ export default function SetList() { const [sets, setSets] = useState(); const [set, setSet] = useState(); const [offset, setOffset] = useState(0); - const [search, setSearch] = useState(''); + const [term, setTerm] = useState(''); const [end, setEnd] = useState(false); const {settings} = useSettings(); const navigation = useNavigation>(); const refresh = useCallback( - async (term: string) => { + async (value: string) => { const todaysSet = await getToday(); if (todaysSet) setSet({...todaysSet}); const newSets = await getSets({ - search: `%${term}%`, + term: `%${value}%`, limit, offset: 0, format: settings.date || '%Y-%m-%d %H:%M', @@ -46,33 +46,32 @@ export default function SetList() { useFocusEffect( useCallback(() => { - refresh(search); - }, [refresh, search]), + refresh(term); + }, [refresh, term]), ); const renderItem = useCallback( ({item}: {item: Set}) => ( - refresh(search)} /> + refresh(term)} /> ), - [refresh, search], + [refresh, term], ); const next = useCallback(async () => { if (end) return; const newOffset = offset + limit; - console.log(`${SetList.name}.next:`, {offset, newOffset, search}); + console.log(`${SetList.name}.next:`, {offset, newOffset, term}); const newSets = await getSets({ - search: `%${search}%`, + term: `%${term}%`, limit, offset: newOffset, - format: settings.date || '%Y-%m-%d %H:%M', }); if (newSets.length === 0) return setEnd(true); if (!sets) return; setSets([...sets, ...newSets]); if (newSets.length < limit) return setEnd(true); setOffset(newOffset); - }, [search, end, offset, sets, settings.date]); + }, [term, end, offset, sets]); const onAdd = useCallback(async () => { console.log(`${SetList.name}.onAdd`, {set}); @@ -81,9 +80,9 @@ export default function SetList() { }); }, [navigation, set]); - const handleSearch = useCallback( + const search = useCallback( (value: string) => { - setSearch(value); + setTerm(value); refresh(value); }, [refresh], @@ -92,7 +91,7 @@ export default function SetList() { return ( <> - + {sets?.length === 0 ? ( - + {switches .filter(input => - input.name.toLowerCase().includes(search.toLowerCase()), + input.name.toLowerCase().includes(term.toLowerCase()), ) .map(input => ( ))} - {'theme'.includes(search.toLowerCase()) && ( + {'theme'.includes(term.toLowerCase()) && ( )} - {'color'.includes(search.toLowerCase()) && ( + {'color'.includes(term.toLowerCase()) && ( )} - {'date format'.includes(search.toLowerCase()) && ( + {'date format'.includes(term.toLowerCase()) && ( )} - {'alarm sound'.includes(search.toLowerCase()) && ( + {'alarm sound'.includes(term.toLowerCase()) && (