前端: 添加文件状态管理store (Zustand)

This commit is contained in:
Frontend Developer 2026-03-10 09:00:46 +00:00
parent 0c2c6f9d6b
commit f45e1853ad

View 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;