// config/columns.config.jsx // Column definitions and pinning config for the Users table. import { buildColumns } from "@/utils/table.util"; import { buildSelectionColumn } from "@/components/generic/Table/buildSelectionColumn"; import { buildRowActionsColumn } from "@/components/generic/Table/buildRowActionsColumn"; import { Badge } from "@/components/ui/badge"; import { Book, BookOpenCheck, Clock } from "lucide-react"; import { formatDuration } from "@/utils/timestamp.util"; export const columnPinning = { right: ["actions"], left: [], }; // ─── Custom cell overrides ──────────────────────────────────────────────────── const cellOverrides = { unitCount: (info) => { const count = parseInt(info.getValue() ?? 0, 10); return (
{count} {count === 1 ? "unit" : "units"}
); }, lessonCount: (info) => { const count = parseInt(info.getValue() ?? 0, 10); return (
{count} {count === 1 ? "lesson" : "lessons"}
); }, duration_seconds: (info) => { const seconds = parseInt(info.getValue() ?? 0, 10); return (
{formatDuration(seconds)}
); }, }; /** * Builds the full column array for the Users table. * * @param {Array} attributes Field definitions from the server (drives data columns) * @param {Array} rowActions Row-level kebab action definitions * @returns {Array} TanStack column definitions */ export function buildDataColumns(attributes, rowActions) { const visibleAttributes = attributes.filter((a) => !a.hidden); return [ buildSelectionColumn(), ...buildColumns(visibleAttributes, { cellOverrides }), buildRowActionsColumn(rowActions, { dropdownLabel: "Course Actions" }), ]; }