Стек: HTML, SCSS, TS, Webpack
Структура проекта:
- src/ — исходные файлы проекта
- src/components/ — папка с JS компонентами
- src/components/base/ — папка с базовым кодом
Важные файлы:
- src/pages/index.html — HTML-файл главной страницы
- src/types/index.ts — файл с типами
- src/index.ts — точка входа приложения
- src/styles/styles.scss — корневой файл стилей
- src/utils/constants.ts — файл с константами
- src/utils/utils.ts — файл с утилитами
Для установки и запуска проекта необходимо выполнить команды
npm install
npm run start
или
yarn
yarn start
npm run build
или
yarn build
Проект построен на основе архитектурного паттерна MVP (Model-View-Presenter) событийно-ориентированной архитектуры. В этой архитектуре компоненты взаимодействуют друг с другом через события, что обеспечивает слабую связанность и гибкость системы.
- EventEmitter — базовый класс для работы с событиями
- AppState — глобальное состояние приложения
- Компоненты — независимые модули, взаимодействующие через события
- API — клиент для работы с серверным API
products:changed
- обновление списка товаровcard:select
- выбор карточки товараpreview:changed
- обновление превью товара
basket:open
- открытие корзиныbasket:changed
- изменение состояния корзиныproduct:toggle
- переключение товара (добавление/удаление)product:add
- добавление товара в корзинуproduct:delete
- удаление товара из корзиныcounter:changed
- изменение счетчика товаров
order:open
- открытие формы заказаorder:submit
- отправка формы заказаorder:ready
- заказ готов к отправкеorderError:changed
- изменение ошибок в форме заказаpayment:change
- изменение способа оплаты/^order\..*:change/
- изменение любого поля заказа
contact:open
- открытие формы контактовcontacts:submit
- отправка формы контактовcontacts:ready
- форма контактов готоваformError:changed
- изменение ошибок в форме/^contacts\..*:change/
- изменение любого поля контактовcontacts:error
- обнаружение ошибки
modal:open
- открытие модального окнаmodal:close
- закрытие модального окна
Базовый класс для работы с событиями. Методы
on
- подписка на событиеemit
- генерация событияonAll
- подписка на все событияoff
- отписка от событияoffAll
- отписка от всех событий
Класс управления состоянием приложения. Поля
catalog
- список товаровbasket
- корзинаorder
- данные заказаpreview
- превью товара
Методы
setCatalog
- установка каталога товаровhandleBasketAction
- обработка действий с корзинойsetOrderForm
- установка данных заказаsetContactForm
- установка контактных данныхclearBasket
- очистка корзиныclearOrder
- очистка заказа
Модель каталога продуктов.
Не принимает параматры. Инициализирует пустой список товаров.
product
- массив продуктов, который хранит данные каталога.
getList
- загружает список продуктов из API и обновляет полеproducts
.getItem
- возвращает данные конкретного продукта по Id.
Модель корзины.
Создаёт пустую карзину с коллекцией, где ключ Id
- товара и значение - объект товара.
items
- коллекция товаров в корзине.
add
- добавляет товар в корзину.remove
- удаляет товара по Id из корзины.clear
- очищает корзину.getTotal
- возвращает общую стоимость товаров в корзине.
Модель для работы с заказом.
Инициализирует пустые поля заказа.
orderData
- объект данных заказа.
savePaymentMethod
- сохраняет выбранный способ оплаты в заказ.saveDeliveryAddress
- сохраняет адрес доставки.saveContact
- сохраняет контактные данные.setItems
- устанавливает список товаров для создания заказа.validateOrder
- проверяет корректность данных заказа.sendOrder
- отправляет заказ в API и возвращает созданный заказ.
Компонент представления карточки товара.
product
- данные товара.
render
- создаёт разметку карточки товара.onClick
- обрабатывает событие клика по карточке.
Компонент представления корзин.
items
- список товаров в корзине.
render
- создаёт разметку корзины.onUpdate
- обновляет содержимое корзины.onRemove
- обрабатывает событие удаления товара из корзины.
Компонент представления формы заказа.
render
- создаёт разметку формы заказа.setPaymentMethod
- устанавливает способ оплаты.setDeliveryAddress
- устанавливает адрес доставки.setEmail
- устанавливает адрес электронной почты.setPhone
- устанавливает номер телефона.showErrors
- отображает ошибки валидации формы.onSubmit
- обрабатывает отправку формы.
Компонент модального окна.
content
- содержимое модального окна.
render
- создаёт разметку модального окна.open
- открывает модальное окно.close
- закрывает модальное окно.onClose
- обрабатывает закрытие окна.
Компонент представления главной страницы.
catalog
- каталог товаров.total
- итоговая стоимость заказа.
Компонент сообщения об успешном создании заказа.
total
- итоговая стоимость заказа.