mirror of
https://github.com/rgrgogu/new_starr.git
synced 2026-09-27 00:12:54 +08:00
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user