/** * Copyright (c) OpenLens Authors. All rights reserved. * Licensed under MIT License. See LICENSE in root directory for more information. */ import React from "react"; import type { HelmRelease } from "../../../common/k8s-api/endpoints/helm-releases.api"; import { cssNames } from "../../utils"; import { MenuActions, MenuActionsProps } from "../menu/menu-actions"; import { MenuItem } from "../menu"; import { Icon } from "../icon"; import { withInjectables } from "@ogre-tools/injectable-react"; import createUpgradeChartTabInjectable from "../dock/upgrade-chart/create-upgrade-chart-tab.injectable"; import releaseRollbackDialogModelInjectable from "./release-rollback-dialog-model/release-rollback-dialog-model.injectable"; import deleteReleaseInjectable from "./delete-release/delete-release.injectable"; interface Props extends MenuActionsProps { release: HelmRelease; hideDetails?(): void; } interface Dependencies { deleteRelease: (release: HelmRelease) => Promise createUpgradeChartTab: (release: HelmRelease) => void openRollbackDialog: (release: HelmRelease) => void } class NonInjectedHelmReleaseMenu extends React.Component { remove = () => { return this.props.deleteRelease(this.props.release); }; upgrade = () => { const { release, hideDetails } = this.props; this.props.createUpgradeChartTab(release); hideDetails?.(); }; rollback = () => { this.props.openRollbackDialog(this.props.release); }; renderContent() { const { release, toolbar } = this.props; if (!release) return null; const hasRollback = release && release.getRevision() > 1; return ( <> {hasRollback && ( Rollback )} Upgrade ); } render() { const { className, release, ...menuProps } = this.props; return (

Remove Helm Release {release.name}?

} > {this.renderContent()}
); } } export const HelmReleaseMenu = withInjectables( NonInjectedHelmReleaseMenu, { getProps: (di, props) => ({ deleteRelease: di.inject(deleteReleaseInjectable), createUpgradeChartTab: di.inject(createUpgradeChartTabInjectable), openRollbackDialog: di.inject(releaseRollbackDialogModelInjectable).open, ...props, }), }, );