Fix isl not detecting workspace folder changes without reloading

Summary: It seems we were not properly subscribing to changes in the vscode workspace folders. We used `onConnectOrReconnect` inside the lazyAtom, which means it was not triggered on first connect. Since reconnects don't happen in most cases (maybe never for vscode connection...?), it would never actually subscribe. Instead, we could either move this to a not lazy atom, or make it just call the subscribe directly. I opt to make the atom not lazy, since we use this in the cwdSelector immediately on startup, there's no real use having it be lazy. Maybe that made sense when the cwd dropdown didn't use this state.

Reviewed By: quark-zju

Differential Revision: D57136047

fbshipit-source-id: 8298b8b94b06e109f78240d20cb42014f3d18e00
This commit is contained in:
Evan Krause 2024-05-09 09:52:23 -07:00 committed by Facebook GitHub Bot
parent 79ae03bc88
commit 2d28ee9e42

View File

@ -25,7 +25,7 @@ import {lazyAtom, writeAtom} from './jotaiUtils';
import {serverCwd} from './repositoryData';
import {repositoryInfo} from './serverAPIState';
import {registerCleanup, registerDisposable} from './utils';
import {useAtomValue} from 'jotai';
import {atom, useAtomValue} from 'jotai';
import {Icon} from 'shared/Icon';
import {KeyCode, Modifier} from 'shared/KeyboardShortcuts';
import {basename} from 'shared/utils';
@ -60,19 +60,16 @@ function getRepoLabel(repoRoot: AbsolutePath, cwd: string) {
return repoBasename + repoRelativeCwd;
}
export const availableCwds = lazyAtom<Array<CwdInfo>>(() => {
// Only request `subscribeToAvailableCwds` when first read the atom.
registerCleanup(
availableCwds,
serverAPI.onConnectOrReconnect(() => {
serverAPI.postMessage({
type: 'platform/subscribeToAvailableCwds',
});
}),
import.meta.hot,
);
return [];
}, []);
export const availableCwds = atom<Array<CwdInfo>>([]);
registerCleanup(
availableCwds,
serverAPI.onConnectOrReconnect(() => {
serverAPI.postMessage({
type: 'platform/subscribeToAvailableCwds',
});
}),
import.meta.hot,
);
registerDisposable(
availableCwds,