From d33bacf62887b0af587c5068ec7e3ea6912a8a1e Mon Sep 17 00:00:00 2001 From: Yared Yemane Date: Wed, 15 Apr 2026 04:11:29 -0700 Subject: [PATCH] fix human language navigation and practice fetch guards Route published lesson success back to the Human Language page so prior scroll position is restored, and explicitly guard practice question rendering by fetch status. Made-with: Cursor --- .../content-management/AddNewLessonPage.tsx | 10 ++++++- .../content-management/HumanLanguagePage.tsx | 27 ++++++------------- 2 files changed, 17 insertions(+), 20 deletions(-) diff --git a/src/pages/content-management/AddNewLessonPage.tsx b/src/pages/content-management/AddNewLessonPage.tsx index 94675cb..e272781 100644 --- a/src/pages/content-management/AddNewLessonPage.tsx +++ b/src/pages/content-management/AddNewLessonPage.tsx @@ -122,6 +122,7 @@ export function AddNewLessonPage() { const [saving, setSaving] = useState(false) const [resultStatus, setResultStatus] = useState(null) const [resultMessage, setResultMessage] = useState("") + const [lastSavedStatus, setLastSavedStatus] = useState<"DRAFT" | "PUBLISHED" | null>(null) const [lessonTitle, setLessonTitle] = useState("") const [lessonDescription, setLessonDescription] = useState("") @@ -255,11 +256,13 @@ export function AddNewLessonPage() { setResultStatus("success") setResultMessage(status === "PUBLISHED" ? "Lesson published successfully." : "Lesson saved as draft.") + setLastSavedStatus(status) setCurrentStep(4) } catch (error) { console.error("Failed to save lesson:", error) setResultStatus("error") setResultMessage(error instanceof Error ? error.message : "Failed to save lesson") + setLastSavedStatus(null) setCurrentStep(4) } finally { setSaving(false) @@ -620,7 +623,12 @@ export function AddNewLessonPage() {

{resultStatus === "success" ? "Your lesson is now active." : resultMessage}

- {resultStatus === "success" ? ( diff --git a/src/pages/content-management/HumanLanguagePage.tsx b/src/pages/content-management/HumanLanguagePage.tsx index c2138a3..afd99a5 100644 --- a/src/pages/content-management/HumanLanguagePage.tsx +++ b/src/pages/content-management/HumanLanguagePage.tsx @@ -1,5 +1,5 @@ import { useEffect, useMemo, useRef, useState, type ChangeEvent } from "react" -import { Link, useLocation, useNavigate } from "react-router-dom" +import { useLocation, useNavigate } from "react-router-dom" import { ChevronDown, ChevronRight, @@ -119,13 +119,6 @@ type QuestionDialogState = questionId?: number } -function formatDurationSeconds(total: number): string { - const s = Math.max(0, Math.floor(total)) - const m = Math.floor(s / 60) - const r = s % 60 - return `${m}:${r.toString().padStart(2, "0")}` -} - function practiceStatusStyle(status: string): string { const u = status.toUpperCase() if (u === "PUBLISHED") return "bg-green-50 text-green-700 ring-1 ring-inset ring-green-200" @@ -1774,13 +1767,6 @@ export function HumanLanguagePage() { {categoryId ? (
- - -
- ) : practiceFetch.status === "error" ? ( + ) : null} + {practiceFetch?.status === "error" ? (
@@ -2187,7 +2174,8 @@ export function HumanLanguagePage() {
- ) : practiceFetch.questions.length === 0 ? ( + ) : null} + {practiceFetch?.status === "ok" && practiceFetch.questions.length === 0 ? (

@@ -2197,7 +2185,8 @@ export function HumanLanguagePage() { Add them via Open editor.

- ) : ( + ) : null} + {practiceFetch?.status === "ok" && practiceFetch.questions.length > 0 ? ( - )} + ) : null} {practiceFetch?.status === "ok" && practiceFetch.totalCount > practiceFetch.questions.length ? (