@superbright/indexeddb-orm 1.0.42 → 1.0.43
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/features/analytics/analytics.cjs +1 -1
- package/dist/features/analytics/analytics.cjs.map +1 -1
- package/dist/features/analytics/analytics.d.ts +46 -2
- package/dist/features/analytics/analytics.mjs +197 -189
- package/dist/features/analytics/analytics.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const d=require("../../utils/casing.cjs"),N=require("../../utils/collections.cjs"),q=require("./AnalyticsProvider.cjs"),e=require("../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/types.cjs"),U=["location","budget","size","other"],S=["cost_low_to_high","cost_high_to_low","newest","relevance"],k=["Skip","Continue","Back"],l=e.object({propertyId:e.string().min(1,"propertyId is required"),propertySlug:e.string().min(1,"propertySlug is required"),propertyName:e.string().min(1,"propertyName is required")}),m=l.extend({propertyName:e.string().min(1,"propertyName is required")}),w=m.extend({totalUnitsAvailable:e.number().int().nonnegative(),resultsUnitCount:e.number().int().nonnegative(),unitCountDate:e.string().optional()}),E=m.extend({totalUnitsAvailable:e.number().int().nonnegative(),resultsUnitCount:e.number().int().nonnegative(),unitCountDate:e.string().optional()}),g=m.extend({totalUnitsAvailable:e.number().int().nonnegative(),resultsUnitCount:e.number().int().nonnegative(),unitCountDate:e.string().optional(),lifestylePreferences:e.unknown().optional()}),p=m.extend({funnelStep:e.number().int().nonnegative(),profileQuestion:e.string().min(1,"profileQuestion is required"),interactedElement:e.enum(k),questionEnum:e.string().optional()}),F=p.extend({selectedAnswersEnumArray:e.any().transform(o=>N.normalizeToStringArray(o)).refine(o=>Array.isArray(o),{message:"selectedAnswersEnumArray must resolve to an array"})});l.extend({unitId:e.string().min(1,"unitId is required"),unitName:e.string().min(1,"unitName is required"),unitSlug:e.string().min(1,"unitSlug is required")});const r=m.extend({unitId:e.string().min(1,"unitId is required"),unitName:e.string().min(1,"unitName is required"),unitSlug:e.string().min(1,"unitSlug is required")}),b=r.extend({buttonName:e.string().min(1,"buttonName is required"),formName:e.string().min(1,"formName is required"),styleId:e.string().min(1,"styleId is required"),styleName:e.string().min(1,"styleName is required"),unitBedrooms:e.number().int().nonnegative(),favoritedUnit:e.boolean()}),c=r.extend({roomName:e.string().min(1,"roomName is required"),unitBedrooms:e.number().int().nonnegative(),styleId:e.string().min(1,"styleId is required"),styleName:e.string().min(1,"styleName is required"),favoritedUnit:e.boolean()}),P=r.extend({roomName:e.string().min(1,"roomName is required"),unitBedrooms:e.number().int().nonnegative(),styleId:e.string().min(1,"styleId is required"),styleName:e.string().min(1,"styleName is required"),furnitureId:e.string().min(1,"furnitureId is required"),furnitureName:e.string().min(1,"furnitureName is required"),type:e.enum(["click","hover_on","hover_off"]),brandName:e.string().min(1,"brandName is required"),category:e.string().min(1,"category is required")}),A=r.extend({roomName:e.string().min(1,"roomName is required"),unitBedrooms:e.number().int().nonnegative(),styleId:e.string().min(1,"styleId is required"),styleName:e.string().min(1,"styleName is required"),furnitureId:e.string().min(1,"furnitureId is required"),furnitureName:e.string().min(1,"furnitureName is required"),link:e.string().min(1,"link is required"),type:e.string().min(1,"type is required"),favoritedUnit:e.boolean(),brandName:e.string().min(1,"brandName is required"),category:e.string().min(1,"category is required")}),O=r.extend({roomName:e.string().min(1,"roomName is required"),unitBedrooms:e.number().int().nonnegative(),styleId:e.string().min(1,"styleId is required"),styleName:e.string().min(1,"styleName is required"),furnitureId:e.string().min(1,"furnitureId is required"),furnitureName:e.string().min(1,"furnitureName is required"),brandName:e.string().min(1,"brandName is required"),category:e.string().min(1,"category is required")}),V=r.extend({roomName:e.string().min(1,"roomName is required"),unitBedrooms:e.number().int().nonnegative(),styleId:e.string().min(1,"styleId is required"),styleName:e.string().min(1,"styleName is required"),furnitureId:e.string().min(1,"furnitureId is required"),furnitureName:e.string().min(1,"furnitureName is required"),brandName:e.string().min(1,"brandName is required"),category:e.string().min(1,"category is required")}),M=r.extend({method:e.enum(["Prev","Next"]),roomName:e.string().min(1,"roomName is required"),unitBedrooms:e.number().int().nonnegative(),styleId:e.string().min(1,"styleId is required"),styleName:e.string().min(1,"styleName is required"),furnitureId:e.string().min(1,"furnitureId is required"),furnitureName:e.string().min(1,"furnitureName is required"),brandName:e.string().min(1,"brandName is required"),category:e.string().min(1,"category is required")}),I=r.extend({roomName:e.string().min(1,"roomName is required"),unitBedrooms:e.number().int().nonnegative(),styleId:e.string().min(1,"styleId is required"),styleName:e.string().min(1,"styleName is required"),method:e.enum(["Navigation","Map"])}),B=I.extend({timeInRoom:e.number().int().nonnegative()}),Q=r.extend({roomName:e.string().min(1,"roomName is required"),unitBedrooms:e.number().int().nonnegative(),styleId:e.string().min(1,"styleId is required"),styleName:e.string().min(1,"styleName is required"),method:e.enum(["On Click Play"]),videoCurrentTime:e.number().int().nonnegative(),videoDuration:e.number().int().nonnegative(),videoPercent:e.number().int().nonnegative(),videoFilename:e.string().min(1,"videoFilename is required")}),_=r.extend({utmSource:e.string().min(1,"utm_source is required"),utmMedium:e.string().min(1,"utm_medium is required"),utmName:e.string().min(1,"utm_name is required"),unitBedrooms:e.number().int().nonnegative(),styleId:e.string().min(1,"styleId is required"),styleName:e.string().min(1,"styleName is required"),favoritedUnit:e.boolean()}),h=r.extend({fullUrl:e.string().min(1,"fullUrl is required"),datestamp:e.string().min(1,"datestamp is required")}),D=h.extend({pageName:e.string().min(1,"pageName is required")}),R=h.extend({roomName:e.string().min(1,"roomName is required")}),L=r.extend({unitBedrooms:e.number().int().nonnegative()}),z=r.extend({utmSource:e.string().min(1,"utm_source is required"),utmMedium:e.string().min(1,"utm_medium is required"),utmName:e.string().min(1,"utm_name is required")}),y=r.extend({toastCopy:e.string().min(1,"toastCopy is required")}),K=r.extend({unitBedrooms:e.number().int().nonnegative(),styleId:e.string().min(1,"styleId is required"),styleName:e.string().min(1,"styleName is required")}),j=m,W=m.extend({name:e.string().min(1,"name is required")}),G=e.object({name:e.string().min(1,"name is required"),properties:e.object({propertyContextSchema:l,buttonName:e.string().min(1,"buttonName is required"),formName:e.string().min(1,"formName is required"),pageName:e.string().min(1,"pageName is required"),fieldName:e.string().min(1,"fieldName is required")})}),H=e.object({name:e.string().min(1,"name is required"),properties:e.object({propertyContextSchema:l,buttonName:e.string().min(1,"buttonName is required"),formName:e.string().min(1,"formName is required"),pageName:e.string().min(1,"pageName is required"),bedrooms:e.array(e.union([e.string(),e.number()])).optional(),price:e.number().nullable().optional()})}),J=m.extend({bedrooms:e.array(e.number()).optional(),price_min:e.number().optional(),price_max:e.number().optional(),highlights:e.array(e.string()).optional(),page_name:e.string().optional()}),$=r.extend({favoritedUnit:e.boolean(),unitIndex:e.number().int().nonnegative()}),C=e.any().transform(o=>N.normalizeToStringArray(o)).refine(o=>Array.isArray(o),{message:"Selection must resolve to an array"}),X=m.extend({filterIndex:e.number().int().nonnegative(),filterLabel:e.string().min(1,"filterLabel is required"),selectedFiltersEnum:C,filterName:e.string().optional()}),f=m.extend({filterIndex:e.number().int().nonnegative(),filterLabel:e.string().min(1,"filterLabel is required"),selectedFiltersEnum:C}),v=l.extend({sortIndex:e.number().int().nonnegative(),sortEnum:e.enum(S)}),Y=m.extend({sortIndex:e.number().int().nonnegative(),sortEnum:e.enum(S),resultsUnitCount:e.number().int().nonnegative(),unitCountDate:e.string().optional()}),Z=l.extend({fullQuestionnaireSchemaJson:e.unknown().optional(),resultsJson:e.object({type:e.string().optional(),total:e.number().int().nonnegative().optional(),units:e.array(e.object({unitId:e.string().min(1,"unitId is required"),unitName:e.string().optional()})).optional()}).optional()}),ee=r.extend({favoritedUnit:e.boolean(),unitIndex:e.number().int().nonnegative()}),ne=r.extend({favoritedUnit:e.boolean(),unitIndex:e.number().int().nonnegative()}),te=m.extend({unitId:e.string().min(1,"unitId is required"),unitName:e.string().min(1,"unitName is required"),unitSlug:e.string().min(1,"unitSlug is required"),resultsUnitCount:e.number().int().nonnegative(),unitCountDate:e.string().optional(),unitIndex:e.number().int().nonnegative()});function x(){const o=q.useAnalytics();return(s,u)=>{const n=u==null?u:d.convertKeysToSnakeCase(u);o.track(s,n)}}const ie=(o,s,u,n)=>i=>{const a=d.convertKeysToCamelCase(i),t=s.safeParse(a);if(!t.success){n!=null&&n.isDev&&console.warn(`[Analytics] Invalid payload for "${o}":`,t.error.issues);return}u(o,i)};function T(o,s=!1){const u=(i,a)=>{const t=d.convertKeysToSnakeCase(a);o(i,t)},n=(i,a)=>ie(i,a,u,{isDev:s});return{trackViewAllUnits:i=>{const a=d.convertKeysToCamelCase(i),t=w.safeParse({unitCountDate:new Date().toISOString(),...a});if(!t.success){s&&console.warn('[Analytics] Invalid payload for "View All Units":',t.error.flatten());return}u("View All Units",t.data)},trackQuestionnaireSkip:i=>{const a=d.convertKeysToCamelCase(i),t=p.safeParse({...a,interactedElement:"Skip"});if(!t.success){s&&console.warn('[Analytics] Invalid payload for "Questionnaire Navigated" (Skip):',t.error.flatten());return}u("Questionnaire Navigated",t.data)},trackQuestionnaireContinue:i=>{const a=d.convertKeysToCamelCase(i),t=F.safeParse({...a,interactedElement:"Continue"});if(!t.success){s&&console.warn('[Analytics] Invalid payload for "Questionnaire Navigated" (Continue):',t.error.flatten());return}u("Questionnaire Navigated",t.data)},trackQuestionnaireBack:i=>{const a=d.convertKeysToCamelCase(i),t=p.safeParse({...a,interactedElement:"Back"});if(!t.success){s&&console.warn('[Analytics] Invalid payload for "Questionnaire Navigated" (Back):',t.error.flatten());return}u("Questionnaire Navigated",t.data)},trackClickUnit:n("Unit Card Clicked",ee),trackHoverUnit:n("Unit Hovered",$),trackLoadMore:i=>{const a=d.convertKeysToCamelCase(i),t=E.safeParse({unitCountDate:new Date().toISOString(),...a});if(!t.success){s&&console.warn('[Analytics] Invalid payload for "More Units Loaded":',t.error.flatten());return}u("More Units Loaded",t.data)},trackFilterOpened:n("Filter Opened",X),trackFilterCanceled:n("Filter Cleared",f),trackFilterApplied:n("Filter Applied",f),trackOpenSort:i=>{const a=d.convertKeysToCamelCase(i),t=Y.safeParse({unitCountDate:new Date().toISOString(),...a});if(!t.success){s&&console.warn('[Analytics] Invalid payload for "Sort Opened":',t.error.flatten());return}u("Sort Opened",t.data)},trackSelectSort:n("Sort Applied",v),trackCancelSort:n("Sort Canceled",v),trackClickUnitFavorites:n("Unit Favorited",ne),trackUnitUnfavorited:n("Unit Unfavorited",te),trackQuestionnaireResult:n("Questionnaire Submitted",Z),trackScheduleTourFormInteracted:n("Schedule Tour Form Interacted",g),trackScheduleTourFormSubmitted:n("Schedule Tour Form Submitted",g),trackScheduleTourUrlClicked:n("Schedule Tour URL Clicked",g),trackGetInTouchFormOpened:n("Form Opened",b),trackGetInTouchFormSubmitted:n("Form Submitted",b),trackStyleDrawerOpened:n("Style Menu Opened",c),trackStyleDrawerChanged:n("Style Changed",c),trackOpeningStyleImpression:n("Opening Style Modal Impression",c),trackOpeningStyleSlected:n("Opening Style Selected",c),trackFurnitureViewed:n("Furniture Viewed",P),trackFurnitureExternalUrlClicked:n("Purchase Link Clicked",A),trackFurnitureSaved:n("Furniture Saved",O),trackFurnitureModalOpened:n("Furniture Modal Opened",V),trackFurnitureCarouselToggled:n("Furniture Carousel Toggled",M),trackRoomEntered:n("Room Entered",I),trackRoomLeft:n("Room Left",B),trackVideoStarted:n("Video Started",Q),trackEmailRedirect:n("Email Tracked",_),trackToastImpression:n("Toast Impression",y),trackToastClicked:n("Toast Clicked",y),trackToastClosed:n("Toast Closed",y),trackContentModalOpened:n("Content Modal Opened",K),trackBuildingDetailsModalOpened:n("Building Details Modal",j),trackSubscriptionImpression:n("Subscription Impression",W),trackSubscriptionInteracted:n("Subscription Interacted",G),trackSubscriptionSubmitted:n("Subscription Submitted",H),trackSubscriptionRemoved:n("Subscription Removed",J),trackWebPageViewed:n("Page Viewed",D),trackWebPageRoomViewed:n("Page Viewed",R),trackEmbedPageViewed:n("Embed Impression",L),trackEmailClick:i=>n(`Email Interaction - ${i.event_name}`,z)}}function re(){const{isDev:o}=q.useAnalytics(),s=x();return T(s,o)}exports.QuestionEnumValues=U;exports.QuestionnaireInteractionValues=k;exports.SortEnumValues=S;exports.buildTrackingEvents=T;exports.useTrackEvent=x;exports.useTrackingEvents=re;
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const d=require("../../utils/casing.cjs"),q=require("../../utils/collections.cjs"),k=require("./AnalyticsProvider.cjs"),e=require("../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/types.cjs"),E=["location","budget","size","other"],f=["cost_low_to_high","cost_high_to_low","newest","relevance"],I=["Skip","Continue","Back"],c=e.object({propertyId:e.string().min(1,"propertyId is required"),propertySlug:e.string().min(1,"propertySlug is required"),propertyName:e.string().min(1,"propertyName is required")}),m=c.extend({propertyName:e.string().min(1,"propertyName is required")}),w=m.extend({totalUnitsAvailable:e.number().int().nonnegative(),resultsUnitCount:e.number().int().nonnegative(),unitCountDate:e.string().optional()}),F=m.extend({totalUnitsAvailable:e.number().int().nonnegative(),resultsUnitCount:e.number().int().nonnegative(),unitCountDate:e.string().optional()}),g=m.extend({totalUnitsAvailable:e.number().int().nonnegative(),resultsUnitCount:e.number().int().nonnegative(),unitCountDate:e.string().optional(),lifestylePreferences:e.unknown().optional()}),S=m.extend({funnelStep:e.number().int().nonnegative(),profileQuestion:e.string().min(1,"profileQuestion is required"),interactedElement:e.enum(I),questionEnum:e.string().optional()}),P=S.extend({selectedAnswersEnumArray:e.any().transform(o=>q.normalizeToStringArray(o)).refine(o=>Array.isArray(o),{message:"selectedAnswersEnumArray must resolve to an array"})});c.extend({unitId:e.string().min(1,"unitId is required"),unitName:e.string().min(1,"unitName is required"),unitSlug:e.string().min(1,"unitSlug is required")});const r=m.extend({unitId:e.string().min(1,"unitId is required"),unitName:e.string().min(1,"unitName is required"),unitSlug:e.string().min(1,"unitSlug is required")}),b=r.extend({buttonName:e.string().min(1,"buttonName is required"),formName:e.string().min(1,"formName is required"),styleId:e.string().min(1,"styleId is required"),styleName:e.string().min(1,"styleName is required"),unitBedrooms:e.number().int().nonnegative(),favoritedUnit:e.boolean()}),l=r.extend({roomName:e.string().min(1,"roomName is required"),unitBedrooms:e.number().int().nonnegative(),styleId:e.string().min(1,"styleId is required"),styleName:e.string().min(1,"styleName is required"),favoritedUnit:e.boolean()}),A=r.extend({roomName:e.string().min(1,"roomName is required"),unitBedrooms:e.number().int().nonnegative(),styleId:e.string().min(1,"styleId is required"),styleName:e.string().min(1,"styleName is required"),furnitureId:e.string().min(1,"furnitureId is required"),furnitureName:e.string().min(1,"furnitureName is required"),type:e.enum(["click","hover_on","hover_off"]),brandName:e.string().min(1,"brandName is required"),category:e.string().min(1,"category is required")}),O=r.extend({roomName:e.string().min(1,"roomName is required"),unitBedrooms:e.number().int().nonnegative(),styleId:e.string().min(1,"styleId is required"),styleName:e.string().min(1,"styleName is required"),furnitureId:e.string().min(1,"furnitureId is required"),furnitureName:e.string().min(1,"furnitureName is required"),link:e.string().min(1,"link is required"),type:e.string().min(1,"type is required"),favoritedUnit:e.boolean(),brandName:e.string().min(1,"brandName is required"),category:e.string().min(1,"category is required")}),V=r.extend({roomName:e.string().min(1,"roomName is required"),unitBedrooms:e.number().int().nonnegative(),styleId:e.string().min(1,"styleId is required"),styleName:e.string().min(1,"styleName is required"),furnitureId:e.string().min(1,"furnitureId is required"),furnitureName:e.string().min(1,"furnitureName is required"),brandName:e.string().min(1,"brandName is required"),category:e.string().min(1,"category is required")}),M=r.extend({roomName:e.string().min(1,"roomName is required"),unitBedrooms:e.number().int().nonnegative(),styleId:e.string().min(1,"styleId is required"),styleName:e.string().min(1,"styleName is required"),furnitureId:e.string().min(1,"furnitureId is required"),furnitureName:e.string().min(1,"furnitureName is required"),brandName:e.string().min(1,"brandName is required"),category:e.string().min(1,"category is required")}),B=r.extend({method:e.enum(["Prev","Next"]),roomName:e.string().min(1,"roomName is required"),unitBedrooms:e.number().int().nonnegative(),styleId:e.string().min(1,"styleId is required"),styleName:e.string().min(1,"styleName is required"),furnitureId:e.string().min(1,"furnitureId is required"),furnitureName:e.string().min(1,"furnitureName is required"),brandName:e.string().min(1,"brandName is required"),category:e.string().min(1,"category is required")}),h=r.extend({roomName:e.string().min(1,"roomName is required"),unitBedrooms:e.number().int().nonnegative(),styleId:e.string().min(1,"styleId is required"),styleName:e.string().min(1,"styleName is required"),method:e.enum(["Navigation","Map"])}),Q=h.extend({timeInRoom:e.number().int().nonnegative()}),_=r.extend({roomName:e.string().min(1,"roomName is required"),unitBedrooms:e.number().int().nonnegative(),styleId:e.string().min(1,"styleId is required"),styleName:e.string().min(1,"styleName is required"),method:e.enum(["On Click Play"]),videoCurrentTime:e.number().int().nonnegative(),videoDuration:e.number().int().nonnegative(),videoPercent:e.number().int().nonnegative(),videoFilename:e.string().min(1,"videoFilename is required")}),D=r.extend({utmSource:e.string().min(1,"utm_source is required"),utmMedium:e.string().min(1,"utm_medium is required"),utmName:e.string().min(1,"utm_name is required"),unitBedrooms:e.number().int().nonnegative(),styleId:e.string().min(1,"styleId is required"),styleName:e.string().min(1,"styleName is required"),favoritedUnit:e.boolean()}),C=r.extend({fullUrl:e.string().min(1,"fullUrl is required"),datestamp:e.string().min(1,"datestamp is required")}),R=C.extend({pageName:e.string().min(1,"pageName is required")}),L=C.extend({roomName:e.string().min(1,"roomName is required")}),z=r.extend({unitBedrooms:e.number().int().nonnegative()}),y=r.extend({utmSource:e.string().min(1,"utm_source is required"),utmMedium:e.string().min(1,"utm_medium is required"),utmName:e.string().min(1,"utm_name is required")}),p=r.extend({toastCopy:e.string().min(1,"toastCopy is required")}),K=r.extend({unitBedrooms:e.number().int().nonnegative(),styleId:e.string().min(1,"styleId is required"),styleName:e.string().min(1,"styleName is required")}),j=m,W=m.extend({name:e.string().min(1,"name is required")}),G=e.object({name:e.string().min(1,"name is required"),properties:e.object({propertyContextSchema:c,buttonName:e.string().min(1,"buttonName is required"),formName:e.string().min(1,"formName is required"),pageName:e.string().min(1,"pageName is required"),fieldName:e.string().min(1,"fieldName is required")})}),H=e.object({name:e.string().min(1,"name is required"),properties:e.object({propertyContextSchema:c,buttonName:e.string().min(1,"buttonName is required"),formName:e.string().min(1,"formName is required"),pageName:e.string().min(1,"pageName is required"),bedrooms:e.array(e.union([e.string(),e.number()])).optional(),price:e.number().nullable().optional()})}),J=m.extend({bedrooms:e.array(e.number()).optional(),price_min:e.number().optional(),price_max:e.number().optional(),highlights:e.array(e.string()).optional(),page_name:e.string().optional()}),$=r.extend({favoritedUnit:e.boolean(),unitIndex:e.number().int().nonnegative()}),x=e.any().transform(o=>q.normalizeToStringArray(o)).refine(o=>Array.isArray(o),{message:"Selection must resolve to an array"}),X=m.extend({filterIndex:e.number().int().nonnegative(),filterLabel:e.string().min(1,"filterLabel is required"),selectedFiltersEnum:x,filterName:e.string().optional()}),N=m.extend({filterIndex:e.number().int().nonnegative(),filterLabel:e.string().min(1,"filterLabel is required"),selectedFiltersEnum:x}),v=c.extend({sortIndex:e.number().int().nonnegative(),sortEnum:e.enum(f)}),Y=m.extend({sortIndex:e.number().int().nonnegative(),sortEnum:e.enum(f),resultsUnitCount:e.number().int().nonnegative(),unitCountDate:e.string().optional()}),Z=c.extend({fullQuestionnaireSchemaJson:e.unknown().optional(),resultsJson:e.object({type:e.string().optional(),total:e.number().int().nonnegative().optional(),units:e.array(e.object({unitId:e.string().min(1,"unitId is required"),unitName:e.string().optional()})).optional()}).optional()}),ee=r.extend({favoritedUnit:e.boolean(),unitIndex:e.number().int().nonnegative()}),ne=r.extend({favoritedUnit:e.boolean(),unitIndex:e.number().int().nonnegative()}),te=m.extend({unitId:e.string().min(1,"unitId is required"),unitName:e.string().min(1,"unitName is required"),unitSlug:e.string().min(1,"unitSlug is required"),resultsUnitCount:e.number().int().nonnegative(),unitCountDate:e.string().optional(),unitIndex:e.number().int().nonnegative()});function T(){const o=k.useAnalytics();return(s,u)=>{const n=u==null?u:d.convertKeysToSnakeCase(u);o.track(s,n)}}const ie=(o,s,u,n)=>i=>{const a=d.convertKeysToCamelCase(i),t=s.safeParse(a);if(!t.success){n!=null&&n.isDev&&console.warn(`[Analytics] Invalid payload for "${o}":`,t.error.issues);return}u(o,i)};function U(o,s=!1){const u=(i,a)=>{const t=d.convertKeysToSnakeCase(a);o(i,t)},n=(i,a)=>ie(i,a,u,{isDev:s});return{trackViewAllUnits:i=>{const a=d.convertKeysToCamelCase(i),t=w.safeParse({unitCountDate:new Date().toISOString(),...a});if(!t.success){s&&console.warn('[Analytics] Invalid payload for "View All Units":',t.error.flatten());return}u("View All Units",t.data)},trackQuestionnaireSkip:i=>{const a=d.convertKeysToCamelCase(i),t=S.safeParse({...a,interactedElement:"Skip"});if(!t.success){s&&console.warn('[Analytics] Invalid payload for "Questionnaire Navigated" (Skip):',t.error.flatten());return}u("Questionnaire Navigated",t.data)},trackQuestionnaireContinue:i=>{const a=d.convertKeysToCamelCase(i),t=P.safeParse({...a,interactedElement:"Continue"});if(!t.success){s&&console.warn('[Analytics] Invalid payload for "Questionnaire Navigated" (Continue):',t.error.flatten());return}u("Questionnaire Navigated",t.data)},trackQuestionnaireBack:i=>{const a=d.convertKeysToCamelCase(i),t=S.safeParse({...a,interactedElement:"Back"});if(!t.success){s&&console.warn('[Analytics] Invalid payload for "Questionnaire Navigated" (Back):',t.error.flatten());return}u("Questionnaire Navigated",t.data)},trackClickUnit:n("Unit Card Clicked",ee),trackHoverUnit:n("Unit Hovered",$),trackLoadMore:i=>{const a=d.convertKeysToCamelCase(i),t=F.safeParse({unitCountDate:new Date().toISOString(),...a});if(!t.success){s&&console.warn('[Analytics] Invalid payload for "More Units Loaded":',t.error.flatten());return}u("More Units Loaded",t.data)},trackFilterOpened:n("Filter Opened",X),trackFilterCanceled:n("Filter Cleared",N),trackFilterApplied:n("Filter Applied",N),trackOpenSort:i=>{const a=d.convertKeysToCamelCase(i),t=Y.safeParse({unitCountDate:new Date().toISOString(),...a});if(!t.success){s&&console.warn('[Analytics] Invalid payload for "Sort Opened":',t.error.flatten());return}u("Sort Opened",t.data)},trackSelectSort:n("Sort Applied",v),trackCancelSort:n("Sort Canceled",v),trackClickUnitFavorites:n("Unit Favorited",ne),trackUnitUnfavorited:n("Unit Unfavorited",te),trackQuestionnaireResult:n("Questionnaire Submitted",Z),trackScheduleTourFormInteracted:n("Schedule Tour Form Interacted",g),trackScheduleTourFormSubmitted:n("Schedule Tour Form Submitted",g),trackScheduleTourUrlClicked:n("Schedule Tour URL Clicked",g),trackGetInTouchFormOpened:n("Form Opened",b),trackGetInTouchFormSubmitted:n("Form Submitted",b),trackStyleDrawerOpened:n("Style Menu Opened",l),trackStyleDrawerChanged:n("Style Changed",l),trackOpeningStyleImpression:n("Opening Style Modal Impression",l),trackOpeningStyleSlected:n("Opening Style Selected",l),trackFurnitureViewed:n("Furniture Viewed",A),trackFurnitureExternalUrlClicked:n("Purchase Link Clicked",O),trackFurnitureSaved:n("Furniture Saved",V),trackFurnitureModalOpened:n("Furniture Modal Opened",M),trackFurnitureCarouselToggled:n("Furniture Carousel Toggled",B),trackRoomEntered:n("Room Entered",h),trackRoomLeft:n("Room Left",Q),trackVideoStarted:n("Video Started",_),trackEmailRedirect:n("Email Tracked",D),trackToastImpression:n("Toast Impression",p),trackToastClicked:n("Toast Clicked",p),trackToastClosed:n("Toast Closed",p),trackContentModalOpened:n("Content Modal Opened",K),trackBuildingDetailsModalOpened:n("Building Details Modal",j),trackSubscriptionImpression:n("Subscription Impression",W),trackSubscriptionInteracted:n("Subscription Interacted",G),trackSubscriptionSubmitted:n("Subscription Submitted",H),trackSubscriptionRemoved:n("Subscription Removed",J),trackWebPageViewed:n("Page Viewed",R),trackWebPageRoomViewed:n("Page Viewed",L),trackEmbedPageViewed:n("Embed Impression",z),trackEmailClickGeneric:i=>n(`Email Interaction - ${i.event_name}`,y),trackEmailClickConfirmation:()=>n("Notify Me Email Confirmation",y),trackEmailClickNotification:()=>n("Notify Me Email Notification",y)}}function re(){const{isDev:o}=k.useAnalytics(),s=T();return U(s,o)}exports.QuestionEnumValues=E;exports.QuestionnaireInteractionValues=I;exports.SortEnumValues=f;exports.buildTrackingEvents=U;exports.useTrackEvent=T;exports.useTrackingEvents=re;
|
|
2
2
|
//# sourceMappingURL=analytics.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analytics.cjs","sources":["../../../src/features/analytics/analytics.ts"],"sourcesContent":["import { z } from \"zod\";\n\nimport {\n convertKeysToCamelCase,\n convertKeysToSnakeCase,\n} from \"../../utils/casing\";\nimport { normalizeToStringArray } from \"../../utils/collections\";\nimport { useAnalytics } from \"./AnalyticsProvider\";\n\ntype AnalyticsPayload<Schema extends z.ZodTypeAny> = z.input<Schema>;\n\ntype AnalyticsPayloadWithout<\n Schema extends z.ZodTypeAny,\n Keys extends PropertyKey,\n> = Omit<AnalyticsPayload<Schema>, Keys>;\n\nexport const QuestionEnumValues = [\"location\", \"budget\", \"size\", \"other\"] as const;\nexport type QuestionEnum = (typeof QuestionEnumValues)[number];\nexport type FilterEnum = string;\nexport const SortEnumValues = [\n \"cost_low_to_high\",\n \"cost_high_to_low\",\n \"newest\",\n \"relevance\",\n] as const;\nexport type SortEnum = (typeof SortEnumValues)[number];\nexport const QuestionnaireInteractionValues = [\n \"Skip\",\n \"Continue\",\n \"Back\",\n] as const;\nexport type QuestionnaireInteraction =\n (typeof QuestionnaireInteractionValues)[number];\n\nconst propertyContextSchema = z.object({\n propertyId: z.string().min(1, \"propertyId is required\"),\n propertySlug: z.string().min(1, \"propertySlug is required\"),\n propertyName: z.string().min(1, \"propertyName is required\"),\n});\n\nconst propertyWithNameSchema = propertyContextSchema.extend({\n propertyName: z.string().min(1, \"propertyName is required\"),\n});\n\nconst viewAllUnitsSchema = propertyWithNameSchema.extend({\n totalUnitsAvailable: z.number().int().nonnegative(),\n resultsUnitCount: z.number().int().nonnegative(),\n unitCountDate: z.string().optional(),\n});\n\nconst loadMoreSchema = propertyWithNameSchema.extend({\n totalUnitsAvailable: z.number().int().nonnegative(),\n resultsUnitCount: z.number().int().nonnegative(),\n unitCountDate: z.string().optional(),\n});\n\nconst scheduleTourFormSchema = propertyWithNameSchema.extend({\n totalUnitsAvailable: z.number().int().nonnegative(),\n resultsUnitCount: z.number().int().nonnegative(),\n unitCountDate: z.string().optional(),\n lifestylePreferences: z.unknown().optional(),\n});\n\nconst questionnaireEventSchema = propertyWithNameSchema.extend({\n funnelStep: z.number().int().nonnegative(),\n profileQuestion: z.string().min(1, \"profileQuestion is required\"),\n interactedElement: z.enum(QuestionnaireInteractionValues),\n questionEnum: z.string().optional(),\n});\n\nconst continueQuestionnaireEventSchema = questionnaireEventSchema.extend({\n selectedAnswersEnumArray: z\n .any()\n .transform((value) => normalizeToStringArray(value))\n .refine((value): value is string[] => Array.isArray(value), {\n message: \"selectedAnswersEnumArray must resolve to an array\",\n }),\n});\n\nconst unitEventSchema = propertyContextSchema.extend({\n unitId: z.string().min(1, \"unitId is required\"),\n unitName: z.string().min(1, \"unitName is required\"),\n unitSlug: z.string().min(1, \"unitSlug is required\"),\n});\nconst unitWithPropertyNameSchema = propertyWithNameSchema.extend({\n unitId: z.string().min(1, \"unitId is required\"),\n unitName: z.string().min(1, \"unitName is required\"),\n unitSlug: z.string().min(1, \"unitSlug is required\"),\n});\nconst getInTouchFormSchema = unitWithPropertyNameSchema.extend({\n buttonName: z.string().min(1, \"buttonName is required\"),\n formName: z.string().min(1, \"formName is required\"),\n\n styleId: z.string().min(1, \"styleId is required\"),\n styleName: z.string().min(1, \"styleName is required\"),\n unitBedrooms: z.number().int().nonnegative(),\n favoritedUnit: z.boolean(),\n});\nconst styleDrawerSchema = unitWithPropertyNameSchema.extend({\n roomName: z.string().min(1, \"roomName is required\"),\n unitBedrooms: z.number().int().nonnegative(),\n\n styleId: z.string().min(1, \"styleId is required\"),\n styleName: z.string().min(1, \"styleName is required\"),\n favoritedUnit: z.boolean(),\n});\nconst furnitureInteractionSchema = unitWithPropertyNameSchema.extend({\n roomName: z.string().min(1, \"roomName is required\"),\n unitBedrooms: z.number().int().nonnegative(),\n\n styleId: z.string().min(1, \"styleId is required\"),\n styleName: z.string().min(1, \"styleName is required\"),\n\n furnitureId: z.string().min(1, \"furnitureId is required\"),\n furnitureName: z.string().min(1, \"furnitureName is required\"),\n type: z.enum([\"click\", \"hover_on\", \"hover_off\"]),\n brandName: z.string().min(1, \"brandName is required\"),\n category: z.string().min(1, \"category is required\"),\n})\nconst furnitureExternalUrlSchema = unitWithPropertyNameSchema.extend({\n roomName: z.string().min(1, \"roomName is required\"),\n unitBedrooms: z.number().int().nonnegative(),\n\n styleId: z.string().min(1, \"styleId is required\"),\n styleName: z.string().min(1, \"styleName is required\"),\n\n furnitureId: z.string().min(1, \"furnitureId is required\"),\n furnitureName: z.string().min(1, \"furnitureName is required\"),\n link: z.string().min(1, \"link is required\"),\n type: z.string().min(1, \"type is required\"),\n favoritedUnit: z.boolean(),\n brandName: z.string().min(1, \"brandName is required\"),\n category: z.string().min(1, \"category is required\"),\n})\nconst furnitureSavedSchema = unitWithPropertyNameSchema.extend({\n roomName: z.string().min(1, \"roomName is required\"),\n unitBedrooms: z.number().int().nonnegative(),\n\n styleId: z.string().min(1, \"styleId is required\"),\n styleName: z.string().min(1, \"styleName is required\"),\n\n furnitureId: z.string().min(1, \"furnitureId is required\"),\n furnitureName: z.string().min(1, \"furnitureName is required\"),\n brandName: z.string().min(1, \"brandName is required\"),\n category: z.string().min(1, \"category is required\"),\n})\nconst furnitureModalOpenedSchema = unitWithPropertyNameSchema.extend({\n roomName: z.string().min(1, \"roomName is required\"),\n unitBedrooms: z.number().int().nonnegative(),\n\n styleId: z.string().min(1, \"styleId is required\"),\n styleName: z.string().min(1, \"styleName is required\"),\n\n furnitureId: z.string().min(1, \"furnitureId is required\"),\n furnitureName: z.string().min(1, \"furnitureName is required\"),\n brandName: z.string().min(1, \"brandName is required\"),\n category: z.string().min(1, \"category is required\"),\n})\nconst furnitureCarouselSchema = unitWithPropertyNameSchema.extend({\n method: z.enum([\"Prev\", \"Next\"]),\n roomName: z.string().min(1, \"roomName is required\"),\n unitBedrooms: z.number().int().nonnegative(),\n\n styleId: z.string().min(1, \"styleId is required\"),\n styleName: z.string().min(1, \"styleName is required\"),\n\n furnitureId: z.string().min(1, \"furnitureId is required\"),\n furnitureName: z.string().min(1, \"furnitureName is required\"),\n brandName: z.string().min(1, \"brandName is required\"),\n category: z.string().min(1, \"category is required\"),\n})\n\nconst roomEnteredSchema = unitWithPropertyNameSchema.extend({\n roomName: z.string().min(1, \"roomName is required\"),\n unitBedrooms: z.number().int().nonnegative(),\n styleId: z.string().min(1, \"styleId is required\"),\n styleName: z.string().min(1, \"styleName is required\"),\n method: z.enum([\"Navigation\", \"Map\"]),\n})\nconst roomLeftSchema = roomEnteredSchema.extend({\n timeInRoom: z.number().int().nonnegative(),\n})\n\nconst videoStartedSchema = unitWithPropertyNameSchema.extend({\n roomName: z.string().min(1, \"roomName is required\"),\n unitBedrooms: z.number().int().nonnegative(),\n styleId: z.string().min(1, \"styleId is required\"),\n styleName: z.string().min(1, \"styleName is required\"),\n method: z.enum([\"On Click Play\"]),\n videoCurrentTime: z.number().int().nonnegative(),\n videoDuration: z.number().int().nonnegative(),\n videoPercent: z.number().int().nonnegative(),\n videoFilename: z.string().min(1, \"videoFilename is required\"),\n})\nconst emailTrackedSchema = unitWithPropertyNameSchema.extend({\n utmSource: z.string().min(1, \"utm_source is required\"),\n utmMedium: z.string().min(1, \"utm_medium is required\"),\n utmName: z.string().min(1, \"utm_name is required\"),\n\n unitBedrooms: z.number().int().nonnegative(),\n styleId: z.string().min(1, \"styleId is required\"),\n styleName: z.string().min(1, \"styleName is required\"),\n\n favoritedUnit: z.boolean(),\n})\nconst webPageViewedBaseSchema = unitWithPropertyNameSchema.extend({\n fullUrl: z.string().min(1, \"fullUrl is required\"),\n datestamp: z.string().min(1, \"datestamp is required\"),\n})\n// 360 app only\nconst webPageViewedSchema = webPageViewedBaseSchema.extend({\n pageName: z.string().min(1, \"pageName is required\"),\n})\nconst webPageRoomViewedSchema = webPageViewedBaseSchema.extend({\n roomName: z.string().min(1, \"roomName is required\"),\n})\nconst embedPageViewedSchema = unitWithPropertyNameSchema.extend({\n unitBedrooms: z.number().int().nonnegative(),\n})\nconst embedPageViewSchemaWithUTM = unitWithPropertyNameSchema.extend({\n utmSource: z.string().min(1, \"utm_source is required\"),\n utmMedium: z.string().min(1, \"utm_medium is required\"),\n utmName: z.string().min(1, \"utm_name is required\"),\n})\n\n// property_slug, property_id, property_name, unit_id, unit_slug, unit_title, unit_bedrooms\n\nconst toastSchema = unitWithPropertyNameSchema.extend({\n toastCopy: z.string().min(1, \"toastCopy is required\"),\n})\nconst contentModalOpenedSchema = unitWithPropertyNameSchema.extend({\n unitBedrooms: z.number().int().nonnegative(),\n\n styleId: z.string().min(1, \"styleId is required\"),\n styleName: z.string().min(1, \"styleName is required\"),\n})\n\nconst buildingDetailsModalSchema = propertyWithNameSchema;\n\nconst subscriptionImpressionSchema = propertyWithNameSchema.extend({\n name: z.string().min(1, \"name is required\"),\n\n})\n\nconst subscriptionInteractedSchema = z.object({\n name: z.string().min(1, \"name is required\"),\n properties: z.object({\n propertyContextSchema,\n buttonName: z.string().min(1, \"buttonName is required\"),\n formName: z.string().min(1, \"formName is required\"),\n pageName: z.string().min(1, \"pageName is required\"),\n fieldName: z.string().min(1, \"fieldName is required\"),\n }),\n});\n\nconst subscriptionSubmittedSchema = z.object({\n name: z.string().min(1, \"name is required\"),\n properties: z.object({\n propertyContextSchema,\n buttonName: z.string().min(1, \"buttonName is required\"),\n formName: z.string().min(1, \"formName is required\"),\n pageName: z.string().min(1, \"pageName is required\"),\n bedrooms: z.array(z.union([z.string(), z.number()])).optional(),\n price: z.number().nullable().optional(),\n }),\n});\n\nconst subscriptionRemovedSchema = propertyWithNameSchema.extend({\n\n bedrooms: z.array(z.number()).optional(),\n price_min: z.number().optional(),\n price_max: z.number().optional(),\n highlights: z.array(z.string()).optional(),\n\n\n page_name: z.string().optional(),\n});\n\nconst hoverUnitSchema = unitWithPropertyNameSchema.extend({\n favoritedUnit: z.boolean(),\n unitIndex: z.number().int().nonnegative(),\n});\n\nconst selectionSchema = z\n .any()\n .transform((value) => normalizeToStringArray(value))\n .refine((value): value is string[] => Array.isArray(value), {\n message: \"Selection must resolve to an array\",\n });\n\nconst filterOpenSchema = propertyWithNameSchema.extend({\n filterIndex: z.number().int().nonnegative(),\n filterLabel: z.string().min(1, \"filterLabel is required\"),\n selectedFiltersEnum: selectionSchema,\n filterName: z.string().optional(),\n});\n\nconst filterMutationSchema = propertyWithNameSchema.extend({\n filterIndex: z.number().int().nonnegative(),\n filterLabel: z.string().min(1, \"filterLabel is required\"),\n selectedFiltersEnum: selectionSchema,\n});\n\nconst sortEventSchema = propertyContextSchema.extend({\n sortIndex: z.number().int().nonnegative(),\n sortEnum: z.enum(SortEnumValues),\n});\n\nconst sortOpenSchema = propertyWithNameSchema.extend({\n sortIndex: z.number().int().nonnegative(),\n sortEnum: z.enum(SortEnumValues),\n resultsUnitCount: z.number().int().nonnegative(),\n unitCountDate: z.string().optional(),\n});\n\nconst questionnaireResultSchema = propertyContextSchema.extend({\n fullQuestionnaireSchemaJson: z.unknown().optional(),\n resultsJson: z\n .object({\n type: z.string().optional(),\n total: z.number().int().nonnegative().optional(),\n units: z\n .array(\n z.object({\n unitId: z.string().min(1, \"unitId is required\"),\n unitName: z.string().optional(),\n })\n )\n .optional(),\n })\n .optional(),\n});\n\nconst clickUnitSchema = unitWithPropertyNameSchema.extend({\n favoritedUnit: z.boolean(),\n unitIndex: z.number().int().nonnegative(),\n});\n\nconst clickUnitFavoritesSchema = unitWithPropertyNameSchema.extend({\n favoritedUnit: z.boolean(),\n unitIndex: z.number().int().nonnegative(),\n\n});\n\nconst unitUnfavoritedSchema = propertyWithNameSchema.extend({\n unitId: z.string().min(1, \"unitId is required\"),\n unitName: z.string().min(1, \"unitName is required\"),\n unitSlug: z.string().min(1, \"unitSlug is required\"),\n resultsUnitCount: z.number().int().nonnegative(),\n unitCountDate: z.string().optional(),\n unitIndex: z.number().int().nonnegative(),\n});\n\nexport type BaseEvent = z.infer<typeof propertyContextSchema>;\nexport type ViewAllUnitsEvent = z.infer<typeof viewAllUnitsSchema>;\nexport type LoadMoreEvent = z.infer<typeof loadMoreSchema>;\nexport type QuestionnaireEvent = z.infer<typeof questionnaireEventSchema>;\nexport type ContinueQuestionnaireEvent = z.infer<\n typeof continueQuestionnaireEventSchema\n>;\nexport type ClickUnitEvent = z.infer<typeof clickUnitSchema>;\nexport type UnitEvent = z.infer<typeof unitEventSchema>;\nexport type HoverUnitEvent = z.infer<typeof hoverUnitSchema>;\nexport type FilterEvent = z.infer<typeof filterMutationSchema>;\nexport type FilterOpenEvent = z.infer<typeof filterOpenSchema>;\nexport type SortEvent = z.infer<typeof sortEventSchema>;\nexport type SortOpenEvent = z.infer<typeof sortOpenSchema>;\nexport type QuestionnaireResultEvent = z.infer<\n typeof questionnaireResultSchema\n>;\nexport type ClickUnitFavoritesEvent = z.infer<typeof clickUnitFavoritesSchema>;\nexport type ScheduleTourFormEvent = z.infer<typeof scheduleTourFormSchema>;\nexport type UnitUnfavoritedEvent = z.infer<typeof unitUnfavoritedSchema>;\n\nexport type GetInTouchFormEvent = z.infer<typeof getInTouchFormSchema>;\nexport type StyleDrawerEvent = z.infer<typeof styleDrawerSchema>;\nexport type FurnitureInteractionEvent = z.infer<typeof furnitureInteractionSchema>;\nexport type FurnitureExternalUrlClickedEvent = z.infer<typeof furnitureExternalUrlSchema>;\nexport type FurnitureSavedEvent = z.infer<typeof furnitureSavedSchema>;\nexport type FurnitureModalOpenedEvent = z.infer<typeof furnitureModalOpenedSchema>;\nexport type FurnitureCarouselEvent = z.infer<typeof furnitureCarouselSchema>;\nexport type RoomEnteredEvent = z.infer<typeof roomEnteredSchema>;\nexport type RoomLeftEvent = z.infer<typeof roomLeftSchema>;\nexport type VideoStartedEvent = z.infer<typeof videoStartedSchema>;\nexport type EmailTrackedEvent = z.infer<typeof emailTrackedSchema>;\nexport type ToastEvent = z.infer<typeof toastSchema>;\nexport type ContentModalOpenedEvent = z.infer<typeof contentModalOpenedSchema>;\nexport type BuildingDetailsModalEvent = z.infer<typeof buildingDetailsModalSchema>;\nexport type SubscriptionImpressionEvent = z.infer<typeof subscriptionImpressionSchema>;\nexport type SubscriptionInteractedEvent = z.infer<typeof subscriptionInteractedSchema>;\nexport type SubscriptionSubmittedEvent = z.infer<typeof subscriptionSubmittedSchema>;\nexport type SubscriptionRemovedEvent = z.infer<typeof subscriptionRemovedSchema>;\nexport type WebPageViewedEvent = z.infer<typeof webPageViewedSchema>;\nexport type WebPageRoomViewedEvent = z.infer<typeof webPageRoomViewedSchema>;\n\n\nexport type TrackingEventWithUnits = FilterEvent & {\n trackingEvent: (payload: FilterEvent) => void;\n [metadata: string]: unknown;\n};\n\nexport type TrackEventFn = (eventName: string, data?: Record<string, any>) => void;\n\nexport function useTrackEvent() {\n const analytics = useAnalytics();\n return (eventName: string, data?: Record<string, any>) => {\n const payload =\n data == null ? data : (convertKeysToSnakeCase(data) as Record<string, any>);\n analytics.track(eventName, payload);\n };\n}\n\nconst createStrictTrackerInternal =\n <Schema extends z.ZodTypeAny>(\n eventName: string,\n schema: Schema,\n dispatch: (eventName: string, payload: unknown) => void,\n options?: { isDev?: boolean },\n ) =>\n (payload: AnalyticsPayload<Schema>) => {\n const payloadToValidate = convertKeysToCamelCase(payload) as z.input<Schema>;\n const result = schema.safeParse(payloadToValidate);\n if (!result.success) {\n if (options?.isDev) {\n // eslint-disable-next-line no-console\n console.warn(`[Analytics] Invalid payload for \"${eventName}\":`, result.error.issues);\n }\n return;\n }\n dispatch(eventName, payload);\n };\n\nexport function buildTrackingEvents(trackEvent: TrackEventFn, isDev = false) {\n const dispatch = (eventName: string, payload: unknown) => {\n const finalPayload = convertKeysToSnakeCase(payload) as Record<string, any>;\n trackEvent(eventName, finalPayload);\n };\n\n const createStrictTracker = <Schema extends z.ZodTypeAny>(\n eventName: string,\n schema: Schema,\n ) =>\n createStrictTrackerInternal(eventName, schema, dispatch, { isDev });\n\n return {\n trackViewAllUnits: (\n payload: AnalyticsPayload<typeof viewAllUnitsSchema>,\n ) => {\n const normalizedPayload = convertKeysToCamelCase(\n payload,\n ) as z.input<typeof viewAllUnitsSchema>;\n const result = viewAllUnitsSchema.safeParse({\n unitCountDate: new Date().toISOString(),\n ...normalizedPayload,\n });\n if (!result.success) {\n if (isDev) console.warn(\"[Analytics] Invalid payload for \\\"View All Units\\\":\", result.error.flatten()); // eslint-disable-line no-console\n return;\n }\n dispatch(\"View All Units\", result.data);\n },\n trackQuestionnaireSkip: (\n payload: AnalyticsPayloadWithout<\n typeof questionnaireEventSchema,\n \"interactedElement\"\n >,\n ) => {\n const normalizedPayload = convertKeysToCamelCase(\n payload,\n ) as Omit<\n z.input<typeof questionnaireEventSchema>,\n \"interactedElement\"\n >;\n const result = questionnaireEventSchema.safeParse({\n ...normalizedPayload,\n interactedElement: \"Skip\",\n });\n if (!result.success) {\n if (isDev) console.warn(\"[Analytics] Invalid payload for \\\"Questionnaire Navigated\\\" (Skip):\", result.error.flatten()); // eslint-disable-line no-console\n return;\n }\n dispatch(\"Questionnaire Navigated\", result.data);\n },\n trackQuestionnaireContinue: (\n payload: AnalyticsPayloadWithout<\n typeof continueQuestionnaireEventSchema,\n \"interactedElement\"\n >,\n ) => {\n const normalizedPayload = convertKeysToCamelCase(\n payload,\n ) as Omit<\n z.input<typeof continueQuestionnaireEventSchema>,\n \"interactedElement\"\n >;\n const result = continueQuestionnaireEventSchema.safeParse({\n ...normalizedPayload,\n interactedElement: \"Continue\",\n });\n if (!result.success) {\n if (isDev) console.warn(\"[Analytics] Invalid payload for \\\"Questionnaire Navigated\\\" (Continue):\", result.error.flatten()); // eslint-disable-line no-console\n return;\n }\n dispatch(\"Questionnaire Navigated\", result.data);\n },\n trackQuestionnaireBack: (\n payload: AnalyticsPayloadWithout<\n typeof questionnaireEventSchema,\n \"interactedElement\"\n >,\n ) => {\n const normalizedPayload = convertKeysToCamelCase(\n payload,\n ) as Omit<\n z.input<typeof questionnaireEventSchema>,\n \"interactedElement\"\n >;\n const result = questionnaireEventSchema.safeParse({\n ...normalizedPayload,\n interactedElement: \"Back\",\n });\n if (!result.success) {\n if (isDev) console.warn(\"[Analytics] Invalid payload for \\\"Questionnaire Navigated\\\" (Back):\", result.error.flatten()); // eslint-disable-line no-console\n return;\n }\n dispatch(\"Questionnaire Navigated\", result.data);\n },\n trackClickUnit: createStrictTracker(\"Unit Card Clicked\", clickUnitSchema),\n trackHoverUnit: createStrictTracker(\"Unit Hovered\", hoverUnitSchema, ),\n trackLoadMore: (\n payload: AnalyticsPayload<typeof loadMoreSchema>,\n ) => {\n const normalizedPayload = convertKeysToCamelCase(\n payload,\n ) as z.input<typeof loadMoreSchema>;\n const result = loadMoreSchema.safeParse({\n unitCountDate: new Date().toISOString(),\n ...normalizedPayload,\n });\n if (!result.success) {\n if (isDev) console.warn(\"[Analytics] Invalid payload for \\\"More Units Loaded\\\":\", result.error.flatten()); // eslint-disable-line no-console\n return;\n }\n dispatch(\"More Units Loaded\", result.data);\n },\n trackFilterOpened: createStrictTracker(\"Filter Opened\", filterOpenSchema),\n trackFilterCanceled: createStrictTracker(\n \"Filter Cleared\",\n filterMutationSchema,\n ),\n trackFilterApplied: createStrictTracker(\n \"Filter Applied\",\n filterMutationSchema,\n ),\n trackOpenSort: (\n payload: AnalyticsPayload<typeof sortOpenSchema>,\n ) => {\n const normalizedPayload = convertKeysToCamelCase(\n payload,\n ) as z.input<typeof sortOpenSchema>;\n const result = sortOpenSchema.safeParse({\n unitCountDate: new Date().toISOString(),\n ...normalizedPayload,\n });\n if (!result.success) {\n if (isDev) console.warn(\"[Analytics] Invalid payload for \\\"Sort Opened\\\":\", result.error.flatten()); // eslint-disable-line no-console\n return;\n }\n dispatch(\"Sort Opened\", result.data);\n },\n trackSelectSort: createStrictTracker(\"Sort Applied\", sortEventSchema),\n trackCancelSort: createStrictTracker(\"Sort Canceled\", sortEventSchema),\n trackClickUnitFavorites: createStrictTracker(\n \"Unit Favorited\",\n clickUnitFavoritesSchema,\n ),\n trackUnitUnfavorited: createStrictTracker(\n \"Unit Unfavorited\",\n unitUnfavoritedSchema,\n ),\n trackQuestionnaireResult: createStrictTracker(\n \"Questionnaire Submitted\",\n questionnaireResultSchema,\n ),\n trackScheduleTourFormInteracted: createStrictTracker(\n \"Schedule Tour Form Interacted\",\n scheduleTourFormSchema,\n ),\n trackScheduleTourFormSubmitted: createStrictTracker(\n \"Schedule Tour Form Submitted\",\n scheduleTourFormSchema,\n ),\n trackScheduleTourUrlClicked: createStrictTracker(\n \"Schedule Tour URL Clicked\",\n scheduleTourFormSchema,\n ),\n trackGetInTouchFormOpened: createStrictTracker(\n \"Form Opened\",\n getInTouchFormSchema,\n ),\n trackGetInTouchFormSubmitted: createStrictTracker(\n \"Form Submitted\",\n getInTouchFormSchema,\n ),\n trackStyleDrawerOpened: createStrictTracker(\n \"Style Menu Opened\",\n styleDrawerSchema,\n ),\n trackStyleDrawerChanged: createStrictTracker(\n \"Style Changed\",\n styleDrawerSchema,\n ),\n trackOpeningStyleImpression: createStrictTracker(\n \"Opening Style Modal Impression\",\n styleDrawerSchema,\n ),\n trackOpeningStyleSlected: createStrictTracker(\n \"Opening Style Selected\",\n styleDrawerSchema,\n ),\n trackFurnitureViewed: createStrictTracker(\n \"Furniture Viewed\",\n furnitureInteractionSchema,\n ),\n trackFurnitureExternalUrlClicked: createStrictTracker(\n \"Purchase Link Clicked\",\n furnitureExternalUrlSchema,\n ),\n trackFurnitureSaved: createStrictTracker(\n \"Furniture Saved\",\n furnitureSavedSchema,\n ),\n trackFurnitureModalOpened: createStrictTracker(\n \"Furniture Modal Opened\",\n furnitureModalOpenedSchema,\n ),\n trackFurnitureCarouselToggled: createStrictTracker(\n \"Furniture Carousel Toggled\",\n furnitureCarouselSchema,\n ),\n trackRoomEntered: createStrictTracker(\n \"Room Entered\",\n roomEnteredSchema,\n ),\n trackRoomLeft: createStrictTracker(\n \"Room Left\",\n roomLeftSchema,\n ),\n trackVideoStarted: createStrictTracker(\n \"Video Started\",\n videoStartedSchema,\n ),\n trackEmailRedirect: createStrictTracker(\n \"Email Tracked\",\n emailTrackedSchema,\n ),\n trackToastImpression: createStrictTracker(\n \"Toast Impression\",\n toastSchema,\n ),\n trackToastClicked: createStrictTracker(\n \"Toast Clicked\",\n toastSchema,\n ),\n trackToastClosed: createStrictTracker(\n \"Toast Closed\",\n toastSchema,\n ),\n trackContentModalOpened: createStrictTracker(\n \"Content Modal Opened\",\n contentModalOpenedSchema,\n ),\n trackBuildingDetailsModalOpened: createStrictTracker(\n \"Building Details Modal\",\n buildingDetailsModalSchema,\n ),\n trackSubscriptionImpression: createStrictTracker(\n \"Subscription Impression\",\n subscriptionImpressionSchema,\n ),\n trackSubscriptionInteracted: createStrictTracker(\n \"Subscription Interacted\",\n subscriptionInteractedSchema,\n ),\n trackSubscriptionSubmitted: createStrictTracker(\n \"Subscription Submitted\",\n subscriptionSubmittedSchema,\n ),\n trackSubscriptionRemoved: createStrictTracker(\n \"Subscription Removed\",\n subscriptionRemovedSchema,\n ),\n trackWebPageViewed: createStrictTracker(\n \"Page Viewed\",\n webPageViewedSchema,\n ),\n trackWebPageRoomViewed: createStrictTracker(\n \"Page Viewed\",\n webPageRoomViewedSchema,\n ),\n trackEmbedPageViewed: createStrictTracker(\n \"Embed Impression\",\n embedPageViewedSchema,\n ),\n trackEmailClick: (data: { event_name: string }) => createStrictTracker(\n `Email Interaction - ${data.event_name}`,\n embedPageViewSchemaWithUTM,\n ),\n };\n}\n\nexport function useTrackingEvents() {\n const { isDev } = useAnalytics();\n const trackEvent = useTrackEvent();\n return buildTrackingEvents(trackEvent, isDev);\n}\n"],"names":["QuestionEnumValues","SortEnumValues","QuestionnaireInteractionValues","propertyContextSchema","z.object","z.string","propertyWithNameSchema","viewAllUnitsSchema","z.number","loadMoreSchema","scheduleTourFormSchema","z.unknown","questionnaireEventSchema","z.enum","continueQuestionnaireEventSchema","z.any","value","normalizeToStringArray","unitWithPropertyNameSchema","getInTouchFormSchema","z.boolean","styleDrawerSchema","furnitureInteractionSchema","furnitureExternalUrlSchema","furnitureSavedSchema","furnitureModalOpenedSchema","furnitureCarouselSchema","roomEnteredSchema","roomLeftSchema","videoStartedSchema","emailTrackedSchema","webPageViewedBaseSchema","webPageViewedSchema","webPageRoomViewedSchema","embedPageViewedSchema","embedPageViewSchemaWithUTM","toastSchema","contentModalOpenedSchema","buildingDetailsModalSchema","subscriptionImpressionSchema","subscriptionInteractedSchema","subscriptionSubmittedSchema","z.array","z.union","subscriptionRemovedSchema","hoverUnitSchema","selectionSchema","filterOpenSchema","filterMutationSchema","sortEventSchema","sortOpenSchema","questionnaireResultSchema","clickUnitSchema","clickUnitFavoritesSchema","unitUnfavoritedSchema","useTrackEvent","analytics","useAnalytics","eventName","data","payload","convertKeysToSnakeCase","createStrictTrackerInternal","schema","dispatch","options","payloadToValidate","convertKeysToCamelCase","result","buildTrackingEvents","trackEvent","isDev","finalPayload","createStrictTracker","normalizedPayload","useTrackingEvents"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"analytics.cjs","sources":["../../../src/features/analytics/analytics.ts"],"sourcesContent":["import { z } from \"zod\";\n\nimport {\n convertKeysToCamelCase,\n convertKeysToSnakeCase,\n} from \"../../utils/casing\";\nimport { normalizeToStringArray } from \"../../utils/collections\";\nimport { useAnalytics } from \"./AnalyticsProvider\";\n\ntype AnalyticsPayload<Schema extends z.ZodTypeAny> = z.input<Schema>;\n\ntype AnalyticsPayloadWithout<\n Schema extends z.ZodTypeAny,\n Keys extends PropertyKey,\n> = Omit<AnalyticsPayload<Schema>, Keys>;\n\nexport const QuestionEnumValues = [\"location\", \"budget\", \"size\", \"other\"] as const;\nexport type QuestionEnum = (typeof QuestionEnumValues)[number];\nexport type FilterEnum = string;\nexport const SortEnumValues = [\n \"cost_low_to_high\",\n \"cost_high_to_low\",\n \"newest\",\n \"relevance\",\n] as const;\nexport type SortEnum = (typeof SortEnumValues)[number];\nexport const QuestionnaireInteractionValues = [\n \"Skip\",\n \"Continue\",\n \"Back\",\n] as const;\nexport type QuestionnaireInteraction =\n (typeof QuestionnaireInteractionValues)[number];\n\nconst propertyContextSchema = z.object({\n propertyId: z.string().min(1, \"propertyId is required\"),\n propertySlug: z.string().min(1, \"propertySlug is required\"),\n propertyName: z.string().min(1, \"propertyName is required\"),\n});\n\nconst propertyWithNameSchema = propertyContextSchema.extend({\n propertyName: z.string().min(1, \"propertyName is required\"),\n});\n\nconst viewAllUnitsSchema = propertyWithNameSchema.extend({\n totalUnitsAvailable: z.number().int().nonnegative(),\n resultsUnitCount: z.number().int().nonnegative(),\n unitCountDate: z.string().optional(),\n});\n\nconst loadMoreSchema = propertyWithNameSchema.extend({\n totalUnitsAvailable: z.number().int().nonnegative(),\n resultsUnitCount: z.number().int().nonnegative(),\n unitCountDate: z.string().optional(),\n});\n\nconst scheduleTourFormSchema = propertyWithNameSchema.extend({\n totalUnitsAvailable: z.number().int().nonnegative(),\n resultsUnitCount: z.number().int().nonnegative(),\n unitCountDate: z.string().optional(),\n lifestylePreferences: z.unknown().optional(),\n});\n\nconst questionnaireEventSchema = propertyWithNameSchema.extend({\n funnelStep: z.number().int().nonnegative(),\n profileQuestion: z.string().min(1, \"profileQuestion is required\"),\n interactedElement: z.enum(QuestionnaireInteractionValues),\n questionEnum: z.string().optional(),\n});\n\nconst continueQuestionnaireEventSchema = questionnaireEventSchema.extend({\n selectedAnswersEnumArray: z\n .any()\n .transform((value) => normalizeToStringArray(value))\n .refine((value): value is string[] => Array.isArray(value), {\n message: \"selectedAnswersEnumArray must resolve to an array\",\n }),\n});\n\nconst unitEventSchema = propertyContextSchema.extend({\n unitId: z.string().min(1, \"unitId is required\"),\n unitName: z.string().min(1, \"unitName is required\"),\n unitSlug: z.string().min(1, \"unitSlug is required\"),\n});\nconst unitWithPropertyNameSchema = propertyWithNameSchema.extend({\n unitId: z.string().min(1, \"unitId is required\"),\n unitName: z.string().min(1, \"unitName is required\"),\n unitSlug: z.string().min(1, \"unitSlug is required\"),\n});\nconst getInTouchFormSchema = unitWithPropertyNameSchema.extend({\n buttonName: z.string().min(1, \"buttonName is required\"),\n formName: z.string().min(1, \"formName is required\"),\n\n styleId: z.string().min(1, \"styleId is required\"),\n styleName: z.string().min(1, \"styleName is required\"),\n unitBedrooms: z.number().int().nonnegative(),\n favoritedUnit: z.boolean(),\n});\nconst styleDrawerSchema = unitWithPropertyNameSchema.extend({\n roomName: z.string().min(1, \"roomName is required\"),\n unitBedrooms: z.number().int().nonnegative(),\n\n styleId: z.string().min(1, \"styleId is required\"),\n styleName: z.string().min(1, \"styleName is required\"),\n favoritedUnit: z.boolean(),\n});\nconst furnitureInteractionSchema = unitWithPropertyNameSchema.extend({\n roomName: z.string().min(1, \"roomName is required\"),\n unitBedrooms: z.number().int().nonnegative(),\n\n styleId: z.string().min(1, \"styleId is required\"),\n styleName: z.string().min(1, \"styleName is required\"),\n\n furnitureId: z.string().min(1, \"furnitureId is required\"),\n furnitureName: z.string().min(1, \"furnitureName is required\"),\n type: z.enum([\"click\", \"hover_on\", \"hover_off\"]),\n brandName: z.string().min(1, \"brandName is required\"),\n category: z.string().min(1, \"category is required\"),\n})\nconst furnitureExternalUrlSchema = unitWithPropertyNameSchema.extend({\n roomName: z.string().min(1, \"roomName is required\"),\n unitBedrooms: z.number().int().nonnegative(),\n\n styleId: z.string().min(1, \"styleId is required\"),\n styleName: z.string().min(1, \"styleName is required\"),\n\n furnitureId: z.string().min(1, \"furnitureId is required\"),\n furnitureName: z.string().min(1, \"furnitureName is required\"),\n link: z.string().min(1, \"link is required\"),\n type: z.string().min(1, \"type is required\"),\n favoritedUnit: z.boolean(),\n brandName: z.string().min(1, \"brandName is required\"),\n category: z.string().min(1, \"category is required\"),\n})\nconst furnitureSavedSchema = unitWithPropertyNameSchema.extend({\n roomName: z.string().min(1, \"roomName is required\"),\n unitBedrooms: z.number().int().nonnegative(),\n\n styleId: z.string().min(1, \"styleId is required\"),\n styleName: z.string().min(1, \"styleName is required\"),\n\n furnitureId: z.string().min(1, \"furnitureId is required\"),\n furnitureName: z.string().min(1, \"furnitureName is required\"),\n brandName: z.string().min(1, \"brandName is required\"),\n category: z.string().min(1, \"category is required\"),\n})\nconst furnitureModalOpenedSchema = unitWithPropertyNameSchema.extend({\n roomName: z.string().min(1, \"roomName is required\"),\n unitBedrooms: z.number().int().nonnegative(),\n\n styleId: z.string().min(1, \"styleId is required\"),\n styleName: z.string().min(1, \"styleName is required\"),\n\n furnitureId: z.string().min(1, \"furnitureId is required\"),\n furnitureName: z.string().min(1, \"furnitureName is required\"),\n brandName: z.string().min(1, \"brandName is required\"),\n category: z.string().min(1, \"category is required\"),\n})\nconst furnitureCarouselSchema = unitWithPropertyNameSchema.extend({\n method: z.enum([\"Prev\", \"Next\"]),\n roomName: z.string().min(1, \"roomName is required\"),\n unitBedrooms: z.number().int().nonnegative(),\n\n styleId: z.string().min(1, \"styleId is required\"),\n styleName: z.string().min(1, \"styleName is required\"),\n\n furnitureId: z.string().min(1, \"furnitureId is required\"),\n furnitureName: z.string().min(1, \"furnitureName is required\"),\n brandName: z.string().min(1, \"brandName is required\"),\n category: z.string().min(1, \"category is required\"),\n})\n\nconst roomEnteredSchema = unitWithPropertyNameSchema.extend({\n roomName: z.string().min(1, \"roomName is required\"),\n unitBedrooms: z.number().int().nonnegative(),\n styleId: z.string().min(1, \"styleId is required\"),\n styleName: z.string().min(1, \"styleName is required\"),\n method: z.enum([\"Navigation\", \"Map\"]),\n})\nconst roomLeftSchema = roomEnteredSchema.extend({\n timeInRoom: z.number().int().nonnegative(),\n})\n\nconst videoStartedSchema = unitWithPropertyNameSchema.extend({\n roomName: z.string().min(1, \"roomName is required\"),\n unitBedrooms: z.number().int().nonnegative(),\n styleId: z.string().min(1, \"styleId is required\"),\n styleName: z.string().min(1, \"styleName is required\"),\n method: z.enum([\"On Click Play\"]),\n videoCurrentTime: z.number().int().nonnegative(),\n videoDuration: z.number().int().nonnegative(),\n videoPercent: z.number().int().nonnegative(),\n videoFilename: z.string().min(1, \"videoFilename is required\"),\n})\nconst emailTrackedSchema = unitWithPropertyNameSchema.extend({\n utmSource: z.string().min(1, \"utm_source is required\"),\n utmMedium: z.string().min(1, \"utm_medium is required\"),\n utmName: z.string().min(1, \"utm_name is required\"),\n\n unitBedrooms: z.number().int().nonnegative(),\n styleId: z.string().min(1, \"styleId is required\"),\n styleName: z.string().min(1, \"styleName is required\"),\n\n favoritedUnit: z.boolean(),\n})\nconst webPageViewedBaseSchema = unitWithPropertyNameSchema.extend({\n fullUrl: z.string().min(1, \"fullUrl is required\"),\n datestamp: z.string().min(1, \"datestamp is required\"),\n})\n// 360 app only\nconst webPageViewedSchema = webPageViewedBaseSchema.extend({\n pageName: z.string().min(1, \"pageName is required\"),\n})\nconst webPageRoomViewedSchema = webPageViewedBaseSchema.extend({\n roomName: z.string().min(1, \"roomName is required\"),\n})\nconst embedPageViewedSchema = unitWithPropertyNameSchema.extend({\n unitBedrooms: z.number().int().nonnegative(),\n})\nconst embedPageViewSchemaWithUTM = unitWithPropertyNameSchema.extend({\n utmSource: z.string().min(1, \"utm_source is required\"),\n utmMedium: z.string().min(1, \"utm_medium is required\"),\n utmName: z.string().min(1, \"utm_name is required\"),\n})\n\n// property_slug, property_id, property_name, unit_id, unit_slug, unit_title, unit_bedrooms\n\nconst toastSchema = unitWithPropertyNameSchema.extend({\n toastCopy: z.string().min(1, \"toastCopy is required\"),\n})\nconst contentModalOpenedSchema = unitWithPropertyNameSchema.extend({\n unitBedrooms: z.number().int().nonnegative(),\n\n styleId: z.string().min(1, \"styleId is required\"),\n styleName: z.string().min(1, \"styleName is required\"),\n})\n\nconst buildingDetailsModalSchema = propertyWithNameSchema;\n\nconst subscriptionImpressionSchema = propertyWithNameSchema.extend({\n name: z.string().min(1, \"name is required\"),\n\n})\n\nconst subscriptionInteractedSchema = z.object({\n name: z.string().min(1, \"name is required\"),\n properties: z.object({\n propertyContextSchema,\n buttonName: z.string().min(1, \"buttonName is required\"),\n formName: z.string().min(1, \"formName is required\"),\n pageName: z.string().min(1, \"pageName is required\"),\n fieldName: z.string().min(1, \"fieldName is required\"),\n }),\n});\n\nconst subscriptionSubmittedSchema = z.object({\n name: z.string().min(1, \"name is required\"),\n properties: z.object({\n propertyContextSchema,\n buttonName: z.string().min(1, \"buttonName is required\"),\n formName: z.string().min(1, \"formName is required\"),\n pageName: z.string().min(1, \"pageName is required\"),\n bedrooms: z.array(z.union([z.string(), z.number()])).optional(),\n price: z.number().nullable().optional(),\n }),\n});\n\nconst subscriptionRemovedSchema = propertyWithNameSchema.extend({\n\n bedrooms: z.array(z.number()).optional(),\n price_min: z.number().optional(),\n price_max: z.number().optional(),\n highlights: z.array(z.string()).optional(),\n\n\n page_name: z.string().optional(),\n});\n\nconst hoverUnitSchema = unitWithPropertyNameSchema.extend({\n favoritedUnit: z.boolean(),\n unitIndex: z.number().int().nonnegative(),\n});\n\nconst selectionSchema = z\n .any()\n .transform((value) => normalizeToStringArray(value))\n .refine((value): value is string[] => Array.isArray(value), {\n message: \"Selection must resolve to an array\",\n });\n\nconst filterOpenSchema = propertyWithNameSchema.extend({\n filterIndex: z.number().int().nonnegative(),\n filterLabel: z.string().min(1, \"filterLabel is required\"),\n selectedFiltersEnum: selectionSchema,\n filterName: z.string().optional(),\n});\n\nconst filterMutationSchema = propertyWithNameSchema.extend({\n filterIndex: z.number().int().nonnegative(),\n filterLabel: z.string().min(1, \"filterLabel is required\"),\n selectedFiltersEnum: selectionSchema,\n});\n\nconst sortEventSchema = propertyContextSchema.extend({\n sortIndex: z.number().int().nonnegative(),\n sortEnum: z.enum(SortEnumValues),\n});\n\nconst sortOpenSchema = propertyWithNameSchema.extend({\n sortIndex: z.number().int().nonnegative(),\n sortEnum: z.enum(SortEnumValues),\n resultsUnitCount: z.number().int().nonnegative(),\n unitCountDate: z.string().optional(),\n});\n\nconst questionnaireResultSchema = propertyContextSchema.extend({\n fullQuestionnaireSchemaJson: z.unknown().optional(),\n resultsJson: z\n .object({\n type: z.string().optional(),\n total: z.number().int().nonnegative().optional(),\n units: z\n .array(\n z.object({\n unitId: z.string().min(1, \"unitId is required\"),\n unitName: z.string().optional(),\n })\n )\n .optional(),\n })\n .optional(),\n});\n\nconst clickUnitSchema = unitWithPropertyNameSchema.extend({\n favoritedUnit: z.boolean(),\n unitIndex: z.number().int().nonnegative(),\n});\n\nconst clickUnitFavoritesSchema = unitWithPropertyNameSchema.extend({\n favoritedUnit: z.boolean(),\n unitIndex: z.number().int().nonnegative(),\n\n});\n\nconst unitUnfavoritedSchema = propertyWithNameSchema.extend({\n unitId: z.string().min(1, \"unitId is required\"),\n unitName: z.string().min(1, \"unitName is required\"),\n unitSlug: z.string().min(1, \"unitSlug is required\"),\n resultsUnitCount: z.number().int().nonnegative(),\n unitCountDate: z.string().optional(),\n unitIndex: z.number().int().nonnegative(),\n});\n\nexport type BaseEvent = z.infer<typeof propertyContextSchema>;\nexport type ViewAllUnitsEvent = z.infer<typeof viewAllUnitsSchema>;\nexport type LoadMoreEvent = z.infer<typeof loadMoreSchema>;\nexport type QuestionnaireEvent = z.infer<typeof questionnaireEventSchema>;\nexport type ContinueQuestionnaireEvent = z.infer<\n typeof continueQuestionnaireEventSchema\n>;\nexport type ClickUnitEvent = z.infer<typeof clickUnitSchema>;\nexport type UnitEvent = z.infer<typeof unitEventSchema>;\nexport type HoverUnitEvent = z.infer<typeof hoverUnitSchema>;\nexport type FilterEvent = z.infer<typeof filterMutationSchema>;\nexport type FilterOpenEvent = z.infer<typeof filterOpenSchema>;\nexport type SortEvent = z.infer<typeof sortEventSchema>;\nexport type SortOpenEvent = z.infer<typeof sortOpenSchema>;\nexport type QuestionnaireResultEvent = z.infer<\n typeof questionnaireResultSchema\n>;\nexport type ClickUnitFavoritesEvent = z.infer<typeof clickUnitFavoritesSchema>;\nexport type ScheduleTourFormEvent = z.infer<typeof scheduleTourFormSchema>;\nexport type UnitUnfavoritedEvent = z.infer<typeof unitUnfavoritedSchema>;\n\nexport type GetInTouchFormEvent = z.infer<typeof getInTouchFormSchema>;\nexport type StyleDrawerEvent = z.infer<typeof styleDrawerSchema>;\nexport type FurnitureInteractionEvent = z.infer<typeof furnitureInteractionSchema>;\nexport type FurnitureExternalUrlClickedEvent = z.infer<typeof furnitureExternalUrlSchema>;\nexport type FurnitureSavedEvent = z.infer<typeof furnitureSavedSchema>;\nexport type FurnitureModalOpenedEvent = z.infer<typeof furnitureModalOpenedSchema>;\nexport type FurnitureCarouselEvent = z.infer<typeof furnitureCarouselSchema>;\nexport type RoomEnteredEvent = z.infer<typeof roomEnteredSchema>;\nexport type RoomLeftEvent = z.infer<typeof roomLeftSchema>;\nexport type VideoStartedEvent = z.infer<typeof videoStartedSchema>;\nexport type EmailTrackedEvent = z.infer<typeof emailTrackedSchema>;\nexport type ToastEvent = z.infer<typeof toastSchema>;\nexport type ContentModalOpenedEvent = z.infer<typeof contentModalOpenedSchema>;\nexport type BuildingDetailsModalEvent = z.infer<typeof buildingDetailsModalSchema>;\nexport type SubscriptionImpressionEvent = z.infer<typeof subscriptionImpressionSchema>;\nexport type SubscriptionInteractedEvent = z.infer<typeof subscriptionInteractedSchema>;\nexport type SubscriptionSubmittedEvent = z.infer<typeof subscriptionSubmittedSchema>;\nexport type SubscriptionRemovedEvent = z.infer<typeof subscriptionRemovedSchema>;\nexport type WebPageViewedEvent = z.infer<typeof webPageViewedSchema>;\nexport type WebPageRoomViewedEvent = z.infer<typeof webPageRoomViewedSchema>;\n\n\nexport type TrackingEventWithUnits = FilterEvent & {\n trackingEvent: (payload: FilterEvent) => void;\n [metadata: string]: unknown;\n};\n\nexport type TrackEventFn = (eventName: string, data?: Record<string, any>) => void;\n\nexport function useTrackEvent() {\n const analytics = useAnalytics();\n return (eventName: string, data?: Record<string, any>) => {\n const payload =\n data == null ? data : (convertKeysToSnakeCase(data) as Record<string, any>);\n analytics.track(eventName, payload);\n };\n}\n\nconst createStrictTrackerInternal =\n <Schema extends z.ZodTypeAny>(\n eventName: string,\n schema: Schema,\n dispatch: (eventName: string, payload: unknown) => void,\n options?: { isDev?: boolean },\n ) =>\n (payload: AnalyticsPayload<Schema>) => {\n const payloadToValidate = convertKeysToCamelCase(payload) as z.input<Schema>;\n const result = schema.safeParse(payloadToValidate);\n if (!result.success) {\n if (options?.isDev) {\n // eslint-disable-next-line no-console\n console.warn(`[Analytics] Invalid payload for \"${eventName}\":`, result.error.issues);\n }\n return;\n }\n dispatch(eventName, payload);\n };\n\nexport function buildTrackingEvents(trackEvent: TrackEventFn, isDev = false) {\n const dispatch = (eventName: string, payload: unknown) => {\n const finalPayload = convertKeysToSnakeCase(payload) as Record<string, any>;\n trackEvent(eventName, finalPayload);\n };\n\n const createStrictTracker = <Schema extends z.ZodTypeAny>(\n eventName: string,\n schema: Schema,\n ) =>\n createStrictTrackerInternal(eventName, schema, dispatch, { isDev });\n\n return {\n trackViewAllUnits: (\n payload: AnalyticsPayload<typeof viewAllUnitsSchema>,\n ) => {\n const normalizedPayload = convertKeysToCamelCase(\n payload,\n ) as z.input<typeof viewAllUnitsSchema>;\n const result = viewAllUnitsSchema.safeParse({\n unitCountDate: new Date().toISOString(),\n ...normalizedPayload,\n });\n if (!result.success) {\n if (isDev) console.warn(\"[Analytics] Invalid payload for \\\"View All Units\\\":\", result.error.flatten()); // eslint-disable-line no-console\n return;\n }\n dispatch(\"View All Units\", result.data);\n },\n trackQuestionnaireSkip: (\n payload: AnalyticsPayloadWithout<\n typeof questionnaireEventSchema,\n \"interactedElement\"\n >,\n ) => {\n const normalizedPayload = convertKeysToCamelCase(\n payload,\n ) as Omit<\n z.input<typeof questionnaireEventSchema>,\n \"interactedElement\"\n >;\n const result = questionnaireEventSchema.safeParse({\n ...normalizedPayload,\n interactedElement: \"Skip\",\n });\n if (!result.success) {\n if (isDev) console.warn(\"[Analytics] Invalid payload for \\\"Questionnaire Navigated\\\" (Skip):\", result.error.flatten()); // eslint-disable-line no-console\n return;\n }\n dispatch(\"Questionnaire Navigated\", result.data);\n },\n trackQuestionnaireContinue: (\n payload: AnalyticsPayloadWithout<\n typeof continueQuestionnaireEventSchema,\n \"interactedElement\"\n >,\n ) => {\n const normalizedPayload = convertKeysToCamelCase(\n payload,\n ) as Omit<\n z.input<typeof continueQuestionnaireEventSchema>,\n \"interactedElement\"\n >;\n const result = continueQuestionnaireEventSchema.safeParse({\n ...normalizedPayload,\n interactedElement: \"Continue\",\n });\n if (!result.success) {\n if (isDev) console.warn(\"[Analytics] Invalid payload for \\\"Questionnaire Navigated\\\" (Continue):\", result.error.flatten()); // eslint-disable-line no-console\n return;\n }\n dispatch(\"Questionnaire Navigated\", result.data);\n },\n trackQuestionnaireBack: (\n payload: AnalyticsPayloadWithout<\n typeof questionnaireEventSchema,\n \"interactedElement\"\n >,\n ) => {\n const normalizedPayload = convertKeysToCamelCase(\n payload,\n ) as Omit<\n z.input<typeof questionnaireEventSchema>,\n \"interactedElement\"\n >;\n const result = questionnaireEventSchema.safeParse({\n ...normalizedPayload,\n interactedElement: \"Back\",\n });\n if (!result.success) {\n if (isDev) console.warn(\"[Analytics] Invalid payload for \\\"Questionnaire Navigated\\\" (Back):\", result.error.flatten()); // eslint-disable-line no-console\n return;\n }\n dispatch(\"Questionnaire Navigated\", result.data);\n },\n trackClickUnit: createStrictTracker(\"Unit Card Clicked\", clickUnitSchema),\n trackHoverUnit: createStrictTracker(\"Unit Hovered\", hoverUnitSchema, ),\n trackLoadMore: (\n payload: AnalyticsPayload<typeof loadMoreSchema>,\n ) => {\n const normalizedPayload = convertKeysToCamelCase(\n payload,\n ) as z.input<typeof loadMoreSchema>;\n const result = loadMoreSchema.safeParse({\n unitCountDate: new Date().toISOString(),\n ...normalizedPayload,\n });\n if (!result.success) {\n if (isDev) console.warn(\"[Analytics] Invalid payload for \\\"More Units Loaded\\\":\", result.error.flatten()); // eslint-disable-line no-console\n return;\n }\n dispatch(\"More Units Loaded\", result.data);\n },\n trackFilterOpened: createStrictTracker(\"Filter Opened\", filterOpenSchema),\n trackFilterCanceled: createStrictTracker(\n \"Filter Cleared\",\n filterMutationSchema,\n ),\n trackFilterApplied: createStrictTracker(\n \"Filter Applied\",\n filterMutationSchema,\n ),\n trackOpenSort: (\n payload: AnalyticsPayload<typeof sortOpenSchema>,\n ) => {\n const normalizedPayload = convertKeysToCamelCase(\n payload,\n ) as z.input<typeof sortOpenSchema>;\n const result = sortOpenSchema.safeParse({\n unitCountDate: new Date().toISOString(),\n ...normalizedPayload,\n });\n if (!result.success) {\n if (isDev) console.warn(\"[Analytics] Invalid payload for \\\"Sort Opened\\\":\", result.error.flatten()); // eslint-disable-line no-console\n return;\n }\n dispatch(\"Sort Opened\", result.data);\n },\n trackSelectSort: createStrictTracker(\"Sort Applied\", sortEventSchema),\n trackCancelSort: createStrictTracker(\"Sort Canceled\", sortEventSchema),\n trackClickUnitFavorites: createStrictTracker(\n \"Unit Favorited\",\n clickUnitFavoritesSchema,\n ),\n trackUnitUnfavorited: createStrictTracker(\n \"Unit Unfavorited\",\n unitUnfavoritedSchema,\n ),\n trackQuestionnaireResult: createStrictTracker(\n \"Questionnaire Submitted\",\n questionnaireResultSchema,\n ),\n trackScheduleTourFormInteracted: createStrictTracker(\n \"Schedule Tour Form Interacted\",\n scheduleTourFormSchema,\n ),\n trackScheduleTourFormSubmitted: createStrictTracker(\n \"Schedule Tour Form Submitted\",\n scheduleTourFormSchema,\n ),\n trackScheduleTourUrlClicked: createStrictTracker(\n \"Schedule Tour URL Clicked\",\n scheduleTourFormSchema,\n ),\n trackGetInTouchFormOpened: createStrictTracker(\n \"Form Opened\",\n getInTouchFormSchema,\n ),\n trackGetInTouchFormSubmitted: createStrictTracker(\n \"Form Submitted\",\n getInTouchFormSchema,\n ),\n trackStyleDrawerOpened: createStrictTracker(\n \"Style Menu Opened\",\n styleDrawerSchema,\n ),\n trackStyleDrawerChanged: createStrictTracker(\n \"Style Changed\",\n styleDrawerSchema,\n ),\n trackOpeningStyleImpression: createStrictTracker(\n \"Opening Style Modal Impression\",\n styleDrawerSchema,\n ),\n trackOpeningStyleSlected: createStrictTracker(\n \"Opening Style Selected\",\n styleDrawerSchema,\n ),\n trackFurnitureViewed: createStrictTracker(\n \"Furniture Viewed\",\n furnitureInteractionSchema,\n ),\n trackFurnitureExternalUrlClicked: createStrictTracker(\n \"Purchase Link Clicked\",\n furnitureExternalUrlSchema,\n ),\n trackFurnitureSaved: createStrictTracker(\n \"Furniture Saved\",\n furnitureSavedSchema,\n ),\n trackFurnitureModalOpened: createStrictTracker(\n \"Furniture Modal Opened\",\n furnitureModalOpenedSchema,\n ),\n trackFurnitureCarouselToggled: createStrictTracker(\n \"Furniture Carousel Toggled\",\n furnitureCarouselSchema,\n ),\n trackRoomEntered: createStrictTracker(\n \"Room Entered\",\n roomEnteredSchema,\n ),\n trackRoomLeft: createStrictTracker(\n \"Room Left\",\n roomLeftSchema,\n ),\n trackVideoStarted: createStrictTracker(\n \"Video Started\",\n videoStartedSchema,\n ),\n trackEmailRedirect: createStrictTracker(\n \"Email Tracked\",\n emailTrackedSchema,\n ),\n trackToastImpression: createStrictTracker(\n \"Toast Impression\",\n toastSchema,\n ),\n trackToastClicked: createStrictTracker(\n \"Toast Clicked\",\n toastSchema,\n ),\n trackToastClosed: createStrictTracker(\n \"Toast Closed\",\n toastSchema,\n ),\n trackContentModalOpened: createStrictTracker(\n \"Content Modal Opened\",\n contentModalOpenedSchema,\n ),\n trackBuildingDetailsModalOpened: createStrictTracker(\n \"Building Details Modal\",\n buildingDetailsModalSchema,\n ),\n trackSubscriptionImpression: createStrictTracker(\n \"Subscription Impression\",\n subscriptionImpressionSchema,\n ),\n trackSubscriptionInteracted: createStrictTracker(\n \"Subscription Interacted\",\n subscriptionInteractedSchema,\n ),\n trackSubscriptionSubmitted: createStrictTracker(\n \"Subscription Submitted\",\n subscriptionSubmittedSchema,\n ),\n trackSubscriptionRemoved: createStrictTracker(\n \"Subscription Removed\",\n subscriptionRemovedSchema,\n ),\n trackWebPageViewed: createStrictTracker(\n \"Page Viewed\",\n webPageViewedSchema,\n ),\n trackWebPageRoomViewed: createStrictTracker(\n \"Page Viewed\",\n webPageRoomViewedSchema,\n ),\n trackEmbedPageViewed: createStrictTracker(\n \"Embed Impression\",\n embedPageViewedSchema,\n ),\n trackEmailClickGeneric: (data: { event_name: string }) => createStrictTracker(\n `Email Interaction - ${data.event_name}`,\n embedPageViewSchemaWithUTM,\n ),\n trackEmailClickConfirmation: () => createStrictTracker(\n \"Notify Me Email Confirmation\",\n embedPageViewSchemaWithUTM,\n ),\n trackEmailClickNotification: () => createStrictTracker(\n \"Notify Me Email Notification\",\n embedPageViewSchemaWithUTM,\n ),\n };\n}\n\nexport function useTrackingEvents() {\n const { isDev } = useAnalytics();\n const trackEvent = useTrackEvent();\n return buildTrackingEvents(trackEvent, isDev);\n}\n"],"names":["QuestionEnumValues","SortEnumValues","QuestionnaireInteractionValues","propertyContextSchema","z.object","z.string","propertyWithNameSchema","viewAllUnitsSchema","z.number","loadMoreSchema","scheduleTourFormSchema","z.unknown","questionnaireEventSchema","z.enum","continueQuestionnaireEventSchema","z.any","value","normalizeToStringArray","unitWithPropertyNameSchema","getInTouchFormSchema","z.boolean","styleDrawerSchema","furnitureInteractionSchema","furnitureExternalUrlSchema","furnitureSavedSchema","furnitureModalOpenedSchema","furnitureCarouselSchema","roomEnteredSchema","roomLeftSchema","videoStartedSchema","emailTrackedSchema","webPageViewedBaseSchema","webPageViewedSchema","webPageRoomViewedSchema","embedPageViewedSchema","embedPageViewSchemaWithUTM","toastSchema","contentModalOpenedSchema","buildingDetailsModalSchema","subscriptionImpressionSchema","subscriptionInteractedSchema","subscriptionSubmittedSchema","z.array","z.union","subscriptionRemovedSchema","hoverUnitSchema","selectionSchema","filterOpenSchema","filterMutationSchema","sortEventSchema","sortOpenSchema","questionnaireResultSchema","clickUnitSchema","clickUnitFavoritesSchema","unitUnfavoritedSchema","useTrackEvent","analytics","useAnalytics","eventName","data","payload","convertKeysToSnakeCase","createStrictTrackerInternal","schema","dispatch","options","payloadToValidate","convertKeysToCamelCase","result","buildTrackingEvents","trackEvent","isDev","finalPayload","createStrictTracker","normalizedPayload","useTrackingEvents"],"mappings":"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"}
|
|
@@ -1835,7 +1835,7 @@ export declare function buildTrackingEvents(trackEvent: TrackEventFn, isDev?: bo
|
|
|
1835
1835
|
unitSlug: string;
|
|
1836
1836
|
unitBedrooms: number;
|
|
1837
1837
|
}) => void;
|
|
1838
|
-
|
|
1838
|
+
trackEmailClickGeneric: (data: {
|
|
1839
1839
|
event_name: string;
|
|
1840
1840
|
}) => (payload: {
|
|
1841
1841
|
propertyId: string;
|
|
@@ -1848,6 +1848,28 @@ export declare function buildTrackingEvents(trackEvent: TrackEventFn, isDev?: bo
|
|
|
1848
1848
|
utmMedium: string;
|
|
1849
1849
|
utmName: string;
|
|
1850
1850
|
}) => void;
|
|
1851
|
+
trackEmailClickConfirmation: () => (payload: {
|
|
1852
|
+
propertyId: string;
|
|
1853
|
+
propertySlug: string;
|
|
1854
|
+
unitId: string;
|
|
1855
|
+
propertyName: string;
|
|
1856
|
+
unitName: string;
|
|
1857
|
+
unitSlug: string;
|
|
1858
|
+
utmSource: string;
|
|
1859
|
+
utmMedium: string;
|
|
1860
|
+
utmName: string;
|
|
1861
|
+
}) => void;
|
|
1862
|
+
trackEmailClickNotification: () => (payload: {
|
|
1863
|
+
propertyId: string;
|
|
1864
|
+
propertySlug: string;
|
|
1865
|
+
unitId: string;
|
|
1866
|
+
propertyName: string;
|
|
1867
|
+
unitName: string;
|
|
1868
|
+
unitSlug: string;
|
|
1869
|
+
utmSource: string;
|
|
1870
|
+
utmMedium: string;
|
|
1871
|
+
utmName: string;
|
|
1872
|
+
}) => void;
|
|
1851
1873
|
};
|
|
1852
1874
|
export declare function useTrackingEvents(): {
|
|
1853
1875
|
trackViewAllUnits: (payload: AnalyticsPayload<typeof viewAllUnitsSchema>) => void;
|
|
@@ -2320,7 +2342,7 @@ export declare function useTrackingEvents(): {
|
|
|
2320
2342
|
unitSlug: string;
|
|
2321
2343
|
unitBedrooms: number;
|
|
2322
2344
|
}) => void;
|
|
2323
|
-
|
|
2345
|
+
trackEmailClickGeneric: (data: {
|
|
2324
2346
|
event_name: string;
|
|
2325
2347
|
}) => (payload: {
|
|
2326
2348
|
propertyId: string;
|
|
@@ -2333,5 +2355,27 @@ export declare function useTrackingEvents(): {
|
|
|
2333
2355
|
utmMedium: string;
|
|
2334
2356
|
utmName: string;
|
|
2335
2357
|
}) => void;
|
|
2358
|
+
trackEmailClickConfirmation: () => (payload: {
|
|
2359
|
+
propertyId: string;
|
|
2360
|
+
propertySlug: string;
|
|
2361
|
+
unitId: string;
|
|
2362
|
+
propertyName: string;
|
|
2363
|
+
unitName: string;
|
|
2364
|
+
unitSlug: string;
|
|
2365
|
+
utmSource: string;
|
|
2366
|
+
utmMedium: string;
|
|
2367
|
+
utmName: string;
|
|
2368
|
+
}) => void;
|
|
2369
|
+
trackEmailClickNotification: () => (payload: {
|
|
2370
|
+
propertyId: string;
|
|
2371
|
+
propertySlug: string;
|
|
2372
|
+
unitId: string;
|
|
2373
|
+
propertyName: string;
|
|
2374
|
+
unitName: string;
|
|
2375
|
+
unitSlug: string;
|
|
2376
|
+
utmSource: string;
|
|
2377
|
+
utmMedium: string;
|
|
2378
|
+
utmName: string;
|
|
2379
|
+
}) => void;
|
|
2336
2380
|
};
|
|
2337
2381
|
export {};
|
|
@@ -1,46 +1,46 @@
|
|
|
1
|
-
import { convertKeysToSnakeCase as
|
|
1
|
+
import { convertKeysToSnakeCase as C, convertKeysToCamelCase as l } from "../../utils/casing.mjs";
|
|
2
2
|
import { normalizeToStringArray as x } from "../../utils/collections.mjs";
|
|
3
|
-
import { useAnalytics as
|
|
4
|
-
import { object as c, string as e, number as
|
|
5
|
-
const
|
|
3
|
+
import { useAnalytics as U } from "./AnalyticsProvider.mjs";
|
|
4
|
+
import { object as c, string as e, number as n, enum as p, any as T, unknown as w, boolean as y, array as N, union as O } from "../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/types.mjs";
|
|
5
|
+
const Se = ["location", "budget", "size", "other"], E = [
|
|
6
6
|
"cost_low_to_high",
|
|
7
7
|
"cost_high_to_low",
|
|
8
8
|
"newest",
|
|
9
9
|
"relevance"
|
|
10
|
-
],
|
|
10
|
+
], M = [
|
|
11
11
|
"Skip",
|
|
12
12
|
"Continue",
|
|
13
13
|
"Back"
|
|
14
|
-
],
|
|
14
|
+
], f = c({
|
|
15
15
|
propertyId: e().min(1, "propertyId is required"),
|
|
16
16
|
propertySlug: e().min(1, "propertySlug is required"),
|
|
17
17
|
propertyName: e().min(1, "propertyName is required")
|
|
18
|
-
}), d =
|
|
18
|
+
}), d = f.extend({
|
|
19
19
|
propertyName: e().min(1, "propertyName is required")
|
|
20
20
|
}), V = d.extend({
|
|
21
|
-
totalUnitsAvailable:
|
|
22
|
-
resultsUnitCount:
|
|
21
|
+
totalUnitsAvailable: n().int().nonnegative(),
|
|
22
|
+
resultsUnitCount: n().int().nonnegative(),
|
|
23
23
|
unitCountDate: e().optional()
|
|
24
|
-
}),
|
|
25
|
-
totalUnitsAvailable:
|
|
26
|
-
resultsUnitCount:
|
|
24
|
+
}), B = d.extend({
|
|
25
|
+
totalUnitsAvailable: n().int().nonnegative(),
|
|
26
|
+
resultsUnitCount: n().int().nonnegative(),
|
|
27
27
|
unitCountDate: e().optional()
|
|
28
|
-
}),
|
|
29
|
-
totalUnitsAvailable:
|
|
30
|
-
resultsUnitCount:
|
|
28
|
+
}), g = d.extend({
|
|
29
|
+
totalUnitsAvailable: n().int().nonnegative(),
|
|
30
|
+
resultsUnitCount: n().int().nonnegative(),
|
|
31
31
|
unitCountDate: e().optional(),
|
|
32
|
-
lifestylePreferences:
|
|
33
|
-
}),
|
|
34
|
-
funnelStep:
|
|
32
|
+
lifestylePreferences: w().optional()
|
|
33
|
+
}), k = d.extend({
|
|
34
|
+
funnelStep: n().int().nonnegative(),
|
|
35
35
|
profileQuestion: e().min(1, "profileQuestion is required"),
|
|
36
|
-
interactedElement: p(
|
|
36
|
+
interactedElement: p(M),
|
|
37
37
|
questionEnum: e().optional()
|
|
38
|
-
}),
|
|
39
|
-
selectedAnswersEnumArray:
|
|
38
|
+
}), _ = k.extend({
|
|
39
|
+
selectedAnswersEnumArray: T().transform((s) => x(s)).refine((s) => Array.isArray(s), {
|
|
40
40
|
message: "selectedAnswersEnumArray must resolve to an array"
|
|
41
41
|
})
|
|
42
42
|
});
|
|
43
|
-
|
|
43
|
+
f.extend({
|
|
44
44
|
unitId: e().min(1, "unitId is required"),
|
|
45
45
|
unitName: e().min(1, "unitName is required"),
|
|
46
46
|
unitSlug: e().min(1, "unitSlug is required")
|
|
@@ -49,22 +49,22 @@ const a = d.extend({
|
|
|
49
49
|
unitId: e().min(1, "unitId is required"),
|
|
50
50
|
unitName: e().min(1, "unitName is required"),
|
|
51
51
|
unitSlug: e().min(1, "unitSlug is required")
|
|
52
|
-
}),
|
|
52
|
+
}), I = a.extend({
|
|
53
53
|
buttonName: e().min(1, "buttonName is required"),
|
|
54
54
|
formName: e().min(1, "formName is required"),
|
|
55
55
|
styleId: e().min(1, "styleId is required"),
|
|
56
56
|
styleName: e().min(1, "styleName is required"),
|
|
57
|
-
unitBedrooms:
|
|
57
|
+
unitBedrooms: n().int().nonnegative(),
|
|
58
58
|
favoritedUnit: y()
|
|
59
|
-
}),
|
|
59
|
+
}), S = a.extend({
|
|
60
60
|
roomName: e().min(1, "roomName is required"),
|
|
61
|
-
unitBedrooms:
|
|
61
|
+
unitBedrooms: n().int().nonnegative(),
|
|
62
62
|
styleId: e().min(1, "styleId is required"),
|
|
63
63
|
styleName: e().min(1, "styleName is required"),
|
|
64
64
|
favoritedUnit: y()
|
|
65
|
-
}),
|
|
65
|
+
}), Q = a.extend({
|
|
66
66
|
roomName: e().min(1, "roomName is required"),
|
|
67
|
-
unitBedrooms:
|
|
67
|
+
unitBedrooms: n().int().nonnegative(),
|
|
68
68
|
styleId: e().min(1, "styleId is required"),
|
|
69
69
|
styleName: e().min(1, "styleName is required"),
|
|
70
70
|
furnitureId: e().min(1, "furnitureId is required"),
|
|
@@ -72,9 +72,9 @@ const a = d.extend({
|
|
|
72
72
|
type: p(["click", "hover_on", "hover_off"]),
|
|
73
73
|
brandName: e().min(1, "brandName is required"),
|
|
74
74
|
category: e().min(1, "category is required")
|
|
75
|
-
}),
|
|
75
|
+
}), D = a.extend({
|
|
76
76
|
roomName: e().min(1, "roomName is required"),
|
|
77
|
-
unitBedrooms:
|
|
77
|
+
unitBedrooms: n().int().nonnegative(),
|
|
78
78
|
styleId: e().min(1, "styleId is required"),
|
|
79
79
|
styleName: e().min(1, "styleName is required"),
|
|
80
80
|
furnitureId: e().min(1, "furnitureId is required"),
|
|
@@ -84,28 +84,28 @@ const a = d.extend({
|
|
|
84
84
|
favoritedUnit: y(),
|
|
85
85
|
brandName: e().min(1, "brandName is required"),
|
|
86
86
|
category: e().min(1, "category is required")
|
|
87
|
-
}),
|
|
87
|
+
}), R = a.extend({
|
|
88
88
|
roomName: e().min(1, "roomName is required"),
|
|
89
|
-
unitBedrooms:
|
|
89
|
+
unitBedrooms: n().int().nonnegative(),
|
|
90
90
|
styleId: e().min(1, "styleId is required"),
|
|
91
91
|
styleName: e().min(1, "styleName is required"),
|
|
92
92
|
furnitureId: e().min(1, "furnitureId is required"),
|
|
93
93
|
furnitureName: e().min(1, "furnitureName is required"),
|
|
94
94
|
brandName: e().min(1, "brandName is required"),
|
|
95
95
|
category: e().min(1, "category is required")
|
|
96
|
-
}),
|
|
96
|
+
}), L = a.extend({
|
|
97
97
|
roomName: e().min(1, "roomName is required"),
|
|
98
|
-
unitBedrooms:
|
|
98
|
+
unitBedrooms: n().int().nonnegative(),
|
|
99
99
|
styleId: e().min(1, "styleId is required"),
|
|
100
100
|
styleName: e().min(1, "styleName is required"),
|
|
101
101
|
furnitureId: e().min(1, "furnitureId is required"),
|
|
102
102
|
furnitureName: e().min(1, "furnitureName is required"),
|
|
103
103
|
brandName: e().min(1, "brandName is required"),
|
|
104
104
|
category: e().min(1, "category is required")
|
|
105
|
-
}),
|
|
105
|
+
}), z = a.extend({
|
|
106
106
|
method: p(["Prev", "Next"]),
|
|
107
107
|
roomName: e().min(1, "roomName is required"),
|
|
108
|
-
unitBedrooms:
|
|
108
|
+
unitBedrooms: n().int().nonnegative(),
|
|
109
109
|
styleId: e().min(1, "styleId is required"),
|
|
110
110
|
styleName: e().min(1, "styleName is required"),
|
|
111
111
|
furnitureId: e().min(1, "furnitureId is required"),
|
|
@@ -114,47 +114,47 @@ const a = d.extend({
|
|
|
114
114
|
category: e().min(1, "category is required")
|
|
115
115
|
}), F = a.extend({
|
|
116
116
|
roomName: e().min(1, "roomName is required"),
|
|
117
|
-
unitBedrooms:
|
|
117
|
+
unitBedrooms: n().int().nonnegative(),
|
|
118
118
|
styleId: e().min(1, "styleId is required"),
|
|
119
119
|
styleName: e().min(1, "styleName is required"),
|
|
120
120
|
method: p(["Navigation", "Map"])
|
|
121
|
-
}),
|
|
122
|
-
timeInRoom:
|
|
123
|
-
}),
|
|
121
|
+
}), W = F.extend({
|
|
122
|
+
timeInRoom: n().int().nonnegative()
|
|
123
|
+
}), G = a.extend({
|
|
124
124
|
roomName: e().min(1, "roomName is required"),
|
|
125
|
-
unitBedrooms:
|
|
125
|
+
unitBedrooms: n().int().nonnegative(),
|
|
126
126
|
styleId: e().min(1, "styleId is required"),
|
|
127
127
|
styleName: e().min(1, "styleName is required"),
|
|
128
128
|
method: p(["On Click Play"]),
|
|
129
|
-
videoCurrentTime:
|
|
130
|
-
videoDuration:
|
|
131
|
-
videoPercent:
|
|
129
|
+
videoCurrentTime: n().int().nonnegative(),
|
|
130
|
+
videoDuration: n().int().nonnegative(),
|
|
131
|
+
videoPercent: n().int().nonnegative(),
|
|
132
132
|
videoFilename: e().min(1, "videoFilename is required")
|
|
133
133
|
}), j = a.extend({
|
|
134
134
|
utmSource: e().min(1, "utm_source is required"),
|
|
135
135
|
utmMedium: e().min(1, "utm_medium is required"),
|
|
136
136
|
utmName: e().min(1, "utm_name is required"),
|
|
137
|
-
unitBedrooms:
|
|
137
|
+
unitBedrooms: n().int().nonnegative(),
|
|
138
138
|
styleId: e().min(1, "styleId is required"),
|
|
139
139
|
styleName: e().min(1, "styleName is required"),
|
|
140
140
|
favoritedUnit: y()
|
|
141
|
-
}),
|
|
141
|
+
}), P = a.extend({
|
|
142
142
|
fullUrl: e().min(1, "fullUrl is required"),
|
|
143
143
|
datestamp: e().min(1, "datestamp is required")
|
|
144
|
-
}),
|
|
144
|
+
}), H = P.extend({
|
|
145
145
|
pageName: e().min(1, "pageName is required")
|
|
146
|
-
}),
|
|
146
|
+
}), J = P.extend({
|
|
147
147
|
roomName: e().min(1, "roomName is required")
|
|
148
|
-
}), J = a.extend({
|
|
149
|
-
unitBedrooms: t().int().nonnegative()
|
|
150
148
|
}), K = a.extend({
|
|
149
|
+
unitBedrooms: n().int().nonnegative()
|
|
150
|
+
}), q = a.extend({
|
|
151
151
|
utmSource: e().min(1, "utm_source is required"),
|
|
152
152
|
utmMedium: e().min(1, "utm_medium is required"),
|
|
153
153
|
utmName: e().min(1, "utm_name is required")
|
|
154
|
-
}),
|
|
154
|
+
}), v = a.extend({
|
|
155
155
|
toastCopy: e().min(1, "toastCopy is required")
|
|
156
156
|
}), $ = a.extend({
|
|
157
|
-
unitBedrooms:
|
|
157
|
+
unitBedrooms: n().int().nonnegative(),
|
|
158
158
|
styleId: e().min(1, "styleId is required"),
|
|
159
159
|
styleName: e().min(1, "styleName is required")
|
|
160
160
|
}), X = d, Y = d.extend({
|
|
@@ -162,7 +162,7 @@ const a = d.extend({
|
|
|
162
162
|
}), Z = c({
|
|
163
163
|
name: e().min(1, "name is required"),
|
|
164
164
|
properties: c({
|
|
165
|
-
propertyContextSchema:
|
|
165
|
+
propertyContextSchema: f,
|
|
166
166
|
buttonName: e().min(1, "buttonName is required"),
|
|
167
167
|
formName: e().min(1, "formName is required"),
|
|
168
168
|
pageName: e().min(1, "pageName is required"),
|
|
@@ -171,47 +171,47 @@ const a = d.extend({
|
|
|
171
171
|
}), ee = c({
|
|
172
172
|
name: e().min(1, "name is required"),
|
|
173
173
|
properties: c({
|
|
174
|
-
propertyContextSchema:
|
|
174
|
+
propertyContextSchema: f,
|
|
175
175
|
buttonName: e().min(1, "buttonName is required"),
|
|
176
176
|
formName: e().min(1, "formName is required"),
|
|
177
177
|
pageName: e().min(1, "pageName is required"),
|
|
178
|
-
bedrooms:
|
|
179
|
-
price:
|
|
178
|
+
bedrooms: N(O([e(), n()])).optional(),
|
|
179
|
+
price: n().nullable().optional()
|
|
180
180
|
})
|
|
181
|
-
}),
|
|
182
|
-
bedrooms:
|
|
183
|
-
price_min:
|
|
184
|
-
price_max:
|
|
185
|
-
highlights:
|
|
181
|
+
}), te = d.extend({
|
|
182
|
+
bedrooms: N(n()).optional(),
|
|
183
|
+
price_min: n().optional(),
|
|
184
|
+
price_max: n().optional(),
|
|
185
|
+
highlights: N(e()).optional(),
|
|
186
186
|
page_name: e().optional()
|
|
187
|
-
}),
|
|
187
|
+
}), ne = a.extend({
|
|
188
188
|
favoritedUnit: y(),
|
|
189
|
-
unitIndex:
|
|
190
|
-
}),
|
|
189
|
+
unitIndex: n().int().nonnegative()
|
|
190
|
+
}), A = T().transform((s) => x(s)).refine((s) => Array.isArray(s), {
|
|
191
191
|
message: "Selection must resolve to an array"
|
|
192
192
|
}), ie = d.extend({
|
|
193
|
-
filterIndex:
|
|
193
|
+
filterIndex: n().int().nonnegative(),
|
|
194
194
|
filterLabel: e().min(1, "filterLabel is required"),
|
|
195
|
-
selectedFiltersEnum:
|
|
195
|
+
selectedFiltersEnum: A,
|
|
196
196
|
filterName: e().optional()
|
|
197
|
-
}),
|
|
198
|
-
filterIndex:
|
|
197
|
+
}), h = d.extend({
|
|
198
|
+
filterIndex: n().int().nonnegative(),
|
|
199
199
|
filterLabel: e().min(1, "filterLabel is required"),
|
|
200
|
-
selectedFiltersEnum:
|
|
201
|
-
}),
|
|
202
|
-
sortIndex:
|
|
203
|
-
sortEnum: p(
|
|
200
|
+
selectedFiltersEnum: A
|
|
201
|
+
}), b = f.extend({
|
|
202
|
+
sortIndex: n().int().nonnegative(),
|
|
203
|
+
sortEnum: p(E)
|
|
204
204
|
}), re = d.extend({
|
|
205
|
-
sortIndex:
|
|
206
|
-
sortEnum: p(
|
|
207
|
-
resultsUnitCount:
|
|
205
|
+
sortIndex: n().int().nonnegative(),
|
|
206
|
+
sortEnum: p(E),
|
|
207
|
+
resultsUnitCount: n().int().nonnegative(),
|
|
208
208
|
unitCountDate: e().optional()
|
|
209
|
-
}), ae =
|
|
210
|
-
fullQuestionnaireSchemaJson:
|
|
209
|
+
}), ae = f.extend({
|
|
210
|
+
fullQuestionnaireSchemaJson: w().optional(),
|
|
211
211
|
resultsJson: c({
|
|
212
212
|
type: e().optional(),
|
|
213
|
-
total:
|
|
214
|
-
units:
|
|
213
|
+
total: n().int().nonnegative().optional(),
|
|
214
|
+
units: N(
|
|
215
215
|
c({
|
|
216
216
|
unitId: e().min(1, "unitId is required"),
|
|
217
217
|
unitName: e().optional()
|
|
@@ -220,38 +220,38 @@ const a = d.extend({
|
|
|
220
220
|
}).optional()
|
|
221
221
|
}), oe = a.extend({
|
|
222
222
|
favoritedUnit: y(),
|
|
223
|
-
unitIndex:
|
|
223
|
+
unitIndex: n().int().nonnegative()
|
|
224
224
|
}), se = a.extend({
|
|
225
225
|
favoritedUnit: y(),
|
|
226
|
-
unitIndex:
|
|
227
|
-
}),
|
|
226
|
+
unitIndex: n().int().nonnegative()
|
|
227
|
+
}), me = d.extend({
|
|
228
228
|
unitId: e().min(1, "unitId is required"),
|
|
229
229
|
unitName: e().min(1, "unitName is required"),
|
|
230
230
|
unitSlug: e().min(1, "unitSlug is required"),
|
|
231
|
-
resultsUnitCount:
|
|
231
|
+
resultsUnitCount: n().int().nonnegative(),
|
|
232
232
|
unitCountDate: e().optional(),
|
|
233
|
-
unitIndex:
|
|
233
|
+
unitIndex: n().int().nonnegative()
|
|
234
234
|
});
|
|
235
|
-
function
|
|
236
|
-
const s =
|
|
237
|
-
return (
|
|
238
|
-
const
|
|
239
|
-
s.track(
|
|
235
|
+
function ue() {
|
|
236
|
+
const s = U();
|
|
237
|
+
return (m, u) => {
|
|
238
|
+
const t = u == null ? u : C(u);
|
|
239
|
+
s.track(m, t);
|
|
240
240
|
};
|
|
241
241
|
}
|
|
242
|
-
const de = (s,
|
|
243
|
-
const o = l(r), i =
|
|
242
|
+
const de = (s, m, u, t) => (r) => {
|
|
243
|
+
const o = l(r), i = m.safeParse(o);
|
|
244
244
|
if (!i.success) {
|
|
245
|
-
|
|
245
|
+
t != null && t.isDev && console.warn(`[Analytics] Invalid payload for "${s}":`, i.error.issues);
|
|
246
246
|
return;
|
|
247
247
|
}
|
|
248
|
-
|
|
248
|
+
u(s, r);
|
|
249
249
|
};
|
|
250
|
-
function le(s,
|
|
251
|
-
const
|
|
252
|
-
const i =
|
|
250
|
+
function le(s, m = !1) {
|
|
251
|
+
const u = (r, o) => {
|
|
252
|
+
const i = C(o);
|
|
253
253
|
s(r, i);
|
|
254
|
-
},
|
|
254
|
+
}, t = (r, o) => de(r, o, u, { isDev: m });
|
|
255
255
|
return {
|
|
256
256
|
trackViewAllUnits: (r) => {
|
|
257
257
|
const o = l(
|
|
@@ -261,73 +261,73 @@ function le(s, u = !1) {
|
|
|
261
261
|
...o
|
|
262
262
|
});
|
|
263
263
|
if (!i.success) {
|
|
264
|
-
|
|
264
|
+
m && console.warn('[Analytics] Invalid payload for "View All Units":', i.error.flatten());
|
|
265
265
|
return;
|
|
266
266
|
}
|
|
267
|
-
|
|
267
|
+
u("View All Units", i.data);
|
|
268
268
|
},
|
|
269
269
|
trackQuestionnaireSkip: (r) => {
|
|
270
270
|
const o = l(
|
|
271
271
|
r
|
|
272
|
-
), i =
|
|
272
|
+
), i = k.safeParse({
|
|
273
273
|
...o,
|
|
274
274
|
interactedElement: "Skip"
|
|
275
275
|
});
|
|
276
276
|
if (!i.success) {
|
|
277
|
-
|
|
277
|
+
m && console.warn('[Analytics] Invalid payload for "Questionnaire Navigated" (Skip):', i.error.flatten());
|
|
278
278
|
return;
|
|
279
279
|
}
|
|
280
|
-
|
|
280
|
+
u("Questionnaire Navigated", i.data);
|
|
281
281
|
},
|
|
282
282
|
trackQuestionnaireContinue: (r) => {
|
|
283
283
|
const o = l(
|
|
284
284
|
r
|
|
285
|
-
), i =
|
|
285
|
+
), i = _.safeParse({
|
|
286
286
|
...o,
|
|
287
287
|
interactedElement: "Continue"
|
|
288
288
|
});
|
|
289
289
|
if (!i.success) {
|
|
290
|
-
|
|
290
|
+
m && console.warn('[Analytics] Invalid payload for "Questionnaire Navigated" (Continue):', i.error.flatten());
|
|
291
291
|
return;
|
|
292
292
|
}
|
|
293
|
-
|
|
293
|
+
u("Questionnaire Navigated", i.data);
|
|
294
294
|
},
|
|
295
295
|
trackQuestionnaireBack: (r) => {
|
|
296
296
|
const o = l(
|
|
297
297
|
r
|
|
298
|
-
), i =
|
|
298
|
+
), i = k.safeParse({
|
|
299
299
|
...o,
|
|
300
300
|
interactedElement: "Back"
|
|
301
301
|
});
|
|
302
302
|
if (!i.success) {
|
|
303
|
-
|
|
303
|
+
m && console.warn('[Analytics] Invalid payload for "Questionnaire Navigated" (Back):', i.error.flatten());
|
|
304
304
|
return;
|
|
305
305
|
}
|
|
306
|
-
|
|
306
|
+
u("Questionnaire Navigated", i.data);
|
|
307
307
|
},
|
|
308
|
-
trackClickUnit:
|
|
309
|
-
trackHoverUnit:
|
|
308
|
+
trackClickUnit: t("Unit Card Clicked", oe),
|
|
309
|
+
trackHoverUnit: t("Unit Hovered", ne),
|
|
310
310
|
trackLoadMore: (r) => {
|
|
311
311
|
const o = l(
|
|
312
312
|
r
|
|
313
|
-
), i =
|
|
313
|
+
), i = B.safeParse({
|
|
314
314
|
unitCountDate: (/* @__PURE__ */ new Date()).toISOString(),
|
|
315
315
|
...o
|
|
316
316
|
});
|
|
317
317
|
if (!i.success) {
|
|
318
|
-
|
|
318
|
+
m && console.warn('[Analytics] Invalid payload for "More Units Loaded":', i.error.flatten());
|
|
319
319
|
return;
|
|
320
320
|
}
|
|
321
|
-
|
|
321
|
+
u("More Units Loaded", i.data);
|
|
322
322
|
},
|
|
323
|
-
trackFilterOpened:
|
|
324
|
-
trackFilterCanceled:
|
|
323
|
+
trackFilterOpened: t("Filter Opened", ie),
|
|
324
|
+
trackFilterCanceled: t(
|
|
325
325
|
"Filter Cleared",
|
|
326
|
-
|
|
326
|
+
h
|
|
327
327
|
),
|
|
328
|
-
trackFilterApplied:
|
|
328
|
+
trackFilterApplied: t(
|
|
329
329
|
"Filter Applied",
|
|
330
|
-
|
|
330
|
+
h
|
|
331
331
|
),
|
|
332
332
|
trackOpenSort: (r) => {
|
|
333
333
|
const o = l(
|
|
@@ -337,161 +337,169 @@ function le(s, u = !1) {
|
|
|
337
337
|
...o
|
|
338
338
|
});
|
|
339
339
|
if (!i.success) {
|
|
340
|
-
|
|
340
|
+
m && console.warn('[Analytics] Invalid payload for "Sort Opened":', i.error.flatten());
|
|
341
341
|
return;
|
|
342
342
|
}
|
|
343
|
-
|
|
343
|
+
u("Sort Opened", i.data);
|
|
344
344
|
},
|
|
345
|
-
trackSelectSort:
|
|
346
|
-
trackCancelSort:
|
|
347
|
-
trackClickUnitFavorites:
|
|
345
|
+
trackSelectSort: t("Sort Applied", b),
|
|
346
|
+
trackCancelSort: t("Sort Canceled", b),
|
|
347
|
+
trackClickUnitFavorites: t(
|
|
348
348
|
"Unit Favorited",
|
|
349
349
|
se
|
|
350
350
|
),
|
|
351
|
-
trackUnitUnfavorited:
|
|
351
|
+
trackUnitUnfavorited: t(
|
|
352
352
|
"Unit Unfavorited",
|
|
353
|
-
|
|
353
|
+
me
|
|
354
354
|
),
|
|
355
|
-
trackQuestionnaireResult:
|
|
355
|
+
trackQuestionnaireResult: t(
|
|
356
356
|
"Questionnaire Submitted",
|
|
357
357
|
ae
|
|
358
358
|
),
|
|
359
|
-
trackScheduleTourFormInteracted:
|
|
359
|
+
trackScheduleTourFormInteracted: t(
|
|
360
360
|
"Schedule Tour Form Interacted",
|
|
361
|
-
|
|
361
|
+
g
|
|
362
362
|
),
|
|
363
|
-
trackScheduleTourFormSubmitted:
|
|
363
|
+
trackScheduleTourFormSubmitted: t(
|
|
364
364
|
"Schedule Tour Form Submitted",
|
|
365
|
-
|
|
365
|
+
g
|
|
366
366
|
),
|
|
367
|
-
trackScheduleTourUrlClicked:
|
|
367
|
+
trackScheduleTourUrlClicked: t(
|
|
368
368
|
"Schedule Tour URL Clicked",
|
|
369
|
-
|
|
369
|
+
g
|
|
370
370
|
),
|
|
371
|
-
trackGetInTouchFormOpened:
|
|
371
|
+
trackGetInTouchFormOpened: t(
|
|
372
372
|
"Form Opened",
|
|
373
|
-
|
|
373
|
+
I
|
|
374
374
|
),
|
|
375
|
-
trackGetInTouchFormSubmitted:
|
|
375
|
+
trackGetInTouchFormSubmitted: t(
|
|
376
376
|
"Form Submitted",
|
|
377
|
-
|
|
377
|
+
I
|
|
378
378
|
),
|
|
379
|
-
trackStyleDrawerOpened:
|
|
379
|
+
trackStyleDrawerOpened: t(
|
|
380
380
|
"Style Menu Opened",
|
|
381
|
-
|
|
381
|
+
S
|
|
382
382
|
),
|
|
383
|
-
trackStyleDrawerChanged:
|
|
383
|
+
trackStyleDrawerChanged: t(
|
|
384
384
|
"Style Changed",
|
|
385
|
-
|
|
385
|
+
S
|
|
386
386
|
),
|
|
387
|
-
trackOpeningStyleImpression:
|
|
387
|
+
trackOpeningStyleImpression: t(
|
|
388
388
|
"Opening Style Modal Impression",
|
|
389
|
-
|
|
389
|
+
S
|
|
390
390
|
),
|
|
391
|
-
trackOpeningStyleSlected:
|
|
391
|
+
trackOpeningStyleSlected: t(
|
|
392
392
|
"Opening Style Selected",
|
|
393
|
-
|
|
393
|
+
S
|
|
394
394
|
),
|
|
395
|
-
trackFurnitureViewed:
|
|
395
|
+
trackFurnitureViewed: t(
|
|
396
396
|
"Furniture Viewed",
|
|
397
|
-
|
|
397
|
+
Q
|
|
398
398
|
),
|
|
399
|
-
trackFurnitureExternalUrlClicked:
|
|
399
|
+
trackFurnitureExternalUrlClicked: t(
|
|
400
400
|
"Purchase Link Clicked",
|
|
401
|
-
|
|
401
|
+
D
|
|
402
402
|
),
|
|
403
|
-
trackFurnitureSaved:
|
|
403
|
+
trackFurnitureSaved: t(
|
|
404
404
|
"Furniture Saved",
|
|
405
|
-
|
|
405
|
+
R
|
|
406
406
|
),
|
|
407
|
-
trackFurnitureModalOpened:
|
|
407
|
+
trackFurnitureModalOpened: t(
|
|
408
408
|
"Furniture Modal Opened",
|
|
409
|
-
|
|
409
|
+
L
|
|
410
410
|
),
|
|
411
|
-
trackFurnitureCarouselToggled:
|
|
411
|
+
trackFurnitureCarouselToggled: t(
|
|
412
412
|
"Furniture Carousel Toggled",
|
|
413
|
-
|
|
413
|
+
z
|
|
414
414
|
),
|
|
415
|
-
trackRoomEntered:
|
|
415
|
+
trackRoomEntered: t(
|
|
416
416
|
"Room Entered",
|
|
417
417
|
F
|
|
418
418
|
),
|
|
419
|
-
trackRoomLeft:
|
|
419
|
+
trackRoomLeft: t(
|
|
420
420
|
"Room Left",
|
|
421
|
-
|
|
421
|
+
W
|
|
422
422
|
),
|
|
423
|
-
trackVideoStarted:
|
|
423
|
+
trackVideoStarted: t(
|
|
424
424
|
"Video Started",
|
|
425
|
-
|
|
425
|
+
G
|
|
426
426
|
),
|
|
427
|
-
trackEmailRedirect:
|
|
427
|
+
trackEmailRedirect: t(
|
|
428
428
|
"Email Tracked",
|
|
429
429
|
j
|
|
430
430
|
),
|
|
431
|
-
trackToastImpression:
|
|
431
|
+
trackToastImpression: t(
|
|
432
432
|
"Toast Impression",
|
|
433
|
-
|
|
433
|
+
v
|
|
434
434
|
),
|
|
435
|
-
trackToastClicked:
|
|
435
|
+
trackToastClicked: t(
|
|
436
436
|
"Toast Clicked",
|
|
437
|
-
|
|
437
|
+
v
|
|
438
438
|
),
|
|
439
|
-
trackToastClosed:
|
|
439
|
+
trackToastClosed: t(
|
|
440
440
|
"Toast Closed",
|
|
441
|
-
|
|
441
|
+
v
|
|
442
442
|
),
|
|
443
|
-
trackContentModalOpened:
|
|
443
|
+
trackContentModalOpened: t(
|
|
444
444
|
"Content Modal Opened",
|
|
445
445
|
$
|
|
446
446
|
),
|
|
447
|
-
trackBuildingDetailsModalOpened:
|
|
447
|
+
trackBuildingDetailsModalOpened: t(
|
|
448
448
|
"Building Details Modal",
|
|
449
449
|
X
|
|
450
450
|
),
|
|
451
|
-
trackSubscriptionImpression:
|
|
451
|
+
trackSubscriptionImpression: t(
|
|
452
452
|
"Subscription Impression",
|
|
453
453
|
Y
|
|
454
454
|
),
|
|
455
|
-
trackSubscriptionInteracted:
|
|
455
|
+
trackSubscriptionInteracted: t(
|
|
456
456
|
"Subscription Interacted",
|
|
457
457
|
Z
|
|
458
458
|
),
|
|
459
|
-
trackSubscriptionSubmitted:
|
|
459
|
+
trackSubscriptionSubmitted: t(
|
|
460
460
|
"Subscription Submitted",
|
|
461
461
|
ee
|
|
462
462
|
),
|
|
463
|
-
trackSubscriptionRemoved:
|
|
463
|
+
trackSubscriptionRemoved: t(
|
|
464
464
|
"Subscription Removed",
|
|
465
|
-
|
|
465
|
+
te
|
|
466
466
|
),
|
|
467
|
-
trackWebPageViewed:
|
|
467
|
+
trackWebPageViewed: t(
|
|
468
468
|
"Page Viewed",
|
|
469
|
-
|
|
469
|
+
H
|
|
470
470
|
),
|
|
471
|
-
trackWebPageRoomViewed:
|
|
471
|
+
trackWebPageRoomViewed: t(
|
|
472
472
|
"Page Viewed",
|
|
473
|
-
|
|
473
|
+
J
|
|
474
474
|
),
|
|
475
|
-
trackEmbedPageViewed:
|
|
475
|
+
trackEmbedPageViewed: t(
|
|
476
476
|
"Embed Impression",
|
|
477
|
-
|
|
477
|
+
K
|
|
478
478
|
),
|
|
479
|
-
|
|
479
|
+
trackEmailClickGeneric: (r) => t(
|
|
480
480
|
`Email Interaction - ${r.event_name}`,
|
|
481
|
-
|
|
481
|
+
q
|
|
482
|
+
),
|
|
483
|
+
trackEmailClickConfirmation: () => t(
|
|
484
|
+
"Notify Me Email Confirmation",
|
|
485
|
+
q
|
|
486
|
+
),
|
|
487
|
+
trackEmailClickNotification: () => t(
|
|
488
|
+
"Notify Me Email Notification",
|
|
489
|
+
q
|
|
482
490
|
)
|
|
483
491
|
};
|
|
484
492
|
}
|
|
485
|
-
function
|
|
486
|
-
const { isDev: s } =
|
|
487
|
-
return le(
|
|
493
|
+
function Ne() {
|
|
494
|
+
const { isDev: s } = U(), m = ue();
|
|
495
|
+
return le(m, s);
|
|
488
496
|
}
|
|
489
497
|
export {
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
498
|
+
Se as QuestionEnumValues,
|
|
499
|
+
M as QuestionnaireInteractionValues,
|
|
500
|
+
E as SortEnumValues,
|
|
493
501
|
le as buildTrackingEvents,
|
|
494
|
-
|
|
495
|
-
|
|
502
|
+
ue as useTrackEvent,
|
|
503
|
+
Ne as useTrackingEvents
|
|
496
504
|
};
|
|
497
505
|
//# sourceMappingURL=analytics.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analytics.mjs","sources":["../../../src/features/analytics/analytics.ts"],"sourcesContent":["import { z } from \"zod\";\n\nimport {\n convertKeysToCamelCase,\n convertKeysToSnakeCase,\n} from \"../../utils/casing\";\nimport { normalizeToStringArray } from \"../../utils/collections\";\nimport { useAnalytics } from \"./AnalyticsProvider\";\n\ntype AnalyticsPayload<Schema extends z.ZodTypeAny> = z.input<Schema>;\n\ntype AnalyticsPayloadWithout<\n Schema extends z.ZodTypeAny,\n Keys extends PropertyKey,\n> = Omit<AnalyticsPayload<Schema>, Keys>;\n\nexport const QuestionEnumValues = [\"location\", \"budget\", \"size\", \"other\"] as const;\nexport type QuestionEnum = (typeof QuestionEnumValues)[number];\nexport type FilterEnum = string;\nexport const SortEnumValues = [\n \"cost_low_to_high\",\n \"cost_high_to_low\",\n \"newest\",\n \"relevance\",\n] as const;\nexport type SortEnum = (typeof SortEnumValues)[number];\nexport const QuestionnaireInteractionValues = [\n \"Skip\",\n \"Continue\",\n \"Back\",\n] as const;\nexport type QuestionnaireInteraction =\n (typeof QuestionnaireInteractionValues)[number];\n\nconst propertyContextSchema = z.object({\n propertyId: z.string().min(1, \"propertyId is required\"),\n propertySlug: z.string().min(1, \"propertySlug is required\"),\n propertyName: z.string().min(1, \"propertyName is required\"),\n});\n\nconst propertyWithNameSchema = propertyContextSchema.extend({\n propertyName: z.string().min(1, \"propertyName is required\"),\n});\n\nconst viewAllUnitsSchema = propertyWithNameSchema.extend({\n totalUnitsAvailable: z.number().int().nonnegative(),\n resultsUnitCount: z.number().int().nonnegative(),\n unitCountDate: z.string().optional(),\n});\n\nconst loadMoreSchema = propertyWithNameSchema.extend({\n totalUnitsAvailable: z.number().int().nonnegative(),\n resultsUnitCount: z.number().int().nonnegative(),\n unitCountDate: z.string().optional(),\n});\n\nconst scheduleTourFormSchema = propertyWithNameSchema.extend({\n totalUnitsAvailable: z.number().int().nonnegative(),\n resultsUnitCount: z.number().int().nonnegative(),\n unitCountDate: z.string().optional(),\n lifestylePreferences: z.unknown().optional(),\n});\n\nconst questionnaireEventSchema = propertyWithNameSchema.extend({\n funnelStep: z.number().int().nonnegative(),\n profileQuestion: z.string().min(1, \"profileQuestion is required\"),\n interactedElement: z.enum(QuestionnaireInteractionValues),\n questionEnum: z.string().optional(),\n});\n\nconst continueQuestionnaireEventSchema = questionnaireEventSchema.extend({\n selectedAnswersEnumArray: z\n .any()\n .transform((value) => normalizeToStringArray(value))\n .refine((value): value is string[] => Array.isArray(value), {\n message: \"selectedAnswersEnumArray must resolve to an array\",\n }),\n});\n\nconst unitEventSchema = propertyContextSchema.extend({\n unitId: z.string().min(1, \"unitId is required\"),\n unitName: z.string().min(1, \"unitName is required\"),\n unitSlug: z.string().min(1, \"unitSlug is required\"),\n});\nconst unitWithPropertyNameSchema = propertyWithNameSchema.extend({\n unitId: z.string().min(1, \"unitId is required\"),\n unitName: z.string().min(1, \"unitName is required\"),\n unitSlug: z.string().min(1, \"unitSlug is required\"),\n});\nconst getInTouchFormSchema = unitWithPropertyNameSchema.extend({\n buttonName: z.string().min(1, \"buttonName is required\"),\n formName: z.string().min(1, \"formName is required\"),\n\n styleId: z.string().min(1, \"styleId is required\"),\n styleName: z.string().min(1, \"styleName is required\"),\n unitBedrooms: z.number().int().nonnegative(),\n favoritedUnit: z.boolean(),\n});\nconst styleDrawerSchema = unitWithPropertyNameSchema.extend({\n roomName: z.string().min(1, \"roomName is required\"),\n unitBedrooms: z.number().int().nonnegative(),\n\n styleId: z.string().min(1, \"styleId is required\"),\n styleName: z.string().min(1, \"styleName is required\"),\n favoritedUnit: z.boolean(),\n});\nconst furnitureInteractionSchema = unitWithPropertyNameSchema.extend({\n roomName: z.string().min(1, \"roomName is required\"),\n unitBedrooms: z.number().int().nonnegative(),\n\n styleId: z.string().min(1, \"styleId is required\"),\n styleName: z.string().min(1, \"styleName is required\"),\n\n furnitureId: z.string().min(1, \"furnitureId is required\"),\n furnitureName: z.string().min(1, \"furnitureName is required\"),\n type: z.enum([\"click\", \"hover_on\", \"hover_off\"]),\n brandName: z.string().min(1, \"brandName is required\"),\n category: z.string().min(1, \"category is required\"),\n})\nconst furnitureExternalUrlSchema = unitWithPropertyNameSchema.extend({\n roomName: z.string().min(1, \"roomName is required\"),\n unitBedrooms: z.number().int().nonnegative(),\n\n styleId: z.string().min(1, \"styleId is required\"),\n styleName: z.string().min(1, \"styleName is required\"),\n\n furnitureId: z.string().min(1, \"furnitureId is required\"),\n furnitureName: z.string().min(1, \"furnitureName is required\"),\n link: z.string().min(1, \"link is required\"),\n type: z.string().min(1, \"type is required\"),\n favoritedUnit: z.boolean(),\n brandName: z.string().min(1, \"brandName is required\"),\n category: z.string().min(1, \"category is required\"),\n})\nconst furnitureSavedSchema = unitWithPropertyNameSchema.extend({\n roomName: z.string().min(1, \"roomName is required\"),\n unitBedrooms: z.number().int().nonnegative(),\n\n styleId: z.string().min(1, \"styleId is required\"),\n styleName: z.string().min(1, \"styleName is required\"),\n\n furnitureId: z.string().min(1, \"furnitureId is required\"),\n furnitureName: z.string().min(1, \"furnitureName is required\"),\n brandName: z.string().min(1, \"brandName is required\"),\n category: z.string().min(1, \"category is required\"),\n})\nconst furnitureModalOpenedSchema = unitWithPropertyNameSchema.extend({\n roomName: z.string().min(1, \"roomName is required\"),\n unitBedrooms: z.number().int().nonnegative(),\n\n styleId: z.string().min(1, \"styleId is required\"),\n styleName: z.string().min(1, \"styleName is required\"),\n\n furnitureId: z.string().min(1, \"furnitureId is required\"),\n furnitureName: z.string().min(1, \"furnitureName is required\"),\n brandName: z.string().min(1, \"brandName is required\"),\n category: z.string().min(1, \"category is required\"),\n})\nconst furnitureCarouselSchema = unitWithPropertyNameSchema.extend({\n method: z.enum([\"Prev\", \"Next\"]),\n roomName: z.string().min(1, \"roomName is required\"),\n unitBedrooms: z.number().int().nonnegative(),\n\n styleId: z.string().min(1, \"styleId is required\"),\n styleName: z.string().min(1, \"styleName is required\"),\n\n furnitureId: z.string().min(1, \"furnitureId is required\"),\n furnitureName: z.string().min(1, \"furnitureName is required\"),\n brandName: z.string().min(1, \"brandName is required\"),\n category: z.string().min(1, \"category is required\"),\n})\n\nconst roomEnteredSchema = unitWithPropertyNameSchema.extend({\n roomName: z.string().min(1, \"roomName is required\"),\n unitBedrooms: z.number().int().nonnegative(),\n styleId: z.string().min(1, \"styleId is required\"),\n styleName: z.string().min(1, \"styleName is required\"),\n method: z.enum([\"Navigation\", \"Map\"]),\n})\nconst roomLeftSchema = roomEnteredSchema.extend({\n timeInRoom: z.number().int().nonnegative(),\n})\n\nconst videoStartedSchema = unitWithPropertyNameSchema.extend({\n roomName: z.string().min(1, \"roomName is required\"),\n unitBedrooms: z.number().int().nonnegative(),\n styleId: z.string().min(1, \"styleId is required\"),\n styleName: z.string().min(1, \"styleName is required\"),\n method: z.enum([\"On Click Play\"]),\n videoCurrentTime: z.number().int().nonnegative(),\n videoDuration: z.number().int().nonnegative(),\n videoPercent: z.number().int().nonnegative(),\n videoFilename: z.string().min(1, \"videoFilename is required\"),\n})\nconst emailTrackedSchema = unitWithPropertyNameSchema.extend({\n utmSource: z.string().min(1, \"utm_source is required\"),\n utmMedium: z.string().min(1, \"utm_medium is required\"),\n utmName: z.string().min(1, \"utm_name is required\"),\n\n unitBedrooms: z.number().int().nonnegative(),\n styleId: z.string().min(1, \"styleId is required\"),\n styleName: z.string().min(1, \"styleName is required\"),\n\n favoritedUnit: z.boolean(),\n})\nconst webPageViewedBaseSchema = unitWithPropertyNameSchema.extend({\n fullUrl: z.string().min(1, \"fullUrl is required\"),\n datestamp: z.string().min(1, \"datestamp is required\"),\n})\n// 360 app only\nconst webPageViewedSchema = webPageViewedBaseSchema.extend({\n pageName: z.string().min(1, \"pageName is required\"),\n})\nconst webPageRoomViewedSchema = webPageViewedBaseSchema.extend({\n roomName: z.string().min(1, \"roomName is required\"),\n})\nconst embedPageViewedSchema = unitWithPropertyNameSchema.extend({\n unitBedrooms: z.number().int().nonnegative(),\n})\nconst embedPageViewSchemaWithUTM = unitWithPropertyNameSchema.extend({\n utmSource: z.string().min(1, \"utm_source is required\"),\n utmMedium: z.string().min(1, \"utm_medium is required\"),\n utmName: z.string().min(1, \"utm_name is required\"),\n})\n\n// property_slug, property_id, property_name, unit_id, unit_slug, unit_title, unit_bedrooms\n\nconst toastSchema = unitWithPropertyNameSchema.extend({\n toastCopy: z.string().min(1, \"toastCopy is required\"),\n})\nconst contentModalOpenedSchema = unitWithPropertyNameSchema.extend({\n unitBedrooms: z.number().int().nonnegative(),\n\n styleId: z.string().min(1, \"styleId is required\"),\n styleName: z.string().min(1, \"styleName is required\"),\n})\n\nconst buildingDetailsModalSchema = propertyWithNameSchema;\n\nconst subscriptionImpressionSchema = propertyWithNameSchema.extend({\n name: z.string().min(1, \"name is required\"),\n\n})\n\nconst subscriptionInteractedSchema = z.object({\n name: z.string().min(1, \"name is required\"),\n properties: z.object({\n propertyContextSchema,\n buttonName: z.string().min(1, \"buttonName is required\"),\n formName: z.string().min(1, \"formName is required\"),\n pageName: z.string().min(1, \"pageName is required\"),\n fieldName: z.string().min(1, \"fieldName is required\"),\n }),\n});\n\nconst subscriptionSubmittedSchema = z.object({\n name: z.string().min(1, \"name is required\"),\n properties: z.object({\n propertyContextSchema,\n buttonName: z.string().min(1, \"buttonName is required\"),\n formName: z.string().min(1, \"formName is required\"),\n pageName: z.string().min(1, \"pageName is required\"),\n bedrooms: z.array(z.union([z.string(), z.number()])).optional(),\n price: z.number().nullable().optional(),\n }),\n});\n\nconst subscriptionRemovedSchema = propertyWithNameSchema.extend({\n\n bedrooms: z.array(z.number()).optional(),\n price_min: z.number().optional(),\n price_max: z.number().optional(),\n highlights: z.array(z.string()).optional(),\n\n\n page_name: z.string().optional(),\n});\n\nconst hoverUnitSchema = unitWithPropertyNameSchema.extend({\n favoritedUnit: z.boolean(),\n unitIndex: z.number().int().nonnegative(),\n});\n\nconst selectionSchema = z\n .any()\n .transform((value) => normalizeToStringArray(value))\n .refine((value): value is string[] => Array.isArray(value), {\n message: \"Selection must resolve to an array\",\n });\n\nconst filterOpenSchema = propertyWithNameSchema.extend({\n filterIndex: z.number().int().nonnegative(),\n filterLabel: z.string().min(1, \"filterLabel is required\"),\n selectedFiltersEnum: selectionSchema,\n filterName: z.string().optional(),\n});\n\nconst filterMutationSchema = propertyWithNameSchema.extend({\n filterIndex: z.number().int().nonnegative(),\n filterLabel: z.string().min(1, \"filterLabel is required\"),\n selectedFiltersEnum: selectionSchema,\n});\n\nconst sortEventSchema = propertyContextSchema.extend({\n sortIndex: z.number().int().nonnegative(),\n sortEnum: z.enum(SortEnumValues),\n});\n\nconst sortOpenSchema = propertyWithNameSchema.extend({\n sortIndex: z.number().int().nonnegative(),\n sortEnum: z.enum(SortEnumValues),\n resultsUnitCount: z.number().int().nonnegative(),\n unitCountDate: z.string().optional(),\n});\n\nconst questionnaireResultSchema = propertyContextSchema.extend({\n fullQuestionnaireSchemaJson: z.unknown().optional(),\n resultsJson: z\n .object({\n type: z.string().optional(),\n total: z.number().int().nonnegative().optional(),\n units: z\n .array(\n z.object({\n unitId: z.string().min(1, \"unitId is required\"),\n unitName: z.string().optional(),\n })\n )\n .optional(),\n })\n .optional(),\n});\n\nconst clickUnitSchema = unitWithPropertyNameSchema.extend({\n favoritedUnit: z.boolean(),\n unitIndex: z.number().int().nonnegative(),\n});\n\nconst clickUnitFavoritesSchema = unitWithPropertyNameSchema.extend({\n favoritedUnit: z.boolean(),\n unitIndex: z.number().int().nonnegative(),\n\n});\n\nconst unitUnfavoritedSchema = propertyWithNameSchema.extend({\n unitId: z.string().min(1, \"unitId is required\"),\n unitName: z.string().min(1, \"unitName is required\"),\n unitSlug: z.string().min(1, \"unitSlug is required\"),\n resultsUnitCount: z.number().int().nonnegative(),\n unitCountDate: z.string().optional(),\n unitIndex: z.number().int().nonnegative(),\n});\n\nexport type BaseEvent = z.infer<typeof propertyContextSchema>;\nexport type ViewAllUnitsEvent = z.infer<typeof viewAllUnitsSchema>;\nexport type LoadMoreEvent = z.infer<typeof loadMoreSchema>;\nexport type QuestionnaireEvent = z.infer<typeof questionnaireEventSchema>;\nexport type ContinueQuestionnaireEvent = z.infer<\n typeof continueQuestionnaireEventSchema\n>;\nexport type ClickUnitEvent = z.infer<typeof clickUnitSchema>;\nexport type UnitEvent = z.infer<typeof unitEventSchema>;\nexport type HoverUnitEvent = z.infer<typeof hoverUnitSchema>;\nexport type FilterEvent = z.infer<typeof filterMutationSchema>;\nexport type FilterOpenEvent = z.infer<typeof filterOpenSchema>;\nexport type SortEvent = z.infer<typeof sortEventSchema>;\nexport type SortOpenEvent = z.infer<typeof sortOpenSchema>;\nexport type QuestionnaireResultEvent = z.infer<\n typeof questionnaireResultSchema\n>;\nexport type ClickUnitFavoritesEvent = z.infer<typeof clickUnitFavoritesSchema>;\nexport type ScheduleTourFormEvent = z.infer<typeof scheduleTourFormSchema>;\nexport type UnitUnfavoritedEvent = z.infer<typeof unitUnfavoritedSchema>;\n\nexport type GetInTouchFormEvent = z.infer<typeof getInTouchFormSchema>;\nexport type StyleDrawerEvent = z.infer<typeof styleDrawerSchema>;\nexport type FurnitureInteractionEvent = z.infer<typeof furnitureInteractionSchema>;\nexport type FurnitureExternalUrlClickedEvent = z.infer<typeof furnitureExternalUrlSchema>;\nexport type FurnitureSavedEvent = z.infer<typeof furnitureSavedSchema>;\nexport type FurnitureModalOpenedEvent = z.infer<typeof furnitureModalOpenedSchema>;\nexport type FurnitureCarouselEvent = z.infer<typeof furnitureCarouselSchema>;\nexport type RoomEnteredEvent = z.infer<typeof roomEnteredSchema>;\nexport type RoomLeftEvent = z.infer<typeof roomLeftSchema>;\nexport type VideoStartedEvent = z.infer<typeof videoStartedSchema>;\nexport type EmailTrackedEvent = z.infer<typeof emailTrackedSchema>;\nexport type ToastEvent = z.infer<typeof toastSchema>;\nexport type ContentModalOpenedEvent = z.infer<typeof contentModalOpenedSchema>;\nexport type BuildingDetailsModalEvent = z.infer<typeof buildingDetailsModalSchema>;\nexport type SubscriptionImpressionEvent = z.infer<typeof subscriptionImpressionSchema>;\nexport type SubscriptionInteractedEvent = z.infer<typeof subscriptionInteractedSchema>;\nexport type SubscriptionSubmittedEvent = z.infer<typeof subscriptionSubmittedSchema>;\nexport type SubscriptionRemovedEvent = z.infer<typeof subscriptionRemovedSchema>;\nexport type WebPageViewedEvent = z.infer<typeof webPageViewedSchema>;\nexport type WebPageRoomViewedEvent = z.infer<typeof webPageRoomViewedSchema>;\n\n\nexport type TrackingEventWithUnits = FilterEvent & {\n trackingEvent: (payload: FilterEvent) => void;\n [metadata: string]: unknown;\n};\n\nexport type TrackEventFn = (eventName: string, data?: Record<string, any>) => void;\n\nexport function useTrackEvent() {\n const analytics = useAnalytics();\n return (eventName: string, data?: Record<string, any>) => {\n const payload =\n data == null ? data : (convertKeysToSnakeCase(data) as Record<string, any>);\n analytics.track(eventName, payload);\n };\n}\n\nconst createStrictTrackerInternal =\n <Schema extends z.ZodTypeAny>(\n eventName: string,\n schema: Schema,\n dispatch: (eventName: string, payload: unknown) => void,\n options?: { isDev?: boolean },\n ) =>\n (payload: AnalyticsPayload<Schema>) => {\n const payloadToValidate = convertKeysToCamelCase(payload) as z.input<Schema>;\n const result = schema.safeParse(payloadToValidate);\n if (!result.success) {\n if (options?.isDev) {\n // eslint-disable-next-line no-console\n console.warn(`[Analytics] Invalid payload for \"${eventName}\":`, result.error.issues);\n }\n return;\n }\n dispatch(eventName, payload);\n };\n\nexport function buildTrackingEvents(trackEvent: TrackEventFn, isDev = false) {\n const dispatch = (eventName: string, payload: unknown) => {\n const finalPayload = convertKeysToSnakeCase(payload) as Record<string, any>;\n trackEvent(eventName, finalPayload);\n };\n\n const createStrictTracker = <Schema extends z.ZodTypeAny>(\n eventName: string,\n schema: Schema,\n ) =>\n createStrictTrackerInternal(eventName, schema, dispatch, { isDev });\n\n return {\n trackViewAllUnits: (\n payload: AnalyticsPayload<typeof viewAllUnitsSchema>,\n ) => {\n const normalizedPayload = convertKeysToCamelCase(\n payload,\n ) as z.input<typeof viewAllUnitsSchema>;\n const result = viewAllUnitsSchema.safeParse({\n unitCountDate: new Date().toISOString(),\n ...normalizedPayload,\n });\n if (!result.success) {\n if (isDev) console.warn(\"[Analytics] Invalid payload for \\\"View All Units\\\":\", result.error.flatten()); // eslint-disable-line no-console\n return;\n }\n dispatch(\"View All Units\", result.data);\n },\n trackQuestionnaireSkip: (\n payload: AnalyticsPayloadWithout<\n typeof questionnaireEventSchema,\n \"interactedElement\"\n >,\n ) => {\n const normalizedPayload = convertKeysToCamelCase(\n payload,\n ) as Omit<\n z.input<typeof questionnaireEventSchema>,\n \"interactedElement\"\n >;\n const result = questionnaireEventSchema.safeParse({\n ...normalizedPayload,\n interactedElement: \"Skip\",\n });\n if (!result.success) {\n if (isDev) console.warn(\"[Analytics] Invalid payload for \\\"Questionnaire Navigated\\\" (Skip):\", result.error.flatten()); // eslint-disable-line no-console\n return;\n }\n dispatch(\"Questionnaire Navigated\", result.data);\n },\n trackQuestionnaireContinue: (\n payload: AnalyticsPayloadWithout<\n typeof continueQuestionnaireEventSchema,\n \"interactedElement\"\n >,\n ) => {\n const normalizedPayload = convertKeysToCamelCase(\n payload,\n ) as Omit<\n z.input<typeof continueQuestionnaireEventSchema>,\n \"interactedElement\"\n >;\n const result = continueQuestionnaireEventSchema.safeParse({\n ...normalizedPayload,\n interactedElement: \"Continue\",\n });\n if (!result.success) {\n if (isDev) console.warn(\"[Analytics] Invalid payload for \\\"Questionnaire Navigated\\\" (Continue):\", result.error.flatten()); // eslint-disable-line no-console\n return;\n }\n dispatch(\"Questionnaire Navigated\", result.data);\n },\n trackQuestionnaireBack: (\n payload: AnalyticsPayloadWithout<\n typeof questionnaireEventSchema,\n \"interactedElement\"\n >,\n ) => {\n const normalizedPayload = convertKeysToCamelCase(\n payload,\n ) as Omit<\n z.input<typeof questionnaireEventSchema>,\n \"interactedElement\"\n >;\n const result = questionnaireEventSchema.safeParse({\n ...normalizedPayload,\n interactedElement: \"Back\",\n });\n if (!result.success) {\n if (isDev) console.warn(\"[Analytics] Invalid payload for \\\"Questionnaire Navigated\\\" (Back):\", result.error.flatten()); // eslint-disable-line no-console\n return;\n }\n dispatch(\"Questionnaire Navigated\", result.data);\n },\n trackClickUnit: createStrictTracker(\"Unit Card Clicked\", clickUnitSchema),\n trackHoverUnit: createStrictTracker(\"Unit Hovered\", hoverUnitSchema, ),\n trackLoadMore: (\n payload: AnalyticsPayload<typeof loadMoreSchema>,\n ) => {\n const normalizedPayload = convertKeysToCamelCase(\n payload,\n ) as z.input<typeof loadMoreSchema>;\n const result = loadMoreSchema.safeParse({\n unitCountDate: new Date().toISOString(),\n ...normalizedPayload,\n });\n if (!result.success) {\n if (isDev) console.warn(\"[Analytics] Invalid payload for \\\"More Units Loaded\\\":\", result.error.flatten()); // eslint-disable-line no-console\n return;\n }\n dispatch(\"More Units Loaded\", result.data);\n },\n trackFilterOpened: createStrictTracker(\"Filter Opened\", filterOpenSchema),\n trackFilterCanceled: createStrictTracker(\n \"Filter Cleared\",\n filterMutationSchema,\n ),\n trackFilterApplied: createStrictTracker(\n \"Filter Applied\",\n filterMutationSchema,\n ),\n trackOpenSort: (\n payload: AnalyticsPayload<typeof sortOpenSchema>,\n ) => {\n const normalizedPayload = convertKeysToCamelCase(\n payload,\n ) as z.input<typeof sortOpenSchema>;\n const result = sortOpenSchema.safeParse({\n unitCountDate: new Date().toISOString(),\n ...normalizedPayload,\n });\n if (!result.success) {\n if (isDev) console.warn(\"[Analytics] Invalid payload for \\\"Sort Opened\\\":\", result.error.flatten()); // eslint-disable-line no-console\n return;\n }\n dispatch(\"Sort Opened\", result.data);\n },\n trackSelectSort: createStrictTracker(\"Sort Applied\", sortEventSchema),\n trackCancelSort: createStrictTracker(\"Sort Canceled\", sortEventSchema),\n trackClickUnitFavorites: createStrictTracker(\n \"Unit Favorited\",\n clickUnitFavoritesSchema,\n ),\n trackUnitUnfavorited: createStrictTracker(\n \"Unit Unfavorited\",\n unitUnfavoritedSchema,\n ),\n trackQuestionnaireResult: createStrictTracker(\n \"Questionnaire Submitted\",\n questionnaireResultSchema,\n ),\n trackScheduleTourFormInteracted: createStrictTracker(\n \"Schedule Tour Form Interacted\",\n scheduleTourFormSchema,\n ),\n trackScheduleTourFormSubmitted: createStrictTracker(\n \"Schedule Tour Form Submitted\",\n scheduleTourFormSchema,\n ),\n trackScheduleTourUrlClicked: createStrictTracker(\n \"Schedule Tour URL Clicked\",\n scheduleTourFormSchema,\n ),\n trackGetInTouchFormOpened: createStrictTracker(\n \"Form Opened\",\n getInTouchFormSchema,\n ),\n trackGetInTouchFormSubmitted: createStrictTracker(\n \"Form Submitted\",\n getInTouchFormSchema,\n ),\n trackStyleDrawerOpened: createStrictTracker(\n \"Style Menu Opened\",\n styleDrawerSchema,\n ),\n trackStyleDrawerChanged: createStrictTracker(\n \"Style Changed\",\n styleDrawerSchema,\n ),\n trackOpeningStyleImpression: createStrictTracker(\n \"Opening Style Modal Impression\",\n styleDrawerSchema,\n ),\n trackOpeningStyleSlected: createStrictTracker(\n \"Opening Style Selected\",\n styleDrawerSchema,\n ),\n trackFurnitureViewed: createStrictTracker(\n \"Furniture Viewed\",\n furnitureInteractionSchema,\n ),\n trackFurnitureExternalUrlClicked: createStrictTracker(\n \"Purchase Link Clicked\",\n furnitureExternalUrlSchema,\n ),\n trackFurnitureSaved: createStrictTracker(\n \"Furniture Saved\",\n furnitureSavedSchema,\n ),\n trackFurnitureModalOpened: createStrictTracker(\n \"Furniture Modal Opened\",\n furnitureModalOpenedSchema,\n ),\n trackFurnitureCarouselToggled: createStrictTracker(\n \"Furniture Carousel Toggled\",\n furnitureCarouselSchema,\n ),\n trackRoomEntered: createStrictTracker(\n \"Room Entered\",\n roomEnteredSchema,\n ),\n trackRoomLeft: createStrictTracker(\n \"Room Left\",\n roomLeftSchema,\n ),\n trackVideoStarted: createStrictTracker(\n \"Video Started\",\n videoStartedSchema,\n ),\n trackEmailRedirect: createStrictTracker(\n \"Email Tracked\",\n emailTrackedSchema,\n ),\n trackToastImpression: createStrictTracker(\n \"Toast Impression\",\n toastSchema,\n ),\n trackToastClicked: createStrictTracker(\n \"Toast Clicked\",\n toastSchema,\n ),\n trackToastClosed: createStrictTracker(\n \"Toast Closed\",\n toastSchema,\n ),\n trackContentModalOpened: createStrictTracker(\n \"Content Modal Opened\",\n contentModalOpenedSchema,\n ),\n trackBuildingDetailsModalOpened: createStrictTracker(\n \"Building Details Modal\",\n buildingDetailsModalSchema,\n ),\n trackSubscriptionImpression: createStrictTracker(\n \"Subscription Impression\",\n subscriptionImpressionSchema,\n ),\n trackSubscriptionInteracted: createStrictTracker(\n \"Subscription Interacted\",\n subscriptionInteractedSchema,\n ),\n trackSubscriptionSubmitted: createStrictTracker(\n \"Subscription Submitted\",\n subscriptionSubmittedSchema,\n ),\n trackSubscriptionRemoved: createStrictTracker(\n \"Subscription Removed\",\n subscriptionRemovedSchema,\n ),\n trackWebPageViewed: createStrictTracker(\n \"Page Viewed\",\n webPageViewedSchema,\n ),\n trackWebPageRoomViewed: createStrictTracker(\n \"Page Viewed\",\n webPageRoomViewedSchema,\n ),\n trackEmbedPageViewed: createStrictTracker(\n \"Embed Impression\",\n embedPageViewedSchema,\n ),\n trackEmailClick: (data: { event_name: string }) => createStrictTracker(\n `Email Interaction - ${data.event_name}`,\n embedPageViewSchemaWithUTM,\n ),\n };\n}\n\nexport function useTrackingEvents() {\n const { isDev } = useAnalytics();\n const trackEvent = useTrackEvent();\n return buildTrackingEvents(trackEvent, isDev);\n}\n"],"names":["QuestionEnumValues","SortEnumValues","QuestionnaireInteractionValues","propertyContextSchema","z.object","z.string","propertyWithNameSchema","viewAllUnitsSchema","z.number","loadMoreSchema","scheduleTourFormSchema","z.unknown","questionnaireEventSchema","z.enum","continueQuestionnaireEventSchema","z.any","value","normalizeToStringArray","unitWithPropertyNameSchema","getInTouchFormSchema","z.boolean","styleDrawerSchema","furnitureInteractionSchema","furnitureExternalUrlSchema","furnitureSavedSchema","furnitureModalOpenedSchema","furnitureCarouselSchema","roomEnteredSchema","roomLeftSchema","videoStartedSchema","emailTrackedSchema","webPageViewedBaseSchema","webPageViewedSchema","webPageRoomViewedSchema","embedPageViewedSchema","embedPageViewSchemaWithUTM","toastSchema","contentModalOpenedSchema","buildingDetailsModalSchema","subscriptionImpressionSchema","subscriptionInteractedSchema","subscriptionSubmittedSchema","z.array","z.union","subscriptionRemovedSchema","hoverUnitSchema","selectionSchema","filterOpenSchema","filterMutationSchema","sortEventSchema","sortOpenSchema","questionnaireResultSchema","clickUnitSchema","clickUnitFavoritesSchema","unitUnfavoritedSchema","useTrackEvent","analytics","useAnalytics","eventName","data","payload","convertKeysToSnakeCase","createStrictTrackerInternal","schema","dispatch","options","payloadToValidate","convertKeysToCamelCase","result","buildTrackingEvents","trackEvent","isDev","finalPayload","createStrictTracker","normalizedPayload","useTrackingEvents"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"analytics.mjs","sources":["../../../src/features/analytics/analytics.ts"],"sourcesContent":["import { z } from \"zod\";\n\nimport {\n convertKeysToCamelCase,\n convertKeysToSnakeCase,\n} from \"../../utils/casing\";\nimport { normalizeToStringArray } from \"../../utils/collections\";\nimport { useAnalytics } from \"./AnalyticsProvider\";\n\ntype AnalyticsPayload<Schema extends z.ZodTypeAny> = z.input<Schema>;\n\ntype AnalyticsPayloadWithout<\n Schema extends z.ZodTypeAny,\n Keys extends PropertyKey,\n> = Omit<AnalyticsPayload<Schema>, Keys>;\n\nexport const QuestionEnumValues = [\"location\", \"budget\", \"size\", \"other\"] as const;\nexport type QuestionEnum = (typeof QuestionEnumValues)[number];\nexport type FilterEnum = string;\nexport const SortEnumValues = [\n \"cost_low_to_high\",\n \"cost_high_to_low\",\n \"newest\",\n \"relevance\",\n] as const;\nexport type SortEnum = (typeof SortEnumValues)[number];\nexport const QuestionnaireInteractionValues = [\n \"Skip\",\n \"Continue\",\n \"Back\",\n] as const;\nexport type QuestionnaireInteraction =\n (typeof QuestionnaireInteractionValues)[number];\n\nconst propertyContextSchema = z.object({\n propertyId: z.string().min(1, \"propertyId is required\"),\n propertySlug: z.string().min(1, \"propertySlug is required\"),\n propertyName: z.string().min(1, \"propertyName is required\"),\n});\n\nconst propertyWithNameSchema = propertyContextSchema.extend({\n propertyName: z.string().min(1, \"propertyName is required\"),\n});\n\nconst viewAllUnitsSchema = propertyWithNameSchema.extend({\n totalUnitsAvailable: z.number().int().nonnegative(),\n resultsUnitCount: z.number().int().nonnegative(),\n unitCountDate: z.string().optional(),\n});\n\nconst loadMoreSchema = propertyWithNameSchema.extend({\n totalUnitsAvailable: z.number().int().nonnegative(),\n resultsUnitCount: z.number().int().nonnegative(),\n unitCountDate: z.string().optional(),\n});\n\nconst scheduleTourFormSchema = propertyWithNameSchema.extend({\n totalUnitsAvailable: z.number().int().nonnegative(),\n resultsUnitCount: z.number().int().nonnegative(),\n unitCountDate: z.string().optional(),\n lifestylePreferences: z.unknown().optional(),\n});\n\nconst questionnaireEventSchema = propertyWithNameSchema.extend({\n funnelStep: z.number().int().nonnegative(),\n profileQuestion: z.string().min(1, \"profileQuestion is required\"),\n interactedElement: z.enum(QuestionnaireInteractionValues),\n questionEnum: z.string().optional(),\n});\n\nconst continueQuestionnaireEventSchema = questionnaireEventSchema.extend({\n selectedAnswersEnumArray: z\n .any()\n .transform((value) => normalizeToStringArray(value))\n .refine((value): value is string[] => Array.isArray(value), {\n message: \"selectedAnswersEnumArray must resolve to an array\",\n }),\n});\n\nconst unitEventSchema = propertyContextSchema.extend({\n unitId: z.string().min(1, \"unitId is required\"),\n unitName: z.string().min(1, \"unitName is required\"),\n unitSlug: z.string().min(1, \"unitSlug is required\"),\n});\nconst unitWithPropertyNameSchema = propertyWithNameSchema.extend({\n unitId: z.string().min(1, \"unitId is required\"),\n unitName: z.string().min(1, \"unitName is required\"),\n unitSlug: z.string().min(1, \"unitSlug is required\"),\n});\nconst getInTouchFormSchema = unitWithPropertyNameSchema.extend({\n buttonName: z.string().min(1, \"buttonName is required\"),\n formName: z.string().min(1, \"formName is required\"),\n\n styleId: z.string().min(1, \"styleId is required\"),\n styleName: z.string().min(1, \"styleName is required\"),\n unitBedrooms: z.number().int().nonnegative(),\n favoritedUnit: z.boolean(),\n});\nconst styleDrawerSchema = unitWithPropertyNameSchema.extend({\n roomName: z.string().min(1, \"roomName is required\"),\n unitBedrooms: z.number().int().nonnegative(),\n\n styleId: z.string().min(1, \"styleId is required\"),\n styleName: z.string().min(1, \"styleName is required\"),\n favoritedUnit: z.boolean(),\n});\nconst furnitureInteractionSchema = unitWithPropertyNameSchema.extend({\n roomName: z.string().min(1, \"roomName is required\"),\n unitBedrooms: z.number().int().nonnegative(),\n\n styleId: z.string().min(1, \"styleId is required\"),\n styleName: z.string().min(1, \"styleName is required\"),\n\n furnitureId: z.string().min(1, \"furnitureId is required\"),\n furnitureName: z.string().min(1, \"furnitureName is required\"),\n type: z.enum([\"click\", \"hover_on\", \"hover_off\"]),\n brandName: z.string().min(1, \"brandName is required\"),\n category: z.string().min(1, \"category is required\"),\n})\nconst furnitureExternalUrlSchema = unitWithPropertyNameSchema.extend({\n roomName: z.string().min(1, \"roomName is required\"),\n unitBedrooms: z.number().int().nonnegative(),\n\n styleId: z.string().min(1, \"styleId is required\"),\n styleName: z.string().min(1, \"styleName is required\"),\n\n furnitureId: z.string().min(1, \"furnitureId is required\"),\n furnitureName: z.string().min(1, \"furnitureName is required\"),\n link: z.string().min(1, \"link is required\"),\n type: z.string().min(1, \"type is required\"),\n favoritedUnit: z.boolean(),\n brandName: z.string().min(1, \"brandName is required\"),\n category: z.string().min(1, \"category is required\"),\n})\nconst furnitureSavedSchema = unitWithPropertyNameSchema.extend({\n roomName: z.string().min(1, \"roomName is required\"),\n unitBedrooms: z.number().int().nonnegative(),\n\n styleId: z.string().min(1, \"styleId is required\"),\n styleName: z.string().min(1, \"styleName is required\"),\n\n furnitureId: z.string().min(1, \"furnitureId is required\"),\n furnitureName: z.string().min(1, \"furnitureName is required\"),\n brandName: z.string().min(1, \"brandName is required\"),\n category: z.string().min(1, \"category is required\"),\n})\nconst furnitureModalOpenedSchema = unitWithPropertyNameSchema.extend({\n roomName: z.string().min(1, \"roomName is required\"),\n unitBedrooms: z.number().int().nonnegative(),\n\n styleId: z.string().min(1, \"styleId is required\"),\n styleName: z.string().min(1, \"styleName is required\"),\n\n furnitureId: z.string().min(1, \"furnitureId is required\"),\n furnitureName: z.string().min(1, \"furnitureName is required\"),\n brandName: z.string().min(1, \"brandName is required\"),\n category: z.string().min(1, \"category is required\"),\n})\nconst furnitureCarouselSchema = unitWithPropertyNameSchema.extend({\n method: z.enum([\"Prev\", \"Next\"]),\n roomName: z.string().min(1, \"roomName is required\"),\n unitBedrooms: z.number().int().nonnegative(),\n\n styleId: z.string().min(1, \"styleId is required\"),\n styleName: z.string().min(1, \"styleName is required\"),\n\n furnitureId: z.string().min(1, \"furnitureId is required\"),\n furnitureName: z.string().min(1, \"furnitureName is required\"),\n brandName: z.string().min(1, \"brandName is required\"),\n category: z.string().min(1, \"category is required\"),\n})\n\nconst roomEnteredSchema = unitWithPropertyNameSchema.extend({\n roomName: z.string().min(1, \"roomName is required\"),\n unitBedrooms: z.number().int().nonnegative(),\n styleId: z.string().min(1, \"styleId is required\"),\n styleName: z.string().min(1, \"styleName is required\"),\n method: z.enum([\"Navigation\", \"Map\"]),\n})\nconst roomLeftSchema = roomEnteredSchema.extend({\n timeInRoom: z.number().int().nonnegative(),\n})\n\nconst videoStartedSchema = unitWithPropertyNameSchema.extend({\n roomName: z.string().min(1, \"roomName is required\"),\n unitBedrooms: z.number().int().nonnegative(),\n styleId: z.string().min(1, \"styleId is required\"),\n styleName: z.string().min(1, \"styleName is required\"),\n method: z.enum([\"On Click Play\"]),\n videoCurrentTime: z.number().int().nonnegative(),\n videoDuration: z.number().int().nonnegative(),\n videoPercent: z.number().int().nonnegative(),\n videoFilename: z.string().min(1, \"videoFilename is required\"),\n})\nconst emailTrackedSchema = unitWithPropertyNameSchema.extend({\n utmSource: z.string().min(1, \"utm_source is required\"),\n utmMedium: z.string().min(1, \"utm_medium is required\"),\n utmName: z.string().min(1, \"utm_name is required\"),\n\n unitBedrooms: z.number().int().nonnegative(),\n styleId: z.string().min(1, \"styleId is required\"),\n styleName: z.string().min(1, \"styleName is required\"),\n\n favoritedUnit: z.boolean(),\n})\nconst webPageViewedBaseSchema = unitWithPropertyNameSchema.extend({\n fullUrl: z.string().min(1, \"fullUrl is required\"),\n datestamp: z.string().min(1, \"datestamp is required\"),\n})\n// 360 app only\nconst webPageViewedSchema = webPageViewedBaseSchema.extend({\n pageName: z.string().min(1, \"pageName is required\"),\n})\nconst webPageRoomViewedSchema = webPageViewedBaseSchema.extend({\n roomName: z.string().min(1, \"roomName is required\"),\n})\nconst embedPageViewedSchema = unitWithPropertyNameSchema.extend({\n unitBedrooms: z.number().int().nonnegative(),\n})\nconst embedPageViewSchemaWithUTM = unitWithPropertyNameSchema.extend({\n utmSource: z.string().min(1, \"utm_source is required\"),\n utmMedium: z.string().min(1, \"utm_medium is required\"),\n utmName: z.string().min(1, \"utm_name is required\"),\n})\n\n// property_slug, property_id, property_name, unit_id, unit_slug, unit_title, unit_bedrooms\n\nconst toastSchema = unitWithPropertyNameSchema.extend({\n toastCopy: z.string().min(1, \"toastCopy is required\"),\n})\nconst contentModalOpenedSchema = unitWithPropertyNameSchema.extend({\n unitBedrooms: z.number().int().nonnegative(),\n\n styleId: z.string().min(1, \"styleId is required\"),\n styleName: z.string().min(1, \"styleName is required\"),\n})\n\nconst buildingDetailsModalSchema = propertyWithNameSchema;\n\nconst subscriptionImpressionSchema = propertyWithNameSchema.extend({\n name: z.string().min(1, \"name is required\"),\n\n})\n\nconst subscriptionInteractedSchema = z.object({\n name: z.string().min(1, \"name is required\"),\n properties: z.object({\n propertyContextSchema,\n buttonName: z.string().min(1, \"buttonName is required\"),\n formName: z.string().min(1, \"formName is required\"),\n pageName: z.string().min(1, \"pageName is required\"),\n fieldName: z.string().min(1, \"fieldName is required\"),\n }),\n});\n\nconst subscriptionSubmittedSchema = z.object({\n name: z.string().min(1, \"name is required\"),\n properties: z.object({\n propertyContextSchema,\n buttonName: z.string().min(1, \"buttonName is required\"),\n formName: z.string().min(1, \"formName is required\"),\n pageName: z.string().min(1, \"pageName is required\"),\n bedrooms: z.array(z.union([z.string(), z.number()])).optional(),\n price: z.number().nullable().optional(),\n }),\n});\n\nconst subscriptionRemovedSchema = propertyWithNameSchema.extend({\n\n bedrooms: z.array(z.number()).optional(),\n price_min: z.number().optional(),\n price_max: z.number().optional(),\n highlights: z.array(z.string()).optional(),\n\n\n page_name: z.string().optional(),\n});\n\nconst hoverUnitSchema = unitWithPropertyNameSchema.extend({\n favoritedUnit: z.boolean(),\n unitIndex: z.number().int().nonnegative(),\n});\n\nconst selectionSchema = z\n .any()\n .transform((value) => normalizeToStringArray(value))\n .refine((value): value is string[] => Array.isArray(value), {\n message: \"Selection must resolve to an array\",\n });\n\nconst filterOpenSchema = propertyWithNameSchema.extend({\n filterIndex: z.number().int().nonnegative(),\n filterLabel: z.string().min(1, \"filterLabel is required\"),\n selectedFiltersEnum: selectionSchema,\n filterName: z.string().optional(),\n});\n\nconst filterMutationSchema = propertyWithNameSchema.extend({\n filterIndex: z.number().int().nonnegative(),\n filterLabel: z.string().min(1, \"filterLabel is required\"),\n selectedFiltersEnum: selectionSchema,\n});\n\nconst sortEventSchema = propertyContextSchema.extend({\n sortIndex: z.number().int().nonnegative(),\n sortEnum: z.enum(SortEnumValues),\n});\n\nconst sortOpenSchema = propertyWithNameSchema.extend({\n sortIndex: z.number().int().nonnegative(),\n sortEnum: z.enum(SortEnumValues),\n resultsUnitCount: z.number().int().nonnegative(),\n unitCountDate: z.string().optional(),\n});\n\nconst questionnaireResultSchema = propertyContextSchema.extend({\n fullQuestionnaireSchemaJson: z.unknown().optional(),\n resultsJson: z\n .object({\n type: z.string().optional(),\n total: z.number().int().nonnegative().optional(),\n units: z\n .array(\n z.object({\n unitId: z.string().min(1, \"unitId is required\"),\n unitName: z.string().optional(),\n })\n )\n .optional(),\n })\n .optional(),\n});\n\nconst clickUnitSchema = unitWithPropertyNameSchema.extend({\n favoritedUnit: z.boolean(),\n unitIndex: z.number().int().nonnegative(),\n});\n\nconst clickUnitFavoritesSchema = unitWithPropertyNameSchema.extend({\n favoritedUnit: z.boolean(),\n unitIndex: z.number().int().nonnegative(),\n\n});\n\nconst unitUnfavoritedSchema = propertyWithNameSchema.extend({\n unitId: z.string().min(1, \"unitId is required\"),\n unitName: z.string().min(1, \"unitName is required\"),\n unitSlug: z.string().min(1, \"unitSlug is required\"),\n resultsUnitCount: z.number().int().nonnegative(),\n unitCountDate: z.string().optional(),\n unitIndex: z.number().int().nonnegative(),\n});\n\nexport type BaseEvent = z.infer<typeof propertyContextSchema>;\nexport type ViewAllUnitsEvent = z.infer<typeof viewAllUnitsSchema>;\nexport type LoadMoreEvent = z.infer<typeof loadMoreSchema>;\nexport type QuestionnaireEvent = z.infer<typeof questionnaireEventSchema>;\nexport type ContinueQuestionnaireEvent = z.infer<\n typeof continueQuestionnaireEventSchema\n>;\nexport type ClickUnitEvent = z.infer<typeof clickUnitSchema>;\nexport type UnitEvent = z.infer<typeof unitEventSchema>;\nexport type HoverUnitEvent = z.infer<typeof hoverUnitSchema>;\nexport type FilterEvent = z.infer<typeof filterMutationSchema>;\nexport type FilterOpenEvent = z.infer<typeof filterOpenSchema>;\nexport type SortEvent = z.infer<typeof sortEventSchema>;\nexport type SortOpenEvent = z.infer<typeof sortOpenSchema>;\nexport type QuestionnaireResultEvent = z.infer<\n typeof questionnaireResultSchema\n>;\nexport type ClickUnitFavoritesEvent = z.infer<typeof clickUnitFavoritesSchema>;\nexport type ScheduleTourFormEvent = z.infer<typeof scheduleTourFormSchema>;\nexport type UnitUnfavoritedEvent = z.infer<typeof unitUnfavoritedSchema>;\n\nexport type GetInTouchFormEvent = z.infer<typeof getInTouchFormSchema>;\nexport type StyleDrawerEvent = z.infer<typeof styleDrawerSchema>;\nexport type FurnitureInteractionEvent = z.infer<typeof furnitureInteractionSchema>;\nexport type FurnitureExternalUrlClickedEvent = z.infer<typeof furnitureExternalUrlSchema>;\nexport type FurnitureSavedEvent = z.infer<typeof furnitureSavedSchema>;\nexport type FurnitureModalOpenedEvent = z.infer<typeof furnitureModalOpenedSchema>;\nexport type FurnitureCarouselEvent = z.infer<typeof furnitureCarouselSchema>;\nexport type RoomEnteredEvent = z.infer<typeof roomEnteredSchema>;\nexport type RoomLeftEvent = z.infer<typeof roomLeftSchema>;\nexport type VideoStartedEvent = z.infer<typeof videoStartedSchema>;\nexport type EmailTrackedEvent = z.infer<typeof emailTrackedSchema>;\nexport type ToastEvent = z.infer<typeof toastSchema>;\nexport type ContentModalOpenedEvent = z.infer<typeof contentModalOpenedSchema>;\nexport type BuildingDetailsModalEvent = z.infer<typeof buildingDetailsModalSchema>;\nexport type SubscriptionImpressionEvent = z.infer<typeof subscriptionImpressionSchema>;\nexport type SubscriptionInteractedEvent = z.infer<typeof subscriptionInteractedSchema>;\nexport type SubscriptionSubmittedEvent = z.infer<typeof subscriptionSubmittedSchema>;\nexport type SubscriptionRemovedEvent = z.infer<typeof subscriptionRemovedSchema>;\nexport type WebPageViewedEvent = z.infer<typeof webPageViewedSchema>;\nexport type WebPageRoomViewedEvent = z.infer<typeof webPageRoomViewedSchema>;\n\n\nexport type TrackingEventWithUnits = FilterEvent & {\n trackingEvent: (payload: FilterEvent) => void;\n [metadata: string]: unknown;\n};\n\nexport type TrackEventFn = (eventName: string, data?: Record<string, any>) => void;\n\nexport function useTrackEvent() {\n const analytics = useAnalytics();\n return (eventName: string, data?: Record<string, any>) => {\n const payload =\n data == null ? data : (convertKeysToSnakeCase(data) as Record<string, any>);\n analytics.track(eventName, payload);\n };\n}\n\nconst createStrictTrackerInternal =\n <Schema extends z.ZodTypeAny>(\n eventName: string,\n schema: Schema,\n dispatch: (eventName: string, payload: unknown) => void,\n options?: { isDev?: boolean },\n ) =>\n (payload: AnalyticsPayload<Schema>) => {\n const payloadToValidate = convertKeysToCamelCase(payload) as z.input<Schema>;\n const result = schema.safeParse(payloadToValidate);\n if (!result.success) {\n if (options?.isDev) {\n // eslint-disable-next-line no-console\n console.warn(`[Analytics] Invalid payload for \"${eventName}\":`, result.error.issues);\n }\n return;\n }\n dispatch(eventName, payload);\n };\n\nexport function buildTrackingEvents(trackEvent: TrackEventFn, isDev = false) {\n const dispatch = (eventName: string, payload: unknown) => {\n const finalPayload = convertKeysToSnakeCase(payload) as Record<string, any>;\n trackEvent(eventName, finalPayload);\n };\n\n const createStrictTracker = <Schema extends z.ZodTypeAny>(\n eventName: string,\n schema: Schema,\n ) =>\n createStrictTrackerInternal(eventName, schema, dispatch, { isDev });\n\n return {\n trackViewAllUnits: (\n payload: AnalyticsPayload<typeof viewAllUnitsSchema>,\n ) => {\n const normalizedPayload = convertKeysToCamelCase(\n payload,\n ) as z.input<typeof viewAllUnitsSchema>;\n const result = viewAllUnitsSchema.safeParse({\n unitCountDate: new Date().toISOString(),\n ...normalizedPayload,\n });\n if (!result.success) {\n if (isDev) console.warn(\"[Analytics] Invalid payload for \\\"View All Units\\\":\", result.error.flatten()); // eslint-disable-line no-console\n return;\n }\n dispatch(\"View All Units\", result.data);\n },\n trackQuestionnaireSkip: (\n payload: AnalyticsPayloadWithout<\n typeof questionnaireEventSchema,\n \"interactedElement\"\n >,\n ) => {\n const normalizedPayload = convertKeysToCamelCase(\n payload,\n ) as Omit<\n z.input<typeof questionnaireEventSchema>,\n \"interactedElement\"\n >;\n const result = questionnaireEventSchema.safeParse({\n ...normalizedPayload,\n interactedElement: \"Skip\",\n });\n if (!result.success) {\n if (isDev) console.warn(\"[Analytics] Invalid payload for \\\"Questionnaire Navigated\\\" (Skip):\", result.error.flatten()); // eslint-disable-line no-console\n return;\n }\n dispatch(\"Questionnaire Navigated\", result.data);\n },\n trackQuestionnaireContinue: (\n payload: AnalyticsPayloadWithout<\n typeof continueQuestionnaireEventSchema,\n \"interactedElement\"\n >,\n ) => {\n const normalizedPayload = convertKeysToCamelCase(\n payload,\n ) as Omit<\n z.input<typeof continueQuestionnaireEventSchema>,\n \"interactedElement\"\n >;\n const result = continueQuestionnaireEventSchema.safeParse({\n ...normalizedPayload,\n interactedElement: \"Continue\",\n });\n if (!result.success) {\n if (isDev) console.warn(\"[Analytics] Invalid payload for \\\"Questionnaire Navigated\\\" (Continue):\", result.error.flatten()); // eslint-disable-line no-console\n return;\n }\n dispatch(\"Questionnaire Navigated\", result.data);\n },\n trackQuestionnaireBack: (\n payload: AnalyticsPayloadWithout<\n typeof questionnaireEventSchema,\n \"interactedElement\"\n >,\n ) => {\n const normalizedPayload = convertKeysToCamelCase(\n payload,\n ) as Omit<\n z.input<typeof questionnaireEventSchema>,\n \"interactedElement\"\n >;\n const result = questionnaireEventSchema.safeParse({\n ...normalizedPayload,\n interactedElement: \"Back\",\n });\n if (!result.success) {\n if (isDev) console.warn(\"[Analytics] Invalid payload for \\\"Questionnaire Navigated\\\" (Back):\", result.error.flatten()); // eslint-disable-line no-console\n return;\n }\n dispatch(\"Questionnaire Navigated\", result.data);\n },\n trackClickUnit: createStrictTracker(\"Unit Card Clicked\", clickUnitSchema),\n trackHoverUnit: createStrictTracker(\"Unit Hovered\", hoverUnitSchema, ),\n trackLoadMore: (\n payload: AnalyticsPayload<typeof loadMoreSchema>,\n ) => {\n const normalizedPayload = convertKeysToCamelCase(\n payload,\n ) as z.input<typeof loadMoreSchema>;\n const result = loadMoreSchema.safeParse({\n unitCountDate: new Date().toISOString(),\n ...normalizedPayload,\n });\n if (!result.success) {\n if (isDev) console.warn(\"[Analytics] Invalid payload for \\\"More Units Loaded\\\":\", result.error.flatten()); // eslint-disable-line no-console\n return;\n }\n dispatch(\"More Units Loaded\", result.data);\n },\n trackFilterOpened: createStrictTracker(\"Filter Opened\", filterOpenSchema),\n trackFilterCanceled: createStrictTracker(\n \"Filter Cleared\",\n filterMutationSchema,\n ),\n trackFilterApplied: createStrictTracker(\n \"Filter Applied\",\n filterMutationSchema,\n ),\n trackOpenSort: (\n payload: AnalyticsPayload<typeof sortOpenSchema>,\n ) => {\n const normalizedPayload = convertKeysToCamelCase(\n payload,\n ) as z.input<typeof sortOpenSchema>;\n const result = sortOpenSchema.safeParse({\n unitCountDate: new Date().toISOString(),\n ...normalizedPayload,\n });\n if (!result.success) {\n if (isDev) console.warn(\"[Analytics] Invalid payload for \\\"Sort Opened\\\":\", result.error.flatten()); // eslint-disable-line no-console\n return;\n }\n dispatch(\"Sort Opened\", result.data);\n },\n trackSelectSort: createStrictTracker(\"Sort Applied\", sortEventSchema),\n trackCancelSort: createStrictTracker(\"Sort Canceled\", sortEventSchema),\n trackClickUnitFavorites: createStrictTracker(\n \"Unit Favorited\",\n clickUnitFavoritesSchema,\n ),\n trackUnitUnfavorited: createStrictTracker(\n \"Unit Unfavorited\",\n unitUnfavoritedSchema,\n ),\n trackQuestionnaireResult: createStrictTracker(\n \"Questionnaire Submitted\",\n questionnaireResultSchema,\n ),\n trackScheduleTourFormInteracted: createStrictTracker(\n \"Schedule Tour Form Interacted\",\n scheduleTourFormSchema,\n ),\n trackScheduleTourFormSubmitted: createStrictTracker(\n \"Schedule Tour Form Submitted\",\n scheduleTourFormSchema,\n ),\n trackScheduleTourUrlClicked: createStrictTracker(\n \"Schedule Tour URL Clicked\",\n scheduleTourFormSchema,\n ),\n trackGetInTouchFormOpened: createStrictTracker(\n \"Form Opened\",\n getInTouchFormSchema,\n ),\n trackGetInTouchFormSubmitted: createStrictTracker(\n \"Form Submitted\",\n getInTouchFormSchema,\n ),\n trackStyleDrawerOpened: createStrictTracker(\n \"Style Menu Opened\",\n styleDrawerSchema,\n ),\n trackStyleDrawerChanged: createStrictTracker(\n \"Style Changed\",\n styleDrawerSchema,\n ),\n trackOpeningStyleImpression: createStrictTracker(\n \"Opening Style Modal Impression\",\n styleDrawerSchema,\n ),\n trackOpeningStyleSlected: createStrictTracker(\n \"Opening Style Selected\",\n styleDrawerSchema,\n ),\n trackFurnitureViewed: createStrictTracker(\n \"Furniture Viewed\",\n furnitureInteractionSchema,\n ),\n trackFurnitureExternalUrlClicked: createStrictTracker(\n \"Purchase Link Clicked\",\n furnitureExternalUrlSchema,\n ),\n trackFurnitureSaved: createStrictTracker(\n \"Furniture Saved\",\n furnitureSavedSchema,\n ),\n trackFurnitureModalOpened: createStrictTracker(\n \"Furniture Modal Opened\",\n furnitureModalOpenedSchema,\n ),\n trackFurnitureCarouselToggled: createStrictTracker(\n \"Furniture Carousel Toggled\",\n furnitureCarouselSchema,\n ),\n trackRoomEntered: createStrictTracker(\n \"Room Entered\",\n roomEnteredSchema,\n ),\n trackRoomLeft: createStrictTracker(\n \"Room Left\",\n roomLeftSchema,\n ),\n trackVideoStarted: createStrictTracker(\n \"Video Started\",\n videoStartedSchema,\n ),\n trackEmailRedirect: createStrictTracker(\n \"Email Tracked\",\n emailTrackedSchema,\n ),\n trackToastImpression: createStrictTracker(\n \"Toast Impression\",\n toastSchema,\n ),\n trackToastClicked: createStrictTracker(\n \"Toast Clicked\",\n toastSchema,\n ),\n trackToastClosed: createStrictTracker(\n \"Toast Closed\",\n toastSchema,\n ),\n trackContentModalOpened: createStrictTracker(\n \"Content Modal Opened\",\n contentModalOpenedSchema,\n ),\n trackBuildingDetailsModalOpened: createStrictTracker(\n \"Building Details Modal\",\n buildingDetailsModalSchema,\n ),\n trackSubscriptionImpression: createStrictTracker(\n \"Subscription Impression\",\n subscriptionImpressionSchema,\n ),\n trackSubscriptionInteracted: createStrictTracker(\n \"Subscription Interacted\",\n subscriptionInteractedSchema,\n ),\n trackSubscriptionSubmitted: createStrictTracker(\n \"Subscription Submitted\",\n subscriptionSubmittedSchema,\n ),\n trackSubscriptionRemoved: createStrictTracker(\n \"Subscription Removed\",\n subscriptionRemovedSchema,\n ),\n trackWebPageViewed: createStrictTracker(\n \"Page Viewed\",\n webPageViewedSchema,\n ),\n trackWebPageRoomViewed: createStrictTracker(\n \"Page Viewed\",\n webPageRoomViewedSchema,\n ),\n trackEmbedPageViewed: createStrictTracker(\n \"Embed Impression\",\n embedPageViewedSchema,\n ),\n trackEmailClickGeneric: (data: { event_name: string }) => createStrictTracker(\n `Email Interaction - ${data.event_name}`,\n embedPageViewSchemaWithUTM,\n ),\n trackEmailClickConfirmation: () => createStrictTracker(\n \"Notify Me Email Confirmation\",\n embedPageViewSchemaWithUTM,\n ),\n trackEmailClickNotification: () => createStrictTracker(\n \"Notify Me Email Notification\",\n embedPageViewSchemaWithUTM,\n ),\n };\n}\n\nexport function useTrackingEvents() {\n const { isDev } = useAnalytics();\n const trackEvent = useTrackEvent();\n return buildTrackingEvents(trackEvent, isDev);\n}\n"],"names":["QuestionEnumValues","SortEnumValues","QuestionnaireInteractionValues","propertyContextSchema","z.object","z.string","propertyWithNameSchema","viewAllUnitsSchema","z.number","loadMoreSchema","scheduleTourFormSchema","z.unknown","questionnaireEventSchema","z.enum","continueQuestionnaireEventSchema","z.any","value","normalizeToStringArray","unitWithPropertyNameSchema","getInTouchFormSchema","z.boolean","styleDrawerSchema","furnitureInteractionSchema","furnitureExternalUrlSchema","furnitureSavedSchema","furnitureModalOpenedSchema","furnitureCarouselSchema","roomEnteredSchema","roomLeftSchema","videoStartedSchema","emailTrackedSchema","webPageViewedBaseSchema","webPageViewedSchema","webPageRoomViewedSchema","embedPageViewedSchema","embedPageViewSchemaWithUTM","toastSchema","contentModalOpenedSchema","buildingDetailsModalSchema","subscriptionImpressionSchema","subscriptionInteractedSchema","subscriptionSubmittedSchema","z.array","z.union","subscriptionRemovedSchema","hoverUnitSchema","selectionSchema","filterOpenSchema","filterMutationSchema","sortEventSchema","sortOpenSchema","questionnaireResultSchema","clickUnitSchema","clickUnitFavoritesSchema","unitUnfavoritedSchema","useTrackEvent","analytics","useAnalytics","eventName","data","payload","convertKeysToSnakeCase","createStrictTrackerInternal","schema","dispatch","options","payloadToValidate","convertKeysToCamelCase","result","buildTrackingEvents","trackEvent","isDev","finalPayload","createStrictTracker","normalizedPayload","useTrackingEvents"],"mappings":"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"}
|