Skip to content

VladislavSerKir/react-burger

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

39 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Проект Яндекса: 'Бургер'


Проект Burger-Stellar является полноценным фронтенд приложением-магазином, с возможностью регистрации, создания заказа и просмотра как всех заказов, так и каждого заказа по отдельности. Так же есть возможность редактировать свои данные в личном кабинете пользователя.

Технологии в проекте

Для написания проекта использовалась библиотека React, в основе проекта лежит сборка Create React App с флагом -template ts для возможности компиляции файлов компонентов с разметкой и простых файлов с JS в TypeScript.

  • В качестве основной стилевой библиотекой использовалась react-developer-burger-ui-components - библиотека с UI компонентами, иконками и др. графическими элементами.
  • Для написания структуры стилей использовалась БЭМ методология, стили написаны на SCSS, который предлагает более удобный и интуитивно понятный синтаксис для понимания и реализации адаптивности на разных расширениях. Решено не использовать modules для уменьшения импортов в компоненты и невозможностью написания полноценных селекторов по БЭМ.
  • Приложение имеет каскадную структуру компонентов с разметкой, где головной компонент App рендерится в корневой блок div .
  • Для реализации функционала модальных окон использовался функционал React-Create portal, который позволяет наложить содержимое модальных окон поверх основного div.
  • В приложении реализован роутинг. В качестве библиотеки компонентов роутинга использовался react-router-dom 5 версии. В качестве вспомогательных хуков для осуществления полноценного роутинга использовались:
    useLocation позволяет возвращать объект с url, state, и других свойств текущего компонента для управления програмным роутингом.
    useParams позволяет осуществлять динамический роутинг относительно какого либо пути pathname на любом уровне приложения. И отображать содержимое компонента в зависимости от переданного свойства, например id карточки.
    useHistory за счет того что хук возвращает объект history с методами, позволяет осуществлять манипуляции с историей перемещений и реализует паттерн go back. Когда пользователь заполнил корзину, но не вошел в систему, происходит редирект на предыдущую страницу с которой пользователь ушел и доофомить заказ.
  • Использовалась библиотека react-dnd для интерактивного перемещения покупных элементов и формирования корзины.
  • Для управления состоянием приложения использовался React Redux Toolkit с использованием функции createSlice для автоматического создания экшенов и их последующей удобной типизации. Для удобства стор был абстрактно разделен на 4 части редюсеров: user - для управлением данными пользователя, data - для управления и хранения данных получаемых с бэкенда, modal - для управления модальными окнами, constructor - для управления элементами корзины и формирования заказа.
  • Для осуществления непрерывного потока данных заказов с бэкенда реализован Websocket, который позволяет получать заказы и просматривать их статусы в режиме реального времени.
  • Реализован функционал accessToken и refreshToken в паре при аутентификации. При регистрации и входе выдаются оба токена. accessToken служит для автоматического входа в приложение при перезагрузке страницы. refreshToken служит для обновления предыдущего в случае если он истек.

Реализация

Главная страница условно разделена на 2 части:

  • Левая: Список всех ингредиентов в виде карточек, доступных для оформления заказа. Для удобного переключения типов ингредиентов реализованы табы.
  • Правая: Список ингредиентов помещенных в корзину. Для оформления и выдачи номера заказа необходимо войти в систему, а так же выбрать булку к бургеру в качестве основы заказа.

Запись экрана 2023-01-30 в 22 02 39 (1)

Для осуществления заказа, как говорилось выше, необходимо войти в личный кабинет нажав на ссылку 'войти' или 'Личный кабинет' в правом верхнем углу. После оформления заказа будет выдан номер и откроется модальное окно.

Запись экрана 2023-01-30 в 22 13 54

Можно просматривать все заказы в разделе 'Лента заказов', в нем находятся все заказы пользователей. Так же можно помотреть собственные заказы в личном кабинете.

Запись экрана 2023-01-30 в 22 21 21

Имеется возможность управления данными пользователя в разделе 'Профиль' Личного кабинета.

1212

Так же в данном приложении доступна возможность восстановления пароля. В этом случае необходимо ввести email аккаунта. На указанный ящик придет код восстановления пароля, его можно ввести в окне подтверждения смены пароля совместно с новым паролем.

Запись экрана 2023-01-30 в 22 32 08

Технологии


HTML  SASS  React  TypeScript  JavaScript  Redux  Figma 

Установка, настройка

Проект, развернутый на Github: GitHub Pages

  • Установка зависимостей: npm install
  • Режим разработки: npm run dev
  • Сформировать проект для последующего размещения на ресурсах: npm run build
  • Сформировать заново проект для отображения на GitHub pages: npm run deploy

Написать мне

github telegram