import "./install-chart.scss"; import React, { Component } from "react"; import { observable } from "mobx"; import { observer } from "mobx-react"; import { t, Trans } from "@lingui/macro"; import { dockStore, DockTabData } from "./dock.store"; import { InfoPanel } from "./info-panel"; import { Badge } from "../badge"; import { NamespaceSelect } from "../+namespaces/namespace-select"; import { autobind, prevDefault } from "../../utils"; import { ChartInstallData, installChartStore } from "./install-chart.store"; import { Spinner } from "../spinner"; import { Icon } from "../icon"; import { Button } from "../button"; import { releaseURL } from "../+apps-releases"; import { releaseStore } from "../+apps-releases/release.store"; import { LogsDialog } from "../dialog/logs-dialog"; import { Select, SelectOption } from "../select"; import { Input } from "../input"; import { EditorPanel } from "./editor-panel"; import { navigate } from "../../navigation"; import { _i18n } from "../../i18n"; import { ReleaseUpdateDetails } from "client/api/endpoints/helm-releases.api"; interface Props { tab: DockTabData; } @observer export class InstallChart extends Component { @observable error = ""; @observable showNotes = false; get values(): string { return this.chartData.values || ""; } get chartData(): ChartInstallData { return installChartStore.getData(this.tabId); } get tabId(): string { return this.props.tab.id || ""; } get versions(): string[] { return installChartStore.versions.getData(this.tabId); } get releaseDetails(): ReleaseUpdateDetails { return installChartStore.details.getData(this.tabId); } @autobind() viewRelease(): void { const { release } = this.releaseDetails; navigate(releaseURL({ params: { name: release.name, namespace: release.namespace } })); dockStore.closeTab(this.tabId); } @autobind() save(data: Partial): void { const chart = { ...this.chartData, ...data }; installChartStore.setData(this.tabId, chart); } @autobind() onVersionChange(option: SelectOption): void { const version = option.value; this.save({ version, values: "" }); installChartStore.loadValues(this.tabId); } @autobind() onValuesChange(values: string, error?: string): void { this.error = error; this.save({ values }); } @autobind() onNamespaceChange(opt: SelectOption): void { this.save({ namespace: opt.value }); } @autobind() onReleaseNameChange(name: string): void { this.save({ releaseName: name }); } install = async (): Promise => { const { repo, name, version, namespace, values, releaseName } = this.chartData; const details = await releaseStore.create({ name: releaseName || undefined, chart: name, repo, namespace, version, values, }); installChartStore.details.setData(this.tabId, details); return (

Chart Release {details.release.name} successfully created.

); } render(): JSX.Element { const { tabId, chartData, values, versions, install } = this; if (!chartData || chartData.values === undefined || !versions) { return ; } if (this.releaseDetails) { return (

Installation complete!

{ this.showNotes = false; }} logs={this.releaseDetails.log} />
); } const { repo, name, version, namespace, releaseName } = chartData; const panelControls = (
Chart Version
); return (
); } }