/** * Copyright (c) OpenLens Authors. All rights reserved. * Licensed under MIT License. See LICENSE in root directory for more information. */ import type { IAsyncComputed } from "@ogre-tools/injectable-react"; import { computed, ObservableMap } from "mobx"; import type { HelmRelease } from "../../../common/k8s-api/endpoints/helm-releases.api"; interface Dependencies { releases: IAsyncComputed; releaseSelectionStatus: ObservableMap; deleteRelease: (release: HelmRelease) => Promise; } export interface RemovableHelmRelease extends HelmRelease { toggle: () => void; isSelected: boolean; delete: () => Promise; } export const removableReleases = ({ releases, releaseSelectionStatus, deleteRelease, }: Dependencies) => { const isSelected = (release: HelmRelease) => releaseSelectionStatus.get(release.getId()) || false; return computed(() => releases.value.get().map( (release): RemovableHelmRelease => ({ ...release, toggle: () => { releaseSelectionStatus.set(release.getId(), !isSelected(release)); }, get isSelected() { return isSelected(release); }, delete: async () => { await deleteRelease(release); }, }), ), ); };