diff --git a/src/components/sidebar/view/modals/VersionUpgradeModal.tsx b/src/components/sidebar/view/modals/VersionUpgradeModal.tsx new file mode 100644 index 0000000..891bd44 --- /dev/null +++ b/src/components/sidebar/view/modals/VersionUpgradeModal.tsx @@ -0,0 +1,219 @@ +import { useCallback, useState } from "react"; +import { useTranslation } from "react-i18next"; +import { authenticatedFetch } from "../../../../utils/api"; +import { ReleaseInfo } from "../../../../types/sharedTypes"; + +interface VersionUpgradeModalProps { + isOpen: boolean; + onClose: () => void; + releaseInfo: ReleaseInfo | null; + currentVersion: string; + latestVersion: string | null; +} + +export default function VersionUpgradeModal({ + isOpen, + onClose, + releaseInfo, + currentVersion, + latestVersion +}: VersionUpgradeModalProps) { + const { t } = useTranslation('common'); + 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'); + setUpdateOutput(prev => prev + 'Please restart the server to apply changes.\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}
+
+ git checkout main && git pull && npm install
+
+ + {t('versionUpdate.manualUpgradeHint')} +
+