Skip to content

feat(dashboard): add verified org domains UI#707

Merged
lakhansamani merged 2 commits into
mainfrom
feat/dashboard-verified-domains-ui
Jul 22, 2026
Merged

feat(dashboard): add verified org domains UI#707
lakhansamani merged 2 commits into
mainfrom
feat/dashboard-verified-domains-ui

Conversation

@lakhansamani

Copy link
Copy Markdown
Contributor

Why

The backend fully implements per-org verified email domains for home-realm
discovery (DNS TXT challenge/verify, super-admin trusted-assert, list,
delete) but had zero dashboard UI — the only piece of the Enterprise SSO
story an admin couldn't configure without calling the GraphQL API directly.

What

New OrgDomains card (structural clone of SAMLServiceProviders.tsx),
mounted on the organization detail page:

  • Lists verified domains with verified-date badge and delete
  • "Add Domain" → DNS challenge flow: request → shows the TXT record name/value
    with copy-to-clipboard → Verify. A DNS-not-propagated-yet response keeps the
    dialog and record on screen with a retry hint instead of discarding the flow
  • Secondary "Add without DNS verification (super-admin)" trusted-assert path —
    no client-side role gating invented (none exists elsewhere in this
    dashboard); a non-super-admin caller gets the backend's real permission
    error via the existing toast path

Test plan

  • New vitest suite (4 tests): list render, full challenge→verify happy
    path, retryable DNS-failure keeps dialog+record, delete-with-confirm
  • Full dashboard suite: 8 files / 41 tests passed, no regressions
  • tsc --noEmit clean, prettier clean

Only missing piece of the Enterprise SSO story — backend for per-org
verified email domains (home-realm discovery) had zero dashboard UI.

- OrgDomains component: list, DNS-TXT challenge flow, super-admin
  trusted-assert quick add, delete-with-confirm
- retryable "not verified yet" path keeps the challenge dialog and
  TXT record on screen for DNS-propagation retries
- mount on org detail page beside the other SSO cards
…rgDomains

Found in a critical re-review: the domain-input label had no htmlFor/id
(same WCAG 3.3.2 gap fixed elsewhere this session), the initial fetch had
no loading state (flashed "No verified domains yet." before real data
arrived), and the list query didn't pass a pagination limit so more than
the backend's default of 10 domains would be silently truncated with no
indication.
@lakhansamani
lakhansamani merged commit c540e6a into main Jul 22, 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