diff --git a/frontend/src/renderer/stores/fileStore.js b/frontend/src/renderer/stores/fileStore.js new file mode 100644 index 0000000..9c02506 --- /dev/null +++ b/frontend/src/renderer/stores/fileStore.js @@ -0,0 +1,60 @@ +import { create } from 'zustand'; + +const useFileStore = create((set, get) => ({ + // State + files: [], + currentPath: [], + currentFolderId: null, + selectedFiles: [], + loading: false, + error: null, + + // Actions + setFiles: (files) => set({ files }), + + setCurrentFolder: (folderId, folderName) => { + const { currentPath } = get(); + if (folderId === null) { + set({ currentFolderId: null, currentPath: [] }); + } else { + set({ + currentFolderId: folderId, + currentPath: [...currentPath, { id: folderId, name: folderName }] + }); + } + }, + + goBack: () => { + const { currentPath } = get(); + if (currentPath.length <= 1) { + set({ currentFolderId: null, currentPath: [] }); + } else { + const newPath = currentPath.slice(0, -1); + set({ + currentFolderId: newPath[newPath.length - 1]?.id || null, + currentPath: newPath + }); + } + }, + + toggleSelectFile: (fileId) => { + const { selectedFiles } = get(); + if (selectedFiles.includes(fileId)) { + set({ selectedFiles: selectedFiles.filter(id => id !== fileId) }); + } else { + set({ selectedFiles: [...selectedFiles, fileId] }); + } + }, + + clearSelection: () => set({ selectedFiles: [] }), + + selectAll: () => { + const { files } = get(); + set({ selectedFiles: files.map(f => f.id) }); + }, + + setLoading: (loading) => set({ loading }), + setError: (error) => set({ error }), +})); + +export default useFileStore;