import {useForm} from 'react-hook-form'; import {Fragment, ReactElement, ReactNode} from 'react'; import { ConnectSocialPayload, useConnectSocialWithPassword, } from '../requests/connect-social-with-password'; import {useDialogContext} from '../../ui/overlays/dialog/dialog-context'; import {Dialog} from '../../ui/overlays/dialog/dialog'; import {DialogHeader} from '../../ui/overlays/dialog/dialog-header'; import {DialogBody} from '../../ui/overlays/dialog/dialog-body'; import {Form} from '../../ui/forms/form'; import {FormTextField} from '../../ui/forms/input-field/text-field/text-field'; import {DialogFooter} from '../../ui/overlays/dialog/dialog-footer'; import {Button} from '../../ui/buttons/button'; import {SocialService, useSocialLogin} from '../requests/use-social-login'; import {IconButton} from '../../ui/buttons/icon-button'; import {GoogleIcon} from '../../icons/social/google'; import {FacebookIcon} from '../../icons/social/facebook'; import {TwitterIcon} from '../../icons/social/twitter'; import {DialogTrigger} from '../../ui/overlays/dialog/dialog-trigger'; import {Trans} from '../../i18n/trans'; import {useNavigate} from '../../utils/hooks/use-navigate'; import {useAuth} from '../use-auth'; import {useTrans} from '../../i18n/use-trans'; import {message} from '../../i18n/message'; import {useSettings} from '../../core/settings/use-settings'; import {MessageDescriptor} from '@common/i18n/message-descriptor'; import clsx from 'clsx'; import {EnvatoIcon} from '@common/icons/social/envato'; const googleLabel = message('Continue with google'); const facebookLabel = message('Continue with facebook'); const twitterLabel = message('Continue with twitter'); const envatoLabel = message('Continue with envato'); interface SocialAuthSectionProps { dividerMessage: ReactNode; } export function SocialAuthSection({dividerMessage}: SocialAuthSectionProps) { const {social} = useSettings(); const navigate = useNavigate(); const {getRedirectUri} = useAuth(); const {loginWithSocial, requestingPassword, setIsRequestingPassword} = useSocialLogin(); const allSocialsDisabled = !social?.google?.enable && !social?.facebook?.enable && !social?.twitter?.enable && !social?.envato?.enable; if (allSocialsDisabled) { return null; } const handleSocialLogin = async (service: SocialService) => { const e = await loginWithSocial(service); if (e?.status === 'SUCCESS' || e?.status === 'ALREADY_LOGGED_IN') { navigate(getRedirectUri(), {replace: true}); } }; return (
{dividerMessage}
{social?.google?.enable ? ( } onClick={() => handleSocialLogin('google')} /> ) : null} {social?.facebook?.enable ? ( } onClick={() => handleSocialLogin('facebook')} /> ) : null} {social?.twitter?.enable ? ( } onClick={() => handleSocialLogin('twitter')} /> ) : null} {social?.envato?.enable ? ( } onClick={() => handleSocialLogin('envato')} /> ) : null}
); } function RequestPasswordDialog() { const form = useForm(); const {formId} = useDialogContext(); const connect = useConnectSocialWithPassword(form); return (
{ connect.mutate(payload); }} > } />
); } interface SocialLoginButtonProps { onClick: () => void; label: MessageDescriptor; icon: ReactElement; } function SocialLoginButton({onClick, label, icon}: SocialLoginButtonProps) { const {trans} = useTrans(); const { social: {compact_buttons}, } = useSettings(); if (compact_buttons) { return ( {icon} ); } return ( ); }