summaryrefslogtreecommitdiff
path: root/lib/procurement-rfqs/table/rfq-table copy.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'lib/procurement-rfqs/table/rfq-table copy.tsx')
-rw-r--r--lib/procurement-rfqs/table/rfq-table copy.tsx209
1 files changed, 0 insertions, 209 deletions
diff --git a/lib/procurement-rfqs/table/rfq-table copy.tsx b/lib/procurement-rfqs/table/rfq-table copy.tsx
deleted file mode 100644
index 510f474d..00000000
--- a/lib/procurement-rfqs/table/rfq-table copy.tsx
+++ /dev/null
@@ -1,209 +0,0 @@
-"use client"
-
-import * as React from "react"
-import type {
- DataTableAdvancedFilterField,
- DataTableFilterField,
- DataTableRowAction,
-} from "@/types/table"
-import { useDataTable } from "@/hooks/use-data-table"
-import { DataTable } from "@/components/data-table/data-table"
-import { getColumns, EditingCellState } from "./rfq-table-column"
-import { useEffect } from "react"
-import { DataTableAdvancedToolbar } from "@/components/data-table/data-table-advanced-toolbar"
-import { RFQTableToolbarActions } from "./rfq-table-toolbar-actions"
-import { ProcurementRfqsView } from "@/db/schema"
-import { getPORfqs } from "../services"
-import { toast } from "sonner"
-import { updateRfqRemark } from "@/lib/procurement-rfqs/services" // 구현 필요
-
-interface RFQListTableProps {
- data?: Awaited<ReturnType<typeof getPORfqs>>;
- onSelectRFQ?: (rfq: ProcurementRfqsView | null) => void;
- // 데이터 새로고침을 위한 콜백 추가
- onDataRefresh?: () => void;
- maxHeight?: string | number; // Add this prop
-}
-
-// 보다 유연한 타입 정의
-type LocalDataType = Awaited<ReturnType<typeof getPORfqs>>;
-
-export function RFQListTable({
- data,
- onSelectRFQ,
- onDataRefresh,
- maxHeight
-}: RFQListTableProps) {
- const [rowAction, setRowAction] = React.useState<DataTableRowAction<ProcurementRfqsView> | null>(null)
- // 인라인 에디팅을 위한 상태 추가
- const [editingCell, setEditingCell] = React.useState<EditingCellState | null>(null)
- // 로컬 데이터를 관리하기 위한 상태 추가
- const [localData, setLocalData] = React.useState<LocalDataType>(data || { data: [], pageCount: 0, total: 0 });
-
- // 데이터가 변경될 때 로컬 데이터도 업데이트
- useEffect(() => {
- setLocalData(data || { data: [], pageCount: 0, total: 0 })
- }, [data])
-
-
- // 비고 업데이트 함수
- const updateRemark = async (rfqId: number, remark: string) => {
- try {
- // 낙관적 UI 업데이트 (로컬 데이터 먼저 갱신)
- if (localData && localData.data) {
- // 로컬 데이터에서 해당 행 찾기
- const rowIndex = localData.data.findIndex(row => row.id === rfqId);
- if (rowIndex >= 0) {
- // 불변성을 유지하면서 로컬 데이터 업데이트
- const newData = [...localData.data];
- newData[rowIndex] = { ...newData[rowIndex], remark };
-
- // 전체 데이터 구조 복사하여 업데이트
- setLocalData({ ...localData, data: newData } as typeof localData);
- }
- }
-
- const result = await updateRfqRemark(rfqId, remark);
-
- if (result.success) {
- toast.success("비고가 업데이트되었습니다");
-
- // 서버 데이터 리프레시 호출
- if (onDataRefresh) {
- onDataRefresh();
- }
- } else {
- toast.error(result.message || "업데이트 중 오류가 발생했습니다");
- }
- } catch (error) {
- console.error("비고 업데이트 오류:", error);
- toast.error("업데이트 중 오류가 발생했습니다");
- }
- }
-
- // 행 액션 처리
- useEffect(() => {
- if (rowAction) {
- // 액션 유형에 따라 처리
- switch (rowAction.type) {
- case "select":
- // 선택된 문서 처리
- if (onSelectRFQ) {
- onSelectRFQ(rowAction.row.original)
- }
- break;
- case "update":
- // 업데이트 처리 로직
- console.log("Update rfq:", rowAction.row.original)
- break;
- case "delete":
- // 삭제 처리 로직
- console.log("Delete rfq:", rowAction.row.original)
- break;
- }
-
- // 액션 처리 후 rowAction 초기화
- setRowAction(null)
- }
- }, [rowAction, onSelectRFQ])
-
- const columns = React.useMemo(
- () => getColumns({
- setRowAction,
- editingCell,
- setEditingCell,
- updateRemark
- }),
- [setRowAction, editingCell, setEditingCell, updateRemark]
- )
-
-
- // Filter fields
- const filterFields: DataTableFilterField<ProcurementRfqsView>[] = []
-
- const advancedFilterFields: DataTableAdvancedFilterField<ProcurementRfqsView>[] = [
- {
- id: "rfqCode",
- label: "RFQ No.",
- type: "text",
- },
- {
- id: "projectCode",
- label: "프로젝트",
- type: "text",
- },
- {
- id: "itemCode",
- label: "자재그룹",
- type: "text",
- },
- {
- id: "itemName",
- label: "자재명",
- type: "text",
- },
-
- {
- id: "rfqSealedYn",
- label: "RFQ 밀봉여부",
- type: "text",
- },
- {
- id: "majorItemMaterialCode",
- label: "자재코드",
- type: "text",
- },
- {
- id: "rfqSendDate",
- label: "RFQ 전송일",
- type: "date",
- },
- {
- id: "dueDate",
- label: "RFQ 마감일",
- type: "date",
- },
- {
- id: "createdByUserName",
- label: "요청자",
- type: "text",
- },
- ]
-
- // useDataTable 훅으로 react-table 구성 - 로컬 데이터 사용하도록 수정
- const { table } = useDataTable({
- data: localData?.data || [],
- columns,
- pageCount: localData?.pageCount || 0,
- rowCount: localData?.total || 0, // 총 레코드 수 추가
- filterFields,
- enablePinning: true,
- enableAdvancedFilter: true,
- initialState: {
- sorting: [{ id: "updatedAt", desc: true }],
- },
- getRowId: (originalRow) => String(originalRow.id),
- shallow: false,
- clearOnDefault: true,
- columnResizeMode: "onEnd",
- })
-
- return (
- <div className="w-full overflow-auto">
- <DataTable table={table} maxHeight={maxHeight}>
- <DataTableAdvancedToolbar
- table={table}
- filterFields={advancedFilterFields}
- shallow={false}
- >
- <RFQTableToolbarActions
- table={table}
- localData={localData}
- setLocalData={setLocalData}
- onSuccess={onDataRefresh}
- />
- </DataTableAdvancedToolbar>
- </DataTable>
- </div>
- )
-} \ No newline at end of file