Skip to content

Commit

Permalink
🐛 fix: support to disable clerk signup with feature flag (#3126)
Browse files Browse the repository at this point in the history
* feat: Disable signup when env set

* feat: Disable Clerk sign-up based on feature flag

* fix: change to client

* fix: remove the logic for signup in middleware

* chore: revert the space deletion

* fix: update the url for login and signup

* fix: fix footerAction update logic

* test: update test for enableClerkSignUp
  • Loading branch information
vegetablesB authored Jul 7, 2024
1 parent 4476a5e commit 4ead315
Show file tree
Hide file tree
Showing 4 changed files with 34 additions and 1 deletion.
8 changes: 8 additions & 0 deletions src/app/(auth)/signup/[[...signup]]/page.tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
import { SignUp } from '@clerk/nextjs';
import { redirect } from 'next/navigation';

import { serverFeatureFlags } from '@/config/featureFlags';
import { metadataModule } from '@/server/metadata';
import { translation } from '@/server/translation';

Expand All @@ -13,6 +15,12 @@ export const generateMetadata = async () => {
};

const Page = () => {
const enableClerkSignUp = serverFeatureFlags().enableClerkSignUp;

if (!enableClerkSignUp) {
redirect('/login');
}

return <SignUp path="/signup" />;
};

Expand Down
6 changes: 6 additions & 0 deletions src/config/featureFlags/schema.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@ export const FeatureFlagsSchema = z.object({

check_updates: z.boolean().optional(),
welcome_suggest: z.boolean().optional(),

clerk_sign_up: z.boolean().optional(),
});

// TypeScript 类型,从 Zod schema 生成
Expand All @@ -36,6 +38,8 @@ export const DEFAULT_FEATURE_FLAGS: IFeatureFlags = {

check_updates: true,
welcome_suggest: true,

clerk_sign_up: true,
};

export const mapFeatureFlagsEnvToState = (config: IFeatureFlags) => {
Expand All @@ -53,5 +57,7 @@ export const mapFeatureFlagsEnvToState = (config: IFeatureFlags) => {

enableCheckUpdates: config.check_updates,
showWelcomeSuggest: config.welcome_suggest,

enableClerkSignUp: config.clerk_sign_up,
};
};
20 changes: 19 additions & 1 deletion src/layout/AuthProvider/Clerk/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,13 @@ import { ClerkProvider } from '@clerk/nextjs';
import { PropsWithChildren, memo, useEffect, useMemo, useState, useTransition } from 'react';
import { useTranslation } from 'react-i18next';

import { featureFlagsSelectors, useServerConfigStore } from '@/store/serverConfig';

import UserUpdater from './UserUpdater';
import { useAppearance } from './useAppearance';

const Clerk = memo(({ children }: PropsWithChildren) => {
const { enableClerkSignUp } = useServerConfigStore(featureFlagsSelectors);
const appearance = useAppearance();
const {
i18n: { language, getResourceBundle },
Expand All @@ -27,8 +30,23 @@ const Clerk = memo(({ children }: PropsWithChildren) => {
});
}, [count, setCount, isPending, startTransition]);

const updatedAppearance = useMemo(
() => ({
...appearance,
elements: {
...appearance.elements,
...(!enableClerkSignUp ? { footerAction: { display: 'none' } } : {}),
},
}),
[appearance, enableClerkSignUp],
);

return (
<ClerkProvider appearance={appearance} localization={localization}>
<ClerkProvider
appearance={updatedAppearance}
localization={localization}
signUpUrl={!enableClerkSignUp ? '/login' : '/signup'} // Redirect sign-up to sign-in if disabled
>
{children}
<UserUpdater />
</ClerkProvider>
Expand Down
1 change: 1 addition & 0 deletions src/store/serverConfig/selectors.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ describe('featureFlagsSelectors', () => {
showOpenAIProxyUrl: true,
enableCheckUpdates: true,
showWelcomeSuggest: true,
enableClerkSignUp: true,
});
});
});
Expand Down

0 comments on commit 4ead315

Please sign in to comment.