diff --git a/packages/web/src/directories/directory-page/directory-content-table.tsx b/packages/web/src/directories/directory-page/directory-content-table.tsx index f60de21..96f3181 100644 --- a/packages/web/src/directories/directory-page/directory-content-table.tsx +++ b/packages/web/src/directories/directory-page/directory-content-table.tsx @@ -39,12 +39,14 @@ import { TextFileIcon } from "../../components/icons/text-file-icon" import { type FileDragInfo, useFileDrop } from "../../files/use-file-drop" import { cn } from "../../lib/utils" import { DirectoryPageContext } from "./context" -import { contextMenuTargeItemsAtom } from "./state" type DirectoryContentTableProps = { filterFn: (item: FileSystemItem) => boolean fileDragInfoAtom: PrimitiveAtom - onContextMenu: (items: FileSystemItem[]) => void + onContextMenu: ( + row: Row, + table: TableType, + ) => void onOpenFile: (file: Doc<"files">) => void } @@ -144,15 +146,7 @@ function useTableColumns( ) } -export function DirectoryContentTable(props: DirectoryContentTableProps) { - return ( -
- -
- ) -} - -export function DirectoryContentTableContent({ +export function DirectoryContentTable({ filterFn, onContextMenu, fileDragInfoAtom, @@ -190,17 +184,10 @@ export function DirectoryContentTableContent({ row: Row, _event: React.MouseEvent, ) => { - const target = store.get(contextMenuTargeItemsAtom) - if (target.length > 0) { - onContextMenu(target) - } else if (row.getIsSelected()) { - onContextMenu( - table.getSelectedRowModel().rows.map((row) => row.original), - ) - } else { + if (!row.getIsSelected()) { selectRow(row) - onContextMenu([row.original]) } + onContextMenu(row, table) } const selectRow = (row: Row) => { diff --git a/packages/web/src/routes/_authenticated/_sidebar-layout/directories.$directoryId.tsx b/packages/web/src/routes/_authenticated/_sidebar-layout/directories.$directoryId.tsx index 27f177f..add44e1 100644 --- a/packages/web/src/routes/_authenticated/_sidebar-layout/directories.$directoryId.tsx +++ b/packages/web/src/routes/_authenticated/_sidebar-layout/directories.$directoryId.tsx @@ -7,6 +7,7 @@ import { } from "@fileone/convex/model/filesystem" import { useMutation } from "@tanstack/react-query" import { createFileRoute } from "@tanstack/react-router" +import type { Row, Table } from "@tanstack/react-table" import { useMutation as useContextMutation, useMutation as useConvexMutation, @@ -98,6 +99,19 @@ function RouteComponent() { [setOpenedFile], ) + const handleContextMenuRequest = ( + row: Row, + table: Table, + ) => { + if (row.getIsSelected()) { + setContextMenuTargetItems( + table.getSelectedRowModel().rows.map((row) => row.original), + ) + } else { + setContextMenuTargetItems([row.original]) + } + } + if (!directory || !directoryContent || !rootDirectory) { return } @@ -114,16 +128,17 @@ function RouteComponent() { -
- + {/* DirectoryContentContextMenu must wrap div instead of DirectoryContentTable, otherwise radix will throw "event.preventDefault is not a function" error, idk why */} + +
- -
+
+ {(newFileType, setNewFileType) => ( @@ -168,6 +183,7 @@ function DirectoryContentContextMenu({ const [target, setTarget] = useAtom(contextMenuTargetItemsAtom) const setOptimisticDeletedItems = useSetAtom(optimisticDeletedItemsAtom) const moveToTrashMutation = useContextMutation(api.filesystem.moveToTrash) + const { mutate: moveToTrash } = useMutation({ mutationFn: moveToTrashMutation, onMutate: ({ handles }) => { @@ -205,6 +221,8 @@ function DirectoryContentContextMenu({ } } + console.log("target", target) + return ( { @@ -214,7 +232,7 @@ function DirectoryContentContextMenu({ }} > {children} - {target && ( + {target.length > 0 && (