import { useCallback, useState } from "react"; import { useTranslation } from "react-i18next"; import { authenticatedFetch } from "../../../utils/api"; import { ReleaseInfo } from "../../../types/sharedTypes"; import { copyTextToClipboard } from "../../../utils/clipboard"; import type { InstallMode } from "../../../hooks/useVersionCheck"; import { IS_PLATFORM } from "../../../constants/config"; interface VersionUpgradeModalProps { isOpen: boolean; onClose: () => void; releaseInfo: ReleaseInfo | null; currentVersion: string; latestVersion: string | null; installMode: InstallMode; } export function VersionUpgradeModal({ isOpen, onClose, releaseInfo, currentVersion, latestVersion, installMode }: VersionUpgradeModalProps) { const { t } = useTranslation('common'); const upgradeCommand = installMode === 'npm' ? t('versionUpdate.npmUpgradeCommand') : IS_PLATFORM ? 'npm run update:platform' : 'git checkout main && git pull && npm install'; const [isUpdating, setIsUpdating] = useState(false); const [updateOutput, setUpdateOutput] = useState(''); const [updateError, setUpdateError] = useState(''); const handleUpdateNow = useCallback(async () => { setIsUpdating(true); setUpdateOutput('Starting update...\n'); setUpdateError(''); try { // Call the backend API to run the update command const response = await authenticatedFetch('/api/system/update', { method: 'POST', }); const data = await response.json(); if (response.ok) { setUpdateOutput(prev => prev + data.output + '\n'); setUpdateOutput(prev => prev + '\n✅ Update completed successfully!\n'); const text = IS_PLATFORM ? 'Please refresh the page after 5 seconds to load the new version. If that doesn\'t work, RESTART the environment.' : 'Please restart the server to apply changes.'; setUpdateOutput(prev => prev + text + '\n'); } else { setUpdateError(data.error || 'Update failed'); setUpdateOutput(prev => prev + '\n❌ Update failed: ' + (data.error || 'Unknown error') + '\n'); } } catch (error: any) { setUpdateError(error.message); setUpdateOutput(prev => prev + '\n❌ Update failed: ' + error.message + '\n'); } finally { setIsUpdating(false); } }, []); if (!isOpen) return null; return (
{releaseInfo?.title || t('versionUpdate.newVersionReady')}
{updateOutput}
{upgradeCommand}
{t('versionUpdate.manualUpgradeHint')}