# Неделя #4 II Redux-saga. Тестирование. Работа со стилями
# Подготовка к выполнению задания
- Изучить все материалы четвертой недели курса в Личном кабинете.
# Что нужно сделать?
# Выполнить домашнее задание #10 (Nasa rover viewer)
Вам потребуется зарегистрироваться на сайте NASA, чтобы получить токен.
Необходимо написать приложение для просмотра фотографий 3 роверов за первые 3 дня.
В этом приложении у вас больше свободы, чем обычно.
Для работы нужно использовать редакс сагу и редакс. Следить за тем, чтобы приложение не делала повторные запросы, если данные уже есть в редаксе.
Порядок работы
- Получите домашнее задание №10 (
react-course -h homework-10-nasa-rover-viewer) - Ознакомиться с примером работы.
- Вы можете подсмотреть структуру компонентов используя React Developer Tools.
- Изучите, диспатч каких экшенов происходит в примере при помощи Redux Dev Tools.
- Обратите внимание на вкладку Network в Chrome Developer Tools. Посмотрите, какие выполняются запросы.
- Напишите редьюсер авторизации.
- Напишите редьюсер для работы с фотографиями
- Вам потребуется подключить Redux Saga и написать сагу для загрузки фото.
- В этом приложении используется material-ui библиотека компонентов. Вы можете посмотреть на пример её использования в файле
/src/components/SelectSol/SelectSol.js
# Выполнить домашнее задание #11 Тесты
Общая информация
В этой домашней работе мы попрактикуемся писать тесты.
Что нужно сделать?
В папке /src находятся файлы с компонентами, нужно написать для них тесты.
Не забудьте установить пакеты. Перед началом работы выполните yarn или npm install.
- Получите домашнее задание №11 (
react-course -h homework-11-tests) - Допишите тесты
- Запустите тесты при помощи команды
yarn test - В каждом конкретном компоненте будет описано, что нужно тестировать
- Сделайте коммит и пуш изменений
- Создайте пулл реквест и отправьте его на проверку наставнику
# Выпускной проект. Создать веб-приложение “Loft Taxi”
Вам предстоит самостоятельно написать приложение для заказа такси.
Порядок работы
- Ознакомиться с примером приложения
Логин: test@test.com Пароль: 123123
- Перейти по ссылке и приступить к выполнению выпускного проекта
# Работа с сервером
Для получения данных о маршруте и списка доступных адресов - вы можете использовать сервер. Также на сервере реализована простейшая система авторизации с захардкоженными данными.
# Доступные запросы
/auth- позволяет авторизоваться(test@test.com / 123123)/route- возвращает список точек для маршрута/addressList- возвращает список доступных адресов
Более подробное описание на странице сервера. Для сервера использован сервис glitch, так что вы можете взять существующий сервис за основу, сделать его ремикс и улучшить на своё усмотрение. Например добавить регистрацию и хранение данных пользователя.
# Работа с картой
Для работы с картой предлагается использовать сервис mapbox. Он предоставляют библиотеку для Javascript, её довольно удобно использовать для отображения карты и маршрутов на ней.
Документация для Jаvascript библиотеки Для работы с картой вам потребуется зарегистрироваться на mapbox и получить токен.
Пример использования карты в приложении
export default class Map extends Component {
map = null;
mapContainer = React.createRef();
componentDidMount() {
mapboxgl.accessToken = "ВАШ ТОКЕН С mapbox";
this.map = new mapboxgl.Map({
container: this.mapContainer.current,
style: "mapbox://styles/mapbox/streets-v9",
center: [30.2656504, 59.8029126],
zoom: 15
});
}
componentWillUnmount() {
this.map.remove();
}
render() {
return <div ref={this.mapContainer} />;
}
}
Так же вам потребуются методы map.flyTo и map.addLayer.
# Работа со стилями
Для реализации приложения предлагается использовать библиотеку компонентов. Я рекомендую использовать Material UI. Именно эта библиотека была использована для демо. Помимо неё есть множество других библиотек компонентов:
- semantic-ui
- ant.design
- lihtning design
- grommet
- primer - библиотека компонентов на базе дизайн системы гитхаба.
- purecss
- foundation
- clarity
# Задачи
Необходимо реализовать приложение со следующим функционалом:
Как пользователь:
- Я могу авторизоваться в приложении
- При неверном логине или пароле я получу ошибку валидации
- При попытке перейти на любую страницу кроме
/loginя буду перенаправлен обратно на страницу/login
Как авторизованный пользователь:
- Я имею доступ к странице с картой
(/map) - При незаполненных платёжных данных на странице карты я вижу сообщение о необходимости их заполнить и ссылку на профиль.
- Я имею доступ к странице профиля
(/profile) - На странице профиля
(/profile)я могу указать данные банковской карты:
- Поля
cardName,cardNumber,expDate,cvvобязательны для заполнения - Поле
cardNameможет содержать только буквы латинского алфавита - Поле
cardNumberможет содержать только цифры и должно иметь длину 16 символов - Поле
expDatдолжно иметь формат даты - Поле
CVVможет содержать только цифры. Состоит из 3 символов - Я получаю оповещение при успешном сохранении данных карты
- Я могу выйти из аккаунта нажав кнопку "Выйти".
Как авторизованный пользователь с указанными платёжными данными:
- На странице с картой я могу выбрать адрес отправления и прибытия из списка доступных.
- При указанных адресах отправления и прибытия я могу нажать на кнопку "Выполнить заказ":
- Карта переместится к точке отправления.
- Будет построен маршрут от адреса отправления к адресу прибытия.
- Я получу сообщение об успешно выполненном заказе.
- Мне будет доступна кнопка выполнения нового заказа.
# Условия выполнения
- Необходимо реализовать приложение используя библиотеку ReactJS.
- Для управлением состоянием приложения должен быть использован Redux.
- Сайд-эффекты могут быть реализованы с помощью Redux Saga либо Redux Thunk, в крайнем случае с помощью middleware.
# Бонусные условия
- Код редьюсеров покрыт тестами.
- Сайд эффекты покрыты тестами.
- Если в компоненте есть логика - она протестирована.
# Как всё успеть?
Данный план является примерным ориентиром. Вы всегда можете работать в удобном для себя темпе.
# 🗓 Понедельник
Изучаем материалы модуля "II Redux-saga".
Клонируем домашнее задание 10 и выполняем его.
Готовим вопросы к данному модулю.
# 🗓 Вторник
Изучаем материалы модуля "Тестирование".
Продолжаем работу над домашним заданием 10.
# 🗓 Среда
Работа над домашним заданием №11.
Готовим вопросы к данному модулю.
# 🗓 Четверг
Сдаём домашнее задание 11 на проверку.
Изучаем материалы модуля "Работа со стилями".
Смотрим пример выпускного проекта.
Готовим вопросы к данному модулю.
# 🗓 Пятница
Работа над выпускным проектом.
Участвовать в практическом вебинаре.