add deselect option to context menu
This commit is contained in:
parent
97a537f5a2
commit
c6496130e3
|
@ -6,17 +6,23 @@ import { Trash2 } from "lucide-react"
|
||||||
import Link from "next/link"
|
import Link from "next/link"
|
||||||
import { ContextMenuSeparator } from "@radix-ui/react-context-menu"
|
import { ContextMenuSeparator } from "@radix-ui/react-context-menu"
|
||||||
|
|
||||||
export default function FormContextMenu({ pathname, row }) {
|
export default function FormContextMenu({ pathname, row, selectedRows, deselect }) {
|
||||||
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Dialog>
|
<Dialog modal={true}>
|
||||||
<ContextMenuContent >
|
<ContextMenuContent >
|
||||||
{pathname !== "/submission" ?
|
{pathname !== "/submission" && selectedRows.length <= 1 ?
|
||||||
<Link href={`${pathname}/${row.original.id}`}>
|
<Link href={`${pathname}/${row.original.id}`}>
|
||||||
<ContextMenuItem>Inspect</ContextMenuItem>
|
<ContextMenuItem>Inspect</ContextMenuItem>
|
||||||
</Link>
|
</Link>
|
||||||
: ""
|
: ""
|
||||||
}
|
}
|
||||||
|
{
|
||||||
|
selectedRows ?
|
||||||
|
<ContextMenuItem onClick={deselect}>Deselect</ContextMenuItem>
|
||||||
|
: ""
|
||||||
|
}
|
||||||
<ContextMenuSeparator />
|
<ContextMenuSeparator />
|
||||||
<DialogTrigger asChild>
|
<DialogTrigger asChild>
|
||||||
<ContextMenuItem className="text-destructive">Delete</ContextMenuItem>
|
<ContextMenuItem className="text-destructive">Delete</ContextMenuItem>
|
||||||
|
|
|
@ -15,7 +15,7 @@ import {
|
||||||
DropdownMenuRadioGroup
|
DropdownMenuRadioGroup
|
||||||
} from "@/components/ui/dropdown-menu"
|
} from "@/components/ui/dropdown-menu"
|
||||||
import { Input } from "@/components/ui/input"
|
import { Input } from "@/components/ui/input"
|
||||||
import { Component, ComponentProps, useState } from "react"
|
import { Component, ComponentProps, use, useState } from "react"
|
||||||
import {
|
import {
|
||||||
ColumnDef,
|
ColumnDef,
|
||||||
flexRender,
|
flexRender,
|
||||||
|
@ -82,8 +82,12 @@ export function DataTable<TData, TValue>({
|
||||||
columnVisibility,
|
columnVisibility,
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
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)
|
||||||
return (<>
|
return (<>
|
||||||
<div className="flex justify-between items-center py-4">
|
<div className="flex justify-between items-center py-4">
|
||||||
<div className="flex gap-2">
|
<div className="flex gap-2">
|
||||||
|
@ -204,20 +208,26 @@ export function DataTable<TData, TValue>({
|
||||||
<TableBody>
|
<TableBody>
|
||||||
{table.getRowModel().rows?.length ? (
|
{table.getRowModel().rows?.length ? (
|
||||||
table.getRowModel().rows.map((row) => (
|
table.getRowModel().rows.map((row) => (
|
||||||
<ContextMenu>
|
<ContextMenu onOpenChange={open => setIsContextMenuOpen(open)}>
|
||||||
<ContextMenuTrigger asChild>
|
<ContextMenuTrigger asChild>
|
||||||
<TableRow
|
<TableRow
|
||||||
key={row.id}
|
key={row.id}
|
||||||
data-state={row.getIsSelected() && "selected"}
|
data-state={row.getIsSelected() && "selected"}
|
||||||
tabIndex={0}
|
tabIndex={0}
|
||||||
onClick={() => row.toggleSelected()}
|
//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}>
|
||||||
{flexRender(cell.column.columnDef.cell, cell.getContext())}
|
{flexRender(cell.column.columnDef.cell, cell.getContext())}
|
||||||
</TableCell>
|
</TableCell>
|
||||||
))}
|
))}
|
||||||
<FormContextMenu pathname={pathname} row={row} />
|
<FormContextMenu
|
||||||
|
pathname={pathname}
|
||||||
|
row={row}
|
||||||
|
selectedRows={table.getSelectedRowModel().flatRows}
|
||||||
|
deselect={table.resetRowSelection}
|
||||||
|
/>
|
||||||
</TableRow>
|
</TableRow>
|
||||||
</ContextMenuTrigger>
|
</ContextMenuTrigger>
|
||||||
</ContextMenu>
|
</ContextMenu>
|
||||||
|
|
Loading…
Reference in New Issue