From f0d5fc4fa6e3099eb25914b506c3d323a507928c Mon Sep 17 00:00:00 2001 From: Brandon Presley Date: Tue, 22 Aug 2023 12:25:34 +1200 Subject: [PATCH] =?UTF-8?q?Fix=20infinite=20scrolling=20in=20homepage=20-?= =?UTF-8?q?=201.152=20=F0=9F=9A=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Also prevent flickering of "No sets found" message on first load. The infinite scrolling issue was a side-effect of me messing with our memoization. Some places didn't specify their deps properly. --- SetList.tsx | 23 +++++++++++++---------- android/app/build.gradle | 4 ++-- package.json | 2 +- 3 files changed, 16 insertions(+), 13 deletions(-) diff --git a/SetList.tsx b/SetList.tsx index e7cb0f6..3fb3c93 100644 --- a/SetList.tsx +++ b/SetList.tsx @@ -20,7 +20,7 @@ import Settings, { SETTINGS } from "./settings"; export default function SetList() { const [refreshing, setRefreshing] = useState(false); - const [sets, setSets] = useState([]); + const [sets, setSets] = useState(); const [offset, setOffset] = useState(0); const [end, setEnd] = useState(false); const [settings, setSettings] = useState(); @@ -109,6 +109,7 @@ export default function SetList() { ); const next = async () => { + console.log({ end, refreshing }); if (end || refreshing) return; const newOffset = offset + LIMIT; console.log(`${SetList.name}.next:`, { offset, newOffset, term }); @@ -134,7 +135,7 @@ export default function SetList() { const onAdd = useCallback(async () => { const now = await getNow(); - let set = sets[0]; + let set = sets?.[0]; if (!set) set = { ...defaultSet }; set.created = now; delete set.id; @@ -171,11 +172,12 @@ export default function SetList() { }; const select = useCallback(() => { + if (!sets) return; if (ids.length === sets.length) return setIds([]); setIds(sets.map((set) => set.id)); }, [sets, ids]); - const content = useMemo(() => { + const getContent = () => { if (!settings) return null; if (sets?.length === 0) return ( @@ -186,21 +188,22 @@ export default function SetList() { ); return ( + refreshing={refreshing} + onRefresh={() => { + setOffset(0); refresh({ skip: 0, take: LIMIT, value: term, - }) - } + }); + }} /> ); - }, [sets, settings, term, ids]); + }; return ( <> @@ -216,7 +219,7 @@ export default function SetList() { - {content} + {getContent()} ); diff --git a/android/app/build.gradle b/android/app/build.gradle index 43cef44..55cc128 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -85,8 +85,8 @@ android { applicationId "com.massive" minSdkVersion rootProject.ext.minSdkVersion targetSdkVersion rootProject.ext.targetSdkVersion - versionCode 36177 - versionName "1.151" + versionCode 36178 + versionName "1.152" } signingConfigs { release { diff --git a/package.json b/package.json index dabded8..9696447 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "massive", - "version": "1.151", + "version": "1.152", "private": true, "license": "GPL-3.0-only", "scripts": {