import { useState } from "react" import { useTranslation } from "react-i18next" import { ServiceSlim } from "../../types/services" import StyledModal from "./StyledModal" import { IconArrowUp } from "@tabler/icons-react" import api from "~/lib/api" interface UpdateServiceModalProps { record: ServiceSlim currentTag: string latestVersion: string onCancel: () => void onUpdate: (version: string) => void showError: (msg: string) => void } export default function UpdateServiceModal({ record, currentTag, latestVersion, onCancel, onUpdate, showError, }: UpdateServiceModalProps) { const { t } = useTranslation() const [selectedVersion, setSelectedVersion] = useState(latestVersion) const [showAdvanced, setShowAdvanced] = useState(false) const [versions, setVersions] = useState>([]) const [loadingVersions, setLoadingVersions] = useState(false) async function loadVersions() { if (versions.length > 0) return setLoadingVersions(true) try { const result = await api.getAvailableVersions(record.service_name) if (result?.versions) { setVersions(result.versions) } } catch (error) { showError(t('updateService.failedToLoadVersions')) } finally { setLoadingVersions(false) } } function handleToggleAdvanced() { const next = !showAdvanced setShowAdvanced(next) if (next) loadVersions() } return ( onUpdate(selectedVersion)} onCancel={onCancel} open={true} confirmText={t('updateService.update')} confirmVariant="primary" icon={} >

{t('updateService.dataPreserved')} {versions.find((v) => v.tag === selectedVersion)?.releaseUrl && ( <> {' '} v.tag === selectedVersion)!.releaseUrl} target="_blank" rel="noopener noreferrer" className="text-desert-green hover:underline" > {t('updateService.viewReleaseNotes')} )}

{showAdvanced && ( <>
{loadingVersions ? (
{t('updateService.loadingVersions')}
) : versions.length === 0 ? (
{t('updateService.noVersionsAvailable')}
) : ( versions.map((v) => ( )) )}

{t('updateService.majorVersionWarning')}

)}
) }