Веб-приложение по управлению заказами на доставку лекарств с помощью дронов, включающее динамическое обновление статусов заказов, управление корзиной и выбор товаров с учетом доступности на сервере.
Серверная часть проекта основана на готовом решении, предоставленном другим разработчиком в рамках его минипроекта. Для получения более подробной информации вы можете ознакомиться с документацией по ссылке.
Дизайн сайта был разработан отдельным дизайнером, который создал макет и визуальное оформление проекта. Для разработки были выбраны только те страницы, где реализован функционал, связанный с сервером. Дополнительные детали можно найти в предоставленных материалах по ссылке.
React
— фреймворк для создания пользовательских интерфейсовFetch API
— взаимодействие с серверомLocalStorage
— хранение данных о выбранных товарахReact Router
— навигация и управление маршрутизацией
-
Сортировка товаров в каталоге
- Реализована возможность сортировки товаров по различным критериям:
- по алфавиту
- по весу
- по доступности — можно просмотреть все или только доступные товары
- Сортировка помогает пользователям быстро находить нужные товары и улучшает удобство взаимодействия с каталогом.
- Реализована возможность сортировки товаров по различным критериям:
-
Постраничное отображение данных
- Разделение каталога и истории заказов на страницы.
- Данные загружаются частями с сервера, что уменьшает объем передаваемых данных.
- Догрузка данных осуществляется в зависимости от событий пользователя, отслеживаемых с помощью
event listeners
.
-
Управление корзиной
-
Актуальное состояние товаров
Корзина отображает актуальную информацию о товарах, синхронизируя их состояние с сервером. -
Получение данных о доступных дронах
При загрузке корзины выполняется запрос к серверу для получения информации о доступных дронах, включая их статус, ID и максимальный перевозимый вес. -
Рассчет максимальной вместимости
Для доступного дрона рассчитывается максимальный вес товаров, который он может перевозить. Если текущий вес всех выбранных товаров превышает максимальный лимит доступного дрона, отображается кнопкаChoose the best capacity
.
При активации кнопки функция автоматически определяет, какие товары можно отправить с учетом их веса и доступного места в дроне. Невместимые товары остаются в корзине невыбранными. -
Интерактивность управления
Пользователь может вручную изменять выбор товаров, даже после выполнения расчета вместимости. Все изменения отображаются мгновенно и фиксируются вlocal storage
.
-
-
Проверка доступности сервера
-
Проверка подключения
Реализованы попытки повторного подключения к серверу с интервалами и ограничением на количество попыток. -
Обработка ошибок
Отслеживаются ошибки сети, сервера или неверных запросов. Пользователь получает уведомления с пояснениями и рекомендациями. -
Перенаправление при недоступности
Если сервер остается недоступным, пользователь перенаправляется на страницу ошибки.
-
-
Модальные окна
- Отображение ошибки при проблемах с сетью или сервером.
- Отображение информации о выбранном заказе в истории заказов.
-
Загрузка данных
- Вместо компонентов отображаются плейсхолдеры до завершения загрузки данных.
- На странице с историей заказов отображается спиннер при загрузке дополнительных данных с сервера.
-
Локальное хранилище
- Хранение данных
Вlocal storage
сохраняются данные корзины, список выбранных товаров и информация о доступном дроне для доставки, что позволяет поддерживать актуальное состояние при перезагрузке или смене страницы.
- Хранение данных
-
Тестирование функций с использованием Jest
- Были написаны тесты для проверки корректности работы функций получения текущей и последующей дат при оформлении заказа.
- Клонировать репозиторий:
git clone <URL>
- Установить зависимости:
npm install
- Запустить проект:
npm start
-
Реализация механизма повторной отправки запросов на сервер в случае его недоступности на странице заказов. На данный момент при запуске таймера для повторных запросов возникает проблема с дублированием данных из-за использования useCallback, что требует доработки.
-
Расширение покрытия тестами React-компонентов.
Приветствуются критика и комментарии. Советы и предложения будут учтены в дальнейшей разработке.