엑셀 다운로드 문제 해결
This commit is contained in:
@@ -0,0 +1,110 @@
|
||||
/**
|
||||
* 테이블 화면 표시 데이터 전역 저장소
|
||||
* 엑셀 다운로드 등에서 현재 화면에 표시된 데이터에 접근하기 위함
|
||||
*/
|
||||
|
||||
interface TableDisplayState {
|
||||
data: any[];
|
||||
columnOrder: string[];
|
||||
sortBy: string | null;
|
||||
sortOrder: "asc" | "desc";
|
||||
tableName: string;
|
||||
}
|
||||
|
||||
class TableDisplayStore {
|
||||
private state: Map<string, TableDisplayState> = new Map();
|
||||
private listeners: Set<() => void> = new Set();
|
||||
|
||||
/**
|
||||
* 테이블 표시 데이터 저장
|
||||
* @param tableName 테이블명
|
||||
* @param data 화면에 표시된 데이터
|
||||
* @param columnOrder 컬럼 순서
|
||||
* @param sortBy 정렬 컬럼
|
||||
* @param sortOrder 정렬 방향
|
||||
*/
|
||||
setTableData(
|
||||
tableName: string,
|
||||
data: any[],
|
||||
columnOrder: string[],
|
||||
sortBy: string | null,
|
||||
sortOrder: "asc" | "desc"
|
||||
) {
|
||||
this.state.set(tableName, {
|
||||
data,
|
||||
columnOrder,
|
||||
sortBy,
|
||||
sortOrder,
|
||||
tableName,
|
||||
});
|
||||
|
||||
console.log("📦 [TableDisplayStore] 데이터 저장:", {
|
||||
tableName,
|
||||
dataCount: data.length,
|
||||
columnOrderLength: columnOrder.length,
|
||||
sortBy,
|
||||
sortOrder,
|
||||
firstRow: data[0],
|
||||
});
|
||||
|
||||
this.notifyListeners();
|
||||
}
|
||||
|
||||
/**
|
||||
* 테이블 표시 데이터 조회
|
||||
* @param tableName 테이블명
|
||||
*/
|
||||
getTableData(tableName: string): TableDisplayState | undefined {
|
||||
const state = this.state.get(tableName);
|
||||
|
||||
console.log("📤 [TableDisplayStore] 데이터 조회:", {
|
||||
tableName,
|
||||
found: !!state,
|
||||
dataCount: state?.data.length,
|
||||
});
|
||||
|
||||
return state;
|
||||
}
|
||||
|
||||
/**
|
||||
* 모든 테이블 데이터 조회
|
||||
*/
|
||||
getAllTableData(): Map<string, TableDisplayState> {
|
||||
return new Map(this.state);
|
||||
}
|
||||
|
||||
/**
|
||||
* 테이블 데이터 삭제
|
||||
* @param tableName 테이블명
|
||||
*/
|
||||
clearTableData(tableName: string) {
|
||||
this.state.delete(tableName);
|
||||
this.notifyListeners();
|
||||
}
|
||||
|
||||
/**
|
||||
* 모든 데이터 삭제
|
||||
*/
|
||||
clearAll() {
|
||||
this.state.clear();
|
||||
this.notifyListeners();
|
||||
}
|
||||
|
||||
/**
|
||||
* 변경 리스너 등록
|
||||
*/
|
||||
subscribe(listener: () => void) {
|
||||
this.listeners.add(listener);
|
||||
return () => {
|
||||
this.listeners.delete(listener);
|
||||
};
|
||||
}
|
||||
|
||||
private notifyListeners() {
|
||||
this.listeners.forEach((listener) => listener());
|
||||
}
|
||||
}
|
||||
|
||||
// 싱글톤 인스턴스
|
||||
export const tableDisplayStore = new TableDisplayStore();
|
||||
|
||||
Reference in New Issue
Block a user