From 7e3733d79e197a8a2785f06f98379f7b95545c13 Mon Sep 17 00:00:00 2001 From: Lim Chee Aun Date: Wed, 28 Dec 2022 18:06:05 +0800 Subject: [PATCH] Delay hero status fetch if already cached The context call is more important --- src/pages/status.jsx | 31 +++++++++++++++++++++++-------- 1 file changed, 23 insertions(+), 8 deletions(-) diff --git a/src/pages/status.jsx b/src/pages/status.jsx index e05d198e..5a5d1b13 100644 --- a/src/pages/status.jsx +++ b/src/pages/status.jsx @@ -51,6 +51,7 @@ function StatusPage({ id }) { useEffect(() => { setUIState('loading'); + let heroTimer; const cachedStatuses = store.session.getJSON('statuses-' + id); if (cachedStatuses) { @@ -73,18 +74,28 @@ function StatusPage({ id }) { } (async () => { - const heroFetch = masto.v1.statuses.fetch(id); + const heroFetch = () => masto.v1.statuses.fetch(id); const contextFetch = masto.v1.statuses.fetchContext(id); const hasStatus = snapStates.statuses.has(id); let heroStatus = snapStates.statuses.get(id); - try { - heroStatus = await heroFetch; - states.statuses.set(id, heroStatus); - } catch (e) { - // Silent fail if status is cached - console.error(e); - if (!hasStatus) { + if (hasStatus) { + console.log('Hero status is cached'); + heroTimer = setTimeout(async () => { + try { + heroStatus = await heroFetch(); + states.statuses.set(id, heroStatus); + } catch (e) { + // Silent fail if status is cached + console.error(e); + } + }, 1000); + } else { + try { + heroStatus = await heroFetch(); + states.statuses.set(id, heroStatus); + } catch (e) { + console.error(e); setUIState('error'); alert('Error fetching status'); return; @@ -153,6 +164,10 @@ function StatusPage({ id }) { setUIState('error'); } })(); + + return () => { + clearTimeout(heroTimer); + }; }, [id, snapStates.reloadStatusPage]); const firstLoad = useRef(true);