From 981b62d7b00710e43b2d23b383bcac081224f87d Mon Sep 17 00:00:00 2001 From: Katarina Sieklova Date: Tue, 3 Jun 2025 14:04:14 +0200 Subject: [PATCH] Wizard: conflicting packages Disable a package if it's a conflicting module stream or if it's a non-modular package whose base name is already covered by an enabled module stream. Disable a module if anouther package with the same name was selected. Fixes #3274 --- .../steps/Packages/Packages.tsx | 32 +++++++++++++++---- 1 file changed, 26 insertions(+), 6 deletions(-) diff --git a/src/Components/CreateImageWizard/steps/Packages/Packages.tsx b/src/Components/CreateImageWizard/steps/Packages/Packages.tsx index 2c3ae797..c4cebad4 100644 --- a/src/Components/CreateImageWizard/steps/Packages/Packages.tsx +++ b/src/Components/CreateImageWizard/steps/Packages/Packages.tsx @@ -1051,7 +1051,11 @@ const Packages = () => { let isSelected = false; if (!pkg.type || pkg.type === 'package') { - isSelected = packages.some((p) => p.name === pkg.name); + const isModuleWithSameName = modules.some( + (module) => module.name === pkg.name + ); + isSelected = + packages.some((p) => p.name === pkg.name) && !isModuleWithSameName; } if (pkg.type === 'module') { @@ -1059,7 +1063,9 @@ const Packages = () => { // and its module stream matches one in enabled_modules isSelected = packages.some((p) => p.name === pkg.name) && - modules.some((p) => p.stream === pkg.stream); + modules.some( + (m) => m.name === pkg.module_name && m.stream === pkg.stream + ); } return isSelected; @@ -1077,11 +1083,25 @@ const Packages = () => { * @returns Package (or group) is / is not selected */ const isSelectDisabled = (pkg: IBPackageWithRepositoryInfo) => { + const isModuleDisabledByPackage = + pkg.type === 'module' && + packages.some( + (p) => (!p.type || p.type === 'package') && p.name === pkg.module_name + ); + + const isPackageDisabledByModule = + (!pkg.type || pkg.type === 'package') && + modules.some((module) => module.name === pkg.name); + + const isModuleStreamConflict = + pkg.type === 'module' && + modules.some((module) => module.name === pkg.module_name) && + !modules.some((m) => m.stream === pkg.stream); + return ( - (pkg.type === 'module' && - modules.some((module) => module.name === pkg.module_name) && - !modules.some((p) => p.stream === pkg.stream)) || - false + isModuleDisabledByPackage || + isPackageDisabledByModule || + isModuleStreamConflict ); };