From 64ac6d4a1254bc65996d163321c60cd72d9736a7 Mon Sep 17 00:00:00 2001 From: Andrew Pareles Date: Fri, 21 Feb 2025 21:09:03 -0800 Subject: [PATCH] ctrlK --- .../contrib/void/browser/editCodeService.ts | 30 +++++++------------ .../src/quick-edit-tsx/QuickEditChat.tsx | 2 +- .../void/browser/react/src/util/services.tsx | 4 +-- 3 files changed, 14 insertions(+), 22 deletions(-) diff --git a/src/vs/workbench/contrib/void/browser/editCodeService.ts b/src/vs/workbench/contrib/void/browser/editCodeService.ts index 0d1cc369..b14c085a 100644 --- a/src/vs/workbench/contrib/void/browser/editCodeService.ts +++ b/src/vs/workbench/contrib/void/browser/editCodeService.ts @@ -287,8 +287,6 @@ class EditCodeService extends Disposable implements IEditCodeService { private readonly _onDidChangeCtrlKZoneStreaming = new Emitter<{ uri: URI; diffareaid: number }>(); private readonly _onDidAddOrDeleteDiffZone = new Emitter<{ uri: URI }>(); - private readonly _onDidChangeAcceptRejectAllState = new Emitter<{ uri: URI, state: AcceptRejectAllState }>(); // was going to be used, but decided not to - onDidChangeDiffZoneStreaming = this._onDidChangeDiffZoneStreaming.event onDidChangeCtrlKZoneStreaming = this._onDidChangeCtrlKZoneStreaming.event @@ -325,19 +323,9 @@ class EditCodeService extends Disposable implements IEditCodeService { }) ) - // add the accept|reject UI here - let removeAcceptRejectAllUI: (() => void) | null = null - this._register(this._onDidChangeAcceptRejectAllState.event(({ uri, state }) => { - if (state === 'acceptRejectAll' && !removeAcceptRejectAllUI) { - removeAcceptRejectAllUI = this._addAcceptRejectAllUI(uri) ?? null - } else { - removeAcceptRejectAllUI?.() - removeAcceptRejectAllUI = null - } - })) - - // when a stream starts or ends - const changeUriState = () => { + // when a stream starts or ends, add/remove the accept|reject UI + let _removeAcceptRejectAllUI: (() => void) | null = null + const updateAcceptRejectAllUI = () => { const uri = model.uri const diffZones = [...this.diffAreasOfURI[uri.fsPath].values()] .map(diffareaid => this.diffAreaOfId[diffareaid]) @@ -345,12 +333,16 @@ class EditCodeService extends Disposable implements IEditCodeService { const isStreaming = diffZones.find(diffZone => !!diffZone._streamState.isStreaming) const state: AcceptRejectAllState = isStreaming ? 'streaming' : (diffZones.length === 0 ? 'idle' : 'acceptRejectAll') - this._onDidChangeAcceptRejectAllState.fire({ uri, state }) + if (state === 'acceptRejectAll' && !_removeAcceptRejectAllUI) { + _removeAcceptRejectAllUI = this._addAcceptRejectAllUI(uri) ?? null + } else { + _removeAcceptRejectAllUI?.() + _removeAcceptRejectAllUI = null + } } - this._register(this._onDidChangeDiffZoneStreaming.event(({ uri: uri_ }) => { if (uri_.fsPath === model.uri.fsPath) changeUriState() })) - this._register(this._onDidAddOrDeleteDiffZone.event(({ uri: uri_ }) => { if (uri_.fsPath === model.uri.fsPath) changeUriState() })) - + this._register(this._onDidChangeDiffZoneStreaming.event(({ uri: uri_ }) => { if (uri_.fsPath === model.uri.fsPath) updateAcceptRejectAllUI() })) + this._register(this._onDidAddOrDeleteDiffZone.event(({ uri: uri_ }) => { if (uri_.fsPath === model.uri.fsPath) updateAcceptRejectAllUI() })) } // initialize all existing models + initialize when a new model mounts diff --git a/src/vs/workbench/contrib/void/browser/react/src/quick-edit-tsx/QuickEditChat.tsx b/src/vs/workbench/contrib/void/browser/react/src/quick-edit-tsx/QuickEditChat.tsx index 44899741..fe70caa3 100644 --- a/src/vs/workbench/contrib/void/browser/react/src/quick-edit-tsx/QuickEditChat.tsx +++ b/src/vs/workbench/contrib/void/browser/react/src/quick-edit-tsx/QuickEditChat.tsx @@ -49,7 +49,7 @@ export const QuickEditChat = ({ const isDisabled = instructionsAreEmpty || !!isFeatureNameDisabled('Ctrl+K', settingsState) - const [isStreamingRef, setIsStreamingRef] = useRefState(false) + const [isStreamingRef, setIsStreamingRef] = useRefState(editCodeService.isCtrlKZoneStreaming({ diffareaid })) useCtrlKZoneStreamingState(useCallback((diffareaid2, isStreaming) => { if (diffareaid !== diffareaid2) return setIsStreamingRef(isStreaming) diff --git a/src/vs/workbench/contrib/void/browser/react/src/util/services.tsx b/src/vs/workbench/contrib/void/browser/react/src/util/services.tsx index bf44e045..9ea92f0c 100644 --- a/src/vs/workbench/contrib/void/browser/react/src/util/services.tsx +++ b/src/vs/workbench/contrib/void/browser/react/src/util/services.tsx @@ -348,7 +348,7 @@ export const useRefreshModelListener = (listener: (providerName: RefreshableProv useEffect(() => { refreshModelProviderListeners.add(listener) return () => { refreshModelProviderListeners.delete(listener) } - }, [listener]) + }, [listener, refreshModelProviderListeners]) } @@ -356,7 +356,7 @@ export const useCtrlKZoneStreamingState = (listener: (diffareaid: number, s: boo useEffect(() => { ctrlKZoneStreamingStateListeners.add(listener) return () => { ctrlKZoneStreamingStateListeners.delete(listener) } - }, [listener]) + }, [listener, ctrlKZoneStreamingStateListeners]) }