import type { ImportedDataset } from '../domain/dataset'; import type { Review } from '../domain/review'; import type { DynamicFacetFilters } from '../features/search-filter/dynamic-facets'; export type ViewMode = 'records' | 'columns' | 'table' | 'raw'; export type ThemeMode = 'dark' | 'light' | 'system'; export type BackendStatus = 'checking' | 'connected' | 'unavailable'; export interface AppState { dataset: ImportedDataset | null; activeSheetId: string; view: ViewMode; search: string; sortColumn: string; sortDirection: 'asc' | 'desc'; titleColumn: string; statusFilter: string; facetFilters: DynamicFacetFilters; pathFindingIds: string[]; actionOnly: boolean; selectedRecordId: string; reviews: Record; projectId: string; status: string; theme: ThemeMode; delimiter: string; sidebarCollapsed: boolean; backendStatus: BackendStatus; } export type SavedViewState = Pick; export function applySavedViewState(current: AppState, savedView: SavedViewState): AppState { if (!current.dataset?.sheets.some(sheet => sheet.id === savedView.activeSheetId)) return current; const facetFilters = Object.fromEntries(Object.entries(savedView.facetFilters).map(([id, filter]) => [ id, { ...filter, ...(filter.values ? { values: [...filter.values] } : {}) } ])); return { ...current, ...savedView, facetFilters, pathFindingIds: [...savedView.pathFindingIds] }; } export const initialAppState: AppState = { dataset: null, activeSheetId: '', view: 'columns', search: '', sortColumn: 'all', sortDirection: 'desc', titleColumn: '', statusFilter: 'deviation', facetFilters: {}, pathFindingIds: [], actionOnly: false, selectedRecordId: '', reviews: {}, projectId: '', status: 'Ready', theme: 'dark', delimiter: 'auto', sidebarCollapsed: false, backendStatus: 'checking' };