balibabu 51e7697df7
feat: upload file in FileManager #345 (#529)
### What problem does this PR solve?

feat: upload file in FileManager #345 

### Type of change

- [x] New Feature (non-breaking change which adds functionality)
2024-04-25 08:46:18 +08:00

112 lines
3.2 KiB
TypeScript

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<FileManagerModelState> = {
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;