This commit is contained in:
rgrgogu
2026-06-28 12:43:00 +08:00
parent 9e2eecf9df
commit fe47bdea3c
4 changed files with 17 additions and 16 deletions
@@ -36,7 +36,6 @@ export function buildRowActions({ onViewUnits, onView, onEdit, onArchive, onAsse
icon: <NotebookPen className="h-3.5 w-3.5" />, icon: <NotebookPen className="h-3.5 w-3.5" />,
className: "text-purple-700 hover:text-purple-600", className: "text-purple-700 hover:text-purple-600",
onClick: (row) => onAssessment(row), onClick: (row) => onAssessment(row),
separator: true,
}, },
{ {
key: "archive", key: "archive",
@@ -36,7 +36,6 @@ export function buildRowActions({ onViewLessons, onView, onEdit, onArchive, onQu
icon: <NotebookPen className="h-3.5 w-3.5" />, icon: <NotebookPen className="h-3.5 w-3.5" />,
className: "text-purple-700 hover:text-purple-600", className: "text-purple-700 hover:text-purple-600",
onClick: (row) => onQuiz(row), onClick: (row) => onQuiz(row),
separator: true,
}, },
{ {
key: "archive", key: "archive",
+14 -14
View File
@@ -431,20 +431,20 @@ const UnitList = () => {
(async () => { (async () => {
const result = await upsertLessonProgress(courseId, selectedUnitId, selectedLessonId, lesson.uuid, 'completed'); const result = await upsertLessonProgress(courseId, selectedUnitId, selectedLessonId, lesson.uuid, 'completed');
if (!result) return; if (!result) return;
toast.success(`"${lesson.title}" marked as read.`); // toast.success(`"${lesson.title}" marked as read.`);
if (result.unit?.status === 'completed') { // if (result.unit?.status === 'completed') {
const unitTitle = currentUnit?.title; // const unitTitle = currentUnit?.title;
toast.success( // toast.success(
unitTitle ? `Unit "${unitTitle}" complete!` : 'Unit complete!', // unitTitle ? `Unit "${unitTitle}" complete!` : 'Unit complete!',
{ duration: 4000 } // { duration: 4000 }
); // );
} // }
if (result.course?.status === 'completed') { // if (result.course?.status === 'completed') {
toast.success( // toast.success(
'All lessons read! Finish the quizzes & assessment to get certified.', // 'All lessons read! Finish the quizzes & assessment to get certified.',
{ duration: 5000 } // { duration: 5000 }
); // );
} // }
})(); })();
}, [scrollProgress]); }, [scrollProgress]);
+3
View File
@@ -45,6 +45,7 @@ export const BADGE_STYLES = {
"Not Active": "bg-rose-100 text-rose-700 border-rose-200", "Not Active": "bg-rose-100 text-rose-700 border-rose-200",
"Verified": "bg-blue-100 text-blue-800 border-blue-200", "Verified": "bg-blue-100 text-blue-800 border-blue-200",
"Not Verified": "bg-amber-100 text-amber-700 border-amber-200", "Not Verified": "bg-amber-100 text-amber-700 border-amber-200",
"Banned": "bg-red-100 text-red-700 border-red-200",
// ── Registration / account type ─────────────── // ── Registration / account type ───────────────
"system": "bg-violet-50 text-violet-700 border-violet-200", "system": "bg-violet-50 text-violet-700 border-violet-200",
@@ -107,6 +108,8 @@ function renderCell(attr, value) {
return <EnumBadge value={value ? "Verified" : "Not Verified"} />; return <EnumBadge value={value ? "Verified" : "Not Verified"} />;
else if (attr.field === "is_public") else if (attr.field === "is_public")
return <EnumBadge value={value ? "Public" : "Private"} />; return <EnumBadge value={value ? "Public" : "Private"} />;
else if (attr.field === "is_banned")
return <EnumBadge value={value ? "Banned" : "Not Banned"} />;
else else
return <EnumBadge value={value} />; return <EnumBadge value={value} />;
case "date": return <span className="text-xs text-muted-foreground">{formatDate(value)}</span>; case "date": return <span className="text-xs text-muted-foreground">{formatDate(value)}</span>;