summaryrefslogtreecommitdiff
path: root/lib/general-contracts_old/main/general-contracts-table-toolbar-actions.tsx
diff options
context:
space:
mode:
authorTheSiahxyz <164138827+TheSiahxyz@users.noreply.github.com>2025-11-10 11:25:19 +0900
committerTheSiahxyz <164138827+TheSiahxyz@users.noreply.github.com>2025-11-10 11:25:19 +0900
commita5501ad1d1cb836d2b2f84e9b0f06049e22c901e (patch)
tree667ed8c5d6ec35b109190e9f976d66ae54def4ce /lib/general-contracts_old/main/general-contracts-table-toolbar-actions.tsx
parentb0fe980376fcf1a19ff4b90851ca8b01f378fdc0 (diff)
parentf8a38907911d940cb2e8e6c9aa49488d05b2b578 (diff)
Merge remote-tracking branch 'origin/dujinkim' into master_homemaster
Diffstat (limited to 'lib/general-contracts_old/main/general-contracts-table-toolbar-actions.tsx')
-rw-r--r--lib/general-contracts_old/main/general-contracts-table-toolbar-actions.tsx124
1 files changed, 124 insertions, 0 deletions
diff --git a/lib/general-contracts_old/main/general-contracts-table-toolbar-actions.tsx b/lib/general-contracts_old/main/general-contracts-table-toolbar-actions.tsx
new file mode 100644
index 00000000..f16b759a
--- /dev/null
+++ b/lib/general-contracts_old/main/general-contracts-table-toolbar-actions.tsx
@@ -0,0 +1,124 @@
+"use client"
+
+import * as React from "react"
+import { type Table } from "@tanstack/react-table"
+import {
+ Download, FileSpreadsheet,
+ Trash2,
+} from "lucide-react"
+import { deleteContract } from "../service"
+import { toast } from "sonner"
+import { exportTableToExcel } from "@/lib/export"
+import { Button } from "@/components/ui/button"
+import {
+ DropdownMenu,
+ DropdownMenuContent,
+ DropdownMenuItem,
+ DropdownMenuTrigger,
+} from "@/components/ui/dropdown-menu"
+import { GeneralContractListItem } from "./general-contracts-table-columns"
+import { CreateGeneralContractDialog } from "./create-general-contract-dialog"
+
+interface GeneralContractsTableToolbarActionsProps {
+ table: Table<GeneralContractListItem>
+}
+
+export function GeneralContractsTableToolbarActions({ table }: GeneralContractsTableToolbarActionsProps) {
+ const [isExporting, setIsExporting] = React.useState(false)
+
+ // 선택된 계약들
+ const selectedContracts = React.useMemo(() => {
+ return table
+ .getFilteredSelectedRowModel()
+ .rows
+ .map(row => row.original)
+ }, [table.getFilteredSelectedRowModel().rows])
+
+ const handleExport = async () => {
+ try {
+ setIsExporting(true)
+ await exportTableToExcel(table, {
+ filename: "general-contracts",
+ excludeColumns: ["select", "actions"],
+ })
+ toast.success("계약 목록이 성공적으로 내보내졌습니다.")
+ } catch (error) {
+ toast.error("내보내기 중 오류가 발생했습니다.")
+ } finally {
+ setIsExporting(false)
+ }
+ }
+
+
+ const handleDelete = async () => {
+ if (selectedContracts.length === 0) {
+ toast.error("계약폐기할 계약을 선택해주세요.")
+ return
+ }
+
+ // // 계약폐기 확인
+ // const confirmed = window.confirm(
+ // `선택한 ${selectedContracts.length}개 계약을 폐기하시겠습니까?\n계약폐기 후에는 복구할 수 없습니다.`
+ // )
+
+ // if (!confirmed) return
+
+ try {
+ // 선택된 모든 계약을 폐기 처리
+ const deletePromises = selectedContracts.map(contract =>
+ deleteContract(contract.id)
+ )
+
+ await Promise.all(deletePromises)
+
+ toast.success(`${selectedContracts.length}개 계약이 폐기되었습니다.`)
+
+ // 테이블 새로고침
+ } catch (error) {
+ console.error('Error deleting contracts:', error)
+ toast.error("계약폐기 중 오류가 발생했습니다.")
+ }
+ }
+
+ return (
+ <div className="flex items-center gap-2">
+ {/* 신규 등록 */}
+ <CreateGeneralContractDialog />
+
+ {/* 계약폐기 */}
+ <Button
+ variant="outline"
+ size="sm"
+ onClick={handleDelete}
+ disabled={selectedContracts.length === 0}
+ className="text-red-600 hover:text-red-700 hover:bg-red-50"
+ >
+ <Trash2 className="mr-2 h-4 w-4" />
+ 계약폐기
+ </Button>
+
+ {/* Export */}
+ <DropdownMenu>
+ <DropdownMenuTrigger asChild>
+ <Button
+ variant="outline"
+ size="sm"
+ className="gap-2"
+ disabled={isExporting}
+ >
+ <Download className="size-4" aria-hidden="true" />
+ <span className="hidden sm:inline">
+ {isExporting ? "내보내는 중..." : "Export"}
+ </span>
+ </Button>
+ </DropdownMenuTrigger>
+ <DropdownMenuContent align="end">
+ <DropdownMenuItem onClick={handleExport} disabled={isExporting}>
+ <FileSpreadsheet className="mr-2 size-4" />
+ <span>계약 목록 내보내기</span>
+ </DropdownMenuItem>
+ </DropdownMenuContent>
+ </DropdownMenu>
+ </div>
+ )
+}