import { IFile, IFolder } from '@/interfaces/database/file-manager'; import fileManagerService from '@/services/fileManagerService'; import omit from 'lodash/omit'; import { DvaModel } from 'umi'; export interface FileManagerModelState { fileList: IFile[]; parentFolderList: IFolder[]; } const model: DvaModel = { namespace: 'fileManager', state: { fileList: [], parentFolderList: [] }, reducers: { setFileList(state, { payload }) { return { ...state, fileList: payload }; }, setParentFolderList(state, { payload }) { return { ...state, parentFolderList: payload }; }, }, effects: { *removeFile({ payload = {} }, { call, put }) { const { data } = yield call(fileManagerService.removeFile, { fileIds: payload.fileIds, }); const { retcode } = data; if (retcode === 0) { yield put({ type: 'listFile', payload: { parentId: payload.parentId }, }); } }, *listFile({ payload = {} }, { call, put }) { const { data } = yield call(fileManagerService.listFile, payload); const { retcode, data: res } = data; if (retcode === 0 && Array.isArray(res.files)) { yield put({ type: 'setFileList', payload: res.files, }); } }, *renameFile({ payload = {} }, { call, put }) { const { data } = yield call( fileManagerService.renameFile, omit(payload, ['parentId']), ); if (data.retcode === 0) { yield put({ type: 'listFile', payload: { parentId: payload.parentId }, }); } return data.retcode; }, *uploadFile({ payload = {} }, { call, put }) { const formData = new FormData(); formData.append('parent_id', payload.parentId); formData.append('file', payload.file); formData.append('path', payload.path); const { data } = yield call(fileManagerService.uploadFile, formData); if (data.retcode === 0) { yield put({ type: 'listFile', payload: { parentId: payload.parentId }, }); } return data.retcode; }, *createFolder({ payload = {} }, { call, put }) { const { data } = yield call(fileManagerService.createFolder, payload); if (data.retcode === 0) { yield put({ type: 'listFile', payload: { parentId: payload.parentId }, }); } return data.retcode; }, *getAllParentFolder({ payload = {} }, { call, put }) { const { data } = yield call( fileManagerService.getAllParentFolder, payload, ); if (data.retcode === 0) { yield put({ type: 'setParentFolderList', payload: data.data?.parent_folders ?? [], }); } return data.retcode; }, *connectFileToKnowledge({ payload = {} }, { call, put }) { const { data } = yield call( fileManagerService.connectFileToKnowledge, omit(payload, 'parentId'), ); if (data.retcode === 0) { yield put({ type: 'listFile', payload: { parentId: payload.parentId }, }); } return data.retcode; }, }, }; export default model;