- Установить node и npm.
- Создать проект и настроить package.json.
- Настроить webpack.config.
- Сделать при помощи webpack сборку простейшего React-кода с использованием функционального компонента сообщения
- Выдать html-файл, в который подключается сборка при помощи webpack-dev-server.
- Реализовать возможность отправки нового сообщения с фиксированным текстом:
- добавить кнопку;
- обрабатывать нажатие на кнопку функцией, которая добавляет в массив сообщений новое — например, с текстом «Нормально».
- функция-обработчик также должна делать перерендер DOM’а, чтобы новое сообщение не просто добавилось в массив, но и появилось у пользователя на странице.
- Создать в папке components два компонента: MessageField и Message. Причем компоненты Message должны быть вложены в MessageField.
- Реализовать отправку сообщений по нажатию кнопки.
- На каждое отправленное сообщение должен отвечать робот (используйте componentDidUpdate).
- Добавить автора к сообщениям и отображать его в интерфейсе. Переделать логику ответа от робота в соответствии с этим.
- Сверстать мессенджер, выделив явно поле для сообщений и визуально разделив сообщения от пользователя и ответы робота.
- Добавить возможность ввода текста сообщения и его отправки: сообщение должно отправляться либо по нажатию кнопки в интерфейсе, либо по нажатию Enter на клавиатуре; поле ввода должно очищаться при отправке сообщения.
- Подключить Material-UI и сделать с его помощью верстку поля ввода, кнопки отправки сообщения.
- Создать новые компоненты: Layout, ChatList и Header.
- Layout должен быть вверху приложения (подключаться в index.jsx), а ChatList, Header и MessageField внутри него;
- Header должен быть вверху Layout и занимать всю ширину;
- ChatList и MessageField должны быть расположены рядом друг с другом ниже Header так, чтобы Message Field занимал большую часть (например, 30 % на 70 %);
- ChatList должен только визуально отражать список из 3–5 чатов (назовите их как угодно) и пока не несет никакой функциональности. Переключение между чатами реализовывать не нужно;
- Для верстки ChatList использовать List из Material-UI.
- Исправить баг, который возникает, если отправить сообщение и, не дожидаясь ответа от робота, начать печатать что-то в поле ввода.
- Подключить BrowserRouter (из react-router-dom).
- Создать верхний компонент Router со Switch и Route’ами.
- Разбить приложение на чаты с помощью роутера (URLs: /chat/<chat_id>/).
- Реализовать хранение сообщений в словаре с id в качестве ключа.
- Реализовать хранение чатов в словаре с id в качестве ключа, а в качестве значения со словарем из названия чата и списка id-шников сообщений из этого чата.
- Сделать страницу профиля, располагающуюся по пути /profile/, и ссылку на нее в Header’е мессенджера.
- Реализовать добавление новых чатов в мессенджер. Для этого нужно связать воедино чаты, хранящиеся в state MessageField, и чаты, отрисовывающиеся в ChatList.
- Подключить Redux.
- Установить и подключить Redux DevTools Extension.
- Перенести в Redux чаты.
- Перенести в Redux сообщения.
- Перенести в Redux данные профиля и отображать имя (или любую другую информацию из профиля) в Header’е мессенджера.
Урок 6. Когда нужно использовать Redux middlewares. Реализация ответа от робота при помощи middlewares. ConnectedRouter. Хранение истории сообщений при помощи redux-persist.
- Подключить middlewares.
- Создать messageMiddleware и перенести туда логику ответа от робота.
- Сделать с помощью middleware мигание (подсвечивание в списке на короткое время) чата, в который пришло сообщение от робота.
- Подключить Router к Redux и перевести переходы между чатами с на push().
- Подключить redux-persist и сохранять с его помощью чаты и сообщения.
- Реализовать возможность удаления чатов и сообщений.
- Подключить redux-api-middleware.
- Организовать загрузку чатов и сообщений через API.
- Проводить выделение сущностей (чатов и сообщений) с помощью normalizr.
- Загружать данные профиля через API.