- Создать репозиторий(Публичный) на github
- Создать ветку с названием - lecture-1/hw
- Создать проект(используем vite - https://vitejs.dev/guide/#scaffolding-your-first-vite-project)
- Очистить проект
- Скопировать себе в проект мокковые данные(materials/mock.js в этом проекте)
- Отобразить все рестораны из моковых данных. Отображаем рестораны друг за другом. Логику отрисовку массивов не используем, отображаем каждый ресторан отдельно. Цель отработать работу с элементами.
- Название ресторана
- Заголовок - Меню (h3)
- Список названий блюд (используем тег ul и li)
- Заголовок - Отзывы (h3)
- Список текстов отзывов (используем тег ul и li)
- (Доп) сделать все это на React.createElement.
- Сделать коммит
- Запушить
- Открыть ПР из ветки с дз в ветку main
- Отправить ссылку на ПР в ветку дз 1 в Discord
- Реализовать отрисовку по макету. макет в ветке. Необходимо правильно разбить на компоненты. Пока без интерактивности, просто статика. моки используем из первого дз.
- Реализовать выбор активного состояния:
- Дефолтно ресторан не выбран, отображаем только табы(кнопки с названиями всех ресторанов)
- По клику на кнопку с названием отображаем ресторан(название, меню, отзывы и тд)
- По клику на кнопку с названием другого отображаем другой ресторан.
- Одновременно отображаем только 1 активный ресторан.(список ресторанов больше не рисуем)
- У блюд в меню ресторана необходимо реализовать счетчик
- У каждого блюда должны быть две кнопки - и +.
- Между кнопками - и + рисуем число. Дефолтно 0.
- По клику на + увеличиваем на единицу, по клику на - уменьшаем
- Минимальное значение 0, максимальное 5
- Если при переключении ресторанов у блюд остаются значения прошлого ресторана не переживайте, пока это ок.
- Реализовать форму нового отзыва ресторана:
- Форма состоит из 3 контролов- имя, текст, рейтинг.
- Имя - просто инпут
- Текст - просто инпут
- Рейтинг - контрол как у блюда(-5+). Важно переиспользовать контрол, а не делать новый. Основные отличия: шаг 0.5, минимальное значение 1, максимальное 5.
- Форма хранит состояние(см пример с лекции)
- Отображаем в ресторане, после отзывов.
- Добавить стили. Используем модули. Доп либы использовать нельзя(только classnames). Стили на свое усмотрение, чтобы вам было приятно сомтреть на приложение.
- Если нет шапки и футера добавляем их
- В шапку добавляем две кнопки - Заказ и Смена темы
- В футер добавляем одну кнопку - контакты
- По клику на кнопку "Смена темы" кнопки в области между хедером и футером меняют оформление, кнопки в хедере и футере остаются без изменений.
- Установить библиотеки @reduxjs/toolkit, react-redux;
- Скопировать в свой проект файл normalized-mock (в этом проекте Materials/normalized-mock.js)
- Сконфигурировать стор;
- Создать модули(как на лекции, только для своих сущностей, на лекции говорил об этом)
- Описать селекторы модулей
- Заменить использование старых мокковых данных на редакс, аналогично тому как мы делали на лекции.
- Скопировать simple_api (в этом проекте Materials/normalized-mock.js)
- Заменить мокки на загрузку данных:
- Рестораны грузить один раз
- Блюда и отзывы грузить для каждого ресторана(При первом открытии ресторана)
- Пользователей грузим один раз
- Данны стараемся грузить максимально близко к месту использования
- Переписать получение и использование данных на RTKQuery(как на лекции)
- Реализовать сохранение нового отзыва(отправляем Post запросом объект с полями: userId(берем любой из загруженных пользователей), text, rating)
- ДОП ЗАДАНИЕ: в компоненте отзыва(просто отображает) реализуем возможность включить режим редактирования. В режиме редактирования можно поменять текст и рейтинг и по клику на кнопку сохранить отправляем PATCH запрос.
ВАЖНО: при использовании мутаций инвалидируйте теги, чтобы отображать только актуальные данные
- Сделать роут ресторанов - /restaurants. Отображаем табы
- Сделать вложенный роут ресторана - /restaurants/:restaurantId. Название ресторана и табы(меню и отзывы, по клику открываются вложенные роуты)
- Сделать вложенный в роут ресторана роут меню - /restaurants/:restaurantId/menu. Открывается при открытии ресторана.
- Сделать вложенный в роут ресторана роут отзывов - /restaurants/:restaurantId/reviews
- Сделать домашнее приложение(то, которое делали в дз) на некст.(в новом репозитории).