UNPKG

@digital-ai/plugin-dai-release

Version:

Frontend functionalities for the dai-release backstage plugin

103 lines (100 loc) 3.1 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 useTemplates() { const [page, setPage] = useState(0); const [rowsPerPage, setRowsPerPage] = useState(20); const [searchTitle, setSearchTitle] = useState(""); const [instance, setInstance] = useState(""); const [instanceList, setInstanceList] = useState([]); const [data, setData] = useState([]); const [hasMore, setHasMore] = useState(true); const [loading, setLoading] = useState(false); const [tags, setTags] = useState([]); const [openModal, setOpenModal] = useState(false); const [modalPopupInputId, setModalPopupInputId] = useState(""); const [modalTitle, setModalTitle] = useState(""); const [modalPopupData, setModalPopupData] = useState(void 0); const api = useApi(daiReleaseApiRef); const abortControllerRef = useRef(null); const debouncedSearchTitle = useDebouncedValue(searchTitle, 500); const debouncedSearchTag = useDebouncedValue(tags, 500); const { error } = useAsyncRetryWithSelectiveDeps( async () => { try { setLoading(true); if (abortControllerRef.current) { abortControllerRef.current.abort(); } const abortController = new AbortController(); abortControllerRef.current = abortController; if (instance.trim() === "") { return api.getInstanceList().then((dataVal) => { setInstance(dataVal[0].name); setInstanceList(dataVal); setLoading(false); }); } const result = await api.getTemplates( page, rowsPerPage, debouncedSearchTitle, instance, debouncedSearchTag, { signal: abortController.signal } ); if (!abortController.signal.aborted) { setLoading(false); if (result.items?.templates?.length < rowsPerPage) { setHasMore(false); } setData((prevData) => [...prevData, ...result.items?.templates]); return result; } } catch (err) { const abortError = err; if (abortError.name !== "AbortError") { setData([]); throw err; } } finally { setLoading(false); } }, page, setPage, [api, rowsPerPage, debouncedSearchTitle, instance, debouncedSearchTag] ); return { loading, hasMore, setLoading, data, error, searchTitle, instance, instanceList, openModal, modalPopupInputId, modalTitle, modalPopupData, setPage, setRowsPerPage, setSearchTitle, setInstance, setHasMore, setData, setOpenModal, setModalPopupInputId, setModalTitle, setModalPopupData, setTags, tags }; } export { useTemplates }; //# sourceMappingURL=useTemplates.esm.js.map