diff --git a/apps/backoffice/index.html b/apps/backoffice/index.html index 3905403..52a9604 100644 --- a/apps/backoffice/index.html +++ b/apps/backoffice/index.html @@ -6,7 +6,7 @@ - + diff --git a/apps/backoffice/src/app/_hooks/use-login.ts b/apps/backoffice/src/app/_hooks/use-login.ts new file mode 100644 index 0000000..e23709a --- /dev/null +++ b/apps/backoffice/src/app/_hooks/use-login.ts @@ -0,0 +1,31 @@ +import { useForm } from 'react-hook-form'; +import { + authLoginSchema, + TLoginRequest, + usePostLogin, +} from '@imphnen-frontend-service/service'; +import { zodResolver } from '@hookform/resolvers/zod'; +import { useNavigate } from 'react-router-dom'; + +export const useLogin = () => { + const postLogin = usePostLogin(); + const form = useForm({ + resolver: zodResolver(authLoginSchema), + mode: 'all', + }); + const navigate = useNavigate(); + + const onSubmit = form.handleSubmit((data) => { + postLogin.mutate(data, { + onSuccess: () => { + console.log('Success Login'); + navigate('/dashboard'); + }, + }); + }); + + return { + form, + onSubmit, + }; +}; diff --git a/apps/backoffice/src/app/page.tsx b/apps/backoffice/src/app/page.tsx index 21d9316..99b0c4e 100644 --- a/apps/backoffice/src/app/page.tsx +++ b/apps/backoffice/src/app/page.tsx @@ -1,30 +1,10 @@ -import { FC, ReactElement, useState } from 'react'; -import { useNavigate } from 'react-router'; +import { FC, ReactElement } from 'react'; import { Button } from '@imphnen-frontend-service/ui/atoms'; -import { InputField } from '@imphnen-frontend-service/ui/molecules'; +import { useLogin } from './_hooks/use-login'; +import { ControlledInputField } from '@imphnen-frontend-service/ui/organisms'; export const Components: FC = (): ReactElement => { - const navigate = useNavigate(); - const [email, setEmail] = useState(''); - const [password, setPassword] = useState(''); - - const handleLogin = async (e: React.FormEvent) => { - e.preventDefault(); - try { - const payload = { email, password }; - console.log(payload); // for debugging - const response = await postLogin(payload); - - const { access_token, refresh_token } = response.data.token; - sessionStorage.setItem('access_token', access_token); - localStorage.setItem('refresh_token', refresh_token); - - console.log('Login successful:', response); // for debugging - navigate('/dashboard'); - } catch (error) { - console.log('Login error:', error); // for debugging - } - }; + const { form, onSubmit } = useLogin(); return (
@@ -33,21 +13,29 @@ export const Components: FC = (): ReactElement => {

Welcome to IMPHNEN Backoffice

- - - +
+ + + +
); diff --git a/libs/ui/src/molecules/input-field/input-field.tsx b/libs/ui/src/molecules/input-field/input-field.tsx index 0db7b16..0245843 100644 --- a/libs/ui/src/molecules/input-field/input-field.tsx +++ b/libs/ui/src/molecules/input-field/input-field.tsx @@ -75,10 +75,15 @@ export const InputField: FC = ({ {...rest} /> {error ? ( -

{error}

+

{error}

) : ( helperText && ( -

+

{helperText}

)