@digital-ai/plugin-dai-release
Version:
Frontend functionalities for the dai-release backstage plugin
66 lines (63 loc) • 1.92 kB
JavaScript
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