Скрывайте строки, которые покупатель не должен видеть, переименовывайте строки с неудачными названиями и управляйте порядком отображения — всё это не затрагивая фактическое содержимое корзины.
Это заменяет старый приём скрытия элементов корзины через CSS или style.display = 'none'. Line transform применяется при каждом рендере корзины, поэтому переживает обновления, повторные рендеры и повторные открытия панели.
Скрытие — это не удаление. Скрытая строка остаётся в корзине покупателя, остаётся в итоговой сумме и проходит до оформления заказа; она просто не отрисовывается в панели. При этом она исчезает из getCart().items и itemCount, поэтому ваш собственный код тоже перестаёт её видеть. Если нужно удалить по-настоящему, используйте removeItem.
Типичные кандидаты на скрытие:
Четыре сеттера, доступные на строке:
Компаратор имеет ту же форму, что ожидает Array.prototype.sort, и выполняется после скрытия и переименования:
Возвращайте 0 для пар, которые вас не интересуют. Компараторы компонуются как правила разрешения ничьих: первый, вернувший ненулевое значение, решает судьбу этой пары, а возврат 0 передаёт решение следующему, вместо того чтобы навязывать порядок.
Скрыть целый блок, а не строку
Line transform работает со строками корзины. Чтобы показывать разные настройки блока по стране, рынку или валюте (например, разные уровни Rewards), используйте условия в редакторе корзины. Код не требуется, и это переживает редизайны корзины. Итоговая сумма и содержимое корзины не являются типами условий редактора.
Обращайтесь к SDK, когда ваше правило не выражается условиями (ID товаров в корзине, пользовательская сумма и т. д.). В этом случае выполните запрос к shadow root по публичному классу cart-external-*:
Это выполняется после каждого рендера, поэтому блок может мелькнуть на экране до того, как ваш код его скроет. У условного рендеринга такой проблемы нет, поэтому предпочитайте его везде, где он подходит.
Что важно сделать правильно
- Трансформации — это вызовы настройки. Регистрируйте их в начале скрипта Initialization;
ready() не нужен.
- Выполняются трансформации всех. Ваша компонуется с зарегистрированными другими приложениями. Вы не можете заменить их трансформации, а они не могут отбросить вашу.
- Трансформация не может изменить цену, количество или идентичность. Она меняет только отображение. Для реальных изменений используйте действия.
- Трансформация, выбросившая ошибку, молча пропускается. Остальные продолжают работать. Проверяйте
aftersellCartDebugEvents во время разработки.
registerLineTransform возвращает функцию отмены регистрации, если позже понадобится её отменить.
- Хуки: полный справочник по хукам.
- Объект корзины: каждое поле, по которому можно ветвиться.
- Custom CSS: соглашение о классах
cart-external-*.