mirror of
https://github.com/lensapp/lens.git
synced 2025-05-20 05:10:56 +00:00
Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com> Co-authored-by: Janne Savolainen <janne.savolainen@live.fi>
49 lines
1.3 KiB
TypeScript
49 lines
1.3 KiB
TypeScript
/**
|
|
* 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<HelmRelease[]>;
|
|
releaseSelectionStatus: ObservableMap<string, boolean>;
|
|
deleteRelease: (release: HelmRelease) => Promise<any>;
|
|
}
|
|
|
|
export interface RemovableHelmRelease extends HelmRelease {
|
|
toggle: () => void;
|
|
isSelected: boolean;
|
|
delete: () => Promise<void>;
|
|
}
|
|
|
|
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);
|
|
},
|
|
}),
|
|
),
|
|
);
|
|
};
|