5.1 KiB
5.1 KiB
v2-table-grouped (그룹화 테이블)
개요
데이터를 특정 컬럼 기준으로 그룹화하여 접기/펼치기 기능을 제공하는 테이블 컴포넌트입니다.
주요 기능
- 그룹화: 지정된 컬럼 기준으로 데이터를 그룹핑
- 접기/펼치기: 그룹 헤더 클릭으로 하위 항목 토글
- 그룹 요약: 그룹별 개수, 합계, 평균, 최대/최소값 표시
- 체크박스 선택: 그룹 단위 또는 개별 항목 선택
- 전체 펼치기/접기: 모든 그룹 일괄 토글 버튼
사용 예시
import { TableGroupedComponent } from "./TableGroupedComponent";
<TableGroupedComponent
config={{
selectedTable: "production_plan_mng",
groupConfig: {
groupByColumn: "item_code",
groupLabelFormat: "{item_name} ({item_code})",
defaultExpanded: true,
summary: {
showCount: true,
sumColumns: ["quantity"],
},
},
columns: [
{ columnName: "plan_no", displayName: "계획번호", visible: true },
{ columnName: "plan_date", displayName: "계획일", visible: true },
{ columnName: "quantity", displayName: "수량", visible: true, format: "number" },
],
showCheckbox: true,
checkboxMode: "multi",
showExpandAllButton: true,
}}
onSelectionChange={(event) => 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
선택 상태가 변경될 때 호출됩니다.
interface SelectionChangeEvent {
selectedGroups: string[]; // 선택된 그룹 키 목록
selectedItems: any[]; // 선택된 아이템 전체
isAllSelected: boolean; // 전체 선택 여부
}
onGroupToggle
그룹 펼치기/접기 시 호출됩니다.
interface GroupToggleEvent {
groupKey: string; // 그룹 키
expanded: boolean; // 펼침 상태
}
onRowClick
행 클릭 시 호출됩니다.
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: 마스터-디테일 레이아웃