| import { FileMimeType } from '@/constants/common'; | |
| import { useSetModalState } from '@/hooks/common-hooks'; | |
| import { useFetchFlow } from '@/hooks/flow-hooks'; | |
| import { IGraph } from '@/interfaces/database/flow'; | |
| import { downloadJsonFile } from '@/utils/file-util'; | |
| import { message, UploadFile } from 'antd'; | |
| import isEmpty from 'lodash/isEmpty'; | |
| import { useCallback } from 'react'; | |
| import { useTranslation } from 'react-i18next'; | |
| import { useBuildDslData } from './use-build-dsl'; | |
| import { useSetGraphInfo } from './use-set-graph'; | |
| export const useHandleExportOrImportJsonFile = () => { | |
| const { buildDslData } = useBuildDslData(); | |
| const { | |
| visible: fileUploadVisible, | |
| hideModal: hideFileUploadModal, | |
| showModal: showFileUploadModal, | |
| } = useSetModalState(); | |
| const setGraphInfo = useSetGraphInfo(); | |
| const { data } = useFetchFlow(); | |
| const { t } = useTranslation(); | |
| const onFileUploadOk = useCallback( | |
| async (fileList: UploadFile[]) => { | |
| if (fileList.length > 0) { | |
| const file: File = fileList[0] as unknown as File; | |
| if (file.type !== FileMimeType.Json) { | |
| message.error(t('flow.jsonUploadTypeErrorMessage')); | |
| return; | |
| } | |
| const graphStr = await file.text(); | |
| const errorMessage = t('flow.jsonUploadContentErrorMessage'); | |
| try { | |
| const graph = JSON.parse(graphStr); | |
| if (graphStr && !isEmpty(graph) && Array.isArray(graph?.nodes)) { | |
| setGraphInfo(graph ?? ({} as IGraph)); | |
| hideFileUploadModal(); | |
| } else { | |
| message.error(errorMessage); | |
| } | |
| } catch (error) { | |
| message.error(errorMessage); | |
| } | |
| } | |
| }, | |
| [hideFileUploadModal, setGraphInfo, t], | |
| ); | |
| const handleExportJson = useCallback(() => { | |
| downloadJsonFile(buildDslData().graph, `${data.title}.json`); | |
| }, [buildDslData, data.title]); | |
| return { | |
| fileUploadVisible, | |
| handleExportJson, | |
| handleImportJson: showFileUploadModal, | |
| hideFileUploadModal, | |
| onFileUploadOk, | |
| }; | |
| }; | |