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 }
    }))
}));