summaryrefslogtreecommitdiff
path: root/lib/tech-vendors/items-table/item-table-toolbar-actions.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'lib/tech-vendors/items-table/item-table-toolbar-actions.tsx')
-rw-r--r--lib/tech-vendors/items-table/item-table-toolbar-actions.tsx104
1 files changed, 0 insertions, 104 deletions
diff --git a/lib/tech-vendors/items-table/item-table-toolbar-actions.tsx b/lib/tech-vendors/items-table/item-table-toolbar-actions.tsx
deleted file mode 100644
index b327ff56..00000000
--- a/lib/tech-vendors/items-table/item-table-toolbar-actions.tsx
+++ /dev/null
@@ -1,104 +0,0 @@
-"use client"
-
-import * as React from "react"
-import { type Table } from "@tanstack/react-table"
-import { Download, Upload } from "lucide-react"
-import { toast } from "sonner"
-
-import { exportTableToExcel } from "@/lib/export"
-import { Button } from "@/components/ui/button"
-import { TechVendorItemsView } from "@/db/schema/techVendors"
-import { AddItemDialog } from "./add-item-dialog"
-import { importTasksExcel } from "@/lib/tasks/service"
-
-interface TechVendorItemsTableToolbarActionsProps {
- table: Table<TechVendorItemsView>
- vendorId: number
- vendorType: string
-}
-
-export function TechVendorItemsTableToolbarActions({ table, vendorId, vendorType }: TechVendorItemsTableToolbarActionsProps) {
- // 파일 input을 숨기고, 버튼 클릭 시 참조해 클릭하는 방식
- const fileInputRef = React.useRef<HTMLInputElement>(null)
-
- // 파일이 선택되었을 때 처리
- async function onFileChange(event: React.ChangeEvent<HTMLInputElement>) {
- const file = event.target.files?.[0]
- if (!file) return
-
- // 파일 초기화 (동일 파일 재업로드 시에도 onChange가 트리거되도록)
- event.target.value = ""
-
- // 서버 액션 or API 호출
- try {
- // 예: 서버 액션 호출
- const { errorFile, errorMessage } = await importTasksExcel(file)
-
- if (errorMessage) {
- toast.error(errorMessage)
- }
- if (errorFile) {
- // 에러 엑셀을 다운로드
- const url = URL.createObjectURL(errorFile)
- const link = document.createElement("a")
- link.href = url
- link.download = "errors.xlsx"
- link.click()
- URL.revokeObjectURL(url)
- } else {
- // 성공
- toast.success("Import success")
- // 필요 시 revalidateTag("tasks") 등
- }
-
- } catch (err) {
- console.error("파일 업로드 중 오류가 발생했습니다:", err)
- toast.error("파일 업로드 중 오류가 발생했습니다.")
- }
- }
-
- function handleImportClick() {
- // 숨겨진 <input type="file" /> 요소를 클릭
- fileInputRef.current?.click()
- }
-
- return (
- <div className="flex items-center gap-2">
-
- {/* <AddItemDialog vendorId={vendorId} vendorType={vendorType} /> */}
-
- {/** 3) Import 버튼 (파일 업로드) */}
- <Button variant="outline" size="sm" className="gap-2" onClick={handleImportClick}>
- <Upload className="size-4" aria-hidden="true" />
- <span className="hidden sm:inline">Import</span>
- </Button>
- {/*
- 실제로는 숨겨진 input과 연결:
- - accept=".xlsx,.xls" 등으로 Excel 파일만 업로드 허용
- */}
- <input
- ref={fileInputRef}
- type="file"
- accept=".xlsx,.xls"
- className="hidden"
- onChange={onFileChange}
- />
-
- {/** 4) Export 버튼 */}
- <Button
- variant="outline"
- size="sm"
- onClick={() =>
- exportTableToExcel(table, {
- filename: "tech-vendor-items",
- excludeColumns: ["select", "actions"],
- })
- }
- className="gap-2"
- >
- <Download className="size-4" aria-hidden="true" />
- <span className="hidden sm:inline">Export</span>
- </Button>
- </div>
- )
-} \ No newline at end of file