diff --git a/frontend/components/screen/InteractiveDataTable.tsx b/frontend/components/screen/InteractiveDataTable.tsx index 3165bfa8..7a150e57 100644 --- a/frontend/components/screen/InteractiveDataTable.tsx +++ b/frontend/components/screen/InteractiveDataTable.tsx @@ -144,8 +144,8 @@ export const InteractiveDataTable: React.FC = ({ const [filteredData, setFilteredData] = useState([]); // 필터링된 데이터 const [columnLabels, setColumnLabels] = useState>({}); // 컬럼명 -> 라벨 매핑 - // 카테고리 값 매핑 캐시 (컬럼명 -> {코드 -> 라벨}) - const [categoryMappings, setCategoryMappings] = useState>>({}); + // 카테고리 값 매핑 캐시 (컬럼명 -> {코드 -> {라벨, 색상}}) + const [categoryMappings, setCategoryMappings] = useState>>({}); // 공통코드 옵션 가져오기 const loadCodeOptions = useCallback( @@ -208,7 +208,7 @@ export const InteractiveDataTable: React.FC = ({ if (!categoryColumns || categoryColumns.length === 0) return; // 각 카테고리 컬럼의 값 목록 조회 - const mappings: Record> = {}; + const mappings: Record> = {}; for (const col of categoryColumns) { try { @@ -217,10 +217,13 @@ export const InteractiveDataTable: React.FC = ({ ); if (response.data.success && response.data.data) { - // valueCode -> valueLabel 매핑 생성 - const mapping: Record = {}; + // valueCode -> {label, color} 매핑 생성 + const mapping: Record = {}; response.data.data.forEach((item: any) => { - mapping[item.valueCode] = item.valueLabel; + mapping[item.valueCode] = { + label: item.valueLabel, + color: item.color, + }; }); mappings[col.columnName] = mapping; } @@ -1911,11 +1914,23 @@ export const InteractiveDataTable: React.FC = ({ // 실제 웹 타입으로 스위치 (input_type="category"도 포함됨) switch (actualWebType) { case "category": { - // 카테고리 타입: 코드값 -> 라벨로 변환 + // 카테고리 타입: 배지로 표시 const mapping = categoryMappings[column.columnName]; if (mapping && value) { - const label = mapping[String(value)]; - return label || String(value); + const categoryData = mapping[String(value)]; + if (categoryData) { + return ( + + {categoryData.label} + + ); + } } return String(value || ""); }