V2Wizard: Initialize packages with OpenSCAP

This initializes packages upon a selection of an OpenSCAP profile.

Current logic also fixes a bug previously present in V1 - when changing an OpenSCAP profile with other previously chosen packages, the packages outside of the profile persist and don't get removed.
This commit is contained in:
regexowl 2024-03-19 16:47:06 +01:00 committed by Lucas Garfield
parent d219a233d9
commit 91873dc810
4 changed files with 38 additions and 1 deletions

View file

@ -34,6 +34,10 @@ import {
selectEnabledServices,
changeDisabledServices,
changeEnabledServices,
clearOscapPackages,
addPackage,
selectPackages,
removePackage,
} from '../../../../store/wizardSlice';
const ProfileSelector = () => {
@ -42,6 +46,7 @@ const ProfileSelector = () => {
let disabledServices = useAppSelector(selectDisabledServices);
let enabledServices = useAppSelector(selectEnabledServices);
const release = useAppSelector(selectDistribution);
const packages = useAppSelector(selectPackages);
const dispatch = useAppDispatch();
const [profileName, setProfileName] = useState<string | undefined>('None');
const [isOpen, setIsOpen] = useState(false);
@ -96,6 +101,25 @@ const ProfileSelector = () => {
}
}, [data]);
useEffect(() => {
dispatch(clearOscapPackages());
for (const pkg in data?.packages) {
if (
packages.map((pkg) => pkg.name).includes(data?.packages[Number(pkg)])
) {
dispatch(removePackage(data?.packages[Number(pkg)]));
}
dispatch(
addPackage({
name: data?.packages[Number(pkg)],
summary: 'Required by chosen OpenSCAP profile',
repository: 'distro',
isRequiredByOpenScap: true,
})
);
}
}, [data?.packages, dispatch]);
const handleToggle = () => {
if (!isOpen) {
refetch();
@ -108,6 +132,7 @@ const ProfileSelector = () => {
dispatch(changeKernel(undefined));
dispatch(changeDisabledServices(undefined));
dispatch(changeEnabledServices(undefined));
dispatch(clearOscapPackages());
setProfileName(undefined);
};

View file

@ -36,10 +36,13 @@ import {
addPackage,
} from '../../../../store/wizardSlice';
type PackageRepository = 'distro' | 'custom' | '';
export type IBPackageWithRepositoryInfo = {
name: Package['name'];
summary: Package['summary'];
repository: string;
repository: PackageRepository;
isRequiredByOpenScap: boolean;
};
const EmptySearch = () => {
@ -180,6 +183,7 @@ const Packages = () => {
transformedDistroData = dataDistroPackages.data.map((values) => ({
...values,
repository: 'distro',
isRequiredByOpenScap: false,
}));
}
@ -188,6 +192,7 @@ const Packages = () => {
name: values.package_name!,
summary: values.summary!,
repository: 'custom',
isRequiredByOpenScap: false,
}));
}