UNPKG

@shopify/hydrogen-react

Version:

React components, hooks, and utilities for creating custom Shopify storefronts

235 lines (234 loc) • 7.75 kB
"use strict"; Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" }); const analyticsConstants = require("./analytics-constants.js"); const analyticsUtils = require("./analytics-utils.js"); const cookiesUtils = require("./cookies-utils.js"); const _package = require("./package.json.js"); const SCHEMA_ID = "custom_storefront_customer_tracking/1.2"; const PAGE_RENDERED_EVENT_NAME = "page_rendered"; const COLLECTION_PAGE_RENDERED_EVENT_NAME = "collection_page_rendered"; const PRODUCT_PAGE_RENDERED_EVENT_NAME = "product_page_rendered"; const PRODUCT_ADDED_TO_CART_EVENT_NAME = "product_added_to_cart"; const SEARCH_SUBMITTED_EVENT_NAME = "search_submitted"; function prepareAdditionalPayload(payload) { return { canonical_url: payload.canonicalUrl || payload.url, customer_id: parseInt(analyticsUtils.parseGid(payload.customerId).id || "0") }; } function pageView(payload) { const pageViewPayload = payload; const additionalPayload = prepareAdditionalPayload(pageViewPayload); const pageType = pageViewPayload.pageType; const pageViewEvents = []; pageViewEvents.push( analyticsUtils.schemaWrapper( SCHEMA_ID, analyticsUtils.addDataIf( { event_name: PAGE_RENDERED_EVENT_NAME, ...additionalPayload }, formatPayload(pageViewPayload) ) ) ); switch (pageType) { case analyticsConstants.AnalyticsPageType.collection: pageViewEvents.push( analyticsUtils.schemaWrapper( SCHEMA_ID, analyticsUtils.addDataIf( { event_name: COLLECTION_PAGE_RENDERED_EVENT_NAME, ...additionalPayload, collection_name: pageViewPayload.collectionHandle, collection_id: parseInt( analyticsUtils.parseGid(pageViewPayload.collectionId).id ) }, formatPayload(pageViewPayload) ) ) ); break; case analyticsConstants.AnalyticsPageType.product: pageViewEvents.push( analyticsUtils.schemaWrapper( SCHEMA_ID, analyticsUtils.addDataIf( { event_name: PRODUCT_PAGE_RENDERED_EVENT_NAME, ...additionalPayload, products: formatProductPayload(pageViewPayload.products), total_value: pageViewPayload.totalValue }, formatPayload(pageViewPayload) ) ) ); break; case analyticsConstants.AnalyticsPageType.search: pageViewEvents.push( analyticsUtils.schemaWrapper( SCHEMA_ID, analyticsUtils.addDataIf( { event_name: SEARCH_SUBMITTED_EVENT_NAME, ...additionalPayload, search_string: pageViewPayload.searchString }, formatPayload(pageViewPayload) ) ) ); break; } return pageViewEvents; } function pageView2(payload) { const pageViewPayload = payload; const additionalPayload = prepareAdditionalPayload(pageViewPayload); return [ analyticsUtils.schemaWrapper( SCHEMA_ID, analyticsUtils.addDataIf( { event_name: PAGE_RENDERED_EVENT_NAME, ...additionalPayload }, formatPayload(pageViewPayload) ) ) ]; } function collectionView(payload) { const pageViewPayload = payload; const additionalPayload = prepareAdditionalPayload(pageViewPayload); return [ analyticsUtils.schemaWrapper( SCHEMA_ID, analyticsUtils.addDataIf( { event_name: COLLECTION_PAGE_RENDERED_EVENT_NAME, ...additionalPayload, collection_name: pageViewPayload.collectionHandle, collection_id: parseInt(analyticsUtils.parseGid(pageViewPayload.collectionId).id) }, formatPayload(pageViewPayload) ) ) ]; } function productView(payload) { const pageViewPayload = payload; const additionalPayload = prepareAdditionalPayload(pageViewPayload); return [ analyticsUtils.schemaWrapper( SCHEMA_ID, analyticsUtils.addDataIf( { event_name: PRODUCT_PAGE_RENDERED_EVENT_NAME, ...additionalPayload, products: formatProductPayload(pageViewPayload.products), total_value: pageViewPayload.totalValue }, formatPayload(pageViewPayload) ) ) ]; } function searchView(payload) { const pageViewPayload = payload; const additionalPayload = prepareAdditionalPayload(pageViewPayload); return [ analyticsUtils.schemaWrapper( SCHEMA_ID, analyticsUtils.addDataIf( { event_name: SEARCH_SUBMITTED_EVENT_NAME, ...additionalPayload, search_string: pageViewPayload.searchString }, formatPayload(pageViewPayload) ) ) ]; } function addToCart(payload) { const addToCartPayload = payload; const cartToken = analyticsUtils.parseGid(addToCartPayload.cartId); return [ analyticsUtils.schemaWrapper( SCHEMA_ID, analyticsUtils.addDataIf( { event_name: PRODUCT_ADDED_TO_CART_EVENT_NAME, customerId: addToCartPayload.customerId, cart_token: (cartToken == null ? void 0 : cartToken.id) ? `${cartToken.id}` : null, total_value: addToCartPayload.totalValue, products: formatProductPayload(addToCartPayload.products), customer_id: parseInt( analyticsUtils.parseGid(addToCartPayload.customerId).id || "0" ) }, formatPayload(addToCartPayload) ) ) ]; } function formatPayload(payload) { const payloadWithPrivacy = payload; return { source: payload.shopifySalesChannel || analyticsConstants.ShopifySalesChannel.headless, asset_version_id: payload.assetVersionId || _package.version, hydrogenSubchannelId: payload.storefrontId || payload.hydrogenSubchannelId || "0", is_persistent_cookie: payload.hasUserConsent, deprecated_visit_token: payload.visitToken, unique_token: payload.uniqueToken, event_time: Date.now(), event_id: cookiesUtils.buildUUID(), event_source_url: payload.url, referrer: payload.referrer, user_agent: payload.userAgent, navigation_type: payload.navigationType, navigation_api: payload.navigationApi, shop_id: parseInt(analyticsUtils.parseGid(payload.shopId).id), currency: payload.currency, ccpa_enforced: payloadWithPrivacy.ccpaEnforced || false, gdpr_enforced: payloadWithPrivacy.gdprEnforced || false, gdpr_enforced_as_string: payloadWithPrivacy.gdprEnforced ? "true" : "false", analytics_allowed: payload.analyticsAllowed || false, marketing_allowed: payload.marketingAllowed || false, sale_of_data_allowed: payload.saleOfDataAllowed || false }; } function formatProductPayload(products) { return products ? products.map((p) => { const product = analyticsUtils.addDataIf( { variant_gid: p.variantGid, category: p.category, sku: p.sku, product_id: parseInt(analyticsUtils.parseGid(p.productGid).id), variant_id: parseInt(analyticsUtils.parseGid(p.variantGid).id) }, { product_gid: p.productGid, name: p.name, variant: p.variantName || "", brand: p.brand, price: parseFloat(p.price), quantity: Number(p.quantity || 0) } ); return JSON.stringify(product); }) : []; } exports.addToCart = addToCart; exports.collectionView = collectionView; exports.pageView = pageView; exports.pageView2 = pageView2; exports.productView = productView; exports.searchView = searchView; //# sourceMappingURL=analytics-schema-custom-storefront-customer-tracking.js.map