From 2ce5f9dfbb69f0898c42ab862db5ad142fa24943 Mon Sep 17 00:00:00 2001 From: dujinkim Date: Tue, 14 Oct 2025 09:14:10 +0000 Subject: (최겸) 구매 입찰 1회성 품목 기준정보 개발(스키마, 테이블, CRUD, 페이지 등) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../table/procurement-items-table.tsx | 152 +++++++++++++++++++++ 1 file changed, 152 insertions(+) create mode 100644 lib/procurement-items/table/procurement-items-table.tsx (limited to 'lib/procurement-items/table/procurement-items-table.tsx') diff --git a/lib/procurement-items/table/procurement-items-table.tsx b/lib/procurement-items/table/procurement-items-table.tsx new file mode 100644 index 00000000..a504af40 --- /dev/null +++ b/lib/procurement-items/table/procurement-items-table.tsx @@ -0,0 +1,152 @@ +"use client" + +import * as React from "react" +import { useRouter } from "next/navigation" +import type { + DataTableAdvancedFilterField, + DataTableFilterField, + DataTableRowAction +} from "@/types/table" + +import { useDataTable } from "@/hooks/use-data-table" +import { DataTable } from "@/components/data-table/data-table" +import { DataTableAdvancedToolbar } from "@/components/data-table/data-table-advanced-toolbar" + +import { getProcurementItems } from "../service" +import { ProcurementItem } from "@/db/schema/items" +import { getColumns } from "./procurement-items-table-columns" +import { ProcurementItemsTableToolbarActions } from "./procurement-items-table-toolbar-actions" +import { UpdateProcurementItemSheet } from "./update-procurement-items-sheet" +import { DeleteProcurementItemsDialog } from "./delete-procurement-items-dialog" + +interface ProcurementItemsTableProps { + promises?: Promise< + [ + Awaited>, + ] + > +} + +export function ProcurementItemsTable({ promises }: ProcurementItemsTableProps) { + // 페이지네이션 모드 데이터 + const paginationData = promises ? React.use(promises) : null + const [{ data = [], pageCount = 0 }] = paginationData || [{ data: [], pageCount: 0 }] + + console.log('ProcurementItemsTable data:', data.length, 'items') + + const [rowAction, setRowAction] = + React.useState | null>(null) + + const [isCompact, setIsCompact] = React.useState(false) + + const router = useRouter() + + const columns = React.useMemo( + () => getColumns({ setRowAction }), + [setRowAction] + ) + + // 필터 필드들 + const filterFields: DataTableFilterField[] = [ + { + id: "itemCode", + label: "품목코드", + }, + ] + + const advancedFilterFields: DataTableAdvancedFilterField[] = [ + { + id: "itemCode", + label: "품목코드", + type: "text", + }, + { + id: "itemName", + label: "품목명", + type: "text", + }, + { + id: "material", + label: "재질", + type: "text", + }, + { + id: "specification", + label: "규격", + type: "text", + }, + { + id: "unit", + label: "단위", + type: "text", + }, + { + id: "isActive", + label: "활성화여부", + type: "text", + }, + ] + + const handleCompactChange = (compact: boolean) => { + setIsCompact(compact) + } + + // useDataTable 훅 사용 + const {table} = useDataTable({ + data: data, + pageCount: pageCount, + columns, + filterFields, + enableAdvancedFilter: true, + initialState: { + pageSize: 10, + sorting: [{ id: "createdAt", desc: true }], + columnVisibility: { + id: false, + updatedAt: false, + }, + }, + getRowId: (originalRow) => String(originalRow.id), + shallow: false, + clearOnDefault: true, + }) + + return ( + <> + + + + + + + setRowAction(null)} + procurementItem={rowAction?.row.original} + /> + + setRowAction(null)} + procurementItems={rowAction?.row.original ? [rowAction.row.original] : []} + showTrigger={false} + onSuccess={() => { + setRowAction(null) + router.refresh() + }} + /> + + ) +} -- cgit v1.2.3