fix: prevent language setting rollback after successful save
Introduce `closeAfterSave` callback to distinguish between save-and-close and cancel-and-close scenarios. Previously, saving settings would trigger `resetSettings()`, causing language changes to revert and requiring users to save twice for the change to take effect. Changes: - Add `closeAfterSave()`: close dialog without resetting settings after successful save - Keep `closeDialog()`: reset settings when canceling or directly closing dialog - Update save flow to use `closeAfterSave()` in `handleSaveClick`, `handleRestartLater`, and `handleRestartNow`
This commit is contained in:
@@ -85,6 +85,7 @@ export function SettingsDialog({
|
||||
}, [requiresRestart]);
|
||||
|
||||
const closeDialog = useCallback(() => {
|
||||
// 取消/直接关闭:恢复到初始设置(包括语言回滚)
|
||||
resetSettings();
|
||||
acknowledgeRestart();
|
||||
clearSelection();
|
||||
@@ -98,6 +99,14 @@ export function SettingsDialog({
|
||||
resetStatus,
|
||||
]);
|
||||
|
||||
const closeAfterSave = useCallback(() => {
|
||||
// 保存成功后关闭:不再重置语言,避免需要“保存两次”才生效
|
||||
acknowledgeRestart();
|
||||
clearSelection();
|
||||
resetStatus();
|
||||
onOpenChange(false);
|
||||
}, [acknowledgeRestart, clearSelection, onOpenChange, resetStatus]);
|
||||
|
||||
const handleDialogChange = useCallback(
|
||||
(nextOpen: boolean) => {
|
||||
if (!nextOpen) {
|
||||
@@ -121,7 +130,7 @@ export function SettingsDialog({
|
||||
setShowRestartPrompt(true);
|
||||
return;
|
||||
}
|
||||
closeDialog();
|
||||
closeAfterSave();
|
||||
} catch (error) {
|
||||
console.error("[SettingsDialog] Failed to save settings", error);
|
||||
}
|
||||
@@ -129,8 +138,8 @@ export function SettingsDialog({
|
||||
|
||||
const handleRestartLater = useCallback(() => {
|
||||
setShowRestartPrompt(false);
|
||||
closeDialog();
|
||||
}, [closeDialog]);
|
||||
closeAfterSave();
|
||||
}, [closeAfterSave]);
|
||||
|
||||
const handleRestartNow = useCallback(async () => {
|
||||
setShowRestartPrompt(false);
|
||||
@@ -140,7 +149,7 @@ export function SettingsDialog({
|
||||
defaultValue: "开发模式下不支持自动重启,请手动重新启动应用。",
|
||||
}),
|
||||
);
|
||||
closeDialog();
|
||||
closeAfterSave();
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -154,9 +163,9 @@ export function SettingsDialog({
|
||||
}),
|
||||
);
|
||||
} finally {
|
||||
closeDialog();
|
||||
closeAfterSave();
|
||||
}
|
||||
}, [closeDialog, t]);
|
||||
}, [closeAfterSave, t]);
|
||||
|
||||
const isBusy = useMemo(() => isLoading && !settings, [isLoading, settings]);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user