From 82d1ae69e39d9205073fc9de8820353ad7f78eda Mon Sep 17 00:00:00 2001 From: Ben Life Date: Wed, 6 May 2026 13:04:56 -0400 Subject: [PATCH 1/2] expose entity prop --- .../src/components/analytics/Analytics.ts | 32 +++++++++++++++---- .../src/components/analytics/interfaces.ts | 6 ++++ 2 files changed, 32 insertions(+), 6 deletions(-) diff --git a/packages/pages-components/src/components/analytics/Analytics.ts b/packages/pages-components/src/components/analytics/Analytics.ts index 28d78038..3c5c6ba9 100644 --- a/packages/pages-components/src/components/analytics/Analytics.ts +++ b/packages/pages-components/src/components/analytics/Analytics.ts @@ -50,7 +50,7 @@ export class Analytics implements AnalyticsMethods { requireOptIn?: boolean, disableSessionTracking?: boolean, private productionDomains?: string[], - private enableDebugging: boolean = false + private enableDebugging: boolean = false, ) { this._optedIn = !requireOptIn; this._sessionTrackingEnabled = !disableSessionTracking; @@ -67,12 +67,17 @@ export class Analytics implements AnalyticsMethods { } // Don't fire analytics for non-production domains, unless debug enabled - if (!isProduction(...(this.productionDomains ?? [])) && !this.getDebugEnabled()) { + if ( + !isProduction(...(this.productionDomains ?? [])) && + !this.getDebugEnabled() + ) { console.warn("Yext Analytics disabled for non-production domains"); return; } - const region = getPartition(this.templateData.document.businessId) as Region; + const region = getPartition( + this.templateData.document.businessId, + ) as Region; const config: AnalyticsConfig = { authorizationType: "apiKey", @@ -97,7 +102,11 @@ export class Analytics implements AnalyticsMethods { } private canTrack(): boolean { - return getRuntime().name === "browser" && this._optedIn && !!this._analyticsEventService; + return ( + getRuntime().name === "browser" && + this._optedIn && + !!this._analyticsEventService + ); } /** {@inheritDoc AnalyticsMethods.identify} */ @@ -145,8 +154,17 @@ export class Analytics implements AnalyticsMethods { return Promise.resolve(); } - const { action, scope, eventName, currency, amount, destinationUrl, customTags, customValues } = - props; + const { + action, + scope, + eventName, + currency, + amount, + destinationUrl, + customTags, + customValues, + entity, + } = props; let value; if (amount) { @@ -166,6 +184,8 @@ export class Analytics implements AnalyticsMethods { destinationUrl: destinationUrl || undefined, customTags, customValues, + // only overwrite the default entity value when explicitly provided to track + ...(entity !== undefined && { entity }), }); } diff --git a/packages/pages-components/src/components/analytics/interfaces.ts b/packages/pages-components/src/components/analytics/interfaces.ts index bd94da6f..e099bcb2 100644 --- a/packages/pages-components/src/components/analytics/interfaces.ts +++ b/packages/pages-components/src/components/analytics/interfaces.ts @@ -10,6 +10,12 @@ export type TrackProps = { currency?: string; customTags?: Record; customValues?: Record; + /** + * The Yext entity to which the event corresponds. If passed as a string, the value is + * the mutable, customer-settable entity ID for the entity associated with the event. + * If passed as a number, it is the immutable internal entity ID (UID) set by the system. + */ + entity?: string | number; }; /** From f4f743117f615b3f382e6b6a2aee2b840ec474ba Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 6 May 2026 17:06:17 +0000 Subject: [PATCH 2/2] Automated linting/formatter update --- .../src/components/analytics/Analytics.ts | 17 ++++------------- 1 file changed, 4 insertions(+), 13 deletions(-) diff --git a/packages/pages-components/src/components/analytics/Analytics.ts b/packages/pages-components/src/components/analytics/Analytics.ts index 3c5c6ba9..3b3f47a8 100644 --- a/packages/pages-components/src/components/analytics/Analytics.ts +++ b/packages/pages-components/src/components/analytics/Analytics.ts @@ -50,7 +50,7 @@ export class Analytics implements AnalyticsMethods { requireOptIn?: boolean, disableSessionTracking?: boolean, private productionDomains?: string[], - private enableDebugging: boolean = false, + private enableDebugging: boolean = false ) { this._optedIn = !requireOptIn; this._sessionTrackingEnabled = !disableSessionTracking; @@ -67,17 +67,12 @@ export class Analytics implements AnalyticsMethods { } // Don't fire analytics for non-production domains, unless debug enabled - if ( - !isProduction(...(this.productionDomains ?? [])) && - !this.getDebugEnabled() - ) { + if (!isProduction(...(this.productionDomains ?? [])) && !this.getDebugEnabled()) { console.warn("Yext Analytics disabled for non-production domains"); return; } - const region = getPartition( - this.templateData.document.businessId, - ) as Region; + const region = getPartition(this.templateData.document.businessId) as Region; const config: AnalyticsConfig = { authorizationType: "apiKey", @@ -102,11 +97,7 @@ export class Analytics implements AnalyticsMethods { } private canTrack(): boolean { - return ( - getRuntime().name === "browser" && - this._optedIn && - !!this._analyticsEventService - ); + return getRuntime().name === "browser" && this._optedIn && !!this._analyticsEventService; } /** {@inheritDoc AnalyticsMethods.identify} */