前端: 添加文件状态管理store (Zustand)
This commit is contained in:
parent
0c2c6f9d6b
commit
f45e1853ad
60
frontend/src/renderer/stores/fileStore.js
Normal file
60
frontend/src/renderer/stores/fileStore.js
Normal file
@ -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;
|
||||||
Loading…
Reference in New Issue
Block a user