| | import { useLogger } from 'app/logging/useLogger'; |
| | import { useAppDispatch } from 'app/store/storeHooks'; |
| | import { workflowLoadRequested } from 'features/nodes/store/actions'; |
| | import { toast } from 'features/toast/toast'; |
| | import { workflowLoadedFromFile } from 'features/workflowLibrary/store/actions'; |
| | import type { RefObject } from 'react'; |
| | import { useCallback } from 'react'; |
| | import { useTranslation } from 'react-i18next'; |
| |
|
| | type useLoadWorkflowFromFileOptions = { |
| | resetRef: RefObject<() => void>; |
| | onSuccess?: () => void; |
| | }; |
| |
|
| | type UseLoadWorkflowFromFile = (options: useLoadWorkflowFromFileOptions) => (file: File | null) => void; |
| |
|
| | export const useLoadWorkflowFromFile: UseLoadWorkflowFromFile = ({ resetRef, onSuccess }) => { |
| | const dispatch = useAppDispatch(); |
| | const logger = useLogger('workflows'); |
| | const { t } = useTranslation(); |
| | const loadWorkflowFromFile = useCallback( |
| | (file: File | null) => { |
| | if (!file) { |
| | return; |
| | } |
| | const reader = new FileReader(); |
| | reader.onload = () => { |
| | const rawJSON = reader.result; |
| |
|
| | try { |
| | dispatch(workflowLoadRequested({ data: { workflow: String(rawJSON), graph: null }, asCopy: true })); |
| | dispatch(workflowLoadedFromFile()); |
| | onSuccess && onSuccess(); |
| | } catch (e) { |
| | |
| | logger.error(t('nodes.unableToLoadWorkflow')); |
| | toast({ |
| | id: 'UNABLE_TO_LOAD_WORKFLOW', |
| | title: t('nodes.unableToLoadWorkflow'), |
| | status: 'error', |
| | }); |
| | reader.abort(); |
| | } |
| | }; |
| |
|
| | reader.readAsText(file); |
| |
|
| | |
| | resetRef.current?.(); |
| | }, |
| | [dispatch, logger, resetRef, t, onSuccess] |
| | ); |
| |
|
| | return loadWorkflowFromFile; |
| | }; |
| |
|