Skip to content

Commit 3e7fe6d

Browse files
committed
feat: update actions
1 parent 1c75fff commit 3e7fe6d

File tree

3 files changed

+58
-39
lines changed

3 files changed

+58
-39
lines changed

src/app/_components/tasks-table-action-bar.tsx

Lines changed: 3 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -3,27 +3,22 @@
33
import { type Task, tasks } from "@/db/schema";
44
import { SelectTrigger } from "@radix-ui/react-select";
55
import type { Table } from "@tanstack/react-table";
6-
import { ArrowUp, CheckCircle2, Download, Trash2, X } from "lucide-react";
6+
import { ArrowUp, CheckCircle2, Download, Trash2 } from "lucide-react";
77
import * as React from "react";
88
import { toast } from "sonner";
99

1010
import {
1111
DataTableActionBar,
1212
DataTableActionBarAction,
13+
DataTableActionBarSelection,
1314
} from "@/components/data-table-action-bar";
14-
import { Button } from "@/components/ui/button";
1515
import {
1616
Select,
1717
SelectContent,
1818
SelectGroup,
1919
SelectItem,
2020
} from "@/components/ui/select";
2121
import { Separator } from "@/components/ui/separator";
22-
import {
23-
Tooltip,
24-
TooltipContent,
25-
TooltipTrigger,
26-
} from "@/components/ui/tooltip";
2722
import { exportTableToCSV } from "@/lib/export";
2823
import { deleteTasks, updateTasks } from "../_lib/actions";
2924

@@ -104,35 +99,7 @@ export function TasksTableActionBar({ table }: TasksTableActionBarProps) {
10499

105100
return (
106101
<DataTableActionBar table={table} visible={rows.length > 0}>
107-
<div className="flex h-7 items-center rounded-md border pr-1 pl-2.5">
108-
<span className="whitespace-nowrap text-xs">
109-
{rows.length} selected
110-
</span>
111-
<Separator
112-
orientation="vertical"
113-
className="mr-1 ml-2 data-[orientation=vertical]:h-4"
114-
/>
115-
<Tooltip>
116-
<TooltipTrigger asChild>
117-
<Button
118-
variant="ghost"
119-
size="icon"
120-
className="size-5 [&>svg]:size-3.5"
121-
onClick={() => table.toggleAllRowsSelected(false)}
122-
>
123-
<X />
124-
</Button>
125-
</TooltipTrigger>
126-
<TooltipContent className="flex items-center gap-2 border bg-accent px-2 py-1 font-semibold text-foreground dark:bg-zinc-900">
127-
<p>Clear selection</p>
128-
<kbd className="select-none rounded border bg-background px-1.5 py-px font-mono font-normal text-[0.7rem] text-foreground shadow-xs disabled:opacity-50">
129-
<abbr title="Escape" className="no-underline">
130-
Esc
131-
</abbr>
132-
</kbd>
133-
</TooltipContent>
134-
</Tooltip>
135-
</div>
102+
<DataTableActionBarSelection table={table} />
136103
<Separator
137104
orientation="vertical"
138105
className="hidden data-[orientation=vertical]:h-5 sm:block"

src/app/_components/update-task-sheet.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ export function UpdateTaskSheet({ task, ...props }: UpdateTaskSheetProps) {
6262

6363
return (
6464
<Sheet {...props}>
65-
<SheetContent className="flex flex-col gap-6 sm:max-w-md ">
65+
<SheetContent className="flex flex-col gap-6 sm:max-w-md">
6666
<SheetHeader className="text-left">
6767
<SheetTitle>Update task</SheetTitle>
6868
<SheetDescription>

src/components/data-table-action-bar.tsx

Lines changed: 54 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,15 @@
11
"use client";
22

33
import { Button } from "@/components/ui/button";
4+
import { Separator } from "@/components/ui/separator";
45
import {
56
Tooltip,
67
TooltipContent,
78
TooltipTrigger,
89
} from "@/components/ui/tooltip";
910
import { cn } from "@/lib/utils";
1011
import type { Table } from "@tanstack/react-table";
11-
import { Loader } from "lucide-react";
12+
import { Loader, X } from "lucide-react";
1213
import { AnimatePresence, motion } from "motion/react";
1314
import * as React from "react";
1415
import * as ReactDOM from "react-dom";
@@ -123,4 +124,55 @@ function DataTableActionBarAction({
123124
);
124125
}
125126

126-
export { DataTableActionBar, DataTableActionBarAction };
127+
interface DataTableActionBarSelectionProps<TData> {
128+
table: Table<TData>;
129+
}
130+
131+
function DataTableActionBarSelection<TData>({
132+
table,
133+
}: DataTableActionBarSelectionProps<TData>) {
134+
const onClearSelection = React.useCallback(() => {
135+
table.toggleAllRowsSelected(false);
136+
}, [table]);
137+
138+
return (
139+
<div className="flex h-7 items-center rounded-md border pr-1 pl-2.5">
140+
<span className="whitespace-nowrap text-xs">
141+
{table.getFilteredSelectedRowModel().rows.length} selected
142+
</span>
143+
<Separator
144+
orientation="vertical"
145+
className="mr-1 ml-2 data-[orientation=vertical]:h-4"
146+
/>
147+
<Tooltip>
148+
<TooltipTrigger asChild>
149+
<Button
150+
variant="ghost"
151+
size="icon"
152+
className="size-5"
153+
onClick={onClearSelection}
154+
>
155+
<X className="size-3.5" />
156+
</Button>
157+
</TooltipTrigger>
158+
<TooltipContent
159+
sideOffset={10}
160+
className="flex items-center gap-2 border bg-accent px-2 py-1 font-semibold text-foreground dark:bg-zinc-900 [&>span]:hidden"
161+
>
162+
<p>Clear selection</p>
163+
<kbd className="select-none rounded border bg-background px-1.5 py-px font-mono font-normal text-[0.7rem] text-foreground shadow-xs disabled:opacity-50">
164+
<abbr title="Escape" className="no-underline">
165+
Esc
166+
</abbr>
167+
</kbd>
168+
</TooltipContent>
169+
</Tooltip>
170+
</div>
171+
);
172+
}
173+
174+
export {
175+
DataTableActionBar,
176+
DataTableActionBarAction,
177+
DataTableActionBarSelection,
178+
};

0 commit comments

Comments
 (0)