From 368ce0339ac9585ff81133f4907b49371529480d Mon Sep 17 00:00:00 2001 From: Mohamed Boudra Date: Wed, 22 Apr 2026 20:00:43 +0700 Subject: [PATCH] Lazy-load GitHub picker queries --- packages/app/src/components/composer.test.tsx | 17 +++++++++++++++++ packages/app/src/components/composer.tsx | 2 +- .../src/screens/agent/draft-agent-screen.tsx | 1 + .../src/screens/new-workspace-screen.test.tsx | 7 ++++++- .../app/src/screens/new-workspace-screen.tsx | 4 ++-- 5 files changed, 27 insertions(+), 4 deletions(-) diff --git a/packages/app/src/components/composer.test.tsx b/packages/app/src/components/composer.test.tsx index 57dca6a48..315b859c1 100644 --- a/packages/app/src/components/composer.test.tsx +++ b/packages/app/src/components/composer.test.tsx @@ -834,6 +834,23 @@ describe("Composer attachments", () => { expect(combobox.dataset.anchor).toBe("attached"); }); + it("lazily searches GitHub only after the GitHub combobox opens", async () => { + renderComposer(); + await flushAsyncWork(); + + expect(mockClient.searchGitHub).not.toHaveBeenCalled(); + + click(queryByTestId("message-input-attach-button")!); + click(queryByTestId("message-input-attachment-menu-item-github")!); + await findByTestId("composer-github-combobox"); + + expect(mockClient.searchGitHub).toHaveBeenCalledWith({ + cwd: "/repo", + query: "", + limit: 20, + }); + }); + it("closes the GitHub combobox after selecting an item", async () => { renderComposer(); diff --git a/packages/app/src/components/composer.tsx b/packages/app/src/components/composer.tsx index 764f2433b..ec57a7f1a 100644 --- a/packages/app/src/components/composer.tsx +++ b/packages/app/src/components/composer.tsx @@ -790,7 +790,7 @@ export function Composer({ limit: 20, }); }, - enabled: isConnected && !!client && cwd.trim().length > 0, + enabled: isGithubPickerOpen && isConnected && !!client && cwd.trim().length > 0, staleTime: 30_000, }); diff --git a/packages/app/src/screens/agent/draft-agent-screen.tsx b/packages/app/src/screens/agent/draft-agent-screen.tsx index 7573ff21c..526cbc62b 100644 --- a/packages/app/src/screens/agent/draft-agent-screen.tsx +++ b/packages/app/src/screens/agent/draft-agent-screen.tsx @@ -465,6 +465,7 @@ function DraftAgentScreenContent({ }, enabled: isCreateWorktree && + isBranchOpen && isGitDirectory && !isNonGitDirectory && Boolean(trimmedWorkingDir) && diff --git a/packages/app/src/screens/new-workspace-screen.test.tsx b/packages/app/src/screens/new-workspace-screen.test.tsx index ea4fe13ce..0ac9386ee 100644 --- a/packages/app/src/screens/new-workspace-screen.test.tsx +++ b/packages/app/src/screens/new-workspace-screen.test.tsx @@ -586,10 +586,15 @@ describe("NewWorkspaceScreen picker payload", () => { expect(pickerRow.style.transform).toBe("translateY(-216px)"); }); - it("searches only GitHub PRs for the picker", async () => { + it("lazily searches only GitHub PRs when the picker opens", async () => { renderScreen(); await flush(); + expect(mockClient.searchGitHub).not.toHaveBeenCalled(); + + click(await findByTestId("new-workspace-ref-picker-trigger")); + await flush(); + expect(mockClient.searchGitHub).toHaveBeenCalledWith({ cwd: "/repo", query: "", diff --git a/packages/app/src/screens/new-workspace-screen.tsx b/packages/app/src/screens/new-workspace-screen.tsx index c44d6dd53..29c0af402 100644 --- a/packages/app/src/screens/new-workspace-screen.tsx +++ b/packages/app/src/screens/new-workspace-screen.tsx @@ -183,7 +183,7 @@ export function NewWorkspaceScreen({ limit: 20, }); }, - enabled: isConnected && !!client, + enabled: pickerOpen && isConnected && !!client, staleTime: 15_000, }); @@ -198,7 +198,7 @@ export function NewWorkspaceScreen({ kinds: ["github-pr"], }); }, - enabled: isConnected && !!client, + enabled: pickerOpen && isConnected && !!client, staleTime: 30_000, });