From a6764524ee051de8eaebf48aa761a8e2a71da719 Mon Sep 17 00:00:00 2001 From: Jorge Freire Date: Mon, 20 Jul 2026 09:23:33 +0200 Subject: [PATCH] docs(es/parts5-7): sync Spanish content with current English version --- src/content/5/es/part5.md | 8 +- src/content/5/es/part5a.md | 220 +- src/content/5/es/part5b.md | 38 +- src/content/5/es/part5c.md | 333 +- src/content/5/es/part5d.md | 375 +-- src/content/5/es/part5e.md | 1618 +++++----- src/content/6/es/part6.md | 10 +- src/content/6/es/part6a.md | 1411 +++------ src/content/6/es/part6b.md | 1493 ++++++--- src/content/6/es/part6c.md | 1149 ++++--- src/content/6/es/part6d.md | 2983 ++++++++++++++---- src/content/7/es/part7.md | 6 +- src/content/7/es/part7a.md | 795 ++++- src/content/7/es/part7b.md | 632 ++-- src/content/7/es/part7c.md | 682 +++- src/content/7/es/part7d.md | 427 +-- src/content/7/es/part7e.md | 534 ---- src/content/7/es/part7f.md | 171 - src/content/partnavigation/partnavigation.js | 20 +- 19 files changed, 7781 insertions(+), 5124 deletions(-) delete mode 100644 src/content/7/es/part7e.md delete mode 100644 src/content/7/es/part7f.md diff --git a/src/content/5/es/part5.md b/src/content/5/es/part5.md index 796bcf836d1..d45d4eecfaf 100644 --- a/src/content/5/es/part5.md +++ b/src/content/5/es/part5.md @@ -8,7 +8,9 @@ lang: es En esta parte volvemos al frontend, primero mirando a diferentes posibilidades para probar el código React. También implementaremos la autenticación basada en tokens que permitirá a los usuarios iniciar sesión en nuestra aplicación. -Parte actualizada el 3 de Marzo de 2024 -- Jest reemplazado por Vitest +Parte actualizada el 31 de marzo de 2026 - \ No newline at end of file +- Se ha eliminado Cypress +- Los temas sobre React Router y las librerías de estilos se han trasladado de la parte 7 a esta parte + + diff --git a/src/content/5/es/part5a.md b/src/content/5/es/part5a.md index 05b84c9bf32..f6e1e901afc 100644 --- a/src/content/5/es/part5a.md +++ b/src/content/5/es/part5a.md @@ -13,7 +13,7 @@ Por el momento, el frontend muestra las notas existentes y permite a los usuario Ahora implementaremos una parte de la funcionalidad de administración de usuarios requerida en el frontend. Comencemos con el inicio de sesión del usuario. A lo largo de esta parte, asumiremos que no se agregarán nuevos usuarios desde el frontend. -### Controlando el inicio de sesión +### Añadir un formulario de inicio de sesión Ahora se ha agregado un formulario de inicio de sesión en la parte superior de la página. @@ -51,28 +51,30 @@ const App = () => { return (

Notes

- - + // highlight-start +

Login

- username +
- password +
@@ -88,7 +90,7 @@ export default App El código de aplicación actual se puede encontrar en [GitHub](https://github.com/fullstack-hy2020/part2-notes-frontend/tree/part5-1), en la rama part5-1. Si clonas el repositorio, no olvides ejecutar el comando _npm install_ antes de intentar ejecutar el frontend. -El frontend no mostrara ninguna nota si no se conecta al backend. Puedes iniciar el backend con el comando _npm run dev_ en su directorio de la Parte 4. Esto ejecutara el backend en el puerto 3001. Mientras esté activo, en una ventana diferente del terminal puedes ejecutar el frontend con _npm start_, y ahora veras las notas que están guardadas en tu base de datos MongoDB de la Parte 4. +El frontend no mostrará ninguna nota si no está conectado al backend. Puedes iniciar el backend con _npm run dev_ en su directorio de la parte 4. Se ejecutará en el puerto 3001. Mientras esté activo, abre otra ventana del terminal e inicia el frontend con _npm run dev_; entonces podrás ver las notas guardadas en tu base de datos MongoDB de la parte 4. Recuerda esto de ahora en más. @@ -100,6 +102,8 @@ El formulario de inicio de sesión se maneja de la misma manera que manejamos lo El método _handleLogin_, que se encarga de manejar los datos en el formulario, aún no se ha implementado. +### Añadir la lógica al formulario de inicio de sesión + El inicio de sesión se realiza enviando una solicitud HTTP POST a la dirección del servidor api/login. Separemos el código responsable de esta solicitud en su propio módulo, en el archivo services/login.js. Usaremos la sintaxis async/await en lugar de promesas para la solicitud HTTP: @@ -128,21 +132,20 @@ const App = () => { // highlight-start const [user, setUser] = useState(null) // highlight-end - - // highlight-start - const handleLogin = async (event) => { + + // ... + + const handleLogin = async event => { // highlight-line event.preventDefault() + // highlight-start try { - const user = await loginService.login({ - username, password, - }) - + const user = await loginService.login({ username, password }) setUser(user) setUsername('') setPassword('') - } catch (exception) { - setErrorMessage('Wrong credentials') + } catch { + setErrorMessage('wrong credentials') setTimeout(() => { setErrorMessage(null) }, 5000) @@ -158,6 +161,8 @@ Si la conexión es exitosa, los campos de formulario se vacían y la resp Si el inicio de sesión falla, o la ejecución de la función _loginService.login_ da como resultado un error, se notifica al usuario. +### Renderizado condicional del formulario de inicio de sesión + No se notifica al usuario acerca de un inicio de sesión exitoso de ninguna manera. Modifiquemos la aplicación para que muestre el formulario de inicio de sesión solo si el usuario no ha iniciado sesión, cuando _user === null_. El formulario para agregar nuevas notas se muestra solo si el usuario ha iniciado sesión, por lo que user contiene los detalles del usuario. Agreguemos dos funciones auxiliares al componente App para generar los formularios: @@ -169,35 +174,34 @@ const App = () => { const loginForm = () => (
- username +
- password +
-
+ ) const noteForm = () => (
- + -
+ ) return ( @@ -223,11 +227,10 @@ const App = () => { return (

Notes

- - {user === null && loginForm()} // highlight-line - {user !== null && noteForm()} // highlight-line + {!user && loginForm()} // highlight-line + {user && noteForm()} // highlight-line
    - {notesToShow.map((note, i) => + {notesToShow.map(note => ( toggleImportanceOf(note.id)} /> - )} + ))}