add: ver()

Signed-off-by: Kenneth Obsequio <k80308392@gmail.com>
This commit is contained in:
2026-07-08 11:31:54 +08:00
parent 6624c0d27f
commit 182bd93d10
46 changed files with 4407 additions and 98 deletions
@@ -0,0 +1,48 @@
// config/library/lessons/columns.config.jsx
// Column definitions and pinning for the standalone Lesson Library table.
import { Badge } from "@/components/ui/badge";
import { Clock } from "lucide-react";
import { buildColumns } from "@/utils/table.util";
import { buildSelectionColumn } from "@/components/generic/Table/buildSelectionColumn";
import { buildRowActionsColumn } from "@/components/generic/Table/buildRowActionsColumn";
import { formatDuration } from "@/utils/timestamp.util";
export const columnPinning = {
right: ["actions"],
left: [],
};
const cellOverrides = {
duration_seconds: (info) => {
const seconds = parseInt(info.getValue() ?? 0, 10);
return (
<div className="flex items-center gap-1.5">
<Clock className="h-3.5 w-3.5 text-muted-foreground" />
<Badge variant="secondary" className="text-xs font-medium tabular-nums">
{formatDuration(seconds)}
</Badge>
</div>
);
},
unit_count: (info) => {
const n = parseInt(info.getValue() ?? 0, 10);
return n > 0 ? (
<Badge variant="secondary" className="text-xs tabular-nums">
in {n} unit{n === 1 ? "" : "s"}
</Badge>
) : (
<Badge variant="outline" className="text-xs text-muted-foreground">standalone</Badge>
);
},
};
export function buildDataColumns(attributes, rowActions) {
const visibleAttributes = attributes.filter((a) => !a.hidden);
return [
buildSelectionColumn(),
...buildColumns(visibleAttributes, { cellOverrides }),
buildRowActionsColumn(rowActions, { dropdownLabel: "Lesson Actions" }),
];
}