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