import { Anchor, Button, Checkbox, Container, Group, LoadingOverlay, PasswordInput, Text, TextInput, Title, rem, } from '@mantine/core' import { useForm, zodResolver } from '@mantine/form' import { showNotification } from '@mantine/notifications' import { IconAt, IconCheck, IconLock } from '@tabler/icons-react' import { useMutation } from '@tanstack/react-query' import _ from 'lodash' import Router from 'next/router' import { useState } from 'react' import { env } from '~/config/env' import MyPaper from '~/core/components/MyPaper/MyPaper' import { useAuthSession } from '~/core/hooks/useAuthSession/useAuthSession' import { LoginAttributes } from '~/data/entities/User' import AuthRepository from '~/data/repository/AuthRepository' import authSchema from '~/data/validation/auth/auth.schema' import classes from './auth.module.css' export default function LoginPage() { const [visible, setVisible] = useState(false) const userAuth = useAuthSession() const form = useForm({ initialValues: { email: '', password: '', latitude: '', longitude: '', }, validate: zodResolver(authSchema.login), }) const postLogin = useMutation((data: LoginAttributes) => AuthRepository.login(data) ) const onFormSubmit = async () => { setVisible(true) try { const response = await postLogin.mutateAsync(form.values) const message = _.get(response, 'data.message', '') as string const fullname = _.get(response, 'data.fullname', 'John Doe') as string const accessToken = _.get(response, 'data.access_token', {}) as string // save session localStorage.setItem(env.LOCAL_STORAGE_SESSION, accessToken) // show notif showNotification({ title: `Welcome back, ${fullname}`, message, color: 'green', withCloseButton: false, icon: , }) // direct success login Router.push('/dashboard') } catch (error) { const errMessage = _.get(error, 'response.data.message', '') console.log(error, errMessage) } finally { setVisible(false) } } if (!_.isEmpty(userAuth.data)) { Router.push('/dashboard') } return ( Welcome back! Do not have an account yet?{' '} Create account
} radius="md" label="Email" placeholder="you@mantine.dev" withAsterisk {...form.getInputProps('email')} /> } radius="md" label="Password" placeholder="Your password" withAsterisk mt="md" {...form.getInputProps('password')} /> Forgot password?
) }