Напиши застосунок пошуку зображень за ключовим словом. Прев'ю робочого застосунку
Доповни компоненти <Form>
, <PhotosGallery>
, <PhotosGalleryItem>
. Для
створення сітки використовуй компоненти <Grid>
та <GridItem>
Тут самі файли Grid
В проекті налаштовані Alias imports тому імпорти можна вказувати з папки
components
import { Text } from 'components';
Для HTTP-запитів використовуй публічний сервіс пошуку зображень Pexels. Приклад HTTP-запиту.
import axios from 'axios';
const API_KEY = 'тут вставити ключ';
axios.defaults.baseURL = 'https://api.pexels.com/v1/';
axios.defaults.headers.common['Authorization'] = API_KEY;
axios.defaults.params = {
orientation: 'landscape',
per_page: 15,
};
Pexels API підтримує пагінацію, за замовчуванням параметр page
дорівнює 1
.
Нехай у відповіді надходить по 15 об'єктів, встановлено в параметрі per_page
.
Не забудь, що під час пошуку за новим ключовим словом, необхідно скидати
значення page
до 1
.
У відповіді від API приходить масив об'єктів, в яких тобі цікаві лише наступні властивості.
id
- унікальний ідентифікаторavg_color
- колір фотографії,alt
- опис фото,src
- об'єкт з розмірами картинок, нам цікавий розмірlarge
Компонент приймає один проп onSubmit
- функцію для передачі значення інпута
під час сабміту форми. Він буде наступної структури.
<form className={style.form}>
<button className={style.button} type="submit">
<FiSearch size="16px" />
</button>
<input
className={style.input}
placeholder="What do you want to write?"
name="search"
required
autoFocus
/>
</form>
Для створення списку зображень в компоненті <PhotosGallery/>
потрібно
використати універсальний компонент для створення сітки <Grid>
.
<Grid>
{/*
array.map(()=> <PhotosGalleryItem/>);
*/}
</Grid>
Для створення однієї одного елемента списку потрібно використати
<PhotosGalleryItem>
, який використовує <GridItem/>
Компонент елемента списку із зображенням. Створює компонент наступної структури.
<GridItem>
<div
className={styles.thumb}
style={{ backgroundColor: avg_color, borderColor: avg_color }}
>
<img src={src.large} alt={alt} />
</div>
</GridItem>
При натисканні на кнопку Load more
повинна довантажуватись наступна порція
зображень і рендеритися разом із попередніми. Кнопка повинна рендеритися лише
тоді, коли є якісь завантажені зображення. Якщо масив зображень порожній, кнопка
не рендериться.
Під час відправки запиту на Pexels необхідно відображати компонент <Loader/>
<div className={style.backdrop}>spinner</div>
Для відображення спінера можна використати бібліотеку react-spinners