Skip to content

feat(ui): list every enterprise connection and scope the SSO wizard to one - #9729

Draft
NicolasLopes7 wants to merge 3 commits into
mainfrom
nicolas/configure-sso-multiple-connections
Draft

feat(ui): list every enterprise connection and scope the SSO wizard to one#9729
NicolasLopes7 wants to merge 3 commits into
mainfrom
nicolas/configure-sso-multiple-connections

Conversation

@NicolasLopes7

Copy link
Copy Markdown
Contributor

Description

Frontend half of allowing more than one enterprise connection per organization. Today <ConfigureSSO> and the organization Security page read enterpriseConnections[0], and FAPI returns that list unordered. With two connections the wizard edits an arbitrary one, and "Change provider" deletes an arbitrary one together with its SCIM directory.

What changes for someone using the components:

  • The Security page SSO section lists one row per enterprise connection. Each row carries the provider icon and label, the connection name, its domains, its own status badge, and a menu with Edit, Continue configuration (in-progress rows), Activate or Deactivate, and Remove. An Add connection button sits under the list. With zero connections the section looks as it does today.
  • The wizard is scoped to one connection. The scope is { kind: 'new' } | { kind: 'existing', id }, owned by useOrganizationEnterpriseConnection, and set by the Security page before it opens the wizard. Creating a connection moves the scope to the created one, and removing the scoped connection pins the scope to new so the wizard never silently reseats onto a connection the user did not pick.
  • When the organization has more than one connection, a banner under the wizard header names the connection being edited, or states that a new one is being added.
  • changeProvider(id, provider) takes the id of the connection it replaces. The change-provider, reset, and remove dialogs name the connection they act on.
  • Every reader sorts connections by createdAt then id, so the standalone <ConfigureSSO> mount and the Directory Sync section, which still use the first connection, agree on which one that is.

Out of scope, left for follow-ups:

  • Directory Sync is still attached to the first connection in sorted order. Per-connection Directory Sync needs its own row model.
  • Add connection is not gated on an environment flag. On instances where FAPI still rejects a second connection, the create fails inside the wizard and surfaces as a form error. Gating needs a signal from the environment payload once the backend exposes one.

New localization keys live under configureSSO.connectionScopeBanner and organizationProfile.securityPage.ssoSection in en-US only. domainLabel and the organizationProfileSecuritySsoDetailRowLabel descriptor are no longer rendered but stay in place since they are public appearance API.

Checklist

  • pnpm test runs as expected.
  • pnpm build runs as expected.
  • (If applicable) JSDoc comments have been added or updated for any package exports
  • (If applicable) Documentation has been updated

Type of change

  • 🐛 Bug fix
  • 🌟 New feature
  • 🔨 Breaking change
  • 📖 Refactoring / dependency upgrade / documentation
  • other:

FAPI returns the organization's enterprise connections unordered. Every
reader now sorts by createdAt, then id, so "the first connection" means
the same connection on every render and in every host.
The Security page renders one row per enterprise connection with its own
status badge, domains, and actions, plus an Add connection button. The
wizard edits an explicit connection scope (new or an existing id) instead
of the first item in the list, shows a banner naming that connection when
the organization has more than one, and changeProvider takes the id of
the connection it replaces. Reset, remove, and change-provider dialogs
name the connection they act on.
@vercel

vercel Bot commented Sep 11, 2026

Copy link
Copy Markdown

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

Project Deployment Actions Updated
clerk-js-sandbox Ready Ready Preview Sep 11, 2026 4:40pm UTC
swingset Ready Ready Preview Sep 11, 2026 4:40pm UTC

Request Review

@changeset-bot

changeset-bot Bot commented Sep 11, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 9b6d138

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

This PR includes changesets to release 23 packages
Name Type
@clerk/localizations Patch
@clerk/shared Patch
@clerk/ui Patch
@clerk/react Patch
@clerk/astro Patch
@clerk/backend Patch
@clerk/chrome-extension Patch
@clerk/clerk-js Patch
@clerk/electron Patch
@clerk/expo-passkeys Patch
@clerk/expo Patch
@clerk/express Patch
@clerk/fastify Patch
@clerk/headless Patch
@clerk/hono Patch
@clerk/msw Patch
@clerk/nextjs Patch
@clerk/nuxt Patch
@clerk/react-router Patch
@clerk/tanstack-react-start Patch
@clerk/testing Patch
@clerk/vue 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

@coderabbitai

coderabbitai Bot commented Sep 11, 2026

Copy link
Copy Markdown
Contributor

Important

Draft PR not reviewed

Draft PRs are not automatically reviewed by default.

  • Trigger a manual review

To automatically review draft PRs, update your CodeRabbit configuration:

reviews:
  auto_review:
    drafts: true

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

@pkg-pr-new

pkg-pr-new Bot commented Sep 11, 2026

Copy link
Copy Markdown

Open in StackBlitz

@clerk/astro

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

@clerk/backend

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

@clerk/chrome-extension

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

@clerk/clerk-js

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

@clerk/electron

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

@clerk/electron-passkeys

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

@clerk/eslint-plugin

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

@clerk/expo

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

@clerk/expo-google-signin

npm i https://pkg.pr.new/@clerk/expo-google-signin@9729

@clerk/expo-passkeys

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

@clerk/express

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

@clerk/fastify

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

@clerk/hono

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

@clerk/localizations

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

@clerk/nextjs

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

@clerk/nuxt

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

@clerk/react

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

@clerk/react-router

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

@clerk/shared

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

@clerk/tanstack-react-start

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

@clerk/testing

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

@clerk/ui

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

@clerk/upgrade

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

@clerk/vue

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

commit: 9b6d138

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.

1 participant