UNPKG

@shopify/hydrogen-react

Version:

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

195 lines (194 loc) 7.05 kB
import type { CurrencyCode, LanguageCode, Product, ProductVariant } from './storefront-api-types.js'; import { AnalyticsEventName, ShopifySalesChannel } from './analytics-constants.js'; import { SHOPIFY_Y, SHOPIFY_S } from './cart-constants.js'; export type ClientBrowserParameters = { /** * Shopify unique user token: Value of `_shopify_y` cookie. * * Use `getClientBrowserParameters()` to collect this value. **/ uniqueToken: string; /** * Shopify session token: Value of `_shopify_s` cookie. * * Use `getClientBrowserParameters()` to collect this value. **/ visitToken: string; /** * Value of `window.location.href`. * * Use `getClientBrowserParameters()` to collect this value. **/ url: string; /** * Value of `window.location.pathname`. * * Use `getClientBrowserParameters()` to collect this value. **/ path: string; /** * Value of `window.location.search`. * * Use `getClientBrowserParameters()` to collect this value. **/ search: string; /** * Value of `window.document.referrer`. * * Use `getClientBrowserParameters()` to collect this value. **/ referrer: string; /** * Value of `document.title`. * * Use `getClientBrowserParameters()` to collect this value. **/ title: string; /** * Value of `navigator.userAgent`. * * Use `getClientBrowserParameters()` to collect this value. **/ userAgent: string; /** * Navigation type: `'navigate' | 'reload' | 'back_forward' | 'prerender' | 'unknown'`. * * Use `getClientBrowserParameters()` to collect this value. **/ navigationType: string; /** * Navigation api: `'PerformanceNavigationTiming' | 'performance.navigation'`. * * Use `getClientBrowserParameters()` to collect this value. **/ navigationApi: string; }; export type ShopifyAnalyticsProduct = { /** Product id in the form of `gid://shopify/Product/<id>`. */ productGid: Product['id']; /** Variant id in the form of `gid://shopify/ProductVariant/<id>`. */ variantGid?: ProductVariant['id']; /** Product name. */ name: Product['title']; /** Variant name. */ variantName?: ProductVariant['title']; /** Product brand or vendor. */ brand: Product['vendor']; /** Product category or type. */ category?: Product['productType']; /** Product price. */ price: ProductVariant['price']['amount']; /** Product sku. */ sku?: ProductVariant['sku']; /** Quantity of the product in this event. */ quantity?: number; }; type ShopifyAnalyticsBase = { /** If we have consent from buyer for data collection */ hasUserConsent: boolean; /** Shopify shop id in the form of `gid://shopify/Shop/<id>`. */ shopId: string; /** Currency code. */ currency: CurrencyCode; /** Shopify storefront id generated by Hydrogen sales channel. The value of env.PUBLIC_STOREFRONT_ID. */ storefrontId?: string; /** Alternative name for Shopify storefront id generated by Hydrogen sales channel. The value of env.PUBLIC_STOREFRONT_ID. */ hydrogenSubchannelId?: string; /** Language displayed to buyer. */ acceptedLanguage?: LanguageCode; /** Shopify sales channel. */ shopifySalesChannel?: ShopifySalesChannels; /** NPM package version of either hydrogen or hydrogen-react. Defaults to hydrogen-react package version.*/ assetVersionId?: string; /** Shopify customer id in the form of `gid://shopify/Customer/<id>`. */ customerId?: string; /** Total value of products. */ totalValue?: number; /** Product list. */ products?: ShopifyAnalyticsProduct[]; /** Result of `customerPrivacyApi.analyticsProcessingAllowed()` */ analyticsAllowed?: boolean; /** Result of `customerPrivacyApi.marketingAllowed()` */ marketingAllowed?: boolean; /** Result of `customerPrivacyApi.saleOfDataAllowed()` */ saleOfDataAllowed?: boolean; }; /** * @internal * Internal type that includes computed regulation-specific fields. * These fields are computed by Hydrogen and sent to analytics backend. */ type ShopifyAnalyticsBaseWithPrivacyFields = ShopifyAnalyticsBase & { ccpaEnforced?: boolean; gdprEnforced?: boolean; }; export type ShopifySalesChannels = keyof typeof ShopifySalesChannel; export type AnalyticsEventNames = keyof typeof AnalyticsEventName; export interface ShopifyPageViewPayload extends ShopifyAnalyticsBase, ClientBrowserParameters { /** Canonical url. */ canonicalUrl?: string; /** Shopify page type. */ pageType?: string; /** Shopify resource id in the form of `gid://shopify/<type>/<id>`. */ resourceId?: string; /** Shopify collection handle. */ collectionHandle?: string; /** Shopify collection id. */ collectionId?: string; /** Search term used on a search results page. */ searchString?: string; } /** * @internal * Internal payload type with privacy fields for analytics backend. */ export type ShopifyPageViewPayloadWithPrivacyFields = Omit<ShopifyPageViewPayload, keyof ShopifyAnalyticsBase> & ShopifyAnalyticsBaseWithPrivacyFields & ClientBrowserParameters; export type ShopifyPageView = { /** Use `AnalyticsEventName.PAGE_VIEW` constant. */ eventName: string; payload: ShopifyPageViewPayload; }; export interface ShopifyAddToCartPayload extends ShopifyAnalyticsBase, ClientBrowserParameters { /** Shopify cart id in the form of `gid://shopify/Cart/<id>`. */ cartId: string; } /** * @internal * Internal payload type with privacy fields for analytics backend. */ export type ShopifyAddToCartPayloadWithPrivacyFields = Omit<ShopifyAddToCartPayload, keyof ShopifyAnalyticsBase> & ShopifyAnalyticsBaseWithPrivacyFields & ClientBrowserParameters; export type ShopifyAddToCart = { /** Use `AnalyticsEventName.ADD_TO_CART` constant. */ eventName: string; payload: ShopifyAddToCartPayload; }; export type ShopifyMonorailPayload = { products?: string[]; [key: string]: unknown; }; export type ShopifyMonorailEvent = { schema_id: string; payload: ShopifyMonorailPayload; metadata: { event_created_at_ms: number; }; }; export type ShopifyAnalyticsPayload = ShopifyPageViewPayload | ShopifyAddToCartPayload; /** * @internal * Internal analytics payload type with privacy fields for analytics backend. */ export type ShopifyAnalyticsPayloadWithPrivacyFields = ShopifyPageViewPayloadWithPrivacyFields | ShopifyAddToCartPayloadWithPrivacyFields; export type ShopifyAnalytics = ShopifyPageView | ShopifyAddToCart; export type ShopifyCookies = { /** Shopify unique user token: Value of `_shopify_y` cookie. */ [SHOPIFY_Y]: string; /** Shopify session token: Value of `_shopify_s` cookie. */ [SHOPIFY_S]: string; }; export type ShopifyGid = Pick<URL, 'search' | 'searchParams' | 'hash'> & { id: string; resource: string | null; resourceId: string | null; }; export {};