testing 127.0.0.1 issue

Signed-off-by: Kenneth Obsequio <k80308392@gmail.com>
This commit is contained in:
2026-07-07 13:40:07 +08:00
parent 244aa607f7
commit 6624c0d27f
62 changed files with 662 additions and 1889 deletions
+55 -330
View File
@@ -52,18 +52,8 @@ export function CoursesProvider({ children }) {
return await fn();
} catch (err) {
const message = err?.response?.data?.message ?? "Something went wrong.";
if (err.status === 404 && message) toast(message, {
action: {
label: "Close",
onClick: () => {}
}
});
else toast(message, {
action: {
label: "Close",
onClick: () => {}
}
});
if (err.status === 404 && message) toast(message);
else toast(message);
return null;
} finally {
setLoading(false);
@@ -121,12 +111,7 @@ export function CoursesProvider({ children }) {
const course = data?.data?.data ?? null;
if (course) {
setCourses((prev) => [course, ...prev]);
toast("Course created successfully.", {
action: {
label: "Close",
onClick: () => {}
}
});
toast("Course created successfully.");
}
return data;
}),
@@ -141,12 +126,7 @@ export function CoursesProvider({ children }) {
if (course) {
setCourses((prev) => prev.map((c) => (c.course_id === courseId ? course : c)));
setCourse(course);
toast("Course updated successfully.", {
action: {
label: "Close",
onClick: () => {}
}
});
toast("Course updated successfully.");
}
return data;
}),
@@ -159,12 +139,7 @@ export function CoursesProvider({ children }) {
const { data } = await api.delete(`${BASE}/${courseId}`);
setCourses((prev) => prev.filter((c) => c.course_id !== courseId));
setCourse((prev) => (prev?.course_id === courseId ? null : prev));
toast("Course archived.", {
action: {
label: "Close",
onClick: () => {}
}
});
toast("Course archived.");
return data;
}),
[request],
@@ -175,12 +150,7 @@ export function CoursesProvider({ children }) {
request(async () => {
const { data } = await api.delete(`${BASE}/bulk`, { data: { ids } });
setCourses((prev) => prev.filter((c) => !ids.includes(c.course_id)));
toast("Courses archived.", {
action: {
label: "Close",
onClick: () => {}
}
});
toast("Courses archived.");
return data;
}),
[request],
@@ -211,12 +181,7 @@ export function CoursesProvider({ children }) {
const result = data?.data?.data ?? null;
if (result) {
setCourses((prev) => prev.filter((c) => c.course_id !== courseId));
toast("Course restored.", {
action: {
label: "Close",
onClick: () => {}
}
});
toast("Course restored.");
}
return data;
}),
@@ -228,12 +193,7 @@ export function CoursesProvider({ children }) {
request(async () => {
const { data } = await api.patch(`${BASE}/restore/bulk`, { ids });
setCourses((prev) => prev.filter((c) => !ids.includes(c.course_id)));
toast("Courses restored.", {
action: {
label: "Close",
onClick: () => {}
}
});
toast("Courses restored.");
return data;
}),
[request],
@@ -245,12 +205,7 @@ export function CoursesProvider({ children }) {
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("Course permanently deleted.", {
action: {
label: "Close",
onClick: () => {}
}
});
toast("Course permanently deleted.");
return data;
}),
[request],
@@ -261,12 +216,7 @@ export function CoursesProvider({ children }) {
request(async () => {
const { data } = await api.delete(`${BASE}/bulk/permanent`, { data: { ids } });
setCourses((prev) => prev.filter((c) => !ids.includes(c.course_id)));
toast("Courses permanently deleted.", {
action: {
label: "Close",
onClick: () => {}
}
});
toast("Courses permanently deleted.");
return data;
}),
[request],
@@ -305,12 +255,7 @@ export function CoursesProvider({ children }) {
request(async () => {
const { data } = await api.put(`${BASE}/${courseId}/prerequisites`, { prerequisites });
setPrerequisites(prerequisites);
toast("Prerequisites updated.", {
action: {
label: "Close",
onClick: () => {}
}
});
toast("Prerequisites updated.");
return data;
}),
[request],
@@ -360,12 +305,7 @@ export function CoursesProvider({ children }) {
const unit = data?.data?.data ?? null;
if (unit) {
setUnits((prev) => [...prev, unit]);
toast("Unit created successfully.", {
action: {
label: "Close",
onClick: () => {}
}
});
toast("Unit created successfully.");
}
return data;
}),
@@ -380,12 +320,7 @@ export function CoursesProvider({ children }) {
if (unit) {
setUnits((prev) => prev.map((u) => (u.unit_id === unitId ? unit : u)));
setUnit(unit);
toast("Unit updated successfully.", {
action: {
label: "Close",
onClick: () => {}
}
});
toast("Unit updated successfully.");
}
return data;
}),
@@ -398,12 +333,7 @@ export function CoursesProvider({ children }) {
const { data } = await api.delete(`${BASE}/${courseId}/units/${unitId}`);
setUnits((prev) => prev.filter((u) => u.unit_id !== unitId));
setUnit((prev) => (prev?.unit_id === unitId ? null : prev));
toast("Unit archived.", {
action: {
label: "Close",
onClick: () => {}
}
});
toast("Unit archived.");
return data;
}),
[request],
@@ -414,12 +344,7 @@ export function CoursesProvider({ children }) {
request(async () => {
const { data } = await api.delete(`${BASE}/${courseId}/units/bulk`, { data: { ids } });
setUnits((prev) => prev.filter((u) => !ids.includes(u.unit_id)));
toast("Units archived.", {
action: {
label: "Close",
onClick: () => {}
}
});
toast("Units archived.");
return data;
}),
[request],
@@ -451,12 +376,7 @@ export function CoursesProvider({ children }) {
const result = data?.data?.data ?? null;
if (result) {
setUnits((prev) => prev.filter((u) => u.unit_id !== unitId));
toast("Unit restored.", {
action: {
label: "Close",
onClick: () => {}
}
});
toast("Unit restored.");
}
return data;
}),
@@ -468,12 +388,7 @@ export function CoursesProvider({ children }) {
request(async () => {
const { data } = await api.patch(`${BASE}/${courseId}/units/restore/bulk`, { ids } );
setUnits((prev) => prev.filter((u) => !ids.includes(u.unit_id)));
toast("Units restored.", {
action: {
label: "Close",
onClick: () => {}
}
});
toast("Units restored.");
return data;
}),
[request],
@@ -485,12 +400,7 @@ export function CoursesProvider({ children }) {
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("Unit permanently deleted.", {
action: {
label: "Close",
onClick: () => {}
}
});
toast("Unit permanently deleted.");
return data;
}),
[request],
@@ -501,12 +411,7 @@ export function CoursesProvider({ children }) {
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("Units permanently deleted.", {
action: {
label: "Close",
onClick: () => {}
}
});
toast("Units permanently deleted.");
return data;
}),
[request],
@@ -545,12 +450,7 @@ export function CoursesProvider({ children }) {
const result = data?.data?.data ?? null;
if (result) {
setQuiz(result);
toast("Quiz created.", {
action: {
label: "Close",
onClick: () => {}
}
});
toast("Quiz created.");
}
return data;
}),
@@ -564,12 +464,7 @@ export function CoursesProvider({ children }) {
const result = data?.data?.data ?? null;
if (result) {
setQuiz(result);
toast("Quiz updated.", {
action: {
label: "Close",
onClick: () => {}
}
});
toast("Quiz updated.");
}
return data;
}),
@@ -582,12 +477,7 @@ export function CoursesProvider({ children }) {
const { data } = await api.delete(`${BASE}/${courseId}/units/${unitId}/quiz/${quizId}`, { data: { deletedBy } });
setQuiz(null);
setQuestions([]);
toast("Quiz archived.", {
action: {
label: "Close",
onClick: () => {}
}
});
toast("Quiz archived.");
return data;
}),
[request],
@@ -613,12 +503,7 @@ export function CoursesProvider({ children }) {
const result = data?.data?.data ?? null;
if (result) {
setQuiz(result);
toast("Quiz restored.", {
action: {
label: "Close",
onClick: () => {}
}
});
toast("Quiz restored.");
}
return data;
}),
@@ -647,12 +532,7 @@ export function CoursesProvider({ children }) {
const result = data?.data?.data ?? null;
if (result) {
setQuestions((prev) => [...prev, result]);
toast("Question added.", {
action: {
label: "Close",
onClick: () => {}
}
});
toast("Question added.");
}
return data;
}),
@@ -666,12 +546,7 @@ export function CoursesProvider({ children }) {
const result = data?.data?.data ?? null;
if (result) {
setQuestions((prev) => prev.map((q) => (q.question_id === questionId ? result : q)));
toast("Question updated.", {
action: {
label: "Close",
onClick: () => {}
}
});
toast("Question updated.");
}
return data;
}),
@@ -684,12 +559,7 @@ export function CoursesProvider({ children }) {
const { data } = await api.put(`${BASE}/${courseId}/units/${unitId}/quiz/${quizId}/questions/bulk-sync`, { questions, updatedBy });
const result = data?.data?.data ?? [];
setQuestions(result);
toast("Quiz saved.", {
action: {
label: "Close",
onClick: () => {}
}
});
toast("Quiz saved.");
return data;
}),
[request],
@@ -700,12 +570,7 @@ export function CoursesProvider({ children }) {
request(async () => {
const { data } = await api.delete(`${BASE}/${courseId}/units/${unitId}/quiz/${quizId}/questions/${questionId}`, { data: { deletedBy } });
setQuestions((prev) => prev.filter((q) => q.question_id !== questionId));
toast("Question archived.", {
action: {
label: "Close",
onClick: () => {}
}
});
toast("Question archived.");
return data;
}),
[request],
@@ -716,12 +581,7 @@ export function CoursesProvider({ children }) {
request(async () => {
const { data } = await api.delete(`${BASE}/${courseId}/units/${unitId}/quiz/${quizId}/questions/bulk`, { data: { ids, deletedBy } });
setQuestions((prev) => prev.filter((q) => !ids.includes(q.question_id)));
toast("Questions archived.", {
action: {
label: "Close",
onClick: () => {}
}
});
toast("Questions archived.");
return data;
}),
[request],
@@ -742,12 +602,7 @@ export function CoursesProvider({ children }) {
(courseId, unitId, quizId, questionId, restoredBy) =>
request(async () => {
const { data } = await api.patch(`${BASE}/${courseId}/units/${unitId}/quiz/${quizId}/questions/${questionId}/restore`, { restoredBy });
toast("Question restored.", {
action: {
label: "Close",
onClick: () => {}
}
});
toast("Question restored.");
return data;
}),
[request],
@@ -757,12 +612,7 @@ export function CoursesProvider({ children }) {
(courseId, unitId, quizId, ids, restoredBy) =>
request(async () => {
const { data } = await api.patch(`${BASE}/${courseId}/units/${unitId}/quiz/${quizId}/questions/restore/bulk`, { ids, restoredBy });
toast("Questions restored.", {
action: {
label: "Close",
onClick: () => {}
}
});
toast("Questions restored.");
return data;
}),
[request],
@@ -797,12 +647,7 @@ export function CoursesProvider({ children }) {
const lesson = data?.data?.data ?? null;
if (lesson) {
setLessons((prev) => [...prev, lesson]);
toast("Lesson created successfully.", {
action: {
label: "Close",
onClick: () => {}
}
});
toast("Lesson created successfully.");
}
return data;
}),
@@ -817,12 +662,7 @@ export function CoursesProvider({ children }) {
if (lesson) {
setLessons((prev) => prev.map((l) => (l.lesson_id === lessonId ? lesson : l)));
setLesson(lesson);
toast("Lesson updated successfully.", {
action: {
label: "Close",
onClick: () => {}
}
});
toast("Lesson updated successfully.");
}
return data;
}),
@@ -835,12 +675,7 @@ export function CoursesProvider({ children }) {
const { data } = await api.delete(`${BASE}/${courseId}/units/${unitId}/lessons/${lessonId}`);
setLessons((prev) => prev.filter((l) => l.lesson_id !== lessonId));
setLesson((prev) => (prev?.lesson_id === lessonId ? null : prev));
toast("Lesson archived.", {
action: {
label: "Close",
onClick: () => {}
}
});
toast("Lesson archived.");
return data;
}),
[request],
@@ -851,12 +686,7 @@ export function CoursesProvider({ children }) {
request(async () => {
const { data } = await api.delete(`${BASE}/${courseId}/units/${unitId}/lessons/bulk`, { data: { ids } });
setLessons((prev) => prev.filter((l) => !ids.includes(l.lesson_id)));
toast("Lessons archived.", {
action: {
label: "Close",
onClick: () => {}
}
});
toast("Lessons archived.");
return data;
}),
[request],
@@ -888,12 +718,7 @@ export function CoursesProvider({ children }) {
const result = data?.data?.data ?? null;
if (result) {
setLessons((prev) => prev.filter((l) => l.lesson_id !== lessonId));
toast("Lesson restored.", {
action: {
label: "Close",
onClick: () => {}
}
});
toast("Lesson restored.");
}
return data;
}),
@@ -905,12 +730,7 @@ export function CoursesProvider({ children }) {
request(async () => {
const { data } = await api.patch(`${BASE}/${courseId}/units/${unitId}/lessons/restore/bulk`, { ids });
setLessons((prev) => prev.filter((l) => !ids.includes(l.lesson_id)));
toast("Lessons restored.", {
action: {
label: "Close",
onClick: () => {}
}
});
toast("Lessons restored.");
return data;
}),
[request],
@@ -922,12 +742,7 @@ export function CoursesProvider({ children }) {
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("Lesson permanently deleted.", {
action: {
label: "Close",
onClick: () => {}
}
});
toast("Lesson permanently deleted.");
return data;
}),
[request],
@@ -938,12 +753,7 @@ export function CoursesProvider({ children }) {
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("Lessons permanently deleted.", {
action: {
label: "Close",
onClick: () => {}
}
});
toast("Lessons permanently deleted.");
return data;
}),
[request],
@@ -971,12 +781,7 @@ export function CoursesProvider({ children }) {
const page = data?.data?.data ?? null;
if (page) {
setLessonPage(page);
toast("Lesson page saved.", {
action: {
label: "Close",
onClick: () => {}
}
});
toast("Lesson page saved.");
}
return data;
}),
@@ -1006,12 +811,7 @@ export function CoursesProvider({ children }) {
const result = data?.data?.data ?? null;
if (result) {
setAssessment(result);
toast("Assessment created.", {
action: {
label: "Close",
onClick: () => {}
}
});
toast("Assessment created.");
}
return data;
}),
@@ -1025,12 +825,7 @@ export function CoursesProvider({ children }) {
const result = data?.data?.data ?? null;
if (result) {
setAssessment(result);
toast("Assessment updated.", {
action: {
label: "Close",
onClick: () => {}
}
});
toast("Assessment updated.");
}
return data;
}),
@@ -1043,12 +838,7 @@ export function CoursesProvider({ children }) {
const { data } = await api.delete(`${BASE}/${courseId}/assessment/${assessmentId}`, { data: { deletedBy } });
setAssessment(null);
setQuestions([]);
toast("Assessment archived.", {
action: {
label: "Close",
onClick: () => {}
}
});
toast("Assessment archived.");
return data;
}),
[request],
@@ -1074,12 +864,7 @@ export function CoursesProvider({ children }) {
const result = data?.data?.data ?? null;
if (result) {
setAssessment(result);
toast("Assessment restored.", {
action: {
label: "Close",
onClick: () => {}
}
});
toast("Assessment restored.");
}
return data;
}),
@@ -1108,12 +893,7 @@ export function CoursesProvider({ children }) {
const result = data?.data?.data ?? null;
if (result) {
setQuestions((prev) => [...prev, result]);
toast("Question added.", {
action: {
label: "Close",
onClick: () => {}
}
});
toast("Question added.");
}
return data;
}),
@@ -1127,12 +907,7 @@ export function CoursesProvider({ children }) {
const result = data?.data?.data ?? null;
if (result) {
setQuestions((prev) => prev.map((q) => (q.question_id === questionId ? result : q)));
toast("Question updated.", {
action: {
label: "Close",
onClick: () => {}
}
});
toast("Question updated.");
}
return data;
}),
@@ -1145,12 +920,7 @@ export function CoursesProvider({ children }) {
const { data } = await api.put(`${BASE}/${courseId}/assessment/${assessmentId}/questions/bulk-sync`, { questions, updatedBy });
const result = data?.data?.data ?? [];
setQuestions(result);
toast("Assessment saved.", {
action: {
label: "Close",
onClick: () => {}
}
});
toast("Assessment saved.");
return data;
}),
[request],
@@ -1161,12 +931,7 @@ export function CoursesProvider({ children }) {
request(async () => {
const { data } = await api.delete(`${BASE}/${courseId}/assessment/${assessmentId}/questions/${questionId}`, { data: { deletedBy } });
setQuestions((prev) => prev.filter((q) => q.question_id !== questionId));
toast("Question archived.", {
action: {
label: "Close",
onClick: () => {}
}
});
toast("Question archived.");
return data;
}),
[request],
@@ -1177,12 +942,7 @@ export function CoursesProvider({ children }) {
request(async () => {
const { data } = await api.delete(`${BASE}/${courseId}/assessment/${assessmentId}/questions/bulk`, { data: { ids, deletedBy } });
setQuestions((prev) => prev.filter((q) => !ids.includes(q.question_id)));
toast("Questions archived.", {
action: {
label: "Close",
onClick: () => {}
}
});
toast("Questions archived.");
return data;
}),
[request],
@@ -1203,12 +963,7 @@ export function CoursesProvider({ children }) {
(courseId, assessmentId, questionId, restoredBy) =>
request(async () => {
const { data } = await api.patch(`${BASE}/${courseId}/assessment/${assessmentId}/questions/${questionId}/restore`, { restoredBy });
toast("Question restored.", {
action: {
label: "Close",
onClick: () => {}
}
});
toast("Question restored.");
return data;
}),
[request],
@@ -1218,12 +973,7 @@ export function CoursesProvider({ children }) {
(courseId, assessmentId, ids, restoredBy) =>
request(async () => {
const { data } = await api.patch(`${BASE}/${courseId}/assessment/${assessmentId}/questions/restore/bulk`, { ids, restoredBy });
toast("Questions restored.", {
action: {
label: "Close",
onClick: () => {}
}
});
toast("Questions restored.");
return data;
}),
[request],
@@ -1280,12 +1030,7 @@ export function CoursesProvider({ children }) {
const saveCourseProduct = useCallback(
(courseId, payload) => request(async () => {
const { data } = await api.put(`/admin/products/courses/${courseId}/product`, payload);
toast("Product listing saved.", {
action: {
label: "Close",
onClick: () => {}
}
});
toast("Product listing saved.");
return data.data ?? null;
}), [request],
);
@@ -1293,12 +1038,7 @@ export function CoursesProvider({ children }) {
const removeCourseProduct = useCallback(
(courseId) => request(async () => {
await api.delete(`/admin/products/courses/${courseId}/product`);
toast("Product listing removed.", {
action: {
label: "Close",
onClick: () => {}
}
});
toast("Product listing removed.");
return true;
}), [request],
);
@@ -1313,12 +1053,7 @@ export function CoursesProvider({ children }) {
const syncCourseCategories = useCallback(
(courseId, categoryIds) => request(async () => {
const { data } = await api.post(`/admin/products/courses/${courseId}/categories`, { category_ids: categoryIds });
toast("Categories updated.", {
action: {
label: "Close",
onClick: () => {}
}
});
toast("Categories updated.");
return data.data ?? [];
}), [request],
);
@@ -1333,12 +1068,7 @@ export function CoursesProvider({ children }) {
const syncInstructors = useCallback(
(courseId, instructors) => request(async () => {
await api.put(`${BASE}/${courseId}/instructors`, { instructors });
toast("Instructors updated.", {
action: {
label: "Close",
onClick: () => {}
}
});
toast("Instructors updated.");
}), [request],
);
@@ -1352,12 +1082,7 @@ export function CoursesProvider({ children }) {
const syncCourseAchievements = useCallback(
(courseId, achievement_keys) => request(async () => {
await api.put(`${BASE}/${courseId}/achievements`, { achievement_keys });
toast("Rewards updated.", {
action: {
label: "Close",
onClick: () => {}
}
});
toast("Rewards updated.");
}), [request],
);