интернет-магазин с товарами для веб-разработчиков. В нём можно посмотреть каталог товаров, добавить товары в корзину и делать заказы.
Посмотреть проект Web-ларёк.
В проекте применен принцип MVP (Model-View-Presenter), который обеспечивает четкое разделение ответственностей между классами Model и View каждый класс выполняет свою определенную роль:
Model - работа с загрузкой данных по API, сохранение и работа с данными полученными от пользователя.
View - отображает интерфейс для взаимодействия с пользователем, отлавливает и сообщает о произошедших событиях.
EventEmitter выступает в роли Представителя (Presenter) - связывает модели данных с отображением интерфейсов при сработке какого нибудь события, управляя взаимодействием между ними.
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 — файл с утилитами
Методы:
handleResponse(response: Response): Promise<object>
- обработчик ответа сервера.get(uri: string)
- принимает изменяющеюся часть url-адреса, возвращает ответ от сервера.post(uri: string, data: object, method: ApiPostMethods = 'POST')
- принимает изменяющеюся часть url-адреса, принимает данные в виде объекта для отправки на сервер, type ApiPostMethods = 'POST' | 'PUT' | 'DELETE'.
Класс EventEmitter реализует паттерн «Observer/Наблюдатель» и обеспечивает работу событий, его методы позволяют устанавливать и снимать слушатели событий, вызвать слушатели при возникновении события.
Методы:
on
- для подписки на событие.off
- для отписки от события.emit
- уведомления подписчиков о наступлении события соответственно.onAll
- для подписки на все события.offAll
- сброса всех подписчиков.trigger
- генерирует заданное событие с заданными аргументами. Это позволяет передавать его в качестве обработчика события в другие классы. Эти классы будут генерировать события, не будучи при этом напрямую зависимыми от классаEventEmitter
.
Описание классов Model, которые позволяют хранить и обрабатывать данные с сервера и от пользователей.
Методы:
getListProductCard
- получаем массив объектов(карточек) с сервера.postOrderLot
- получаем ответ от сервера по сделанному/отправленному заказу.
Методы:
getCounter
- возвращает количество товаров в корзине.getSumAllProducts
- считает и возвращает сумму синапсов всех товаров в корзине.setSelectedСard
- добавляет товар в корзину.deleteCardToBasket
- удаляет товар из корзины.clearBasketProducts
- очищает/удаляет все товары из корзины.
Метод:
setPreview
- получает данные карточки которую открыл пользователь.
Методы:
setOrderAddress
- принимаем/сохраняет адрес пользователя.validateOrder
- проверяет адрес пользователя / и способ оплаты.setOrderData
- принимаем/сохраняет номер телефона/почту пользователя.validateContacts
- проверяет номер телефона/почту пользователя.getOrderLot
- возвращает объект данных пользователя с выбранными товарами.
Классы View позволяют отображать элементы страницы с полученными данными, позволяют взаимодействовать с пользователем.
Методы:
renderHeaderBasketCounter
- сохраняет и устанавливает какое количество товаров находится в корзине.renderSumAllProducts
- сохраняет и устанавливает сумму синапсов всех товаров в корзине.
метод:
setPrice
- принимает цену продукта в числовом значении и возвращает в строчном.
Методы:
setText
- принимает два значения, первое HTMLElement, второе значение задаёт текстовое содержимое HTMLElement.cardCategory
- принимает строчное значение и создаёт новый className для HTMLElement.setPrice
- принимает цену продукта в числовом значении и возвращает в строчном.
Класс CardPreview
наследуется от класса Card
и управляет отображением подробного описания карточки товара в превью, позволяет добавить карточку в корзину.
Метод:
notSale
- принимает данные о продукте, проверяет наличие цены продукта, при отсутствии цены ограничивает покупку.
Класс Order
управляет отображением содержимого модального окна и позволяет принять от пользователя метод оплаты и адрес.
Метод:
paymentSelection
- устанавливаем обводку вокруг выбранного метода оплаты.
Класс Contacts
управляет отображением содержимого модального окна и позволяет принять от пользователя номер телефона и Email.
Методы:
- open - отображает модальное окон.
- close - закрывает модальное окно.
Для установки и запуска проекта необходимо выполнить команды
npm install
npm run start
или
yarn
yarn start
npm run build
или
yarn build