From fb276ed3db86fe4fc0c0fcd870fd3d085b034be0 Mon Sep 17 00:00:00 2001 From: dujinkim Date: Thu, 17 Jul 2025 10:50:28 +0000 Subject: (대표님) 벤더데이터 S-EDP 변경사항 대응(seperator), 정기평가 점수오류, dim 준비 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/equip-class/repository.ts | 2 + lib/equip-class/table/equipClass-table-columns.tsx | 143 +++++++++++++++++++-- lib/equip-class/table/equipClass-table.tsx | 27 ++-- 3 files changed, 155 insertions(+), 17 deletions(-) (limited to 'lib/equip-class') diff --git a/lib/equip-class/repository.ts b/lib/equip-class/repository.ts index d4d6d58b..5513fb03 100644 --- a/lib/equip-class/repository.ts +++ b/lib/equip-class/repository.ts @@ -28,6 +28,8 @@ export async function selectTagClassLists( code: tagClasses.code, label: tagClasses.label, tagTypeCode: tagClasses.tagTypeCode, + subclassRemark: tagClasses.subclassRemark, + subclasses: tagClasses.subclasses, createdAt: tagClasses.createdAt, updatedAt: tagClasses.updatedAt, // 프로젝트 정보 추가 diff --git a/lib/equip-class/table/equipClass-table-columns.tsx b/lib/equip-class/table/equipClass-table-columns.tsx index 0dfbf06f..51aacc97 100644 --- a/lib/equip-class/table/equipClass-table-columns.tsx +++ b/lib/equip-class/table/equipClass-table-columns.tsx @@ -9,17 +9,125 @@ import { formatDate } from "@/lib/utils" import { DataTableColumnHeaderSimple } from "@/components/data-table/data-table-column-simple-header" import { equipclassColumnsConfig } from "@/config/equipClassColumnsConfig" import { ExtendedTagClasses } from "../validation" +import { Badge } from "@/components/ui/badge" +import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from "@/components/ui/tooltip" interface GetColumnsProps { setRowAction: React.Dispatch | null>> } +// 서브클래스 배열을 렌더링하는 컴포넌트 +const SubclassesCell = ({ subclasses }: { subclasses: { + id: string; + desc: string; +}[] }) => { + if (!subclasses || subclasses.length === 0) { + return - + } + + if (subclasses.length <= 3) { + return ( +
+ {subclasses.map((subclass) => ( + + {subclass.desc} + + ))} +
+ ) + } + + return ( + + + +
+ {subclasses.slice(0, 2).map((subclass) => ( + + {subclass.desc} + + ))} + + +{subclasses.length - 2} + +
+
+ +
+
All Subclasses:
+
+ {subclasses.map((subclass) => ( + + {subclass.desc} + + ))} +
+
+
+
+
+ ) +} + +// 서브클래스 리마크를 렌더링하는 컴포넌트 +const SubclassRemarksCell = ({ remarks }: { remarks: Record }) => { + if (!remarks || Object.keys(remarks).length === 0) { + return - + } + + const entries = Object.entries(remarks) + + if (entries.length <= 2) { + return ( +
+ {entries.map(([key, value]) => ( +
+ {key}:{" "} + {value} +
+ ))} +
+ ) + } + + return ( + + + +
+ {entries.slice(0, 1).map(([key, value]) => ( +
+ {key}:{" "} + {value} +
+ ))} +
+ +{entries.length - 1} more... +
+
+
+ +
+
All Remarks:
+
+ {entries.map(([key, value]) => ( +
+ {key}:{" "} + {value} +
+ ))} +
+
+
+
+
+ ) +} + /** * tanstack table 컬럼 정의 (중첩 헤더 버전) */ export function getColumns({ setRowAction }: GetColumnsProps): ColumnDef[] { - - // ---------------------------------------------------------------- // 3) 일반 컬럼들을 "그룹"별로 묶어 중첩 columns 생성 // ---------------------------------------------------------------- @@ -47,12 +155,27 @@ export function getColumns({ setRowAction }: GetColumnsProps): ColumnDef { - - if (cfg.id === "createdAt"||cfg.id === "updatedAt") { + // 날짜 필드 처리 + if (cfg.id === "createdAt" || cfg.id === "updatedAt") { const dateVal = cell.getValue() as Date return formatDate(dateVal, "KR") } + // 서브클래스 배열 처리 + if (cfg.id === "subclasses") { + const subclasses = cell.getValue() as { + id: string; + desc: string; + }[] + return + } + + // 서브클래스 리마크 처리 + if (cfg.id === "subclassRemark") { + const remarks = cell.getValue() as Record + return + } + return row.getValue(cfg.id) ?? "" }, } @@ -65,9 +188,13 @@ export function getColumns({ setRowAction }: GetColumnsProps): ColumnDef[] = [] - // 순서를 고정하고 싶다면 group 순서를 미리 정의하거나 sort해야 함 - // 여기서는 그냥 Object.entries 순서 - Object.entries(groupMap).forEach(([groupName, colDefs]) => { + // 그룹 순서 정의 + const groupOrder = ["Basic Info", "Hierarchy", "Metadata", "_noGroup"] + + groupOrder.forEach((groupName) => { + const colDefs = groupMap[groupName] + if (!colDefs) return + if (groupName === "_noGroup") { // 그룹 없음 → 그냥 최상위 레벨 컬럼 nestedColumns.push(...colDefs) @@ -75,7 +202,7 @@ export function getColumns({ setRowAction }: GetColumnsProps): ColumnDef[] = [ - ] /** @@ -69,31 +68,41 @@ export function EquipClassTable({ promises }: ItemsTableProps) { id: "code", label: "Class ID", type: "text", - // group: "Basic Info", + group: "Basic Info", }, { id: "label", label: "Description", type: "text", - // group: "Basic Info", + group: "Basic Info", + }, + { + id: "tagTypeCode", + label: "Type ID", + type: "text", + group: "Basic Info", + }, + // 서브클래스 관련 필터 추가 + { + id: "subclasses", + label: "Subclasses", + type: "text", + group: "Hierarchy", }, - - { id: "createdAt", label: "Created At", type: "date", - // group: "Metadata",a + group: "Metadata", }, { id: "updatedAt", label: "Updated At", type: "date", - // group: "Metadata", + group: "Metadata", }, ] - const { table } = useDataTable({ data, columns, @@ -125,4 +134,4 @@ export function EquipClassTable({ promises }: ItemsTableProps) { ) -} +} \ No newline at end of file -- cgit v1.2.3