HeatTransPlan / frontend /src /store /projectStore.ts
drzg15's picture
Initial code commit with LFS for binaries
c993983
import { create } from 'zustand';
import type { ProjectState } from '../types/project';
import type { ProcessNode } from '../types/process';
interface ProjectStore {
projectId: string | null;
state: ProjectState;
// Actions
setProjectId: (id: string) => void;
setState: (state: ProjectState) => void;
setProcesses: (processes: ProcessNode[]) => void;
updateProcess: (idx: number, node: ProcessNode) => void;
setMapCenter: (center: number[]) => void;
setMapZoom: (zoom: number) => void;
setMapLocked: (locked: boolean) => void;
setCurrentBase: (base: string) => void;
setProjectNotes: (notes: string) => void;
setPinchNotes: (notes: string) => void;
setGroupNames: (names: string[]) => void;
setGroups: (groups: number[][]) => void;
setGroupCoordinates: (coords: ProjectState['proc_group_coordinates']) => void;
setMapSnapshots: (snapshots: Record<string, string>) => void;
// Potential Analysis
setAnalysisSelection: (streams: Record<string, boolean>) => void;
setAnalysisDemands: (demands: any[]) => void;
setAnalysisTMin: (val: number) => void;
}
const defaultState: ProjectState = {
timestamp: null,
map_locked: false,
map_center: [51.707937580921694, 8.772205607882668],
map_zoom: 17.5,
current_base: 'OpenStreetMap',
processes: [],
proc_groups: [],
proc_group_names: [],
proc_group_expanded: [],
proc_group_coordinates: {},
proc_group_info_expanded: [],
project_notes: '',
pinch_notes: '',
map_snapshots_encoded: {},
selected_streams: {},
energy_demands: [],
t_min: 10.0,
};
export const useProjectStore = create<ProjectStore>((set) => ({
projectId: null,
state: { ...defaultState },
setProjectId: (id) => set({ projectId: id }),
setState: (state) => set({ state }),
setProcesses: (processes) => set((s) => ({ state: { ...s.state, processes } })),
updateProcess: (idx, node) =>
set((s) => {
const processes = [...s.state.processes];
processes[idx] = node;
return { state: { ...s.state, processes } };
}),
setMapCenter: (center) => set((s) => ({ state: { ...s.state, map_center: center } })),
setMapZoom: (zoom) => set((s) => ({ state: { ...s.state, map_zoom: zoom } })),
setMapLocked: (locked) => set((s) => ({ state: { ...s.state, map_locked: locked } })),
setCurrentBase: (base) => set((s) => ({ state: { ...s.state, current_base: base } })),
setProjectNotes: (notes) => set((s) => ({ state: { ...s.state, project_notes: notes } })),
setPinchNotes: (notes) => set((s) => ({ state: { ...s.state, pinch_notes: notes } })),
setGroupNames: (names) => set((s) => ({ state: { ...s.state, proc_group_names: names } })),
setGroups: (groups) => set((s) => ({ state: { ...s.state, proc_groups: groups } })),
setGroupCoordinates: (coords) => set((s) => ({ state: { ...s.state, proc_group_coordinates: coords } })),
setMapSnapshots: (snapshots) => set((s) => ({ state: { ...s.state, map_snapshots_encoded: snapshots } })),
// Potential Analysis
setAnalysisSelection: (streams) => set((s) => ({ state: { ...s.state, selected_streams: streams } })),
setAnalysisDemands: (demands) => set((s) => ({ state: { ...s.state, energy_demands: demands } })),
setAnalysisTMin: (val) => set((s) => ({ state: { ...s.state, t_min: val } })),
}));