Spaces:
Paused
Paused
"use client" | |
import * as React from "react" | |
import { | |
ColumnDef, | |
ColumnFiltersState, | |
SortingState, | |
VisibilityState, | |
flexRender, | |
getCoreRowModel, | |
getFacetedRowModel, | |
getFacetedUniqueValues, | |
getFilteredRowModel, | |
getPaginationRowModel, | |
getSortedRowModel, | |
useReactTable, | |
} from "@tanstack/react-table" | |
import { | |
Table, | |
TableBody, | |
TableCell, | |
TableHead, | |
TableHeader, | |
TableRow, | |
} from "@/components/ui/table" | |
import { columns } from "@/components/business/tasks/columns" | |
import { VideoTask } from "@/app/types" | |
export function VideoTasksQueue({ | |
tasks | |
}: { | |
tasks: VideoTask[] | |
}) { | |
const [rowSelection, setRowSelection] = React.useState({}) | |
const [columnVisibility, setColumnVisibility] = | |
React.useState<VisibilityState>({}) | |
const [columnFilters, setColumnFilters] = React.useState<ColumnFiltersState>( | |
[] | |
) | |
const [sorting, setSorting] = React.useState<SortingState>([]) | |
const table = useReactTable({ | |
data: tasks, | |
columns: columns as ColumnDef<VideoTask, any>[], | |
state: { | |
sorting, | |
columnVisibility, | |
rowSelection, | |
columnFilters, | |
}, | |
enableRowSelection: true, | |
onRowSelectionChange: setRowSelection, | |
onSortingChange: setSorting, | |
onColumnFiltersChange: setColumnFilters, | |
onColumnVisibilityChange: setColumnVisibility, | |
getCoreRowModel: getCoreRowModel(), | |
getFilteredRowModel: getFilteredRowModel(), | |
getPaginationRowModel: getPaginationRowModel(), | |
getSortedRowModel: getSortedRowModel(), | |
getFacetedRowModel: getFacetedRowModel(), | |
getFacetedUniqueValues: getFacetedUniqueValues(), | |
}) | |
return ( | |
<div className="rounded-lg border overflow-hidden"> | |
<Table> | |
<TableHeader> | |
{table.getHeaderGroups().map((headerGroup) => ( | |
<TableRow key={headerGroup.id}> | |
{headerGroup.headers.map((header) => { | |
return ( | |
<TableHead key={header.id}> | |
{header.isPlaceholder | |
? null | |
: flexRender( | |
header.column.columnDef.header, | |
header.getContext() | |
)} | |
</TableHead> | |
) | |
})} | |
</TableRow> | |
))} | |
</TableHeader> | |
<TableBody> | |
{table.getRowModel().rows?.length ? ( | |
table.getRowModel().rows.map((row) => ( | |
<TableRow | |
key={row.id} | |
data-state={row.getIsSelected() && "selected"} | |
> | |
{row.getVisibleCells().map((cell) => ( | |
<TableCell key={cell.id}> | |
{flexRender( | |
cell.column.columnDef.cell, | |
cell.getContext() | |
)} | |
</TableCell> | |
))} | |
</TableRow> | |
)) | |
) : ( | |
<TableRow> | |
<TableCell | |
colSpan={columns.length} | |
className="h-24 text-center" | |
> | |
No recent video. | |
</TableCell> | |
</TableRow> | |
)} | |
</TableBody> | |
</Table> | |
</div> | |
) | |
} |