diff --git a/cosiap_frontend/src/App.jsx b/cosiap_frontend/src/App.jsx index c67632999412e9d184856c3962abaec872d37473..feef957305f3729d61a38362d2e199c61c00a1e0 100644 --- a/cosiap_frontend/src/App.jsx +++ b/cosiap_frontend/src/App.jsx @@ -9,6 +9,7 @@ import Register from './components/users/Register/Register'; import ResetPassword from './components/users/Password/ResetPassword'; import Inicio from "./components/users/Inicio"; import { useState } from 'react'; +import LayoutBaseAuthenticator from './components/common/layouts/LayoutBaseAuthenticator'; function App() { @@ -28,17 +29,20 @@ function App() { - {/* Rutas publicas */} - } /> - } /> - } /> - } /> + {/* Rutas públicas */} + + {/* Componente del layout */} + }> + {/* Componentes hijos del layout autenticador */} + } /> + } /> + } /> + } /> + {/* Rutas protegidas */} }> - } /> - diff --git a/cosiap_frontend/src/components/Inicio.jsx b/cosiap_frontend/src/components/Inicio.jsx new file mode 100644 index 0000000000000000000000000000000000000000..16cacd1ea86cbfb92e04ac975d25cf57c0bfd76c --- /dev/null +++ b/cosiap_frontend/src/components/Inicio.jsx @@ -0,0 +1,10 @@ + +export default function Inicio() { + + + return ( + <> + + + ); +} \ No newline at end of file diff --git a/cosiap_frontend/src/components/common/layouts/LayoutBaseAuthenticator.jsx b/cosiap_frontend/src/components/common/layouts/LayoutBaseAuthenticator.jsx index 6ea0ecfaa857e618b3f1456fcda510882e4242b7..008eab3a4a8d424418c1f85f5412e95579688023 100644 --- a/cosiap_frontend/src/components/common/layouts/LayoutBaseAuthenticator.jsx +++ b/cosiap_frontend/src/components/common/layouts/LayoutBaseAuthenticator.jsx @@ -1,5 +1,17 @@ +import { useLocation, Outlet } from "react-router-dom"; +import { useEffect, useState } from "react"; + +export default function LayoutBaseAuthenticator({children}) { + + // Contiene la informacion de la url actual + const location = useLocation(); + + const [sectionURL, setSectionURL] = useState(""); + + useEffect(() => { + setSectionURL(location.pathname.split('/').filter(Boolean).pop()); + }, [location]); // Si location cambia, se ejecutara el useEffect -export default function LayoutBaseAuthenticator({title, children}) { return ( <>
@@ -34,11 +46,16 @@ export default function LayoutBaseAuthenticator({title, children}) {

- {title} + {/* Dependiendo de la url es el titulo de la sección */} + { sectionURL === 'authentication' ? 'Iniciar sesión' : ( + sectionURL === 'register' ? 'Registrarse' : ( + sectionURL === 'reset_password' ? 'Restablecer contraseña' : '' + ) + ) }

- {children} + {/* Renderiza los componentes hijos */} diff --git a/cosiap_frontend/src/components/common/layouts/LayoutBaseNavigation.jsx b/cosiap_frontend/src/components/common/layouts/LayoutBaseNavigation.jsx new file mode 100644 index 0000000000000000000000000000000000000000..1c1cae11ce353f3e08178810849368277d8c4988 --- /dev/null +++ b/cosiap_frontend/src/components/common/layouts/LayoutBaseNavigation.jsx @@ -0,0 +1,129 @@ +import { useState, useEffect, useRef } from "react"; +import { useLocation, Outlet } from "react-router-dom"; +import Navbar from "@/components/common/layouts/LayoutsNavigation/Navbar/Navbar"; +import Sidebar from "@/components/common/layouts/LayoutsNavigation/Sidebar/Sidebar"; +import SettingsToggle from "@/components/common/layouts/LayoutsNavigation/SettingsToggle"; +import Settings from "@/components/common/layouts/LayoutsNavigation/Settings"; + + +const linksItemsSolicitante = [ + { + nameIcon: 'library_books', + nameItem: 'Modalidades', + navigate: '/modalidades', + isSelected: false + }, + { + nameIcon: 'history', + nameItem: 'Historial', + navigate: '/historial', + isSelected: false + }, + { + nameIcon: 'mark_as_unread', + nameItem: 'Recepción de ayuda', + navigate: '/recepcion_ayuda', + isSelected: false + }, + { + nameIcon: 'help', + nameItem: 'Ayuda', + isSelected: false, + subMenu: [ + { + nameItem: 'Manual', + isSelected: false, + navigate: '/ayuda/manual', + } + ] + }, + { + nameIcon: 'account_circle', + nameItem: 'Perfil', + navigate: '/perfil', + isSelected: false + } +]; + +export default function LayoutBaseNavigation() { + const [viewMenu, setViewMenu] = useState(false); + const [selectedNav, setSelectedNav] = useState("vertical"); + const [viewSettings, setViewSettings] = useState(false); + const [links, setLinks] = useState([...linksItemsSolicitante]); + + const settingsRef = useRef(); + const settingsToggleRef = useRef(); + + const location = useLocation(); + const [sectionURL, setSectionURL] = useState(""); + + useEffect(() => { + setSectionURL(location.pathname.split('/').filter(Boolean).pop()); + }, [location]); + + useEffect(() => { + const updatedLinks = links.map(link => { + // Verificación directa basada en 'nameItem' y 'navigate' + const isSelected = link.nameItem.toLowerCase() === sectionURL.toLowerCase() || + link.navigate?.split('/').pop().toLowerCase() === sectionURL.toLowerCase(); + + // Actualizar submenú si existe + const updatedSubMenu = link.subMenu?.map(sub => ({ + ...sub, + isSelected: sub.nameItem.toLowerCase() === sectionURL.toLowerCase() || + sub.navigate?.split('/').pop().toLowerCase() === sectionURL.toLowerCase() + })); + + // Marcar padre si algún subelemento está seleccionado + const isParentSelected = updatedSubMenu?.some(sub => sub.isSelected); + + return { + ...link, + isSelected: isSelected || isParentSelected, + ...(updatedSubMenu && { subMenu: updatedSubMenu }) + }; + }); + + setLinks(updatedLinks); + }, [sectionURL]); + + useEffect(() => { + function handleClickOutside(event) { + if (settingsRef.current && !settingsRef.current.contains(event.target) && + settingsToggleRef.current && !settingsToggleRef.current.contains(event.target)) { + setViewSettings(false); + } + } + document.addEventListener("mousedown", handleClickOutside); + return () => { + document.removeEventListener("mousedown", handleClickOutside); + }; + }, []); + + return ( +
+ {selectedNav === 'horizontal' && ( + + )} + {selectedNav === 'vertical' && ( + + )} + +
+
setViewSettings(!viewSettings)} + > + +
+ {viewSettings && ( + + )} + +
+ +
+
+
+ ); +} diff --git a/cosiap_frontend/src/components/common/layouts/LayoutsNavigation/Navbar/MobileMenu.jsx b/cosiap_frontend/src/components/common/layouts/LayoutsNavigation/Navbar/MobileMenu.jsx index fd5ac5362d5206ad2f194df781b816fb58f23edf..c0f41073d52c57ce0f3447a7c71ca08aaff26b92 100644 --- a/cosiap_frontend/src/components/common/layouts/LayoutsNavigation/Navbar/MobileMenu.jsx +++ b/cosiap_frontend/src/components/common/layouts/LayoutsNavigation/Navbar/MobileMenu.jsx @@ -1,6 +1,9 @@ import { useState } from "react"; +import { useNavigate } from "react-router-dom"; export default function MobileMenu({ menuRef, linksItems }) { + const navigate = useNavigate(); + // useState para manejar la visibilidad del submenú de "Ayuda" const [viewSubMenuHelp, setViewSubMenuHelp] = useState(false); @@ -15,8 +18,8 @@ export default function MobileMenu({ menuRef, linksItems }) { linksItems.map((item) => ( <> {/* Enlace principal de cada ítem del menú */} - @@ -72,13 +77,17 @@ export default function MobileMenu({ menuRef, linksItems }) { // Componente para renderizar el submenú de "Ayuda" function SubMenuAyuda({ viewSubMenuHelp, items }) { + const navigate = useNavigate(); + return ( // Si el submenú está visible, mapea sus ítems para generar enlaces viewSubMenuHelp && ( items.map((item) => ( + ${item.isSelected ? 'cursor-pointer text-[var(--principal-mf)] border-l-4 border-[var(--principal-f)]' + : 'cursor-pointer hover:text-[var(--principal-mf)] hover:border-l-4 hover:border-[var(--principal-f)]'}`} + onClick={() => navigate(item.navigate)} + > {item.nameItem} {/* Nombre del ítem del submenú */} diff --git a/cosiap_frontend/src/components/common/layouts/LayoutsNavigation/Navbar/NavbarBrand.jsx b/cosiap_frontend/src/components/common/layouts/LayoutsNavigation/Navbar/NavbarBrand.jsx index f78b21a92e3ad8cf0be3efbfef52270bd459c87c..72c3dffb1baa3d3546dd7fd079d6dd82e8f16b68 100644 --- a/cosiap_frontend/src/components/common/layouts/LayoutsNavigation/Navbar/NavbarBrand.jsx +++ b/cosiap_frontend/src/components/common/layouts/LayoutsNavigation/Navbar/NavbarBrand.jsx @@ -1,9 +1,15 @@ +import { useNavigate } from "react-router-dom"; + + export default function NavbarBrand() { + const navigate = useNavigate(); + return ( <> {/* Contenedor del texto "COSIAP" */}
-
+
navigate('/inicio')}>
cosiap diff --git a/cosiap_frontend/src/components/common/layouts/LayoutsNavigation/Navbar/NavbarLinks.jsx b/cosiap_frontend/src/components/common/layouts/LayoutsNavigation/Navbar/NavbarLinks.jsx index ddbef7d2e8d78ac73e5f59e4d6124429965d7b4d..0e70a2a99adf2a4fe0351bc12253fb577ea8ca31 100644 --- a/cosiap_frontend/src/components/common/layouts/LayoutsNavigation/Navbar/NavbarLinks.jsx +++ b/cosiap_frontend/src/components/common/layouts/LayoutsNavigation/Navbar/NavbarLinks.jsx @@ -1,6 +1,8 @@ import { useState, useEffect, useRef } from "react"; +import { useNavigate } from "react-router-dom"; export default function NavbarLinks({ linksItems, notificationsToggle }) { + const navigate = useNavigate(); // Estado para controlar la visibilidad del submenú de ayuda const [viewMenuHelp, setViewMenuHelp] = useState(false); @@ -39,16 +41,17 @@ export default function NavbarLinks({ linksItems, notificationsToggle }) { linksItems ? ( linksItems.map((item, key) => (
- { // Al hacer clic en 'Ayuda', alternar la visibilidad del submenú if (item.nameItem === 'Ayuda') { setViewMenuHelp(!viewMenuHelp); + }else{ + navigate(item.navigate) } }} > @@ -90,10 +93,10 @@ export default function NavbarLinks({ linksItems, notificationsToggle }) { // Verifica si 'Ayuda' tiene un submenú y lo renderiza linksItems.find(item => item.nameItem === 'Ayuda').subMenu ? ( linksItems.find(item => item.nameItem === 'Ayuda').subMenu.map((subItem, key) => ( -
+
navigate(subItem.navigate)} > {subItem.nameItem} diff --git a/cosiap_frontend/src/components/common/layouts/LayoutsNavigation/Settings.jsx b/cosiap_frontend/src/components/common/layouts/LayoutsNavigation/Settings.jsx index a8e39f9512aa47a1f3aaad03a2be842b7c406928..44c4898db5991cff77f8c1bacbcdfb67ee4f6516 100644 --- a/cosiap_frontend/src/components/common/layouts/LayoutsNavigation/Settings.jsx +++ b/cosiap_frontend/src/components/common/layouts/LayoutsNavigation/Settings.jsx @@ -9,19 +9,19 @@ export default function Settings( {settingsRef, selectedNav, setSelectedNav} ){
diff --git a/cosiap_frontend/src/components/common/layouts/LayoutsNavigation/Sidebar/Sidebar.jsx b/cosiap_frontend/src/components/common/layouts/LayoutsNavigation/Sidebar/Sidebar.jsx index 45deddd5e835803ff737be36620d9d9f7909bd1d..e4fb6de23c995df62f9cb7ee636b898fa664828e 100644 --- a/cosiap_frontend/src/components/common/layouts/LayoutsNavigation/Sidebar/Sidebar.jsx +++ b/cosiap_frontend/src/components/common/layouts/LayoutsNavigation/Sidebar/Sidebar.jsx @@ -1,4 +1,5 @@ import { useState, useRef, useEffect } from "react"; +import { useNavigate } from "react-router-dom"; import MobileMenuToggle from "@/components/common/layouts/LayoutsNavigation/MobileMenuToggle"; import NotificationToggle from "@/components/common/layouts/LayoutsNavigation/NotificationToggle"; import SidebarLinks from "@/components/common/layouts/LayoutsNavigation/Sidebar/SidebarLinks"; @@ -7,6 +8,7 @@ import Notifications from "@/components/common/layouts/LayoutsNavigation/Sidebar import MobileMenu from "@/components/common/layouts/LayoutsNavigation/Sidebar/MobileMenu"; export default function Sidebar( {linksItems, viewMenu, setViewMenu} ){ + const navigate = useNavigate(); // Estado para controlar la visibilidad de las notificaciones const [viewNotifications, setViewNotifications] = useState(false); @@ -55,7 +57,8 @@ export default function Sidebar( {linksItems, viewMenu, setViewMenu} ){ {/* Contenedor de parte superior */}
-
+
navigate('/inicio')}>
cosiap diff --git a/cosiap_frontend/src/components/common/layouts/LayoutsNavigation/Sidebar/SidebarBrand.jsx b/cosiap_frontend/src/components/common/layouts/LayoutsNavigation/Sidebar/SidebarBrand.jsx index f466461974913a60c94983a548c79c5cf3e5ccc8..3dde7c5ae79762872e066e8fbd52a7b200377fcc 100644 --- a/cosiap_frontend/src/components/common/layouts/LayoutsNavigation/Sidebar/SidebarBrand.jsx +++ b/cosiap_frontend/src/components/common/layouts/LayoutsNavigation/Sidebar/SidebarBrand.jsx @@ -1,6 +1,10 @@ +import { useNavigate } from "react-router-dom"; + export default function SidebarBrand(){ + const navigate = useNavigate(); + return ( - <> +
navigate('/inicio')} className="cursor-pointer">
@@ -9,6 +13,6 @@ export default function SidebarBrand(){ cosiap
- +
); } \ No newline at end of file diff --git a/cosiap_frontend/src/components/common/layouts/LayoutsNavigation/Sidebar/SidebarLinks.jsx b/cosiap_frontend/src/components/common/layouts/LayoutsNavigation/Sidebar/SidebarLinks.jsx index 171e707c587b2593168d710164292811aa00926d..d5b456f989fd2df5db6290dde5b7642492e15765 100644 --- a/cosiap_frontend/src/components/common/layouts/LayoutsNavigation/Sidebar/SidebarLinks.jsx +++ b/cosiap_frontend/src/components/common/layouts/LayoutsNavigation/Sidebar/SidebarLinks.jsx @@ -1,16 +1,17 @@ import { useState } from "react"; +import { useNavigate } from "react-router-dom"; export default function SidebarLinks( {linksItems} ) { + const navigate = useNavigate(); const [viewSubMenuHelp, setViewSubMenuHelp] = useState(false); - return ( // Si existe linksItems, mapea cada uno para generar enlaces linksItems ? ( linksItems.map((item) => ( <> {/* Enlace principal de cada ítem del menú */} - @@ -53,13 +56,16 @@ export default function SidebarLinks( {linksItems} ) { // Componente para renderizar el submenú de "Ayuda" function SubMenuAyuda({ viewSubMenuHelp, items }) { + const navigate = useNavigate(); return ( // Si el submenú está visible, mapea sus ítems para generar enlaces viewSubMenuHelp && ( items.map((item) => ( - + navigate(item.navigate)} + > {item.nameItem} {/* Nombre del ítem del submenú */} diff --git a/cosiap_frontend/src/components/common/utility/LoginRequiredRoutes.jsx b/cosiap_frontend/src/components/common/utility/LoginRequiredRoutes.jsx index b9219626ad61725287116784992e90e70dbaff4d..784e8ac1728fe7edff70184fe8ca04d0f1e28bb1 100644 --- a/cosiap_frontend/src/components/common/utility/LoginRequiredRoutes.jsx +++ b/cosiap_frontend/src/components/common/utility/LoginRequiredRoutes.jsx @@ -5,7 +5,7 @@ export const LoginRequiredRoutes = () => { const { token } = useAutenticacion(); if (token === null) { - return ; + return ; } else if (token === undefined) { return null; // O un spinner de carga o marcador de posición } else { diff --git a/cosiap_frontend/src/components/users/Inicio.jsx b/cosiap_frontend/src/components/users/Inicio.jsx deleted file mode 100644 index 84cfb12a3199ede875a7b73bc31592e121409670..0000000000000000000000000000000000000000 --- a/cosiap_frontend/src/components/users/Inicio.jsx +++ /dev/null @@ -1,106 +0,0 @@ -import { useState, useEffect, useRef } from "react"; -import Navbar from "@/components/common/layouts/LayoutsNavigation/Navbar/Navbar"; -import Sidebar from "@/components/common/layouts/LayoutsNavigation/Sidebar/Sidebar"; -import SettingsToggle from "@/components/common/layouts/LayoutsNavigation/SettingsToggle"; -import Settings from "@/components/common/layouts/LayoutsNavigation/Settings"; - -const linksItemsSolicitante = [ - { - nameIcon: 'library_books', - nameItem: 'Modalidades', - isSelected: true - }, - { - nameIcon: 'history', - nameItem: 'Historial', - isSelected: false - }, - { - nameIcon: 'mark_as_unread', - nameItem: 'Recepción de ayuda', - isSelected: false - }, - { - nameIcon: 'help', - nameItem: 'Ayuda', - isSelected: false, - subMenu: [ - { - nameItem: 'Manual', - isSelected: false - }, - { - nameItem: 'Chat', - isSelected: false - } - ] - }, - - { - nameIcon: 'account_circle', - nameItem: 'Perfil', - isSelected: false - } -]; - - - -export default function Inicio() { - // Estado para controlar la visibilidad de los menus de pantalla chicas - const [viewMenu, setViewMenu] = useState(false); - const [selectedNav, setSelectedNav] = useState("sidebar"); - const [viewSettings, setViewSettings] = useState(false); - - const settingsRef = useRef(); - const settingsToggleRef = useRef(); - - // Efecto para manejar los clics fuera de settings - useEffect(() => { - function handleClickOutside(event) { - // Cierra el menú si se hace clic fuera de él y de su botón de toggle - if (settingsRef.current && !settingsRef.current.contains(event.target) && - settingsToggleRef.current && !settingsToggleRef.current.contains(event.target)) { - setViewSettings(false); - } - } - // Añade el event listener para detectar clics fuera de los elementos - document.addEventListener("mousedown", handleClickOutside); - // Remueve el event listener cuando el componente se desmonte - return () => { - document.removeEventListener("mousedown", handleClickOutside); - }; - }, []); - - return ( - <> -
- - {selectedNav === 'navbar' && ( - - )} - {selectedNav === 'sidebar' && ( - - )} - -
-
setViewSettings(!viewSettings)} - > - -
- {viewSettings && ( - - )} - - {/* Aqui se pondrian los componentes */} -
-
- dsadssa -
-
-
-
- - ); -} \ No newline at end of file diff --git a/cosiap_frontend/src/components/users/Login/Login.jsx b/cosiap_frontend/src/components/users/Login/Login.jsx index 2c90335c06929d5856598c00b136b50efded766a..36a3f6747005cb5e0e143466b39c07f9a0ee283b 100644 --- a/cosiap_frontend/src/components/users/Login/Login.jsx +++ b/cosiap_frontend/src/components/users/Login/Login.jsx @@ -8,13 +8,13 @@ export function Login( {setViewPageLoader} ) { const navigate = useNavigate(); return ( - + <>

¿Haz olvidado tu contraseña?

navigate('reset_password')}> - Reestablecer contraseña + Restablecer contraseña

¿Aun no tienes cuenta? @@ -22,6 +22,7 @@ export function Login( {setViewPageLoader} ) {

navigate('register')}> Registrate

-
+ + ); } \ No newline at end of file diff --git a/cosiap_frontend/src/components/users/Password/ResetPassword.jsx b/cosiap_frontend/src/components/users/Password/ResetPassword.jsx index 951c8a5154b1638c70a79f90634cb7d0b2c00593..69c72deb6b0bde2f2b989febf54a644e29d4ca84 100644 --- a/cosiap_frontend/src/components/users/Password/ResetPassword.jsx +++ b/cosiap_frontend/src/components/users/Password/ResetPassword.jsx @@ -45,33 +45,30 @@ export default function ResetPassword({ setViewPageLoader }){ } return ( - -
- { - viewChangePasswordForm ? ( - <> - - - ) : ( - <> -
-

- Se le enviara un correo para restablecer la contraseña -

-
- - - ) - } -
- -
+
+ { + viewChangePasswordForm ? ( + <> + + + ) : ( + <> +
+

+ Se le enviara un correo para restablecer la contraseña +

+
+ + + ) + } +
); } \ No newline at end of file diff --git a/cosiap_frontend/src/components/users/Password/ResetPasswordForm.jsx b/cosiap_frontend/src/components/users/Password/ResetPasswordForm.jsx index cc3f253b3ffe911c776024912aabde812360e944..0543fe64ecb198459a7e3568c61d906778617ad9 100644 --- a/cosiap_frontend/src/components/users/Password/ResetPasswordForm.jsx +++ b/cosiap_frontend/src/components/users/Password/ResetPasswordForm.jsx @@ -21,16 +21,15 @@ export default function ResetPasswordForm({ setViewPageLoader }){ const handleFormSubmission = async (data) => { setViewPageLoader(true); - try { const response = await api.usuarios.restablecerPassword(data); console.log('Password reset succesfuly: ', response.data); - setEmailSent(true); + } catch (error) { console.error('Password reset failed: ', error); console.log(error.response.data); - setFormError(error.response.data); } + setEmailSent(true); setViewPageLoader(false); } return ( diff --git a/cosiap_frontend/src/components/users/Register/Register.jsx b/cosiap_frontend/src/components/users/Register/Register.jsx index 4ecbdae50432db44affbb7c41942d894e4582bef..0da1add319771551bdc03ad650d6123ac64a12e4 100644 --- a/cosiap_frontend/src/components/users/Register/Register.jsx +++ b/cosiap_frontend/src/components/users/Register/Register.jsx @@ -42,83 +42,75 @@ export default function Register({setViewPageLoader} ) { } } - - function navigateLogin(){ - navigate('/authentication'); - } - return ( - - - { - verifySuccess === null ? ( - !sentEmail ? ( - <> - -

- Iniciar sesión -

- - ) : ( - <> -
-
-

¡Correo de confirmación
enviado!

-
-
-

Se ha enviado un correo
electrónico para confirmar la
creación de tu cuenta.

-
-
-
- -
- - ) - ) : - ( - <> -
-
-

- {verifySuccess ? ( - <> - ¡Haz confirmado la - creación de tu cuenta! - - ) : ( - <> - Lo sentimos, tu token - de verificación ha expirado. - - )} -

-
-
-

- {verifySuccess ? ( - <> - Ahora puedes iniciar sesión con
- tus credenciales - - ) : ( - <> - Realiza de nuevo tu registro para
- un nuevo enlace de verificación - - )} -

-
+ + verifySuccess === null ? ( + !sentEmail ? ( + <> + +

navigate('/authentication')}> + Iniciar sesión +

+ + ) : ( + <> +
+
+

¡Correo de confirmación
enviado!

-
- +
+

Se ha enviado un correo
electrónico para confirmar la
creación de tu cuenta.

- - ) - } - +
+
+ +
+ + ) + ) : + ( + <> +
+
+

+ {verifySuccess ? ( + <> + ¡Haz confirmado la + creación de tu cuenta! + + ) : ( + <> + Lo sentimos, tu token + de verificación ha expirado. + + )} +

+
+
+

+ {verifySuccess ? ( + <> + Ahora puedes iniciar sesión con
+ tus credenciales + + ) : ( + <> + Realiza de nuevo tu registro para
+ un nuevo enlace de verificación + + )} +

+
+
+
+ +
+ + ) + ); } \ No newline at end of file diff --git a/cosiap_frontend/src/components/users/Register/RegisterForm.jsx b/cosiap_frontend/src/components/users/Register/RegisterForm.jsx index 153e0db2fc39c6d7e90d70f0ebf485b4a183be40..9c513478913af1b6566d12ef969c22014c7a9ff4 100644 --- a/cosiap_frontend/src/components/users/Register/RegisterForm.jsx +++ b/cosiap_frontend/src/components/users/Register/RegisterForm.jsx @@ -1,7 +1,6 @@ import { RegisterInput } from "./RegisterInput"; import { RegisterInputPassword } from "./RegisterInputPassword"; import { useState } from "react"; -import { ErrorDisplay } from '@/components/common/ui/ErrorDisplay'; import { useForm } from "react-hook-form"; import { yupResolver } from "@hookform/resolvers/yup"; import { RegisterValidationSchema } from "@/components/FormsValidations";