@red-hat-developer-hub/backstage-plugin-bulk-import
Version:
72 lines (69 loc) • 2.28 kB
JavaScript
import { useMemo } from 'react';
import { useAsync } from 'react-use';
import { useApi, identityApiRef, configApiRef } from '@backstage/core-plugin-api';
import { useQuery } from '@tanstack/react-query';
import { useFormikContext } from 'formik';
import { bulkImportApiRef } from '../api/BulkImportBackendClient.esm.js';
import { prepareDataForAddedRepositories } from '../utils/repository-utils.esm.js';
const useAddedRepositories = (pageNumber, rowsPerPage, searchString, sortColumn, sortOrder, pollInterval) => {
const identityApi = useApi(identityApiRef);
const configApi = useApi(configApiRef);
const { value: user } = useAsync(async () => {
const identityRef = await identityApi.getBackstageIdentity();
return identityRef.userEntityRef;
});
const baseUrl = configApi.getString("app.baseUrl");
const bulkImportApi = useApi(bulkImportApiRef);
const { setFieldValue, values } = useFormikContext();
const fetchAddedRepositories = async (page, size, searchStr, sortCol, sortOrd) => await bulkImportApi.getImportJobs(page, size, searchStr, sortCol, sortOrd);
const {
data: value,
error,
isLoading: isLoadingTable,
refetch
} = useQuery(
[
"importJobs",
pageNumber,
rowsPerPage,
searchString,
sortColumn,
sortOrder
],
() => fetchAddedRepositories(
pageNumber,
rowsPerPage,
searchString,
sortColumn,
sortOrder
),
{ refetchInterval: 6e4, refetchOnWindowFocus: false }
);
const prepareData = useMemo(() => {
const repoData = prepareDataForAddedRepositories(
value,
user,
baseUrl
);
if (Object.values(repoData.repoData).length !== Object.values(values.repositories).length)
setFieldValue(`repositories`, repoData.repoData);
return {
addedRepositories: Object.values(repoData.repoData),
totalJobs: repoData.totalJobs
};
}, [value, user, baseUrl, values.repositories, setFieldValue]);
return {
data: prepareData,
loading: isLoadingTable,
error: {
...error ?? {},
...value?.statusText ? {
name: "Error",
message: value?.statusText
} : {}
},
refetch
};
};
export { useAddedRepositories };
//# sourceMappingURL=useAddedRepositories.esm.js.map