src: add custom repositories import feature
This allows sharing blueprints cross organizations even with custom repositories.
This commit is contained in:
parent
2bee0ef49b
commit
e805c65f81
5 changed files with 158 additions and 3 deletions
|
|
@ -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('');
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue