@shopify/hydrogen-react
Version:
React components, hooks, and utilities for creating custom Shopify storefronts
235 lines (234 loc) • 7.75 kB
JavaScript
"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