/** * Copyright (c) OpenLens Authors. All rights reserved. * Licensed under MIT License. See LICENSE in root directory for more information. */ import "./release-rollback-dialog.scss"; import React from "react"; import { observable, makeObservable } from "mobx"; import { observer } from "mobx-react"; import { Dialog, DialogProps } from "../dialog"; import { Wizard, WizardStep } from "../wizard"; import { getReleaseHistory, HelmRelease, type IReleaseRevision } from "../../../common/k8s-api/endpoints/helm-releases.api"; import { Select, SelectOption } from "../select"; import { Notifications } from "../notifications"; import orderBy from "lodash/orderBy"; import { withInjectables } from "@ogre-tools/injectable-react"; import releaseRollbackDialogModelInjectable from "./release-rollback-dialog-model/release-rollback-dialog-model.injectable"; import type { ReleaseRollbackDialogModel } from "./release-rollback-dialog-model/release-rollback-dialog-model"; import rollbackReleaseInjectable from "./rollback-release/rollback-release.injectable"; export interface ReleaseRollbackDialogProps extends DialogProps { } interface Dependencies { rollbackRelease: (releaseName: string, namespace: string, revisionNumber: number) => Promise; model: ReleaseRollbackDialogModel; } @observer class NonInjectedReleaseRollbackDialog extends React.Component { @observable isLoading = false; @observable revision: IReleaseRevision; @observable revisions = observable.array(); constructor(props: ReleaseRollbackDialogProps & Dependencies) { super(props); makeObservable(this); } get release(): HelmRelease { return this.props.model.release; } onOpen = async () => { this.isLoading = true; let releases = await getReleaseHistory(this.release.getName(), this.release.getNs()); releases = orderBy(releases, "revision", "desc"); // sort this.revisions.replace(releases); this.revision = this.revisions[0]; this.isLoading = false; }; rollback = async () => { const revisionNumber = this.revision.revision; try { await this.props.rollbackRelease(this.release.getName(), this.release.getNs(), revisionNumber); this.props.model.close(); } catch (err) { Notifications.error(err); } }; renderContent() { const { revision, revisions } = this; if (!revision) { return

No revisions to rollback.

; } return (
Revision