fix(terminal): key project action state by one canonical directory
The terminal store keyed its directories by trimming trailing slashes, while the new sidebar activity indicator and the whole-server session grouping keyed the same folder with the project-action normalizer, which also rewrites backslashes. On Windows that split one project into two namespaces: the sidebar reconciled server sessions under "C:/repo" while the terminal panel and the project actions button worked under "C:\repo", so the running-action indicator never lit up, adopted tabs were duplicated and a stop recorded in one namespace did not guard reconciliation in the other. The project actions button also read the store map directly with a path normalized somewhere else, missing its own directory entry. All terminal directory keys now come from normalizeTerminalDirectory in lib/pathNormalization, and store reads go through getDirectoryState.
This commit is contained in:
@@ -226,13 +226,16 @@ export const ProjectActionsButton = ({
|
||||
contextHostDirectoryRef.current = contextHostDirectory;
|
||||
}, [contextHostDirectory]);
|
||||
|
||||
// The store owns its directory key form; reading `sessions` directly with a
|
||||
// project-action-normalized path misses the entry whenever the two spellings
|
||||
// differ (Windows drive letters and separators).
|
||||
const directoryTerminalState = useTerminalStore((state) => (
|
||||
normalizedDirectory ? state.sessions.get(normalizedDirectory) : undefined
|
||||
normalizedDirectory ? state.getDirectoryState(normalizedDirectory) : undefined
|
||||
));
|
||||
|
||||
const projectTerminalState = useTerminalStore((state) => (
|
||||
normalizedProjectDirectory && normalizedProjectDirectory !== normalizedDirectory
|
||||
? state.sessions.get(normalizedProjectDirectory)
|
||||
? state.getDirectoryState(normalizedProjectDirectory)
|
||||
: undefined
|
||||
));
|
||||
|
||||
@@ -1065,7 +1068,7 @@ export const ProjectActionsButton = ({
|
||||
const previewRun = previewAction ? projectActionRuns[toProjectActionRunKey(executionDirectoryFor(previewAction), previewAction.id)] : null;
|
||||
const selectedRunPreviewUrl = useTerminalStore((state) => {
|
||||
if (!previewRun) return null;
|
||||
return state.sessions.get(previewRun.directory)?.tabs.find((tab) => tab.id === previewRun.tabId)?.previewUrl ?? null;
|
||||
return state.getDirectoryState(previewRun.directory)?.tabs.find((tab) => tab.id === previewRun.tabId)?.previewUrl ?? null;
|
||||
});
|
||||
|
||||
if (runtime.isVSCode || (!allowMobile && isMobile) || !stableProjectRef || !normalizedDirectory) {
|
||||
|
||||
Reference in New Issue
Block a user