src: add custom repositories import feature

This allows sharing blueprints cross organizations even with custom
repositories.
This commit is contained in:
Anna Vítová 2024-11-26 15:10:02 +02:00 committed by Klara Simickova
parent 2bee0ef49b
commit e805c65f81
5 changed files with 158 additions and 3 deletions

View file

@ -23,9 +23,10 @@ import { mapOnPremToHosted } from './helpers/onPremToHostedBlueprintMapper';
import { useAppDispatch } from '../../store/hooks';
import { BlueprintExportResponse } from '../../store/imageBuilderApi';
import { wizardState } from '../../store/wizardSlice';
import { importCustomRepositories, wizardState } from '../../store/wizardSlice';
import { resolveRelPath } from '../../Utilities/path';
import { mapExportRequestToState } from '../CreateImageWizard/utilities/requestMapper';
import { ApiRepositoryRequest, useBulkImportRepositoriesMutation } from '../../store/contentSourcesApi';
interface ImportBlueprintModalProps {
setShowImportModal: React.Dispatch<React.SetStateAction<boolean>>;
@ -52,6 +53,8 @@ export const ImportBlueprintModal: React.FunctionComponent<
const [isRejected, setIsRejected] = React.useState(false);
const [isOnPrem, setIsOnPrem] = React.useState(false);
const dispatch = useAppDispatch();
const [importRepositories, repositoriesResult] = useBulkImportRepositoriesMutation();
const handleFileInputChange = (
_event: React.ChangeEvent<HTMLInputElement> | React.DragEvent<HTMLElement>,
file: File
@ -61,6 +64,7 @@ export const ImportBlueprintModal: React.FunctionComponent<
setIsRejected(false);
setIsInvalidFormat(false);
};
React.useEffect(() => {
if (filename && fileContent) {
try {
@ -84,11 +88,22 @@ export const ImportBlueprintModal: React.FunctionComponent<
distribution: blueprintFromFile.distribution,
customizations: blueprintFromFile.customizations,
metadata: blueprintFromFile.metadata,
content_sources: blueprintFromFile.content_sources,
};
const importBlueprintState = mapExportRequestToState(
blueprintExportedResponse,
blueprintFromFile.image_requests || []
);
if (blueprintExportedResponse.content_sources) {
const customRepositories: ApiRepositoryRequest[] = blueprintExportedResponse.content_sources.map(item => item as ApiRepositoryRequest);
const result = importRepositories({
body: customRepositories,
});
dispatch(
importCustomRepositories(blueprintExportedResponse.customizations.custom_repositories || [])
);
};
setIsOnPrem(false);
setImportedBlueprint(importBlueprintState);
} catch {
@ -114,6 +129,7 @@ export const ImportBlueprintModal: React.FunctionComponent<
}
}
}, [filename, fileContent]);
const handleClear = () => {
setFilename('');
setFileContent('');