From fb783b0b8be5b1080db98da595f7b9ad71054e81 Mon Sep 17 00:00:00 2001 From: Elliot Axel Noriega Date: Fri, 5 Jul 2024 21:07:47 -0600 Subject: [PATCH 1/9] =?UTF-8?q?Correccion=20de=20detalles=20en=20el=20dise?= =?UTF-8?q?=C3=B1o=20y=20reestructuracion=20de=20componentes=20de=20UI=20d?= =?UTF-8?q?e=20usuarios=20para=20su=20reutilizaci=C3=B3n?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../LayoutAuthenticator/Authentication.jsx | 52 ++++++++++++++++++ .../static/images/LayoutAuthenticator/Eye.svg | 4 ++ .../images/LayoutAuthenticator/EyeOff.svg | 10 ++++ .../LayoutAuthenticator/LogosGobierno.svg | 9 +++ .../images/LayoutAuthenticator/email.svg | 9 +++ .../images/LayoutAuthenticator/password.svg | 9 +++ .../images/LayoutAuthenticator/user.svg | 3 + cosiap_frontend/src/App.jsx | 2 + .../src/assets/img/LogosGobierno.png | Bin 17218 -> 0 bytes .../common/{ui => base}/FormInput.jsx | 4 +- .../layouts/LayoutBaseAuthenticator.jsx | 44 +++++++++++++++ .../users/LoginPage/LoginContainer.jsx | 35 ------------ .../components/users/LoginPage/LoginForm.jsx | 52 +++++++++--------- .../users/LoginPage/LoginInputPassword.jsx | 39 +++++++++++++ .../components/users/LoginPage/LoginPage.jsx | 18 +++++- .../src/components/users/LoginPage/email.svg | 9 +++ .../components/users/LoginPage/loginInput.jsx | 4 +- 17 files changed, 236 insertions(+), 67 deletions(-) create mode 100644 cosiap_api/static/images/LayoutAuthenticator/Authentication.jsx create mode 100644 cosiap_api/static/images/LayoutAuthenticator/Eye.svg create mode 100644 cosiap_api/static/images/LayoutAuthenticator/EyeOff.svg create mode 100644 cosiap_api/static/images/LayoutAuthenticator/LogosGobierno.svg create mode 100644 cosiap_api/static/images/LayoutAuthenticator/email.svg create mode 100644 cosiap_api/static/images/LayoutAuthenticator/password.svg create mode 100644 cosiap_api/static/images/LayoutAuthenticator/user.svg delete mode 100644 cosiap_frontend/src/assets/img/LogosGobierno.png rename cosiap_frontend/src/components/common/{ui => base}/FormInput.jsx (94%) create mode 100644 cosiap_frontend/src/components/common/layouts/LayoutBaseAuthenticator.jsx delete mode 100644 cosiap_frontend/src/components/users/LoginPage/LoginContainer.jsx create mode 100644 cosiap_frontend/src/components/users/LoginPage/LoginInputPassword.jsx create mode 100644 cosiap_frontend/src/components/users/LoginPage/email.svg diff --git a/cosiap_api/static/images/LayoutAuthenticator/Authentication.jsx b/cosiap_api/static/images/LayoutAuthenticator/Authentication.jsx new file mode 100644 index 0000000..94a409a --- /dev/null +++ b/cosiap_api/static/images/LayoutAuthenticator/Authentication.jsx @@ -0,0 +1,52 @@ +import { useState } from "react"; +import Login from "./Login.jsx"; +import Registrarse from "./Registrarse.jsx"; + +export default function Authentication() { + const [view, setView] = useState('Login'); + + const renderPage = () => { + switch (view) { + case 'Login': + return ; + case 'Registrarse': + return ; + // case 'resetPassword': + // return ; + default: + return ; + } + } + + return ( + <> +
+
+
= 640 ? 'absolute' : 'relative', + left: window.innerWidth >= 640 ? '25%' : '0', + top: window.innerWidth >= 640 ? '50%' : 'auto', + transform: window.innerWidth >= 640 ? 'translateY(-50%)' : 'none', + }}> + +
+ company +

+ {(view === 'Login') ? "Iniciar SesiĆ³n" : (view == "Registrarse") ? "Registrarse" : "fds"} +

+
+ +
+ {renderPage()} +
+
+
+
+ + ); +} \ No newline at end of file diff --git a/cosiap_api/static/images/LayoutAuthenticator/Eye.svg b/cosiap_api/static/images/LayoutAuthenticator/Eye.svg new file mode 100644 index 0000000..e4bde4b --- /dev/null +++ b/cosiap_api/static/images/LayoutAuthenticator/Eye.svg @@ -0,0 +1,4 @@ + + + + diff --git a/cosiap_api/static/images/LayoutAuthenticator/EyeOff.svg b/cosiap_api/static/images/LayoutAuthenticator/EyeOff.svg new file mode 100644 index 0000000..5f2c12a --- /dev/null +++ b/cosiap_api/static/images/LayoutAuthenticator/EyeOff.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/cosiap_api/static/images/LayoutAuthenticator/LogosGobierno.svg b/cosiap_api/static/images/LayoutAuthenticator/LogosGobierno.svg new file mode 100644 index 0000000..493bf5f --- /dev/null +++ b/cosiap_api/static/images/LayoutAuthenticator/LogosGobierno.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/cosiap_api/static/images/LayoutAuthenticator/email.svg b/cosiap_api/static/images/LayoutAuthenticator/email.svg new file mode 100644 index 0000000..8ea8f35 --- /dev/null +++ b/cosiap_api/static/images/LayoutAuthenticator/email.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/cosiap_api/static/images/LayoutAuthenticator/password.svg b/cosiap_api/static/images/LayoutAuthenticator/password.svg new file mode 100644 index 0000000..40ad639 --- /dev/null +++ b/cosiap_api/static/images/LayoutAuthenticator/password.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/cosiap_api/static/images/LayoutAuthenticator/user.svg b/cosiap_api/static/images/LayoutAuthenticator/user.svg new file mode 100644 index 0000000..f280c16 --- /dev/null +++ b/cosiap_api/static/images/LayoutAuthenticator/user.svg @@ -0,0 +1,3 @@ + + + diff --git a/cosiap_frontend/src/App.jsx b/cosiap_frontend/src/App.jsx index f812c93..4a6dcf6 100644 --- a/cosiap_frontend/src/App.jsx +++ b/cosiap_frontend/src/App.jsx @@ -8,12 +8,14 @@ import "./App.css"; import {LoginPage} from "./components/users/LoginPage/LoginPage"; import {InicioTest} from './components/users/InicioTest'; + function App() { return ( Sistema de apoyos COZCyT + diff --git a/cosiap_frontend/src/assets/img/LogosGobierno.png b/cosiap_frontend/src/assets/img/LogosGobierno.png deleted file mode 100644 index 8acbe4105836731b5dd4ffc6ec3406451a6b14aa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17218 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 6eI-neO$3VQbtTE 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 VN-YUR6Ab_W002ovPDHLkV1jPhJzf9+ diff --git a/cosiap_frontend/src/components/common/ui/FormInput.jsx b/cosiap_frontend/src/components/common/base/FormInput.jsx similarity index 94% rename from cosiap_frontend/src/components/common/ui/FormInput.jsx rename to cosiap_frontend/src/components/common/base/FormInput.jsx index 3ac82c1..336cd3d 100644 --- a/cosiap_frontend/src/components/common/ui/FormInput.jsx +++ b/cosiap_frontend/src/components/common/base/FormInput.jsx @@ -3,7 +3,7 @@ import {ErrorDisplay} from '@/components/common/ui/ErrorDisplay' export function FormInput({ id, name, type, placeholder, className, register, errors }) { return ( -
+ <> -
+ ); } diff --git a/cosiap_frontend/src/components/common/layouts/LayoutBaseAuthenticator.jsx b/cosiap_frontend/src/components/common/layouts/LayoutBaseAuthenticator.jsx new file mode 100644 index 0000000..3a6da1e --- /dev/null +++ b/cosiap_frontend/src/components/common/layouts/LayoutBaseAuthenticator.jsx @@ -0,0 +1,44 @@ + +export default function LayoutBaseAuthenticator({title, children}) { + return ( +
+
+
+ +
+
+ +
+
+
+ +
+
+ {/* Contenido del login */} +
+
+
+ company +

+ {title} +

+
+ + {children} +
+ +
+
+ ); +} \ No newline at end of file diff --git a/cosiap_frontend/src/components/users/LoginPage/LoginContainer.jsx b/cosiap_frontend/src/components/users/LoginPage/LoginContainer.jsx deleted file mode 100644 index c15abd2..0000000 --- a/cosiap_frontend/src/components/users/LoginPage/LoginContainer.jsx +++ /dev/null @@ -1,35 +0,0 @@ -import { LoginForm } from './LoginForm'; - -export function LoginContainer() { - return ( -
-
-
= 640 ? "absolute" : "relative", - left: window.innerWidth >= 640 ? "25%" : "0", - top: window.innerWidth >= 640 ? "50%" : "auto", - transform: window.innerWidth >= 640 ? "translateY(-50%)" : "none", - }} - > -
- company -

- INICIAR SESIƓN -

-
- -
-
-
- ); -} diff --git a/cosiap_frontend/src/components/users/LoginPage/LoginForm.jsx b/cosiap_frontend/src/components/users/LoginPage/LoginForm.jsx index a9ab1fe..70e3ffa 100644 --- a/cosiap_frontend/src/components/users/LoginPage/LoginForm.jsx +++ b/cosiap_frontend/src/components/users/LoginPage/LoginForm.jsx @@ -2,7 +2,8 @@ import { useForm } from "react-hook-form"; import * as Yup from "yup"; import { yupResolver } from "@hookform/resolvers/yup"; import api from "@/api"; // AsegĆŗrate de importar tu instancia de API -import {LoginInput} from '@/components/users/LoginPage/loginInput' +import {LoginInput} from '@/components/users/LoginPage/LoginInput' +import { LoginInputPassword } from "@/components/users/LoginPage/LoginInputPassword"; import { useState } from "react"; import {ErrorDisplay} from '@/components/common/ui/ErrorDisplay' @@ -39,40 +40,39 @@ export function LoginForm() { return (
-
- - + +
+ + Icono Correo +
+
+ + +
-

- ĀæHaz olvidado tu contraseƱa? -

-

- ĀæAun no tienes cuenta? -

-

- Registrate -

+
); } diff --git a/cosiap_frontend/src/components/users/LoginPage/LoginInputPassword.jsx b/cosiap_frontend/src/components/users/LoginPage/LoginInputPassword.jsx new file mode 100644 index 0000000..92a6cba --- /dev/null +++ b/cosiap_frontend/src/components/users/LoginPage/LoginInputPassword.jsx @@ -0,0 +1,39 @@ +import {FormInput} from '@/components/common/base/FormInput.jsx'; +import PropTypes from 'prop-types'; +import { useState } from 'react'; + +export const LoginInputPassword = ({ name, placeholder, className, register, errors }) => { + const [showPassword, setShowPassword] = useState(false); + + const switchShowPassword = () => { + setShowPassword(!showPassword); + }; + + return ( + <> + + + + + ); +}; + +LoginInputPassword.propTypes = { + name: PropTypes.string.isRequired, + placeholder: PropTypes.string, + className: PropTypes.string, + register: PropTypes.func.isRequired, + errors: PropTypes.oneOfType([ + PropTypes.object, + PropTypes.array, + PropTypes.string + ]) +}; \ No newline at end of file diff --git a/cosiap_frontend/src/components/users/LoginPage/LoginPage.jsx b/cosiap_frontend/src/components/users/LoginPage/LoginPage.jsx index fa918d3..8ca6917 100644 --- a/cosiap_frontend/src/components/users/LoginPage/LoginPage.jsx +++ b/cosiap_frontend/src/components/users/LoginPage/LoginPage.jsx @@ -1,7 +1,21 @@ -import { LoginContainer } from './LoginContainer'; +import LayoutBaseAuthenticator from '@/components/common/layouts/LayoutBaseAuthenticator'; +import { LoginForm } from './LoginForm'; export function LoginPage() { return ( - + + +

+ ĀæHaz olvidado tu contraseƱa? +

+

+ ĀæAun no tienes cuenta? +

+

+ Registrate +

+
); } \ No newline at end of file diff --git a/cosiap_frontend/src/components/users/LoginPage/email.svg b/cosiap_frontend/src/components/users/LoginPage/email.svg new file mode 100644 index 0000000..8ea8f35 --- /dev/null +++ b/cosiap_frontend/src/components/users/LoginPage/email.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/cosiap_frontend/src/components/users/LoginPage/loginInput.jsx b/cosiap_frontend/src/components/users/LoginPage/loginInput.jsx index 642062f..1fd013f 100644 --- a/cosiap_frontend/src/components/users/LoginPage/loginInput.jsx +++ b/cosiap_frontend/src/components/users/LoginPage/loginInput.jsx @@ -1,4 +1,4 @@ -import {FormInput} from '@/components/common/ui/FormInput'; +import {FormInput} from '@/components/common/base/FormInput.jsx'; import PropTypes from 'prop-types'; export const LoginInput = ({ name, type, placeholder, className, register, errors }) => { @@ -8,7 +8,7 @@ export const LoginInput = ({ name, type, placeholder, className, register, error name={name} type={type} placeholder={placeholder} - className={`customInputsButtons block w-full rounded-tr-2xl bg-[#F6F2F2] border-0 py-1.5 text-gray-900 shadow-sm ring-1 ring-inset ring-principal_f placeholder:text-gray-400 focus:ring-2 focus:ring-inset focus:ring-principal_mf sm:text-sm sm:leading-6 ${className}`} + className={`customInputsButtons block w-full rounded-tr-2xl bg-[#F6F2F2] border-0 py-1.5 text-gray-900 shadow-sm ring-1 ring-inset ring-[var(--principal-f)] placeholder:text-gray-400 focus:ring-2 focus:ring-inset focus:ring-[var(--principal-mf)] sm:text-sm sm:leading-6 ${className}`} register={register} errors={errors} /> -- GitLab From d3b66a2954542f2e19a80b79522b0a04e2517402 Mon Sep 17 00:00:00 2001 From: Elliot Axel Noriega Date: Tue, 9 Jul 2024 20:05:57 -0600 Subject: [PATCH 2/9] Reestructuracion para componentes de autenticacion en una sola pagina (login, registrarse, etc) --- cosiap_frontend/src/App.jsx | 6 +++--- .../components/common/layouts/LayoutBaseAuthenticator.jsx | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/cosiap_frontend/src/App.jsx b/cosiap_frontend/src/App.jsx index 4a6dcf6..5590358 100644 --- a/cosiap_frontend/src/App.jsx +++ b/cosiap_frontend/src/App.jsx @@ -5,7 +5,7 @@ import {Autenticador} from "@/components/common/utility/Autenticador"; import {LoginRequiredRoutes} from "@/components/common/utility/LoginRequiredRoutes" import "./App.css"; -import {LoginPage} from "./components/users/LoginPage/LoginPage"; +import { AuthPage } from "./components/users/AuthPage"; import {InicioTest} from './components/users/InicioTest'; @@ -21,8 +21,8 @@ function App() { {/* Rutas publicas */} - } /> - } /> + } /> + } /> {/* Rutas protegidas */} }> diff --git a/cosiap_frontend/src/components/common/layouts/LayoutBaseAuthenticator.jsx b/cosiap_frontend/src/components/common/layouts/LayoutBaseAuthenticator.jsx index 3a6da1e..53e85fc 100644 --- a/cosiap_frontend/src/components/common/layouts/LayoutBaseAuthenticator.jsx +++ b/cosiap_frontend/src/components/common/layouts/LayoutBaseAuthenticator.jsx @@ -2,7 +2,7 @@ export default function LayoutBaseAuthenticator({title, children}) { return (
-
+
@@ -14,7 +14,7 @@ export default function LayoutBaseAuthenticator({title, children}) {
- {/* Contenido del login */} + {/* Contenido de authentication */}
Date: Tue, 9 Jul 2024 20:09:05 -0600 Subject: [PATCH 3/9] =?UTF-8?q?Redefinicion=20de=20carpeta,=20acomodo=20de?= =?UTF-8?q?=20login=20acorde=20al=20dise=C3=B1o?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/components/users/Login/Login.jsx | 19 +++++ .../src/components/users/Login/LoginForm.jsx | 78 +++++++++++++++++++ .../components/users/Login/LoginInputCURP.jsx | 33 ++++++++ .../users/Login/LoginInputPassword.jsx | 31 ++++++++ 4 files changed, 161 insertions(+) create mode 100644 cosiap_frontend/src/components/users/Login/Login.jsx create mode 100644 cosiap_frontend/src/components/users/Login/LoginForm.jsx create mode 100644 cosiap_frontend/src/components/users/Login/LoginInputCURP.jsx create mode 100644 cosiap_frontend/src/components/users/Login/LoginInputPassword.jsx diff --git a/cosiap_frontend/src/components/users/Login/Login.jsx b/cosiap_frontend/src/components/users/Login/Login.jsx new file mode 100644 index 0000000..da4d585 --- /dev/null +++ b/cosiap_frontend/src/components/users/Login/Login.jsx @@ -0,0 +1,19 @@ + +import { LoginForm } from './LoginForm'; + +export function Login( {setComponent} ) { + return ( + <> + +

+ ĀæHaz olvidado tu contraseƱa? +

+

+ ĀæAun no tienes cuenta? +

+

setComponent('Register')}> + Registrate +

+ + ); +} \ No newline at end of file diff --git a/cosiap_frontend/src/components/users/Login/LoginForm.jsx b/cosiap_frontend/src/components/users/Login/LoginForm.jsx new file mode 100644 index 0000000..c6d1a0b --- /dev/null +++ b/cosiap_frontend/src/components/users/Login/LoginForm.jsx @@ -0,0 +1,78 @@ +import { useForm } from "react-hook-form"; +import * as Yup from "yup"; +import { yupResolver } from "@hookform/resolvers/yup"; +import api from "@/api"; // AsegĆŗrate de importar tu instancia de API +import {LoginInputCURP} from '@/components/users/Login/LoginInputCURP' +import { LoginInputPassword } from "@/components/users/Login/LoginInputPassword"; +import { useState } from "react"; +import {ErrorDisplay} from '@/components/common/ui/ErrorDisplay' + +const CURP_REGEX = /^[A-Z]{1}[AEIOU]{1}[A-Z]{2}[0-9]{2}(0[1-9]|1[0-2])(0[1-9]|1[0-9]|2[0-9]|3[0-1])[HM]{1}(AS|BC|BS|CC|CH|CL|CM|DF|DG|GT|GR|HG|JC|MC|MN|MS|NT|NL|OC|PL|QT|QR|SP|SL|SR|TC|TS|TL|VZ|YN|ZS|NE)[B-DF-HJ-NP-TV-Z]{3}[0-9A-Z]{1}[0-9]{1}$/; + +const validationSchema = Yup.object({ + curp: Yup.string() + .required("Requerido") + .matches(CURP_REGEX, "CURP invĆ”lido"), + password: Yup.string().required("Requerido"), +}); + +export function LoginForm() { + const [loginError, setLoginError] = useState('') + const { + register, + handleSubmit, + formState: { errors, isSubmitting }, + } = useForm({ + resolver: yupResolver(validationSchema), + }); + + const onSubmit = async (data) => { + try { + const response = await api.usuarios.token.login(data); + console.log("Login successful:", response.data); + // Manejar la respuesta exitosa aquĆ­ + } catch (error) { + console.error("Login failed:", error); + setLoginError(error.response.data.detail) + } + }; + + return ( +
+
+ + +
+ + +
+
+ +
+
+ +
+ + +
+ ); +} diff --git a/cosiap_frontend/src/components/users/Login/LoginInputCURP.jsx b/cosiap_frontend/src/components/users/Login/LoginInputCURP.jsx new file mode 100644 index 0000000..1ba2908 --- /dev/null +++ b/cosiap_frontend/src/components/users/Login/LoginInputCURP.jsx @@ -0,0 +1,33 @@ +import {FormInput} from '@/components/common/base/FormInput.jsx'; +import PropTypes from 'prop-types'; + +export const LoginInputCURP = ({ name, type, placeholder, className, register, errors }) => { + return ( + <> + + Icono Correo + + + ); +}; + +LoginInputCURP.propTypes = { + name: PropTypes.string.isRequired, + type: PropTypes.string.isRequired, + placeholder: PropTypes.string, + className: PropTypes.string, + register: PropTypes.func.isRequired, + errors: PropTypes.oneOfType([ + PropTypes.object, + PropTypes.array, + PropTypes.string + ]) +}; \ No newline at end of file diff --git a/cosiap_frontend/src/components/users/Login/LoginInputPassword.jsx b/cosiap_frontend/src/components/users/Login/LoginInputPassword.jsx new file mode 100644 index 0000000..ecd1da8 --- /dev/null +++ b/cosiap_frontend/src/components/users/Login/LoginInputPassword.jsx @@ -0,0 +1,31 @@ +import {FormInputPassword} from '@/components/common/base/FormInputPassword.jsx'; +import PropTypes from 'prop-types'; + +export const LoginInputPassword = ({ name, placeholder, className, register, errors }) => { + + return ( + <> + + + + ); +}; + +LoginInputPassword.propTypes = { + name: PropTypes.string.isRequired, + placeholder: PropTypes.string, + className: PropTypes.string, + register: PropTypes.func.isRequired, + errors: PropTypes.oneOfType([ + PropTypes.object, + PropTypes.array, + PropTypes.string + ]) +}; \ No newline at end of file -- GitLab From 9e03a1e6188e858fbc46772b5c5ffc61a8d20640 Mon Sep 17 00:00:00 2001 From: Elliot Axel Noriega Date: Tue, 9 Jul 2024 20:10:52 -0600 Subject: [PATCH 4/9] Modificacion de elementos reutilizables --- .../src/components/common/base/FormInput.jsx | 4 +- .../common/base/FormInputPassword.jsx | 51 +++++++++++++++++++ .../src/components/common/ui/ErrorDisplay.jsx | 2 +- 3 files changed, 55 insertions(+), 2 deletions(-) create mode 100644 cosiap_frontend/src/components/common/base/FormInputPassword.jsx diff --git a/cosiap_frontend/src/components/common/base/FormInput.jsx b/cosiap_frontend/src/components/common/base/FormInput.jsx index 336cd3d..00adf89 100644 --- a/cosiap_frontend/src/components/common/base/FormInput.jsx +++ b/cosiap_frontend/src/components/common/base/FormInput.jsx @@ -1,7 +1,7 @@ import PropTypes from 'prop-types'; import {ErrorDisplay} from '@/components/common/ui/ErrorDisplay' -export function FormInput({ id, name, type, placeholder, className, register, errors }) { +export function FormInput({ id, name, type, placeholder, className, register, errors, onChange }) { return ( <> @@ -23,6 +24,7 @@ FormInput.propTypes = { type: PropTypes.string.isRequired, placeholder: PropTypes.string, className: PropTypes.string, + onChange: PropTypes.string, register: PropTypes.func.isRequired, errors: PropTypes.oneOfType([ PropTypes.object, diff --git a/cosiap_frontend/src/components/common/base/FormInputPassword.jsx b/cosiap_frontend/src/components/common/base/FormInputPassword.jsx new file mode 100644 index 0000000..91b7764 --- /dev/null +++ b/cosiap_frontend/src/components/common/base/FormInputPassword.jsx @@ -0,0 +1,51 @@ +import {FormInput} from '@/components/common/base/FormInput.jsx'; +import PropTypes from 'prop-types'; +import { useState } from 'react'; + +export const FormInputPassword = ({ name, placeholder, className, register, errors }) => { + const [showPassword, setShowPassword] = useState(false); + const [inputValue, setInputValue] = useState(''); + + const switchShowPassword = () => { + setShowPassword(!showPassword); + }; + + const handleInputChange = (e) => { + setInputValue(e.target.value); + }; + + return ( + <> + + {inputValue && ( + + )} + + + ); +}; + +FormInputPassword.propTypes = { + name: PropTypes.string.isRequired, + placeholder: PropTypes.string, + className: PropTypes.string, + register: PropTypes.func.isRequired, + errors: PropTypes.oneOfType([ + PropTypes.object, + PropTypes.array, + PropTypes.string + ]) +}; \ No newline at end of file diff --git a/cosiap_frontend/src/components/common/ui/ErrorDisplay.jsx b/cosiap_frontend/src/components/common/ui/ErrorDisplay.jsx index ebcada8..1c3f76c 100644 --- a/cosiap_frontend/src/components/common/ui/ErrorDisplay.jsx +++ b/cosiap_frontend/src/components/common/ui/ErrorDisplay.jsx @@ -5,7 +5,7 @@ export const ErrorDisplay = ({ errors }) => { if (!errors) return null; return ( -
+
{renderErrors(errors)}
); -- GitLab From f401c0d5160f8accf0bbfeda0bd3fb5331dc2c22 Mon Sep 17 00:00:00 2001 From: Elliot Axel Noriega Date: Tue, 9 Jul 2024 20:12:41 -0600 Subject: [PATCH 5/9] Adicion de api/ en urls de usuario --- cosiap_frontend/src/api.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/cosiap_frontend/src/api.js b/cosiap_frontend/src/api.js index 1330ca3..f324376 100644 --- a/cosiap_frontend/src/api.js +++ b/cosiap_frontend/src/api.js @@ -45,11 +45,11 @@ const api = { axios: ax, //Enpoints del modulo Usuario usuarios: { - get: () => ax.get('/usuarios'), - post: (data) => ax.post('/usuarios', data), - getById: (id) => ax.get(`/usuarios/${id}`), - update: (id, data) => ax.put(`/usuarios/${id}`, data), - delete: (id) => ax.delete(`/usuarios/${id}`), + get: () => ax.get('api/usuarios'), + post: (data) => ax.post('api/usuarios/', data), + getById: (id) => ax.get(`api/usuarios/${id}`), + update: (id, data) => ax.put(`api/usuarios/${id}`, data), + delete: (id) => ax.delete(`api/usuarios/${id}`), token: { login: (data) => ax.post('api/usuarios/token/',data), refresh: () => ax.post('api/usuarios/token/refresh/'), -- GitLab From 18b56d2e3d1c7077a21978786a5beb239e0dde7f Mon Sep 17 00:00:00 2001 From: Elliot Axel Noriega Date: Tue, 9 Jul 2024 20:14:13 -0600 Subject: [PATCH 6/9] Creacion de componente register --- .../src/components/users/AuthPage.jsx | 29 +++++ .../components/users/LoginPage/LoginForm.jsx | 78 ------------ .../components/users/LoginPage/LoginPage.jsx | 21 ---- .../src/components/users/LoginPage/email.svg | 9 -- .../components/users/LoginPage/loginInput.jsx | 29 ----- .../components/users/Register/Register.jsx | 36 ++++++ .../users/Register/RegisterForm.jsx | 114 ++++++++++++++++++ .../RegisterInput.jsx} | 17 +-- .../users/Register/RegisterInputPassword.jsx | 30 +++++ 9 files changed, 214 insertions(+), 149 deletions(-) create mode 100644 cosiap_frontend/src/components/users/AuthPage.jsx delete mode 100644 cosiap_frontend/src/components/users/LoginPage/LoginForm.jsx delete mode 100644 cosiap_frontend/src/components/users/LoginPage/LoginPage.jsx delete mode 100644 cosiap_frontend/src/components/users/LoginPage/email.svg delete mode 100644 cosiap_frontend/src/components/users/LoginPage/loginInput.jsx create mode 100644 cosiap_frontend/src/components/users/Register/Register.jsx create mode 100644 cosiap_frontend/src/components/users/Register/RegisterForm.jsx rename cosiap_frontend/src/components/users/{LoginPage/LoginInputPassword.jsx => Register/RegisterInput.jsx} (58%) create mode 100644 cosiap_frontend/src/components/users/Register/RegisterInputPassword.jsx diff --git a/cosiap_frontend/src/components/users/AuthPage.jsx b/cosiap_frontend/src/components/users/AuthPage.jsx new file mode 100644 index 0000000..75bbf61 --- /dev/null +++ b/cosiap_frontend/src/components/users/AuthPage.jsx @@ -0,0 +1,29 @@ +import LayoutBaseAuthenticator from '@/components/common/layouts/LayoutBaseAuthenticator'; +import { Login } from "./Login/Login"; +import Register from './Register/Register'; +import { useState } from 'react'; + +export function AuthPage() { + const [component, setComponent] = useState('Login') + + const renderPage = () => { + switch (component) { + case 'Login': + return ; + case 'Register': + return ; + // case 'resetPassword': + // return ; + default: + return ; + } + } + + return ( + + {renderPage()} + + ); +} \ No newline at end of file diff --git a/cosiap_frontend/src/components/users/LoginPage/LoginForm.jsx b/cosiap_frontend/src/components/users/LoginPage/LoginForm.jsx deleted file mode 100644 index 70e3ffa..0000000 --- a/cosiap_frontend/src/components/users/LoginPage/LoginForm.jsx +++ /dev/null @@ -1,78 +0,0 @@ -import { useForm } from "react-hook-form"; -import * as Yup from "yup"; -import { yupResolver } from "@hookform/resolvers/yup"; -import api from "@/api"; // AsegĆŗrate de importar tu instancia de API -import {LoginInput} from '@/components/users/LoginPage/LoginInput' -import { LoginInputPassword } from "@/components/users/LoginPage/LoginInputPassword"; -import { useState } from "react"; -import {ErrorDisplay} from '@/components/common/ui/ErrorDisplay' - -const CURP_REGEX = /^[A-Z]{1}[AEIOU]{1}[A-Z]{2}[0-9]{2}(0[1-9]|1[0-2])(0[1-9]|1[0-9]|2[0-9]|3[0-1])[HM]{1}(AS|BC|BS|CC|CH|CL|CM|DF|DG|GT|GR|HG|JC|MC|MN|MS|NT|NL|OC|PL|QT|QR|SP|SL|SR|TC|TS|TL|VZ|YN|ZS|NE)[B-DF-HJ-NP-TV-Z]{3}[0-9A-Z]{1}[0-9]{1}$/; - -const validationSchema = Yup.object({ - curp: Yup.string() - .matches(CURP_REGEX, "CURP invĆ”lido") - .required("Requerido"), - password: Yup.string().required("Requerido"), -}); - -export function LoginForm() { - const [loginError, setLoginError] = useState('') - const { - register, - handleSubmit, - formState: { errors, isSubmitting }, - } = useForm({ - resolver: yupResolver(validationSchema), - }); - - const onSubmit = async (data) => { - try { - const response = await api.usuarios.token.login(data); - console.log("Login successful:", response.data); - // Manejar la respuesta exitosa aquĆ­ - } catch (error) { - console.error("Login failed:", error); - setLoginError(error.response.data.detail) - } - }; - - return ( -
- -
-
- - Icono Correo -
-
- - -
-
- -
-
- -
- ); -} diff --git a/cosiap_frontend/src/components/users/LoginPage/LoginPage.jsx b/cosiap_frontend/src/components/users/LoginPage/LoginPage.jsx deleted file mode 100644 index 8ca6917..0000000 --- a/cosiap_frontend/src/components/users/LoginPage/LoginPage.jsx +++ /dev/null @@ -1,21 +0,0 @@ -import LayoutBaseAuthenticator from '@/components/common/layouts/LayoutBaseAuthenticator'; -import { LoginForm } from './LoginForm'; - -export function LoginPage() { - return ( - - -

- ĀæHaz olvidado tu contraseƱa? -

-

- ĀæAun no tienes cuenta? -

-

- Registrate -

-
- ); -} \ No newline at end of file diff --git a/cosiap_frontend/src/components/users/LoginPage/email.svg b/cosiap_frontend/src/components/users/LoginPage/email.svg deleted file mode 100644 index 8ea8f35..0000000 --- a/cosiap_frontend/src/components/users/LoginPage/email.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/cosiap_frontend/src/components/users/LoginPage/loginInput.jsx b/cosiap_frontend/src/components/users/LoginPage/loginInput.jsx deleted file mode 100644 index 1fd013f..0000000 --- a/cosiap_frontend/src/components/users/LoginPage/loginInput.jsx +++ /dev/null @@ -1,29 +0,0 @@ -import {FormInput} from '@/components/common/base/FormInput.jsx'; -import PropTypes from 'prop-types'; - -export const LoginInput = ({ name, type, placeholder, className, register, errors }) => { - return ( - - ); -}; - -LoginInput.propTypes = { - name: PropTypes.string.isRequired, - type: PropTypes.string.isRequired, - placeholder: PropTypes.string, - className: PropTypes.string, - register: PropTypes.func.isRequired, - errors: PropTypes.oneOfType([ - PropTypes.object, - PropTypes.array, - PropTypes.string - ]) -}; \ No newline at end of file diff --git a/cosiap_frontend/src/components/users/Register/Register.jsx b/cosiap_frontend/src/components/users/Register/Register.jsx new file mode 100644 index 0000000..9b6b4cb --- /dev/null +++ b/cosiap_frontend/src/components/users/Register/Register.jsx @@ -0,0 +1,36 @@ +import { useState } from "react"; +import RegisterForm from "./RegisterForm"; + +export default function Register( {setComponent} ) { + const [sentEmail, setSentEmail] = useState(false); + return ( + <> + { + !sentEmail ? ( + <> + +

setComponent('Login')}> + Iniciar sesiĆ³n +

+ + ) : ( + <> +
+
+

Ā”Correo de confirmaciĆ³n
enviado!

+
+
+

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

+
+
+
+ +
+ + ) + } + + ); +} \ 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 new file mode 100644 index 0000000..8519ca2 --- /dev/null +++ b/cosiap_frontend/src/components/users/Register/RegisterForm.jsx @@ -0,0 +1,114 @@ +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 * as Yup from "yup"; +import { yupResolver } from "@hookform/resolvers/yup"; +import api from "@/api"; // AsegĆŗrate de importar tu instancia de API + +const CURP_REGEX = /^[A-Z]{1}[AEIOU]{1}[A-Z]{2}[0-9]{2}(0[1-9]|1[0-2])(0[1-9]|1[0-9]|2[0-9]|3[0-1])[HM]{1}(AS|BC|BS|CC|CH|CL|CM|DF|DG|GT|GR|HG|JC|MC|MN|MS|NT|NL|OC|PL|QT|QR|SP|SL|SR|TC|TS|TL|VZ|YN|ZS|NE)[B-DF-HJ-NP-TV-Z]{3}[0-9A-Z]{1}[0-9]{1}$/; + +const validationSchema = Yup.object({ + nombre: Yup.string() + .required('Campo requerido'), + curp: Yup.string() + .required("Campo requerido") + .matches(CURP_REGEX, "Campo requerido"), + email: Yup.string() + .email("El email no es vĆ”lido") + .required("Campo requerido"), + password: Yup.string() + .required("Campo requerido"), + confirmar_password: Yup.string() + .required("Campo requerido") + .oneOf([Yup.ref('password'), null], 'Las contraseƱas no coinciden') +}); + +export default function RegisterForm( {setSentEmail} ) { + const [registerErrorMessage, setRegisterErrorMessage] = useState(''); + const { + register, + handleSubmit, + formState: { errors, isSubmitting }, + } = useForm({ + resolver: yupResolver(validationSchema), + }); + + const handleFormSubmission = async (data) => { + try { + const response = await api.usuarios.post(data); + console.log("Registration successful:", response.data); + setSentEmail(true); + } catch (error) { + console.error("Registration failed:", error); + if (error.response) { + console.error("Error data:", error.response.data); + setRegisterErrorMessage(error.response.data.detail || "Error desconocido"); + } else { + setRegisterErrorMessage("Error de red o de servidor"); + } + } + }; + + return ( +
+
+ +
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+ +
+ ); +} \ No newline at end of file diff --git a/cosiap_frontend/src/components/users/LoginPage/LoginInputPassword.jsx b/cosiap_frontend/src/components/users/Register/RegisterInput.jsx similarity index 58% rename from cosiap_frontend/src/components/users/LoginPage/LoginInputPassword.jsx rename to cosiap_frontend/src/components/users/Register/RegisterInput.jsx index 92a6cba..4995751 100644 --- a/cosiap_frontend/src/components/users/LoginPage/LoginInputPassword.jsx +++ b/cosiap_frontend/src/components/users/Register/RegisterInput.jsx @@ -1,33 +1,26 @@ import {FormInput} from '@/components/common/base/FormInput.jsx'; import PropTypes from 'prop-types'; -import { useState } from 'react'; - -export const LoginInputPassword = ({ name, placeholder, className, register, errors }) => { - const [showPassword, setShowPassword] = useState(false); - - const switchShowPassword = () => { - setShowPassword(!showPassword); - }; +export const RegisterInput = ({ name, type, placeholder, className, register, errors }) => { return ( <> - - + ); }; -LoginInputPassword.propTypes = { +RegisterInput.propTypes = { name: PropTypes.string.isRequired, + type: PropTypes.string.isRequired, placeholder: PropTypes.string, className: PropTypes.string, register: PropTypes.func.isRequired, diff --git a/cosiap_frontend/src/components/users/Register/RegisterInputPassword.jsx b/cosiap_frontend/src/components/users/Register/RegisterInputPassword.jsx new file mode 100644 index 0000000..e43b748 --- /dev/null +++ b/cosiap_frontend/src/components/users/Register/RegisterInputPassword.jsx @@ -0,0 +1,30 @@ +import {FormInputPassword} from '@/components/common/base/FormInputPassword.jsx'; +import PropTypes from 'prop-types'; + +export const RegisterInputPassword = ({ name, placeholder, className, register, errors }) => { + + return ( + <> + + + ); +}; + +RegisterInputPassword.propTypes = { + name: PropTypes.string.isRequired, + placeholder: PropTypes.string, + className: PropTypes.string, + register: PropTypes.func.isRequired, + errors: PropTypes.oneOfType([ + PropTypes.object, + PropTypes.array, + PropTypes.string + ]) +}; \ No newline at end of file -- GitLab From 86e8d2113dcf63673349d54fe19d9eaef55b3130 Mon Sep 17 00:00:00 2001 From: Elliot Axel Noriega Date: Wed, 10 Jul 2024 11:36:53 -0600 Subject: [PATCH 7/9] =?UTF-8?q?Eliminacion=20de=20archivo=20a=C3=B1adido?= =?UTF-8?q?=20por=20error?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../LayoutAuthenticator/Authentication.jsx | 52 ------------------- 1 file changed, 52 deletions(-) delete mode 100644 cosiap_api/static/images/LayoutAuthenticator/Authentication.jsx diff --git a/cosiap_api/static/images/LayoutAuthenticator/Authentication.jsx b/cosiap_api/static/images/LayoutAuthenticator/Authentication.jsx deleted file mode 100644 index 94a409a..0000000 --- a/cosiap_api/static/images/LayoutAuthenticator/Authentication.jsx +++ /dev/null @@ -1,52 +0,0 @@ -import { useState } from "react"; -import Login from "./Login.jsx"; -import Registrarse from "./Registrarse.jsx"; - -export default function Authentication() { - const [view, setView] = useState('Login'); - - const renderPage = () => { - switch (view) { - case 'Login': - return ; - case 'Registrarse': - return ; - // case 'resetPassword': - // return ; - default: - return ; - } - } - - return ( - <> -
-
-
= 640 ? 'absolute' : 'relative', - left: window.innerWidth >= 640 ? '25%' : '0', - top: window.innerWidth >= 640 ? '50%' : 'auto', - transform: window.innerWidth >= 640 ? 'translateY(-50%)' : 'none', - }}> - -
- company -

- {(view === 'Login') ? "Iniciar SesiĆ³n" : (view == "Registrarse") ? "Registrarse" : "fds"} -

-
- -
- {renderPage()} -
-
-
-
- - ); -} \ No newline at end of file -- GitLab From b4643a3493dd4a5c2fafb853999f7d3e0db766b8 Mon Sep 17 00:00:00 2001 From: Elliot Axel Noriega Date: Wed, 10 Jul 2024 11:53:47 -0600 Subject: [PATCH 8/9] Reuubicacion de iconos de api a frontend --- .../static/images/LayoutAuthenticator/email.svg | 9 --------- .../{LayoutAuthenticator => }/LogosGobierno.svg | 0 .../src/assets/iconsImg}/Eye.svg | 0 .../src/assets/iconsImg}/EyeOff.svg | 0 .../src/assets/iconsImg}/password.svg | 0 .../src/assets/iconsImg}/user.svg | 0 .../src/assets/img/LoginBackground.png | Bin 51238 -> 0 bytes .../common/base/FormInputPassword.jsx | 2 +- .../components/users/Login/LoginInputCURP.jsx | 2 +- .../users/Login/LoginInputPassword.jsx | 2 +- .../components/users/Register/RegisterForm.jsx | 7 +------ 11 files changed, 4 insertions(+), 18 deletions(-) delete mode 100644 cosiap_api/static/images/LayoutAuthenticator/email.svg rename cosiap_api/static/images/{LayoutAuthenticator => }/LogosGobierno.svg (100%) rename {cosiap_api/static/images/LayoutAuthenticator => cosiap_frontend/src/assets/iconsImg}/Eye.svg (100%) rename {cosiap_api/static/images/LayoutAuthenticator => cosiap_frontend/src/assets/iconsImg}/EyeOff.svg (100%) rename {cosiap_api/static/images/LayoutAuthenticator => cosiap_frontend/src/assets/iconsImg}/password.svg (100%) rename {cosiap_api/static/images/LayoutAuthenticator => cosiap_frontend/src/assets/iconsImg}/user.svg (100%) delete mode 100644 cosiap_frontend/src/assets/img/LoginBackground.png diff --git a/cosiap_api/static/images/LayoutAuthenticator/email.svg b/cosiap_api/static/images/LayoutAuthenticator/email.svg deleted file mode 100644 index 8ea8f35..0000000 --- a/cosiap_api/static/images/LayoutAuthenticator/email.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/cosiap_api/static/images/LayoutAuthenticator/LogosGobierno.svg b/cosiap_api/static/images/LogosGobierno.svg similarity index 100% rename from cosiap_api/static/images/LayoutAuthenticator/LogosGobierno.svg rename to cosiap_api/static/images/LogosGobierno.svg diff --git a/cosiap_api/static/images/LayoutAuthenticator/Eye.svg b/cosiap_frontend/src/assets/iconsImg/Eye.svg similarity index 100% rename from cosiap_api/static/images/LayoutAuthenticator/Eye.svg rename to cosiap_frontend/src/assets/iconsImg/Eye.svg diff --git a/cosiap_api/static/images/LayoutAuthenticator/EyeOff.svg b/cosiap_frontend/src/assets/iconsImg/EyeOff.svg similarity index 100% rename from cosiap_api/static/images/LayoutAuthenticator/EyeOff.svg rename to cosiap_frontend/src/assets/iconsImg/EyeOff.svg diff --git a/cosiap_api/static/images/LayoutAuthenticator/password.svg b/cosiap_frontend/src/assets/iconsImg/password.svg similarity index 100% rename from cosiap_api/static/images/LayoutAuthenticator/password.svg rename to cosiap_frontend/src/assets/iconsImg/password.svg diff --git a/cosiap_api/static/images/LayoutAuthenticator/user.svg b/cosiap_frontend/src/assets/iconsImg/user.svg similarity index 100% rename from cosiap_api/static/images/LayoutAuthenticator/user.svg rename to cosiap_frontend/src/assets/iconsImg/user.svg diff --git a/cosiap_frontend/src/assets/img/LoginBackground.png b/cosiap_frontend/src/assets/img/LoginBackground.png deleted file mode 100644 index 75fcd72f716057a1c198401dc742370924879ad6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 51238 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 H=kosoE^6Kz diff --git a/cosiap_frontend/src/components/common/base/FormInputPassword.jsx b/cosiap_frontend/src/components/common/base/FormInputPassword.jsx index 91b7764..cd684e4 100644 --- a/cosiap_frontend/src/components/common/base/FormInputPassword.jsx +++ b/cosiap_frontend/src/components/common/base/FormInputPassword.jsx @@ -28,7 +28,7 @@ export const FormInputPassword = ({ name, placeholder, className, register, err /> {inputValue && ( diff --git a/cosiap_frontend/src/components/users/Login/LoginInputCURP.jsx b/cosiap_frontend/src/components/users/Login/LoginInputCURP.jsx index 1ba2908..c5ffafa 100644 --- a/cosiap_frontend/src/components/users/Login/LoginInputCURP.jsx +++ b/cosiap_frontend/src/components/users/Login/LoginInputCURP.jsx @@ -13,7 +13,7 @@ export const LoginInputCURP = ({ name, type, placeholder, className, register, e register={register} errors={errors} /> - Icono Correo + Icono Correo ); diff --git a/cosiap_frontend/src/components/users/Login/LoginInputPassword.jsx b/cosiap_frontend/src/components/users/Login/LoginInputPassword.jsx index ecd1da8..1daaa4a 100644 --- a/cosiap_frontend/src/components/users/Login/LoginInputPassword.jsx +++ b/cosiap_frontend/src/components/users/Login/LoginInputPassword.jsx @@ -13,7 +13,7 @@ export const LoginInputPassword = ({ name, placeholder, className, register, er register={register} errors={errors} /> - + ); }; diff --git a/cosiap_frontend/src/components/users/Register/RegisterForm.jsx b/cosiap_frontend/src/components/users/Register/RegisterForm.jsx index 8519ca2..3c7acfb 100644 --- a/cosiap_frontend/src/components/users/Register/RegisterForm.jsx +++ b/cosiap_frontend/src/components/users/Register/RegisterForm.jsx @@ -42,12 +42,7 @@ export default function RegisterForm( {setSentEmail} ) { setSentEmail(true); } catch (error) { console.error("Registration failed:", error); - if (error.response) { - console.error("Error data:", error.response.data); - setRegisterErrorMessage(error.response.data.detail || "Error desconocido"); - } else { - setRegisterErrorMessage("Error de red o de servidor"); - } + setRegisterErrorMessage(error.response.data.detail) } }; -- GitLab From c309eae6c6d2e89be83dcd7f90c6fe0d8af30c90 Mon Sep 17 00:00:00 2001 From: Elliot Axel Noriega Date: Wed, 10 Jul 2024 12:52:13 -0600 Subject: [PATCH 9/9] Correcion de detalle de error cuando ocurre un register failed --- cosiap_frontend/src/components/users/Register/RegisterForm.jsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/cosiap_frontend/src/components/users/Register/RegisterForm.jsx b/cosiap_frontend/src/components/users/Register/RegisterForm.jsx index 3c7acfb..7cd781f 100644 --- a/cosiap_frontend/src/components/users/Register/RegisterForm.jsx +++ b/cosiap_frontend/src/components/users/Register/RegisterForm.jsx @@ -42,7 +42,8 @@ export default function RegisterForm( {setSentEmail} ) { setSentEmail(true); } catch (error) { console.error("Registration failed:", error); - setRegisterErrorMessage(error.response.data.detail) + console.log(error.response.data.detail); + setRegisterErrorMessage(error.response.data); } }; -- GitLab