Skip to content

fix(ui): keep ConfigureSSO wizard mounted while security page data refetches#8999

Merged
iagodahlem merged 2 commits into
mainfrom
iago/sso-wizard-loading-unmount
Jun 25, 2026
Merged

fix(ui): keep ConfigureSSO wizard mounted while security page data refetches#8999
iagodahlem merged 2 commits into
mainfrom
iago/sso-wizard-loading-unmount

Conversation

@iagodahlem

@iagodahlem iagodahlem commented Jun 25, 2026

Copy link
Copy Markdown
Member

What

Fixes the self-serve SSO configuration wizard jumping back to an earlier step after you submit a step's configuration.

On <OrganizationProfile /> → Security, OrganizationSecurityPage returns a page-level loading overview whenever isLoading is true, and that early-return sits above the overview-vs-wizard branch. So a background refetch that flips isLoading true while the wizard is open unmounts the open <ConfigureSSO /> wizard and re-mounts it at its seed step (the first step, or the furthest-reachable step) — losing the user's place.

isLoading includes (hadInitialConnection && isLoadingTestRuns). Submitting a configure step (e.g. saving an identity provider's metadata) marks the connection configured, which activates the test-runs query; the first time it cold-loads, isLoading flips and the open wizard is torn down. Reported during GA testing on Google Workspace and Okta — intermittent, because a second attempt finds the test-runs already cached.

Fix

Scope the page-level loading overview to the overview view only (isLoading && view === 'overview'), so a background refetch can no longer unmount an open wizard. The wizard is only ever opened from the overview after the initial load has settled, the connection data stays warm via keepPreviousData, and each wizard step owns its own loading UI — so the page-level skeleton is unnecessary once the wizard is open.

Test

Adds a regression test that drives the wizard to a non-initial step, toggles isLoading true → false, and asserts the wizard stays on its current step. It fails on the previous behavior (the wizard reseats to the first step) and passes with this change.

Follow-up (separate)

The test-runs query should be made strictly table-level so it never feeds the page-level isLoading after the initial page load (also flagged in the wizard-refactor review for the pagination path). Out of scope here to keep this fix minimal for GA.

ORGS-1694

Summary by CodeRabbit

  • Bug Fixes
    • Fixed the self-serve SSO configuration wizard to stay on the current step during background loading, instead of resetting to an earlier step.
    • Prevented the security page overview loading UI from interrupting an in-progress configuration flow.
  • Tests
    • Added a regression test to verify the wizard remains mounted and stable when loading status changes mid-process.

@changeset-bot

changeset-bot Bot commented Jun 25, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 062fab0

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 3 packages
Name Type
@clerk/ui Patch
@clerk/chrome-extension Patch
@clerk/swingset Patch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@vercel

vercel Bot commented Jun 25, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
clerk-js-sandbox Ready Ready Preview, Comment Jun 25, 2026 5:58pm
swingset Ready Ready Preview, Comment Jun 25, 2026 5:58pm

Request Review

@coderabbitai

coderabbitai Bot commented Jun 25, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Repository YAML (base), Repository UI (inherited)

Review profile: CHILL

Plan: Pro Plus

Run ID: 3bd0717f-b4b0-43fe-bb3c-d01d70cce37a

📥 Commits

Reviewing files that changed from the base of the PR and between 67ba152 and 062fab0.

📒 Files selected for processing (3)
  • .changeset/old-dancers-judge.md
  • packages/ui/src/components/OrganizationProfile/OrganizationSecurityPage.tsx
  • packages/ui/src/components/OrganizationProfile/__tests__/OrganizationSecurityPageWizardLoading.test.tsx
✅ Files skipped from review due to trivial changes (1)
  • .changeset/old-dancers-judge.md
🚧 Files skipped from review as they are similar to previous changes (2)
  • packages/ui/src/components/OrganizationProfile/OrganizationSecurityPage.tsx
  • packages/ui/src/components/OrganizationProfile/tests/OrganizationSecurityPageWizardLoading.test.tsx

📝 Walkthrough

Walkthrough

Updates OrganizationSecurityPage so the loading overview only renders from the overview view, preventing the wizard from being replaced during mid-flow refetches. Adds a patch changeset note and a regression test that flips loading state while the wizard stays on the Activate step.

Changes

Organization security wizard loading

Layer / File(s) Summary
Loading gate and release note
packages/ui/src/components/OrganizationProfile/OrganizationSecurityPage.tsx, .changeset/old-dancers-judge.md
OrganizationSecurityPageContent now shows the loading overview only when isLoading is true on the overview view, and the changeset records the patch release note for the wizard step-retention fix.
Wizard loading regression test
packages/ui/src/components/OrganizationProfile/__tests__/OrganizationSecurityPageWizardLoading.test.tsx
Adds a controlled loading-store mock, enterprise SSO fixtures, and a regression test that opens the wizard, moves to Activate, toggles loading, and verifies the wizard stays on that step.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~10 minutes

Possibly related PRs

  • clerk/javascript#8799 — Adjusts the same OrganizationSecurityPage wizard/loading gating path that this PR further narrows when loading changes after the wizard opens.
  • clerk/javascript#8813 — Also changes overview-to-wizard rendering in packages/ui/src/components/OrganizationProfile/OrganizationSecurityPage.tsx, including related loading-state behavior.

Suggested reviewers

  • LauraBeatris

Poem

🐰 The wizard kept its step today,
While loading hopped the other way.
No reset glitch, no start-again sigh,
The Activate path stayed nearby.
A soft little thump for SSO cheer,
And bunny ears say: “All is clear!”

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly describes the main fix: keeping the ConfigureSSO wizard mounted during security page refetches.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch

Comment @coderabbitai help to get the list of available commands.

@pkg-pr-new

pkg-pr-new Bot commented Jun 25, 2026

Copy link
Copy Markdown

Open in StackBlitz

@clerk/astro

npm i https://pkg.pr.new/@clerk/astro@8999

@clerk/backend

npm i https://pkg.pr.new/@clerk/backend@8999

@clerk/chrome-extension

npm i https://pkg.pr.new/@clerk/chrome-extension@8999

@clerk/clerk-js

npm i https://pkg.pr.new/@clerk/clerk-js@8999

@clerk/electron

npm i https://pkg.pr.new/@clerk/electron@8999

@clerk/electron-passkeys

npm i https://pkg.pr.new/@clerk/electron-passkeys@8999

@clerk/eslint-plugin

npm i https://pkg.pr.new/@clerk/eslint-plugin@8999

@clerk/expo

npm i https://pkg.pr.new/@clerk/expo@8999

@clerk/expo-passkeys

npm i https://pkg.pr.new/@clerk/expo-passkeys@8999

@clerk/express

npm i https://pkg.pr.new/@clerk/express@8999

@clerk/fastify

npm i https://pkg.pr.new/@clerk/fastify@8999

@clerk/hono

npm i https://pkg.pr.new/@clerk/hono@8999

@clerk/localizations

npm i https://pkg.pr.new/@clerk/localizations@8999

@clerk/nextjs

npm i https://pkg.pr.new/@clerk/nextjs@8999

@clerk/nuxt

npm i https://pkg.pr.new/@clerk/nuxt@8999

@clerk/react

npm i https://pkg.pr.new/@clerk/react@8999

@clerk/react-router

npm i https://pkg.pr.new/@clerk/react-router@8999

@clerk/shared

npm i https://pkg.pr.new/@clerk/shared@8999

@clerk/tanstack-react-start

npm i https://pkg.pr.new/@clerk/tanstack-react-start@8999

@clerk/testing

npm i https://pkg.pr.new/@clerk/testing@8999

@clerk/ui

npm i https://pkg.pr.new/@clerk/ui@8999

@clerk/upgrade

npm i https://pkg.pr.new/@clerk/upgrade@8999

@clerk/vue

npm i https://pkg.pr.new/@clerk/vue@8999

commit: 062fab0

@github-actions

github-actions Bot commented Jun 25, 2026

Copy link
Copy Markdown
Contributor

API Changes Report

Generated by Break Check on 2026-06-25T18:01:06.298Z

Summary

Metric Count
Packages analyzed 19
Packages with changes 0
🔴 Breaking changes 0
🟡 Non-breaking changes 0
🟢 Additions 0

No API Changes Detected

All packages have stable APIs with no detected changes.


Report generated by Break Check

Last ran on 062fab0.

…fetches

The organization Security page short-circuited to a page-level loading
overview whenever its enterprise-connection data was loading, regardless of
whether the SSO configuration wizard was open. When a background refetch
flipped the loading flag mid-configuration (for example the test-runs query
cold-loading right after the connection is configured), the open wizard
unmounted and, on remount, reseated to its initial step — dropping the user
back to the Domains or Test step and losing their place.

Scope the loading overview to the overview view only. Once the wizard is open
the connection data is already present and stays warm, and each wizard step
renders its own loading state, so a transient refetch no longer tears the
wizard down. Adds a regression test that drives the wizard to a later step and
asserts it stays put across a loading toggle.
@iagodahlem iagodahlem force-pushed the iago/sso-wizard-loading-unmount branch from 67ba152 to 062fab0 Compare June 25, 2026 17:54
@iagodahlem iagodahlem merged commit afe9a90 into main Jun 25, 2026
50 checks passed
@iagodahlem iagodahlem deleted the iago/sso-wizard-loading-unmount branch June 25, 2026 18:03
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants