# v2-table-grouped (그룹화 테이블) ## 개요 데이터를 특정 컬럼 기준으로 그룹화하여 접기/펼치기 기능을 제공하는 테이블 컴포넌트입니다. ## 주요 기능 - **그룹화**: 지정된 컬럼 기준으로 데이터를 그룹핑 - **접기/펼치기**: 그룹 헤더 클릭으로 하위 항목 토글 - **그룹 요약**: 그룹별 개수, 합계, 평균, 최대/최소값 표시 - **체크박스 선택**: 그룹 단위 또는 개별 항목 선택 - **전체 펼치기/접기**: 모든 그룹 일괄 토글 버튼 ## 사용 예시 ```tsx import { TableGroupedComponent } from "./TableGroupedComponent"; console.log("선택:", event.selectedItems)} onRowClick={(event) => console.log("행 클릭:", event.row)} /> ``` ## 설정 옵션 ### 기본 설정 | 옵션 | 타입 | 기본값 | 설명 | |------|------|--------|------| | `selectedTable` | string | - | 데이터 테이블명 | | `useCustomTable` | boolean | false | 커스텀 테이블 사용 여부 | | `customTableName` | string | - | 커스텀 테이블명 | | `columns` | ColumnConfig[] | [] | 표시할 컬럼 설정 | ### 그룹화 설정 (groupConfig) | 옵션 | 타입 | 기본값 | 설명 | |------|------|--------|------| | `groupByColumn` | string | - | 그룹화 기준 컬럼 (필수) | | `groupLabelFormat` | string | "{value}" | 그룹 라벨 형식 | | `defaultExpanded` | boolean | true | 초기 펼침 상태 | | `sortDirection` | "asc" \| "desc" | "asc" | 그룹 정렬 방향 | | `summary.showCount` | boolean | true | 개수 표시 여부 | | `summary.sumColumns` | string[] | [] | 합계 컬럼 목록 | | `summary.avgColumns` | string[] | [] | 평균 컬럼 목록 | ### 표시 설정 | 옵션 | 타입 | 기본값 | 설명 | |------|------|--------|------| | `showCheckbox` | boolean | false | 체크박스 표시 | | `checkboxMode` | "single" \| "multi" | "multi" | 선택 모드 | | `showExpandAllButton` | boolean | true | 전체 펼치기/접기 버튼 | | `groupHeaderStyle` | "default" \| "compact" \| "card" | "default" | 그룹 헤더 스타일 | | `rowClickable` | boolean | true | 행 클릭 가능 여부 | | `maxHeight` | number | 600 | 최대 높이 (px) | | `emptyMessage` | string | "데이터가 없습니다." | 빈 데이터 메시지 | ## 이벤트 ### onSelectionChange 선택 상태가 변경될 때 호출됩니다. ```typescript interface SelectionChangeEvent { selectedGroups: string[]; // 선택된 그룹 키 목록 selectedItems: any[]; // 선택된 아이템 전체 isAllSelected: boolean; // 전체 선택 여부 } ``` ### onGroupToggle 그룹 펼치기/접기 시 호출됩니다. ```typescript interface GroupToggleEvent { groupKey: string; // 그룹 키 expanded: boolean; // 펼침 상태 } ``` ### onRowClick 행 클릭 시 호출됩니다. ```typescript interface RowClickEvent { row: any; // 클릭된 행 데이터 groupKey: string; // 그룹 키 indexInGroup: number; // 그룹 내 인덱스 } ``` ## 그룹 라벨 형식 `groupLabelFormat`에서 사용 가능한 플레이스홀더: - `{value}`: 그룹화 컬럼의 값 - `{컬럼명}`: 해당 컬럼의 값 **예시:** ``` groupLabelFormat: "{item_name} ({item_code}) - {category}" // 결과: "제품A (P001) - 완제품" ``` ## 파일 구조 ``` v2-table-grouped/ ├── index.ts # Definition ├── types.ts # 타입 정의 ├── config.ts # 기본 설정값 ├── TableGroupedComponent.tsx # 메인 컴포넌트 ├── TableGroupedConfigPanel.tsx # 설정 패널 ├── TableGroupedRenderer.tsx # 레지스트리 등록 ├── components/ │ └── GroupHeader.tsx # 그룹 헤더 ├── hooks/ │ └── useGroupedData.ts # 그룹화 로직 훅 └── README.md ``` ## v2-table-list와의 차이점 | 항목 | v2-table-list | v2-table-grouped | |------|---------------|------------------| | 데이터 구조 | 플랫 리스트 | 계층 구조 (그룹 > 아이템) | | 렌더링 | 행 단위 | 그룹 헤더 + 상세 행 | | 선택 | 개별 행 | 그룹 단위 / 개별 단위 | | 요약 | 전체 합계 (선택) | 그룹별 요약 | | 용도 | 일반 데이터 목록 | 카테고리별 분류 데이터 | ## 관련 컴포넌트 - `v2-table-list`: 기본 테이블 (그룹화 없음) - `v2-pivot-grid`: 피벗 테이블 (다차원 집계) - `v2-split-panel-layout`: 마스터-디테일 레이아웃