diff --git a/src/frontend/apps/web/src/features/stock/ui/stocks-list-table.tsx b/src/frontend/apps/web/src/features/stock/ui/stocks-list-table.tsx index 4cf4e6c7..07e3771e 100644 --- a/src/frontend/apps/web/src/features/stock/ui/stocks-list-table.tsx +++ b/src/frontend/apps/web/src/features/stock/ui/stocks-list-table.tsx @@ -1,10 +1,33 @@ 'use client'; -import { SortingState, flexRender, getCoreRowModel, getSortedRowModel, useReactTable } from '@tanstack/react-table'; +import { + ColumnFiltersState, + SortingState, + VisibilityState, + flexRender, + getCoreRowModel, + getFilteredRowModel, + getSortedRowModel, + useReactTable, +} from '@tanstack/react-table'; import { useState } from 'react'; import { Stock, columns } from '../model'; -import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@workspace/ui/components'; +import { + Button, + DropdownMenu, + DropdownMenuCheckboxItem, + DropdownMenuContent, + DropdownMenuTrigger, + Input, + Table, + TableBody, + TableCell, + TableHead, + TableHeader, + TableRow, +} from '@workspace/ui/components'; import { useRouter } from 'next/navigation'; +import { ChevronDown } from 'lucide-react'; const Stockdata: Stock[] = [ { @@ -50,27 +73,85 @@ const Stockdata: Stock[] = [ ]; const StocksListTable = () => { - const [sorting, setSorting] = useState([]); const router = useRouter(); + const [sorting, setSorting] = useState([]); + + const [columnFilters, setColumnFilters] = useState([]); + const [columnVisibility, setColumnVisibility] = useState({}); + const [rowSelection, setRowSelection] = useState({}); const table = useReactTable({ data: Stockdata, columns, onSortingChange: setSorting, + onColumnFiltersChange: setColumnFilters, getCoreRowModel: getCoreRowModel(), getSortedRowModel: getSortedRowModel(), + getFilteredRowModel: getFilteredRowModel(), + onColumnVisibilityChange: setColumnVisibility, + onRowSelectionChange: setRowSelection, state: { sorting, + columnFilters, + columnVisibility, + rowSelection, }, }); return ( -
- +
+
+ + table.getColumn('name')?.setFilterValue(event.target.value) + } + className="max-w-sm" + /> + + + + + + {table + .getAllColumns() + .filter((column) => column.getCanHide()) + .map((column) => { + if (column.id === 'name') return; + + return ( + + column.toggleVisibility(!!value) + } + > + {column.id} + + ); + })} + + +
+
{table.getHeaderGroups().map((headerGroup) => ( {headerGroup.headers.map((header) => { - return {header.isPlaceholder ? null : flexRender(header.column.columnDef.header, header.getContext())}; + return ( + + {header.isPlaceholder + ? null + : flexRender( + header.column.columnDef.header, + header.getContext(), + )} + + ); })} ))} @@ -86,7 +167,9 @@ const StocksListTable = () => { }} > {row.getVisibleCells().map((cell) => ( - {flexRender(cell.column.columnDef.cell, cell.getContext())} + + {flexRender(cell.column.columnDef.cell, cell.getContext())} + ))} )) @@ -94,7 +177,7 @@ const StocksListTable = () => { No results.