diff --git a/src/index.js b/src/index.js index 7a07752..bf51d49 100644 --- a/src/index.js +++ b/src/index.js @@ -1,38 +1,88 @@ const $app = document.getElementById('app'); const $observe = document.getElementById('observe'); -const API = 'https://rickandmortyapi.com/api/character/'; +const API = 'https://rickandmortyapi.com/api/character/?page= '; +const PAGE = 1; + +const getData = async api => { -const getData = api => { fetch(api) - .then(response => response.json()) - .then(response => { - const characters = response.results; - let output = characters.map(character => { - return ` -
- -

${character.name}${character.species}

-
- ` - }).join(''); - let newItem = document.createElement('section'); - newItem.classList.add('Items'); - newItem.innerHTML = output; - $app.appendChild(newItem); + .then(response => response.json()) + .then(response => { + //CUARTO PROBLEMA: La api ya cuenta con 31 paginas , al querer pasar a la 32 y verificar que respuesta no + // trae ninguno resultado , se muestra un article con el enunciado "Ya no hay personajes". + if (!response.info) { + + let output = `
+ +

YA NO HAY PERSONAJES

+
`; + + let newItem = document.createElement('section') + newItem.classList.add('Items') + newItem.innerHTML = output + $app.appendChild(newItem) + + } + const characters = response.results + + let output = characters.map(character => { + + return `
+ +

${character.name}${character.species}

+
` + + }).join('') + + let newItem = document.createElement('section') + newItem.classList.add('Items') + newItem.innerHTML = output + $app.appendChild(newItem) + console.log(intersectionObserver) + }) - .catch(error => console.log(error)); + .catch(error => console.log("ERROR:fail " + error)) } -const loadData = () => { - getData(API); + const loadData = async (api) => { + try{ + + const data = await getData(api) + + }catch (error){ + + console.error(error) + + } } const intersectionObserver = new IntersectionObserver(entries => { if (entries[0].isIntersecting) { - loadData(); + if (!localStorage.getItem('next_fetch')) { + + loadData(API); + //PRIMER PROBLEMA : Guardamos la URL de la siguiente petición (la segunda petición, en el else se llaman las demás) con el nombre de la llave 'next_fetch' + localStorage.setItem('next_fetch',`${API}${PAGE + 1}`) + + }else{ + + //SEGUNDO PROBLEMA: Obtenemos la información desde la llave 'next_fetch' de nuestro localStorage la funcion loadData() se actualiza a Async/Await + loadData(localStorage.getItem('next_fetch')) + + antPage = localStorage.getItem('next_fetch').substr(-2) + newPage = parseInt(antPage) + 1 + + localStorage.clear(); + localStorage.setItem('next_fetch',`${API}${newPage}`) + } } }, { rootMargin: '0px 0px 100% 0px', -}); +}) + +//TERCER PROBLEMA: Al recargar la pagina limpiamos el localStorage, de esta forma se imprimen siempre los primeros 20 personajes al recargar. +window.onload = () => { + localStorage.clear() +} -intersectionObserver.observe($observe); \ No newline at end of file +intersectionObserver.observe($observe) \ No newline at end of file