2025-11-12 10:48:24 +09:00
|
|
|
/**
|
|
|
|
|
* 테이블 옵션 관련 타입 정의
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 테이블 필터 조건
|
|
|
|
|
*/
|
|
|
|
|
export interface TableFilter {
|
|
|
|
|
columnName: string;
|
2025-12-11 14:25:28 +09:00
|
|
|
operator: "equals" | "contains" | "startsWith" | "endsWith" | "gt" | "lt" | "gte" | "lte" | "notEquals";
|
2025-11-12 10:48:24 +09:00
|
|
|
value: string | number | boolean;
|
2025-11-12 12:06:58 +09:00
|
|
|
filterType?: "text" | "number" | "date" | "select"; // 필터 입력 타입
|
2025-11-12 14:50:06 +09:00
|
|
|
width?: number; // 필터 입력 필드 너비 (px)
|
2025-11-12 10:48:24 +09:00
|
|
|
}
|
|
|
|
|
|
2025-12-11 14:25:28 +09:00
|
|
|
/**
|
|
|
|
|
* 그룹별 합산 설정
|
|
|
|
|
*/
|
|
|
|
|
export interface GroupSumConfig {
|
|
|
|
|
enabled: boolean; // 그룹핑 활성화 여부
|
|
|
|
|
groupByColumn: string; // 그룹 기준 컬럼
|
|
|
|
|
groupByColumnLabel?: string; // 그룹 기준 컬럼 라벨 (UI 표시용)
|
|
|
|
|
}
|
|
|
|
|
|
2025-11-12 10:48:24 +09:00
|
|
|
/**
|
|
|
|
|
* 컬럼 표시 설정
|
|
|
|
|
*/
|
|
|
|
|
export interface ColumnVisibility {
|
|
|
|
|
columnName: string;
|
|
|
|
|
visible: boolean;
|
|
|
|
|
width?: number;
|
|
|
|
|
order?: number;
|
|
|
|
|
fixed?: boolean; // 좌측 고정 여부
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 테이블 컬럼 정보
|
|
|
|
|
*/
|
|
|
|
|
export interface TableColumn {
|
|
|
|
|
columnName: string;
|
|
|
|
|
columnLabel: string;
|
|
|
|
|
inputType: string;
|
|
|
|
|
visible: boolean;
|
|
|
|
|
width: number;
|
|
|
|
|
sortable?: boolean;
|
|
|
|
|
filterable?: boolean;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 테이블 등록 정보
|
|
|
|
|
*/
|
|
|
|
|
export interface TableRegistration {
|
|
|
|
|
tableId: string; // 고유 ID (예: "table-list-123")
|
|
|
|
|
label: string; // 사용자에게 보이는 이름 (예: "품목 관리")
|
|
|
|
|
tableName: string; // 실제 DB 테이블명 (예: "item_info")
|
|
|
|
|
columns: TableColumn[];
|
2025-11-12 12:06:58 +09:00
|
|
|
dataCount?: number; // 현재 표시된 데이터 건수
|
2025-12-17 15:00:15 +09:00
|
|
|
|
|
|
|
|
// 탭 관련 정보 (탭 내부에 있는 테이블의 경우)
|
|
|
|
|
parentTabId?: string; // 부모 탭 ID
|
|
|
|
|
parentTabsComponentId?: string; // 부모 탭 컴포넌트 ID
|
|
|
|
|
screenId?: number; // 소속 화면 ID
|
2025-11-12 10:48:24 +09:00
|
|
|
|
|
|
|
|
// 콜백 함수들
|
|
|
|
|
onFilterChange: (filters: TableFilter[]) => void;
|
|
|
|
|
onGroupChange: (groups: string[]) => void;
|
|
|
|
|
onColumnVisibilityChange: (columns: ColumnVisibility[]) => void;
|
2025-12-17 15:00:15 +09:00
|
|
|
onGroupSumChange?: (config: GroupSumConfig | null) => void; // 그룹별 합산 설정 변경
|
2026-01-08 10:39:48 +09:00
|
|
|
onFrozenColumnCountChange?: (count: number, updatedColumns?: Array<{ columnName: string; visible: boolean }>) => void; // 틀고정 컬럼 수 변경
|
2025-12-18 10:15:33 +09:00
|
|
|
|
|
|
|
|
// 현재 설정 값 (읽기 전용)
|
|
|
|
|
frozenColumnCount?: number; // 현재 틀고정 컬럼 수
|
2025-12-11 14:25:28 +09:00
|
|
|
|
2025-11-12 12:06:58 +09:00
|
|
|
// 데이터 조회 함수 (선택 타입 필터용)
|
|
|
|
|
getColumnUniqueValues?: (columnName: string) => Promise<Array<{ label: string; value: string }>>;
|
2025-11-12 10:48:24 +09:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Context 값 타입
|
|
|
|
|
*/
|
|
|
|
|
export interface TableOptionsContextValue {
|
|
|
|
|
registeredTables: Map<string, TableRegistration>;
|
|
|
|
|
registerTable: (registration: TableRegistration) => void;
|
|
|
|
|
unregisterTable: (tableId: string) => void;
|
|
|
|
|
getTable: (tableId: string) => TableRegistration | undefined;
|
2025-11-12 12:06:58 +09:00
|
|
|
updateTableDataCount: (tableId: string, count: number) => void; // 데이터 건수 업데이트
|
2025-11-12 10:48:24 +09:00
|
|
|
selectedTableId: string | null;
|
|
|
|
|
setSelectedTableId: (tableId: string | null) => void;
|
2025-12-17 15:00:15 +09:00
|
|
|
|
|
|
|
|
// 활성 탭 기반 필터링
|
|
|
|
|
getActiveTabTables: () => TableRegistration[]; // 현재 활성 탭의 테이블만 반환
|
|
|
|
|
getTablesForTab: (tabId: string) => TableRegistration[]; // 특정 탭의 테이블만 반환
|
2025-11-12 10:48:24 +09:00
|
|
|
}
|