JavaScript events
Custom JavaScript can be used to hook into existing theme functionality without touching theme code. This page serves as a reference for all the custom events Primavera exposes.
A custom event can be fired by instantiating an instance of the custom event, and then dispatching it.
const event = new CustomEvent('dialog:trigger:cart-drawer');
document.dispatchEvent(event);You can listen to an event listener by listening to it on the document element, just like any other event.
document.addEventListener('dialog:open:cart-drawer', (event) => {});Dialog events
All the dialogs in the theme are triggered by the same set of core events.
You can open or close a dialog manually, or listen for existing open close events by replacing the [name] text with the name of the dialog. The name of the dialog can be found in the data-name attribute. So for example, in the following snippet, the name is 'cart-drawer'.
 <custom-dialog 
    data-modal="true" 
    data-overlay="true"
    data-name="cart-drawer" 
    data-section="{{ section.id }}"
    class="cart cart-drawer cart-drawer--{{ section.settings.layout_desktop }}">This will open a modal. This can be useful if you need to manually open the cart drawer from another app or integration.
new CustomEvent('dialog:trigger:[name]')This listens for the open event of a modal. You might need to do this if you need to append something to a modals contents once it's open.
document.addEventListener('dialog:open:[name]', (event) => {
    // The target element is the DOM node of the modal
    console.log(event.detail.target)
});This will force a modal to close.
new CustomEvent(`dialog:force-close:[name]`)This listens for the close event. You might need to listen for this to do things like reset an animation.
document.addEventListener('dialog:close:[name]', (event) => {
    // The target element is the DOM node of the modal
    console.log(event.detail.target)
});Quick add
This fires when the quick add is loaded. Maybe useful for appending or removing things to the quick add form dynamically.
document.addEventListener(`dialog:quickadd-loaded`, this.onQuickAddLoaded.bind(this));Products
This event fires when a variant is changed.
document.addEventListener('variant:change', (event) => {
  // The event detail includes the section id,
  // the full rendered HTML from the section rendering API, and the variant object
  const { sectionId, html, variant } = event.detail;
});Cart
This event fires when the shopping cart is updated.
document.addEventListener('cart:change', (event) => {
  // The event detail includes the source of the change ('product-form' by default), 
  // the variant id, and the cart response as JSON. 
  const { source, productVariantId, cartData } = event.detail;
});This event fires when there is a shopping cart error after an fetch event.
document.addEventListener('cart:error', (event) => {
  // The event detail includes the source of the change ('product-form' by default), 
  // the variant id, the response.errors object and an optional message.
  const { source, productVariantId, errors, message } = event.detail;
});Last updated
Was this helpful?