From 33e8452331c301430191b3506825ebaf3edac93a Mon Sep 17 00:00:00 2001 From: dujinkim Date: Wed, 1 Oct 2025 09:48:03 +0000 Subject: (최겸) 구매 PQ 리스트 기능 수정, 견적 첨부파일 리비전 액션 추가, 기타 등 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/pq/table/pq-lists-columns.tsx | 127 ++++++++++++++++++++++++++++++++++---- 1 file changed, 116 insertions(+), 11 deletions(-) (limited to 'lib/pq/table/pq-lists-columns.tsx') diff --git a/lib/pq/table/pq-lists-columns.tsx b/lib/pq/table/pq-lists-columns.tsx index 1c401fac..a9262a12 100644 --- a/lib/pq/table/pq-lists-columns.tsx +++ b/lib/pq/table/pq-lists-columns.tsx @@ -13,9 +13,19 @@ import { DropdownMenuTrigger } from "@/components/ui/dropdown-menu" import { Button } from "@/components/ui/button" -import React from "react" +import React, { useMemo, useState } from "react" import { DataTableColumnHeaderSimple } from "@/components/data-table/data-table-column-simple-header" import { Checkbox } from "@/components/ui/checkbox" +import { + Sheet, + SheetContent, + SheetDescription, + SheetFooter, + SheetHeader, + SheetTitle, +} from "@/components/ui/sheet" +import { DatePicker } from "@/components/ui/date-picker" +import { toast } from "sonner" export interface PQList { id: number @@ -48,6 +58,84 @@ const typeColors = { interface GetColumnsProps { setRowAction: React.Dispatch | null>> } + +// 유효일 수정 시트 컴포넌트 +interface EditValidToSheetProps { + pqList: PQList | null + open: boolean + onOpenChange: (open: boolean) => void + onUpdate: (pqListId: number, newValidTo: Date | null) => Promise +} + +export function EditValidToSheet({ pqList, open, onOpenChange, onUpdate }: EditValidToSheetProps) { + const [newValidTo, setNewValidTo] = useState(pqList?.validTo || null) + const [isLoading, setIsLoading] = useState(false) + + const handleSave = async () => { + if (!pqList) return + + setIsLoading(true) + try { + await onUpdate(pqList.id, newValidTo) + onOpenChange(false) + } catch (error) { + console.error("유효일 수정 실패:", error) + } finally { + setIsLoading(false) + } + } + + return ( + + + + 유효일 수정 + + {pqList && ( + <> + {pqList.name}의 유효일을 수정합니다. + + )} + + + +
+
+
+ +
+ {pqList?.validTo ? formatDate(pqList.validTo, "ko-KR") : "설정되지 않음"} +
+
+ +
+ +
+ setNewValidTo(date ?? null)} + placeholder="새 유효일을 선택하세요" + minDate={new Date()} + /> +
+
+
+
+ + + + + +
+
+ ) +} + export function createPQListsColumns({ setRowAction }: GetColumnsProps): ColumnDef[] { @@ -122,17 +210,23 @@ export function createPQListsColumns({ ), cell: ({ row }) => { const validTo = row.getValue("validTo") as Date | null - const now = new Date() - const isExpired = validTo && validTo < now - - const formattedDate = validTo ? formatDate(validTo, "ko-KR") : "-" - + + const dateInfo = useMemo(() => { + if (!validTo) return { formattedDate: "-", isExpired: false } + + const now = new Date() + const isExpired = validTo < now + const formattedDate = formatDate(validTo, "ko-KR") + + return { formattedDate, isExpired } + }, [validTo]) + return (
- - {formattedDate} + + {dateInfo.formattedDate} - {isExpired && ( + {dateInfo.isExpired && ( 만료 @@ -168,14 +262,20 @@ export function createPQListsColumns({ header: ({ column }) => ( ), - cell: ({ row }) => formatDate(row.getValue("createdAt"), "ko-KR"), + cell: ({ row }) => { + const createdAt = row.getValue("createdAt") as Date + return useMemo(() => formatDate(createdAt, "ko-KR"), [createdAt]) + }, }, { accessorKey: "updatedAt", header: ({ column }) => ( ), - cell: ({ row }) => formatDate(row.getValue("updatedAt"), "ko-KR"), + cell: ({ row }) => { + const updatedAt = row.getValue("updatedAt") as Date + return useMemo(() => formatDate(updatedAt, "ko-KR"), [updatedAt]) + }, }, { id: "actions", @@ -196,6 +296,11 @@ export function createPQListsColumns({ > 상세보기 + setRowAction({ row, type: "editValidTo" })} + > + 유효일 수정 + {/* setRowAction({ row, type: "delete" })} -- cgit v1.2.3