-
Сделать форк этого репозитория в свой аккаунт (только 1 раз в самом начале).
-
Перед выполнением ДЗ сделайте пул мастера этого репозитория себе в форк (чтобы иметь актуальный код);
-
Обновить зависимости
yarn
илиnpm i
; -
Создайте новую ветку от актуального мастера для выполнения ДЗ;
-
Выполните ДЗ в этой ветке;
-
Сделайте Pull Request этой ветки в мастер моего репозитория;
-
Напишите мне ([email protected]) письмо со ссылкой на PR.
Важно! В результате всех этих манипуляций в вашем мастере должны быть только мои комиты, все ваши комиты должны быть в отдельных ветках под каждую домашку.
Дедлайн – 22:00 по Москве/Киеву за день до занятия.
- Создать компонент Rate, который принимает рейтинг (число от 1 до 5) и отображает его используя SVG со звездочками. Например
<Rate value={3} />
. - Создать компонент Reviews, который принимает все ревью по одному ресторану и отображает имена и отзывы про ресторан, а так же рейтинг с помощью компонента Rate.
- Создать компонент Restaurant (рендерить там, где сейчас Menu). В Restaurant показывать Menu и Reviews. Так же в Restaurant посчитать средний рейтинг по этому ресторану и отобразить с помощью компоненты Rate.
- Покрыть PropTypes все компоненты (только то, что используется в компоненте).
- Написать тесты на уменьшение блюд (опционально - без клика по increment).
- Покрыть тестами Reviews (теститовать только разметку).
- Сделать компонент Basket в котором отображать выбранные товары с их количеством, суммой по каждому товару и общей стоимостью заказа.
- Сделать у каждой позиции в этом заказе кнопки +, -, х (при нажатии на х удаляеься этот товар из корзины)
- Переписать редьюсеры review и restaurant на key=>value (аналогично products)
- Добавить users редьюсер (так же key=>value)
- Починить отображение Review компонента (взять данные из редьюсеров review и users)
- Переписать все обращения в к стейту в mapStateToProps на селекторы (аналогично компоненту Basket)
- Написать middleware для генерации uuid
- Реализовать добавление нового review и юзера в стор и показывать его (мы считаем, что на каждый новый отзыв у нас добавляется новый пользователь)
- Загрузить products через api middleware, грузить только для текущего ресторана
- Загрузить users через redux-thunk
- Дописать обратотку екшенынов LOAD_REVIEWS в reviews редьюсере
- Полностью убрать fixtures из приложения (удалить все импорты и сам файл), все грузить с сервера
- При загрузках показывать лоадеры, все грузить максимально низко, там где эти данные нужны
- Все данные грузить только один раз (не загружать повторно данные, которые уже есть)
- (Опционально) переписать все на immer
-
Перенести все на features folder:
- удалить все файл constants.js, кроме STATUS
- удалить файл actions.js
- удалить папку reducer
- в файле selectors.js оставить только те селекторы, которые используют две и более features
-
Загрузки данных переписать с использование createAsyncThunk и удалить api middleware
-
Редьюсеры переписать с использованием createSlice и createEntityAdapter
-
Селекторы переписать с использованием getSelectors из createEntityAdapter
-
Реализовать переключение валюты, хранить словарь словарь в контексте (минимум 3 валюты). Реализовать таким образом, чтобы это было максимально удобный использовать.
- Сделать reviews/menu отдельными роутами (/restaurants/:id/reviews)
- Со всех урлов, где не хватает параметров (начиная с /), сделать редиректы на страницу ресторана с меню
- В корзине сделать продукты линками на их ресторан
- Проверить если мы на /checkout, то при нажатии на кнопку:
- отправить POST запрос на: '/api/order' с JSON формата [{id: "d75f762a-eadd-49be-8918-ed0daa8dd024", amount: 2}]
- блокировать кнопку на время запроса (можно добавить лоадер)
- при успешном ответе (при сумме заказа от 50 до 200) редиректить на новую страницу "Спасибо за заказ!" и очищать корзину
- при ошибке редиректить на странцу ошибки, показать текст ошибки