Skip to content
This repository was archived by the owner on Aug 18, 2024. It is now read-only.

lordponchik/goit-js-hw-10.1

Repository files navigation

Homework πŸ“‹

goit-js-hw-10.1


πŸ“š EN πŸ“š

Admission criteria

  • Repository created goit-js-hw-10.1
  • When submitting homework, there are two links: to the source files and the working page on GitHub Pages.
  • When visiting the live job page, there are no errors or warnings in the console.
  • The project is built with parcel-project-template.
  • Code formatted Prettier.

Starter files

Download starter files index.html with basic markup, ready-made styles and included script files for each task. Copy it to your project in the src folder in parcel-project-template.

Task - cat search

Create a front-end part of the application for searching information about a cat by its breed. Watch a demo video of the application, use it as a guide to the required functionality.

https://textbook.edu.goit.global/lms-js-homework/v2/assets/medias/catsearch-demo-7a9eca87a69c1131c828592a49f6f647.mp4

HTTP-requests

Use public The Cat API. To get started, you need to register and get a unique access key that you need to attach to each request. We go to home page and below we press the Signup for free button, follow the instructions, the key will be sent to the specified mail.

The key must be used in the x-api-key HTTP header. It is recommended to use axios and add a header for all requests.

import axios from "axios";

axios.defaults.headers.common["x-api-key"] = "your key";

Breed collection

When the page is loaded, an HTTP request should be made for the collection of rocks. To do this, you need to make a GET request to the https://api.thecatapi.com/v1/breeds resource, which returns an array of objects. Upon successful request, it is necessary to fill select.breed-select with options so that the value of the option contains the id of the breed, and the name of the breed is displayed in the interface to the user.

Write a fetchBreeds() function that makes an HTTP request and returns a promise with an array of breeds as the result of the request. Put it in the cat-api.js file and make a named export.

Information about the cat

When the user selects an option in the select, it is necessary to perform a request for complete information about the cat to the https://api.thecatapi.com/v1/images/search resource. Don't forget to include the breed_ids query string parameter with the breed ID in this request.

This is how the URL for requesting complete information about the dog by breed ID will look like.

https://api.thecatapi.com/v1/images/search?breed_ids=id__breed

Write a function fetchCatByBreed(breedId) that takes a breed ID, makes an HTTP request, and returns a promise with cat data as the result of the request. Put it in the cat-api.js file and make a named export.

If the request was successful, under the select, in the div.cat-info block, an image and detailed information about the cat appears: breed name, description and temperament.

Load state handling

While any HTTP request is in progress, it is necessary to show the loader - the p.loader element. While there are no requests or when the request has completed, the loader must be hidden. Use additional CSS classes for this.

While the request is for a list of breeds, you need to hide select.breed-select and show p.loader. While there is a request for information about the cat, you need to hide div.cat-info and show p.loader. When any request has completed p.loader needs to be hidden

Error Handling

If the user had an error in any HTTP request, for example, the network went down, there was a packet loss, etc., that is, the promise was rejected, you need to display the p.error element, and hide it on each subsequent request. Use additional CSS classes for this.

Testing the error display is very simple - change the request address by adding any character to the end, for example, instead of https://api.thecatapi.com/v1/breeds, use https://api.thecatapi.com/v1/breeds123. The request to get a list of breeds will be rejected with an error. Similarly for requesting information about a cat by breed.

Interface

Instead of select.breed-select you can use any library with nice selects like https://slimselectjs.com/ Instead of p.loader, you can use any library with beautiful CSS loaders, like https://cssloaders.github.io/ Instead of p.error, you can use any library with beautiful alerts, such as Notiflix



πŸ“š UK πŸ“š ⬆ Home ⬆

ΠšΡ€ΠΈΡ‚Π΅Ρ€Ρ–Ρ— ΠΏΡ€ΠΈΠΉΠΎΠΌΡƒ

  • Π‘Ρ‚Π²ΠΎΡ€Π΅Π½ΠΎ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€Ρ–ΠΉ goit-js-hw-10.1
  • ΠŸΡ€ΠΈ Π·Π΄Π°Ρ‡Ρ– Π΄ΠΎΠΌΠ°ΡˆΠ½ΡŒΠΎΡ— Ρ€ΠΎΠ±ΠΎΡ‚ΠΈ Ρ” Π΄Π²Π° посилання: Π½Π° Π²ΠΈΡ…Ρ–Π΄Π½Ρ– Ρ„Π°ΠΉΠ»ΠΈ Ρ‚Π° Ρ€ΠΎΠ±ΠΎΡ‡Ρƒ сторінку Π½Π° GitHub Pages.
  • ΠŸΡ€ΠΈ Π²Ρ–Π΄Π²Ρ–Π΄ΡƒΠ²Π°Π½Π½Ρ– ΠΆΠΈΠ²ΠΎΡ— сторінки завдання, Π² консолі Π½Π΅ΠΌΠ°Ρ” ΠΏΠΎΠΌΠΈΠ»ΠΎΠΊ Ρ‚Π° ΠΏΠΎΠΏΠ΅Ρ€Π΅Π΄ΠΆΠ΅Π½ΡŒ.
  • ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ Π·Ρ–Π±Ρ€Π°Π½ΠΎ Π·Π° допомогою parcel-project-template.
  • Код Π²Ρ–Π΄Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΎΠ²Π°Π½ΠΎ Prettier.

Π‘Ρ‚Π°Ρ€Ρ‚ΠΎΠ²Ρ– Ρ„Π°ΠΉΠ»ΠΈ

Π‘ΠΊΠ°Ρ‡Π°ΠΉ стартові Ρ„Π°ΠΉΠ»ΠΈ index.html Π· базовою Ρ€ΠΎΠ·ΠΌΡ–Ρ‚ΠΊΠΎΡŽ, Π³ΠΎΡ‚ΠΎΠ²ΠΈΠΌΠΈ стилями Ρ‚Π° ΠΏΡ–Π΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΌΠΈ Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ скриптів для ΠΊΠΎΠΆΠ½ΠΎΠ³ΠΎ завдання. Π‘ΠΊΠΎΠΏΡ–ΡŽΠΉ ΠΉΠΎΠ³ΠΎ собі Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Ρƒ ΠΏΠ°ΠΏΡ†Ρ– src Ρƒ parcel-project-template.

Завдання - ΠšΠΎΡ‚ΠΎΠΏΠΎΡˆΡƒΠΊ

Π‘Ρ‚Π²ΠΎΡ€ΠΈ Ρ„Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄ частину Π΄ΠΎΠ΄Π°Ρ‚ΠΊΠ° ΠΏΠΎΡˆΡƒΠΊΡƒ Ρ–Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†Ρ–Ρ— ΠΏΡ€ΠΎ ΠΊΠΎΡ‚Π° Π·Π° ΠΉΠΎΠ³ΠΎ ΠΏΠΎΡ€ΠΎΠ΄ΠΎΡŽ. ΠŸΠΎΠ΄ΠΈΠ²Ρ–Ρ‚ΡŒΡΡ Π΄Π΅ΠΌΠΎ Π²Ρ–Π΄Π΅ΠΎ Ρ€ΠΎΠ±ΠΎΡ‚ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈ, використовуй ΠΉΠΎΠ³ΠΎ як ΠΎΡ€Ρ–Ρ”Π½Ρ‚ΠΈΡ€ Π½Π° ΠΏΠΎΡ‚Ρ€Ρ–Π±Π½ΠΈΠΉ Ρ„ΡƒΠ½ΠΊΡ†Ρ–ΠΎΠ½Π°Π».

https://textbook.edu.goit.global/lms-js-homework/v2/assets/medias/catsearch-demo-7a9eca87a69c1131c828592a49f6f647.mp4

HTTP-Π·Π°ΠΏΠΈΡ‚ΠΈ

ВикористовуйтС ΠΏΡƒΠ±Π»Ρ–Ρ‡Π½ΠΈΠΉ The Cat API. Для ΠΏΠΎΡ‡Π°Ρ‚ΠΊΡƒ Ρ€ΠΎΠ±ΠΎΡ‚ΠΈ Π½Π΅ΠΎΠ±Ρ…Ρ–Π΄Π½ΠΎ зарСєструватися Ρ‚Π° ΠΎΡ‚Ρ€ΠΈΠΌΠ°Ρ‚ΠΈ ΡƒΠ½Ρ–ΠΊΠ°Π»ΡŒΠ½ΠΈΠΉ ΠΊΠ»ΡŽΡ‡ доступу, який ΠΏΠΎΡ‚Ρ€Ρ–Π±Π½ΠΎ ΠΏΡ€ΠΈΠΊΡ€Ρ–ΠΏΠ»ΡŽΠ²Π°Ρ‚ΠΈ Π΄ΠΎ ΠΊΠΎΠΆΠ½ΠΎΠ³ΠΎ Π·Π°ΠΏΠΈΡ‚Ρƒ. Π—Π°Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π½Π° Π³ΠΎΠ»ΠΎΠ²Π½Ρƒ сторінку Ρ– Π½ΠΈΠΆΡ‡Π΅ натискаємо ΠΊΠ½ΠΎΠΏΠΊΡƒ Signup for free, дотримуємося інструкції, ΠΊΠ»ΡŽΡ‡ Π±ΡƒΠ΄Π΅ Π²Ρ–Π΄ΠΏΡ€Π°Π²Π»Π΅Π½ΠΎ Π½Π° Π²ΠΊΠ°Π·Π°Π½Ρƒ ΠΏΠΎΡˆΡ‚Ρƒ.

Використовувати ΠΊΠ»ΡŽΡ‡ Π½Π΅ΠΎΠ±Ρ…Ρ–Π΄Π½ΠΎ Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΡƒ HTTP x-api-key. Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡ”Ρ‚ΡŒΡΡ використовувати axios Ρ‚Π° Π΄ΠΎΠ΄Π°Ρ‚ΠΈ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ для всіх Π·Π°ΠΏΠΈΡ‚Ρ–Π².

import axios from "axios";

axios.defaults.headers.common["x-api-key"] = "Ρ‚Π²ΠΎΠΉ ΠΊΠ»ΡŽΡ‡";

ΠšΠΎΠ»Π΅ΠΊΡ†Ρ–Ρ ΠΏΠΎΡ€Ρ–Π΄

ΠŸΡ€ΠΈ Π·Π°Π²Π°Π½Ρ‚Π°ΠΆΠ΅Π½Π½Ρ– сторінки ΠΏΠΎΠ²ΠΈΠ½Π΅Π½ виконуватися Π·Π°ΠΏΠΈΡ‚ HTTP Π·Π° ΠΊΠΎΠ»Π΅ΠΊΡ†Ρ–Ρ”ΡŽ ΠΏΠΎΡ€Ρ–Π΄. Для Ρ†ΡŒΠΎΠ³ΠΎ Π½Π΅ΠΎΠ±Ρ…Ρ–Π΄Π½ΠΎ Π²ΠΈΠΊΠΎΠ½Π°Ρ‚ΠΈ GET-Π·Π°ΠΏΠΈΡ‚ Π½Π° рСсурс https://api.thecatapi.com/v1/breeds, Ρ‰ΠΎ ΠΏΠΎΠ²Π΅Ρ€Ρ‚Π°Ρ” масив ΠΎΠ±'Ρ”ΠΊΡ‚Ρ–Π². ΠŸΡ€ΠΈ ΡƒΡΠΏΡ–ΡˆΠ½ΠΎΠΌΡƒ Π·Π°ΠΏΠΈΡ‚Ρ– Π½Π΅ΠΎΠ±Ρ…Ρ–Π΄Π½ΠΎ Π½Π°ΠΏΠΎΠ²Π½ΠΈΡ‚ΠΈ select.breed-select опціями Ρ‚Π°ΠΊ, Ρ‰ΠΎΠ± value ΠΎΠΏΡ†Ρ–Ρ— містив id ΠΏΠΎΡ€ΠΎΠ΄ΠΈ, Π° Π² інтСрфСйсі користувачСві відобраТалася Π½Π°Π·Π²Π° ΠΏΠΎΡ€ΠΎΠ΄ΠΈ.

Напиши Ρ„ΡƒΠ½ΠΊΡ†Ρ–ΡŽ fetchBreeds(), яка Ρ€ΠΎΠ±ΠΈΡ‚ΡŒ HTTP-Π·Π°ΠΏΠΈΡ‚ Ρ– ΠΏΠΎΠ²Π΅Ρ€Ρ‚Π°Ρ” проміс Π· масивом ΠΏΠΎΡ€Ρ–Π΄ - Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ Π·Π°ΠΏΠΈΡ‚Ρƒ. ВинСси Ρ—Ρ… Ρƒ Ρ„Π°ΠΉΠ» cat-api.js Ρ– Π·Ρ€ΠΎΠ±ΠΈ Ρ–ΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠΉ Скспорт.

Інформація ΠΏΡ€ΠΎ ΠΊΠΎΡ‚Π°

Коли користувач Π²ΠΈΠ±ΠΈΡ€Π°Ρ” ΠΎΠΏΡ†Ρ–ΡŽ Π² сСлСкті, Π½Π΅ΠΎΠ±Ρ…Ρ–Π΄Π½ΠΎ Π²ΠΈΠΊΠΎΠ½ΡƒΠ²Π°Ρ‚ΠΈ Π·Π°ΠΏΠΈΡ‚ Π½Π° ΠΏΠΎΠ²Π½Ρƒ Ρ–Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†Ρ–ΡŽ ΠΏΡ€ΠΎ ΠΊΠΎΡ‚Π° Π½Π° рСсурс https://api.thecatapi.com/v1/images/search. НС Π·Π°Π±ΡƒΠ΄ΡŒ Π²ΠΊΠ°Π·Π°Ρ‚ΠΈ Ρƒ Ρ†ΡŒΠΎΠΌΡƒ Π·Π°ΠΏΠΈΡ‚Ρ– ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ рядка Π·Π°ΠΏΠΈΡ‚Ρƒ breed_ids Ρ–Π· Ρ–Π΄Π΅Π½Ρ‚ΠΈΡ„Ρ–ΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ ΠΏΠΎΡ€ΠΎΠ΄ΠΈ.

Π’Π°ΠΊ Π±ΡƒΠ΄Π΅ виглядати URL-адрСса Π·Π°ΠΏΠΈΡ‚Ρƒ ΠΏΠΎΠ²Π½ΠΎΡ— Ρ–Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†Ρ–Ρ— ΠΏΡ€ΠΎ собаку ΠΏΠΎ Ρ–Π΄Π΅Π½Ρ‚ΠΈΡ„Ρ–ΠΊΠ°Ρ‚ΠΎΡ€Ρƒ ΠΏΠΎΡ€ΠΎΠ΄ΠΈ.

https://api.thecatapi.com/v1/images/search?breed_ids=Ρ–Π΄Π΅Π½Ρ‚ΠΈΡ„Ρ–ΠΊΠ°Ρ‚ΠΎΡ€_ΠΏΠΎΡ€ΠΎΠ΄ΠΈ

Напиши Ρ„ΡƒΠ½ΠΊΡ†Ρ–ΡŽ fetchCatByBreed(breedId) яка Ρ‡Π΅ΠΊΠ°Ρ” Π½Π° Ρ–Π΄Π΅Π½Ρ‚ΠΈΡ„Ρ–ΠΊΠ°Ρ‚ΠΎΡ€ ΠΏΠΎΡ€ΠΎΠ΄ΠΈ, Ρ€ΠΎΠ±ΠΈΡ‚ΡŒ HTTP-Π·Π°ΠΏΠΈΡ‚ Ρ– ΠΏΠΎΠ²Π΅Ρ€Ρ‚Π°Ρ” проміс Π· Π΄Π°Π½ΠΈΠΌΠΈ ΠΏΡ€ΠΎ ΠΊΠΎΡ‚Π° - Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ Π·Π°ΠΏΠΈΡ‚Ρƒ. ВинСси Ρ—Ρ… Ρƒ Ρ„Π°ΠΉΠ» cat-api.js Ρ– Π·Ρ€ΠΎΠ±ΠΈ Ρ–ΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠΉ Скспорт.

Π―ΠΊΡ‰ΠΎ Π·Π°ΠΏΠΈΡ‚ Π±ΡƒΠ² ΡƒΡΠΏΡ–ΡˆΠ½ΠΈΠΉ, ΠΏΡ–Π΄ сСлСктом, Ρƒ Π±Π»ΠΎΡ†Ρ– div.cat-info Π·'ΡΠ²Π»ΡΡ”Ρ‚ΡŒΡΡ зобраТСння Ρ‚Π° Ρ€ΠΎΠ·Π³ΠΎΡ€Π½ΡƒΡ‚Π° інформація ΠΏΡ€ΠΎ ΠΊΠΎΡ‚Ρƒ: Π½Π°Π·Π²Ρƒ ΠΏΠΎΡ€ΠΎΠ΄ΠΈ, опис Ρ‚Π° Ρ‚Π΅ΠΌΠΏΠ΅Ρ€Π°ΠΌΠ΅Π½Ρ‚.

ΠžΠ±Ρ€ΠΎΠ±ΠΊΠ° стану завантаТСння

Поки ΠΉΠ΄Π΅ Π±ΡƒΠ΄ΡŒ-який HTTP-Π·Π°ΠΏΠΈΡ‚, ΠΏΠΎΡ‚Ρ€Ρ–Π±Π½ΠΎ ΠΏΠΎΠΊΠ°Π·ΡƒΠ²Π°Ρ‚ΠΈ Π·Π°Π²Π°Π½Ρ‚Π°ΠΆΡƒΠ²Π°Ρ‡ - Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ p.loader. Поки Π·Π°ΠΏΠΈΡ‚Ρ–Π² Π½Π΅ΠΌΠ°Ρ” Π°Π±ΠΎ ΠΊΠΎΠ»ΠΈ Π·Π°ΠΏΠΈΡ‚ Π·Π°Π²Π΅Ρ€ΡˆΠΈΠ²ΡΡ, Π·Π°Π²Π°Π½Ρ‚Π°ΠΆΡƒΠ²Π°Ρ‡ ΠΏΠΎΡ‚Ρ€Ρ–Π±Π½ΠΎ ΠΏΡ€ΠΈΡ…ΠΎΠ²ΡƒΠ²Π°Ρ‚ΠΈ. ВикористовуйтС для Ρ†ΡŒΠΎΠ³ΠΎ Π΄ΠΎΠ΄Π°Ρ‚ΠΊΠΎΠ²Ρ– CSS класи.

Поки ΠΉΠ΄Π΅ Π·Π°ΠΏΠΈΡ‚ Π·Π° списком ΠΏΠΎΡ€Ρ–Π΄, ΠΏΠΎΡ‚Ρ€Ρ–Π±Π½ΠΎ ΠΏΡ€ΠΈΡ…ΠΎΠ²Π°Ρ‚ΠΈ select.breed-select Ρ– ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΠΈ p.loader. Поки ΠΉΠ΄Π΅ Π·Π°ΠΏΠΈΡ‚ Π·Π° Ρ–Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†Ρ–Ρ”ΡŽ ΠΏΡ€ΠΎ ΠΊΠΎΡ‚Π°, Π½Π΅ΠΎΠ±Ρ…Ρ–Π΄Π½ΠΎ ΠΏΡ€ΠΈΡ…ΠΎΠ²Π°Ρ‚ΠΈ div.cat-info Ρ‚Π° ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΠΈ p.loader. Коли Π±ΡƒΠ΄ΡŒ-який Π·Π°ΠΏΠΈΡ‚ Π·Π°Π²Π΅Ρ€ΡˆΠΈΠ²ΡΡ, p.loader ΠΏΠΎΡ‚Ρ€Ρ–Π±Π½ΠΎ ΠΏΡ€ΠΈΡ…ΠΎΠ²Π°Ρ‚ΠΈ

ΠžΠ±Ρ€ΠΎΠ±ΠΊΠ° ΠΏΠΎΠΌΠΈΠ»ΠΊΠΈ

Π―ΠΊΡ‰ΠΎ Ρƒ користувача відбулася ΠΏΠΎΠΌΠΈΠ»ΠΊΠ° Π±ΡƒΠ΄ΡŒ-якого HTTP-Π·Π°ΠΏΠΈΡ‚Ρƒ, Π½Π°ΠΏΡ€ΠΈΠΊΠ»Π°Π΄, Π²ΠΏΠ°Π»Π° ΠΌΠ΅Ρ€Π΅ΠΆΠ°, Π±ΡƒΠ»Π° Π²Ρ‚Ρ€Π°Ρ‚Π° ΠΏΠ°ΠΊΠ΅Ρ‚Ρ–Π² Ρ– Ρ‚.ΠΏ., Ρ‚ΠΎΠ±Ρ‚ΠΎ проміс Π±ΡƒΠ² Π²Ρ–Π΄Ρ…ΠΈΠ»Π΅Π½ΠΈΠΉ, Π½Π΅ΠΎΠ±Ρ…Ρ–Π΄Π½ΠΎ Π²Ρ–Π΄ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΠΈ Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ p.error, Π° ΠΏΡ€ΠΈ ΠΊΠΎΠΆΠ½ΠΎΠΌΡƒ наступному Π·Π°ΠΏΠΈΡ‚Ρ– ΠΏΡ€ΠΈΡ…ΠΎΠ²ΡƒΠ²Π°Ρ‚ΠΈ ΠΉΠΎΠ³ΠΎ. ВикористовуйтС для Ρ†ΡŒΠΎΠ³ΠΎ Π΄ΠΎΠ΄Π°Ρ‚ΠΊΠΎΠ²Ρ– CSS класи.

ΠŸΡ€ΠΎΡ‚Π΅ΡΡ‚ΡƒΠ²Π°Ρ‚ΠΈ ΠΏΡ€Π°Ρ†Π΅Π·Π΄Π°Ρ‚Π½Ρ–ΡΡ‚ΡŒ відобраТСння ΠΏΠΎΠΌΠΈΠ»ΠΊΠΈ Π΄ΡƒΠΆΠ΅ просто - Π·ΠΌΡ–Π½ΠΈ адрСсу Π·Π°ΠΏΠΈΡ‚Ρƒ додавши Π΄ΠΎ кінця Π±ΡƒΠ΄ΡŒ-який символ, Π½Π°ΠΏΡ€ΠΈΠΊΠ»Π°Π΄ Π·Π°ΠΌΡ–ΡΡ‚ΡŒ https://api.thecatapi.com/v1/breeds використовуй https://api.thecatapi.com/v1/breeds123. Π—Π°ΠΏΠΈΡ‚ Π½Π° отримання списку ΠΏΠΎΡ€Ρ–Π΄ Π±ΡƒΠ΄Π΅ Π²Ρ–Π΄Ρ…ΠΈΠ»Π΅Π½ΠΈΠΉ Π· помилкою. Аналогічно для Π·Π°ΠΏΠΈΡ‚Ρƒ Ρ–Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†Ρ–Ρ— ΠΏΡ€ΠΎ ΠΊΠΎΡ‚Π° ΠΏΠΎ ΠΏΠΎΡ€ΠΎΠ΄Ρ–.

ІнтСрфСйс

Π”ΠΎΠ΄Π°ΠΉ ΠΌΡ–Π½Ρ–ΠΌΠ°Π»ΡŒΠ½Π΅ оформлСння Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ–Π² інтСрфСйсу. Π—Π°ΠΌΡ–ΡΡ‚ΡŒ select.breed-select моТСш використовувати Π±ΡƒΠ΄ΡŒ-яку Π±Ρ–Π±Π»Ρ–ΠΎΡ‚Π΅ΠΊΡƒ Π· Π³Π°Ρ€Π½ΠΈΠΌ сСлСктом, Π½Π°ΠΏΡ€ΠΈΠΊΠ»Π°Π΄ https://slimselectjs.com/ Π—Π°ΠΌΡ–ΡΡ‚ΡŒ p.loader моТСш використовувати Π±ΡƒΠ΄ΡŒ-яку Π±Ρ–Π±Π»Ρ–ΠΎΡ‚Π΅ΠΊΡƒ Ρ–Π· Π³Π°Ρ€Π½ΠΈΠΌΠΈ CSS-Π·Π°Π²Π°Π½Ρ‚Π°ΠΆΡƒΠ²Π°Ρ‡Π°ΠΌΠΈ, Π½Π°ΠΏΡ€ΠΈΠΊΠ»Π°Π΄ https://cssloaders.github.io/ Π—Π°ΠΌΡ–ΡΡ‚ΡŒ p.error моТСш використовувати Π±ΡƒΠ΄ΡŒ-яку Π±Ρ–Π±Π»Ρ–ΠΎΡ‚Π΅ΠΊΡƒ Π· Π³Π°Ρ€Π½ΠΈΠΌΠΈ оповіщСннями, Π½Π°ΠΏΡ€ΠΈΠΊΠ»Π°Π΄, Notiflix



πŸ“š RU πŸ“š ⬆ Home ⬆

ΠšΡ€ΠΈΡ‚Π΅Ρ€ΠΈΠΈ ΠΏΡ€ΠΈΠ΅ΠΌΠ°

  • Π‘ΠΎΠ·Π΄Π°Π½ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ goit-js-hw-10.1
  • ΠŸΡ€ΠΈ сдачС домашнСй Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π΅ΡΡ‚ΡŒ Π΄Π²Π΅ ссылки: Π½Π° исходныС Ρ„Π°ΠΉΠ»Ρ‹ ΠΈ Ρ€Π°Π±ΠΎΡ‡ΡƒΡŽ страницу Π½Π° GitHub Pages.
  • ΠŸΡ€ΠΈ посСщСнии ΠΆΠΈΠ²ΠΎΠΉ страницы задания, Π² консоли Π½Π΅Ρ‚Ρƒ ошибок ΠΈ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠΉ.
  • ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ собран с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ parcel-project-template.
  • Код ΠΎΡ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ Prettier.

Π‘Ρ‚Π°Ρ€Ρ‚ΠΎΠ²Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹

Π‘ΠΊΠ°Ρ‡Π°ΠΉ стартовыС Ρ„Π°ΠΉΠ»Ρ‹ index.html с Π±Π°Π·ΠΎΠ²ΠΎΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ‚ΠΊΠΎΠΉ, Π³ΠΎΡ‚ΠΎΠ²Ρ‹ΠΌΠΈ стилями ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹ΠΌΠΈ Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ скриптов для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ задания. Π‘ΠΊΠΎΠΏΠΈΡ€ΡƒΠΉ Π΅Π³ΠΎ сСбС Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π² ΠΏΠ°ΠΏΠΊΠ΅ src Π² parcel-project-template.

Π—Π°Π΄Π°Π½ΠΈΠ΅ - ΠšΠΎΡ‚ΠΎΠΏΠΎΠΈΡΠΊ

Π‘ΠΎΠ·Π΄Π°ΠΉ Ρ„Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄ Ρ‡Π°ΡΡ‚ΡŒ прилоТСния поиска ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ ΠΊΠΎΡ‚Π΅ ΠΏΠΎ Π΅Π³ΠΎ ΠΏΠΎΡ€ΠΎΠ΄Π΅. ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈ Π΄Π΅ΠΌΠΎ Π²ΠΈΠ΄Π΅ΠΎ Ρ€Π°Π±ΠΎΡ‚Ρ‹ прилоТСния, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉ Π΅Π³ΠΎ ΠΊΠ°ΠΊ ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ Π½Π° Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΡ‹ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π».

https://textbook.edu.goit.global/lms-js-homework/v2/assets/medias/catsearch-demo-7a9eca87a69c1131c828592a49f6f647.mp4

HTTP-запросы

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉ ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹ΠΉ The Cat API. Для Π½Π°Ρ‡Π°Π»Π° Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ доступа, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΊΡ€Π΅ΠΏΠ»ΡΡ‚ΡŒ ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ запросу. Π—Π°Ρ…ΠΎΠ΄ΠΈΠΌ Π½Π° Π³Π»Π°Π²Π½ΡƒΡŽ страницу ΠΈ Π½ΠΈΠΆΠ΅ Π½Π°ΠΆΠΈΠΌΠ°Π΅ΠΌ ΠΊΠ½ΠΎΠΏΠΊΡƒ Signup for free, слСдуСм инструкции, ΠΊΠ»ΡŽΡ‡ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½ Π½Π° ΡƒΠΊΠ°Π·Π°Π½ΡƒΡŽ ΠΏΠΎΡ‡Ρ‚Ρƒ.

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ»ΡŽΡ‡ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π² HTTP-Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ΅ x-api-key. РСкомСндуСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ axios ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ для всСх запросов.

import axios from "axios";

axios.defaults.headers.common["x-api-key"] = "Ρ‚Π²ΠΎΠΉ ΠΊΠ»ΡŽΡ‡";

ΠšΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡ ΠΏΠΎΡ€ΠΎΠ΄

ΠŸΡ€ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ страницы Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ HTTP-запрос Π·Π° ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠ΅ΠΉ ΠΏΠΎΡ€ΠΎΠ΄. Для этого Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ GET-запрос Π½Π° рСсурс https://api.thecatapi.com/v1/breeds, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΠΈΠΉ массив ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². ΠŸΡ€ΠΈ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠΌ запросС, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π½Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ select.breed-select опциями Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ value ΠΎΠΏΡ†ΠΈΠΈ содСрТал id ΠΏΠΎΡ€ΠΎΠ΄Ρ‹, Π° Π² интСрфСйсС ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π»ΠΎΡΡŒ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΏΠΎΡ€ΠΎΠ΄Ρ‹.

Напиши Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ fetchBreeds() которая Π΄Π΅Π»Π°Π΅Ρ‚ HTTP-запрос ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ промис с массивом ΠΏΠΎΡ€ΠΎΠ΄ - Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ запроса. ВынСси Π΅Ρ‘ Π² Ρ„Π°ΠΉΠ» cat-api.js ΠΈ сдСлай ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ экспорт.

Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ ΠΎ ΠΊΠΎΡ‚Π΅

Когда ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π²Ρ‹Π±ΠΈΡ€Π°Π΅Ρ‚ ΠΎΠΏΡ†ΠΈΡŽ Π² сСлСктС, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ запрос Π·Π° ΠΏΠΎΠ»Π½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ ΠΎ ΠΊΠΎΡ‚Π΅ Π½Π° рСсурс https://api.thecatapi.com/v1/images/search. НС Π·Π°Π±ΡƒΠ΄ΡŒ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π² этом запросС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ строки запроса breed_ids с ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ ΠΏΠΎΡ€ΠΎΠ΄Ρ‹.

Π’Π°ΠΊ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ URL запроса ΠΏΠΎΠ»Π½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ собакС ΠΏΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρƒ ΠΏΠΎΡ€ΠΎΠ΄Ρ‹.

https://api.thecatapi.com/v1/images/search?breed_ids=ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€_ΠΏΠΎΡ€ΠΎΠ΄Ρ‹

Напиши Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ fetchCatByBreed(breedId) которая ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΏΠΎΡ€ΠΎΠ΄Ρ‹, Π΄Π΅Π»Π°Π΅Ρ‚ HTTP-запрос ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ промис с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΎ ΠΊΠΎΡ‚Π΅ - Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ запроса. ВынСси Π΅Ρ‘ Π² Ρ„Π°ΠΉΠ» cat-api.js ΠΈ сдСлай ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ экспорт.

Если запрос Π±Ρ‹Π» ΡƒΡΠΏΠ΅ΡˆΠ½Ρ‹ΠΉ, ΠΏΠΎΠ΄ сСлСктом, Π² Π±Π»ΠΎΠΊΠ΅ div.cat-info появляСтся ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈ развСрнутая информация ΠΎ ΠΊΠΎΡ‚Π΅: Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΏΠΎΡ€ΠΎΠ΄Ρ‹, описаниС ΠΈ Ρ‚Π΅ΠΌΠΏΠ΅Ρ€Π°ΠΌΠ΅Π½Ρ‚.

ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° состояния Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ

Пока ΠΈΠ΄Π΅Ρ‚ любой HTTP-запрос, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ - элСмСнт p.loader. Пока запросов Π½Π΅Ρ‚ ΠΈΠ»ΠΈ ΠΊΠΎΠ³Π΄Π° запрос Π·Π°Π²Π΅Ρ€ΡˆΠΈΠ»ΡΡ, Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΊΡ€Ρ‹Π²Π°Ρ‚ΡŒ. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉ для этого Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ CSS классы.

Пока ΠΈΠ΄Π΅Ρ‚ запрос Π·Π° списком ΠΏΠΎΡ€ΠΎΠ΄, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΊΡ€Ρ‹Ρ‚ΡŒ select.breed-select ΠΈ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ p.loader. Пока ΠΈΠ΄Π΅Ρ‚ запрос Π·Π° ΠΈΠ½Ρ„ΠΎΡ€Π°Ρ†ΠΈΠ΅ΠΉ ΠΎ ΠΊΠΎΡ‚Π΅, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΊΡ€Ρ‹Ρ‚ΡŒ div.cat-info ΠΈ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ p.loader. Когда любой запрос Π·Π°Π²Π΅Ρ€ΡˆΠΈΠ»ΡΡ, p.loader Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΊΡ€Ρ‹Ρ‚ΡŒ

ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ошибки

Если Ρƒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»Π° ошибка любого HTTP-запроса, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΡƒΠΏΠ°Π»Π° ΡΠ΅Ρ‚ΡŒ, Π±Ρ‹Π»Π° потСря ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² ΠΈ Ρ‚. ΠΏ., Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ промис Π±Ρ‹Π» ΠΎΡ‚ΠΊΠ»ΠΎΠ½Π΅Π½, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ элСмСнт p.error, Π° ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ запросС ΡΠΊΡ€Ρ‹Π²Π°Ρ‚ΡŒ Π΅Π³ΠΎ. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉ для этого Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ CSS классы.

ΠŸΡ€ΠΎΡ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚ΠΎΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡ‚ΡŒ отобраТСния ошибки ΠΎΡ‡Π΅Π½ΡŒ просто - ΠΈΠ·ΠΌΠ΅Π½ΠΈ адрСс запроса Π΄ΠΎΠ±Π°Π²ΠΈΠ² Π² ΠΊΠΎΠ½Π΅Ρ† любой символ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ вмСсто https://api.thecatapi.com/v1/breeds ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉ https://api.thecatapi.com/v1/breeds123. Запрос получСния списка ΠΏΠΎΡ€ΠΎΠ΄ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚ΠΊΠ»ΠΎΠ½Π΅Π½ с ошибкой. Аналогично для запроса ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ ΠΊΠΎΡ‚Π΅ ΠΏΠΎ ΠΏΠΎΡ€ΠΎΠ΄Π΅.

Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ

Π”ΠΎΠ±Π°Π²ΡŒ минимальноС ΠΎΡ„ΠΎΡ€ΠΌΠ»Π΅Π½ΠΈΠ΅ элСмСнтов интСрфСйса. ВмСсто select.breed-select моТСшь ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π»ΡŽΠ±ΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ с красивыми сСлСктом, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ https://slimselectjs.com/ ВмСсто p.loader моТСшь ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π»ΡŽΠ±ΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ с красивыми CSS-Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊΠ°ΠΌΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ https://cssloaders.github.io/ ВмСсто p.error моТСшь ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π»ΡŽΠ±ΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ с красивыми оповСщСниями, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Notiflix

Releases

No releases published

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •