Фильтр по категории: позволяет отфильтровать продукты по одной или нескольким категориям и сбросить выбор по клику на опцию All
. Список категорий нужно получить из API.
Фильтры по статусам: позволяют отфильтровать продукты по выбранному статусу.
Поле поиска позволяет искать в списке продуктов по названию/описанию с учетом фильтров.
Фильтрация и поиск реализованы на стороне API, нужно только передать правильные параметры. По умолчанию в фильтрах ничего не выбрано.
Макет в Фигме.
Список нужно сверстать адаптивно:
- для десктопа
- для планшетов
- для мобильных устройств адаптируйте имеющийся дизайн самостоятельно, постарайтесь сделать его как можно более консистентным
Вместе с запуском проекта локально запускается API. С методами API можно ознакомиться на http://localhost:4000/swagger/.
В API два эндпойнта:
[
{
"id": "string",
"name": "string",
"type": "string"
}
]
{
"results": [
{
"id": "string",
"name": "string",
"description": "string",
"categoryId": "string",
"categoryName": "string",
"categoryType": "string",
"isLimited": "boolean",
"isNew": "boolean",
"price": "number",
"discount": "number | null"
}
]
}
GET /api/product
принимает параметры:
isNew
booleanisLimited
booleancategory
[string]search
string
❕ API ничего не знает про изображения в карточке продукта, поэтому вам нужно сопоставить категорию с картинкой самостоятельно. В макете есть отдельная секция со всеми категориями.
Для работы с проектом потребуется Node.js версии 14.x.x или выше.
- Склонировать репозиторий
git clone git@github.com:Agro-Club/junior-frontend-test.git
- Установить модули
npm i
- Запустить проект
npm start
После запуска проект будет доступен на http://localhost:3000. Внесённые правки будут сразу же отображаться в браузере (перезагружать страницу для этого не нужно).
В проекте уже есть хук useProductList.js
для работы с API. Он неидеален (как и всё в этом мире), поэтому, вероятно, вы захотите его доработать или же написать свою реализацию клиент-серверного взаимодействия — с помощью готовой библиотеки или самостоятельно. Дисклеймер: использование этого хука не будет считаться минусом.
В ProductList.js
реализован простой список, вы можете использовать его или написать свой.
В index.css
подключен используемый в дизайне шрифт Montserrat, а также содержатся базовые стили для всего приложения (и вы можете их менять при необходимости).
В файлах с расширением .scss
можно использовать SASS-синтаксис. Если вы с ним не знакомы или предпочитаете обычный CSS, используйте расширение .css
.
Для изоляции стилей между компонентами вы можете использовать CSS модули. Для этого файлы со стилями должны иметь .module
в названии (например, ProductList.module.scss
).
Не изменяйте файлы за пределами папки src
(внутри src
можно как угодно менять/создавать любые файлы). Для решения задачи можно использовать любые внешние библиотеки, если они необходимы.
Перед тем, как отправить ссылку с решением, убедитесь, что:
✅ Проект запускается
✅ Не осталось закомментированного кода
✅ В консоли нет ошибок/ворнингов
✅ Контент корректно отображается на любом разрешении в последних версиях Chrome, Safari, Firefox и Edge. Для тестирования в разных браузерах можно воспользоваться сервисом BrowserStack.
✅ Фильтры фильтруют, поиск ищет 😎
- Запушить решение в свой публичный github-репозиторий.
- Прислать ссылку на репозиторий на почту (будет указана в сообщении со ссылкой на это задание) c темой "Тестовое задание".
Проект создан с помощью Create React App.