Read in other languages: Українська, English.
- Створено репозиторій
goit-js-hw-10
. - Домашня робота містить два посилання: на вихідні файли і робочу сторінку на
GitHub Pages
. - В консолі відсутні помилки і попередження під час відкриття живої сторінки завдання.
- Проект зібраний за допомогою parcel-project-template.
- Код відформатований за допомогою
Prettier
.
У папці src знайдеш стартові файли. Скопіюй їх собі у проект, повністю
замінивши папку src
в
parcel-project-template.
Для цього завантаж увесь цей репозиторій як архів або використовуй
сервіс DownGit для завантаження окремої папки з
репозиторія.
Створи фронтенд частину програми пошуку даних про країну за її частковою або повною назвою. Подивися демо-відео роботи програми.
Використовуй публічний API Rest Countries v2, а саме ресурс name, який повертає масив об'єктів країн, що задовольнили критерій пошуку. Додай мінімальне оформлення елементів інтерфейсу.
Напиши функцію fetchCountries(name)
, яка робить HTTP-запит на
ресурс name і повертає
проміс з масивом країн - результатом запиту. Винеси її в окремий файл
fetchCountries.js
і зроби іменований експорт.
У відповіді від бекенду повертаються об'єкти, велика частина властивостей яких, тобі не знадобиться. Щоб скоротити обсяг переданих даних, додай рядок параметрів запиту - таким чином цей бекенд реалізує фільтрацію полів. Ознайомся з документацією синтаксису фільтрів.
Тобі потрібні тільки наступні властивості:
name.official
- повна назва країниcapital
- столицяpopulation
- населенняflags.svg
- посилання на зображення прапораlanguages
- масив мов
Назву країни для пошуку користувач вводить у текстове поле input#search-box
.
HTTP-запити виконуються при введенні назви країни, тобто на події input
. Але
робити запит з кожним натисканням клавіші не можна, оскільки одночасно буде
багато запитів і вони будуть виконуватися в непередбачуваному порядку.
Необхідно застосувати прийом Debounce
на обробнику події і робити HTTP-запит
через 300мс
після того, як користувач перестав вводити текст. Використовуй
пакет lodash.debounce.
Якщо користувач повністю очищає поле пошуку, то HTTP-запит не виконується, а розмітка списку країн або інформації про країну зникає.
Виконай санітизацію введеного рядка методом trim()
, це вирішить проблему, коли
в полі введення тільки пробіли, або вони є на початку і в кінці рядка.
Якщо у відповіді бекенд повернув більше ніж 10 країн, в інтерфейсі з'являється
повідомлення про те, що назва повинна бути специфічнішою. Для повідомлень
використовуй бібліотеку notiflix
і виводь такий рядок
"Too many matches found. Please enter a more specific name."
.
Якщо бекенд повернув від 2-х до 10-и країн, під тестовим полем відображається список знайдених країн. Кожен елемент списку складається з прапора та назви країни.
Якщо результат запиту - це масив з однією країною, в інтерфейсі відображається розмітка картки з даними про країну: прапор, назва, столиця, населення і мови.
⚠️ Достатньо, щоб застосунок працював для більшості країн. Деякі країни, як-отSudan
, можуть створювати проблеми, оскільки назва країни є частиною назви іншої країни -South Sudan
. Не потрібно турбуватися про ці винятки.
Якщо користувач ввів назву країни, якої не існує, бекенд поверне не порожній
масив, а помилку зі статус кодом 404
- не знайдено. Якщо це не обробити, то
користувач ніколи не дізнається про те, що пошук не дав результатів. Додай
повідомлення "Oops, there is no country with that name"
у разі помилки,
використовуючи
бібліотеку notiflix.
⚠️ Не забувай про те, щоfetch
не вважає 404 помилкою, тому необхідно явно відхилити проміс, щоб можна було зловити і обробити помилку.
Этот проект был создан при помощи Parcel. Для знакомства и настройки дополнительных возможностей обратись к документации.
- Убедись что на компьютере установлена LTS-версия Node.js. Скачай и установи её если необходимо.
- Склонируй этот репозиторий.
- Измени имя папки с
parcel-project-template
на имя своего проекта. - Создай новый пустой репозиторий на GitHub.
- Открой проект в VSCode, запусти терминал и свяжи проект с GitHub-репозиторием по инструкции.
- Установи зависимости проекта в терминале командой
npm install
. - Запусти режим разработки, выполнив команду
npm start
. - Перейди в браузере по адресу http://localhost:1234. Эта страница будет автоматически перезагружаться после сохранения изменений в файлах проекта.
- Все паршалы файлов стилей должны лежать в папке
src/sass
и импортироваться в файлы стилей страниц. Например, дляindex.html
файл стилей называетсяindex.scss
. - Изображения добавляй в папку
src/images
. Сборщик оптимизирует их, но только при деплое продакшн версии проекта. Все это происходит в облаке, чтобы не нагружать твой компьютер, так как на слабых машинах это может занять много времени.
Для настройки деплоя проекта необходимо выполнить несколько дополнительных шагов
по настройке твоего репозитория. Зайди во вкладку Settings
и в подсекции
Actions
выбери выбери пункт General
.
Пролистай страницу до последней секции, в которой убедись что выбраны опции как
на следующем изображении и нажми Save
. Без этих настроек у сборки будет
недостаточно прав для автоматизации процесса деплоя.
Продакшн версия проекта будет автоматически собираться и деплоиться на GitHub
Pages, в ветку gh-pages
, каждый раз когда обновляется ветка main
. Например,
после прямого пуша или принятого пул-реквеста. Для этого необходимо в файле
package.json
отредактировать поле homepage
и скрипт build
, заменив
your_username
и your_repo_name
на свои, и отправить изменения на GitHub.
"homepage": "https://your_username.github.io/your_repo_name/",
"scripts": {
"build": "parcel build src/*.html --public-url /your_repo_name/"
},
Далее необходимо зайти в настройки GitHub-репозитория (Settings
> Pages
) и
выставить раздачу продакшн версии файлов из папки /root
ветки gh-pages
, если
это небыло сделано автоматически.
Статус деплоя крайнего коммита отображается иконкой возле его идентификатора.
- Желтый цвет - выполняется сборка и деплой проекта.
- Зеленый цвет - деплой завершился успешно.
- Красный цвет - во время линтинга, сборки или деплоя произошла ошибка.
Более детальную информацию о статусе можно посмотреть кликнув по иконке, и в
выпадающем окне перейти по ссылке Details
.
Через какое-то время, обычно пару минут, живую страницу можно будет посмотреть
по адресу указанному в отредактированном свойстве homepage
. Например, вот
ссылка на живую версию для этого репозитория
https://goitacademy.github.io/parcel-project-template.
Если открывается пустая страница, убедись что во вкладке Console
нет ошибок
связанных с неправильными путями к CSS и JS файлам проекта (404). Скорее
всего у тебя неправильное значение свойства homepage
или скрипта build
в
файле package.json
.
- После каждого пуша в ветку
main
GitHub-репозитория, запускается специальный скрипт (GitHub Action) из файла.github/workflows/deploy.yml
. - Все файлы репозитория копируются на сервер, где проект инициализируется и проходит сборку перед деплоем.
- Если все шаги прошли успешно, собранная продакшн версия файлов проекта
отправляется в ветку
gh-pages
. В противном случае, в логе выполнения скрипта будет указано в чем проблема.