diff --git a/.changeset/directory-sync-in-progress-state.md b/.changeset/directory-sync-in-progress-state.md new file mode 100644 index 00000000000..7e9f2ca9054 --- /dev/null +++ b/.changeset/directory-sync-in-progress-state.md @@ -0,0 +1,7 @@ +--- +'@clerk/ui': patch +'@clerk/localizations': patch +'@clerk/shared': patch +--- + +Show a Google Workspace directory that still needs its service account credentials as **In Progress** in the `` Security tab, with a **Continue configuration** button that reopens the wizard at the credentials step. It used to read **Inactive** and offer **Activate**, which the server refuses until the credentials are stored. The wizard stepper also stops ticking the configure step before the credentials exist. diff --git a/packages/localizations/src/ar-SA.ts b/packages/localizations/src/ar-SA.ts index c707911a13b..cc6bcb24875 100644 --- a/packages/localizations/src/ar-SA.ts +++ b/packages/localizations/src/ar-SA.ts @@ -1435,6 +1435,7 @@ export const arSA: LocalizationResource = { }, directorySyncSection: { badge__active: undefined, + badge__inProgress: undefined, badge__inactive: undefined, badge__ssoRequired: undefined, description: undefined, @@ -1444,6 +1445,7 @@ export const arSA: LocalizationResource = { menuAction__edit: undefined, menuAction__remove: undefined, primaryButton__configure: undefined, + primaryButton__continueConfiguration: undefined, removeDialog: { confirmButton: undefined, subtitle: undefined, diff --git a/packages/localizations/src/be-BY.ts b/packages/localizations/src/be-BY.ts index db7b9ca5650..db35590aee3 100644 --- a/packages/localizations/src/be-BY.ts +++ b/packages/localizations/src/be-BY.ts @@ -1438,6 +1438,7 @@ export const beBY: LocalizationResource = { }, directorySyncSection: { badge__active: undefined, + badge__inProgress: undefined, badge__inactive: undefined, badge__ssoRequired: undefined, description: undefined, @@ -1447,6 +1448,7 @@ export const beBY: LocalizationResource = { menuAction__edit: undefined, menuAction__remove: undefined, primaryButton__configure: undefined, + primaryButton__continueConfiguration: undefined, removeDialog: { confirmButton: undefined, subtitle: undefined, diff --git a/packages/localizations/src/bg-BG.ts b/packages/localizations/src/bg-BG.ts index fc88d5a762e..03c161688a1 100644 --- a/packages/localizations/src/bg-BG.ts +++ b/packages/localizations/src/bg-BG.ts @@ -1438,6 +1438,7 @@ export const bgBG: LocalizationResource = { }, directorySyncSection: { badge__active: undefined, + badge__inProgress: undefined, badge__inactive: undefined, badge__ssoRequired: undefined, description: undefined, @@ -1447,6 +1448,7 @@ export const bgBG: LocalizationResource = { menuAction__edit: undefined, menuAction__remove: undefined, primaryButton__configure: undefined, + primaryButton__continueConfiguration: undefined, removeDialog: { confirmButton: undefined, subtitle: undefined, diff --git a/packages/localizations/src/bn-IN.ts b/packages/localizations/src/bn-IN.ts index 7385f976b99..06a27fbffed 100644 --- a/packages/localizations/src/bn-IN.ts +++ b/packages/localizations/src/bn-IN.ts @@ -1445,6 +1445,7 @@ export const bnIN: LocalizationResource = { }, directorySyncSection: { badge__active: undefined, + badge__inProgress: undefined, badge__inactive: undefined, badge__ssoRequired: undefined, description: undefined, @@ -1454,6 +1455,7 @@ export const bnIN: LocalizationResource = { menuAction__edit: undefined, menuAction__remove: undefined, primaryButton__configure: undefined, + primaryButton__continueConfiguration: undefined, removeDialog: { confirmButton: undefined, subtitle: undefined, diff --git a/packages/localizations/src/ca-ES.ts b/packages/localizations/src/ca-ES.ts index 9225a3c42c5..dbb91553248 100644 --- a/packages/localizations/src/ca-ES.ts +++ b/packages/localizations/src/ca-ES.ts @@ -1445,6 +1445,7 @@ export const caES: LocalizationResource = { }, directorySyncSection: { badge__active: undefined, + badge__inProgress: undefined, badge__inactive: undefined, badge__ssoRequired: undefined, description: undefined, @@ -1454,6 +1455,7 @@ export const caES: LocalizationResource = { menuAction__edit: undefined, menuAction__remove: undefined, primaryButton__configure: undefined, + primaryButton__continueConfiguration: undefined, removeDialog: { confirmButton: undefined, subtitle: undefined, diff --git a/packages/localizations/src/cs-CZ.ts b/packages/localizations/src/cs-CZ.ts index cc16a2a3d70..6ef53a24654 100644 --- a/packages/localizations/src/cs-CZ.ts +++ b/packages/localizations/src/cs-CZ.ts @@ -1443,6 +1443,7 @@ export const csCZ: LocalizationResource = { }, directorySyncSection: { badge__active: undefined, + badge__inProgress: undefined, badge__inactive: undefined, badge__ssoRequired: undefined, description: undefined, @@ -1452,6 +1453,7 @@ export const csCZ: LocalizationResource = { menuAction__edit: undefined, menuAction__remove: undefined, primaryButton__configure: undefined, + primaryButton__continueConfiguration: undefined, removeDialog: { confirmButton: undefined, subtitle: undefined, diff --git a/packages/localizations/src/da-DK.ts b/packages/localizations/src/da-DK.ts index 362723d2869..5197353fed7 100644 --- a/packages/localizations/src/da-DK.ts +++ b/packages/localizations/src/da-DK.ts @@ -1436,6 +1436,7 @@ export const daDK: LocalizationResource = { }, directorySyncSection: { badge__active: undefined, + badge__inProgress: undefined, badge__inactive: undefined, badge__ssoRequired: undefined, description: undefined, @@ -1445,6 +1446,7 @@ export const daDK: LocalizationResource = { menuAction__edit: undefined, menuAction__remove: undefined, primaryButton__configure: undefined, + primaryButton__continueConfiguration: undefined, removeDialog: { confirmButton: undefined, subtitle: undefined, diff --git a/packages/localizations/src/de-DE.ts b/packages/localizations/src/de-DE.ts index 52ecf5ecb8b..87c49bf2c1f 100644 --- a/packages/localizations/src/de-DE.ts +++ b/packages/localizations/src/de-DE.ts @@ -1451,6 +1451,7 @@ export const deDE: LocalizationResource = { }, directorySyncSection: { badge__active: undefined, + badge__inProgress: undefined, badge__inactive: undefined, badge__ssoRequired: undefined, description: undefined, @@ -1460,6 +1461,7 @@ export const deDE: LocalizationResource = { menuAction__edit: undefined, menuAction__remove: undefined, primaryButton__configure: undefined, + primaryButton__continueConfiguration: undefined, removeDialog: { confirmButton: undefined, subtitle: undefined, diff --git a/packages/localizations/src/el-GR.ts b/packages/localizations/src/el-GR.ts index 5013b35ca5b..a7199a68e71 100644 --- a/packages/localizations/src/el-GR.ts +++ b/packages/localizations/src/el-GR.ts @@ -1441,6 +1441,7 @@ export const elGR: LocalizationResource = { }, directorySyncSection: { badge__active: undefined, + badge__inProgress: undefined, badge__inactive: undefined, badge__ssoRequired: undefined, description: undefined, @@ -1450,6 +1451,7 @@ export const elGR: LocalizationResource = { menuAction__edit: undefined, menuAction__remove: undefined, primaryButton__configure: undefined, + primaryButton__continueConfiguration: undefined, removeDialog: { confirmButton: undefined, subtitle: undefined, diff --git a/packages/localizations/src/en-GB.ts b/packages/localizations/src/en-GB.ts index a038681c897..34e69a1adf8 100644 --- a/packages/localizations/src/en-GB.ts +++ b/packages/localizations/src/en-GB.ts @@ -1437,6 +1437,7 @@ export const enGB: LocalizationResource = { }, directorySyncSection: { badge__active: undefined, + badge__inProgress: undefined, badge__inactive: undefined, badge__ssoRequired: undefined, description: undefined, @@ -1446,6 +1447,7 @@ export const enGB: LocalizationResource = { menuAction__edit: undefined, menuAction__remove: undefined, primaryButton__configure: undefined, + primaryButton__continueConfiguration: undefined, removeDialog: { confirmButton: undefined, subtitle: undefined, diff --git a/packages/localizations/src/en-US.ts b/packages/localizations/src/en-US.ts index b307ffe16d6..d61dafe03c3 100644 --- a/packages/localizations/src/en-US.ts +++ b/packages/localizations/src/en-US.ts @@ -1478,6 +1478,7 @@ export const enUS: LocalizationResource = { }, directorySyncSection: { badge__active: 'Active', + badge__inProgress: 'In Progress', badge__inactive: 'Inactive', badge__ssoRequired: 'SSO required', description: 'Keep organization members synced with your identity provider. Requires an SSO connection.', @@ -1487,6 +1488,7 @@ export const enUS: LocalizationResource = { menuAction__edit: 'Edit', menuAction__remove: 'Remove', primaryButton__configure: 'Configure', + primaryButton__continueConfiguration: 'Continue configuration', removeDialog: { confirmButton: 'Remove Directory Sync', subtitle: diff --git a/packages/localizations/src/es-CR.ts b/packages/localizations/src/es-CR.ts index ed06e9d92f1..04a386cf958 100644 --- a/packages/localizations/src/es-CR.ts +++ b/packages/localizations/src/es-CR.ts @@ -1441,6 +1441,7 @@ export const esCR: LocalizationResource = { }, directorySyncSection: { badge__active: undefined, + badge__inProgress: undefined, badge__inactive: undefined, badge__ssoRequired: undefined, description: undefined, @@ -1450,6 +1451,7 @@ export const esCR: LocalizationResource = { menuAction__edit: undefined, menuAction__remove: undefined, primaryButton__configure: undefined, + primaryButton__continueConfiguration: undefined, removeDialog: { confirmButton: undefined, subtitle: undefined, diff --git a/packages/localizations/src/es-ES.ts b/packages/localizations/src/es-ES.ts index cff65d2b6a5..8b1a24379e1 100644 --- a/packages/localizations/src/es-ES.ts +++ b/packages/localizations/src/es-ES.ts @@ -1446,6 +1446,7 @@ export const esES: LocalizationResource = { }, directorySyncSection: { badge__active: undefined, + badge__inProgress: undefined, badge__inactive: undefined, badge__ssoRequired: undefined, description: undefined, @@ -1455,6 +1456,7 @@ export const esES: LocalizationResource = { menuAction__edit: undefined, menuAction__remove: undefined, primaryButton__configure: undefined, + primaryButton__continueConfiguration: undefined, removeDialog: { confirmButton: undefined, subtitle: undefined, diff --git a/packages/localizations/src/es-MX.ts b/packages/localizations/src/es-MX.ts index 2e6d7e4256d..8fb003e5d1d 100644 --- a/packages/localizations/src/es-MX.ts +++ b/packages/localizations/src/es-MX.ts @@ -1442,6 +1442,7 @@ export const esMX: LocalizationResource = { }, directorySyncSection: { badge__active: undefined, + badge__inProgress: undefined, badge__inactive: undefined, badge__ssoRequired: undefined, description: undefined, @@ -1451,6 +1452,7 @@ export const esMX: LocalizationResource = { menuAction__edit: undefined, menuAction__remove: undefined, primaryButton__configure: undefined, + primaryButton__continueConfiguration: undefined, removeDialog: { confirmButton: undefined, subtitle: undefined, diff --git a/packages/localizations/src/es-UY.ts b/packages/localizations/src/es-UY.ts index 395d82d04e4..e18ff1e9f95 100644 --- a/packages/localizations/src/es-UY.ts +++ b/packages/localizations/src/es-UY.ts @@ -1440,6 +1440,7 @@ export const esUY: LocalizationResource = { }, directorySyncSection: { badge__active: undefined, + badge__inProgress: undefined, badge__inactive: undefined, badge__ssoRequired: undefined, description: undefined, @@ -1449,6 +1450,7 @@ export const esUY: LocalizationResource = { menuAction__edit: undefined, menuAction__remove: undefined, primaryButton__configure: undefined, + primaryButton__continueConfiguration: undefined, removeDialog: { confirmButton: undefined, subtitle: undefined, diff --git a/packages/localizations/src/fa-IR.ts b/packages/localizations/src/fa-IR.ts index 38ce6f62bba..4da9da82d5a 100644 --- a/packages/localizations/src/fa-IR.ts +++ b/packages/localizations/src/fa-IR.ts @@ -1445,6 +1445,7 @@ export const faIR: LocalizationResource = { }, directorySyncSection: { badge__active: undefined, + badge__inProgress: undefined, badge__inactive: undefined, badge__ssoRequired: undefined, description: undefined, @@ -1454,6 +1455,7 @@ export const faIR: LocalizationResource = { menuAction__edit: undefined, menuAction__remove: undefined, primaryButton__configure: undefined, + primaryButton__continueConfiguration: undefined, removeDialog: { confirmButton: undefined, subtitle: undefined, diff --git a/packages/localizations/src/fi-FI.ts b/packages/localizations/src/fi-FI.ts index 5e68744f92e..7fa50bbf739 100644 --- a/packages/localizations/src/fi-FI.ts +++ b/packages/localizations/src/fi-FI.ts @@ -1446,6 +1446,7 @@ export const fiFI: LocalizationResource = { }, directorySyncSection: { badge__active: undefined, + badge__inProgress: undefined, badge__inactive: undefined, badge__ssoRequired: undefined, description: undefined, @@ -1455,6 +1456,7 @@ export const fiFI: LocalizationResource = { menuAction__edit: undefined, menuAction__remove: undefined, primaryButton__configure: undefined, + primaryButton__continueConfiguration: undefined, removeDialog: { confirmButton: undefined, subtitle: undefined, diff --git a/packages/localizations/src/fr-FR.ts b/packages/localizations/src/fr-FR.ts index b10aa5e3a60..241d4413dc8 100644 --- a/packages/localizations/src/fr-FR.ts +++ b/packages/localizations/src/fr-FR.ts @@ -1451,6 +1451,7 @@ export const frFR: LocalizationResource = { }, directorySyncSection: { badge__active: undefined, + badge__inProgress: undefined, badge__inactive: undefined, badge__ssoRequired: undefined, description: undefined, @@ -1460,6 +1461,7 @@ export const frFR: LocalizationResource = { menuAction__edit: undefined, menuAction__remove: undefined, primaryButton__configure: undefined, + primaryButton__continueConfiguration: undefined, removeDialog: { confirmButton: undefined, subtitle: undefined, diff --git a/packages/localizations/src/he-IL.ts b/packages/localizations/src/he-IL.ts index 76d4e71749c..50c500777c2 100644 --- a/packages/localizations/src/he-IL.ts +++ b/packages/localizations/src/he-IL.ts @@ -1432,6 +1432,7 @@ export const heIL: LocalizationResource = { }, directorySyncSection: { badge__active: undefined, + badge__inProgress: undefined, badge__inactive: undefined, badge__ssoRequired: undefined, description: undefined, @@ -1441,6 +1442,7 @@ export const heIL: LocalizationResource = { menuAction__edit: undefined, menuAction__remove: undefined, primaryButton__configure: undefined, + primaryButton__continueConfiguration: undefined, removeDialog: { confirmButton: undefined, subtitle: undefined, diff --git a/packages/localizations/src/hi-IN.ts b/packages/localizations/src/hi-IN.ts index a15280fb922..5a6e641ca32 100644 --- a/packages/localizations/src/hi-IN.ts +++ b/packages/localizations/src/hi-IN.ts @@ -1445,6 +1445,7 @@ export const hiIN: LocalizationResource = { }, directorySyncSection: { badge__active: undefined, + badge__inProgress: undefined, badge__inactive: undefined, badge__ssoRequired: undefined, description: undefined, @@ -1454,6 +1455,7 @@ export const hiIN: LocalizationResource = { menuAction__edit: undefined, menuAction__remove: undefined, primaryButton__configure: undefined, + primaryButton__continueConfiguration: undefined, removeDialog: { confirmButton: undefined, subtitle: undefined, diff --git a/packages/localizations/src/hr-HR.ts b/packages/localizations/src/hr-HR.ts index 898e1668daf..4c68a68b662 100644 --- a/packages/localizations/src/hr-HR.ts +++ b/packages/localizations/src/hr-HR.ts @@ -1446,6 +1446,7 @@ export const hrHR: LocalizationResource = { }, directorySyncSection: { badge__active: undefined, + badge__inProgress: undefined, badge__inactive: undefined, badge__ssoRequired: undefined, description: undefined, @@ -1455,6 +1456,7 @@ export const hrHR: LocalizationResource = { menuAction__edit: undefined, menuAction__remove: undefined, primaryButton__configure: undefined, + primaryButton__continueConfiguration: undefined, removeDialog: { confirmButton: undefined, subtitle: undefined, diff --git a/packages/localizations/src/hu-HU.ts b/packages/localizations/src/hu-HU.ts index ba75bd80414..07c29c97027 100644 --- a/packages/localizations/src/hu-HU.ts +++ b/packages/localizations/src/hu-HU.ts @@ -1447,6 +1447,7 @@ export const huHU: LocalizationResource = { }, directorySyncSection: { badge__active: undefined, + badge__inProgress: undefined, badge__inactive: undefined, badge__ssoRequired: undefined, description: undefined, @@ -1456,6 +1457,7 @@ export const huHU: LocalizationResource = { menuAction__edit: undefined, menuAction__remove: undefined, primaryButton__configure: undefined, + primaryButton__continueConfiguration: undefined, removeDialog: { confirmButton: undefined, subtitle: undefined, diff --git a/packages/localizations/src/id-ID.ts b/packages/localizations/src/id-ID.ts index 7b35077a8b8..c88cc1899d8 100644 --- a/packages/localizations/src/id-ID.ts +++ b/packages/localizations/src/id-ID.ts @@ -1439,6 +1439,7 @@ export const idID: LocalizationResource = { }, directorySyncSection: { badge__active: undefined, + badge__inProgress: undefined, badge__inactive: undefined, badge__ssoRequired: undefined, description: undefined, @@ -1448,6 +1449,7 @@ export const idID: LocalizationResource = { menuAction__edit: undefined, menuAction__remove: undefined, primaryButton__configure: undefined, + primaryButton__continueConfiguration: undefined, removeDialog: { confirmButton: undefined, subtitle: undefined, diff --git a/packages/localizations/src/is-IS.ts b/packages/localizations/src/is-IS.ts index f015eed4f00..853bd1405a7 100644 --- a/packages/localizations/src/is-IS.ts +++ b/packages/localizations/src/is-IS.ts @@ -1446,6 +1446,7 @@ export const isIS: LocalizationResource = { }, directorySyncSection: { badge__active: undefined, + badge__inProgress: undefined, badge__inactive: undefined, badge__ssoRequired: undefined, description: undefined, @@ -1455,6 +1456,7 @@ export const isIS: LocalizationResource = { menuAction__edit: undefined, menuAction__remove: undefined, primaryButton__configure: undefined, + primaryButton__continueConfiguration: undefined, removeDialog: { confirmButton: undefined, subtitle: undefined, diff --git a/packages/localizations/src/it-IT.ts b/packages/localizations/src/it-IT.ts index 4044db1665a..ede4430afa3 100644 --- a/packages/localizations/src/it-IT.ts +++ b/packages/localizations/src/it-IT.ts @@ -1446,6 +1446,7 @@ export const itIT: LocalizationResource = { }, directorySyncSection: { badge__active: undefined, + badge__inProgress: undefined, badge__inactive: undefined, badge__ssoRequired: undefined, description: undefined, @@ -1455,6 +1456,7 @@ export const itIT: LocalizationResource = { menuAction__edit: undefined, menuAction__remove: undefined, primaryButton__configure: undefined, + primaryButton__continueConfiguration: undefined, removeDialog: { confirmButton: undefined, subtitle: undefined, diff --git a/packages/localizations/src/ja-JP.ts b/packages/localizations/src/ja-JP.ts index e0298371964..df4a6d30f41 100644 --- a/packages/localizations/src/ja-JP.ts +++ b/packages/localizations/src/ja-JP.ts @@ -1445,6 +1445,7 @@ export const jaJP: LocalizationResource = { }, directorySyncSection: { badge__active: undefined, + badge__inProgress: undefined, badge__inactive: undefined, badge__ssoRequired: undefined, description: undefined, @@ -1454,6 +1455,7 @@ export const jaJP: LocalizationResource = { menuAction__edit: undefined, menuAction__remove: undefined, primaryButton__configure: undefined, + primaryButton__continueConfiguration: undefined, removeDialog: { confirmButton: undefined, subtitle: undefined, diff --git a/packages/localizations/src/kk-KZ.ts b/packages/localizations/src/kk-KZ.ts index 8a51cb18eca..250070598f8 100644 --- a/packages/localizations/src/kk-KZ.ts +++ b/packages/localizations/src/kk-KZ.ts @@ -1432,6 +1432,7 @@ export const kkKZ: LocalizationResource = { }, directorySyncSection: { badge__active: undefined, + badge__inProgress: undefined, badge__inactive: undefined, badge__ssoRequired: undefined, description: undefined, @@ -1441,6 +1442,7 @@ export const kkKZ: LocalizationResource = { menuAction__edit: undefined, menuAction__remove: undefined, primaryButton__configure: undefined, + primaryButton__continueConfiguration: undefined, removeDialog: { confirmButton: undefined, subtitle: undefined, diff --git a/packages/localizations/src/ko-KR.ts b/packages/localizations/src/ko-KR.ts index abec99a1dff..81462f5cf1d 100644 --- a/packages/localizations/src/ko-KR.ts +++ b/packages/localizations/src/ko-KR.ts @@ -1437,6 +1437,7 @@ export const koKR: LocalizationResource = { }, directorySyncSection: { badge__active: undefined, + badge__inProgress: undefined, badge__inactive: undefined, badge__ssoRequired: undefined, description: undefined, @@ -1446,6 +1447,7 @@ export const koKR: LocalizationResource = { menuAction__edit: undefined, menuAction__remove: undefined, primaryButton__configure: undefined, + primaryButton__continueConfiguration: undefined, removeDialog: { confirmButton: undefined, subtitle: undefined, diff --git a/packages/localizations/src/mn-MN.ts b/packages/localizations/src/mn-MN.ts index 64c73cef2a1..72ce4e86f0f 100644 --- a/packages/localizations/src/mn-MN.ts +++ b/packages/localizations/src/mn-MN.ts @@ -1439,6 +1439,7 @@ export const mnMN: LocalizationResource = { }, directorySyncSection: { badge__active: undefined, + badge__inProgress: undefined, badge__inactive: undefined, badge__ssoRequired: undefined, description: undefined, @@ -1448,6 +1449,7 @@ export const mnMN: LocalizationResource = { menuAction__edit: undefined, menuAction__remove: undefined, primaryButton__configure: undefined, + primaryButton__continueConfiguration: undefined, removeDialog: { confirmButton: undefined, subtitle: undefined, diff --git a/packages/localizations/src/ms-MY.ts b/packages/localizations/src/ms-MY.ts index 99c926f3155..36474eb7264 100644 --- a/packages/localizations/src/ms-MY.ts +++ b/packages/localizations/src/ms-MY.ts @@ -1448,6 +1448,7 @@ export const msMY: LocalizationResource = { }, directorySyncSection: { badge__active: undefined, + badge__inProgress: undefined, badge__inactive: undefined, badge__ssoRequired: undefined, description: undefined, @@ -1457,6 +1458,7 @@ export const msMY: LocalizationResource = { menuAction__edit: undefined, menuAction__remove: undefined, primaryButton__configure: undefined, + primaryButton__continueConfiguration: undefined, removeDialog: { confirmButton: undefined, subtitle: undefined, diff --git a/packages/localizations/src/nb-NO.ts b/packages/localizations/src/nb-NO.ts index 0ebbf9b3315..0cc7d8dc0f8 100644 --- a/packages/localizations/src/nb-NO.ts +++ b/packages/localizations/src/nb-NO.ts @@ -1447,6 +1447,7 @@ export const nbNO: LocalizationResource = { }, directorySyncSection: { badge__active: undefined, + badge__inProgress: undefined, badge__inactive: undefined, badge__ssoRequired: undefined, description: undefined, @@ -1456,6 +1457,7 @@ export const nbNO: LocalizationResource = { menuAction__edit: undefined, menuAction__remove: undefined, primaryButton__configure: undefined, + primaryButton__continueConfiguration: undefined, removeDialog: { confirmButton: undefined, subtitle: undefined, diff --git a/packages/localizations/src/nl-BE.ts b/packages/localizations/src/nl-BE.ts index a82b79edd58..be1ec57368a 100644 --- a/packages/localizations/src/nl-BE.ts +++ b/packages/localizations/src/nl-BE.ts @@ -1439,6 +1439,7 @@ export const nlBE: LocalizationResource = { }, directorySyncSection: { badge__active: undefined, + badge__inProgress: undefined, badge__inactive: undefined, badge__ssoRequired: undefined, description: undefined, @@ -1448,6 +1449,7 @@ export const nlBE: LocalizationResource = { menuAction__edit: undefined, menuAction__remove: undefined, primaryButton__configure: undefined, + primaryButton__continueConfiguration: undefined, removeDialog: { confirmButton: undefined, subtitle: undefined, diff --git a/packages/localizations/src/nl-NL.ts b/packages/localizations/src/nl-NL.ts index cf305556832..7467461927b 100644 --- a/packages/localizations/src/nl-NL.ts +++ b/packages/localizations/src/nl-NL.ts @@ -1439,6 +1439,7 @@ export const nlNL: LocalizationResource = { }, directorySyncSection: { badge__active: undefined, + badge__inProgress: undefined, badge__inactive: undefined, badge__ssoRequired: undefined, description: undefined, @@ -1448,6 +1449,7 @@ export const nlNL: LocalizationResource = { menuAction__edit: undefined, menuAction__remove: undefined, primaryButton__configure: undefined, + primaryButton__continueConfiguration: undefined, removeDialog: { confirmButton: undefined, subtitle: undefined, diff --git a/packages/localizations/src/pl-PL.ts b/packages/localizations/src/pl-PL.ts index 19eed5d20d3..e4d197108ee 100644 --- a/packages/localizations/src/pl-PL.ts +++ b/packages/localizations/src/pl-PL.ts @@ -1437,6 +1437,7 @@ export const plPL: LocalizationResource = { }, directorySyncSection: { badge__active: undefined, + badge__inProgress: undefined, badge__inactive: undefined, badge__ssoRequired: undefined, description: undefined, @@ -1446,6 +1447,7 @@ export const plPL: LocalizationResource = { menuAction__edit: undefined, menuAction__remove: undefined, primaryButton__configure: undefined, + primaryButton__continueConfiguration: undefined, removeDialog: { confirmButton: undefined, subtitle: undefined, diff --git a/packages/localizations/src/pt-BR.ts b/packages/localizations/src/pt-BR.ts index 0b265682603..2400dbca93f 100644 --- a/packages/localizations/src/pt-BR.ts +++ b/packages/localizations/src/pt-BR.ts @@ -1447,6 +1447,7 @@ export const ptBR: LocalizationResource = { }, directorySyncSection: { badge__active: undefined, + badge__inProgress: undefined, badge__inactive: undefined, badge__ssoRequired: undefined, description: undefined, @@ -1456,6 +1457,7 @@ export const ptBR: LocalizationResource = { menuAction__edit: undefined, menuAction__remove: undefined, primaryButton__configure: undefined, + primaryButton__continueConfiguration: undefined, removeDialog: { confirmButton: undefined, subtitle: undefined, diff --git a/packages/localizations/src/pt-PT.ts b/packages/localizations/src/pt-PT.ts index 72e81ceabb0..2e0177ff852 100644 --- a/packages/localizations/src/pt-PT.ts +++ b/packages/localizations/src/pt-PT.ts @@ -1447,6 +1447,7 @@ export const ptPT: LocalizationResource = { }, directorySyncSection: { badge__active: undefined, + badge__inProgress: undefined, badge__inactive: undefined, badge__ssoRequired: undefined, description: undefined, @@ -1456,6 +1457,7 @@ export const ptPT: LocalizationResource = { menuAction__edit: undefined, menuAction__remove: undefined, primaryButton__configure: undefined, + primaryButton__continueConfiguration: undefined, removeDialog: { confirmButton: undefined, subtitle: undefined, diff --git a/packages/localizations/src/ro-RO.ts b/packages/localizations/src/ro-RO.ts index d8515f1b2ae..29bc66a9dfb 100644 --- a/packages/localizations/src/ro-RO.ts +++ b/packages/localizations/src/ro-RO.ts @@ -1447,6 +1447,7 @@ export const roRO: LocalizationResource = { }, directorySyncSection: { badge__active: undefined, + badge__inProgress: undefined, badge__inactive: undefined, badge__ssoRequired: undefined, description: undefined, @@ -1456,6 +1457,7 @@ export const roRO: LocalizationResource = { menuAction__edit: undefined, menuAction__remove: undefined, primaryButton__configure: undefined, + primaryButton__continueConfiguration: undefined, removeDialog: { confirmButton: undefined, subtitle: undefined, diff --git a/packages/localizations/src/ru-RU.ts b/packages/localizations/src/ru-RU.ts index 3af75fb03eb..ec9ad272576 100644 --- a/packages/localizations/src/ru-RU.ts +++ b/packages/localizations/src/ru-RU.ts @@ -1441,6 +1441,7 @@ export const ruRU: LocalizationResource = { }, directorySyncSection: { badge__active: undefined, + badge__inProgress: undefined, badge__inactive: undefined, badge__ssoRequired: undefined, description: undefined, @@ -1450,6 +1451,7 @@ export const ruRU: LocalizationResource = { menuAction__edit: undefined, menuAction__remove: undefined, primaryButton__configure: undefined, + primaryButton__continueConfiguration: undefined, removeDialog: { confirmButton: undefined, subtitle: undefined, diff --git a/packages/localizations/src/sk-SK.ts b/packages/localizations/src/sk-SK.ts index 1dcc2f679d6..f0199e5ed22 100644 --- a/packages/localizations/src/sk-SK.ts +++ b/packages/localizations/src/sk-SK.ts @@ -1437,6 +1437,7 @@ export const skSK: LocalizationResource = { }, directorySyncSection: { badge__active: undefined, + badge__inProgress: undefined, badge__inactive: undefined, badge__ssoRequired: undefined, description: undefined, @@ -1446,6 +1447,7 @@ export const skSK: LocalizationResource = { menuAction__edit: undefined, menuAction__remove: undefined, primaryButton__configure: undefined, + primaryButton__continueConfiguration: undefined, removeDialog: { confirmButton: undefined, subtitle: undefined, diff --git a/packages/localizations/src/sr-RS.ts b/packages/localizations/src/sr-RS.ts index 77c45b2f883..0a7325260c1 100644 --- a/packages/localizations/src/sr-RS.ts +++ b/packages/localizations/src/sr-RS.ts @@ -1437,6 +1437,7 @@ export const srRS: LocalizationResource = { }, directorySyncSection: { badge__active: undefined, + badge__inProgress: undefined, badge__inactive: undefined, badge__ssoRequired: undefined, description: undefined, @@ -1446,6 +1447,7 @@ export const srRS: LocalizationResource = { menuAction__edit: undefined, menuAction__remove: undefined, primaryButton__configure: undefined, + primaryButton__continueConfiguration: undefined, removeDialog: { confirmButton: undefined, subtitle: undefined, diff --git a/packages/localizations/src/sv-SE.ts b/packages/localizations/src/sv-SE.ts index cec06c14be5..81d650821fe 100644 --- a/packages/localizations/src/sv-SE.ts +++ b/packages/localizations/src/sv-SE.ts @@ -1437,6 +1437,7 @@ export const svSE: LocalizationResource = { }, directorySyncSection: { badge__active: undefined, + badge__inProgress: undefined, badge__inactive: undefined, badge__ssoRequired: undefined, description: undefined, @@ -1446,6 +1447,7 @@ export const svSE: LocalizationResource = { menuAction__edit: undefined, menuAction__remove: undefined, primaryButton__configure: undefined, + primaryButton__continueConfiguration: undefined, removeDialog: { confirmButton: undefined, subtitle: undefined, diff --git a/packages/localizations/src/ta-IN.ts b/packages/localizations/src/ta-IN.ts index 5dbb4287d9c..f7971dff8eb 100644 --- a/packages/localizations/src/ta-IN.ts +++ b/packages/localizations/src/ta-IN.ts @@ -1450,6 +1450,7 @@ export const taIN: LocalizationResource = { }, directorySyncSection: { badge__active: undefined, + badge__inProgress: undefined, badge__inactive: undefined, badge__ssoRequired: undefined, description: undefined, @@ -1459,6 +1460,7 @@ export const taIN: LocalizationResource = { menuAction__edit: undefined, menuAction__remove: undefined, primaryButton__configure: undefined, + primaryButton__continueConfiguration: undefined, removeDialog: { confirmButton: undefined, subtitle: undefined, diff --git a/packages/localizations/src/te-IN.ts b/packages/localizations/src/te-IN.ts index 341a072a8c1..d6a2ba18690 100644 --- a/packages/localizations/src/te-IN.ts +++ b/packages/localizations/src/te-IN.ts @@ -1447,6 +1447,7 @@ export const teIN: LocalizationResource = { }, directorySyncSection: { badge__active: undefined, + badge__inProgress: undefined, badge__inactive: undefined, badge__ssoRequired: undefined, description: undefined, @@ -1456,6 +1457,7 @@ export const teIN: LocalizationResource = { menuAction__edit: undefined, menuAction__remove: undefined, primaryButton__configure: undefined, + primaryButton__continueConfiguration: undefined, removeDialog: { confirmButton: undefined, subtitle: undefined, diff --git a/packages/localizations/src/th-TH.ts b/packages/localizations/src/th-TH.ts index 51dcfa5b0e9..08816e8eade 100644 --- a/packages/localizations/src/th-TH.ts +++ b/packages/localizations/src/th-TH.ts @@ -1438,6 +1438,7 @@ export const thTH: LocalizationResource = { }, directorySyncSection: { badge__active: undefined, + badge__inProgress: undefined, badge__inactive: undefined, badge__ssoRequired: undefined, description: undefined, @@ -1447,6 +1448,7 @@ export const thTH: LocalizationResource = { menuAction__edit: undefined, menuAction__remove: undefined, primaryButton__configure: undefined, + primaryButton__continueConfiguration: undefined, removeDialog: { confirmButton: undefined, subtitle: undefined, diff --git a/packages/localizations/src/tr-TR.ts b/packages/localizations/src/tr-TR.ts index 50d01c57240..dd65bb3f036 100644 --- a/packages/localizations/src/tr-TR.ts +++ b/packages/localizations/src/tr-TR.ts @@ -1437,6 +1437,7 @@ export const trTR: LocalizationResource = { }, directorySyncSection: { badge__active: undefined, + badge__inProgress: undefined, badge__inactive: undefined, badge__ssoRequired: undefined, description: undefined, @@ -1446,6 +1447,7 @@ export const trTR: LocalizationResource = { menuAction__edit: undefined, menuAction__remove: undefined, primaryButton__configure: undefined, + primaryButton__continueConfiguration: undefined, removeDialog: { confirmButton: undefined, subtitle: undefined, diff --git a/packages/localizations/src/uk-UA.ts b/packages/localizations/src/uk-UA.ts index 9125e2b878c..6f3de557fb1 100644 --- a/packages/localizations/src/uk-UA.ts +++ b/packages/localizations/src/uk-UA.ts @@ -1437,6 +1437,7 @@ export const ukUA: LocalizationResource = { }, directorySyncSection: { badge__active: undefined, + badge__inProgress: undefined, badge__inactive: undefined, badge__ssoRequired: undefined, description: undefined, @@ -1446,6 +1447,7 @@ export const ukUA: LocalizationResource = { menuAction__edit: undefined, menuAction__remove: undefined, primaryButton__configure: undefined, + primaryButton__continueConfiguration: undefined, removeDialog: { confirmButton: undefined, subtitle: undefined, diff --git a/packages/localizations/src/vi-VN.ts b/packages/localizations/src/vi-VN.ts index 1b5a87abe44..47f0d45ce9e 100644 --- a/packages/localizations/src/vi-VN.ts +++ b/packages/localizations/src/vi-VN.ts @@ -1445,6 +1445,7 @@ export const viVN: LocalizationResource = { }, directorySyncSection: { badge__active: undefined, + badge__inProgress: undefined, badge__inactive: undefined, badge__ssoRequired: undefined, description: undefined, @@ -1454,6 +1455,7 @@ export const viVN: LocalizationResource = { menuAction__edit: undefined, menuAction__remove: undefined, primaryButton__configure: undefined, + primaryButton__continueConfiguration: undefined, removeDialog: { confirmButton: undefined, subtitle: undefined, diff --git a/packages/localizations/src/zh-CN.ts b/packages/localizations/src/zh-CN.ts index 3e65172457b..bb8708b609b 100644 --- a/packages/localizations/src/zh-CN.ts +++ b/packages/localizations/src/zh-CN.ts @@ -1430,6 +1430,7 @@ export const zhCN: LocalizationResource = { }, directorySyncSection: { badge__active: undefined, + badge__inProgress: undefined, badge__inactive: undefined, badge__ssoRequired: undefined, description: undefined, @@ -1439,6 +1440,7 @@ export const zhCN: LocalizationResource = { menuAction__edit: undefined, menuAction__remove: undefined, primaryButton__configure: undefined, + primaryButton__continueConfiguration: undefined, removeDialog: { confirmButton: undefined, subtitle: undefined, diff --git a/packages/localizations/src/zh-TW.ts b/packages/localizations/src/zh-TW.ts index 3d905a96077..b3c0bad7e4a 100644 --- a/packages/localizations/src/zh-TW.ts +++ b/packages/localizations/src/zh-TW.ts @@ -1433,6 +1433,7 @@ export const zhTW: LocalizationResource = { }, directorySyncSection: { badge__active: undefined, + badge__inProgress: undefined, badge__inactive: undefined, badge__ssoRequired: undefined, description: undefined, @@ -1442,6 +1443,7 @@ export const zhTW: LocalizationResource = { menuAction__edit: undefined, menuAction__remove: undefined, primaryButton__configure: undefined, + primaryButton__continueConfiguration: undefined, removeDialog: { confirmButton: undefined, subtitle: undefined, diff --git a/packages/shared/src/types/localization.ts b/packages/shared/src/types/localization.ts index 446d328a8e5..b4f1be6a9b8 100644 --- a/packages/shared/src/types/localization.ts +++ b/packages/shared/src/types/localization.ts @@ -1351,10 +1351,12 @@ export type __internal_LocalizationResource = { title: LocalizationValue; badge__ssoRequired: LocalizationValue; badge__active: LocalizationValue; + badge__inProgress: LocalizationValue; badge__inactive: LocalizationValue; description: LocalizationValue; error__load: LocalizationValue; primaryButton__configure: LocalizationValue; + primaryButton__continueConfiguration: LocalizationValue; menuAction__edit: LocalizationValue; menuAction__activate: LocalizationValue; menuAction__deactivate: LocalizationValue; diff --git a/packages/ui/src/components/ConfigureDirectorySync/ConfigureDirectorySyncWizard.tsx b/packages/ui/src/components/ConfigureDirectorySync/ConfigureDirectorySyncWizard.tsx index 61b2cf7cfa5..ab277d3263a 100644 --- a/packages/ui/src/components/ConfigureDirectorySync/ConfigureDirectorySyncWizard.tsx +++ b/packages/ui/src/components/ConfigureDirectorySync/ConfigureDirectorySyncWizard.tsx @@ -34,16 +34,19 @@ export const ConfigureDirectorySyncWizard = (props: ConfigureDirectorySyncWizard ); const WizardInternal = ({ title }: ConfigureDirectorySyncWizardProps): JSX.Element => { - const { connection, directory, isLoading } = useConfigureDirectorySync(); + const { connection, directory, providerMeta, isLoading } = useConfigureDirectorySync(); const hasSsoConnection = Boolean(connection); const hasDirectory = Boolean(directory); + // A pull directory exists before its credentials do, and the configure step + // is where they are collected, so it is not done until they are stored. + const hasCredentials = providerMeta?.mode !== 'pull' || Boolean(directory?.credentialsConfigured); const steps = React.useMemo( () => [ { id: 'configure', label: localizationKeys('configureDirectorySync.stepper.configure'), - isComplete: () => hasSsoConnection && hasDirectory, + isComplete: () => hasSsoConnection && hasDirectory && hasCredentials, }, { id: 'attributes', @@ -61,7 +64,7 @@ const WizardInternal = ({ title }: ConfigureDirectorySyncWizardProps): JSX.Eleme isReachable: () => hasSsoConnection && hasDirectory, }, ], - [hasSsoConnection, hasDirectory], + [hasSsoConnection, hasDirectory, hasCredentials], ); if (isLoading) { diff --git a/packages/ui/src/components/ConfigureDirectorySync/SecurityDirectorySyncSection.tsx b/packages/ui/src/components/ConfigureDirectorySync/SecurityDirectorySyncSection.tsx index 60871ff550f..4af1cf9c7b0 100644 --- a/packages/ui/src/components/ConfigureDirectorySync/SecurityDirectorySyncSection.tsx +++ b/packages/ui/src/components/ConfigureDirectorySync/SecurityDirectorySyncSection.tsx @@ -23,12 +23,17 @@ type SecurityDirectorySyncSectionProps = { onConfigure: () => void; }; -type DirectorySyncStatus = 'unconfigured' | 'active' | 'inactive'; +type DirectorySyncStatus = 'unconfigured' | 'in_progress' | 'active' | 'inactive'; +type ConfiguredDirectorySyncStatus = Exclude; const STATUS_BADGES: Record< - Exclude, + ConfiguredDirectorySyncStatus, { colorScheme: 'primary' | 'success' | 'warning'; label: LocalizationKey } > = { + in_progress: { + colorScheme: 'primary', + label: localizationKeys('organizationProfile.securityPage.directorySyncSection.badge__inProgress'), + }, active: { colorScheme: 'primary', label: localizationKeys('organizationProfile.securityPage.directorySyncSection.badge__active'), @@ -69,7 +74,16 @@ export const SecurityDirectorySyncSection = ({ const isLoading = isLoadingConnections || (Boolean(connection) && isLoadingDirectory); const error = connectionsError ?? directoryError; - const status: DirectorySyncStatus = directory ? (directory.enabled ? 'active' : 'inactive') : 'unconfigured'; + // A pull directory (Google Workspace) exists before its credentials do and + // cannot be enabled until they are stored, so that outranks the enabled flag, + // as in the SSO section. Push providers get `null` here: not applicable. + const status: DirectorySyncStatus = !directory + ? 'unconfigured' + : directory.credentialsConfigured === false + ? 'in_progress' + : directory.enabled + ? 'active' + : 'inactive'; return ( updateDirectorySync({ enabled })} onDelete={deleteDirectorySync} organizationName={organizationName} @@ -137,7 +151,7 @@ export const SecurityDirectorySyncSection = ({ }; type ConfiguredContentProps = { - isActive: boolean; + status: ConfiguredDirectorySyncStatus; updateEnabled: (enabled: boolean) => Promise; onDelete: () => Promise; organizationName: string; @@ -146,7 +160,7 @@ type ConfiguredContentProps = { }; const ConfiguredContent = ({ - isActive, + status, updateEnabled, onDelete, organizationName, @@ -173,7 +187,7 @@ const ConfiguredContent = ({ } }; - const badge = STATUS_BADGES[isActive ? 'active' : 'inactive']; + const badge = STATUS_BADGES[status]; return ( @@ -194,19 +208,30 @@ const ConfiguredContent = ({ label: localizationKeys('organizationProfile.securityPage.directorySyncSection.menuAction__edit'), onClick: onConfigure, }, - isActive - ? { - label: localizationKeys( - 'organizationProfile.securityPage.directorySyncSection.menuAction__deactivate', - ), - isDisabled: card.isLoading, - onClick: () => void handleUpdateEnabled(false), - } - : { - label: localizationKeys('organizationProfile.securityPage.directorySyncSection.menuAction__activate'), - isDisabled: card.isLoading, - onClick: () => void handleUpdateEnabled(true), - }, + // Activate is only offered where it can succeed: the server refuses + // it for an in-progress directory until the credentials are stored. + ...(status === 'active' + ? [ + { + label: localizationKeys( + 'organizationProfile.securityPage.directorySyncSection.menuAction__deactivate', + ), + isDisabled: card.isLoading, + onClick: () => void handleUpdateEnabled(false), + }, + ] + : []), + ...(status === 'inactive' + ? [ + { + label: localizationKeys( + 'organizationProfile.securityPage.directorySyncSection.menuAction__activate', + ), + isDisabled: card.isLoading, + onClick: () => void handleUpdateEnabled(true), + }, + ] + : []), { label: localizationKeys('organizationProfile.securityPage.directorySyncSection.menuAction__remove'), isDestructive: true, @@ -216,6 +241,19 @@ const ConfiguredContent = ({ /> + {status === 'in_progress' && ( + + + ({ paddingInlineStart: `calc(${t.space.$2x5} + ${t.sizes.$4} + ${t.space.$2})` })} /> + + )} + {card.error} { expect(screen.getByText('Not configured')).toBeInTheDocument(); }); + it.each([ + { credentialsConfigured: false, ticked: 0, outcome: 'leaves the configure step unticked' }, + { credentialsConfigured: true, ticked: 1, outcome: 'ticks the configure step' }, + ])( + 'for a Google Workspace directory with credentialsConfigured=$credentialsConfigured, $outcome', + async ({ credentialsConfigured, ticked }) => { + const { wrapper, fixtures } = await createFixtures(withDirectorySyncFixtures); + fixtures.clerk.organization?.getEnterpriseConnections.mockResolvedValue([googleConnection]); + fixtures.clerk.organization?.getDirectorySync.mockResolvedValue(googleDirectory({ credentialsConfigured })); + + const { container } = render(, { wrapper }); + + await screen.findByRole('button', { name: 'Upload JSON key' }); + + // The stepper used to tick step 1 as soon as the directory row existed, + // which for Google is before the credentials it collects are stored. A + // completed bullet renders a checkmark instead of its digit. + const bullets = Array.from(container.querySelectorAll('.cl-configureSSOStepperItemBullet')); + expect(bullets).toHaveLength(4); + expect(bullets.filter(el => !/\d/.test(el.textContent ?? ''))).toHaveLength(ticked); + }, + ); + it('sends the uploaded key and admin email, and does not keep the key afterwards', async () => { const { wrapper, fixtures } = await createFixtures(withDirectorySyncFixtures); fixtures.clerk.organization?.getEnterpriseConnections.mockResolvedValue([googleConnection]); diff --git a/packages/ui/src/components/OrganizationProfile/__tests__/OrganizationSecurityPage.test.tsx b/packages/ui/src/components/OrganizationProfile/__tests__/OrganizationSecurityPage.test.tsx index 81f9ca5f8db..a6a24441c66 100644 --- a/packages/ui/src/components/OrganizationProfile/__tests__/OrganizationSecurityPage.test.tsx +++ b/packages/ui/src/components/OrganizationProfile/__tests__/OrganizationSecurityPage.test.tsx @@ -631,6 +631,69 @@ describe('OrganizationSecurityPage', () => { ).not.toBeInTheDocument(); }); + it('shows a Google Workspace directory without credentials as In Progress with Continue configuration', async () => { + const { wrapper, fixtures } = await createFixtures(withDirectorySyncFixtures); + withActiveConnection(fixtures); + fixtures.clerk.organization?.getEnterpriseConnections.mockResolvedValue([ + configuredConnection({ active: true, provider: 'saml_google' }), + ]); + fixtures.clerk.organization?.getDirectorySync.mockResolvedValue( + directory({ provider: 'google', enabled: false, credentialsConfigured: false }), + ); + + const { userEvent } = renderPage(wrapper); + + // The row used to read "Inactive" and offer Activate, which the server + // refuses until the service account key is stored, so the admin saw a + // dead switch instead of the step still to do. + expect(await screen.findByText('In Progress')).toBeInTheDocument(); + expect(section('directorySync').queryByText('Inactive')).not.toBeInTheDocument(); + expect(section('directorySync').getByRole('button', { name: 'Continue configuration' })).toBeEnabled(); + + await openDirectorySyncMenu(userEvent); + + expect(screen.getByRole('menuitem', { name: 'Edit' })).toBeInTheDocument(); + expect(screen.getByRole('menuitem', { name: 'Remove' })).toBeInTheDocument(); + expect(screen.queryByRole('menuitem', { name: 'Activate' })).not.toBeInTheDocument(); + expect(screen.queryByRole('menuitem', { name: 'Deactivate' })).not.toBeInTheDocument(); + }); + + it('opens the Directory Sync wizard from Continue configuration', async () => { + const { wrapper, fixtures } = await createFixtures(withDirectorySyncFixtures); + withActiveConnection(fixtures); + fixtures.clerk.organization?.getEnterpriseConnections.mockResolvedValue([ + configuredConnection({ active: true, provider: 'saml_google' }), + ]); + fixtures.clerk.organization?.getDirectorySync.mockResolvedValue( + directory({ provider: 'google', enabled: false, credentialsConfigured: false }), + ); + + const { userEvent } = renderPage(wrapper); + + await userEvent.click(await screen.findByRole('button', { name: 'Continue configuration' })); + + // The wizard replaces the overview, so the row menu goes away. + await waitFor(() => expect(screen.queryByRole('button', { name: /open menu/i })).not.toBeInTheDocument()); + }); + + it('keeps Activate for a disabled push directory, whose credentials do not apply', async () => { + const { wrapper, fixtures } = await createFixtures(withDirectorySyncFixtures); + withActiveConnection(fixtures); + fixtures.clerk.organization?.getDirectorySync.mockResolvedValue( + directory({ enabled: false, credentialsConfigured: null }), + ); + + const { userEvent } = renderPage(wrapper); + + // The SSO connection above is active, so "Inactive" can only be the directory badge. + expect(await screen.findByText('Inactive')).toBeInTheDocument(); + expect(screen.queryByRole('button', { name: 'Continue configuration' })).not.toBeInTheDocument(); + + await openDirectorySyncMenu(userEvent); + + expect(screen.getByRole('menuitem', { name: 'Activate' })).toBeInTheDocument(); + }); + it('lists Edit and Deactivate for an active directory', async () => { const { wrapper, fixtures } = await createFixtures(withDirectorySyncFixtures); withActiveConnection(fixtures);