File size: 1,864 Bytes
5a0b87c | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 | import { create } from 'zustand';
import { WorkspaceState, EditorSettings } from '../types';
interface AppState extends WorkspaceState {
settings: EditorSettings;
// Actions
openFile: (path: string) => void;
closeFile: (path: string) => void;
setActiveFile: (path: string) => void;
markUnsaved: (path: string, unsaved: boolean) => void;
updateSettings: (settings: Partial<EditorSettings>) => void;
}
export const useAppStore = create<AppState>((set) => ({
currentPath: '',
openFiles: [],
activeFile: null,
unsavedFiles: new Set(),
settings: {
theme: 'dark',
fontSize: 14,
wordWrap: 'off',
minimap: true
},
openFile: (path) => set((state) => {
if (state.openFiles.includes(path)) {
return { activeFile: path };
}
return {
openFiles: [...state.openFiles, path],
activeFile: path
};
}),
closeFile: (path) => set((state) => {
const newOpen = state.openFiles.filter(p => p !== path);
const newUnsaved = new Set(state.unsavedFiles);
newUnsaved.delete(path);
let newActive = state.activeFile;
if (newActive === path) {
newActive = newOpen.length > 0 ? newOpen[newOpen.length - 1] : null;
}
return {
openFiles: newOpen,
activeFile: newActive,
unsavedFiles: newUnsaved
};
}),
setActiveFile: (path) => set({ activeFile: path }),
markUnsaved: (path, unsaved) => set((state) => {
const newSet = new Set(state.unsavedFiles);
if (unsaved) newSet.add(path);
else newSet.delete(path);
return { unsavedFiles: newSet };
}),
updateSettings: (newSettings) => set((state) => ({
settings: { ...state.settings, ...newSettings }
}))
}));
|