add: more things

Signed-off-by: Kenneth Obsequio <k80308392@gmail.com>
This commit is contained in:
2026-07-04 03:35:22 +08:00
parent 72298b86cd
commit b0f40e5133
78 changed files with 2116 additions and 1621 deletions
+100
View File
@@ -199,6 +199,42 @@ export function CoursesProvider({ children }) {
[request],
);
const permanentlyDeleteCourse = useCallback(
(courseId) =>
request(async () => {
const { data } = await api.delete(`${BASE}/${courseId}/permanent`);
setCourses((prev) => prev.filter((c) => c.course_id !== courseId));
setCourse((prev) => (prev?.course_id === courseId ? null : prev));
toast.success("Course permanently deleted.");
return data;
}),
[request],
);
const permanentlyDeleteCourses = useCallback(
({ ids }) =>
request(async () => {
const { data } = await api.delete(`${BASE}/bulk/permanent`, { data: { ids } });
setCourses((prev) => prev.filter((c) => !ids.includes(c.course_id)));
toast.success("Courses permanently deleted.");
return data;
}),
[request],
);
const fetchCoursePermanentDeleteImpact = useCallback(
(courseId) =>
request(async () => {
const { data } = await api.get(`${BASE}/${courseId}/permanent-delete-impact`);
const { unitCount, lessonCount } = data?.data ?? {};
return [
{ label: "unit(s)", count: unitCount ?? 0 },
{ label: "lesson(s)", count: lessonCount ?? 0 },
];
}),
[request],
);
// =========================================================================
// PREREQUISITES
// =========================================================================
@@ -358,6 +394,39 @@ export function CoursesProvider({ children }) {
[request],
);
const permanentlyDeleteUnit = useCallback(
(courseId, unitId) =>
request(async () => {
const { data } = await api.delete(`${BASE}/${courseId}/units/${unitId}/permanent`);
setUnits((prev) => prev.filter((u) => u.unit_id !== unitId));
setUnit((prev) => (prev?.unit_id === unitId ? null : prev));
toast.success("Unit permanently deleted.");
return data;
}),
[request],
);
const permanentlyDeleteUnits = useCallback(
(courseId, { ids }) =>
request(async () => {
const { data } = await api.delete(`${BASE}/${courseId}/units/bulk/permanent`, { data: { ids } });
setUnits((prev) => prev.filter((u) => !ids.includes(u.unit_id)));
toast.success("Units permanently deleted.");
return data;
}),
[request],
);
const fetchUnitPermanentDeleteImpact = useCallback(
(courseId, unitId) =>
request(async () => {
const { data } = await api.get(`${BASE}/${courseId}/units/${unitId}/permanent-delete-impact`);
const { lessonCount } = data?.data ?? {};
return [{ label: "lesson(s)", count: lessonCount ?? 0 }];
}),
[request],
);
// =========================================================================
// UNIT QUIZ
// =========================================================================
@@ -667,6 +736,29 @@ export function CoursesProvider({ children }) {
[request],
);
const permanentlyDeleteLesson = useCallback(
(courseId, unitId, lessonId) =>
request(async () => {
const { data } = await api.delete(`${BASE}/${courseId}/units/${unitId}/lessons/${lessonId}/permanent`);
setLessons((prev) => prev.filter((l) => l.lesson_id !== lessonId));
setLesson((prev) => (prev?.lesson_id === lessonId ? null : prev));
toast.success("Lesson permanently deleted.");
return data;
}),
[request],
);
const permanentlyDeleteLessons = useCallback(
(courseId, unitId, { ids }) =>
request(async () => {
const { data } = await api.delete(`${BASE}/${courseId}/units/${unitId}/lessons/bulk/permanent`, { data: { ids } });
setLessons((prev) => prev.filter((l) => !ids.includes(l.lesson_id)));
toast.success("Lessons permanently deleted.");
return data;
}),
[request],
);
// =========================================================================
// LESSON PAGE
// =========================================================================
@@ -1064,6 +1156,9 @@ export function CoursesProvider({ children }) {
fetchArchivedCourse,
restoreCourse,
restoreCourses,
permanentlyDeleteCourse,
permanentlyDeleteCourses,
fetchCoursePermanentDeleteImpact,
// ── prerequisites ──────────────────────────────────────────────────────
fetchPrerequisites,
@@ -1082,6 +1177,9 @@ export function CoursesProvider({ children }) {
fetchArchivedUnit,
restoreUnit,
restoreUnits,
permanentlyDeleteUnit,
permanentlyDeleteUnits,
fetchUnitPermanentDeleteImpact,
// ── unit quiz ──────────────────────────────────────────────────────────
fetchQuiz,
@@ -1119,6 +1217,8 @@ export function CoursesProvider({ children }) {
fetchArchivedLesson,
restoreLesson,
restoreLessons,
permanentlyDeleteLesson,
permanentlyDeleteLessons,
// ── lesson page ────────────────────────────────────────────────────────
fetchLessonPage,