From fe3f254dfc28b526920280fcc1c2ea15edb76313 Mon Sep 17 00:00:00 2001 From: Yared Yemane Date: Tue, 14 Apr 2026 05:58:51 -0700 Subject: [PATCH] fix level/module removal behavior and reduce creation popups Use module delete operations for level/module removal so removed levels disappear correctly, and suppress success toasts for module/sub-module creation to keep the flow cleaner and faster. Made-with: Cursor --- .../content-management/HumanLanguagePage.tsx | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/src/pages/content-management/HumanLanguagePage.tsx b/src/pages/content-management/HumanLanguagePage.tsx index 92c980e..ceff372 100644 --- a/src/pages/content-management/HumanLanguagePage.tsx +++ b/src/pages/content-management/HumanLanguagePage.tsx @@ -37,6 +37,7 @@ import { createHumanLanguageLesson, createModuleInLevel, createSubModuleInModule, + deleteModule, deleteCourse, deleteCourseSubCategory, deleteQuestionSet, @@ -185,6 +186,7 @@ type CefrLevel = (typeof CEFR_LEVELS)[number] type PendingRemove = { ids: number[] + target: "sub_module" | "module" key: string successMessage: string title: string @@ -523,7 +525,6 @@ export function HumanLanguagePage() { const next = nextMissingPositive(usedNumbers) const title = `Module-${next}` await createModuleInLevel(levelNode.level_id, title, `${level} ${title}`, next) - toast.success(`${title} created`) await loadHierarchy() } catch (error) { console.error("Failed to create module:", error) @@ -555,7 +556,6 @@ export function HumanLanguagePage() { const next = nextMissingPositive(usedNumbers) const title = `Module-${moduleNo}.${next}` await createSubModuleInModule(moduleId, title, `${level} ${title}`, next) - toast.success(`Sub-module ${moduleNo}.${next} created`) await loadHierarchy() } catch (error) { console.error("Failed to create sub-module:", error) @@ -572,12 +572,16 @@ export function HumanLanguagePage() { const executePendingRemove = async () => { if (!pendingRemove) return - const { ids, key, successMessage } = pendingRemove + const { ids, target, key, successMessage } = pendingRemove setPendingRemove(null) setDeletingKey(key) try { for (const id of ids) { - await deleteSubModule(id) + if (target === "module") { + await deleteModule(id) + } else { + await deleteSubModule(id) + } } toast.success(successMessage) await loadHierarchy() @@ -1357,7 +1361,7 @@ export function HumanLanguagePage() { const levelNode = course.levels.find((item) => item.level.toUpperCase() === level) const modules = levelNode?.modules ?? [] const levelKey = `${course.course_id}-${level}` - const levelRemoveIds = modules.flatMap((m) => m.sub_modules.map((s) => s.id)) + const levelRemoveIds = modules.map((m) => m.id) const canRemoveLevel = levelRemoveIds.length > 0 return (
@@ -1383,6 +1387,7 @@ export function HumanLanguagePage() { onClick={() => requestRemove({ ids: levelRemoveIds, + target: "module", key: `level-${course.course_id}-${level}`, successMessage: `Level ${level} removed`, title: `Remove level ${level}?`, @@ -1468,7 +1473,8 @@ export function HumanLanguagePage() { disabled={deletingKey === `module-${module.id}`} onClick={() => requestRemove({ - ids: module.sub_modules.map((s) => s.id), + ids: [module.id], + target: "module", key: `module-${module.id}`, successMessage: `Module ${module.title} removed`, title: `Remove ${module.title}?`, @@ -1541,6 +1547,7 @@ export function HumanLanguagePage() { onClick={() => requestRemove({ ids: [subModule.id], + target: "sub_module", key: `submodule-${subModule.id}`, successMessage: `Sub-module ${subModule.title} removed`, title: `Remove ${subModule.title}?`,