mirror of
https://github.com/logto-io/logto.git
synced 2025-03-17 22:31:28 -05:00
fix(ui): hide social signin method if connectors are empty (#909)
hide social signin method if connectors are empty
This commit is contained in:
parent
e5196fc31d
commit
5e0c39e516
4 changed files with 25 additions and 14 deletions
|
@ -15,7 +15,6 @@ import {
|
|||
decodeState,
|
||||
stateValidation,
|
||||
storeState,
|
||||
filterSocialConnectors,
|
||||
} from './utils';
|
||||
|
||||
const useSocial = () => {
|
||||
|
@ -40,11 +39,6 @@ const useSocial = () => {
|
|||
[navigate, parameters.connector]
|
||||
);
|
||||
|
||||
const socialConnectors = useMemo(
|
||||
() => filterSocialConnectors(experienceSettings?.socialConnectors),
|
||||
[experienceSettings]
|
||||
);
|
||||
|
||||
const { run: asyncInvokeSocialSignIn } = useApi(invokeSocialSignIn);
|
||||
|
||||
const { run: asyncSignInWithSocial } = useApi(signInWithSocial, signInWithSocialErrorHandlers);
|
||||
|
@ -187,7 +181,7 @@ const useSocial = () => {
|
|||
}, [setToast]);
|
||||
|
||||
return {
|
||||
socialConnectors,
|
||||
socialConnectors: experienceSettings?.socialConnectors ?? [],
|
||||
invokeSocialSignIn: invokeSocialSignInHandler,
|
||||
socialCallbackHandler,
|
||||
};
|
||||
|
|
|
@ -25,10 +25,14 @@ const SignIn = () => {
|
|||
headline={style === BrandingStyle.Logo_Slogan ? slogan : undefined}
|
||||
logo={logo}
|
||||
/>
|
||||
<PrimarySection signInMethod={experienceSettings.primarySignInMethod} />
|
||||
<PrimarySection
|
||||
signInMethod={experienceSettings.primarySignInMethod}
|
||||
socialConnectors={experienceSettings.socialConnectors}
|
||||
/>
|
||||
<SecondarySection
|
||||
primarySignInMethod={experienceSettings.primarySignInMethod}
|
||||
secondarySignInMethods={experienceSettings.secondarySignInMethods}
|
||||
socialConnectors={experienceSettings.socialConnectors}
|
||||
/>
|
||||
<CreateAccountLink primarySignInMethod={experienceSettings.primarySignInMethod} />
|
||||
</div>
|
||||
|
|
|
@ -7,11 +7,17 @@ import SignInMethodsLink from '@/containers/SignInMethodsLink';
|
|||
import { PrimarySocialSignIn, SecondarySocialSignIn } from '@/containers/SocialSignIn';
|
||||
import TermsOfUse from '@/containers/TermsOfUse';
|
||||
import UsernameSignin from '@/containers/UsernameSignin';
|
||||
import { SignInMethod, LocalSignInMethod } from '@/types';
|
||||
import { SignInMethod, LocalSignInMethod, ConnectorData } from '@/types';
|
||||
|
||||
import * as styles from './index.module.scss';
|
||||
|
||||
export const PrimarySection = ({ signInMethod }: { signInMethod?: SignInMethod }) => {
|
||||
export const PrimarySection = ({
|
||||
signInMethod,
|
||||
socialConnectors = [],
|
||||
}: {
|
||||
signInMethod?: SignInMethod;
|
||||
socialConnectors?: ConnectorData[];
|
||||
}) => {
|
||||
switch (signInMethod) {
|
||||
case 'email':
|
||||
return <EmailPasswordless type="sign-in" className={styles.primarySignIn} />;
|
||||
|
@ -20,12 +26,12 @@ export const PrimarySection = ({ signInMethod }: { signInMethod?: SignInMethod }
|
|||
case 'username':
|
||||
return <UsernameSignin className={styles.primarySignIn} />;
|
||||
case 'social':
|
||||
return (
|
||||
return socialConnectors.length > 0 ? (
|
||||
<>
|
||||
<TermsOfUse className={styles.terms} />
|
||||
<PrimarySocialSignIn className={styles.primarySocial} />
|
||||
</>
|
||||
);
|
||||
) : null;
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
|
@ -34,9 +40,11 @@ export const PrimarySection = ({ signInMethod }: { signInMethod?: SignInMethod }
|
|||
export const SecondarySection = ({
|
||||
primarySignInMethod,
|
||||
secondarySignInMethods,
|
||||
socialConnectors = [],
|
||||
}: {
|
||||
primarySignInMethod?: SignInMethod;
|
||||
secondarySignInMethods?: SignInMethod[];
|
||||
socialConnectors?: ConnectorData[];
|
||||
}) => {
|
||||
if (!primarySignInMethod || !secondarySignInMethods?.length) {
|
||||
return null;
|
||||
|
@ -49,7 +57,9 @@ export const SecondarySection = ({
|
|||
if (primarySignInMethod === 'social' && localMethods.length > 0) {
|
||||
return (
|
||||
<>
|
||||
<Divider label="description.continue_with" className={styles.divider} />
|
||||
{socialConnectors.length > 0 && (
|
||||
<Divider label="description.continue_with" className={styles.divider} />
|
||||
)}
|
||||
<SignInMethodsLink signInMethods={localMethods} />
|
||||
</>
|
||||
);
|
||||
|
@ -62,7 +72,7 @@ export const SecondarySection = ({
|
|||
template="sign_in_with"
|
||||
className={styles.otherMethodsLink}
|
||||
/>
|
||||
{secondarySignInMethods.includes('social') && (
|
||||
{secondarySignInMethods.includes('social') && socialConnectors.length > 0 && (
|
||||
<>
|
||||
<Divider label="description.or" className={styles.divider} />
|
||||
<SecondarySocialSignIn />
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
import { SignInMethods } from '@logto/schemas';
|
||||
|
||||
import { getSignInExperience } from '@/apis/settings';
|
||||
import { filterSocialConnectors } from '@/hooks/utils';
|
||||
import { SignInMethod, SignInExperienceSettingsResponse, SignInExperienceSettings } from '@/types';
|
||||
|
||||
const getPrimarySignInMethod = (signInMethods: SignInMethods) => {
|
||||
|
@ -29,11 +30,13 @@ const getSecondarySignInMethods = (signInMethods: SignInMethods) =>
|
|||
|
||||
export const parseSignInExperienceSettings = ({
|
||||
signInMethods,
|
||||
socialConnectors,
|
||||
...rest
|
||||
}: SignInExperienceSettingsResponse) => ({
|
||||
...rest,
|
||||
primarySignInMethod: getPrimarySignInMethod(signInMethods),
|
||||
secondarySignInMethods: getSecondarySignInMethods(signInMethods),
|
||||
socialConnectors: filterSocialConnectors(socialConnectors),
|
||||
});
|
||||
|
||||
const getSignInExperienceSettings = async (): Promise<SignInExperienceSettings> => {
|
||||
|
|
Loading…
Add table
Reference in a new issue