UNPKG

@digital-ai/plugin-dai-release

Version:

Frontend functionalities for the dai-release backstage plugin

66 lines (63 loc) 1.92 kB
import { useRef, useEffect } from 'react'; import { daiReleaseApiRef } from '../api/DaiReleaseApi.esm.js'; import '@backstage/errors'; import 'moment'; import { useApi } from '@backstage/core-plugin-api'; function useWorkflowRedirect(instance, templateId, releaseTitle, releaseId, setRedirectUrl, setErrorMessage) { const api = useApi(daiReleaseApiRef); const abortControllerRef = useRef(null); const previousRedirectUrl = useRef(void 0); useEffect(() => { let isMounted = true; const fetchRedirectUrl = async () => { try { if (abortControllerRef.current) { abortControllerRef.current.abort(); } const abortController = new AbortController(); abortControllerRef.current = abortController; setRedirectUrl(void 0); const result = await api.generateWorkflowRedirect( instance, templateId, releaseTitle, releaseId, { signal: abortController.signal } ); if (isMounted && !abortController.signal.aborted) { if (result && JSON.stringify(result) !== JSON.stringify(previousRedirectUrl.current)) { previousRedirectUrl.current = result; setRedirectUrl(result.url); } } } catch (err) { const abortError = err; setErrorMessage(abortError.message); if (abortError.name !== "AbortError") { setRedirectUrl(""); } } }; if (templateId && releaseTitle && releaseId) { fetchRedirectUrl(); } return () => { isMounted = false; if (abortControllerRef.current) { abortControllerRef.current.abort(); } }; }, [ templateId, api, releaseTitle, releaseId, setRedirectUrl, instance, setErrorMessage ]); } export { useWorkflowRedirect }; //# sourceMappingURL=useWorkflowRedirect.esm.js.map