import {Link, useLocation, useSearchParams} from 'react-router-dom'; import {useForm} from 'react-hook-form'; import {FormTextField} from '../../ui/forms/input-field/text-field/text-field'; import {Button} from '../../ui/buttons/button'; import {Form} from '../../ui/forms/form'; import {LoginPayload, useLogin} from '../requests/use-login'; import {FormCheckbox} from '../../ui/forms/toggle/checkbox'; import {LinkStyle} from '../../ui/buttons/external-link'; import {SocialAuthSection} from './social-auth-section'; import {AuthLayout} from './auth-layout/auth-layout'; import {Trans} from '../../i18n/trans'; import {StaticPageTitle} from '../../seo/static-page-title'; import {useContext} from 'react'; import { SiteConfigContext, SiteConfigContextValue, } from '../../core/settings/site-config-context'; import {useSettings} from '../../core/settings/use-settings'; interface Props { onTwoFactorChallenge: () => void; } export function LoginPage({onTwoFactorChallenge}: Props) { const [searchParams] = useSearchParams(); const {pathname} = useLocation(); const isWorkspaceLogin = pathname.includes('workspace'); const searchParamsEmail = searchParams.get('email') || undefined; const {branding, registration, site, social} = useSettings(); const siteConfig = useContext(SiteConfigContext); const demoDefaults = site.demo && !searchParamsEmail ? getDemoFormDefaults(siteConfig) : {}; const form = useForm({ defaultValues: {remember: true, email: searchParamsEmail, ...demoDefaults}, }); const login = useLogin(form); const heading = isWorkspaceLogin ? ( ) : ( ); const message = !registration.disable && ( ( {parts} ), }} message="Don't have an account? Sign up." /> ); const isInvalid = !!Object.keys(form.formState.errors).length; return (
{ login.mutate(payload, { onSuccess: response => { if (response.two_factor) { onTwoFactorChallenge(); } }, }); }} > } disabled={!!searchParamsEmail} invalid={isInvalid} required /> } invalid={isInvalid} labelSuffix={ } required /> ) : ( ) } />
); } function getDemoFormDefaults(siteConfig: SiteConfigContextValue) { if (siteConfig.demo.loginPageDefaults === 'randomAccount') { // random number between 0 and 100, padded to 3 digits const number = Math.floor(Math.random() * 100) + 1; const paddedNumber = String(number).padStart(3, '0'); return { email: `admin@demo${paddedNumber}.com`, password: 'admin', }; } else { return { email: siteConfig.demo.email ?? 'admin@admin.com', password: siteConfig.demo.password ?? 'admin', }; } }