diff --git a/src/modules/client/pages/Dashboard.jsx b/src/modules/client/pages/Dashboard.jsx
index ff1dffc..1d7c8b5 100644
--- a/src/modules/client/pages/Dashboard.jsx
+++ b/src/modules/client/pages/Dashboard.jsx
@@ -229,10 +229,6 @@ const Client = () => {
toast('Welcome to Philproperties!', {
description: 'You earned the Early Access badge. Check your notifications for details.',
duration: 6000,
- action: {
- label: "Close",
- onClick: () => {}
- }
});
window.history.replaceState({}, '');
}, []);
diff --git a/src/modules/client/pages/MyCertificates.jsx b/src/modules/client/pages/MyCertificates.jsx
index d1fba61..8351e7b 100644
--- a/src/modules/client/pages/MyCertificates.jsx
+++ b/src/modules/client/pages/MyCertificates.jsx
@@ -30,12 +30,7 @@ const CertificateCard = ({ courseTitle, issuedAt, courseUuid, badgeColor, badgeI
a.click();
URL.revokeObjectURL(url);
} catch {
- toast("Could not download certificate.", {
- action: {
- label: "Close",
- onClick: () => {}
- }
- });
+ toast("Could not download certificate.");
} finally {
setDownloading(false);
}
diff --git a/src/modules/client/pages/Notifications.jsx b/src/modules/client/pages/Notifications.jsx
index 36d1ca0..0d85a36 100644
--- a/src/modules/client/pages/Notifications.jsx
+++ b/src/modules/client/pages/Notifications.jsx
@@ -141,18 +141,8 @@ export default function Notifications() {
const ok = await clearAll();
setClearing(false);
setClearOpen(false);
- if (ok) toast("All notifications cleared.", {
- action: {
- label: "Close",
- onClick: () => {}
- }
- });
- else toast("Could not clear notifications.", {
- action: {
- label: "Close",
- onClick: () => {}
- }
- });
+ if (ok) toast("All notifications cleared.");
+ else toast("Could not clear notifications.");
}
const rangeStart = pagination.total === 0 ? 0 : (pagination.page - 1) * pagination.limit + 1;
diff --git a/src/modules/client/pages/PlanList.jsx b/src/modules/client/pages/PlanList.jsx
index 6c1e737..121541b 100644
--- a/src/modules/client/pages/PlanList.jsx
+++ b/src/modules/client/pages/PlanList.jsx
@@ -385,22 +385,12 @@ export default function PlanList() {
setRefundLoading(true);
try {
const { data } = await api.post("/client/tiers/checkout/refund");
- toast(data.message ?? "Refund processed. Your access has been revoked.", {
- action: {
- label: "Close",
- onClick: () => {}
- }
- });
+ toast(data.message ?? "Refund processed. Your access has been revoked.");
setRefundPlan(null);
resetMyTier();
getMyTier();
} catch (err) {
- toast(err?.response?.data?.message ?? "Refund failed. Please try again.", {
- action: {
- label: "Close",
- onClick: () => {}
- }
- });
+ toast(err?.response?.data?.message ?? "Refund failed. Please try again.");
} finally {
setRefundLoading(false);
}
diff --git a/src/modules/client/pages/Profile.jsx b/src/modules/client/pages/Profile.jsx
index 3803987..956a09c 100644
--- a/src/modules/client/pages/Profile.jsx
+++ b/src/modules/client/pages/Profile.jsx
@@ -134,12 +134,7 @@ const LandscapeCertCard = ({ courseTitle, issuedAt, courseUuid, badgeColor, badg
a.click();
URL.revokeObjectURL(url);
} catch {
- toast("Could not download certificate.", {
- action: {
- label: "Close",
- onClick: () => {}
- }
- });
+ toast("Could not download certificate.");
} finally {
setDownloading(false);
}
@@ -525,16 +520,22 @@ const ProfilePage = () => {
}
>
{pendingModalCourse && (() => {
- const { pending_quizzes = [], pending_assessment } = pendingModalCourse;
+ const { pending_quizzes = [], pending_assessment, assessment_configured = true } = pendingModalCourse;
const hasQuizzes = pending_quizzes.length > 0;
const hasAssessment = !!pending_assessment;
- if (!hasQuizzes && !hasAssessment) {
+ if (!hasQuizzes && !hasAssessment && assessment_configured) {
return (
No pending items found.
);
}
return (
+ {!assessment_configured && (
+
+ You've finished all lessons, but this course's final assessment hasn't been set up yet.
+ Check back once it's available — the course can't be marked complete until then.
+
+ )}
{hasQuizzes && (
Unit Quizzes
diff --git a/src/modules/client/pages/UnitList.jsx b/src/modules/client/pages/UnitList.jsx
index 4da5602..bb4e3db 100644
--- a/src/modules/client/pages/UnitList.jsx
+++ b/src/modules/client/pages/UnitList.jsx
@@ -507,12 +507,7 @@ const UnitList = () => {
useEffect(() => {
if (!completedTasks.length) return;
completedTasks.forEach((t) => {
- toast(`"${t.task_name}" automatically turned in!`, {
- action: {
- label: "Close",
- onClick: () => {}
- }
- });
+ toast(`"${t.task_name}" automatically turned in!`);
});
clearCompletedTasks();
}, [completedTasks]);
@@ -822,7 +817,7 @@ const UnitList = () => {
{/* ── Task-mode banner ─────────────────────────────────────────── */}
{taskCtx?.has_task && (
-
@@ -976,7 +971,7 @@ const UnitList = () => {
{/* ── Main content ── */}
-
+
{selectedCompletion ? (
diff --git a/src/modules/client/pages/ViewTask.jsx b/src/modules/client/pages/ViewTask.jsx
index 3494d41..6b48202 100644
--- a/src/modules/client/pages/ViewTask.jsx
+++ b/src/modules/client/pages/ViewTask.jsx
@@ -315,12 +315,7 @@ const ViewTask = () => {
}
if (!uploadedFiles.length) {
- toast('No files were uploaded successfully.', {
- action: {
- label: "Close",
- onClick: () => {}
- }
- });
+ toast('No files were uploaded successfully.');
return;
}
@@ -334,12 +329,7 @@ const ViewTask = () => {
setNote('');
setUploadState({ files: [], isUploading: false });
} catch (err) {
- toast('Failed to submit. Please try again.', {
- action: {
- label: "Close",
- onClick: () => {}
- }
- });
+ toast('Failed to submit. Please try again.');
} finally {
setSubmitting(false);
}
@@ -413,7 +403,7 @@ const ViewTask = () => {
{/* ── Left ──────────────────────────────────────────────── */}
-
+
{/* Task header card */}
@@ -448,6 +438,18 @@ const ViewTask = () => {
+ {/* Requirements status panel — mobile only, right after the header */}
+ {!isResolving && requirements.length > 0 && (
+
+
+
+ )}
+
{/* Requirements section */}
{!isResolving && requirements.length > 0 && (
<>
@@ -519,10 +521,22 @@ const ViewTask = () => {
)}
>
)}
+
+ {/* Your work — mobile only, at the very end */}
+ {hasFileUpload && (
+
+ setTaskModal(true)}
+ submitting={submitting}
+ onFileClick={(file) => setPreviewFile(file)}
+ />
+
+ )}
- {/* ── Right ─────────────────────────────────────────────── */}
-
+ {/* ── Right (desktop sidebar only) ───────────────────────── */}
+
{hasFileUpload && (
{
return (
- Done
+ Completed
);
}
@@ -282,9 +282,9 @@ const ViewTaskDetails = () => {
{renderTab('No ongoing tasks right now.', 'ongoing')}
- {/* ── Done ── */}
-
- {renderTab('No completed tasks yet.', 'done')}
+ {/* ── Completed ── */}
+
+ {renderTab('No completed tasks yet.', 'completed')}
{/* ── Overdue ── */}
diff --git a/src/modules/public/pages/LandingPage.jsx b/src/modules/public/pages/LandingPage.jsx
index 2cf2aef..c262a04 100644
--- a/src/modules/public/pages/LandingPage.jsx
+++ b/src/modules/public/pages/LandingPage.jsx
@@ -205,12 +205,7 @@ function LandingPage() {