lumarc-grid
Version:
lumArc Grid는 고성능, 유연하고 프레임워크에 구애받지 않는 데이터 그리드 라이브러리
180 lines • 5.11 kB
TypeScript
/**
* Enhanced Row Manager with Visual Delete Marking
* - 삭제 시 행을 숨기지 않고 "삭제 표시"만 함
* - 실제 삭제는 커밋 시에만 수행
* - ID 안정성 보장 및 변경 추적 완벽 지원
*/
export type RowId = string | number;
export interface RowState {
isDeleted: boolean;
isCreated: boolean;
isModified: boolean;
deletedAt?: Date;
createdAt?: Date;
modifiedAt?: Date;
}
export interface ManagedRow<T> {
id: RowId;
data: T;
state: RowState;
originalData?: T;
}
export interface RowManagerOptions<T> {
data: T[];
getRowId?: (row: T, index: number) => RowId;
}
export declare class RowManager<T extends {} = any> {
private rows;
private rowMap;
private getRowId?;
private sortedIndices?;
private filteredIndices?;
private isDirty;
constructor(options: RowManagerOptions<T>);
private initializeFromData;
private invalidateCache;
/**
* 🎯 모든 데이터 반환 (삭제 표시된 것도 포함) - 기존 API 호환
* 삭제 표시된 행도 그리드에 계속 보여야 함!
*/
getData(): T[];
/**
* 전체 데이터 길이 - 기존 API 호환
*/
getLength(): number;
/**
* Row ID로 관리 객체 가져오기 (UI 스타일링용)
*/
getManagedRow(rowId: RowId): ManagedRow<T> | undefined;
/**
* Row ID로 데이터 가져오기 - 기존 API 호환
*/
getRowById(rowId: RowId): T | undefined;
/**
* 인덱스로 데이터 가져오기 - 기존 API 호환
*/
getRowByIndex(index: number): T | undefined;
/**
* Row ID로 인덱스 가져오기 - 기존 API 호환
*/
getIndexByRowId(rowId: RowId): number | undefined;
/**
* 인덱스로 Row ID 가져오기 - 기존 API 호환
*/
getRowIdByIndex(index: number): RowId | undefined;
/**
* 행 데이터 업데이트 - 기존 API 호환
*/
updateRow(rowId: RowId, changes: Partial<T>): boolean;
addRow(row: T): RowId;
addRowAtPosition(row: T, position: number): RowId;
deleteRow(rowId: RowId): boolean;
/**
* 🎯 여러 행 삭제 표시
*/
deleteRows(rowIds: RowId[]): number;
/**
* 삭제 표시 제거 (삭제 취소)
*/
restoreRow(rowId: RowId): boolean;
/**
* 정렬 - 기존 API 호환
*/
sort(compareFn: (a: T, b: T) => number): number[];
/**
* 필터링 - 기존 API 호환
*/
filter(predicate: (row: T, index: number) => boolean): number[];
/**
* 화면 표시 인덱스로 행 데이터 가져오기 - 기존 API 호환
*/
getRowByDisplayIndex(displayIndex: number): T | undefined;
/**
* 화면 표시 인덱스로 Row ID 가져오기 - 기존 API 호환
*/
getRowIdByDisplayIndex(displayIndex: number): RowId | undefined;
/**
* 화면에 표시되는 데이터 길이 - 기존 API 호환
*/
getDisplayLength(): number;
/**
* 변경 추적 정보 가져오기 - 새로운 기능
*/
getChanges(): {
created: T[];
modified: Array<{
original: T;
current: T;
changedFields: string[];
}>;
deleted: T[];
};
private getChangedFields;
/**
* 🎯 변경사항 커밋 - 삭제 표시된 항목들을 실제로 제거
*/
commitChanges(): void;
/**
* 모든 변경사항 되돌리기
*/
resetChanges(): void;
/**
* 상태 확인 메서드들
*/
isRowCreated(rowId: RowId): boolean;
isRowModified(rowId: RowId): boolean;
isRowDeleted(rowId: RowId): boolean;
getModifiedFields(rowId: RowId): string[];
/**
* 변경사항 요약
*/
getChangesSummary(): {
created: number;
modified: number;
deleted: number;
};
/**
* 변경사항 존재 여부
*/
hasChanges(): boolean;
/**
* 현재 상태 정보 (디버깅용) - 기존 API 호환
*/
getStats(): {
dataLength: number;
total: number;
deleted: number;
created: number;
modified: number;
sortedLength: number;
filteredLength: number;
displayLength: number;
isDirty: boolean;
memoryUsage: {
rows: number;
rowMap: number;
};
};
/**
* 모든 Row ID 반환 - 기존 API 호환
*/
getAllRowIds(): RowId[];
getDisplayRowIds(): RowId[];
/**
* 데이터 완전 교체 - 기존 API 호환
*/
setData(newData: T[]): void;
/**
* Row ID로 행 데이터 가져오기 (별칭) - 기존 API 호환
*/
getRowByRowId(rowId: RowId): T | undefined;
/**
* 행 데이터로 Row ID 가져오기 - 기존 API 호환
*/
getRowIdByData(row: T): RowId | undefined;
/**
* 데이터 업데이트 (외부에서 새로운 데이터 설정) - 기존 API 호환
*/
updateData(newData: T[], newGetRowId?: (row: T, index: number) => RowId): void;
}
//# sourceMappingURL=row-manager.d.ts.map