portainer/app/react/kubernetes/namespaces/ItemView/createUpdateRegistriesPaylo...

51 lines
1.3 KiB
TypeScript

import { uniqBy } from 'lodash';
import { Registry } from '@/react/portainer/registries/types/registry';
import { UpdateRegistryPayload } from '../types';
export function createUpdateRegistriesPayload({
registries,
namespaceName,
newRegistriesValues,
initialRegistriesValues,
environmentId,
}: {
registries: Registry[] | undefined;
namespaceName: string;
newRegistriesValues: Registry[];
initialRegistriesValues: Registry[];
environmentId: number;
}): UpdateRegistryPayload[] {
if (!registries) {
return [];
}
// Get all unique registries from both initial and new values
const uniqueRegistries = uniqBy(
[...initialRegistriesValues, ...newRegistriesValues],
'Id'
);
const payload = uniqueRegistries.map((registry) => {
const currentNamespaces =
registry.RegistryAccesses?.[`${environmentId}`]?.Namespaces || [];
const existsInNewValues = newRegistriesValues.some(
(r) => r.Id === registry.Id
);
// If registry is in new values, add namespace; if not, remove it
const updatedNamespaces = existsInNewValues
? [...new Set([...currentNamespaces, namespaceName])]
: currentNamespaces.filter((ns) => ns !== namespaceName);
return {
Id: registry.Id,
Namespaces: updatedNamespaces,
};
});
return payload;
}