select checkboxes
This commit is contained in:
		
							parent
							
								
									d32b689fbb
								
							
						
					
					
						commit
						24ddda4a9e
					
				|  | @ -6,11 +6,13 @@ import { Button } from "@/components/ui/button" | ||||||
| import GenreBadges from "app/ui/genreBadges" | import GenreBadges from "app/ui/genreBadges" | ||||||
| import { actions } from "app/ui/tables/actions" | import { actions } from "app/ui/tables/actions" | ||||||
| import { TextInputCell } from "app/ui/inputs/textInput" | import { TextInputCell } from "app/ui/inputs/textInput" | ||||||
|  | import { selectCol } from "app/ui/tables/selectColumn" | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| const columnHelper = createColumnHelper<StoryWithGenres>() | const columnHelper = createColumnHelper<StoryWithGenres>() | ||||||
| 
 | 
 | ||||||
| export const columns: ColumnDef<StoryWithGenres>[] = [ | export const columns: ColumnDef<StoryWithGenres>[] = [ | ||||||
|  |   selectCol, | ||||||
|   { |   { | ||||||
|     accessorKey: "title", |     accessorKey: "title", | ||||||
|     header: ({ column }) => { |     header: ({ column }) => { | ||||||
|  |  | ||||||
|  | @ -1072,10 +1072,6 @@ body { | ||||||
|   align-items: flex-start; |   align-items: flex-start; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| .items-end { |  | ||||||
|   align-items: flex-end; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| .items-center { | .items-center { | ||||||
|   align-items: center; |   align-items: center; | ||||||
| } | } | ||||||
|  | @ -1100,6 +1096,10 @@ body { | ||||||
|   justify-content: space-around; |   justify-content: space-around; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | .justify-items-center { | ||||||
|  |   justify-items: center; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| .gap-1 { | .gap-1 { | ||||||
|   gap: 0.25rem; |   gap: 0.25rem; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -46,7 +46,7 @@ import { Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, Di | ||||||
| import pluralize from "app/lib/pluralize" | import pluralize from "app/lib/pluralize" | ||||||
| import { updateTextField } from "app/lib/update" | import { updateTextField } from "app/lib/update" | ||||||
| 
 | 
 | ||||||
| interface DataTableProps<TData, TValue> { | export interface DataTableProps<TData, TValue> { | ||||||
|   columns: ColumnDef<TData, TValue>[] |   columns: ColumnDef<TData, TValue>[] | ||||||
|   data: TData[] |   data: TData[] | ||||||
| } | } | ||||||
|  | @ -85,13 +85,12 @@ export function DataTable<TData, TValue>({ | ||||||
|     //this is where you put arbitrary functions etc to make them accessible via the table api
 |     //this is where you put arbitrary functions etc to make them accessible via the table api
 | ||||||
|     meta: { |     meta: { | ||||||
|       updateTextField, |       updateTextField, | ||||||
|       //TODO - move select row action here so it can be accessed from within a cell
 |  | ||||||
|       selectRow: () => { } |  | ||||||
|     } |     } | ||||||
|   }) |   }) | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | 
 | ||||||
|   const pathname: Pathname = usePathname() |   const pathname: Pathname = usePathname() | ||||||
|   const [filterBy, setFilterBy] = useState(table.getAllColumns()[0]) |   const [filterBy, setFilterBy] = useState(table.getAllColumns()[0]) | ||||||
|   const [isContextMenuOpen, setIsContextMenuOpen] = useState(false) |   const [isContextMenuOpen, setIsContextMenuOpen] = useState(false) | ||||||
|  | @ -221,8 +220,6 @@ export function DataTable<TData, TValue>({ | ||||||
|                     key={row.id} |                     key={row.id} | ||||||
|                     data-state={row.getIsSelected() && "selected"} |                     data-state={row.getIsSelected() && "selected"} | ||||||
|                     tabIndex={0} |                     tabIndex={0} | ||||||
|                     //check if context menu is open, so as not to select the row on clicking a menu item
 |  | ||||||
|                     onClick={() => { if (!isContextMenuOpen) { row.toggleSelected() } }} |  | ||||||
|                   > |                   > | ||||||
|                     {row.getVisibleCells().map((cell) => ( |                     {row.getVisibleCells().map((cell) => ( | ||||||
|                       <TableCell key={cell.id}> |                       <TableCell key={cell.id}> | ||||||
|  |  | ||||||
|  | @ -0,0 +1,30 @@ | ||||||
|  | import { Checkbox } from "@/components/ui/checkbox"; | ||||||
|  | import { CellContext, Column, ColumnDef, ColumnMeta, Header, HeaderContext, RowSelectionTableState, Table, TableState } from "@tanstack/react-table"; | ||||||
|  | 
 | ||||||
|  | export const selectCol = { | ||||||
|  |   id: "select", | ||||||
|  |   header: (props: HeaderContext<any, any>) => { | ||||||
|  |     return ( | ||||||
|  |       <div className="flex items-center justify-center"> | ||||||
|  |         <Checkbox | ||||||
|  |           checked={props.table.getIsAllRowsSelected()} | ||||||
|  |           onCheckedChange={props.table.toggleAllRowsSelected} | ||||||
|  |           aria-label="select/deselect all rows" | ||||||
|  |         /> | ||||||
|  |       </div> | ||||||
|  | 
 | ||||||
|  |     ) | ||||||
|  |   }, | ||||||
|  | 
 | ||||||
|  |   cell: (props: CellContext<any, any>) => { | ||||||
|  |     return ( | ||||||
|  |       <div className="flex items-center justify-center"> | ||||||
|  |         <Checkbox | ||||||
|  |           checked={props.row.getIsSelected()} | ||||||
|  |           onCheckedChange={props.row.toggleSelected} | ||||||
|  |           aria-label="select/deselect row" /> | ||||||
|  |       </div> | ||||||
|  |     ) | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | 
 | ||||||
		Loading…
	
		Reference in New Issue