Skip to content

collab: make mid-session "+ Add repo" a real popup dialog (fix iframe flicker)#63

Merged
hblanken merged 1 commit into
collabfrom
fix/collab-add-repo-dialog
Jun 17, 2026
Merged

collab: make mid-session "+ Add repo" a real popup dialog (fix iframe flicker)#63
hblanken merged 1 commit into
collabfrom
fix/collab-add-repo-dialog

Conversation

@hblanken

Copy link
Copy Markdown

Fixes the user-reported bug: clicking + Add on a running session made the iframe vanish to the app loading screen and then return, with no dialog to pick repos.

Root cause

The + Add control rendered the repo picker inline in the side panel and fetched /collab/repos via createResource. createResource integrates with Solid's <Suspense>, so while the list was in flight it suspended the page-level Suspense boundary — dropping the entire session (iframe included) to the app loading icon, then snapping back with the picker tucked into the panel where it was easy to miss. Not the popup behaviour expected.

Fix

New AddRepoDialog — a centered modal overlay that mirrors the existing InviteDialog:

  • fixed inset-0, z-index above the iframe, click-outside to close.
  • Fetches the repo list in onMount with a plain signal (not createResource), so it can never suspend the page.
  • The iframe is hidden via visibility:hidden while the dialog is open — iframes promote themselves to their own compositing layer and bleed through z-index, the same trick InviteDialog already uses.
  • Lists every org repo with checkboxes, excludes repos already linked, and on Add calls collab.addRepos — surfacing any branch-collision warnings inline and closing on a clean add.

EmptyReposPanel's inline RepoPicker (the 0-repo recovery flow, which replaces the iframe entirely so suspension is harmless) is unchanged.

Files

  • packages/app/src/components/collab/AddRepoDialog.tsxnew modal
  • packages/app/src/pages/collab/session.tsx — render the dialog as an overlay; hide the iframe while open; drop the inline picker

Verification (post-deploy)

As a Driver on a running multi-repo session, click + Add → a centered popup lists the org repos (already-linked ones excluded), the iframe stays put behind the dim overlay (no loading-screen flicker), ticking + Add clones the repo onto the collab branch and closes; collision case shows an amber warning and stays open.

🤖 Generated with Claude Code

… flicker)

The "+ Add" control rendered the repo picker inline in the side panel and
fetched /collab/repos via createResource — which suspends the page-level
<Suspense> boundary, so the whole session (iframe included) dropped to the app
loading screen while the list loaded, then snapped back with the picker tucked
into the panel where it was easy to miss. Users reported "the iframe disappears,
loading screen, then returns — no dialog to pick repos."

Replace it with AddRepoDialog: a centered modal overlay (mirrors InviteDialog —
fixed inset-0, z-index above the iframe, click-outside to close) that fetches
the repo list in onMount with a plain signal (NOT createResource), so it can
never suspend the page. The iframe is hidden via visibility:hidden while the
dialog is open (iframes ignore z-index and bleed through), the same trick the
invite dialog already uses.

The dialog lists every org repo with checkboxes, excludes ones already linked,
and on "Add" calls collab.addRepos — surfacing any branch-collision warnings
inline and closing on a clean add. EmptyReposPanel's inline RepoPicker (the
0-repo recovery flow, which replaces the iframe anyway) is unchanged.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@hblanken hblanken merged commit 05b4bb6 into collab Jun 17, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant