Prevent searching twice on homepage first load

This commit is contained in:
Brandon Presley 2022-10-28 18:41:17 +13:00
parent e6dcd4a47e
commit 3d591f4618
1 changed files with 32 additions and 25 deletions

View File

@ -3,7 +3,7 @@ import {
useFocusEffect, useFocusEffect,
useNavigation, useNavigation,
} from '@react-navigation/native'; } from '@react-navigation/native';
import {useCallback, useEffect, useState} from 'react'; import {useCallback, 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 DrawerHeader from './DrawerHeader'; import DrawerHeader from './DrawerHeader';
@ -25,37 +25,36 @@ export default function SetList() {
const {settings} = useSettings(); const {settings} = useSettings();
const navigation = useNavigation<NavigationProp<HomePageParams>>(); const navigation = useNavigation<NavigationProp<HomePageParams>>();
const refresh = useCallback(async () => { const refresh = useCallback(
const todaysSet = await getToday(); async (term: string) => {
if (todaysSet) setSet({...todaysSet}); const todaysSet = await getToday();
const newSets = await getSets({ if (todaysSet) setSet({...todaysSet});
search: `%${search}%`, const newSets = await getSets({
limit, search: `%${term}%`,
offset: 0, limit,
format: settings.date || '%Y-%m-%d %H:%M', offset: 0,
}); format: settings.date || '%Y-%m-%d %H:%M',
console.log(`${SetList.name}.refresh:`, {first: newSets[0]}); });
if (newSets.length === 0) return setSets([]); console.log(`${SetList.name}.refresh:`, {first: newSets[0]});
setSets(newSets); if (newSets.length === 0) return setSets([]);
setOffset(0); setSets(newSets);
setEnd(false); setOffset(0);
}, [search, settings.date]); setEnd(false);
},
[settings.date],
);
useFocusEffect( useFocusEffect(
useCallback(() => { useCallback(() => {
refresh(); refresh(search);
}, [refresh]), }, [refresh, search]),
); );
useEffect(() => {
refresh();
}, [search, refresh]);
const renderItem = useCallback( const renderItem = useCallback(
({item}: {item: Set}) => ( ({item}: {item: Set}) => (
<SetItem item={item} key={item.id} onRemove={refresh} /> <SetItem item={item} key={item.id} onRemove={() => refresh(search)} />
), ),
[refresh], [refresh, search],
); );
const next = useCallback(async () => { const next = useCallback(async () => {
@ -82,10 +81,18 @@ export default function SetList() {
}); });
}, [navigation, set]); }, [navigation, set]);
const handleSearch = useCallback(
(value: string) => {
setSearch(value);
refresh(value);
},
[refresh],
);
return ( return (
<> <>
<DrawerHeader name="Home" /> <DrawerHeader name="Home" />
<Page onAdd={onAdd} search={search} setSearch={setSearch}> <Page onAdd={onAdd} search={search} setSearch={handleSearch}>
{sets?.length === 0 ? ( {sets?.length === 0 ? (
<List.Item <List.Item
title="No sets yet" title="No sets yet"