Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
5801a06
feat(clerk-js): Change the default path of afterSignOutUrl
octoper Nov 2, 2023
ac94a63
feat(clerk-js,shared): Use default options if nothing passed when loa…
octoper Nov 2, 2023
bb62c3c
chore(repo): Update NextJS playground
octoper Nov 2, 2023
3255cf4
chore(clerk-js): Fix typo
octoper Nov 2, 2023
b7775b3
chore(repo): Added Changeset
octoper Nov 2, 2023
0d4204e
chore(shared): Fixed types for getNonUndefinedValues and added tests
octoper Nov 7, 2023
6e4ef19
fix(remix): Utility function getEnvVariable return undefined instead …
octoper Nov 7, 2023
c856132
fix(clerk-js): Give empty object when options are undefined
octoper Nov 7, 2023
936fdf2
test(shared): Fixed test for getNonUndefinedValues utility function
octoper Nov 8, 2023
060401b
fix(clerk-js): Apply changes to ui.retheme
octoper Nov 13, 2023
016da40
fix(clerk-js): Add missing import
octoper Nov 13, 2023
6c23963
fix(clerk-js): Add missing import
octoper Nov 13, 2023
2260eb9
test(clerk-js): Update Clerk redirect tests
octoper Nov 14, 2023
c58c6f0
chore(repo): Update Changeset
octoper Nov 15, 2023
e34efdd
chore(remix): Update return type comment
octoper Nov 15, 2023
09ae7be
fix(clerk-js): Use the defaults for afterSignInUrl and afterSignUpUrl…
octoper Nov 16, 2023
58aba6a
chore(remix): Update return type of getEnvVariable utility function
octoper Nov 16, 2023
4fb3201
test(clerk-js): Update test for SignInStart component
octoper Nov 16, 2023
b47a5c0
test(clerk-js): Update test for SignInStart component in ui.retheme
octoper Nov 16, 2023
e8ebc75
feat(clerk-js): Removed display config values
octoper Nov 16, 2023
74b0d29
chore(repo): Apply Prettier formating
octoper Nov 27, 2023
59ab8ae
chore(shared): Remove unused import from tests
octoper Nov 29, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .changeset/spotty-boxes-do.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---
'@clerk/clerk-js': major
'@clerk/shared': patch
---

Change the default behavior of `afterSignOutUrl`, `afterSignIn` and `afterSignUp` props to be redirected to `/` instead of the Account Portal defined URL.
8 changes: 2 additions & 6 deletions packages/clerk-js/src/core/clerk.ts
Original file line number Diff line number Diff line change
Expand Up @@ -915,13 +915,9 @@ export class Clerk implements ClerkInterface {
buildURL({ base: displayConfig.signInUrl, hashPath: '/reset-password' }, { stringify: true }),
);

const navigateAfterSignIn = makeNavigate(
params.afterSignInUrl || params.redirectUrl || displayConfig.afterSignInUrl,
);
const navigateAfterSignIn = makeNavigate(params.afterSignInUrl || params.redirectUrl || '/');

const navigateAfterSignUp = makeNavigate(
params.afterSignUpUrl || params.redirectUrl || displayConfig.afterSignUpUrl,
);
const navigateAfterSignUp = makeNavigate(params.afterSignUpUrl || params.redirectUrl || '/');

const navigateToContinueSignUp = makeNavigate(
params.continueSignUpUrl ||
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ export const SignInSocialButtons = React.memo((props: SocialButtonsProps) => {
const ctx = useSignInContext();
const signIn = useCoreSignIn();
const redirectUrl = buildSSOCallbackURL(ctx, displayConfig.signInUrl);
const redirectUrlComplete = ctx.afterSignInUrl || displayConfig.afterSignInUrl;
const redirectUrlComplete = ctx.afterSignInUrl || '/';

return (
<SocialButtons
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -236,7 +236,7 @@ export function _SignInStart(): JSX.Element {

const authenticateWithSaml = async () => {
const redirectUrl = buildSSOCallbackURL(ctx, displayConfig.signInUrl);
const redirectUrlComplete = ctx.afterSignInUrl || displayConfig.afterSignInUrl;
const redirectUrlComplete = ctx.afterSignInUrl || '/';

return signIn.authenticateWithRedirect({
strategy: 'saml',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -139,8 +139,8 @@ describe('SignInStart', () => {
expect(fixtures.signIn.create).toHaveBeenCalled();
expect(fixtures.signIn.authenticateWithRedirect).toHaveBeenCalledWith({
strategy: 'saml',
redirectUrl: 'http://localhost/#/sso-callback',
redirectUrlComplete: 'https://dashboard.clerk.com',
redirectUrl: 'http://localhost/#/sso-callback?redirect_url=http%3A%2F%2Flocalhost%2F',
redirectUrlComplete: '/',
});
});
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ export const SignUpSocialButtons = React.memo((props: SignUpSocialButtonsProps)
const ctx = useSignUpContext();
const signUp = useCoreSignUp();
const redirectUrl = buildSSOCallbackURL(ctx, displayConfig.signUpUrl);
const redirectUrlComplete = ctx.afterSignUpUrl || displayConfig.afterSignUpUrl;
const redirectUrlComplete = ctx.afterSignUpUrl || '/';
const { continueSignUp = false, ...rest } = props;

return (
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -211,7 +211,7 @@ function _SignUpStart(): JSX.Element {
card.setError(undefined);

const redirectUrl = buildSSOCallbackURL(ctx, displayConfig.signUpUrl);
const redirectUrlComplete = ctx.afterSignUpUrl || displayConfig.afterSignUpUrl;
const redirectUrlComplete = ctx.afterSignUpUrl || '/';

return signUp
.create(buildRequest(fieldsToSubmit))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -69,17 +69,15 @@ export const useSignUpContext = (): SignUpContextType => {
queryParams,
ctx,
options,
displayConfig,
}),
}) || '/',
);

const afterSignInUrl = clerk.buildUrlWithAuth(
pickRedirectionProp('afterSignInUrl', {
queryParams,
ctx,
options,
displayConfig,
}),
}) || '/',
);

const navigateAfterSignUp = () => navigate(afterSignUpUrl);
Expand Down Expand Up @@ -145,17 +143,15 @@ export const useSignInContext = (): SignInContextType => {
queryParams,
ctx,
options,
displayConfig,
}),
}) || '/',
);

const afterSignInUrl = clerk.buildUrlWithAuth(
pickRedirectionProp('afterSignInUrl', {
queryParams,
ctx,
options,
displayConfig,
}),
}) || '/',
);

const navigateAfterSignIn = () => navigate(afterSignInUrl);
Expand Down Expand Up @@ -236,7 +232,7 @@ export const useUserButtonContext = () => {
const afterMultiSessionSingleSignOutUrl = ctx.afterMultiSessionSingleSignOutUrl || displayConfig.afterSignOutOneUrl;
const navigateAfterMultiSessionSingleSignOut = () => clerk.redirectWithAuth(afterMultiSessionSingleSignOutUrl);

const afterSignOutUrl = ctx.afterSignOutUrl || displayConfig.afterSignOutAllUrl;
const afterSignOutUrl = ctx.afterSignOutUrl || '/';
const navigateAfterSignOut = () => navigate(afterSignOutUrl);

const afterSwitchSessionUrl = ctx.afterSwitchSessionUrl || displayConfig.afterSwitchSessionUrl;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ export const SignInSocialButtons = React.memo((props: SocialButtonsProps) => {
const ctx = useSignInContext();
const signIn = useCoreSignIn();
const redirectUrl = buildSSOCallbackURL(ctx, displayConfig.signInUrl);
const redirectUrlComplete = ctx.afterSignInUrl || displayConfig.afterSignInUrl;
const redirectUrlComplete = ctx.afterSignInUrl || '/';

return (
<SocialButtons
Expand Down
2 changes: 1 addition & 1 deletion packages/clerk-js/src/ui/components/SignIn/SignInStart.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -236,7 +236,7 @@ export function _SignInStart(): JSX.Element {

const authenticateWithSaml = async () => {
const redirectUrl = buildSSOCallbackURL(ctx, displayConfig.signInUrl);
const redirectUrlComplete = ctx.afterSignInUrl || displayConfig.afterSignInUrl;
const redirectUrlComplete = ctx.afterSignInUrl || '/';

return signIn.authenticateWithRedirect({
strategy: 'saml',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -138,8 +138,8 @@ describe('SignInStart', () => {
expect(fixtures.signIn.create).toHaveBeenCalled();
expect(fixtures.signIn.authenticateWithRedirect).toHaveBeenCalledWith({
strategy: 'saml',
redirectUrl: 'http://localhost/#/sso-callback',
redirectUrlComplete: 'https://dashboard.clerk.com',
redirectUrl: 'http://localhost/#/sso-callback?redirect_url=http%3A%2F%2Flocalhost%2F',
redirectUrlComplete: '/',
});
});
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ export const SignUpSocialButtons = React.memo((props: SignUpSocialButtonsProps)
const ctx = useSignUpContext();
const signUp = useCoreSignUp();
const redirectUrl = buildSSOCallbackURL(ctx, displayConfig.signUpUrl);
const redirectUrlComplete = ctx.afterSignUpUrl || displayConfig.afterSignUpUrl;
const redirectUrlComplete = ctx.afterSignUpUrl || '/';
const { continueSignUp = false, ...rest } = props;

return (
Expand Down
2 changes: 1 addition & 1 deletion packages/clerk-js/src/ui/components/SignUp/SignUpStart.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -211,7 +211,7 @@ function _SignUpStart(): JSX.Element {
card.setError(undefined);

const redirectUrl = buildSSOCallbackURL(ctx, displayConfig.signUpUrl);
const redirectUrlComplete = ctx.afterSignUpUrl || displayConfig.afterSignUpUrl;
const redirectUrlComplete = ctx.afterSignUpUrl || '/';

return signUp
.create(buildRequest(fieldsToSubmit))
Expand Down
14 changes: 5 additions & 9 deletions packages/clerk-js/src/ui/contexts/ClerkUIComponentsContext.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -69,17 +69,15 @@ export const useSignUpContext = (): SignUpContextType => {
queryParams,
ctx,
options,
displayConfig,
}),
}) || '/',
);

const afterSignInUrl = clerk.buildUrlWithAuth(
pickRedirectionProp('afterSignInUrl', {
queryParams,
ctx,
options,
displayConfig,
}),
}) || '/',
);

const navigateAfterSignUp = () => navigate(afterSignUpUrl);
Expand Down Expand Up @@ -145,17 +143,15 @@ export const useSignInContext = (): SignInContextType => {
queryParams,
ctx,
options,
displayConfig,
}),
}) || '/',
);

const afterSignInUrl = clerk.buildUrlWithAuth(
pickRedirectionProp('afterSignInUrl', {
queryParams,
ctx,
options,
displayConfig,
}),
}) || '/',
);

const navigateAfterSignIn = () => navigate(afterSignInUrl);
Expand Down Expand Up @@ -236,7 +232,7 @@ export const useUserButtonContext = () => {
const afterMultiSessionSingleSignOutUrl = ctx.afterMultiSessionSingleSignOutUrl || displayConfig.afterSignOutOneUrl;
const navigateAfterMultiSessionSingleSignOut = () => clerk.redirectWithAuth(afterMultiSessionSingleSignOutUrl);

const afterSignOutUrl = ctx.afterSignOutUrl || displayConfig.afterSignOutAllUrl;
const afterSignOutUrl = ctx.afterSignOutUrl || '/';
const navigateAfterSignOut = () => navigate(afterSignOutUrl);

const afterSwitchSessionUrl = ctx.afterSwitchSessionUrl || displayConfig.afterSwitchSessionUrl;
Expand Down
9 changes: 1 addition & 8 deletions packages/clerk-js/src/utils/pagesToOffset.ts
Original file line number Diff line number Diff line change
@@ -1,13 +1,6 @@
import { getNonUndefinedValues } from '@clerk/shared';
import type { ClerkPaginationParams, ClerkPaginationRequest } from '@clerk/types';

function getNonUndefinedValues<T>(obj: Record<string, T>): Record<string, T> {
return Object.keys(obj).reduce((result, key) => {
if (obj[key] !== undefined) {
result[key] = obj[key];
}
return result;
}, {} as Record<string, T>);
}
export function convertPageToOffset<T extends ClerkPaginationParams | undefined>(
pageParams: T,
): ClerkPaginationRequest {
Expand Down
2 changes: 1 addition & 1 deletion packages/remix/src/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ export function assertValidClerkState(val: any): asserts val is ClerkState | und
* Utility function to get env variables across Node and Edge runtimes.
*
* @param name
* @returns
* @returns string
*/
export const getEnvVariable = (name: string, context: AppLoadContext | undefined): string => {
// Node envs
Expand Down
54 changes: 53 additions & 1 deletion packages/shared/src/__tests__/underscore.test.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,12 @@
import { deepCamelToSnake, deepSnakeToCamel, isIPV4Address, isTruthy, titleize, toSentence } from '../underscore';
import {
deepCamelToSnake,
deepSnakeToCamel,
getNonUndefinedValues,
isIPV4Address,
isTruthy,
titleize,
toSentence,
} from '../underscore';

describe('toSentence', () => {
it('returns a single item as-is', () => {
Expand Down Expand Up @@ -204,3 +212,47 @@ describe(`isTruthy`, () => {
expect(isTruthy(`foobar`)).toBe(false);
});
});

describe('getNonUndefinedValues', () => {
it(`removes all the undefined values from the object`, () => {
const obj = {
a: 1,
b: undefined,
c: null,
};
expect(getNonUndefinedValues(obj)).toStrictEqual({
a: 1,
c: null,
});
});

it(`returns the same object if no undefined value exists`, () => {
const obj = {
a: 1,
b: 'foo',
c: null,
};
expect(getNonUndefinedValues(obj)).toStrictEqual(obj);
expect(getNonUndefinedValues({})).toStrictEqual({});
});

it(`removes only the undefined values from the top level`, () => {
const obj = {
a: 1,
b: undefined,
c: null,
e: {
f: undefined,
g: 1,
},
};
expect(getNonUndefinedValues(obj)).toStrictEqual({
a: 1,
c: null,
e: {
f: undefined,
g: 1,
},
});
});
});
9 changes: 9 additions & 0 deletions packages/shared/src/underscore.ts
Original file line number Diff line number Diff line change
Expand Up @@ -108,3 +108,12 @@ export function isTruthy(value: unknown): boolean {
// Default to false
return false;
}

export function getNonUndefinedValues<T extends object>(obj: T): Partial<T> {
return Object.entries(obj).reduce((acc, [key, value]) => {
if (value !== undefined) {
acc[key as keyof T] = value;
}
return acc;
}, {} as Partial<T>);
}
4 changes: 2 additions & 2 deletions playground/nextjs/pages/_app.tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import '../styles/globals.css';
import type { AppProps } from 'next/app';
import '../styles/globals.css';

import {
ClerkProvider,
Expand Down Expand Up @@ -91,7 +91,7 @@ const AppBar = (props: AppBarProps) => {
<option value='shadesOfPurple'>shadesOfPurple</option>
</select>
<button onClick={props.onToggleDark}>toggle dark mode</button>
<UserButton afterSignOutUrl='/' />
<UserButton />

<SignedIn>
<SignOutButton />
Expand Down