dany-eduard / superhero-react-app

Home Page:https://dany-eduard.github.io/superhero-react-app/

Repository from Github https://github.comdany-eduard/superhero-react-appRepository from Github https://github.comdany-eduard/superhero-react-app

Superhero React App

Superhero React App es una aplicación construida en React, como su nombre lo indica. Consiste en una aplicación web que consume la API SuperHero para cumplir los requerimientos de la prueba técnica para aplicar en Acreditta como Frontend Developer.

Requerimientos

  • Dashboard general de los superhéroes organizada alfabéticamente.

  • Búsqueda por nombre del superhéroe.

  • Organizar a los super héroes de acuerdo a:

    • Intelligence

    • Strength

    • Speed

    • Durability

    • Power

    • Combat

      En este punto es necesario que se haga un filtro y que el usuario decida el orden en el que aparecerán las habilidades.

  • Organizar la apariencia del superhéroe de acuerdo a:

    • Gender

    • Race

    • Height

    • Weight

    • Eye Color

    • Hair Color

      En este punto es necesario que se haga un filtro y que el usuario decida el orden en el que aparecerán la apariencia.

Mi solución

image

Al ingresar al inicio se dispara una acción con Redux, la cual realiza una petición a la API para obtener 10 héroes con los ID’s del 1 al 10. Dado que los héroes vienen ordenados alfabéticamente, no hace falta realizar ninguna otra acción para ordenarlos. Se implementó un infinity scroll que permite solicitar los siguientes 10 ID’s a la API, inicialmente a través del evento window.onscroll(), pero este no funcionó de la manera esperada en dispositivos móviles y fue reemplazado por IntersectionObserver API incluida ya, en la mayoría de los navegadores. Esto con el fin de detectar cuando la barra de desplazamiento llega al final de la pagina, y así ejecutar la acción para disparar la petición a la API SuperHero.

El store de Redux recibe la lista de héroes y cuando el servicio obtiene la respuesta realiza un dispatch para concatenar los nuevos héroes recibidos a la lista anterior.

image

Se implementa la funcionalidad para buscar un héroe consumiendo el endpoint /search/:nombre-heroe proporcionado por la API SuperHero. Cuando el usuario realiza la búsqueda:

  1. Se limpia la lista de héroes almacenada en el store de Redux.
  2. A través de react-router-dom se redirige al usuario a la vista /resultado-busqueda?valor-buscado (página Resultado de Búsqueda).
  3. Se dispara la petición que consultará a la API y se almacena en el [store de Redux](https://github.com/dany-eduard/superhero-react-app/blob/main/src/store/index.ts) la respuesta recibida que contiene los héroes coincidentes con la búsqueda.
  4. En el componente ResultadoBusqueda se recorre la lista de héroes y se pintan en pantalla los resultados. En esta página se ubicó una barra de búsqueda para realizar otras consultas dentro de este componente, siguiendo el flujo descrito en los pasos anteriores.

image

En esta vista se implementa la funcionalidad que permite filtrar por habilidad, en orden ascendente o descendente, la lista de héroes previamente cargada en la petición que se disparó en el Inicio (dashboard). El usuario debe seleccionar una habilidad y elegir el orden en que se mostrarán los resultados. Aquí lo que se hizo es:

  1. Crear un array ordenado con el criterio de ordenamiento ingresado, que contiene el valor de la habilidad seleccionada de los héroes presentes en la lista del store de Redux
  2. Se utiliza el array obtenido para recorrer y ordenar la lista de héroes
  3. La nueva lista es almacenada en el estado del componente (un useState) y de pinta en la vista.

image image

En esta vista se implementa el filtro por característica, el cual permite al usuario obtener los héroes que coincidan con en la característica selecciona con un criterio especifico. El resultado será todos los héroes que tengan en su peso, por ejemplo, el valor ingresado. El filtro consiste en buscar en la lista de héroes almacenada en el store de Redux, los héroes que en la característica tengan el mismo valor ingresado como criterio. Se obtiene un nuevo arreglo y este el que se muestra en pantalla.

Herramientas utilizadas

About

https://dany-eduard.github.io/superhero-react-app/


Languages

Language:TypeScript 88.4%Language:HTML 5.9%Language:CSS 5.3%Language:Shell 0.4%