feat(ui): add confirmation dialog before stopping and updating core

- prompt for user confirmation before stopping running core and updating
- add confirm dialog UI with cancel and update actions
- add multilingual translations for core update confirmation
This commit is contained in:
lzt404 committed 2026-08-26 01:56:46 +08:00
1 parent 2a6f110d75
commit e8093928c0
4 files changed
+52 -1

No files matched your search

+2
View File
@@ -966,6 +966,8 @@ export const jaOverrides = {
'kernel.versions.check': '更新を確認',
'kernel.versions.installVersion': '{version} をインストール',
'kernel.versions.installLatest': '停止して更新',
'kernel.versions.confirmUpdateTitle': 'コアを停止して更新',
'kernel.versions.stopAndConfirmDescription': 'コアを更新すると実行中のコアプロセスが停止し、バージョン {version} がインストールされます。更新後にコアを再起動できます。続行しますか?',
'kernel.versions.stopAndUpdateVersion': '{version} に停止して更新',
'kernel.versions.reinstallTitle': '現在のバージョンを再インストール',
'kernel.versions.reinstall': '再インストール',
+2
View File
@@ -966,6 +966,8 @@ export const en: Record<MessageKey, string> = {
'kernel.versions.check': 'Check for Updates',
'kernel.versions.installVersion': 'Install {version}',
'kernel.versions.installLatest': 'Stop and Update',
'kernel.versions.confirmUpdateTitle': 'Stop and Update Core',
'kernel.versions.stopAndConfirmDescription': 'Updating the core will stop the currently running core process and install version {version}. You can restart the core after the update. Do you want to continue?',
'kernel.versions.stopAndUpdateVersion': 'Stop and update to {version}',
'kernel.versions.reinstallTitle': 'Reinstall the current version',
'kernel.versions.reinstall': 'Reinstall',
+2
View File
@@ -964,6 +964,8 @@ export const zhCN = {
'kernel.versions.check': '检查更新',
'kernel.versions.installVersion': '安装 {version}',
'kernel.versions.installLatest': '停止并更新',
'kernel.versions.confirmUpdateTitle': '停止并更新内核',
'kernel.versions.stopAndConfirmDescription': '更新内核将停止正在运行的内核进程,并下载安装版本 {version}。更新完成后需重新启动内核,是否继续?',
'kernel.versions.stopAndUpdateVersion': '停止并更新至 {version}',
'kernel.versions.reinstallTitle': '重新安装当前版本',
'kernel.versions.reinstall': '重新安装',
+46 -1
View File
@@ -113,6 +113,7 @@ export function VersionManagementPage() {
const [installing, setInstalling] = useState(false);
const [progress, setProgress] = useState<CoreInstallTask | null>(null);
const [installDialogOpen, setInstallDialogOpen] = useState(false);
const [confirmUpdateOpen, setConfirmUpdateOpen] = useState(false);
const [cancellingInstall, setCancellingInstall] = useState(false);
const [versionSource, setVersionSource] = useState<VersionSourceSettings | null>(null);
@@ -629,7 +630,7 @@ export function VersionManagementPage() {
className={latestVersion && (!coreInstalled || currentVersion !== latestVersion) ? 'primary-button' : 'secondary-button'}
title={latestVersion ? t('kernel.versions.stopAndUpdateVersion', { version: latestVersion }) : t('kernel.versions.installLatest')}
disabled={!latestVersion || busy}
onClick={() => void installVersion(latestVersion)}
onClick={() => setConfirmUpdateOpen(true)}
>
<Download size={15} aria-hidden="true" />
<span>{!coreInstalled ? t('kernel.versions.installLatestMissing') : t('kernel.versions.installLatest')}</span>
@@ -651,6 +652,50 @@ export function VersionManagementPage() {
</div>
</section>
{/* Core Update Confirmation Dialog */}
{confirmUpdateOpen ? (
<div className="install-dialog-backdrop app-update-dialog-backdrop">
<section
className="install-dialog app-update-dialog"
role="dialog"
aria-modal="true"
aria-labelledby="core-update-confirm-title"
>
<div className="install-dialog-heading">
<span className="install-dialog-eyebrow">{t('kernel.dialog.install')}</span>
<h2 id="core-update-confirm-title">
{t('kernel.versions.confirmUpdateTitle')}
</h2>
</div>
<p className="app-update-confirm-copy">
{t('kernel.versions.stopAndConfirmDescription', { version: latestVersion })}
</p>
<div className="app-update-dialog-actions">
<button
type="button"
className="secondary-button"
onClick={() => setConfirmUpdateOpen(false)}
>
{t('common.cancel')}
</button>
<button
type="button"
className="primary-button"
onClick={() => {
setConfirmUpdateOpen(false);
void installVersion(latestVersion);
}}
>
<Download size={15} aria-hidden="true" />
<span>{t('kernel.versions.installLatest')}</span>
</button>
</div>
</section>
</div>
) : null}
{/* Installation Progress Modal Dialog */}
{installDialogOpen && progress ? (
<div className="install-dialog-backdrop">