Skip to content

Commit 6bc07fb

Browse files
committed
Add changeset
1 parent 08a884e commit 6bc07fb

File tree

8 files changed

+51
-16
lines changed

8 files changed

+51
-16
lines changed

.changeset/upset-results-win.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
---
2+
'@clerk/localizations': minor
3+
'@clerk/clerk-js': minor
4+
'@clerk/types': minor
5+
---
6+
7+
Introduce experimental step to choose enterprise connection on sign-in/sign-up

packages/clerk-js/src/core/resources/SignIn.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -222,6 +222,7 @@ export class SignIn extends BaseResource implements SignInResource {
222222
redirectUrl: params.redirectUrl,
223223
actionCompleteRedirectUrl: params.actionCompleteRedirectUrl,
224224
oidcPrompt: params.oidcPrompt,
225+
enterpriseConnectionId: params.enterpriseConnectionId,
225226
} as EnterpriseSSOConfig;
226227
break;
227228
default:
@@ -308,7 +309,8 @@ export class SignIn extends BaseResource implements SignInResource {
308309
params: AuthenticateWithRedirectParams,
309310
navigateCallback: (url: URL | string) => void,
310311
): Promise<void> => {
311-
const { strategy, redirectUrlComplete, identifier, oidcPrompt, continueSignIn } = params || {};
312+
const { strategy, redirectUrlComplete, identifier, oidcPrompt, continueSignIn, enterpriseConnectionId } =
313+
params || {};
312314
const actionCompleteRedirectUrl = redirectUrlComplete;
313315

314316
const redirectUrl = SignIn.clerk.buildUrlWithAuth(params.redirectUrl);
@@ -328,6 +330,7 @@ export class SignIn extends BaseResource implements SignInResource {
328330
redirectUrl,
329331
actionCompleteRedirectUrl,
330332
oidcPrompt,
333+
enterpriseConnectionId,
331334
});
332335
}
333336

packages/clerk-js/src/core/resources/SignUp.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -377,6 +377,7 @@ export class SignUp extends BaseResource implements SignUpResource {
377377
emailAddress,
378378
legalAccepted,
379379
oidcPrompt,
380+
enterpriseConnectionId,
380381
} = params;
381382

382383
const redirectUrlWithAuthToken = SignUp.clerk.buildUrlWithAuth(redirectUrl);
@@ -390,6 +391,7 @@ export class SignUp extends BaseResource implements SignUpResource {
390391
emailAddress,
391392
legalAccepted,
392393
oidcPrompt,
394+
enterpriseConnectionId,
393395
};
394396
return continueSignUp && this.id ? this.update(authParams) : this.create(authParams);
395397
};
@@ -542,7 +544,7 @@ export class SignUp extends BaseResource implements SignUpResource {
542544
return false;
543545
}
544546

545-
public __experimental_getEnterpriseConnections(): Promise<SignUpEnterpriseConnectionResource[]> {
547+
__experimental_getEnterpriseConnections = (): Promise<SignUpEnterpriseConnectionResource[]> => {
546548
return BaseResource._fetch({
547549
path: `/client/sign_ups/${this.id}/enterprise_connections`,
548550
method: 'GET',
@@ -551,7 +553,7 @@ export class SignUp extends BaseResource implements SignUpResource {
551553

552554
return enterpriseConnections.map(enterpriseConnection => new SignUpEnterpriseConnection(enterpriseConnection));
553555
});
554-
}
556+
};
555557
}
556558

557559
class SignUpFuture implements SignUpFutureResource {

packages/clerk-js/src/ui/components/SignIn/SignInChooseEnterpriseConnection.tsx

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { useClerk } from '@clerk/shared/react/index';
12
import type { ComponentType } from 'react';
23

34
import { buildSSOCallbackURL, withRedirect } from '@/ui/common';
@@ -12,10 +13,12 @@ import { hasMultipleEnterpriseConnections } from './shared';
1213
* @experimental
1314
*/
1415
const SignInChooseEnterpriseConnectionInternal = () => {
15-
const signIn = useCoreSignIn();
1616
const ctx = useSignInContext();
1717
const { displayConfig } = useEnvironment();
1818

19+
const clerk = useClerk();
20+
const signIn = clerk.client.signIn;
21+
1922
if (!hasMultipleEnterpriseConnections(signIn.supportedFirstFactors)) {
2023
// This should not happen due to the HOC guard, but provides type safety
2124
return null;

packages/clerk-js/src/ui/components/SignUp/SignUpChooseEnterpriseConnection.tsx

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,28 @@
1+
import { useClerk } from '@clerk/shared/react/index';
2+
3+
import { withRedirectToAfterSignUp } from '@/ui/common';
14
import { ChooseEnterpriseConnectionCard } from '@/ui/common/ChooseEnterpriseConnectionCard';
2-
import { useCoreSignUp, useSignUpContext } from '@/ui/contexts';
5+
import { useSignUpContext } from '@/ui/contexts';
36
import { Flow, localizationKeys } from '@/ui/customizables';
7+
import { withCardStateProvider } from '@/ui/elements/contexts';
48
import { LoadingCard } from '@/ui/elements/LoadingCard';
59
import { useFetch } from '@/ui/hooks';
610

7-
/**
8-
* @experimental
9-
*/
10-
export const SignUpChooseEnterpriseConnection = () => {
11-
const signUp = useCoreSignUp();
11+
const SignUpChooseEnterpriseConnectionInternal = () => {
12+
const clerk = useClerk();
1213
const ctx = useSignUpContext();
14+
15+
const signUp = clerk.client.signUp;
1316
const { data: enterpriseConnections, isLoading } = useFetch(signUp?.__experimental_getEnterpriseConnections, {
1417
signUpId: signUp.id,
1518
});
1619

1720
const handleEnterpriseSSO = (enterpriseConnectionId: string) => {
18-
if (!signUp.emailAddress) {
19-
return;
20-
}
21-
2221
const redirectUrl = ctx.ssoCallbackUrl;
2322
const redirectUrlComplete = ctx.afterSignUpUrl || '/';
2423

2524
void signUp.authenticateWithRedirect({
2625
strategy: 'enterprise_sso',
27-
identifier: signUp.emailAddress,
2826
redirectUrl,
2927
redirectUrlComplete,
3028
continueSignUp: true,
@@ -51,3 +49,10 @@ export const SignUpChooseEnterpriseConnection = () => {
5149
</Flow.Part>
5250
);
5351
};
52+
53+
/**
54+
* @experimental
55+
*/
56+
export const SignUpChooseEnterpriseConnection = withRedirectToAfterSignUp(
57+
withCardStateProvider(SignUpChooseEnterpriseConnectionInternal),
58+
);

packages/clerk-js/src/ui/components/SignUp/SignUpStart.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -364,7 +364,7 @@ function SignUpStartInternal(): JSX.Element {
364364
isClerkAPIResponseError(err) &&
365365
err.errors?.[0]?.code === 'enterprise_connection_id_is_required_with_multiple_connections'
366366
) {
367-
return navigate('../choose-enterprise-connection');
367+
return navigate('./choose-enterprise-connection');
368368
}
369369

370370
return handleError(err, fieldsToSubmit, card.setError);

packages/types/src/factors.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,10 @@ export type EnterpriseSSOConfig = EnterpriseSSOFactor & {
124124
redirectUrl: string;
125125
actionCompleteRedirectUrl: string;
126126
oidcPrompt?: string;
127+
/**
128+
* @experimental
129+
*/
130+
enterpriseConnectionId?: string;
127131
};
128132

129133
export type PhoneCodeSecondFactorConfig = {

packages/types/src/signIn.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,12 @@ export interface SignInResource extends ClerkResource {
7979
createEmailLinkFlow: () => CreateEmailLinkFlowReturn<SignInStartEmailLinkFlowParams, SignInResource>;
8080

8181
validatePassword: (password: string, callbacks?: ValidatePasswordCallbacks) => void;
82+
83+
/**
84+
* @experimental
85+
*/
86+
__experimental_getEnterpriseConnections: () => Promise<SignInEnterpriseConnectionResource[]>;
87+
8288
/**
8389
* @internal
8490
*/
@@ -106,3 +112,8 @@ export interface SignInJSON extends ClerkResourceJSON {
106112
second_factor_verification: VerificationJSON | null;
107113
created_session_id: string | null;
108114
}
115+
116+
export interface SignInEnterpriseConnectionResource {
117+
id: string;
118+
name: string;
119+
}

0 commit comments

Comments
 (0)