Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Contexto de autenticación #5

Merged
merged 2 commits into from Apr 17, 2022
Merged

Contexto de autenticación #5

merged 2 commits into from Apr 17, 2022

Conversation

fjdelarubia
Copy link
Owner

@fjdelarubia fjdelarubia commented Apr 8, 2022

✅ Checklist

  • Añadido contexto de autenticación para poder iniciar sesión y poder subir y gestionar peticiones de impresion
  • Creada carpeta components/common para componentes que se vayan a usar en varios sitios y tienen poca entidad
  • Exportados los tipos de los conectores para poder tipar sin que se ejecute el código (ver comentarios de la PR)
  • Añadida la navbar

🖼️ Cambios visuales

Cabecera con información del estado de inicio de sesión

image

✍️ Artículo

#PR5 Contexto de autenticación

@@ -0,0 +1,56 @@
import * as React from 'react';
import type { AuthConnector, UserData } from '@impr3siones/data-connector';
Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

import type ...

Importa solo declaraciones de tipos, y cuando se transpila el TypeScript son declaraciones que se borran, de esta manera no se ejecuta el código del paquete que importamos, esto nos permite que el código de @impr3siones/data-connector no se ejecute al hacer SSR, en la entrada del blog lo explicaré mejor

import type { AuthConnector, UserData } from '@impr3siones/data-connector';

const loadAuth = async (): Promise<AuthConnector> => {
return (await import('@impr3siones/data-connector')).auth;
Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

este import de aquí es un import asíncrono, ¿que quiere decir esto? pues que el transpilador, al llegar a esta instrucción, hará MUUUUCHAA magia y lo que hará será transpilar el código a importar pero en un fichero .js a parte, es decir, tendremos el código principal en un fichero .js y la parte del data-connector en otro. Y para rematar la magia total y absoluta, convertirá el import en una llamada asíncrona desde el frontal, de manera que una vez el navegador se haya bajado el fichero js a parte, se ejecutará su contenido y obtendremos nuestro módulo.

Es algo muy mágico y super útil, ya que nos permite tener un bundle (fichero .js) inicial pequeño e ir cargando en el navegador las dependencias según se vayan usando.

Comment on lines +26 to +28
export type { AuthConnector } from './connectors/auth';
export type { OrdersConnector } from './connectors/database/orders';
export type { StorageConnector } from './connectors/storage';
Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Esta es la exportación de tipos, para poder usar import type en el contexto de autenticación

@@ -0,0 +1,56 @@
import * as React from 'react';
Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Habría que unificar los imports de react

Comment on lines +29 to +33
React.useEffect(() => {
loadAuth().then((auth) => {
setAuthInstance(auth);
});
}, []);
Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Al cargar la instancia de autenticación dentro de un efecto nos estamos asegurando de que el código no se ejecuta en el lado del servidor, puesto que los componentes no se montan

Comment on lines +35 to +39
React.useEffect(() => {
if (authInstance) {
return authInstance.onAuthDataReceived(setAuthState);
}
}, [authInstance]);
Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Añadimos el listener en otro efecto, ya que onAuthDataReceived nos devuelve una función que al ejecutarla elimina el listener, de esta manera cuando el componente se desmonte se eliminará automáticamente

Comment on lines +25 to +27
const [authState, setAuthState] = React.useState<UserData | null | undefined>(
null
);
Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

El estado empieza a null para saber que no se ha comprobado todavía el estado de la sesión, de esta manera podemos mostrar un mensaje de "Cargando...", y cuando sea undefined sabremos que la sesión no está iniciada

@fjdelarubia fjdelarubia changed the title Auth context Contexto de autenticación Apr 15, 2022
@fjdelarubia fjdelarubia merged commit f22240e into main Apr 17, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

1 participant