From a8e4ef76e98fb5b6cda48d2734ad7c728e99cfa9 Mon Sep 17 00:00:00 2001 From: Yared Yemane Date: Tue, 14 Apr 2026 09:03:01 -0700 Subject: [PATCH] fix human language tab empty state on first navigation Retry hierarchy loading once when initial tab navigation returns empty, so content appears immediately without manual page refresh. Made-with: Cursor --- .../content-management/HumanLanguagePage.tsx | 20 +++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/src/pages/content-management/HumanLanguagePage.tsx b/src/pages/content-management/HumanLanguagePage.tsx index 8af1f12..82dafbb 100644 --- a/src/pages/content-management/HumanLanguagePage.tsx +++ b/src/pages/content-management/HumanLanguagePage.tsx @@ -437,27 +437,43 @@ export function HumanLanguagePage() { ) setCollapsedModuleIds(moduleIds) setCollapsedSubModuleIds(subModuleIds) + return nextSubCategories.length } finally { if (showLoading) setLoading(false) } } useEffect(() => { + let cancelled = false const run = async () => { setLoading(true) try { - await loadHierarchy() + const count = await loadHierarchy(false) + // On first navigation after login, the first hierarchy request can race auth refresh. + // Retry once if it comes back empty so users don't need a manual browser refresh. + if (!cancelled && count === 0) { + await new Promise((resolve) => setTimeout(resolve, 650)) + if (!cancelled) { + await loadHierarchy(false) + } + } const saved = sessionStorage.getItem(HUMAN_LANGUAGE_SCROLL_KEY) const targetY = saved ? Number(saved) : 0 if (Number.isFinite(targetY) && targetY > 0) { window.requestAnimationFrame(() => window.scrollTo({ top: targetY, behavior: "auto" })) setTimeout(() => window.scrollTo({ top: targetY, behavior: "auto" }), 250) } + } catch (error) { + console.error("Failed to load human-language hierarchy:", error) + toast.error("Failed to load Human Language data") } finally { - setLoading(false) + if (!cancelled) setLoading(false) } } run().catch(() => undefined) + return () => { + cancelled = true + } }, []) useEffect(() => {