summaryrefslogtreecommitdiff
path: root/lib/pq/pq-criteria
diff options
context:
space:
mode:
Diffstat (limited to 'lib/pq/pq-criteria')
-rw-r--r--lib/pq/pq-criteria/add-pq-dialog.tsx2
-rw-r--r--lib/pq/pq-criteria/pq-table-column.tsx50
-rw-r--r--lib/pq/pq-criteria/pq-table-toolbar-actions.tsx48
-rw-r--r--lib/pq/pq-criteria/pq-table.tsx10
-rw-r--r--lib/pq/pq-criteria/update-pq-sheet.tsx1
5 files changed, 82 insertions, 29 deletions
diff --git a/lib/pq/pq-criteria/add-pq-dialog.tsx b/lib/pq/pq-criteria/add-pq-dialog.tsx
index 33e656c2..660eb360 100644
--- a/lib/pq/pq-criteria/add-pq-dialog.tsx
+++ b/lib/pq/pq-criteria/add-pq-dialog.tsx
@@ -68,7 +68,9 @@ const inputFormatOptions = [
{ value: "FILE", label: "파일" },
{ value: "EMAIL", label: "이메일" },
{ value: "PHONE", label: "전화번호" },
+ { value: "FAX", label: "팩스번호" },
{ value: "NUMBER", label: "숫자" },
+ { value: "NUMBER_WITH_UNIT", label: "숫자+단위" },
{ value: "TEXT_FILE", label: "텍스트 + 파일" },
];
diff --git a/lib/pq/pq-criteria/pq-table-column.tsx b/lib/pq/pq-criteria/pq-table-column.tsx
index 32d6cc32..ed1180f7 100644
--- a/lib/pq/pq-criteria/pq-table-column.tsx
+++ b/lib/pq/pq-criteria/pq-table-column.tsx
@@ -18,13 +18,16 @@ import { Button } from "@/components/ui/button"
import { Ellipsis } from "lucide-react"
import { Badge } from "@/components/ui/badge"
import { PqCriterias } from "@/db/schema/pq"
+import { toast } from "sonner"
interface GetColumnsProps {
setRowAction: React.Dispatch<React.SetStateAction<DataTableRowAction<PqCriterias> | null>>
+ pqListInfo?: Awaited<ReturnType<typeof import("../service").getPQListInfo>>
}
export function getColumns({
setRowAction,
+ pqListInfo,
}: GetColumnsProps): ColumnDef<PqCriterias>[] {
return [
{
@@ -205,6 +208,12 @@ export function getColumns({
id: "actions",
enableHiding: false,
cell: function Cell({ row }) {
+ const isActive = pqListInfo?.success && pqListInfo.data.status === "ACTIVE";
+
+ const handleRestrictedAction = () => {
+ toast.error("활성화된 PQ 목록은 수정할 수 없습니다. 먼저 PQ 목록을 비활성화해주세요.");
+ };
+
return (
<DropdownMenu>
<DropdownMenuTrigger asChild>
@@ -217,18 +226,37 @@ export function getColumns({
</Button>
</DropdownMenuTrigger>
<DropdownMenuContent align="end" className="w-40">
- <DropdownMenuItem
- onSelect={() => setRowAction({ row, type: "update" })}
- >
- Edit
- </DropdownMenuItem>
+ {isActive ? (
+ <DropdownMenuItem
+ onSelect={handleRestrictedAction}
+ className="text-muted-foreground"
+ >
+ Edit
+ </DropdownMenuItem>
+ ) : (
+ <DropdownMenuItem
+ onSelect={() => setRowAction({ row, type: "update" })}
+ >
+ Edit
+ </DropdownMenuItem>
+ )}
- <DropdownMenuItem
- onSelect={() => setRowAction({ row, type: "delete" })}
- >
- Delete
- <DropdownMenuShortcut>⌘⌫</DropdownMenuShortcut>
- </DropdownMenuItem>
+ {isActive ? (
+ <DropdownMenuItem
+ onSelect={handleRestrictedAction}
+ className="text-muted-foreground"
+ >
+ Delete
+ <DropdownMenuShortcut>⌘⌫</DropdownMenuShortcut>
+ </DropdownMenuItem>
+ ) : (
+ <DropdownMenuItem
+ onSelect={() => setRowAction({ row, type: "delete" })}
+ >
+ Delete
+ <DropdownMenuShortcut>⌘⌫</DropdownMenuShortcut>
+ </DropdownMenuItem>
+ )}
</DropdownMenuContent>
</DropdownMenu>
)
diff --git a/lib/pq/pq-criteria/pq-table-toolbar-actions.tsx b/lib/pq/pq-criteria/pq-table-toolbar-actions.tsx
index f168b83d..cdc4f813 100644
--- a/lib/pq/pq-criteria/pq-table-toolbar-actions.tsx
+++ b/lib/pq/pq-criteria/pq-table-toolbar-actions.tsx
@@ -17,37 +17,59 @@ import { type Table } from "@tanstack/react-table"
import { DeletePqsDialog } from "./delete-pqs-dialog"
import { AddPqDialog } from "./add-pq-dialog"
import { PqCriterias } from "@/db/schema/pq"
+import { toast } from "sonner"
// import { ImportPqButton } from "./import-pq-button"
// import { exportPqTemplate } from "./pq-excel-template"
interface PqTableToolbarActionsProps {
table: Table<PqCriterias>
pqListId: number
+ pqListInfo: Awaited<ReturnType<typeof import("../service").getPQListInfo>>
}
export function PqTableToolbarActions({
table,
- pqListId
+ pqListId,
+ pqListInfo
}: PqTableToolbarActionsProps) {
- // const [refreshKey, setRefreshKey] = React.useState(0)
+ // PQ 리스트가 ACTIVE 상태인지 확인
+ const isActive = pqListInfo.success && pqListInfo.data.status === "ACTIVE";
- // // Import 성공 후 테이블 갱신
- // const handleImportSuccess = () => {
- // setRefreshKey(prev => prev + 1)
- // }
+ // ACTIVE 상태일 때 기능 제한
+ const handleRestrictedAction = () => {
+ toast.error("활성화된 PQ 목록은 수정할 수 없습니다. 먼저 PQ 목록을 비활성화해주세요.");
+ };
return (
<div className="flex items-center gap-2">
{table.getFilteredSelectedRowModel().rows.length > 0 ? (
- <DeletePqsDialog
- pqs={table
- .getFilteredSelectedRowModel()
- .rows.map((row) => row.original)}
- onSuccess={() => table.toggleAllRowsSelected(false)}
- />
+ isActive ? (
+ <button
+ onClick={handleRestrictedAction}
+ className="inline-flex items-center justify-center rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 border border-input bg-background hover:bg-accent hover:text-accent-foreground h-9 px-3 text-destructive hover:text-destructive"
+ >
+ PQ 항목 삭제
+ </button>
+ ) : (
+ <DeletePqsDialog
+ pqs={table
+ .getFilteredSelectedRowModel()
+ .rows.map((row) => row.original)}
+ onSuccess={() => table.toggleAllRowsSelected(false)}
+ />
+ )
) : null}
- <AddPqDialog pqListId={pqListId} />
+ {isActive ? (
+ <button
+ onClick={handleRestrictedAction}
+ className="inline-flex items-center justify-center rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 bg-primary text-primary-foreground hover:bg-primary/90 h-9 px-3"
+ >
+ PQ 항목 추가
+ </button>
+ ) : (
+ <AddPqDialog pqListId={pqListId} />
+ )}
{/* Import 버튼 */}
{/* <ImportPqButton
diff --git a/lib/pq/pq-criteria/pq-table.tsx b/lib/pq/pq-criteria/pq-table.tsx
index e0e3dee5..187a727b 100644
--- a/lib/pq/pq-criteria/pq-table.tsx
+++ b/lib/pq/pq-criteria/pq-table.tsx
@@ -18,7 +18,7 @@ import { getColumns } from "./pq-table-column"
import { UpdatePqSheet } from "./update-pq-sheet"
interface DocumentListTableProps {
- promises: Promise<[Awaited<ReturnType<typeof getPQsByListId>>]>
+ promises: Promise<[Awaited<ReturnType<typeof getPQsByListId>>, Awaited<ReturnType<typeof getPQListInfo>>]>
pqListId: number
}
@@ -27,14 +27,14 @@ export function PqsTable({
pqListId
}: DocumentListTableProps) {
// 1) 데이터를 가져옴 (server component -> use(...) pattern)
- const [{ data, pageCount }] = React.use(promises)
+ const [{ data, pageCount }, pqListInfo] = React.use(promises)
const [rowAction, setRowAction] = React.useState<DataTableRowAction<PqCriterias> | null>(null)
const columns = React.useMemo(
- () => getColumns({ setRowAction }),
- [setRowAction]
+ () => getColumns({ setRowAction, pqListInfo }),
+ [setRowAction, pqListInfo]
)
// Filter fields
@@ -105,7 +105,7 @@ export function PqsTable({
filterFields={advancedFilterFields}
shallow={false}
>
- <PqTableToolbarActions table={table} pqListId={pqListId}/>
+ <PqTableToolbarActions table={table} pqListId={pqListId} pqListInfo={pqListInfo}/>
</DataTableAdvancedToolbar>
</DataTable>
diff --git a/lib/pq/pq-criteria/update-pq-sheet.tsx b/lib/pq/pq-criteria/update-pq-sheet.tsx
index 245627e6..fb298e9b 100644
--- a/lib/pq/pq-criteria/update-pq-sheet.tsx
+++ b/lib/pq/pq-criteria/update-pq-sheet.tsx
@@ -63,6 +63,7 @@ const inputFormatOptions = [
{ value: "EMAIL", label: "이메일" },
{ value: "PHONE", label: "전화번호" },
{ value: "NUMBER", label: "숫자" },
+ { value: "NUMBER_WITH_UNIT", label: "숫자+단위" },
{ value: "TEXT_FILE", label: "텍스트 + 파일" }
];