Skip to content

Commit e6ce079

Browse files
committed
fix: use terminal preferences atom for settings sync
1 parent f2b9795 commit e6ce079

2 files changed

Lines changed: 30 additions & 4 deletions

File tree

packages/web/src/features/settings/components/settings-page.test.tsx

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1076,6 +1076,34 @@ describe("SettingsPage", () => {
10761076
expect(store.get(terminalPreferencesAtom)).toEqual({ copyOnSelect: true });
10771077
});
10781078

1079+
it("renders copy-on-select from the terminal preferences atom before settings load resolves", async () => {
1080+
let resolveSettingsGet: ((value: Record<string, unknown>) => void) | undefined;
1081+
const settingsGetPromise = new Promise<Record<string, unknown>>((resolve) => {
1082+
resolveSettingsGet = resolve;
1083+
});
1084+
const sendCommand = vi.fn().mockImplementation(async (op: string) => {
1085+
if (op === "settings.get") {
1086+
return await settingsGetPromise;
1087+
}
1088+
return {};
1089+
});
1090+
const store = createConnectedStore(sendCommand);
1091+
store.set(terminalPreferencesAtom, { copyOnSelect: true });
1092+
1093+
renderSettingsPage(store);
1094+
fireEvent.click(screen.getByRole("button", { name: "外观" }));
1095+
1096+
expect(await screen.findByRole("switch", { name: "选中自动复制" })).toHaveAttribute(
1097+
"aria-checked",
1098+
"true"
1099+
);
1100+
1101+
await act(async () => {
1102+
resolveSettingsGet?.({});
1103+
await settingsGetPromise;
1104+
});
1105+
});
1106+
10791107
it("preserves copy-on-select when a stale settings load resolves afterward", async () => {
10801108
let resolveSettingsGet: ((value: Record<string, unknown>) => void) | undefined;
10811109
const settingsGetPromise = new Promise<Record<string, unknown>>((resolve) => {

packages/web/src/features/settings/components/settings-page.tsx

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,6 @@ export function SettingsPage() {
151151
const [terminalRenderer, setTerminalRendererState] = useState<"standard" | "compatibility">(
152152
"standard"
153153
);
154-
const [terminalCopyOnSelect, setTerminalCopyOnSelectState] = useState(false);
155154
const [providerAdditionalArgsById, setProviderAdditionalArgsById] = useState<
156155
Record<string, string>
157156
>({});
@@ -160,6 +159,7 @@ export function SettingsPage() {
160159
const [settingsRefreshKey, setSettingsRefreshKey] = useState(0);
161160
const [locale, setLocaleState] = useAtom(localeAtom);
162161
const [theme, setTheme] = useAtom(themeAtom);
162+
const terminalPreferences = useAtomValue(terminalPreferencesAtom);
163163
const setNotificationPreferences = useSetAtom(notificationPreferencesAtom);
164164
const setTerminalPreferences = useSetAtom(terminalPreferencesAtom);
165165
const settingsLoadFailedUnknownRef = useRef(settingsLoadFailedUnknown);
@@ -245,7 +245,6 @@ export function SettingsPage() {
245245
appearanceSelectionVersionAtRequestStart.terminalCopyOnSelect
246246
) {
247247
const resolvedTerminalCopyOnSelect = resolveTerminalCopyOnSelectSetting(settings);
248-
setTerminalCopyOnSelectState(resolvedTerminalCopyOnSelect);
249248
setTerminalPreferences({
250249
copyOnSelect: resolvedTerminalCopyOnSelect,
251250
});
@@ -286,7 +285,6 @@ export function SettingsPage() {
286285

287286
const handleTerminalCopyOnSelectSelection = (value: boolean) => {
288287
appearanceSelectionVersionRef.current.terminalCopyOnSelect += 1;
289-
setTerminalCopyOnSelectState(value);
290288
setTerminalPreferences({ copyOnSelect: value });
291289
};
292290

@@ -337,7 +335,7 @@ export function SettingsPage() {
337335
setLocale={handleLocaleSelection}
338336
terminalRenderer={terminalRenderer}
339337
setTerminalRenderer={handleTerminalRendererSelection}
340-
terminalCopyOnSelect={terminalCopyOnSelect}
338+
terminalCopyOnSelect={terminalPreferences.copyOnSelect}
341339
setTerminalCopyOnSelect={handleTerminalCopyOnSelectSelection}
342340
theme={theme}
343341
setTheme={setTheme}

0 commit comments

Comments
 (0)