Інтеграція корзини
Spefix підтримує два режими роботи з корзиною: базовий і з лічильником кількості. Обидва налаштовуються через один виклик:
window.SpefixSearch.setCartConfig(config)
Актуальність стану
setCartConfig потрібно викликати щоразу при зміні стану корзини — після додавання, видалення або зміни кількості товару. Інакше віджет відображатиме застарілі дані.
Базовий режим
Відображає кнопку «Додати в кошик» біля кожного товару у результатах пошуку.
Обов'язкові поля
| Поле | Тип | Опис |
|---|---|---|
addToCart | (id: string) => void | Викликається при кліку на кнопку. Отримує id товару |
cartItemIds | string[] | Масив id товарів, які зараз у корзині |
Поведінка
- При кліку на кнопку викликається
addToCart(productId). - Якщо
idтовару вже є вcartItemIds— кнопка візуально не змінюється. Логіка відображення стану залишається на стороні вашого сайту.
Приклад
- JavaScript
- TypeScript
window.SpefixSearch.setCartConfig({
addToCart(id) {
console.log("add item", id)
},
cartItemIds: ["101", "205"],
})
window.SpefixSearch.setCartConfig({
addToCart(id: string) {
console.log("add item", id)
},
cartItemIds: ["101", "205"],
})
Режим лічильника
Дозволяє користувачу вказати кількість товару прямо у віджеті пошуку — через кнопки + / − або ручний ввід.
Обов'язкові поля
| Поле | Тип | Опис |
|---|---|---|
quantityItems | Array<{ id: string; quantity: number }> | Поточна кількість кожного товару в корзині |
onQuantityChange | (item: { id: string; quantity: number }) => void | Promise<void> | Викликається при підтвердженні кількості через кнопку Apply |
Поведінка
- Спочатку відображається звичайна кнопка «Додати в кошик».
- При кліку кнопка розгортається у лічильник — поля
+,−і ручний ввід. - Після натискання Apply викликається
onQuantityChangeз об'єктом поточного товару. Лічильник згортається назад у кнопку. - Якщо кількість більша за
0— на кнопці відображається вибрана кількість. - Якщо кількість
0— кнопка повертається до початкового вигляду. ПодіяonQuantityChangeвсе одно спрацьовує зquantity: 0, щоб ви могли видалити товар на стороні бекенду.
Приклад
- JavaScript
- TypeScript
window.SpefixSearch.setCartConfig({
quantityItems: [
{ id: "101", quantity: 2 },
{ id: "205", quantity: 1 },
],
onQuantityChange: (item) => {console.log(item)}
// приклад item:
// { id: "101", quantity: 3 }
})
window.SpefixSearch.setCartConfig({
quantityItems: [
{ id: "101", quantity: 2 },
{ id: "205", quantity: 1 },
],
onQuantityChange: (item: { id: string, quantity: number }) => {console.log(item)}
// приклад item:
// { id: "101", quantity: 3 }
})
tip
onQuantityChange може бути асинхронною — віджет коректно обробляє Promise.
Як віджет обирає режим
Віджет перевіряє конфіг у такому порядку:
- Якщо передано
quantityItemsіonQuantityChange→ вмикається режим лічильника. - Якщо передано
addToCartіcartItemIds→ вмикається базовий режим.
Довідка по полях
| Поле | Режим | Тип |
|---|---|---|
addToCart | базовий | (id: string) => void |
cartItemIds | базовий | string[] |
quantityItems | лічильник | Array<{ id: string; quantity: number }> |
onQuantityChange | лічильник | (item: { id: string; quantity: number }) => void | Promise<void> |