diff --git a/src/modules/admin/config/library/lessons/columns.config.jsx b/src/modules/admin/config/library/lessons/columns.config.jsx
index 768f024..9194c50 100644
--- a/src/modules/admin/config/library/lessons/columns.config.jsx
+++ b/src/modules/admin/config/library/lessons/columns.config.jsx
@@ -2,7 +2,7 @@
// Column definitions and pinning for the standalone Lesson Library table.
import { Badge } from "@/components/ui/badge";
-import { Clock } from "lucide-react";
+import { Clock, Layers } from "lucide-react";
import { buildColumns } from "@/utils/table.util";
import { buildSelectionColumn } from "@/components/generic/Table/buildSelectionColumn";
import { buildRowActionsColumn } from "@/components/generic/Table/buildRowActionsColumn";
@@ -13,13 +13,23 @@ export const columnPinning = {
left: [],
};
-const COURSE_STATUS_BADGE = {
- published: "default",
- draft: "secondary",
- standalone: "outline",
-};
-
const cellOverrides = {
+ title: (info) => {
+ const inUnit = parseInt(info.row.original.unit_count ?? 0, 10) > 0;
+ return (
+
+ {inUnit && (
+
+
+ Unit
+
+ )}
+
+ {info.getValue()}
+
+
+ );
+ },
duration_seconds: (info) => {
const seconds = parseInt(info.getValue() ?? 0, 10);
return (
@@ -39,11 +49,6 @@ const cellOverrides = {
);
},
- course_status: (info) => (
-
- {info.getValue()}
-
- ),
};
export function buildDataColumns(attributes, rowActions) {
diff --git a/src/modules/admin/config/library/units/columns.config.jsx b/src/modules/admin/config/library/units/columns.config.jsx
index b1e09be..09cd097 100644
--- a/src/modules/admin/config/library/units/columns.config.jsx
+++ b/src/modules/admin/config/library/units/columns.config.jsx
@@ -2,7 +2,7 @@
// Column definitions and pinning for the standalone Unit Library table.
import { Badge } from "@/components/ui/badge";
-import { Clock } from "lucide-react";
+import { Clock, GraduationCap } from "lucide-react";
import { buildColumns } from "@/utils/table.util";
import { buildSelectionColumn } from "@/components/generic/Table/buildSelectionColumn";
import { buildRowActionsColumn } from "@/components/generic/Table/buildRowActionsColumn";
@@ -13,13 +13,23 @@ export const columnPinning = {
left: [],
};
-const COURSE_STATUS_BADGE = {
- published: "default",
- draft: "secondary",
- standalone: "outline",
-};
-
const cellOverrides = {
+ title: (info) => {
+ const inCourse = parseInt(info.row.original.course_count ?? 0, 10) > 0;
+ return (
+
+ {inCourse && (
+
+
+ Course
+
+ )}
+
+ {info.getValue()}
+
+
+ );
+ },
duration_seconds: (info) => {
const seconds = parseInt(info.getValue() ?? 0, 10);
return (
@@ -36,19 +46,6 @@ const cellOverrides = {
{info.getValue() ?? 0} lesson{(info.getValue() ?? 0) === 1 ? "" : "s"}
),
- course_count: (info) => {
- const n = parseInt(info.getValue() ?? 0, 10);
- return (
-
- {n} course{n === 1 ? "" : "s"}
-
- );
- },
- course_status: (info) => (
-
- {info.getValue()}
-
- ),
};
export function buildDataColumns(attributes, rowActions) {
diff --git a/src/modules/admin/config/library/units/rowActions.config.jsx b/src/modules/admin/config/library/units/rowActions.config.jsx
index 0e3ead1..a1e2c3d 100644
--- a/src/modules/admin/config/library/units/rowActions.config.jsx
+++ b/src/modules/admin/config/library/units/rowActions.config.jsx
@@ -14,12 +14,6 @@ export function buildRowActions({ onView, onEdit, onManageLessons, onArchive, on
icon: ,
onClick: (row) => onView(row),
},
- {
- key: "edit",
- label: "Edit Unit",
- icon: ,
- onClick: (row) => onEdit(row),
- },
{
key: "manage_lessons",
label: "Manage Lessons",
diff --git a/src/modules/admin/pages/assets/AddAsset.jsx b/src/modules/admin/pages/assets/AddAsset.jsx
index 4a26bec..2e40530 100644
--- a/src/modules/admin/pages/assets/AddAsset.jsx
+++ b/src/modules/admin/pages/assets/AddAsset.jsx
@@ -185,12 +185,6 @@ export default function AddAsset() {
hasFileError = true;
}
- // Thumbnail is required for video, optional for audio
- if (isVideo && !thumbnailRef.current) {
- setError("_thumbnail", { message: "A thumbnail is required for video uploads." });
- hasFileError = true;
- }
-
if (hasFileError) return;
setProgress({ phase: "uploading", pct: 0 });
@@ -259,15 +253,14 @@ export default function AddAsset() {
- {/* ── Thumbnail (video required / audio optional) ── */}
+ {/* ── Thumbnail (optional for both video and audio) ── */}
{(isVideo || isAudio) && (
- {/* Storage Provider */}
+ {/* Storage Provider — TEMPORARY: locked to S3 (see zrok tunnel note above; revert after VPS migration) */}
- (
-
- )}
- />
+
diff --git a/src/modules/admin/pages/assets/AddAssetsBulk.jsx b/src/modules/admin/pages/assets/AddAssetsBulk.jsx
index f36ff1b..ab0f567 100644
--- a/src/modules/admin/pages/assets/AddAssetsBulk.jsx
+++ b/src/modules/admin/pages/assets/AddAssetsBulk.jsx
@@ -131,7 +131,8 @@ export default function AddAssetsBulk() {
const { user } = useAuth();
const [isPublic, setIsPublic] = useState("false");
- const [storageProvider, setStorageProvider] = useState("s3");
+ // TEMPORARY: locked to S3 (see zrok tunnel note; revert after VPS migration)
+ const storageProvider = "s3";
const total = jobs.length;
const done = jobs.filter((j) => j.status === "uploaded").length;
@@ -177,11 +178,10 @@ export default function AddAssetsBulk() {
-