diff options
| author | dujinkim <dujin.kim@dtsolution.co.kr> | 2025-06-01 13:52:21 +0000 |
|---|---|---|
| committer | dujinkim <dujin.kim@dtsolution.co.kr> | 2025-06-01 13:52:21 +0000 |
| commit | bac0228d21b7195065e9cddcc327ae33659c7bcc (patch) | |
| tree | 8f3016ae4533c8706d0c00a605d9b1d41968c2bc /components/form-data/form-data-table-columns.tsx | |
| parent | 2fdce8d7a57c792bba0ac36fa554dca9c9cc31e3 (diff) | |
(대표님) 20250601까지 작업사항
Diffstat (limited to 'components/form-data/form-data-table-columns.tsx')
| -rw-r--r-- | components/form-data/form-data-table-columns.tsx | 50 |
1 files changed, 20 insertions, 30 deletions
diff --git a/components/form-data/form-data-table-columns.tsx b/components/form-data/form-data-table-columns.tsx index b088276e..bba2a208 100644 --- a/components/form-data/form-data-table-columns.tsx +++ b/components/form-data/form-data-table-columns.tsx @@ -22,7 +22,7 @@ import { toast } from 'sonner'; /** row 액션 관련 타입 */ export interface DataTableRowAction<TData> { row: Row<TData>; - type: "open" | "edit" | "update"; + type: "open" | "edit" | "update" | "delete"; } /** 컬럼 타입 (필요에 따라 확장) */ @@ -57,7 +57,7 @@ interface GetColumnsProps<TData> { // 체크박스 선택 관련 props selectedRows?: Record<string, boolean>; onRowSelectionChange?: (updater: Record<string, boolean> | ((prev: Record<string, boolean>) => Record<string, boolean>)) => void; - editableFieldsMap?: Map<string, string[]>; // 새로 추가 + // editableFieldsMap 제거됨 } /** @@ -73,7 +73,7 @@ export function getColumns<TData extends object>({ tempCount, selectedRows = {}, onRowSelectionChange, - editableFieldsMap = new Map(), // 새로 추가 + // editableFieldsMap 매개변수 제거됨 }: GetColumnsProps<TData>): ColumnDef<TData>[] { const columns: ColumnDef<TData>[] = []; @@ -122,6 +122,8 @@ export function getColumns<TData extends object>({ ), enableSorting: false, enableHiding: false, + enablePinning: true, // ← 이 줄 추가 + size: 40, }; columns.push(selectColumn); @@ -147,38 +149,16 @@ export function getColumns<TData extends object>({ cell: ({ row }) => { const cellValue = row.getValue(col.key); - // 기본 읽기 전용 여부 (shi 속성 기반) - let isReadOnly = col.shi === true; - - // 동적 읽기 전용 여부 계산 - if (!isReadOnly && col.key !== 'TAG_NO' && col.key !== 'TAG_DESC') { - const tagNo = row.getValue('TAG_NO') as string; - if (tagNo && editableFieldsMap.has(tagNo)) { - const editableFields = editableFieldsMap.get(tagNo) || []; - // 해당 TAG의 편집 가능 필드 목록에 없으면 읽기 전용 - isReadOnly = !editableFields.includes(col.key); - } else { - // TAG_NO가 없거나 editableFieldsMap에 없으면 읽기 전용 - isReadOnly = true; - } - } + // SHI 필드만 읽기 전용으로 처리 + const isReadOnly = col.shi === true; const readOnlyClass = isReadOnly ? "read-only-cell" : ""; const cellStyle = isReadOnly ? { backgroundColor: '#f5f5f5', color: '#666', cursor: 'not-allowed' } : {}; - // 툴팁 메시지 설정 - let tooltipMessage = ""; - if (isReadOnly) { - if (col.shi === true) { - tooltipMessage = "SHI 전용 필드입니다"; - } else if (col.key === 'TAG_NO' || col.key === 'TAG_DESC') { - tooltipMessage = "기본 필드는 수정할 수 없습니다"; - } else { - tooltipMessage = "이 TAG 클래스에서는 편집할 수 없는 필드입니다"; - } - } + // 툴팁 메시지 설정 (SHI 필드만) + const tooltipMessage = isReadOnly ? "SHI 전용 필드입니다" : ""; // 데이터 타입별 처리 switch (col.type) { @@ -220,6 +200,7 @@ export function getColumns<TData extends object>({ })); columns.push(...baseColumns); + // (4) 액션 칼럼 - update 버튼 예시 const actionColumn: ColumnDef<TData> = { id: "update", @@ -255,10 +236,19 @@ export function getColumns<TData extends object>({ > Create Document </DropdownMenuItem> + <DropdownMenuSeparator /> + <DropdownMenuItem + onSelect={() => { + setRowAction({ row, type: "delete" }); + }} + className="text-red-600 focus:text-red-600" + > + Delete + </DropdownMenuItem> </DropdownMenuContent> </DropdownMenu> ), - minSize: 50, + size: 40, enablePinning: true, }; |
