Skip to content

Commit f1ac06b

Browse files
authored
fix: Community Modules not disappearing from Add form after installation (#4384)
* fix: Community Modules install * fix: duplicates on list * fix: use filter * better comment
1 parent 3249051 commit f1ac06b

File tree

2 files changed

+24
-11
lines changed

2 files changed

+24
-11
lines changed

src/components/Modules/community/CommunityModulesList.tsx

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -119,24 +119,41 @@ export const CommunityModulesList = ({
119119
const [modulesToDisplay, setModulesToDisplay] =
120120
useState<any[]>(installedModules);
121121

122+
// When multiple instances of the same module templates exist in different namespaces, we want to display only one instance of the module
123+
function dedupeByModuleManager(modules: any[]) {
124+
const seen = new Set<string>();
125+
126+
return modules.filter((module) => {
127+
const { name, namespace } = module?.resource?.metadata || {};
128+
129+
if (!name || !namespace) return true;
130+
131+
const key = `${name}::${namespace}`;
132+
133+
return seen.has(key) ? false : seen.add(key);
134+
});
135+
}
136+
122137
useEffect(() => {
138+
const uniqueInstalled = dedupeByModuleManager(installedModules);
139+
123140
const modulesDuringProcessing = modulesDuringUpload.filter((m) => {
124-
return !installedModules.find(
141+
return !uniqueInstalled.find(
125142
(installed) =>
126143
installed.moduleTemplateName === m.moduleTpl.metadata.name,
127144
);
128145
});
129146

130147
if (modulesDuringProcessing.length === 0) {
131-
setModulesToDisplay(installedModules);
148+
setModulesToDisplay(uniqueInstalled);
132149
return;
133150
}
134151

135152
const moduleTemplatesDuringUpload = modulesDuringProcessing
136153
.filter((m) => m.state !== State.Finished)
137154
.map((m) => createFakeModuleTemplateWithStatus(m));
138155

139-
setModulesToDisplay([...installedModules, ...moduleTemplatesDuringUpload]);
156+
setModulesToDisplay([...uniqueInstalled, ...moduleTemplatesDuringUpload]);
140157
}, [installedModules, modulesDuringUpload]);
141158

142159
const handleShowAddModule = () => {

src/components/Modules/community/communityModulesHelpers.ts

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ export function getInstalledModules(
118118
): ModuleTemplateListType {
119119
const installedModuleTemplates = moduleTemplates.items?.filter((module) => {
120120
const foundManager =
121-
managers[`${module.metadata.name}:${module.spec.manager.namespace}`];
121+
managers[`${module.metadata.name}:${module.spec?.manager?.namespace}`];
122122
if (!foundManager) {
123123
return false;
124124
}
@@ -127,7 +127,7 @@ export function getInstalledModules(
127127
(container: { image: string }) => {
128128
return (
129129
imageMatchVersion(container.image, module.spec.version) &&
130-
foundManager.metadata.namespace === module.spec.manager.namespace
130+
foundManager.metadata.namespace === module.spec.manager?.namespace
131131
);
132132
},
133133
);
@@ -145,12 +145,8 @@ export function getNotInstalledModules(
145145
): ModuleTemplateListType {
146146
const notInstalledModuleTemplates = moduleTemplates.items?.filter(
147147
(module) => {
148-
const foundManager = managers?.items?.find((manager: any) => {
149-
return (
150-
manager.metadata.name === module.metadata.name &&
151-
manager.metadata.namespace === module.metadata.namespace
152-
);
153-
});
148+
const foundManager =
149+
managers[`${module.metadata.name}:${module.spec?.manager?.namespace}`];
154150

155151
return !foundManager;
156152
},

0 commit comments

Comments
 (0)