// config/library/lessons/columns.config.jsx // Column definitions and pinning for the standalone Lesson Library table. import { Badge } from "@/components/ui/badge"; import { Clock, Layers, Tag } from "lucide-react"; import * as LucideIcons 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"; import { resolveTierBadge } from "@/utils/tierBadge.util"; export const columnPinning = { right: ["actions"], left: [], }; function buildCellOverrides(tierMap) { return { 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 (
{formatDuration(seconds)}
); }, course_count: (info) => { const n = parseInt(info.getValue() ?? 0, 10); return ( {n} course{n === 1 ? "" : "s"} ); }, subscription: (info) => { const own = info.getValue(); // Not gated directly — fall back to the tier(s) inherited from any // affiliated course(s) instead of showing a bare "-". const slug = own || info.row.original.course_subscription; if (!slug) return -; const { label, cls } = resolveTierBadge(slug, tierMap); const Icon = LucideIcons[tierMap[slug]?.badge_icon] ?? Tag; return ( {label} ); }, }; } export function buildDataColumns(attributes, rowActions, tierMap = {}) { const visibleAttributes = attributes.filter((a) => !a.hidden); const cellOverrides = buildCellOverrides(tierMap); return [ buildSelectionColumn(), ...buildColumns(visibleAttributes, { cellOverrides }), buildRowActionsColumn(rowActions, { dropdownLabel: "Lesson Actions" }), ]; }