前端: 添加文件状态管理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