'use client'; import { Modal, Container, Title, Anchor, Paper, TextInput, Button, PasswordInput, Group, Checkbox, Text } from '@mantine/core'; import { useForm } from '@mantine/form'; import Cookies from 'js-cookie'; interface HeaderModalProps { type?: string; toggle: any; login: ({ email, password }: { email: string, password: string }) => Promise; register: ({ firstName, lastName, email, password }: { firstName: string, lastName: string, email: string, password: string }) => Promise; } export function HeaderModal({ type, toggle, login, register }: HeaderModalProps) { function passwordValidator(value: string) { if (value.trim().length < 10) { return 'Password must be at least 10 characters'; } if (value.trim().length >= 128) { return 'Password must be at most 128 characters'; } if (!/(\d)/.test(value)) { return 'Password must contain at least one number'; } if (!/[a-z]/.test(value)) { return 'Password must contain at least one lowercase letter'; } if (!/[A-Z]/.test(value)) { return 'Password must contain at least one uppercase letter'; } if (!/[!@#$%^&*]/.test(value)) { return 'Password must contain at least one special character'; } return null; } function emailValidator(value: string) { if (value.trim().length == 0) { return 'Email is required'; } if (!/^\S+@\S+$/.test(value)) { return 'Invalid email'; } return null; } const registerForm = useForm({ initialValues: { firstName: '', lastName: '', email: '', password: '' }, validate: { firstName: (value) => (value.trim().length > 0 ? null : 'First name is required'), lastName: (value) => (value.trim().length > 0 ? null : 'Last name is required'), email: emailValidator, password: passwordValidator } }); const loginForm = useForm({ initialValues: { email: Cookies.get('email') || '', password: '', remember: Cookies.get('remember') === 'true' } }); const resetForm = useForm({ initialValues: { email: '' } }); function onClose() { toggle(undefined); registerForm.reset(); resetForm.reset(); if (!loginForm.values.remember) { loginForm.reset(); } } return ( {type == 'reset' ? ( Reset password Enter your email and we will send you a link to reset your password.{' '} toggle('login')}> Go Back
console.log(values))}>
) : type == 'register' ? ( Create account Already have an account?{' '} toggle('login')}> Sign in
{ const success = await register(values); if (success) { onClose(); } })} >
) : ( Welcome back! Do not have an account yet?{' '} toggle('register')}> Create account
{ Cookies.set('remember', 'true', { expires: 365 }); if (values.remember) { Cookies.set('email', values.email, { expires: 365 }); } else { Cookies.remove('email'); } const success = await login(values); if (success) { onClose(); } })} > toggle('reset')}> Forgot password?
)}
); }