"use client" import * as React from "react" import { SelectTrigger } from "@radix-ui/react-select" import { type Table } from "@tanstack/react-table" import { ArrowUp, CheckCircle2, Download, Loader, Trash2, X, } from "lucide-react" import { toast } from "sonner" import { exportTableToExcel } from "@/lib/export" import { Button } from "@/components/ui/button" import { Portal } from "@/components/ui/portal" import { Select, SelectContent, SelectGroup, SelectItem, } from "@/components/ui/select" import { Separator } from "@/components/ui/separator" import { Tooltip, TooltipContent, TooltipTrigger, } from "@/components/ui/tooltip" import { Kbd } from "@/components/kbd" import { removeTags } from "@/lib//tags/service" import { ActionConfirmDialog } from "@/components/ui/action-dialog" import { Tag } from "@/db/schema/vendorData" interface TagsTableFloatingBarProps { table: Table packageCode: string projectCode: string } export function TagsTableFloatingBar({ table, packageCode, projectCode}: TagsTableFloatingBarProps) { const rows = table.getFilteredSelectedRowModel().rows const [isPending, startTransition] = React.useTransition() const [action, setAction] = React.useState< "update-status" | "update-priority" | "export" | "delete" >() const [popoverOpen, setPopoverOpen] = React.useState(false) // Clear selection on Escape key press React.useEffect(() => { function handleKeyDown(event: KeyboardEvent) { if (event.key === "Escape") { table.toggleAllRowsSelected(false) } } window.addEventListener("keydown", handleKeyDown) return () => window.removeEventListener("keydown", handleKeyDown) }, [table]) // 공용 confirm dialog state const [confirmDialogOpen, setConfirmDialogOpen] = React.useState(false) const [confirmProps, setConfirmProps] = React.useState<{ title: string description?: string onConfirm: () => Promise | void }>({ title: "", description: "", onConfirm: () => { }, }) // 1) "삭제" Confirm 열기 function handleDeleteConfirm() { setAction("delete") setConfirmProps({ title: `Delete ${rows.length} tag${rows.length > 1 ? "s" : ""}?`, description: "This action cannot be undone.", onConfirm: async () => { startTransition(async () => { const { error } = await removeTags({ ids: rows.map((row) => row.original.id), selectedPackageId }) if (error) { toast.error(error) return } toast.success("Tags deleted") table.toggleAllRowsSelected(false) setConfirmDialogOpen(false) }) }, }) setConfirmDialogOpen(true) } return (
{rows.length} selected

Clear selection

Esc

Export tasks

Delete tasks

{/* 공용 Confirm Dialog */}
) }