Виджет интернет-магазина

Справочник SDK

Полный API ScalarcutTiling.mount: каждая опция, каждый колбэк и каждый метод объекта, который он возвращает.

У SDK одна точка входа — ScalarcutTiling.mount(target, options). Он возвращает объект-ручку, которым вы управляете виджетом после загрузки.

mount(target, options)

const planner = ScalarcutTiling.mount('#sc-tiling', {
  widgetKey: 'YOUR_WIDGET_KEY',
  // ... options below
});

target — это строка CSS-селектора или Element. Виджет рендерится в новый iframe внутри него.

Опции

Опция Тип Обязательно Описание
widgetKey string Да Ключ виджета вашего аккаунта.
catalog string Нет Слаг каталога, к которому привязывается планировщик.
sku string Нет SKU для предвыбора при загрузке.
locale string Нет Язык интерфейса — en, ru, de, pl, it, es, fr или pt.
currency string Нет Код валюты отображения, например USD, EUR или BYN.
height number Нет Стартовая высота десктопного фрейма в пикселях. По умолчанию 880.
embedOrigin string Нет Origin хоста встраивания. По умолчанию берётся из origin самого скрипта SDK, поэтому задавать его нужно редко.
onReady () => void Нет Вызывается, когда виджет закончил загрузку.
onBomUpdated (payload) => void Нет Вызывается при каждом изменении ведомости материалов.
onAddToCart (payload) => void Нет Вызывается, когда покупатель нажимает «Добавить в корзину».
onError (payload) => void Нет Вызывается, когда виджет сообщает об ошибке.
onResize (height) => void Нет Вызывается, когда виджет просит новую высоту.

Колбэки

onAddToCart(payload) — тот, которым вы будете пользоваться чаще всего:

onAddToCart(payload) {
  // payload = { lines: [{ sku, qty, unit }], layoutFingerprint, layoutToken }
  payload.lines.forEach((line) => {
    yourStore.addToCart(line.sku, line.qty, line.unit);
  });
}

Каждая строка несёт SKU, числовое количество и единицу (box для плитки; kg и l для расходников, когда эта опция включена для вашего магазина). См. Интеграция корзины.

onBomUpdated(payload) даёт живой снимок сметы, чтобы ваша страница могла показать рядом с виджетом что-то вроде «Плитки к заказу: 34»:

onBomUpdated(payload) {
  console.log(payload); // areas, piece counts, boxes, consumables
}

onError(payload) несёт машиночитаемую причину, которую вы можете передать своей службе поддержки.

Методы ручки

mount возвращает ручку:

Метод Описание
setSku(sku) Переключает активный SKU без повторного рендера всего виджета.
setLocale(locale) Меняет язык интерфейса и перезагружает фрейм.
setCurrency(currency) Меняет валюту отображения и перезагружает фрейм.
exportBlueprint() Просит виджет скачать текущий Blueprint PDF.
requestAddToCart() Программно запускает «Добавить в корзину», как кнопка внутри виджета.
destroy() Удаляет iframe и отписывается от слушателя. Вызывайте, когда виджет больше не нужен, например при навигации в SPA.
const planner = ScalarcutTiling.mount('#sc-tiling', { widgetKey: 'YOUR_WIDGET_KEY' });

// Later, in response to a variant switch on your page:
planner.setSku('VARIANT_SKU');

// On navigation away:
planner.destroy();

Локаль и валюта перезагружают, SKU — нет

setLocale и setCurrency меняют язык и валюту самого виджета и перезагружают фрейм. setSku не перезагружает — он меняет материал на месте и сохраняет раскладку покупателя.

Ошибки

mount сразу бросает исключение, если цель отсутствует, widgetKey не задан или origin встраивания невозможно определить. Оборачивайте вызов, если ваша страница рендерит контейнер условно:

try {
  ScalarcutTiling.mount('#sc-tiling', { widgetKey: 'YOUR_WIDGET_KEY' });
} catch (error) {
  console.warn('Scalarcut not mounted:', error.message);
}