From 24cf84ba690b222682fbe81c47aea5cc442a2ed5 Mon Sep 17 00:00:00 2001 From: Nicolas Lopes Date: Mon, 20 Jul 2026 18:22:34 -0300 Subject: [PATCH 1/2] feat(ui): show deprovisioned organization members --- .changeset/wise-dolphins-explain.md | 8 ++++ .../core/resources/OrganizationMembership.ts | 3 ++ .../__tests__/OrganizationMembership.test.ts | 2 + packages/localizations/src/ar-SA.ts | 1 + packages/localizations/src/be-BY.ts | 1 + packages/localizations/src/bg-BG.ts | 1 + packages/localizations/src/bn-IN.ts | 1 + packages/localizations/src/ca-ES.ts | 1 + packages/localizations/src/cs-CZ.ts | 1 + packages/localizations/src/da-DK.ts | 1 + packages/localizations/src/de-DE.ts | 1 + packages/localizations/src/el-GR.ts | 1 + packages/localizations/src/en-GB.ts | 1 + packages/localizations/src/en-US.ts | 1 + packages/localizations/src/es-CR.ts | 1 + packages/localizations/src/es-ES.ts | 1 + packages/localizations/src/es-MX.ts | 1 + packages/localizations/src/es-UY.ts | 1 + packages/localizations/src/fa-IR.ts | 1 + packages/localizations/src/fi-FI.ts | 1 + packages/localizations/src/fr-FR.ts | 1 + packages/localizations/src/he-IL.ts | 1 + packages/localizations/src/hi-IN.ts | 1 + packages/localizations/src/hr-HR.ts | 1 + packages/localizations/src/hu-HU.ts | 1 + packages/localizations/src/id-ID.ts | 1 + packages/localizations/src/is-IS.ts | 1 + packages/localizations/src/it-IT.ts | 1 + packages/localizations/src/ja-JP.ts | 1 + packages/localizations/src/kk-KZ.ts | 1 + packages/localizations/src/ko-KR.ts | 1 + packages/localizations/src/mn-MN.ts | 1 + packages/localizations/src/ms-MY.ts | 1 + packages/localizations/src/nb-NO.ts | 1 + packages/localizations/src/nl-BE.ts | 1 + packages/localizations/src/nl-NL.ts | 1 + packages/localizations/src/pl-PL.ts | 1 + packages/localizations/src/pt-BR.ts | 1 + packages/localizations/src/pt-PT.ts | 1 + packages/localizations/src/ro-RO.ts | 1 + packages/localizations/src/ru-RU.ts | 1 + packages/localizations/src/sk-SK.ts | 1 + packages/localizations/src/sr-RS.ts | 1 + packages/localizations/src/sv-SE.ts | 1 + packages/localizations/src/ta-IN.ts | 1 + packages/localizations/src/te-IN.ts | 1 + packages/localizations/src/th-TH.ts | 1 + packages/localizations/src/tr-TR.ts | 1 + packages/localizations/src/uk-UA.ts | 1 + packages/localizations/src/vi-VN.ts | 1 + packages/localizations/src/zh-CN.ts | 1 + packages/localizations/src/zh-TW.ts | 1 + packages/shared/src/types/json.ts | 1 + packages/shared/src/types/localization.ts | 1 + .../src/types/organizationMembership.ts | 4 ++ .../OrganizationProfile/ActiveMembersList.tsx | 25 +++++++--- .../__tests__/OrganizationMembers.test.tsx | 46 +++++++++++++++++++ .../OrganizationProfile/__tests__/utils.ts | 2 + 58 files changed, 135 insertions(+), 6 deletions(-) create mode 100644 .changeset/wise-dolphins-explain.md diff --git a/.changeset/wise-dolphins-explain.md b/.changeset/wise-dolphins-explain.md new file mode 100644 index 00000000000..8ea19f49b43 --- /dev/null +++ b/.changeset/wise-dolphins-explain.md @@ -0,0 +1,8 @@ +--- +"@clerk/clerk-js": patch +"@clerk/localizations": patch +"@clerk/shared": patch +"@clerk/ui": patch +--- + +Expose whether an organization member has been deprovisioned, and mark deprovisioned members as inactive in the Organization Profile. diff --git a/packages/clerk-js/src/core/resources/OrganizationMembership.ts b/packages/clerk-js/src/core/resources/OrganizationMembership.ts index a4ec4299114..8d56a2aecae 100644 --- a/packages/clerk-js/src/core/resources/OrganizationMembership.ts +++ b/packages/clerk-js/src/core/resources/OrganizationMembership.ts @@ -16,6 +16,7 @@ import { BaseResource, Organization, PublicUserData } from './internal'; export class OrganizationMembership extends BaseResource implements OrganizationMembershipResource { id!: string; + deprovisioned?: boolean; publicMetadata: OrganizationMembershipPublicMetadata = {}; publicUserData?: PublicUserData; organization!: Organization; @@ -71,6 +72,7 @@ export class OrganizationMembership extends BaseResource implements Organization } this.id = data.id; + this.deprovisioned = data.deprovisioned ?? undefined; this.organization = new Organization(data.organization); this.publicMetadata = data.public_metadata || {}; if (data.public_user_data) { @@ -88,6 +90,7 @@ export class OrganizationMembership extends BaseResource implements Organization return { object: 'organization_membership', id: this.id, + deprovisioned: this.deprovisioned, organization: this.organization.__internal_toSnapshot(), public_metadata: this.publicMetadata, public_user_data: this.publicUserData?.__internal_toSnapshot(), diff --git a/packages/clerk-js/src/core/resources/__tests__/OrganizationMembership.test.ts b/packages/clerk-js/src/core/resources/__tests__/OrganizationMembership.test.ts index 6ab590ab810..e88fc151200 100644 --- a/packages/clerk-js/src/core/resources/__tests__/OrganizationMembership.test.ts +++ b/packages/clerk-js/src/core/resources/__tests__/OrganizationMembership.test.ts @@ -7,6 +7,7 @@ describe('OrganizationMembership', () => { const organizationMembership = new OrganizationMembership({ object: 'organization_membership', id: 'test_id', + deprovisioned: true, created_at: 12345, updated_at: 5678, role: 'admin', @@ -44,6 +45,7 @@ describe('OrganizationMembership', () => { expect(organizationMembership).toMatchObject({ id: 'test_id', + deprovisioned: true, role: 'admin', roleName: undefined, createdAt: expect.any(Date), diff --git a/packages/localizations/src/ar-SA.ts b/packages/localizations/src/ar-SA.ts index 9b70f8d0a2d..1ba1b904de0 100644 --- a/packages/localizations/src/ar-SA.ts +++ b/packages/localizations/src/ar-SA.ts @@ -62,6 +62,7 @@ export const arSA: LocalizationResource = { badge__canceledEndsAt: undefined, badge__currentPlan: undefined, badge__default: 'الأفتراضي', + badge__deprovisioned: undefined, badge__endsAt: undefined, badge__expired: undefined, badge__freeTrial: undefined, diff --git a/packages/localizations/src/be-BY.ts b/packages/localizations/src/be-BY.ts index 3fb72ae5d54..507be784eb5 100644 --- a/packages/localizations/src/be-BY.ts +++ b/packages/localizations/src/be-BY.ts @@ -62,6 +62,7 @@ export const beBY: LocalizationResource = { badge__canceledEndsAt: undefined, badge__currentPlan: undefined, badge__default: 'Па-змаўчанні', + badge__deprovisioned: undefined, badge__endsAt: undefined, badge__expired: undefined, badge__freeTrial: undefined, diff --git a/packages/localizations/src/bg-BG.ts b/packages/localizations/src/bg-BG.ts index 4e14def42ab..72af2e579f8 100644 --- a/packages/localizations/src/bg-BG.ts +++ b/packages/localizations/src/bg-BG.ts @@ -62,6 +62,7 @@ export const bgBG: LocalizationResource = { badge__canceledEndsAt: undefined, badge__currentPlan: undefined, badge__default: 'По подразбиране', + badge__deprovisioned: undefined, badge__endsAt: undefined, badge__expired: undefined, badge__freeTrial: undefined, diff --git a/packages/localizations/src/bn-IN.ts b/packages/localizations/src/bn-IN.ts index d8a33bdfa92..50d7f11f77c 100644 --- a/packages/localizations/src/bn-IN.ts +++ b/packages/localizations/src/bn-IN.ts @@ -63,6 +63,7 @@ export const bnIN: LocalizationResource = { badge__canceledEndsAt: "বাতিল • শেষ {{ date | shortDate('bn-IN') }}", badge__currentPlan: 'বর্তমান প্ল্যান', badge__default: 'ডিফল্ট', + badge__deprovisioned: undefined, badge__endsAt: "শেষ {{ date | shortDate('bn-IN') }}", badge__expired: 'মেয়াদ শেষ', badge__freeTrial: 'বিনামূল্যের ট্রায়াল', diff --git a/packages/localizations/src/ca-ES.ts b/packages/localizations/src/ca-ES.ts index fe24667d6a5..74fe181dda4 100644 --- a/packages/localizations/src/ca-ES.ts +++ b/packages/localizations/src/ca-ES.ts @@ -62,6 +62,7 @@ export const caES: LocalizationResource = { badge__canceledEndsAt: undefined, badge__currentPlan: undefined, badge__default: 'Per defecte', + badge__deprovisioned: undefined, badge__endsAt: undefined, badge__expired: undefined, badge__freeTrial: undefined, diff --git a/packages/localizations/src/cs-CZ.ts b/packages/localizations/src/cs-CZ.ts index 40ca97e4f47..2b0ada91bd6 100644 --- a/packages/localizations/src/cs-CZ.ts +++ b/packages/localizations/src/cs-CZ.ts @@ -63,6 +63,7 @@ export const csCZ: LocalizationResource = { badge__canceledEndsAt: "Zrušeno • Končí {{ date | shortDate('cs-CZ') }}", badge__currentPlan: 'Aktuální plán', badge__default: 'Výchozí', + badge__deprovisioned: undefined, badge__endsAt: "Končí {{ date | shortDate('cs-CZ') }}", badge__expired: 'Vypršelo', badge__freeTrial: undefined, diff --git a/packages/localizations/src/da-DK.ts b/packages/localizations/src/da-DK.ts index 8f6cd90e1ce..cd1c1d6056b 100644 --- a/packages/localizations/src/da-DK.ts +++ b/packages/localizations/src/da-DK.ts @@ -62,6 +62,7 @@ export const daDK: LocalizationResource = { badge__canceledEndsAt: undefined, badge__currentPlan: undefined, badge__default: 'Standard', + badge__deprovisioned: undefined, badge__endsAt: undefined, badge__expired: undefined, badge__freeTrial: undefined, diff --git a/packages/localizations/src/de-DE.ts b/packages/localizations/src/de-DE.ts index f7c181cf898..f0c1b41dd1c 100644 --- a/packages/localizations/src/de-DE.ts +++ b/packages/localizations/src/de-DE.ts @@ -63,6 +63,7 @@ export const deDE: LocalizationResource = { badge__canceledEndsAt: "Storniert • Endet am {{ date | shortDate('de-DE') }}", badge__currentPlan: 'Aktueller Plan', badge__default: 'Standard', + badge__deprovisioned: undefined, badge__endsAt: "Endet am {{ date | shortDate('de-DE') }}", badge__expired: 'Abgelaufen', badge__freeTrial: 'Kostenlose Testversion', diff --git a/packages/localizations/src/el-GR.ts b/packages/localizations/src/el-GR.ts index fbc71c2473a..f97b52aae28 100644 --- a/packages/localizations/src/el-GR.ts +++ b/packages/localizations/src/el-GR.ts @@ -62,6 +62,7 @@ export const elGR: LocalizationResource = { badge__canceledEndsAt: 'Ακυρώθηκε, λήγει {{date | timeString("el-GR")}}', badge__currentPlan: 'Τρέχον πλάνο', badge__default: 'Προεπιλογή', + badge__deprovisioned: undefined, badge__endsAt: 'Λήγει {{date | timeString("el-GR")}}', badge__expired: 'Έληξε', badge__freeTrial: 'Δωρεάν δοκιμή', diff --git a/packages/localizations/src/en-GB.ts b/packages/localizations/src/en-GB.ts index 74fa7ea9e73..c6c0a1c6818 100644 --- a/packages/localizations/src/en-GB.ts +++ b/packages/localizations/src/en-GB.ts @@ -62,6 +62,7 @@ export const enGB: LocalizationResource = { badge__canceledEndsAt: undefined, badge__currentPlan: undefined, badge__default: 'Default', + badge__deprovisioned: undefined, badge__endsAt: undefined, badge__expired: undefined, badge__freeTrial: undefined, diff --git a/packages/localizations/src/en-US.ts b/packages/localizations/src/en-US.ts index d766d4ce383..9f5c9abcc5f 100644 --- a/packages/localizations/src/en-US.ts +++ b/packages/localizations/src/en-US.ts @@ -51,6 +51,7 @@ export const enUS: LocalizationResource = { badge__canceledEndsAt: "Canceled • Ends {{ date | shortDate('en-US') }}", badge__currentPlan: 'Current plan', badge__default: 'Default', + badge__deprovisioned: 'Deprovisioned', badge__endsAt: "Ends {{ date | shortDate('en-US') }}", badge__expired: 'Expired', badge__freeTrial: 'Free trial', diff --git a/packages/localizations/src/es-CR.ts b/packages/localizations/src/es-CR.ts index 6c465f680a0..e91b5452bbf 100644 --- a/packages/localizations/src/es-CR.ts +++ b/packages/localizations/src/es-CR.ts @@ -62,6 +62,7 @@ export const esCR: LocalizationResource = { badge__canceledEndsAt: undefined, badge__currentPlan: 'Plan actual', badge__default: 'Por defecto', + badge__deprovisioned: undefined, badge__endsAt: "Termina {{ date | shortDate('en-ES') }}", badge__expired: 'Caducado', badge__freeTrial: undefined, diff --git a/packages/localizations/src/es-ES.ts b/packages/localizations/src/es-ES.ts index 2d6895e5822..5a7885986b1 100644 --- a/packages/localizations/src/es-ES.ts +++ b/packages/localizations/src/es-ES.ts @@ -62,6 +62,7 @@ export const esES: LocalizationResource = { badge__canceledEndsAt: undefined, badge__currentPlan: undefined, badge__default: 'Por defecto', + badge__deprovisioned: undefined, badge__endsAt: undefined, badge__expired: undefined, badge__freeTrial: undefined, diff --git a/packages/localizations/src/es-MX.ts b/packages/localizations/src/es-MX.ts index 64b90aa3da2..9607e87a56a 100644 --- a/packages/localizations/src/es-MX.ts +++ b/packages/localizations/src/es-MX.ts @@ -62,6 +62,7 @@ export const esMX: LocalizationResource = { badge__canceledEndsAt: undefined, badge__currentPlan: 'Plan actual', badge__default: 'Por defecto', + badge__deprovisioned: undefined, badge__endsAt: "Termina {{ date | shortDate('en-US') }}", badge__expired: 'Caducado', badge__freeTrial: undefined, diff --git a/packages/localizations/src/es-UY.ts b/packages/localizations/src/es-UY.ts index b027e07069f..51084f69606 100644 --- a/packages/localizations/src/es-UY.ts +++ b/packages/localizations/src/es-UY.ts @@ -62,6 +62,7 @@ export const esUY: LocalizationResource = { badge__canceledEndsAt: undefined, badge__currentPlan: undefined, badge__default: 'Predeterminado', + badge__deprovisioned: undefined, badge__endsAt: undefined, badge__expired: undefined, badge__freeTrial: undefined, diff --git a/packages/localizations/src/fa-IR.ts b/packages/localizations/src/fa-IR.ts index 1cf0c875abf..0e472f1745f 100644 --- a/packages/localizations/src/fa-IR.ts +++ b/packages/localizations/src/fa-IR.ts @@ -63,6 +63,7 @@ export const faIR: LocalizationResource = { badge__canceledEndsAt: "لغو شد • پایان می‌یابد {{ date | shortDate('en-US') }}", badge__currentPlan: 'طرح فعلی', badge__default: 'پیش فرض', + badge__deprovisioned: undefined, badge__endsAt: "به پایان می رسد {{ date | shortDate('en-US') }}", badge__expired: 'مننقضی شده', badge__freeTrial: undefined, diff --git a/packages/localizations/src/fi-FI.ts b/packages/localizations/src/fi-FI.ts index d02b810a53a..7d68f3789f3 100644 --- a/packages/localizations/src/fi-FI.ts +++ b/packages/localizations/src/fi-FI.ts @@ -63,6 +63,7 @@ export const fiFI: LocalizationResource = { badge__canceledEndsAt: "Peruutettu • Päättyy {{ date | shortDate('fi-FI') }}", badge__currentPlan: 'Nykyinen paketti', badge__default: 'Oletus', + badge__deprovisioned: undefined, badge__endsAt: "Päättyy {{ date | shortDate('fi-FI') }}", badge__expired: 'Vanhentunut', badge__freeTrial: 'Ilmainen kokeilu', diff --git a/packages/localizations/src/fr-FR.ts b/packages/localizations/src/fr-FR.ts index 3ef7465f900..d1aeb515082 100644 --- a/packages/localizations/src/fr-FR.ts +++ b/packages/localizations/src/fr-FR.ts @@ -63,6 +63,7 @@ export const frFR: LocalizationResource = { badge__canceledEndsAt: "Annulé • Termine le {{ date | shortDate('fr-FR') }}", badge__currentPlan: 'Plan actuel', badge__default: 'Défaut', + badge__deprovisioned: undefined, badge__endsAt: "Termine le {{ date | shortDate('fr-FR') }}", badge__expired: 'Expiré', badge__freeTrial: 'Essai gratuit', diff --git a/packages/localizations/src/he-IL.ts b/packages/localizations/src/he-IL.ts index b1763ec3337..030d4df1157 100644 --- a/packages/localizations/src/he-IL.ts +++ b/packages/localizations/src/he-IL.ts @@ -62,6 +62,7 @@ export const heIL: LocalizationResource = { badge__canceledEndsAt: undefined, badge__currentPlan: undefined, badge__default: 'ברירת מחדל', + badge__deprovisioned: undefined, badge__endsAt: undefined, badge__expired: undefined, badge__freeTrial: undefined, diff --git a/packages/localizations/src/hi-IN.ts b/packages/localizations/src/hi-IN.ts index 98812de0410..cb9ddad1db6 100644 --- a/packages/localizations/src/hi-IN.ts +++ b/packages/localizations/src/hi-IN.ts @@ -63,6 +63,7 @@ export const hiIN: LocalizationResource = { badge__canceledEndsAt: "रद्द • समाप्त {{ date | shortDate('hi-IN') }}", badge__currentPlan: 'वर्तमान योजना', badge__default: 'डिफ़ॉल्ट', + badge__deprovisioned: undefined, badge__endsAt: "समाप्त {{ date | shortDate('hi-IN') }}", badge__expired: 'समाप्त', badge__freeTrial: 'निःशुल्क परीक्षण', diff --git a/packages/localizations/src/hr-HR.ts b/packages/localizations/src/hr-HR.ts index db93f008960..46061f89292 100644 --- a/packages/localizations/src/hr-HR.ts +++ b/packages/localizations/src/hr-HR.ts @@ -63,6 +63,7 @@ export const hrHR: LocalizationResource = { badge__canceledEndsAt: "Otkazan • Završava {{ date | shortDate('hr-HR') }}", badge__currentPlan: 'Trenutni plan', badge__default: 'Zadano', + badge__deprovisioned: undefined, badge__endsAt: "Završava {{ date | shortDate('hr-HR') }}", badge__expired: 'Isteklo', badge__freeTrial: 'Besplatno probno razdoblje', diff --git a/packages/localizations/src/hu-HU.ts b/packages/localizations/src/hu-HU.ts index 3a3aff4cfe8..075c0cc71f9 100644 --- a/packages/localizations/src/hu-HU.ts +++ b/packages/localizations/src/hu-HU.ts @@ -63,6 +63,7 @@ export const huHU: LocalizationResource = { badge__canceledEndsAt: "Lemondva • Lejár: {{ date | shortDate('hu-HU') }}", badge__currentPlan: 'Jelenlegi csomag', badge__default: 'Alapértelmezett', + badge__deprovisioned: undefined, badge__endsAt: "Lejár: {{ date | shortDate('hu-HU') }}", badge__expired: 'Lejárt', badge__freeTrial: 'Ingyenes próbaverzió', diff --git a/packages/localizations/src/id-ID.ts b/packages/localizations/src/id-ID.ts index df03c826a49..740bdc0dbd1 100644 --- a/packages/localizations/src/id-ID.ts +++ b/packages/localizations/src/id-ID.ts @@ -62,6 +62,7 @@ export const idID: LocalizationResource = { badge__canceledEndsAt: undefined, badge__currentPlan: undefined, badge__default: 'Default', + badge__deprovisioned: undefined, badge__endsAt: undefined, badge__expired: undefined, badge__freeTrial: undefined, diff --git a/packages/localizations/src/is-IS.ts b/packages/localizations/src/is-IS.ts index a2f5087a28e..3f9fd7f8f20 100644 --- a/packages/localizations/src/is-IS.ts +++ b/packages/localizations/src/is-IS.ts @@ -63,6 +63,7 @@ export const isIS: LocalizationResource = { badge__canceledEndsAt: "Aflýst • Lýkur {{ date | shortDate('is-IS') }}", badge__currentPlan: 'Núverandi áskrift', badge__default: 'Sjálfgefið', + badge__deprovisioned: undefined, badge__endsAt: "Lýkur {{ date | shortDate('is-IS') }}", badge__expired: 'Útrunnið', badge__freeTrial: 'Ókeypis prufuáskrift', diff --git a/packages/localizations/src/it-IT.ts b/packages/localizations/src/it-IT.ts index 305b7cc39d0..725555948eb 100644 --- a/packages/localizations/src/it-IT.ts +++ b/packages/localizations/src/it-IT.ts @@ -63,6 +63,7 @@ export const itIT: LocalizationResource = { badge__canceledEndsAt: "Cancellato • Termina {{ date | shortDate('it-IT') }}", badge__currentPlan: 'Piano attuale', badge__default: 'Predefinito', + badge__deprovisioned: undefined, badge__endsAt: "Termina {{ date | shortDate('it-IT') }}", badge__expired: 'Scaduto', badge__freeTrial: undefined, diff --git a/packages/localizations/src/ja-JP.ts b/packages/localizations/src/ja-JP.ts index ad9f53c787f..7650af51fd1 100644 --- a/packages/localizations/src/ja-JP.ts +++ b/packages/localizations/src/ja-JP.ts @@ -63,6 +63,7 @@ export const jaJP: LocalizationResource = { badge__canceledEndsAt: "キャンセル済み • {{ date | shortDate('ja-JP') }}に終了", badge__currentPlan: '現在のプラン', badge__default: 'デフォルト', + badge__deprovisioned: undefined, badge__endsAt: "{{ date | shortDate('ja-JP') }}に終了", badge__expired: '期限切れ', badge__freeTrial: '無料トライアル', diff --git a/packages/localizations/src/kk-KZ.ts b/packages/localizations/src/kk-KZ.ts index f2ecf7e21fe..61c51ac5a68 100644 --- a/packages/localizations/src/kk-KZ.ts +++ b/packages/localizations/src/kk-KZ.ts @@ -62,6 +62,7 @@ export const kkKZ: LocalizationResource = { badge__canceledEndsAt: undefined, badge__currentPlan: 'Ағымдағы жоспар', badge__default: 'Әдепкі бойынша', + badge__deprovisioned: undefined, badge__endsAt: "{{ date | shortDate('kk-KZ') }} күні аяқталады", badge__expired: 'Мерзімі біткен', badge__freeTrial: undefined, diff --git a/packages/localizations/src/ko-KR.ts b/packages/localizations/src/ko-KR.ts index 0bb35f7cee4..e58be892784 100644 --- a/packages/localizations/src/ko-KR.ts +++ b/packages/localizations/src/ko-KR.ts @@ -63,6 +63,7 @@ export const koKR: LocalizationResource = { badge__canceledEndsAt: "취소됨 • {{ date | shortDate('ko-KR') }}에 종료", badge__currentPlan: '현재 플랜', badge__default: '기본값', + badge__deprovisioned: undefined, badge__endsAt: "{{ date | shortDate('ko-KR') }}에 종료", badge__expired: '만료됨', badge__freeTrial: '무료 체험', diff --git a/packages/localizations/src/mn-MN.ts b/packages/localizations/src/mn-MN.ts index 0d25f3cea12..f7cb628da22 100644 --- a/packages/localizations/src/mn-MN.ts +++ b/packages/localizations/src/mn-MN.ts @@ -62,6 +62,7 @@ export const mnMN: LocalizationResource = { badge__canceledEndsAt: undefined, badge__currentPlan: undefined, badge__default: 'Анхдагч', + badge__deprovisioned: undefined, badge__endsAt: undefined, badge__expired: undefined, badge__freeTrial: undefined, diff --git a/packages/localizations/src/ms-MY.ts b/packages/localizations/src/ms-MY.ts index 72e32d5764c..666b3e8ef9b 100644 --- a/packages/localizations/src/ms-MY.ts +++ b/packages/localizations/src/ms-MY.ts @@ -63,6 +63,7 @@ export const msMY: LocalizationResource = { badge__canceledEndsAt: "Dibatalkan • Tamat {{ date | shortDate('ms-MY') }}", badge__currentPlan: 'Pelan Semasa', badge__default: 'Lalai', + badge__deprovisioned: undefined, badge__endsAt: "Tamat {{ date | shortDate('ms-MY') }}", badge__expired: 'Tamat tempoh', badge__freeTrial: 'Percubaan percuma', diff --git a/packages/localizations/src/nb-NO.ts b/packages/localizations/src/nb-NO.ts index edd764c32d5..b8aa65cde7f 100644 --- a/packages/localizations/src/nb-NO.ts +++ b/packages/localizations/src/nb-NO.ts @@ -63,6 +63,7 @@ export const nbNO: LocalizationResource = { badge__canceledEndsAt: "Kansellert • Slutter {{ date | shortDate('nb-NO') }}", badge__currentPlan: 'Nåværende plan', badge__default: 'Standard', + badge__deprovisioned: undefined, badge__endsAt: "Slutter {{ date | shortDate('nb-NO') }}", badge__expired: 'Utløpt', badge__freeTrial: 'Gratis prøveperiode', diff --git a/packages/localizations/src/nl-BE.ts b/packages/localizations/src/nl-BE.ts index 4107509c7d1..b68a542214a 100644 --- a/packages/localizations/src/nl-BE.ts +++ b/packages/localizations/src/nl-BE.ts @@ -62,6 +62,7 @@ export const nlBE: LocalizationResource = { badge__canceledEndsAt: undefined, badge__currentPlan: undefined, badge__default: 'Standaard', + badge__deprovisioned: undefined, badge__endsAt: undefined, badge__expired: undefined, badge__freeTrial: undefined, diff --git a/packages/localizations/src/nl-NL.ts b/packages/localizations/src/nl-NL.ts index b54ddc59780..4d4ee65b96d 100644 --- a/packages/localizations/src/nl-NL.ts +++ b/packages/localizations/src/nl-NL.ts @@ -62,6 +62,7 @@ export const nlNL: LocalizationResource = { badge__canceledEndsAt: undefined, badge__currentPlan: undefined, badge__default: 'Standaard', + badge__deprovisioned: undefined, badge__endsAt: undefined, badge__expired: undefined, badge__freeTrial: undefined, diff --git a/packages/localizations/src/pl-PL.ts b/packages/localizations/src/pl-PL.ts index 92adfd113a1..882d79fb7bc 100644 --- a/packages/localizations/src/pl-PL.ts +++ b/packages/localizations/src/pl-PL.ts @@ -62,6 +62,7 @@ export const plPL: LocalizationResource = { badge__canceledEndsAt: undefined, badge__currentPlan: undefined, badge__default: 'Domyślny', + badge__deprovisioned: undefined, badge__endsAt: undefined, badge__expired: undefined, badge__freeTrial: undefined, diff --git a/packages/localizations/src/pt-BR.ts b/packages/localizations/src/pt-BR.ts index 0b9478c97dd..db52fe300a0 100644 --- a/packages/localizations/src/pt-BR.ts +++ b/packages/localizations/src/pt-BR.ts @@ -63,6 +63,7 @@ export const ptBR: LocalizationResource = { badge__canceledEndsAt: "Cancelado • Termina {{ date | shortDate('pt-BR') }}", badge__currentPlan: 'Plano atual', badge__default: 'Padrão', + badge__deprovisioned: undefined, badge__endsAt: "Termina {{ date | shortDate('pt-BR') }}", badge__expired: 'Expirado', badge__freeTrial: 'Teste gratuito', diff --git a/packages/localizations/src/pt-PT.ts b/packages/localizations/src/pt-PT.ts index f378392dcb4..cd17667f106 100644 --- a/packages/localizations/src/pt-PT.ts +++ b/packages/localizations/src/pt-PT.ts @@ -63,6 +63,7 @@ export const ptPT: LocalizationResource = { badge__canceledEndsAt: "Cancelado • Termina em {{ date | shortDate('pt-PT') }}", badge__currentPlan: 'Plano atual', badge__default: 'Padrão', + badge__deprovisioned: undefined, badge__endsAt: "Termina em {{ date | shortDate('pt-PT') }}", badge__expired: 'Expirado', badge__freeTrial: 'Período experimental', diff --git a/packages/localizations/src/ro-RO.ts b/packages/localizations/src/ro-RO.ts index 6a91ac6bbd0..770217ef56f 100644 --- a/packages/localizations/src/ro-RO.ts +++ b/packages/localizations/src/ro-RO.ts @@ -63,6 +63,7 @@ export const roRO: LocalizationResource = { badge__canceledEndsAt: "Anulat • Se încheie {{ date | shortDate('ro-RO') }}", badge__currentPlan: 'Plan curent', badge__default: 'Implicit', + badge__deprovisioned: undefined, badge__endsAt: "Se încheie {{ date | shortDate('ro-RO') }}", badge__expired: 'Expirat', badge__freeTrial: 'Probă gratuită', diff --git a/packages/localizations/src/ru-RU.ts b/packages/localizations/src/ru-RU.ts index 545061ad0e5..80a74813621 100644 --- a/packages/localizations/src/ru-RU.ts +++ b/packages/localizations/src/ru-RU.ts @@ -62,6 +62,7 @@ export const ruRU: LocalizationResource = { badge__canceledEndsAt: undefined, badge__currentPlan: undefined, badge__default: 'По-умолчанию', + badge__deprovisioned: undefined, badge__endsAt: undefined, badge__expired: undefined, badge__freeTrial: undefined, diff --git a/packages/localizations/src/sk-SK.ts b/packages/localizations/src/sk-SK.ts index 0c34697e47f..00d5dbb4db0 100644 --- a/packages/localizations/src/sk-SK.ts +++ b/packages/localizations/src/sk-SK.ts @@ -62,6 +62,7 @@ export const skSK: LocalizationResource = { badge__canceledEndsAt: undefined, badge__currentPlan: 'Aktuálny balík', badge__default: 'Predvolené', + badge__deprovisioned: undefined, badge__endsAt: undefined, badge__expired: undefined, badge__freeTrial: undefined, diff --git a/packages/localizations/src/sr-RS.ts b/packages/localizations/src/sr-RS.ts index 92aee810ba2..d3bde5446ab 100644 --- a/packages/localizations/src/sr-RS.ts +++ b/packages/localizations/src/sr-RS.ts @@ -62,6 +62,7 @@ export const srRS: LocalizationResource = { badge__canceledEndsAt: undefined, badge__currentPlan: undefined, badge__default: 'Podrazumevano', + badge__deprovisioned: undefined, badge__endsAt: undefined, badge__expired: undefined, badge__freeTrial: undefined, diff --git a/packages/localizations/src/sv-SE.ts b/packages/localizations/src/sv-SE.ts index 56d3da38257..9347df7a469 100644 --- a/packages/localizations/src/sv-SE.ts +++ b/packages/localizations/src/sv-SE.ts @@ -62,6 +62,7 @@ export const svSE: LocalizationResource = { badge__canceledEndsAt: undefined, badge__currentPlan: undefined, badge__default: 'Standard', + badge__deprovisioned: undefined, badge__endsAt: undefined, badge__expired: undefined, badge__freeTrial: undefined, diff --git a/packages/localizations/src/ta-IN.ts b/packages/localizations/src/ta-IN.ts index 587a71d59e5..deb81aea490 100644 --- a/packages/localizations/src/ta-IN.ts +++ b/packages/localizations/src/ta-IN.ts @@ -64,6 +64,7 @@ export const taIN: LocalizationResource = { badge__canceledEndsAt: "ரத்து செய்யப்பட்டது • முடிவடைகிறது {{ date | shortDate('ta-IN') }}", badge__currentPlan: 'தற்போதைய திட்டம்', badge__default: 'இயல்புநிலை', + badge__deprovisioned: undefined, badge__endsAt: "முடிவடைகிறது {{ date | shortDate('ta-IN') }}", badge__expired: 'காலாவதியானது', badge__freeTrial: 'இலவச சோதனை', diff --git a/packages/localizations/src/te-IN.ts b/packages/localizations/src/te-IN.ts index de16deaba50..3370d5b1d4c 100644 --- a/packages/localizations/src/te-IN.ts +++ b/packages/localizations/src/te-IN.ts @@ -63,6 +63,7 @@ export const teIN: LocalizationResource = { badge__canceledEndsAt: "రద్దు చేయబడింది • ముగుస్తుంది {{ date | shortDate('te-IN') }}", badge__currentPlan: 'ప్రస్తుత ప్లాన్', badge__default: 'డిఫాల్ట్', + badge__deprovisioned: undefined, badge__endsAt: "ముగుస్తుంది {{ date | shortDate('te-IN') }}", badge__expired: 'గడువు ముగిసింది', badge__freeTrial: 'ఉచిత ట్రయల్', diff --git a/packages/localizations/src/th-TH.ts b/packages/localizations/src/th-TH.ts index 8c8b34e16ba..f3604cbf52f 100644 --- a/packages/localizations/src/th-TH.ts +++ b/packages/localizations/src/th-TH.ts @@ -63,6 +63,7 @@ export const thTH: LocalizationResource = { badge__canceledEndsAt: "ถูกยกเลิก • สิ้นสุด {{ date | shortDate('th-TH') }}", badge__currentPlan: 'แผนปัจจุบัน', badge__default: 'ค่าเริ่มต้น', + badge__deprovisioned: undefined, badge__endsAt: "สิ้นสุด {{ date | shortDate('th-TH') }}", badge__expired: 'หมดอายุ', badge__freeTrial: 'ทดลองใช้ฟรี', diff --git a/packages/localizations/src/tr-TR.ts b/packages/localizations/src/tr-TR.ts index 98e08e93e4a..2e097ea1d5c 100644 --- a/packages/localizations/src/tr-TR.ts +++ b/packages/localizations/src/tr-TR.ts @@ -62,6 +62,7 @@ export const trTR: LocalizationResource = { badge__canceledEndsAt: undefined, badge__currentPlan: undefined, badge__default: 'Varsayılan', + badge__deprovisioned: undefined, badge__endsAt: undefined, badge__expired: undefined, badge__freeTrial: undefined, diff --git a/packages/localizations/src/uk-UA.ts b/packages/localizations/src/uk-UA.ts index dc6f645e1c5..9401aeaa48c 100644 --- a/packages/localizations/src/uk-UA.ts +++ b/packages/localizations/src/uk-UA.ts @@ -62,6 +62,7 @@ export const ukUA: LocalizationResource = { badge__canceledEndsAt: undefined, badge__currentPlan: undefined, badge__default: 'За замовчуванням', + badge__deprovisioned: undefined, badge__endsAt: undefined, badge__expired: undefined, badge__freeTrial: undefined, diff --git a/packages/localizations/src/vi-VN.ts b/packages/localizations/src/vi-VN.ts index 4d61f937845..7a1f375f3ad 100644 --- a/packages/localizations/src/vi-VN.ts +++ b/packages/localizations/src/vi-VN.ts @@ -63,6 +63,7 @@ export const viVN: LocalizationResource = { badge__canceledEndsAt: "Đã hủy • Kết thúc {{ date | shortDate('vi-VN') }}", badge__currentPlan: 'Gói hiện tại', badge__default: 'Mặc định', + badge__deprovisioned: undefined, badge__endsAt: "Kết thúc {{ date | shortDate('vi-VN') }}", badge__expired: 'Đã hết hạn', badge__freeTrial: 'Dùng thử miễn phí', diff --git a/packages/localizations/src/zh-CN.ts b/packages/localizations/src/zh-CN.ts index 50fd9254b16..f4d6a3bd447 100644 --- a/packages/localizations/src/zh-CN.ts +++ b/packages/localizations/src/zh-CN.ts @@ -62,6 +62,7 @@ export const zhCN: LocalizationResource = { badge__canceledEndsAt: undefined, badge__currentPlan: undefined, badge__default: '默认', + badge__deprovisioned: undefined, badge__endsAt: undefined, badge__expired: undefined, badge__freeTrial: undefined, diff --git a/packages/localizations/src/zh-TW.ts b/packages/localizations/src/zh-TW.ts index b79689fb355..2ca1facbad5 100644 --- a/packages/localizations/src/zh-TW.ts +++ b/packages/localizations/src/zh-TW.ts @@ -63,6 +63,7 @@ export const zhTW: LocalizationResource = { badge__canceledEndsAt: "已取消 • 將於 {{ date | shortDate('zh-TW') }} 到期", badge__currentPlan: '目前計劃', badge__default: '預設', + badge__deprovisioned: undefined, badge__endsAt: "將於 {{ date | shortDate('zh-TW') }} 到期", badge__expired: '已過期', badge__freeTrial: '免費試用', diff --git a/packages/shared/src/types/json.ts b/packages/shared/src/types/json.ts index ff99b123d39..9aeb0326b06 100644 --- a/packages/shared/src/types/json.ts +++ b/packages/shared/src/types/json.ts @@ -420,6 +420,7 @@ export interface OrganizationJSON extends ClerkResourceJSON { export interface OrganizationMembershipJSON extends ClerkResourceJSON { object: 'organization_membership'; id: string; + deprovisioned?: boolean; organization: OrganizationJSON; permissions: OrganizationPermissionKey[]; public_metadata: OrganizationMembershipPublicMetadata; diff --git a/packages/shared/src/types/localization.ts b/packages/shared/src/types/localization.ts index 9ca7ecee35e..76e5b3f1bef 100644 --- a/packages/shared/src/types/localization.ts +++ b/packages/shared/src/types/localization.ts @@ -158,6 +158,7 @@ export type __internal_LocalizationResource = { badge__requiresAction: LocalizationValue; badge__you: LocalizationValue; badge__banned: LocalizationValue; + badge__deprovisioned: LocalizationValue; badge__freeTrial: LocalizationValue; badge__currentPlan: LocalizationValue; badge__upcomingPlan: LocalizationValue; diff --git a/packages/shared/src/types/organizationMembership.ts b/packages/shared/src/types/organizationMembership.ts index ca17721a71a..dca160de287 100644 --- a/packages/shared/src/types/organizationMembership.ts +++ b/packages/shared/src/types/organizationMembership.ts @@ -45,6 +45,10 @@ export interface OrganizationMembershipResource extends ClerkResource { * The unique identifier for the membership. */ id: string; + /** + * Indicates whether the member has been deprovisioned by their identity provider. + */ + deprovisioned?: boolean; /** * The [`Organization`](https://clerk.com/docs/reference/objects/organization) object the membership belongs to. */ diff --git a/packages/ui/src/components/OrganizationProfile/ActiveMembersList.tsx b/packages/ui/src/components/OrganizationProfile/ActiveMembersList.tsx index 79f48631bcb..005227a23fa 100644 --- a/packages/ui/src/components/OrganizationProfile/ActiveMembersList.tsx +++ b/packages/ui/src/components/OrganizationProfile/ActiveMembersList.tsx @@ -7,9 +7,9 @@ import { UserPreview } from '@/ui/elements/UserPreview'; import { handleError } from '@/ui/utils/errorHandler'; import { Protect } from '../../common/Gate'; -import { Badge, Box, descriptors, localizationKeys, Td, Text } from '../../customizables'; +import { Badge, Box, descriptors, localizationKeys, Td, Text, Tr } from '../../customizables'; import { useFetchRoles, useLocalizeCustomRoles } from '../../hooks/useFetchRoles'; -import { DataTable, RoleSelect, RowContainer } from './MemberListTable'; +import { DataTable, RoleSelect } from './MemberListTable'; type ActiveMembersListProps = { memberships: ReturnType['memberships']; @@ -85,10 +85,18 @@ const MemberRow = (props: { const { user } = useUser(); const isCurrentUser = user?.id === membership.publicUserData?.userId; + const isDeprovisioned = membership.deprovisioned; const unlocalizedRoleLabel = options?.find(a => a.value === membership.role)?.label; return ( - + + isDeprovisioned + ? { opacity: t.opacity.$disabled, ':hover': { backgroundColor: 'transparent' } } + : { ':hover': { backgroundColor: t.colors.$neutralAlpha50 } } + } + > + ) : isDeprovisioned ? ( + ) : membership.publicUserData?.banned ? ( - + ); }; diff --git a/packages/ui/src/components/OrganizationProfile/__tests__/OrganizationMembers.test.tsx b/packages/ui/src/components/OrganizationProfile/__tests__/OrganizationMembers.test.tsx index 9e629ca99ea..2c327cb0daf 100644 --- a/packages/ui/src/components/OrganizationProfile/__tests__/OrganizationMembers.test.tsx +++ b/packages/ui/src/components/OrganizationProfile/__tests__/OrganizationMembers.test.tsx @@ -220,6 +220,52 @@ describe('OrganizationMembers', () => { expect(queryByText('Member')).toBeInTheDocument(); }); + it('marks deprovisioned members as disabled', async () => { + const membersList: OrganizationMembershipResource[] = [ + createFakeMember({ + id: '1', + orgId: '1', + role: 'admin', + identifier: 'deprovisioned_user', + deprovisioned: true, + }), + ]; + const { wrapper, fixtures } = await createFixtures(f => { + f.withOrganizations(); + f.withUser({ + email_addresses: ['test@clerk.com'], + organization_memberships: [{ name: 'Org1', id: '1' }], + }); + }); + + fixtures.clerk.organization?.getInvitations.mockRejectedValue(null); + fixtures.clerk.organization?.getMemberships.mockResolvedValue({ data: membersList, total_count: 1 }); + fixtures.clerk.organization?.getRoles.mockResolvedValue({ + total_count: 1, + data: [ + { + pathRoot: '', + reload: vi.fn(), + id: 'admin', + key: 'admin', + name: 'Admin', + description: '', + permissions: [], + createdAt: new Date(), + updatedAt: new Date(), + }, + ], + }); + + const { container, getByText, getByRole } = render(, { wrapper }); + + await waitForLoadingCompleted(container); + + expect(container.querySelector('[data-localization-key="badge__deprovisioned"]')).toBeInTheDocument(); + expect(getByText('deprovisioned_user').closest('tr')).toHaveAttribute('aria-disabled', 'true'); + expect(getByRole('button', { name: 'Admin' })).toBeDisabled(); + }); + it('display pagination counts for 2 pages', async () => { const { wrapper, fixtures } = await createFixtures(f => { f.withOrganizations(); diff --git a/packages/ui/src/components/OrganizationProfile/__tests__/utils.ts b/packages/ui/src/components/OrganizationProfile/__tests__/utils.ts index 55e4a33d29b..12c19ef10f3 100644 --- a/packages/ui/src/components/OrganizationProfile/__tests__/utils.ts +++ b/packages/ui/src/components/OrganizationProfile/__tests__/utils.ts @@ -21,6 +21,7 @@ type FakeMemberParams = { firstName?: string; lastName?: string; imageUrl?: string; + deprovisioned?: boolean; createdAt?: Date; }; @@ -30,6 +31,7 @@ export const createFakeMember = (params: FakeMemberParams): OrganizationMembersh update: vi.fn() as any, organization: { id: params.orgId } as any as OrganizationResource, id: params.id, + deprovisioned: params.deprovisioned, role: params?.role || 'admin', roleName: params?.roleName || 'Admin', createdAt: params?.createdAt || new Date(), From c30facfe1ef83e3891f833c6fa1cb2e1bc0b7ea8 Mon Sep 17 00:00:00 2001 From: Nicolas Lopes Date: Tue, 21 Jul 2026 13:41:21 -0300 Subject: [PATCH 2/2] fix(clerk-js): expose deprovisioned public user data --- .../clerk-js/src/core/resources/OrganizationMembership.ts | 3 --- packages/clerk-js/src/core/resources/PublicUserData.ts | 3 +++ .../core/resources/__tests__/OrganizationMembership.test.ts | 2 -- .../src/core/resources/__tests__/PublicUserData.test.ts | 2 ++ packages/shared/src/types/json.ts | 2 +- packages/shared/src/types/organizationMembership.ts | 4 ---- packages/shared/src/types/session.ts | 4 ++++ .../src/components/OrganizationProfile/ActiveMembersList.tsx | 2 +- .../ui/src/components/OrganizationProfile/__tests__/utils.ts | 2 +- 9 files changed, 12 insertions(+), 12 deletions(-) diff --git a/packages/clerk-js/src/core/resources/OrganizationMembership.ts b/packages/clerk-js/src/core/resources/OrganizationMembership.ts index 8d56a2aecae..a4ec4299114 100644 --- a/packages/clerk-js/src/core/resources/OrganizationMembership.ts +++ b/packages/clerk-js/src/core/resources/OrganizationMembership.ts @@ -16,7 +16,6 @@ import { BaseResource, Organization, PublicUserData } from './internal'; export class OrganizationMembership extends BaseResource implements OrganizationMembershipResource { id!: string; - deprovisioned?: boolean; publicMetadata: OrganizationMembershipPublicMetadata = {}; publicUserData?: PublicUserData; organization!: Organization; @@ -72,7 +71,6 @@ export class OrganizationMembership extends BaseResource implements Organization } this.id = data.id; - this.deprovisioned = data.deprovisioned ?? undefined; this.organization = new Organization(data.organization); this.publicMetadata = data.public_metadata || {}; if (data.public_user_data) { @@ -90,7 +88,6 @@ export class OrganizationMembership extends BaseResource implements Organization return { object: 'organization_membership', id: this.id, - deprovisioned: this.deprovisioned, organization: this.organization.__internal_toSnapshot(), public_metadata: this.publicMetadata, public_user_data: this.publicUserData?.__internal_toSnapshot(), diff --git a/packages/clerk-js/src/core/resources/PublicUserData.ts b/packages/clerk-js/src/core/resources/PublicUserData.ts index 10977d693ee..13b70e4f82e 100644 --- a/packages/clerk-js/src/core/resources/PublicUserData.ts +++ b/packages/clerk-js/src/core/resources/PublicUserData.ts @@ -13,6 +13,7 @@ export class PublicUserData implements IPublicUserData { userId?: string; username?: string; banned?: boolean; + deprovisioned?: boolean; constructor(data: PublicUserDataJSON | PublicUserDataJSONSnapshot) { this.fromJSON(data); @@ -28,6 +29,7 @@ export class PublicUserData implements IPublicUserData { this.userId = data.user_id; this.username = data.username; this.banned = data.banned ?? undefined; + this.deprovisioned = data.deprovisioned ?? undefined; } return this; @@ -43,6 +45,7 @@ export class PublicUserData implements IPublicUserData { user_id: this.userId, username: this.username, banned: this.banned, + deprovisioned: this.deprovisioned, }; } } diff --git a/packages/clerk-js/src/core/resources/__tests__/OrganizationMembership.test.ts b/packages/clerk-js/src/core/resources/__tests__/OrganizationMembership.test.ts index e88fc151200..6ab590ab810 100644 --- a/packages/clerk-js/src/core/resources/__tests__/OrganizationMembership.test.ts +++ b/packages/clerk-js/src/core/resources/__tests__/OrganizationMembership.test.ts @@ -7,7 +7,6 @@ describe('OrganizationMembership', () => { const organizationMembership = new OrganizationMembership({ object: 'organization_membership', id: 'test_id', - deprovisioned: true, created_at: 12345, updated_at: 5678, role: 'admin', @@ -45,7 +44,6 @@ describe('OrganizationMembership', () => { expect(organizationMembership).toMatchObject({ id: 'test_id', - deprovisioned: true, role: 'admin', roleName: undefined, createdAt: expect.any(Date), diff --git a/packages/clerk-js/src/core/resources/__tests__/PublicUserData.test.ts b/packages/clerk-js/src/core/resources/__tests__/PublicUserData.test.ts index c7a378ebb69..a602f9ea9e0 100644 --- a/packages/clerk-js/src/core/resources/__tests__/PublicUserData.test.ts +++ b/packages/clerk-js/src/core/resources/__tests__/PublicUserData.test.ts @@ -14,6 +14,7 @@ describe('PublicUserData', () => { identifier: 'john-doe', user_id: '123', username: 'johndoe', + deprovisioned: true, }); expect(pud).toMatchObject({ @@ -24,6 +25,7 @@ describe('PublicUserData', () => { identifier: 'john-doe', userId: '123', username: 'johndoe', + deprovisioned: true, }); }); }); diff --git a/packages/shared/src/types/json.ts b/packages/shared/src/types/json.ts index 9aeb0326b06..ec1ffddedcf 100644 --- a/packages/shared/src/types/json.ts +++ b/packages/shared/src/types/json.ts @@ -342,6 +342,7 @@ export interface PublicUserDataJSON { user_id?: string; username?: string; banned?: boolean; + deprovisioned?: boolean; } export interface SessionWithActivitiesJSON extends Omit { @@ -420,7 +421,6 @@ export interface OrganizationJSON extends ClerkResourceJSON { export interface OrganizationMembershipJSON extends ClerkResourceJSON { object: 'organization_membership'; id: string; - deprovisioned?: boolean; organization: OrganizationJSON; permissions: OrganizationPermissionKey[]; public_metadata: OrganizationMembershipPublicMetadata; diff --git a/packages/shared/src/types/organizationMembership.ts b/packages/shared/src/types/organizationMembership.ts index dca160de287..ca17721a71a 100644 --- a/packages/shared/src/types/organizationMembership.ts +++ b/packages/shared/src/types/organizationMembership.ts @@ -45,10 +45,6 @@ export interface OrganizationMembershipResource extends ClerkResource { * The unique identifier for the membership. */ id: string; - /** - * Indicates whether the member has been deprovisioned by their identity provider. - */ - deprovisioned?: boolean; /** * The [`Organization`](https://clerk.com/docs/reference/objects/organization) object the membership belongs to. */ diff --git a/packages/shared/src/types/session.ts b/packages/shared/src/types/session.ts index 5e148977474..138c68119fd 100644 --- a/packages/shared/src/types/session.ts +++ b/packages/shared/src/types/session.ts @@ -481,6 +481,10 @@ export interface PublicUserData { * Indicates whether the user is banned. */ banned?: boolean; + /** + * Indicates whether the user has been deprovisioned by their identity provider. + */ + deprovisioned?: boolean; } /** diff --git a/packages/ui/src/components/OrganizationProfile/ActiveMembersList.tsx b/packages/ui/src/components/OrganizationProfile/ActiveMembersList.tsx index 005227a23fa..f6c8c1a446f 100644 --- a/packages/ui/src/components/OrganizationProfile/ActiveMembersList.tsx +++ b/packages/ui/src/components/OrganizationProfile/ActiveMembersList.tsx @@ -85,7 +85,7 @@ const MemberRow = (props: { const { user } = useUser(); const isCurrentUser = user?.id === membership.publicUserData?.userId; - const isDeprovisioned = membership.deprovisioned; + const isDeprovisioned = membership.publicUserData?.deprovisioned; const unlocalizedRoleLabel = options?.find(a => a.value === membership.role)?.label; return ( diff --git a/packages/ui/src/components/OrganizationProfile/__tests__/utils.ts b/packages/ui/src/components/OrganizationProfile/__tests__/utils.ts index 12c19ef10f3..b95c4d85c4e 100644 --- a/packages/ui/src/components/OrganizationProfile/__tests__/utils.ts +++ b/packages/ui/src/components/OrganizationProfile/__tests__/utils.ts @@ -31,7 +31,6 @@ export const createFakeMember = (params: FakeMemberParams): OrganizationMembersh update: vi.fn() as any, organization: { id: params.orgId } as any as OrganizationResource, id: params.id, - deprovisioned: params.deprovisioned, role: params?.role || 'admin', roleName: params?.roleName || 'Admin', createdAt: params?.createdAt || new Date(), @@ -43,6 +42,7 @@ export const createFakeMember = (params: FakeMemberParams): OrganizationMembersh firstName: params?.firstName || 'test_firstName', lastName: params?.lastName || 'test_lastName', imageUrl: params?.imageUrl || '', + deprovisioned: params.deprovisioned, }, } as any; };