import { useState } from 'react'; import { ArrowUp } from 'lucide-react'; import { withReactQuery } from '@/react-tools/withReactQuery'; import { withCurrentUser } from '@/react-tools/withCurrentUser'; import { ChartVersion } from '@/react/kubernetes/helm/queries/useHelmRepoVersions'; import { Modal, OnSubmit, openModal } from '@@/modals'; import { Button } from '@@/buttons'; import { Input } from '@@/form-components/Input'; import { FormControl } from '@@/form-components/FormControl'; import { WidgetTitle } from '@@/Widget'; import { Checkbox } from '@@/form-components/Checkbox'; import { Option, PortainerSelect } from '@@/form-components/PortainerSelect'; import { UpdateHelmReleasePayload } from '../../types'; import { HelmValuesInput } from '../../components/HelmValuesInput'; import { useHelmChartValues } from '../../queries/useHelmChartValues'; interface Props { onSubmit: OnSubmit; payload: UpdateHelmReleasePayload; versions: ChartVersion[]; chartName: string; } export function UpgradeHelmModal({ payload, versions, onSubmit, chartName, }: Props) { const versionOptions: Option[] = versions.map((version) => { const repo = payload.repo === version.Repo ? version.Repo : ''; const isCurrentVersion = version.AppVersion === payload.appVersion && version.Version === payload.version; const label = `${repo}@${version.Version}${ isCurrentVersion ? ' (current)' : '' }`; return { repo, label, value: version, }; }); const defaultVersion = versionOptions.find( (v) => v.value.AppVersion === payload.appVersion && v.value.Version === payload.version && v.value.Repo === payload.repo )?.value || versionOptions[0]?.value; const [version, setVersion] = useState(defaultVersion); const [userValues, setUserValues] = useState(payload.values || ''); const [atomic, setAtomic] = useState(true); const chartValuesRefQuery = useHelmChartValues({ chart: chartName, repo: version.Repo, version: version.Version, }); return ( onSubmit()} size="xl" className="flex flex-col h-[80vh] px-0" aria-label="upgrade-helm" > } />
value={version} options={versionOptions} onChange={(version) => { if (version) { setVersion(version); } }} data-cy="helm-version-input" /> setAtomic(e.target.checked)} />
); } export async function openUpgradeHelmModal( payload: UpdateHelmReleasePayload, versions: ChartVersion[] ) { return openModal(withReactQuery(withCurrentUser(UpgradeHelmModal)), { payload, versions, chartName: payload.chart, }); }