import { useState, useEffect, useCallback } from 'react'; import { useMutation } from 'react-query'; import { message } from 'antd'; import { type RcFile } from 'antd/lib/upload'; import { useRecoilState } from 'recoil'; import { NotSaveGroupId, ProjectInfo, GetProjecPageListQuery, UpdateProjectQuery, CopyProjectQuery, ExportProjectQuery, ImportProjectQuery, importProjectZip, } from '@easytwin/core'; import { ProjectGroupApi, ProjectApi } from '@/server'; import { usePageQuery } from '@/hooks'; import { _projectInfo } from '.'; export const useProjectGroup = () => { const [selectGroupKey, setSelectGroupKey] = useState( NotSaveGroupId.ALL_GROUP_FOR_PROJECT, ); const getProjectGroupListReq = useMutation( 'getProjectGroupList', ProjectGroupApi.getProjectGroupList, ); useEffect(() => { getProjectGroupListReq.mutate(); // eslint-disable-next-line react-hooks/exhaustive-deps }, []); const createProjectGroupReq = useMutation( 'createProjectGroup', ProjectGroupApi.createForProject, { onSuccess: () => { message.success('创建成功'); getProjectGroupListReq.mutate(); }, }, ); const updateProjectGroupReq = useMutation('updateProjectGroup', ProjectGroupApi.update, { onSuccess: () => { message.success('修改成功'); getProjectGroupListReq.mutate(); }, }); const removeProjectGroupReq = useMutation('removeProjectGroup', ProjectGroupApi.remove, { onSuccess: () => { message.success('删除成功'); getProjectGroupListReq.mutate(); }, }); return { selectGroupKey, setSelectGroupKey, getProjectGroupListReq, createProjectGroupReq, updateProjectGroupReq, removeProjectGroupReq, }; }; export const useProjectList = () => { const [pageQuery, setPageQuery] = usePageQuery(); const [projectPageList, setProjectPageList] = useState([]); const getProjectPageList = useCallback( async (query: GetProjecPageListQuery) => { const pageInfo = await ProjectApi.getList({ ...query, ...pageQuery, }); setProjectPageList(pageInfo); }, [pageQuery], ); return { pageQuery, setPageQuery, projectPageList, setProjectPageList, getProjectPageList, }; }; export const useProject = () => { const [projectInfo, setProjectInfo] = useRecoilState(_projectInfo); const [changeGroupModalVisible, setChangeGroupModalVisible] = useState(false); const getProjectReq = useMutation('getProject', ProjectApi.getDetail); const createProjectReq = useMutation('createProject', ProjectApi.create); const updateProjectReq = useMutation('updateProject', ProjectApi.update); const removeProjectReq = useMutation('removeProject', ProjectApi.remove); /** * */ const [isRecycle, setIsRecycle] = useState(false); const getProjectRecycleListReq = useMutation('getProjectRecycleList', ProjectApi.getRecycleList); const recycleProjectReq = useMutation('recycleProject', ProjectApi.recover); const getProjectInfo = useCallback( async (projectId: string) => { const data = await ProjectApi.getDetail(projectId); if (data) setProjectInfo(data); return data; }, [setProjectInfo], ); const updateProjectInfo = useCallback( async (info: UpdateProjectQuery) => { const newInfo = await ProjectApi.update(info); message.success('修改成功'); if (newInfo) { setProjectInfo(newInfo); } }, [setProjectInfo], ); const copyProject = useCallback( (query: CopyProjectQuery, addProjectNamePrefix?: boolean) => ProjectApi.copy(query, addProjectNamePrefix), [], ); const exportProject = useCallback((query: ExportProjectQuery) => ProjectApi.exportZip(query), []); const importProject = useCallback((query: importProjectZip) => ProjectApi.importZip(query), []); return { changeGroupModalVisible, setChangeGroupModalVisible, getProjectReq, createProjectReq, updateProjectReq, removeProjectReq, isRecycle, setIsRecycle, getProjectRecycleListReq, recycleProjectReq, projectInfo, getProjectInfo, updateProjectInfo, copyProject, exportProject, importProject, }; };