Unified Shipping Module - Callbacks

Callback functions for the unified shipping module

The Porterbuddy Unified Shipping Module provides callback function references to trigger actions in the widget from external sources. To access the callback function references, a function is defined for the configuration option onSetCallbacks. This function gets called by the widget after initialization, the argument passed is an object containing references to the callback functions. These references can be stored and used to trigger actions in the widget from external sources.

Available callback functions

Function Description
forceRefresh() Refreshes the unified shipping module with the currently specified values from the window.porterbuddy variable. Rerendering the module without refreshing the page will not reset its state, so if you actually need to clear the module state without refreshing, use this callback.
setRecipientInfo(recipientInfo: RecipientInfo) Sets the recipient info in the unified shipping module to the specified value.
refreshShippingOptions() Refreshes the shipping options with the values currently specified in window.porterbuddy. Only the 3 arrays specifying the shipping options are read from the configuration object, all other properties will remain unchanged.
setRecipientInfoLocked(recipientInfoLocked: boolean) Locks the address form and prevents further editing if recipientInfoLocked is true. Call with recipientInfoLocked false to unlock the form again. Should be used in conjunction with setRecipientInfo or onRecipientInfo. If the form is locked with invalid values behaviour is undefined.

Example

Entered Email

Entered PostCode

Entered StreetAddress

Callback Triggers

Configuration

In this example, the refresh function is exposed as window.refresh, in consequence, calling window.refresh within the page will refresh the whole checkout.

<script>
  window.porterbuddy = {
    homeDeliveryOptions: [],
    pickupPointOptions: [],
    storeOptions: [],
    language: 'NO',
    onRecipientInfoEntered: function ({ email, postCode, streetAddress }) {
      document.getElementById('emailData').value = email;
      document.getElementById('postCodeData').value = postCode;
      document.getElementById('streetAddressData').value = streetAddress;
      window.porterbuddy.homeDeliveryOptions = homeOptions;
      window.porterbuddy.storeOptions = storeOptions;
      window.porterbuddy.pickupPointOptions = pickupOptions;
      window.refreshShippingOptions();
    },
    onSetCallbacks: function (callbacks) {
      window.refresh = callbacks.forceRefresh;
      window.setRecipientInfo = callbacks.setRecipientInfo;
      window.setRecipientInfoLocked = callbacks.setRecipientInfoLocked;
      window.refreshShippingOptions = callbacks.refreshShippingOptions;
    }
  }
</script>