Loading web/src/hooks/useAdmin.tsx +62 −48 Original line number Diff line number Diff line import { FieldErrors, Resolver, SubmitHandler, useForm } from "react-hook-form"; import { AdminDatasourceProd } from "../data/datasources/prod/admin_datasource"; import { AdminRepositoryProd } from "../data/repositories/prod/admin_repository"; import { Admin, AdminFormValues } from "../infraestructure/entities/admin_form_values"; import { Admin, AdminFormValues, } from "../infraestructure/entities/admin_form_values"; import { toast } from "react-toastify"; import axios, { AxiosError } from "axios"; import { useState } from "react"; Loading @@ -16,28 +19,28 @@ const resolver: Resolver<AdminFormValues> = async (data) => { if (!data.name) { errors.name = { type: "required", message: "El nombre del administrador es requerido" message: "El nombre del administrador es requerido", }; } if (!data.lastName) { errors.lastName = { type: "required", message: "El apellido del administrador es requerido" message: "El apellido del administrador es requerido", }; } if (!data.email) { errors.email = { type: "required", message: "El correo electronico es requerido" message: "El correo electronico es requerido", }; } else { const emailPattern = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/; if (!emailPattern.test(data.email)) { errors.email = { type: "validate", message: "El correo electronico no es válido" message: "El correo electronico no es válido", }; } } Loading @@ -45,26 +48,26 @@ const resolver: Resolver<AdminFormValues> = async (data) => { if (!data.password) { errors.password = { type: "required", message: "La contraseña es requerida" message: "La contraseña es requerida", }; } else if (data.confirmPassword !== data.password) { errors.confirmPassword = { type: "validate", message: "Las contraseñas deben coincidir" message: "Las contraseñas deben coincidir", }; } if (!data.confirmPassword) { errors.confirmPassword = { type: "required", message: "La contraseña es requerida" message: "La contraseña es requerida", }; } if (!data.townAdmin) { errors.townAdmin = { type: "required", message: "Elija el pueblo al que va a representar" message: "Elija el pueblo al que va a representar", }; } Loading @@ -74,11 +77,15 @@ const resolver: Resolver<AdminFormValues> = async (data) => { }; }; export const useAdmin = (forceRenderList?: () => void, handleClickToClose?: () => void) => { export const useAdmin = ( forceRenderList?: () => void, handleClickToClose?: () => void ) => { const { register, handleSubmit, formState: { errors }, setError, } = useForm<AdminFormValues>({ resolver }); const [adminList, setAdminList] = useState<Admin[]>([]); Loading @@ -95,32 +102,31 @@ export const useAdmin = (forceRenderList?: () => void, handleClickToClose?: () = if (axios.isAxiosError(error)) { error as AxiosError; switch (error.code) { case(axios.AxiosError.ERR_BAD_REQUEST): case axios.AxiosError.ERR_BAD_REQUEST: errorMessage = "Acceso no autorizado"; setError("email", { type: "validate", message: "El email ya existe" }); break; case(axios.AxiosError.ERR_NETWORK): case axios.AxiosError.ERR_NETWORK: errorMessage = "Conexión con el servidor fallida"; break; } } throw new Error(errorMessage); } } toast.promise( fetch(),{ }; toast.promise(fetch(), { pending: "Subiendo datos...", success: "Los datos se han subido correctamente", error: { render({ data }) { return (data as Error).message; } } } ) } }, }, }); }; const getAdminInfo = async (): Promise<Admin | null> => { const token = localStorage.getItem('token'); const token = localStorage.getItem("token"); if (token) { try { const actualAdmin = await adminRepository.getAdminInfo(token); Loading @@ -134,7 +140,7 @@ export const useAdmin = (forceRenderList?: () => void, handleClickToClose?: () = return null; } return null; } }; const getAdminListByTown = async (idTown: number) => { try { Loading @@ -146,7 +152,15 @@ export const useAdmin = (forceRenderList?: () => void, handleClickToClose?: () = showErrorAxios(error); } } } }; return {register, handleSubmit, errors, onSubmit, getAdminInfo, adminList, getAdminListByTown}; } No newline at end of file return { register, handleSubmit, errors, onSubmit, getAdminInfo, adminList, getAdminListByTown, }; }; Loading
web/src/hooks/useAdmin.tsx +62 −48 Original line number Diff line number Diff line import { FieldErrors, Resolver, SubmitHandler, useForm } from "react-hook-form"; import { AdminDatasourceProd } from "../data/datasources/prod/admin_datasource"; import { AdminRepositoryProd } from "../data/repositories/prod/admin_repository"; import { Admin, AdminFormValues } from "../infraestructure/entities/admin_form_values"; import { Admin, AdminFormValues, } from "../infraestructure/entities/admin_form_values"; import { toast } from "react-toastify"; import axios, { AxiosError } from "axios"; import { useState } from "react"; Loading @@ -16,28 +19,28 @@ const resolver: Resolver<AdminFormValues> = async (data) => { if (!data.name) { errors.name = { type: "required", message: "El nombre del administrador es requerido" message: "El nombre del administrador es requerido", }; } if (!data.lastName) { errors.lastName = { type: "required", message: "El apellido del administrador es requerido" message: "El apellido del administrador es requerido", }; } if (!data.email) { errors.email = { type: "required", message: "El correo electronico es requerido" message: "El correo electronico es requerido", }; } else { const emailPattern = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/; if (!emailPattern.test(data.email)) { errors.email = { type: "validate", message: "El correo electronico no es válido" message: "El correo electronico no es válido", }; } } Loading @@ -45,26 +48,26 @@ const resolver: Resolver<AdminFormValues> = async (data) => { if (!data.password) { errors.password = { type: "required", message: "La contraseña es requerida" message: "La contraseña es requerida", }; } else if (data.confirmPassword !== data.password) { errors.confirmPassword = { type: "validate", message: "Las contraseñas deben coincidir" message: "Las contraseñas deben coincidir", }; } if (!data.confirmPassword) { errors.confirmPassword = { type: "required", message: "La contraseña es requerida" message: "La contraseña es requerida", }; } if (!data.townAdmin) { errors.townAdmin = { type: "required", message: "Elija el pueblo al que va a representar" message: "Elija el pueblo al que va a representar", }; } Loading @@ -74,11 +77,15 @@ const resolver: Resolver<AdminFormValues> = async (data) => { }; }; export const useAdmin = (forceRenderList?: () => void, handleClickToClose?: () => void) => { export const useAdmin = ( forceRenderList?: () => void, handleClickToClose?: () => void ) => { const { register, handleSubmit, formState: { errors }, setError, } = useForm<AdminFormValues>({ resolver }); const [adminList, setAdminList] = useState<Admin[]>([]); Loading @@ -95,32 +102,31 @@ export const useAdmin = (forceRenderList?: () => void, handleClickToClose?: () = if (axios.isAxiosError(error)) { error as AxiosError; switch (error.code) { case(axios.AxiosError.ERR_BAD_REQUEST): case axios.AxiosError.ERR_BAD_REQUEST: errorMessage = "Acceso no autorizado"; setError("email", { type: "validate", message: "El email ya existe" }); break; case(axios.AxiosError.ERR_NETWORK): case axios.AxiosError.ERR_NETWORK: errorMessage = "Conexión con el servidor fallida"; break; } } throw new Error(errorMessage); } } toast.promise( fetch(),{ }; toast.promise(fetch(), { pending: "Subiendo datos...", success: "Los datos se han subido correctamente", error: { render({ data }) { return (data as Error).message; } } } ) } }, }, }); }; const getAdminInfo = async (): Promise<Admin | null> => { const token = localStorage.getItem('token'); const token = localStorage.getItem("token"); if (token) { try { const actualAdmin = await adminRepository.getAdminInfo(token); Loading @@ -134,7 +140,7 @@ export const useAdmin = (forceRenderList?: () => void, handleClickToClose?: () = return null; } return null; } }; const getAdminListByTown = async (idTown: number) => { try { Loading @@ -146,7 +152,15 @@ export const useAdmin = (forceRenderList?: () => void, handleClickToClose?: () = showErrorAxios(error); } } } }; return {register, handleSubmit, errors, onSubmit, getAdminInfo, adminList, getAdminListByTown}; } No newline at end of file return { register, handleSubmit, errors, onSubmit, getAdminInfo, adminList, getAdminListByTown, }; };