UNPKG

@digital-ai/plugin-dai-release

Version:

Frontend functionalities for the dai-release backstage plugin

113 lines (110 loc) 3.28 kB
import { useState, useRef } from 'react'; import { daiReleaseApiRef } from '../api/DaiReleaseApi.esm.js'; import '@backstage/errors'; import 'moment'; import { useApi } from '@backstage/core-plugin-api'; import useAsyncRetryWithSelectiveDeps from './stateSelectiveDeps.esm.js'; import { useDebouncedValue } from '../utils/helpers.esm.js'; function useWorkflowCatalog() { const [page, setPage] = useState(0); const [rowsPerPage, setRowsPerPage] = useState(15); const [instance, setInstance] = useState(""); const [instanceList, setInstanceList] = useState([]); const [data, setData] = useState([]); const [hasMore, setHasMore] = useState(true); const [loading, setLoading] = useState(false); const [workflowSearch, setWorkflowSearch] = useState({ categories: [], author: "" }); const [searchInput, setSearchInput] = useState(""); const api = useApi(daiReleaseApiRef); const debouncedInstance = useDebouncedValue(instance, 800); const debouncedSearchAuthor = useDebouncedValue(workflowSearch.author, 800); const debouncedSearchCategories = useDebouncedValue( workflowSearch.categories, 800 ); const debouncedSearchInput = useDebouncedValue(searchInput, 500); const abortControllerRef = useRef(null); const { error } = useAsyncRetryWithSelectiveDeps( // eslint-disable-next-line consistent-return async () => { try { setLoading(true); if (abortControllerRef.current) { abortControllerRef.current.abort(); } const abortController = new AbortController(); abortControllerRef.current = abortController; if (debouncedInstance.trim() === "") { return api.getInstanceList().then((dataVal) => { setInstance(dataVal[0].name); setInstanceList(dataVal); setData([]); setLoading(false); }); } const result = await api.getWorkflowCatalog( page, rowsPerPage, debouncedSearchInput, debouncedSearchCategories, debouncedSearchAuthor, debouncedInstance, { signal: abortController.signal } ); if (!abortController.signal.aborted) { if (result?.workflows?.length < rowsPerPage) { setHasMore(false); } setData((prevData) => [ ...prevData, ...result?.workflows.filter( (wf) => !prevData.some((p) => p.id === wf.id) ) ]); return result; } } catch (err) { const abortError = err; if (abortError.name !== "AbortError") { setData([]); throw err; } } finally { setLoading(false); } }, page, setPage, [ api, rowsPerPage, debouncedInstance, debouncedSearchCategories, debouncedSearchAuthor, debouncedSearchInput ] ); return { loading, hasMore, setLoading, data, error, instance, instanceList, searchInput, setSearchInput, workflowSearch, setWorkflowSearch, setPage, setRowsPerPage, setInstance, setHasMore, setData }; } export { useWorkflowCatalog }; //# sourceMappingURL=useWorkflowCatalog.esm.js.map