GTM Event Factories

These factories are responsible for creating and preparing GTM event objects. They can be written either as basic get methods, such as getGtmCartViewEvent, or as hooks, such as useGtmStaticPageViewEvent. The difference between them is

getGtmCartViewEvent

export const getGtmCartViewEvent = (
    currencyCode: string; // the code of the currency used on the domain
    valueWithoutVat: number, // the value of the cart without VAT
    valueWithVat: number, // the value of the cart with VAT
    products: GtmCartItemType[] | undefined, // products in cart, if available
): GtmCartViewEventType => {
    // function body not included in this code block
}

getGtmContactInformationPageViewEvent

export const getGtmContactInformationPageViewEvent = (
  gtmCartInfo: GtmCartInfoType // the cart of the current user in the shape of GTM cart information
): GtmContactInformationPageViewEventType => {
  // function body not included in this code block
};

getGtmPaymentAndTransportPageViewEvent

export const getGtmPaymentAndTransportPageViewEvent = (
    currencyCode: string; // the code of the currency used on the domain
    gtmCartInfo: GtmCartInfoType, // the cart of the current user in the shape of GTM cart information
): GtmPaymentAndTransportPageViewEventType => {
    // function body not included in this code block
}

getGtmPaymentFailEvent

export const getGtmPaymentFailEvent = (
  orderId: string // ID of the order for which the payment has failed
): GtmPaymentFailEventType => {
  // function body not included in this code block
};

getGtmCreateOrderEvent

export const getGtmCreateOrderEvent = (
  gtmCreateOrderEventOrderPart: GtmCreateOrderEventOrderPartType, // part of the GtmCreateOrderEvent object containing information about the order
  gtmCreateOrderEventUserPart: GtmUserInfoType, // part of the GtmCreateOrderEvent object containing information about the user
  isPaymentSuccessful?: boolean // boolean pointer if the payment was successful, not filled if we cannot determine the payment status
): GtmCreateOrderEventType => {
  // function body not included in this code block
};

getGtmCreateOrderEventOrderPart

export const getGtmCreateOrderEventOrderPart = (
  cart: CartFragment, // the cart of the current user in the shape of basic CartFragment object
  payment: SimplePaymentFragment, // the payment method chosen by the user that will be used to pay for the order
  promoCode: string | null, // promo code used for the order, if applicable
  orderNumber: string, // identifying number of the order
  reviewConsents: GtmReviewConsentsType, // information about consents previously given by the user
  domainConfig: DomainConfigType // configuration for the current domain
): GtmCreateOrderEventOrderPartType => {
  // function body not included in this code block
};

getGtmCreateOrderEventUserPart

export const getGtmCreateOrderEventUserPart = (
  user: CurrentCustomerType | null | undefined, // information about current user
  userContactInformation: ContactInformation // contact information filled by the user during order
): GtmUserInfoType => {
  // function body not included in this code block
};

getGtmSendFormEvent

export const getGtmSendFormEvent = (
  form: GtmFormType // type of the form submitted by the user
): GtmSendFormEventType => {
  // function body not included in this code block
};

getGtmProductClickEvent

export const getGtmProductClickEvent = (
  product: ListedProductFragment | SimpleProductFragment, // information about the product clicked by the user
  gtmProductListName: GtmProductListNameType, // name of the list from which the product was clicked
  listIndex: number, // index of the product within the list
  domainUrl: string // URL of the current domain
): GtmProductClickEventType => {
  // function body not included in this code block
};

getGtmProductDetailViewEvent

export const getGtmProductDetailViewEvent = (
    product: ProductDetailFragment | MainVariantDetailFragment, // information about the product displayed on on the product detail page
    currencyCode: string; // the code of the currency used on the domain
    domainUrl: string, // URL of the current domain
): GtmProductDetailViewEventType => {
    // function body not included in this code block
}

getGtmAutocompleteResultsViewEvent

export const getGtmAutocompleteResultsViewEvent = (
  searchResult: AutocompleteSearchQuery, // object with all autocomplete search results
  keyword: string // keyword for which the results were returned
): GtmAutocompleteResultsViewEventType => {
  // function body not included in this code block
};

getGtmAutocompleteResultClickEvent

export const getGtmAutocompleteResultClickEvent = (
  keyword: string, // keyword for which the results were returned
  section: GtmSectionType, // type of the section of the autocomplete results on which the user clicked
  itemName: string // name of the autocomplete search results item clicked by the user
): GtmAutocompleteResultClickEventType => {
  // function body not included in this code block
};

useGtmStaticPageViewEvent

export const useGtmStaticPageViewEvent = (
  pageType: GtmPageType, // type of the page viewed by the user
  breadcrumbs?: BreadcrumbFragment[] // breadcrumbs for the viewed page, if available
): GtmPageViewEventType => {
  // function body not included in this code block
};

useGtmFriendlyPageViewEvent

export const useGtmFriendlyPageViewEvent = (
  friendlyUrlPageData: FriendlyUrlPageType | null | undefined // data for the friendly URL page
): GtmPageViewEventType => {
  // function body not included in this code block
};

getGtmPageViewEvent

export const getGtmPageViewEvent = (
  pageInfo: GtmPageInfoType, // information about the viewed page
  gtmCartInfo: GtmCartInfoType | null, // the cart of the current user in the shape of GTM cart information, if available
  isCartLoaded: boolean, // boolean pointer saying if the cart is loaded
  user: CurrentCustomerType | null | undefined, // information about the current user
  userContactInformation: ContactInformation, // contact information filled by the user during order
  domainConfig: DomainConfigType // config for the current domain
): GtmPageViewEventType => {
  // function body not included in this code block
};

getGtmChangeCartItemEvent

export const getGtmChangeCartItemEvent = (
    event: GtmEventType.add_to_cart | GtmEventType.remove_from_cart, // type of the event saying if we are removing or adding items to cart
    cartItem: CartItemFragment, // removed (or added) cart item
    listIndex: number | undefined, // list index from which the item was removed/added, it can be index within cart (for removing) or index within any other list (for adding)
    quantity: number, // how much was removed/added, absolute value of the delta of the previous and current quantity
    currencyCode: string; // the code of the currency used on the domain
    eventValueWithoutVat: number, // value of the event without VAT, calculated as product price without VAT * quantity
    eventValueWithVat: number, // value of the event with VAT, calculated as product price with VAT * quantity
    gtmProductListName: GtmProductListNameType, // name of the list from which the product was removed/added
    domainUrl: string, // URL of the current domain
    gtmCartInfo?: GtmCartInfoType | null, // the cart of the current user in the shape of GTM cart information, if available
): GtmChangeCartItemEventType => {
    // function body not included in this code block
}

getGtmPaymentChangeEvent

export const getGtmPaymentChangeEvent = (
  gtmCartInfo: GtmCartInfoType, // the cart of the current user in the shape of GTM cart information, if available
  updatedPayment: SimplePaymentFragment // payment method newly updated by the user
): GtmPaymentChangeEventType => {
  // function body not included in this code block
};

getGtmTransportChangeEvent

export const getGtmTransportChangeEvent = (
  gtmCartInfo: GtmCartInfoType, // the cart of the current user in the shape of GTM cart information, if available
  updatedTransport: TransportWithAvailablePaymentsFragment, // transport method newly updated by the user
  updatedPickupPlace: ListedStoreFragment | null, // pickup place method newly updated by the user, if available
  paymentName: string | undefined // name of the selected payment method
): GtmTransportChangeEventType => {
  // function body not included in this code block
};

getGtmProductListViewEvent

export const getGtmProductListViewEvent = (
  products: ListedProductFragment[], // products contained in the viewed list
  gtmProductListName: GtmProductListNameType, // name of the viewed list
  currentPage: number, // current page of the viewed list
  pageSize: number, // page size of the viewed list
  domainUrl: string // URL of the current domain
): GtmProductListViewEventType => {
  // function body not included in this code block
};

getGtmShowMessageEvent

export const getGtmShowMessageEvent = (
  type: GtmMessageType, // type of the message shown to the user (e.g. error, information)
  message: string, // content of the message shown to the user
  detail: GtmMessageDetailType | string, // any additional information about the message shown to the user, can be of a predefined type GtmMessageDetailType or any arbitrary string value
  origin?: GtmMessageOriginType // origin of the message, saying which part of the website triggered it
): GtmShowMessageEventType => {
  // function body not included in this code block
};

getGtmConsentUpdateEvent

export const getGtmConsentUpdateEvent = (
  updatedGtmConsentInfo: GtmConsentInfoType // newly updated consents given by the user
): GtmConsentUpdateEventType => {
  // function body not included in this code block
};