feat(server-config): restart required toast (#7479)

## Summary

Show a warning toast when leaving Server Config with pending changes,
reminding users they must restart to apply changes.

## Changes

- **What**: Add a `onBeforeUnmount` toast in `ServerConfigPanel` when
`modifiedConfigs` is non-empty and the user didn’t click Restart; add
i18n strings.

## Review Focus

- Confirm the toast timing/conditions are correct (only fires on leaving
the panel; suppressed when Restart is clicked).

> [!NOTE]
> This is a stacked PR. (main <=
https://github.com/Comfy-Org/ComfyUI_frontend/pull/7478 <=
https://github.com/Comfy-Org/ComfyUI_frontend/pull/7479)

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-7479-feat-server-config-restart-required-toast-2ca6d73d3650811f85f7f0c52c4cf8f0)
by [Unito](https://www.unito.io)
This commit is contained in:
Benjamin Lu
2025-12-16 05:57:11 -08:00
committed by GitHub
parent 5d1bf6dfb3
commit 93195d3274
2 changed files with 28 additions and 3 deletions

View File

@@ -631,7 +631,9 @@
"serverConfig": {
"modifiedConfigs": "You have modified the following server configurations. Restart to apply changes.",
"revertChanges": "Revert Changes",
"restart": "Restart"
"restart": "Restart",
"restartRequiredToastSummary": "Restart required",
"restartRequiredToastDetail": "Restart the app to apply server configuration changes."
},
"shape": {
"default": "Default",
@@ -2450,4 +2452,4 @@
"recentReleases": "Recent releases",
"helpCenterMenu": "Help Center Menu"
}
}
}

View File

@@ -70,7 +70,7 @@ import { storeToRefs } from 'pinia'
import Button from 'primevue/button'
import Divider from 'primevue/divider'
import Message from 'primevue/message'
import { watch } from 'vue'
import { onBeforeUnmount, watch } from 'vue'
import { useI18n } from 'vue-i18n'
import FormItem from '@/components/common/FormItem.vue'
@@ -79,11 +79,13 @@ import { useCopyToClipboard } from '@/composables/useCopyToClipboard'
import type { ServerConfig } from '@/constants/serverConfig'
import { useSettingStore } from '@/platform/settings/settingStore'
import type { FormItem as FormItemType } from '@/platform/settings/types'
import { useToastStore } from '@/platform/updates/common/toastStore'
import { useServerConfigStore } from '@/stores/serverConfigStore'
import { electronAPI } from '@/utils/envUtil'
const settingStore = useSettingStore()
const serverConfigStore = useServerConfigStore()
const toastStore = useToastStore()
const {
serverConfigsByCategory,
serverConfigValues,
@@ -92,11 +94,14 @@ const {
modifiedConfigs
} = storeToRefs(serverConfigStore)
let restartTriggered = false
const revertChanges = () => {
serverConfigStore.revertChanges()
}
const restartApp = async () => {
restartTriggered = true
await electronAPI().restartApp()
}
@@ -114,6 +119,24 @@ const copyCommandLineArgs = async () => {
}
const { t } = useI18n()
onBeforeUnmount(() => {
if (restartTriggered) {
return
}
if (modifiedConfigs.value.length === 0) {
return
}
toastStore.add({
severity: 'warn',
summary: t('serverConfig.restartRequiredToastSummary'),
detail: t('serverConfig.restartRequiredToastDetail'),
life: 10_000
})
})
const translateItem = (item: ServerConfig<any>): FormItemType => {
return {
...item,