import { LoginIcon, SupportIcon } from '@heroicons/react/outline'; import axios from 'axios'; import { Field, Form, Formik } from 'formik'; import Link from 'next/link'; import React, { useState } from 'react'; import { defineMessages, useIntl } from 'react-intl'; import * as Yup from 'yup'; import useSettings from '../../hooks/useSettings'; import Button from '../Common/Button'; import SensitiveInput from '../Common/SensitiveInput'; const messages = defineMessages({ email: 'Email Address', password: 'Password', validationemailrequired: 'You must provide a valid email address', validationpasswordrequired: 'You must provide a password', loginerror: 'Something went wrong while trying to sign in.', signingin: 'Signing In…', signin: 'Sign In', forgotpassword: 'Forgot Password?', }); interface LocalLoginProps { revalidate: () => void; } const LocalLogin: React.FC = ({ revalidate }) => { const intl = useIntl(); const settings = useSettings(); const [loginError, setLoginError] = useState(null); const LoginSchema = Yup.object().shape({ email: Yup.string() .email() .required(intl.formatMessage(messages.validationemailrequired)), password: Yup.string().required( intl.formatMessage(messages.validationpasswordrequired) ), }); const passwordResetEnabled = settings.currentSettings.applicationUrl && settings.currentSettings.emailEnabled; return ( { try { await axios.post('/api/v1/auth/local', { email: values.email, password: values.password, }); } catch (e) { setLoginError(intl.formatMessage(messages.loginerror)); } finally { revalidate(); } }} > {({ errors, touched, isSubmitting, isValid }) => { return ( <>
{errors.email && touched.email && (
{errors.email}
)}
{errors.password && touched.password && (
{errors.password}
)}
{loginError && (
{loginError}
)}
{passwordResetEnabled && ( )}
); }}
); }; export default LocalLogin;