@superbright/indexeddb-orm 1.0.6 → 1.0.7
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 +73 -0
- package/dist/features/analytics/analytics.mjs +153 -136
- 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
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const u=require("../../utils/casing.cjs"),q=require("../../utils/collections.cjs"),O=require("./MixpanelProvider.cjs"),e=require("../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/types.cjs"),x=["location","budget","size","other"],f=["cost_low_to_high","cost_high_to_low","newest","relevance"],N=["Skip","Continue","Back"],d=e.object({propertyId:e.string().min(1,"propertyId is required"),propertySlug:e.string().min(1,"propertySlug is required")}),m=d.extend({propertyName:e.string().min(1,"propertyName is required")}),P=m.extend({totalUnitsAvailable:e.number().int().nonnegative(),resultsUnitCount:e.number().int().nonnegative(),unitCountDate:e.string().optional()}),U=m.extend({totalUnitsAvailable:e.number().int().nonnegative(),resultsUnitCount:e.number().int().nonnegative(),unitCountDate:e.string().optional()}),c=m.extend({totalUnitsAvailable:e.number().int().nonnegative(),resultsUnitCount:e.number().int().nonnegative(),unitCountDate:e.string().optional(),lifestylePreferences:e.unknown().optional()}),y=m.extend({funnelStep:e.number().int().nonnegative(),profileQuestion:e.string().min(1,"profileQuestion is required"),interactedElement:e.enum(N),questionEnum:e.string().optional()}),E=y.extend({selectedAnswersEnumArray:e.any().transform(a=>q.normalizeToStringArray(a)).refine(a=>Array.isArray(a),{message:"selectedAnswersEnumArray must resolve to an array"})}),s=d.extend({unitId:e.string().min(1,"unitId is required"),unitTitle:e.string().min(1,"unitTitle is required"),unitSlug:e.string().min(1,"unitSlug is required")}),k=s.extend({propertyName:e.string().min(1,"propertyName is required"),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()}),S=s.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()}),K=s.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")}),F=s.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()}),A=s.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")}),D=s.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")}),b=s.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=b.extend({timeInRoom:e.number().int().nonnegative()}),M=s.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")}),B=s.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()}),g=s.extend({toastCopy:e.string().min(1,"toastCopy is required")}),p=m.extend({unitId:e.string().min(1,"unitId is required"),unitTitle:e.string().min(1,"unitTitle is required"),unitSlug:e.string().min(1,"unitSlug is required")}),V=p.extend({favoritedUnit:e.boolean()}),h=e.any().transform(a=>q.normalizeToStringArray(a)).refine(a=>Array.isArray(a),{message:"Selection must resolve to an array"}),L=m.extend({filterIndex:e.number().int().nonnegative(),filterLabel:e.string().min(1,"filterLabel is required"),selectedFiltersEnum:h,filterName:e.string().optional()}),v=m.extend({filterIndex:e.number().int().nonnegative(),filterLabel:e.string().min(1,"filterLabel is required"),selectedFiltersEnum:h}),T=d.extend({sortIndex:e.number().int().nonnegative(),sortEnum:e.enum(f)}),z=m.extend({sortIndex:e.number().int().nonnegative(),sortEnum:e.enum(f),resultsUnitCount:e.number().int().nonnegative(),unitCountDate:e.string().optional()}),R=d.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()}),_=p.extend({favoritedUnit:e.boolean()}),j=p.extend({favoritedUnit:e.boolean()}),G=m.extend({unitId:e.string().min(1,"unitId is required"),unitTitle:e.string().min(1,"unitTitle is required"),unitSlug:e.string().min(1,"unitSlug is required"),resultsUnitCount:e.number().int().nonnegative(),unitCountDate:e.string().optional()});function C(){const a=O.useMixpanel();return(o,r)=>{const n=r==null?r:u.convertKeysToSnakeCase(r);a.track(o,n)}}const H=(a,o,r,n)=>t=>{const i=u.convertKeysToCamelCase(t),l=o.parse(i),w=n!=null&&n.forwardOriginalPayload?t:l;r(a,w,{skipKeyTransform:n==null?void 0:n.skipKeyTransform})};function I(a){const o=(n,t,i)=>{const l=i!=null&&i.skipKeyTransform?t:u.convertKeysToSnakeCase(t);a(n,l)},r=(n,t,i)=>H(n,t,o,i);return{trackViewAllUnits:n=>{const t=u.convertKeysToCamelCase(n),i=P.parse({unitCountDate:new Date().toISOString(),...t});o("View All Units",i)},trackQuestionnaireSkip:n=>{const t=u.convertKeysToCamelCase(n),i=y.parse({...t,interactedElement:"Skip"});o("Questionnaire Navigated",i)},trackQuestionnaireContinue:n=>{const t=u.convertKeysToCamelCase(n),i=E.parse({...t,interactedElement:"Continue"});o("Questionnaire Navigated",i)},trackQuestionnaireBack:n=>{const t=u.convertKeysToCamelCase(n),i=y.parse({...t,interactedElement:"Back"});o("Questionnaire Navigated",i)},trackClickUnit:r("Unit Card Clicked",_,{skipKeyTransform:!0,forwardOriginalPayload:!0}),trackHoverUnit:r("Unit Hovered",V,{skipKeyTransform:!0,forwardOriginalPayload:!0}),trackLoadMore:n=>{const t=u.convertKeysToCamelCase(n),i=U.parse({unitCountDate:new Date().toISOString(),...t});o("Load More",i)},trackFilterOpened:r("Filter Opened",L),trackFilterCanceled:r("Filter Canceled",v),trackFilterApplied:r("Filter Applied",v),trackOpenSort:n=>{const t=u.convertKeysToCamelCase(n),i=z.parse({unitCountDate:new Date().toISOString(),...t});o("Sort Opened",i)},trackSelectSort:r("Sort Applied",T),trackCancelSort:r("Sort Canceled",T),trackClickUnitFavorites:r("Unit Favorited",j),trackUnitUnfavorited:r("Unit Unfavorited",G),trackQuestionnaireResult:r("Questionnaire Submitted",R),trackScheduleTourFormInteracted:r("Schedule Tour Form Interacted",c,{skipKeyTransform:!0,forwardOriginalPayload:!0}),trackScheduleTourFormSubmitted:r("Schedule Tour Form Submitted",c,{skipKeyTransform:!0,forwardOriginalPayload:!0}),trackScheduleTourUrlClicked:r("Schedule Tour URL Clicked",c,{skipKeyTransform:!0,forwardOriginalPayload:!0}),trackGetInTouchFormOpened:r("Form Opened",k,{skipKeyTransform:!0,forwardOriginalPayload:!0}),trackGetInTouchFormSubmitted:r("Form Submitted",k,{skipKeyTransform:!0,forwardOriginalPayload:!0}),trackStyleDrawerOpened:r("Style Menu Opened",S,{skipKeyTransform:!0,forwardOriginalPayload:!0}),trackStyleDrawerChanged:r("Style Changed",S,{skipKeyTransform:!0,forwardOriginalPayload:!0}),trackFurnitureViewed:r("Furniture Selected",K,{skipKeyTransform:!0,forwardOriginalPayload:!0}),trackFurnitureExternalUrlClicked:r("Purchase Link Clicked",F,{skipKeyTransform:!0,forwardOriginalPayload:!0}),trackFurnitureSaved:r("Furniture Saved",A,{skipKeyTransform:!0,forwardOriginalPayload:!0}),trackFurnitureModalOpened:r("Furniture Modal Opened",D,{skipKeyTransform:!0,forwardOriginalPayload:!0}),trackRoomEntered:r("Room Entered",b,{skipKeyTransform:!0,forwardOriginalPayload:!0}),trackRoomLeft:r("Room Left",Q,{skipKeyTransform:!0,forwardOriginalPayload:!0}),trackVideoStarted:r("Video Started",M,{skipKeyTransform:!0,forwardOriginalPayload:!0}),trackEmailRedirect:r("Email Tracked",B,{skipKeyTransform:!0,forwardOriginalPayload:!0}),trackToastImpression:r("Toast Impression",g,{skipKeyTransform:!0,forwardOriginalPayload:!0}),trackToastClicked:r("Toast Clicked",g,{skipKeyTransform:!0,forwardOriginalPayload:!0}),trackToastClosed:r("Toast Closed",g,{skipKeyTransform:!0,forwardOriginalPayload:!0})}}function J(){const a=C();return I(a)}exports.QuestionEnumValues=x;exports.QuestionnaireInteractionValues=N;exports.SortEnumValues=f;exports.buildTrackingEvents=I;exports.useTrackEvent=C;exports.useTrackingEvents=J;
|
|
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 { useMixpanel } from \"./MixpanelProvider\";\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});\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 unitTitle: z.string().min(1, \"unitTitle is required\"),\n unitSlug: z.string().min(1, \"unitSlug is required\"),\n});\nconst getInTouchFormSchema = unitEventSchema.extend({\n propertyName: z.string().min(1, \"propertyName is required\"),\n\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 = unitEventSchema.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 furnitureViewedSchema = unitEventSchema.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})\nconst furnitureExternalUrlSchema = unitEventSchema.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})\nconst furnitureSavedSchema = unitEventSchema.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})\nconst furnitureModalOpenedSchema = unitEventSchema.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})\n\nconst roomEnteredSchema = unitEventSchema.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 = unitEventSchema.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 = unitEventSchema.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 unitWithPropertyNameSchema = propertyWithNameSchema.extend({\n unitId: z.string().min(1, \"unitId is required\"),\n unitTitle: z.string().min(1, \"unitTitle is required\"),\n unitSlug: z.string().min(1, \"unitSlug is required\"),\n});\n\nconst hoverUnitSchema = unitWithPropertyNameSchema.extend({\n favoritedUnit: z.boolean(),\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});\n\nconst clickUnitFavoritesSchema = unitWithPropertyNameSchema.extend({\n favoritedUnit: z.boolean(),\n});\n\nconst unitUnfavoritedSchema = propertyWithNameSchema.extend({\n unitId: z.string().min(1, \"unitId is required\"),\n unitTitle: z.string().min(1, \"unitTitle is required\"),\n unitSlug: z.string().min(1, \"unitSlug is required\"),\n resultsUnitCount: z.number().int().nonnegative(),\n unitCountDate: z.string().optional(),\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 FurnitureViewedEvent = z.infer<typeof furnitureViewedSchema>;\nexport type FurnitureExternalUrlClickedEvent = z.infer<typeof furnitureExternalUrlSchema>;\nexport type FurnitureSavedEvent = z.infer<typeof furnitureSavedSchema>;\nexport type FurnitureModalOpenedEvent = z.infer<typeof furnitureModalOpenedSchema>;\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>;\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 mixpanel = useMixpanel();\n return (eventName: string, data?: Record<string, any>) => {\n const payload =\n data == null ? data : (convertKeysToSnakeCase(data) as Record<string, any>);\n mixpanel.track(eventName, payload);\n };\n}\n\nconst createStrictTrackerInternal =\n <Schema extends z.ZodTypeAny>(\n eventName: string,\n schema: Schema,\n dispatch: (\n eventName: string,\n payload: unknown,\n options?: { skipKeyTransform?: boolean },\n ) => void,\n options?: { skipKeyTransform?: boolean; forwardOriginalPayload?: boolean },\n ) =>\n (payload: AnalyticsPayload<Schema>) => {\n const normalizedPayload = convertKeysToCamelCase(\n payload,\n ) as z.input<Schema>;\n const parsed = schema.parse(normalizedPayload);\n const payloadForDispatch = options?.forwardOriginalPayload\n ? payload\n : parsed;\n dispatch(eventName, payloadForDispatch, {\n skipKeyTransform: options?.skipKeyTransform,\n });\n };\n\nexport function buildTrackingEvents(trackEvent: TrackEventFn) {\n const dispatch = (\n eventName: string,\n payload: unknown,\n options?: { skipKeyTransform?: boolean },\n ) => {\n const finalPayload = options?.skipKeyTransform\n ? (payload as Record<string, any>)\n : (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 options?: { skipKeyTransform?: boolean; forwardOriginalPayload?: boolean },\n ) => createStrictTrackerInternal(eventName, schema, dispatch, options);\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 parsed = viewAllUnitsSchema.parse({\n unitCountDate: new Date().toISOString(),\n ...normalizedPayload,\n });\n dispatch(\"View All Units\", parsed);\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 parsed = questionnaireEventSchema.parse({\n ...normalizedPayload,\n interactedElement: \"Skip\",\n });\n dispatch(\"Questionnaire Navigated\", parsed);\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 parsed = continueQuestionnaireEventSchema.parse({\n ...normalizedPayload,\n interactedElement: \"Continue\",\n });\n dispatch(\"Questionnaire Navigated\", parsed);\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 parsed = questionnaireEventSchema.parse({\n ...normalizedPayload,\n interactedElement: \"Back\",\n });\n dispatch(\"Questionnaire Navigated\", parsed);\n },\n trackClickUnit: createStrictTracker(\"Unit Card Clicked\", clickUnitSchema, {\n skipKeyTransform: true,\n forwardOriginalPayload: true,\n }),\n trackHoverUnit: createStrictTracker(\"Unit Hovered\", hoverUnitSchema, {\n skipKeyTransform: true,\n forwardOriginalPayload: true,\n }),\n trackLoadMore: (\n payload: AnalyticsPayload<typeof loadMoreSchema>,\n ) => {\n const normalizedPayload = convertKeysToCamelCase(\n payload,\n ) as z.input<typeof loadMoreSchema>;\n const parsed = loadMoreSchema.parse({\n unitCountDate: new Date().toISOString(),\n ...normalizedPayload,\n });\n dispatch(\"Load More\", parsed);\n },\n trackFilterOpened: createStrictTracker(\"Filter Opened\", filterOpenSchema),\n trackFilterCanceled: createStrictTracker(\n \"Filter Canceled\",\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 parsed = sortOpenSchema.parse({\n unitCountDate: new Date().toISOString(),\n ...normalizedPayload,\n });\n dispatch(\"Sort Opened\", parsed);\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 { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackScheduleTourFormSubmitted: createStrictTracker(\n \"Schedule Tour Form Submitted\",\n scheduleTourFormSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackScheduleTourUrlClicked: createStrictTracker(\n \"Schedule Tour URL Clicked\",\n scheduleTourFormSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackGetInTouchFormOpened: createStrictTracker(\n \"Form Opened\",\n getInTouchFormSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackGetInTouchFormSubmitted: createStrictTracker(\n \"Form Submitted\",\n getInTouchFormSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackStyleDrawerOpened: createStrictTracker(\n \"Style Menu Opened\",\n styleDrawerSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackStyleDrawerChanged: createStrictTracker(\n \"Style Changed\",\n styleDrawerSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackFurnitureViewed: createStrictTracker(\n \"Furniture Selected\",\n furnitureViewedSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackFurnitureExternalUrlClicked: createStrictTracker(\n \"Purchase Link Clicked\",\n furnitureExternalUrlSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackFurnitureSaved: createStrictTracker(\n \"Furniture Saved\",\n furnitureSavedSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackFurnitureModalOpened: createStrictTracker(\n \"Furniture Modal Opened\",\n furnitureModalOpenedSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackRoomEntered: createStrictTracker(\n \"Room Entered\",\n roomEnteredSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackRoomLeft: createStrictTracker(\n \"Room Left\",\n roomLeftSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackVideoStarted: createStrictTracker(\n \"Video Started\",\n videoStartedSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackEmailRedirect: createStrictTracker(\n \"Email Tracked\",\n emailTrackedSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n };\n}\n\nexport function useTrackingEvents() {\n const trackEvent = useTrackEvent();\n return buildTrackingEvents(trackEvent);\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","unitEventSchema","getInTouchFormSchema","z.boolean","styleDrawerSchema","furnitureViewedSchema","furnitureExternalUrlSchema","furnitureSavedSchema","furnitureModalOpenedSchema","roomEnteredSchema","roomLeftSchema","videoStartedSchema","emailTrackedSchema","unitWithPropertyNameSchema","hoverUnitSchema","selectionSchema","filterOpenSchema","filterMutationSchema","sortEventSchema","sortOpenSchema","questionnaireResultSchema","z.array","clickUnitSchema","clickUnitFavoritesSchema","unitUnfavoritedSchema","useTrackEvent","mixpanel","useMixpanel","eventName","data","payload","convertKeysToSnakeCase","createStrictTrackerInternal","schema","dispatch","options","normalizedPayload","convertKeysToCamelCase","parsed","payloadForDispatch","buildTrackingEvents","trackEvent","finalPayload","createStrictTracker","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 { useMixpanel } from \"./MixpanelProvider\";\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});\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 unitTitle: z.string().min(1, \"unitTitle is required\"),\n unitSlug: z.string().min(1, \"unitSlug is required\"),\n});\nconst getInTouchFormSchema = unitEventSchema.extend({\n propertyName: z.string().min(1, \"propertyName is required\"),\n\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 = unitEventSchema.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 furnitureViewedSchema = unitEventSchema.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})\nconst furnitureExternalUrlSchema = unitEventSchema.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})\nconst furnitureSavedSchema = unitEventSchema.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})\nconst furnitureModalOpenedSchema = unitEventSchema.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})\n\nconst roomEnteredSchema = unitEventSchema.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 = unitEventSchema.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 = unitEventSchema.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 toastSchema = unitEventSchema.extend({\n toastCopy: z.string().min(1, \"toastCopy is required\"),\n})\nconst unitWithPropertyNameSchema = propertyWithNameSchema.extend({\n unitId: z.string().min(1, \"unitId is required\"),\n unitTitle: z.string().min(1, \"unitTitle is required\"),\n unitSlug: z.string().min(1, \"unitSlug is required\"),\n});\n\nconst hoverUnitSchema = unitWithPropertyNameSchema.extend({\n favoritedUnit: z.boolean(),\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});\n\nconst clickUnitFavoritesSchema = unitWithPropertyNameSchema.extend({\n favoritedUnit: z.boolean(),\n});\n\nconst unitUnfavoritedSchema = propertyWithNameSchema.extend({\n unitId: z.string().min(1, \"unitId is required\"),\n unitTitle: z.string().min(1, \"unitTitle is required\"),\n unitSlug: z.string().min(1, \"unitSlug is required\"),\n resultsUnitCount: z.number().int().nonnegative(),\n unitCountDate: z.string().optional(),\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 FurnitureViewedEvent = z.infer<typeof furnitureViewedSchema>;\nexport type FurnitureExternalUrlClickedEvent = z.infer<typeof furnitureExternalUrlSchema>;\nexport type FurnitureSavedEvent = z.infer<typeof furnitureSavedSchema>;\nexport type FurnitureModalOpenedEvent = z.infer<typeof furnitureModalOpenedSchema>;\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>;\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 mixpanel = useMixpanel();\n return (eventName: string, data?: Record<string, any>) => {\n const payload =\n data == null ? data : (convertKeysToSnakeCase(data) as Record<string, any>);\n mixpanel.track(eventName, payload);\n };\n}\n\nconst createStrictTrackerInternal =\n <Schema extends z.ZodTypeAny>(\n eventName: string,\n schema: Schema,\n dispatch: (\n eventName: string,\n payload: unknown,\n options?: { skipKeyTransform?: boolean },\n ) => void,\n options?: { skipKeyTransform?: boolean; forwardOriginalPayload?: boolean },\n ) =>\n (payload: AnalyticsPayload<Schema>) => {\n const normalizedPayload = convertKeysToCamelCase(\n payload,\n ) as z.input<Schema>;\n const parsed = schema.parse(normalizedPayload);\n const payloadForDispatch = options?.forwardOriginalPayload\n ? payload\n : parsed;\n dispatch(eventName, payloadForDispatch, {\n skipKeyTransform: options?.skipKeyTransform,\n });\n };\n\nexport function buildTrackingEvents(trackEvent: TrackEventFn) {\n const dispatch = (\n eventName: string,\n payload: unknown,\n options?: { skipKeyTransform?: boolean },\n ) => {\n const finalPayload = options?.skipKeyTransform\n ? (payload as Record<string, any>)\n : (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 options?: { skipKeyTransform?: boolean; forwardOriginalPayload?: boolean },\n ) => createStrictTrackerInternal(eventName, schema, dispatch, options);\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 parsed = viewAllUnitsSchema.parse({\n unitCountDate: new Date().toISOString(),\n ...normalizedPayload,\n });\n dispatch(\"View All Units\", parsed);\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 parsed = questionnaireEventSchema.parse({\n ...normalizedPayload,\n interactedElement: \"Skip\",\n });\n dispatch(\"Questionnaire Navigated\", parsed);\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 parsed = continueQuestionnaireEventSchema.parse({\n ...normalizedPayload,\n interactedElement: \"Continue\",\n });\n dispatch(\"Questionnaire Navigated\", parsed);\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 parsed = questionnaireEventSchema.parse({\n ...normalizedPayload,\n interactedElement: \"Back\",\n });\n dispatch(\"Questionnaire Navigated\", parsed);\n },\n trackClickUnit: createStrictTracker(\"Unit Card Clicked\", clickUnitSchema, {\n skipKeyTransform: true,\n forwardOriginalPayload: true,\n }),\n trackHoverUnit: createStrictTracker(\"Unit Hovered\", hoverUnitSchema, {\n skipKeyTransform: true,\n forwardOriginalPayload: true,\n }),\n trackLoadMore: (\n payload: AnalyticsPayload<typeof loadMoreSchema>,\n ) => {\n const normalizedPayload = convertKeysToCamelCase(\n payload,\n ) as z.input<typeof loadMoreSchema>;\n const parsed = loadMoreSchema.parse({\n unitCountDate: new Date().toISOString(),\n ...normalizedPayload,\n });\n dispatch(\"Load More\", parsed);\n },\n trackFilterOpened: createStrictTracker(\"Filter Opened\", filterOpenSchema),\n trackFilterCanceled: createStrictTracker(\n \"Filter Canceled\",\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 parsed = sortOpenSchema.parse({\n unitCountDate: new Date().toISOString(),\n ...normalizedPayload,\n });\n dispatch(\"Sort Opened\", parsed);\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 { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackScheduleTourFormSubmitted: createStrictTracker(\n \"Schedule Tour Form Submitted\",\n scheduleTourFormSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackScheduleTourUrlClicked: createStrictTracker(\n \"Schedule Tour URL Clicked\",\n scheduleTourFormSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackGetInTouchFormOpened: createStrictTracker(\n \"Form Opened\",\n getInTouchFormSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackGetInTouchFormSubmitted: createStrictTracker(\n \"Form Submitted\",\n getInTouchFormSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackStyleDrawerOpened: createStrictTracker(\n \"Style Menu Opened\",\n styleDrawerSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackStyleDrawerChanged: createStrictTracker(\n \"Style Changed\",\n styleDrawerSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackFurnitureViewed: createStrictTracker(\n \"Furniture Selected\",\n furnitureViewedSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackFurnitureExternalUrlClicked: createStrictTracker(\n \"Purchase Link Clicked\",\n furnitureExternalUrlSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackFurnitureSaved: createStrictTracker(\n \"Furniture Saved\",\n furnitureSavedSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackFurnitureModalOpened: createStrictTracker(\n \"Furniture Modal Opened\",\n furnitureModalOpenedSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackRoomEntered: createStrictTracker(\n \"Room Entered\",\n roomEnteredSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackRoomLeft: createStrictTracker(\n \"Room Left\",\n roomLeftSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackVideoStarted: createStrictTracker(\n \"Video Started\",\n videoStartedSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackEmailRedirect: createStrictTracker(\n \"Email Tracked\",\n emailTrackedSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackToastImpression: createStrictTracker(\n \"Toast Impression\",\n toastSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackToastClicked: createStrictTracker(\n \"Toast Clicked\",\n toastSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackToastClosed: createStrictTracker(\n \"Toast Closed\",\n toastSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n };\n}\n\nexport function useTrackingEvents() {\n const trackEvent = useTrackEvent();\n return buildTrackingEvents(trackEvent);\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","unitEventSchema","getInTouchFormSchema","z.boolean","styleDrawerSchema","furnitureViewedSchema","furnitureExternalUrlSchema","furnitureSavedSchema","furnitureModalOpenedSchema","roomEnteredSchema","roomLeftSchema","videoStartedSchema","emailTrackedSchema","toastSchema","unitWithPropertyNameSchema","hoverUnitSchema","selectionSchema","filterOpenSchema","filterMutationSchema","sortEventSchema","sortOpenSchema","questionnaireResultSchema","z.array","clickUnitSchema","clickUnitFavoritesSchema","unitUnfavoritedSchema","useTrackEvent","mixpanel","useMixpanel","eventName","data","payload","convertKeysToSnakeCase","createStrictTrackerInternal","schema","dispatch","options","normalizedPayload","convertKeysToCamelCase","parsed","payloadForDispatch","buildTrackingEvents","trackEvent","finalPayload","createStrictTracker","useTrackingEvents"],"mappings":"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"}
|
|
@@ -580,6 +580,30 @@ declare const emailTrackedSchema: z.ZodObject<{
|
|
|
580
580
|
utmMedium: string;
|
|
581
581
|
utmName: string;
|
|
582
582
|
}>;
|
|
583
|
+
declare const toastSchema: z.ZodObject<{
|
|
584
|
+
propertyId: z.ZodString;
|
|
585
|
+
propertySlug: z.ZodString;
|
|
586
|
+
} & {
|
|
587
|
+
unitId: z.ZodString;
|
|
588
|
+
unitTitle: z.ZodString;
|
|
589
|
+
unitSlug: z.ZodString;
|
|
590
|
+
} & {
|
|
591
|
+
toastCopy: z.ZodString;
|
|
592
|
+
}, "strip", z.ZodTypeAny, {
|
|
593
|
+
propertySlug: string;
|
|
594
|
+
propertyId: string;
|
|
595
|
+
unitId: string;
|
|
596
|
+
unitTitle: string;
|
|
597
|
+
unitSlug: string;
|
|
598
|
+
toastCopy: string;
|
|
599
|
+
}, {
|
|
600
|
+
propertySlug: string;
|
|
601
|
+
propertyId: string;
|
|
602
|
+
unitId: string;
|
|
603
|
+
unitTitle: string;
|
|
604
|
+
unitSlug: string;
|
|
605
|
+
toastCopy: string;
|
|
606
|
+
}>;
|
|
583
607
|
declare const hoverUnitSchema: z.ZodObject<{
|
|
584
608
|
propertyId: z.ZodString;
|
|
585
609
|
propertySlug: z.ZodString;
|
|
@@ -873,6 +897,7 @@ export type RoomEnteredEvent = z.infer<typeof roomEnteredSchema>;
|
|
|
873
897
|
export type RoomLeftEvent = z.infer<typeof roomLeftSchema>;
|
|
874
898
|
export type VideoStartedEvent = z.infer<typeof videoStartedSchema>;
|
|
875
899
|
export type EmailTrackedEvent = z.infer<typeof emailTrackedSchema>;
|
|
900
|
+
export type ToastEvent = z.infer<typeof toastSchema>;
|
|
876
901
|
export type TrackingEventWithUnits = FilterEvent & {
|
|
877
902
|
trackingEvent: (payload: FilterEvent) => void;
|
|
878
903
|
[metadata: string]: unknown;
|
|
@@ -1162,6 +1187,30 @@ export declare function buildTrackingEvents(trackEvent: TrackEventFn): {
|
|
|
1162
1187
|
utmMedium: string;
|
|
1163
1188
|
utmName: string;
|
|
1164
1189
|
}) => void;
|
|
1190
|
+
trackToastImpression: (payload: {
|
|
1191
|
+
propertySlug: string;
|
|
1192
|
+
propertyId: string;
|
|
1193
|
+
unitId: string;
|
|
1194
|
+
unitTitle: string;
|
|
1195
|
+
unitSlug: string;
|
|
1196
|
+
toastCopy: string;
|
|
1197
|
+
}) => void;
|
|
1198
|
+
trackToastClicked: (payload: {
|
|
1199
|
+
propertySlug: string;
|
|
1200
|
+
propertyId: string;
|
|
1201
|
+
unitId: string;
|
|
1202
|
+
unitTitle: string;
|
|
1203
|
+
unitSlug: string;
|
|
1204
|
+
toastCopy: string;
|
|
1205
|
+
}) => void;
|
|
1206
|
+
trackToastClosed: (payload: {
|
|
1207
|
+
propertySlug: string;
|
|
1208
|
+
propertyId: string;
|
|
1209
|
+
unitId: string;
|
|
1210
|
+
unitTitle: string;
|
|
1211
|
+
unitSlug: string;
|
|
1212
|
+
toastCopy: string;
|
|
1213
|
+
}) => void;
|
|
1165
1214
|
};
|
|
1166
1215
|
export declare function useTrackingEvents(): {
|
|
1167
1216
|
trackViewAllUnits: (payload: AnalyticsPayload<typeof viewAllUnitsSchema>) => void;
|
|
@@ -1446,5 +1495,29 @@ export declare function useTrackingEvents(): {
|
|
|
1446
1495
|
utmMedium: string;
|
|
1447
1496
|
utmName: string;
|
|
1448
1497
|
}) => void;
|
|
1498
|
+
trackToastImpression: (payload: {
|
|
1499
|
+
propertySlug: string;
|
|
1500
|
+
propertyId: string;
|
|
1501
|
+
unitId: string;
|
|
1502
|
+
unitTitle: string;
|
|
1503
|
+
unitSlug: string;
|
|
1504
|
+
toastCopy: string;
|
|
1505
|
+
}) => void;
|
|
1506
|
+
trackToastClicked: (payload: {
|
|
1507
|
+
propertySlug: string;
|
|
1508
|
+
propertyId: string;
|
|
1509
|
+
unitId: string;
|
|
1510
|
+
unitTitle: string;
|
|
1511
|
+
unitSlug: string;
|
|
1512
|
+
toastCopy: string;
|
|
1513
|
+
}) => void;
|
|
1514
|
+
trackToastClosed: (payload: {
|
|
1515
|
+
propertySlug: string;
|
|
1516
|
+
propertyId: string;
|
|
1517
|
+
unitId: string;
|
|
1518
|
+
unitTitle: string;
|
|
1519
|
+
unitSlug: string;
|
|
1520
|
+
toastCopy: string;
|
|
1521
|
+
}) => void;
|
|
1449
1522
|
};
|
|
1450
1523
|
export {};
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { convertKeysToSnakeCase as
|
|
2
|
-
import { normalizeToStringArray as
|
|
3
|
-
import { useMixpanel as
|
|
4
|
-
import { object as S, string as e, number as
|
|
5
|
-
const
|
|
1
|
+
import { convertKeysToSnakeCase as I, convertKeysToCamelCase as m } from "../../utils/casing.mjs";
|
|
2
|
+
import { normalizeToStringArray as C } from "../../utils/collections.mjs";
|
|
3
|
+
import { useMixpanel as E } from "./MixpanelProvider.mjs";
|
|
4
|
+
import { object as S, string as e, number as t, enum as c, any as w, unknown as x, boolean as l, array as K } from "../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/types.mjs";
|
|
5
|
+
const ae = ["location", "budget", "size", "other"], O = [
|
|
6
6
|
"cost_low_to_high",
|
|
7
7
|
"cost_high_to_low",
|
|
8
8
|
"newest",
|
|
@@ -14,58 +14,58 @@ const ie = ["location", "budget", "size", "other"], C = [
|
|
|
14
14
|
], y = S({
|
|
15
15
|
propertyId: e().min(1, "propertyId is required"),
|
|
16
16
|
propertySlug: e().min(1, "propertySlug is required")
|
|
17
|
-
}),
|
|
17
|
+
}), d = y.extend({
|
|
18
18
|
propertyName: e().min(1, "propertyName is required")
|
|
19
|
-
}),
|
|
20
|
-
totalUnitsAvailable:
|
|
21
|
-
resultsUnitCount:
|
|
19
|
+
}), A = d.extend({
|
|
20
|
+
totalUnitsAvailable: t().int().nonnegative(),
|
|
21
|
+
resultsUnitCount: t().int().nonnegative(),
|
|
22
22
|
unitCountDate: e().optional()
|
|
23
|
-
}),
|
|
24
|
-
totalUnitsAvailable:
|
|
25
|
-
resultsUnitCount:
|
|
23
|
+
}), D = d.extend({
|
|
24
|
+
totalUnitsAvailable: t().int().nonnegative(),
|
|
25
|
+
resultsUnitCount: t().int().nonnegative(),
|
|
26
26
|
unitCountDate: e().optional()
|
|
27
|
-
}), f =
|
|
28
|
-
totalUnitsAvailable:
|
|
29
|
-
resultsUnitCount:
|
|
27
|
+
}), f = d.extend({
|
|
28
|
+
totalUnitsAvailable: t().int().nonnegative(),
|
|
29
|
+
resultsUnitCount: t().int().nonnegative(),
|
|
30
30
|
unitCountDate: e().optional(),
|
|
31
|
-
lifestylePreferences:
|
|
32
|
-
}),
|
|
33
|
-
funnelStep:
|
|
31
|
+
lifestylePreferences: x().optional()
|
|
32
|
+
}), g = d.extend({
|
|
33
|
+
funnelStep: t().int().nonnegative(),
|
|
34
34
|
profileQuestion: e().min(1, "profileQuestion is required"),
|
|
35
35
|
interactedElement: c(b),
|
|
36
36
|
questionEnum: e().optional()
|
|
37
|
-
}),
|
|
38
|
-
selectedAnswersEnumArray:
|
|
37
|
+
}), Q = g.extend({
|
|
38
|
+
selectedAnswersEnumArray: w().transform((o) => C(o)).refine((o) => Array.isArray(o), {
|
|
39
39
|
message: "selectedAnswersEnumArray must resolve to an array"
|
|
40
40
|
})
|
|
41
|
-
}),
|
|
41
|
+
}), u = y.extend({
|
|
42
42
|
unitId: e().min(1, "unitId is required"),
|
|
43
43
|
unitTitle: e().min(1, "unitTitle is required"),
|
|
44
44
|
unitSlug: e().min(1, "unitSlug is required")
|
|
45
|
-
}),
|
|
45
|
+
}), T = u.extend({
|
|
46
46
|
propertyName: e().min(1, "propertyName is required"),
|
|
47
47
|
buttonName: e().min(1, "buttonName is required"),
|
|
48
48
|
formName: e().min(1, "formName is required"),
|
|
49
49
|
styleId: e().min(1, "styleId is required"),
|
|
50
50
|
styleName: e().min(1, "styleName is required"),
|
|
51
|
-
unitBedrooms:
|
|
51
|
+
unitBedrooms: t().int().nonnegative(),
|
|
52
52
|
favoritedUnit: l()
|
|
53
|
-
}), q =
|
|
53
|
+
}), q = u.extend({
|
|
54
54
|
roomName: e().min(1, "roomName is required"),
|
|
55
|
-
unitBedrooms:
|
|
55
|
+
unitBedrooms: t().int().nonnegative(),
|
|
56
56
|
styleId: e().min(1, "styleId is required"),
|
|
57
57
|
styleName: e().min(1, "styleName is required"),
|
|
58
58
|
favoritedUnit: l()
|
|
59
|
-
}),
|
|
59
|
+
}), B = u.extend({
|
|
60
60
|
roomName: e().min(1, "roomName is required"),
|
|
61
|
-
unitBedrooms:
|
|
61
|
+
unitBedrooms: t().int().nonnegative(),
|
|
62
62
|
styleId: e().min(1, "styleId is required"),
|
|
63
63
|
styleName: e().min(1, "styleName is required"),
|
|
64
64
|
furnitureId: e().min(1, "furnitureId is required"),
|
|
65
65
|
furnitureName: e().min(1, "furnitureName is required")
|
|
66
|
-
}),
|
|
66
|
+
}), L = u.extend({
|
|
67
67
|
roomName: e().min(1, "roomName is required"),
|
|
68
|
-
unitBedrooms:
|
|
68
|
+
unitBedrooms: t().int().nonnegative(),
|
|
69
69
|
styleId: e().min(1, "styleId is required"),
|
|
70
70
|
styleName: e().min(1, "styleName is required"),
|
|
71
71
|
furnitureId: e().min(1, "furnitureId is required"),
|
|
@@ -73,287 +73,304 @@ const ie = ["location", "budget", "size", "other"], C = [
|
|
|
73
73
|
link: e().min(1, "link is required"),
|
|
74
74
|
type: e().min(1, "type is required"),
|
|
75
75
|
favoritedUnit: l()
|
|
76
|
-
}),
|
|
76
|
+
}), M = u.extend({
|
|
77
77
|
roomName: e().min(1, "roomName is required"),
|
|
78
|
-
unitBedrooms:
|
|
78
|
+
unitBedrooms: t().int().nonnegative(),
|
|
79
79
|
styleId: e().min(1, "styleId is required"),
|
|
80
80
|
styleName: e().min(1, "styleName is required"),
|
|
81
81
|
furnitureId: e().min(1, "furnitureId is required"),
|
|
82
82
|
furnitureName: e().min(1, "furnitureName is required")
|
|
83
|
-
}),
|
|
83
|
+
}), z = u.extend({
|
|
84
84
|
roomName: e().min(1, "roomName is required"),
|
|
85
|
-
unitBedrooms:
|
|
85
|
+
unitBedrooms: t().int().nonnegative(),
|
|
86
86
|
styleId: e().min(1, "styleId is required"),
|
|
87
87
|
styleName: e().min(1, "styleName is required"),
|
|
88
88
|
furnitureId: e().min(1, "furnitureId is required"),
|
|
89
89
|
furnitureName: e().min(1, "furnitureName is required")
|
|
90
|
-
}), U =
|
|
90
|
+
}), U = u.extend({
|
|
91
91
|
roomName: e().min(1, "roomName is required"),
|
|
92
|
-
unitBedrooms:
|
|
92
|
+
unitBedrooms: t().int().nonnegative(),
|
|
93
93
|
styleId: e().min(1, "styleId is required"),
|
|
94
94
|
styleName: e().min(1, "styleName is required"),
|
|
95
95
|
method: c(["Navigation", "Map"])
|
|
96
|
-
}),
|
|
97
|
-
timeInRoom:
|
|
98
|
-
}),
|
|
96
|
+
}), R = U.extend({
|
|
97
|
+
timeInRoom: t().int().nonnegative()
|
|
98
|
+
}), V = u.extend({
|
|
99
99
|
roomName: e().min(1, "roomName is required"),
|
|
100
|
-
unitBedrooms:
|
|
100
|
+
unitBedrooms: t().int().nonnegative(),
|
|
101
101
|
styleId: e().min(1, "styleId is required"),
|
|
102
102
|
styleName: e().min(1, "styleName is required"),
|
|
103
103
|
method: c(["On Click Play"]),
|
|
104
|
-
videoCurrentTime:
|
|
105
|
-
videoDuration:
|
|
106
|
-
videoPercent:
|
|
104
|
+
videoCurrentTime: t().int().nonnegative(),
|
|
105
|
+
videoDuration: t().int().nonnegative(),
|
|
106
|
+
videoPercent: t().int().nonnegative(),
|
|
107
107
|
videoFilename: e().min(1, "videoFilename is required")
|
|
108
|
-
}),
|
|
108
|
+
}), _ = u.extend({
|
|
109
109
|
utmSource: e().min(1, "utm_source is required"),
|
|
110
110
|
utmMedium: e().min(1, "utm_medium is required"),
|
|
111
111
|
utmName: e().min(1, "utm_name is required"),
|
|
112
|
-
unitBedrooms:
|
|
112
|
+
unitBedrooms: t().int().nonnegative(),
|
|
113
113
|
styleId: e().min(1, "styleId is required"),
|
|
114
114
|
styleName: e().min(1, "styleName is required"),
|
|
115
115
|
favoritedUnit: l()
|
|
116
|
-
}),
|
|
116
|
+
}), k = u.extend({
|
|
117
|
+
toastCopy: e().min(1, "toastCopy is required")
|
|
118
|
+
}), v = d.extend({
|
|
117
119
|
unitId: e().min(1, "unitId is required"),
|
|
118
120
|
unitTitle: e().min(1, "unitTitle is required"),
|
|
119
121
|
unitSlug: e().min(1, "unitSlug is required")
|
|
120
|
-
}),
|
|
122
|
+
}), j = v.extend({
|
|
121
123
|
favoritedUnit: l()
|
|
122
|
-
}),
|
|
124
|
+
}), P = w().transform((o) => C(o)).refine((o) => Array.isArray(o), {
|
|
123
125
|
message: "Selection must resolve to an array"
|
|
124
|
-
}),
|
|
125
|
-
filterIndex:
|
|
126
|
+
}), G = d.extend({
|
|
127
|
+
filterIndex: t().int().nonnegative(),
|
|
126
128
|
filterLabel: e().min(1, "filterLabel is required"),
|
|
127
|
-
selectedFiltersEnum:
|
|
129
|
+
selectedFiltersEnum: P,
|
|
128
130
|
filterName: e().optional()
|
|
129
|
-
}), N =
|
|
130
|
-
filterIndex:
|
|
131
|
+
}), N = d.extend({
|
|
132
|
+
filterIndex: t().int().nonnegative(),
|
|
131
133
|
filterLabel: e().min(1, "filterLabel is required"),
|
|
132
|
-
selectedFiltersEnum:
|
|
134
|
+
selectedFiltersEnum: P
|
|
133
135
|
}), h = y.extend({
|
|
134
|
-
sortIndex:
|
|
135
|
-
sortEnum: c(
|
|
136
|
-
}),
|
|
137
|
-
sortIndex:
|
|
138
|
-
sortEnum: c(
|
|
139
|
-
resultsUnitCount:
|
|
136
|
+
sortIndex: t().int().nonnegative(),
|
|
137
|
+
sortEnum: c(O)
|
|
138
|
+
}), H = d.extend({
|
|
139
|
+
sortIndex: t().int().nonnegative(),
|
|
140
|
+
sortEnum: c(O),
|
|
141
|
+
resultsUnitCount: t().int().nonnegative(),
|
|
140
142
|
unitCountDate: e().optional()
|
|
141
|
-
}),
|
|
142
|
-
fullQuestionnaireSchemaJson:
|
|
143
|
+
}), J = y.extend({
|
|
144
|
+
fullQuestionnaireSchemaJson: x().optional(),
|
|
143
145
|
resultsJson: S({
|
|
144
146
|
type: e().optional(),
|
|
145
|
-
total:
|
|
146
|
-
units:
|
|
147
|
+
total: t().int().nonnegative().optional(),
|
|
148
|
+
units: K(
|
|
147
149
|
S({
|
|
148
150
|
unitId: e().min(1, "unitId is required"),
|
|
149
151
|
unitName: e().optional()
|
|
150
152
|
})
|
|
151
153
|
).optional()
|
|
152
154
|
}).optional()
|
|
153
|
-
}),
|
|
155
|
+
}), W = v.extend({
|
|
154
156
|
favoritedUnit: l()
|
|
155
|
-
}),
|
|
157
|
+
}), X = v.extend({
|
|
156
158
|
favoritedUnit: l()
|
|
157
|
-
}),
|
|
159
|
+
}), Y = d.extend({
|
|
158
160
|
unitId: e().min(1, "unitId is required"),
|
|
159
161
|
unitTitle: e().min(1, "unitTitle is required"),
|
|
160
162
|
unitSlug: e().min(1, "unitSlug is required"),
|
|
161
|
-
resultsUnitCount:
|
|
163
|
+
resultsUnitCount: t().int().nonnegative(),
|
|
162
164
|
unitCountDate: e().optional()
|
|
163
165
|
});
|
|
164
|
-
function
|
|
165
|
-
const o =
|
|
166
|
-
return (
|
|
167
|
-
const n =
|
|
168
|
-
o.track(
|
|
166
|
+
function Z() {
|
|
167
|
+
const o = E();
|
|
168
|
+
return (s, r) => {
|
|
169
|
+
const n = r == null ? r : I(r);
|
|
170
|
+
o.track(s, n);
|
|
169
171
|
};
|
|
170
172
|
}
|
|
171
|
-
const
|
|
173
|
+
const $ = (o, s, r, n) => (i) => {
|
|
172
174
|
const a = m(
|
|
173
175
|
i
|
|
174
|
-
), p =
|
|
175
|
-
|
|
176
|
+
), p = s.parse(a), F = n != null && n.forwardOriginalPayload ? i : p;
|
|
177
|
+
r(o, F, {
|
|
176
178
|
skipKeyTransform: n == null ? void 0 : n.skipKeyTransform
|
|
177
179
|
});
|
|
178
180
|
};
|
|
179
|
-
function
|
|
180
|
-
const
|
|
181
|
-
const p = a != null && a.skipKeyTransform ? i :
|
|
181
|
+
function ee(o) {
|
|
182
|
+
const s = (n, i, a) => {
|
|
183
|
+
const p = a != null && a.skipKeyTransform ? i : I(i);
|
|
182
184
|
o(n, p);
|
|
183
|
-
},
|
|
185
|
+
}, r = (n, i, a) => $(n, i, s, a);
|
|
184
186
|
return {
|
|
185
187
|
trackViewAllUnits: (n) => {
|
|
186
188
|
const i = m(
|
|
187
189
|
n
|
|
188
|
-
), a =
|
|
190
|
+
), a = A.parse({
|
|
189
191
|
unitCountDate: (/* @__PURE__ */ new Date()).toISOString(),
|
|
190
192
|
...i
|
|
191
193
|
});
|
|
192
|
-
|
|
194
|
+
s("View All Units", a);
|
|
193
195
|
},
|
|
194
196
|
trackQuestionnaireSkip: (n) => {
|
|
195
197
|
const i = m(
|
|
196
198
|
n
|
|
197
|
-
), a =
|
|
199
|
+
), a = g.parse({
|
|
198
200
|
...i,
|
|
199
201
|
interactedElement: "Skip"
|
|
200
202
|
});
|
|
201
|
-
|
|
203
|
+
s("Questionnaire Navigated", a);
|
|
202
204
|
},
|
|
203
205
|
trackQuestionnaireContinue: (n) => {
|
|
204
206
|
const i = m(
|
|
205
207
|
n
|
|
206
|
-
), a =
|
|
208
|
+
), a = Q.parse({
|
|
207
209
|
...i,
|
|
208
210
|
interactedElement: "Continue"
|
|
209
211
|
});
|
|
210
|
-
|
|
212
|
+
s("Questionnaire Navigated", a);
|
|
211
213
|
},
|
|
212
214
|
trackQuestionnaireBack: (n) => {
|
|
213
215
|
const i = m(
|
|
214
216
|
n
|
|
215
|
-
), a =
|
|
217
|
+
), a = g.parse({
|
|
216
218
|
...i,
|
|
217
219
|
interactedElement: "Back"
|
|
218
220
|
});
|
|
219
|
-
|
|
221
|
+
s("Questionnaire Navigated", a);
|
|
220
222
|
},
|
|
221
|
-
trackClickUnit:
|
|
223
|
+
trackClickUnit: r("Unit Card Clicked", W, {
|
|
222
224
|
skipKeyTransform: !0,
|
|
223
225
|
forwardOriginalPayload: !0
|
|
224
226
|
}),
|
|
225
|
-
trackHoverUnit:
|
|
227
|
+
trackHoverUnit: r("Unit Hovered", j, {
|
|
226
228
|
skipKeyTransform: !0,
|
|
227
229
|
forwardOriginalPayload: !0
|
|
228
230
|
}),
|
|
229
231
|
trackLoadMore: (n) => {
|
|
230
232
|
const i = m(
|
|
231
233
|
n
|
|
232
|
-
), a =
|
|
234
|
+
), a = D.parse({
|
|
233
235
|
unitCountDate: (/* @__PURE__ */ new Date()).toISOString(),
|
|
234
236
|
...i
|
|
235
237
|
});
|
|
236
|
-
|
|
238
|
+
s("Load More", a);
|
|
237
239
|
},
|
|
238
|
-
trackFilterOpened:
|
|
239
|
-
trackFilterCanceled:
|
|
240
|
+
trackFilterOpened: r("Filter Opened", G),
|
|
241
|
+
trackFilterCanceled: r(
|
|
240
242
|
"Filter Canceled",
|
|
241
243
|
N
|
|
242
244
|
),
|
|
243
|
-
trackFilterApplied:
|
|
245
|
+
trackFilterApplied: r(
|
|
244
246
|
"Filter Applied",
|
|
245
247
|
N
|
|
246
248
|
),
|
|
247
249
|
trackOpenSort: (n) => {
|
|
248
250
|
const i = m(
|
|
249
251
|
n
|
|
250
|
-
), a =
|
|
252
|
+
), a = H.parse({
|
|
251
253
|
unitCountDate: (/* @__PURE__ */ new Date()).toISOString(),
|
|
252
254
|
...i
|
|
253
255
|
});
|
|
254
|
-
|
|
256
|
+
s("Sort Opened", a);
|
|
255
257
|
},
|
|
256
|
-
trackSelectSort:
|
|
257
|
-
trackCancelSort:
|
|
258
|
-
trackClickUnitFavorites:
|
|
258
|
+
trackSelectSort: r("Sort Applied", h),
|
|
259
|
+
trackCancelSort: r("Sort Canceled", h),
|
|
260
|
+
trackClickUnitFavorites: r(
|
|
259
261
|
"Unit Favorited",
|
|
260
|
-
|
|
262
|
+
X
|
|
261
263
|
),
|
|
262
|
-
trackUnitUnfavorited:
|
|
264
|
+
trackUnitUnfavorited: r(
|
|
263
265
|
"Unit Unfavorited",
|
|
264
|
-
|
|
266
|
+
Y
|
|
265
267
|
),
|
|
266
|
-
trackQuestionnaireResult:
|
|
268
|
+
trackQuestionnaireResult: r(
|
|
267
269
|
"Questionnaire Submitted",
|
|
268
|
-
|
|
270
|
+
J
|
|
269
271
|
),
|
|
270
|
-
trackScheduleTourFormInteracted:
|
|
272
|
+
trackScheduleTourFormInteracted: r(
|
|
271
273
|
"Schedule Tour Form Interacted",
|
|
272
274
|
f,
|
|
273
275
|
{ skipKeyTransform: !0, forwardOriginalPayload: !0 }
|
|
274
276
|
),
|
|
275
|
-
trackScheduleTourFormSubmitted:
|
|
277
|
+
trackScheduleTourFormSubmitted: r(
|
|
276
278
|
"Schedule Tour Form Submitted",
|
|
277
279
|
f,
|
|
278
280
|
{ skipKeyTransform: !0, forwardOriginalPayload: !0 }
|
|
279
281
|
),
|
|
280
|
-
trackScheduleTourUrlClicked:
|
|
282
|
+
trackScheduleTourUrlClicked: r(
|
|
281
283
|
"Schedule Tour URL Clicked",
|
|
282
284
|
f,
|
|
283
285
|
{ skipKeyTransform: !0, forwardOriginalPayload: !0 }
|
|
284
286
|
),
|
|
285
|
-
trackGetInTouchFormOpened:
|
|
287
|
+
trackGetInTouchFormOpened: r(
|
|
286
288
|
"Form Opened",
|
|
287
|
-
|
|
289
|
+
T,
|
|
288
290
|
{ skipKeyTransform: !0, forwardOriginalPayload: !0 }
|
|
289
291
|
),
|
|
290
|
-
trackGetInTouchFormSubmitted:
|
|
292
|
+
trackGetInTouchFormSubmitted: r(
|
|
291
293
|
"Form Submitted",
|
|
292
|
-
|
|
294
|
+
T,
|
|
293
295
|
{ skipKeyTransform: !0, forwardOriginalPayload: !0 }
|
|
294
296
|
),
|
|
295
|
-
trackStyleDrawerOpened:
|
|
297
|
+
trackStyleDrawerOpened: r(
|
|
296
298
|
"Style Menu Opened",
|
|
297
299
|
q,
|
|
298
300
|
{ skipKeyTransform: !0, forwardOriginalPayload: !0 }
|
|
299
301
|
),
|
|
300
|
-
trackStyleDrawerChanged:
|
|
302
|
+
trackStyleDrawerChanged: r(
|
|
301
303
|
"Style Changed",
|
|
302
304
|
q,
|
|
303
305
|
{ skipKeyTransform: !0, forwardOriginalPayload: !0 }
|
|
304
306
|
),
|
|
305
|
-
trackFurnitureViewed:
|
|
307
|
+
trackFurnitureViewed: r(
|
|
306
308
|
"Furniture Selected",
|
|
307
|
-
|
|
309
|
+
B,
|
|
308
310
|
{ skipKeyTransform: !0, forwardOriginalPayload: !0 }
|
|
309
311
|
),
|
|
310
|
-
trackFurnitureExternalUrlClicked:
|
|
312
|
+
trackFurnitureExternalUrlClicked: r(
|
|
311
313
|
"Purchase Link Clicked",
|
|
312
|
-
|
|
314
|
+
L,
|
|
313
315
|
{ skipKeyTransform: !0, forwardOriginalPayload: !0 }
|
|
314
316
|
),
|
|
315
|
-
trackFurnitureSaved:
|
|
317
|
+
trackFurnitureSaved: r(
|
|
316
318
|
"Furniture Saved",
|
|
317
|
-
|
|
319
|
+
M,
|
|
318
320
|
{ skipKeyTransform: !0, forwardOriginalPayload: !0 }
|
|
319
321
|
),
|
|
320
|
-
trackFurnitureModalOpened:
|
|
322
|
+
trackFurnitureModalOpened: r(
|
|
321
323
|
"Furniture Modal Opened",
|
|
322
|
-
|
|
324
|
+
z,
|
|
323
325
|
{ skipKeyTransform: !0, forwardOriginalPayload: !0 }
|
|
324
326
|
),
|
|
325
|
-
trackRoomEntered:
|
|
327
|
+
trackRoomEntered: r(
|
|
326
328
|
"Room Entered",
|
|
327
329
|
U,
|
|
328
330
|
{ skipKeyTransform: !0, forwardOriginalPayload: !0 }
|
|
329
331
|
),
|
|
330
|
-
trackRoomLeft:
|
|
332
|
+
trackRoomLeft: r(
|
|
331
333
|
"Room Left",
|
|
332
|
-
|
|
334
|
+
R,
|
|
333
335
|
{ skipKeyTransform: !0, forwardOriginalPayload: !0 }
|
|
334
336
|
),
|
|
335
|
-
trackVideoStarted:
|
|
337
|
+
trackVideoStarted: r(
|
|
336
338
|
"Video Started",
|
|
337
|
-
|
|
339
|
+
V,
|
|
338
340
|
{ skipKeyTransform: !0, forwardOriginalPayload: !0 }
|
|
339
341
|
),
|
|
340
|
-
trackEmailRedirect:
|
|
342
|
+
trackEmailRedirect: r(
|
|
341
343
|
"Email Tracked",
|
|
342
|
-
|
|
344
|
+
_,
|
|
345
|
+
{ skipKeyTransform: !0, forwardOriginalPayload: !0 }
|
|
346
|
+
),
|
|
347
|
+
trackToastImpression: r(
|
|
348
|
+
"Toast Impression",
|
|
349
|
+
k,
|
|
350
|
+
{ skipKeyTransform: !0, forwardOriginalPayload: !0 }
|
|
351
|
+
),
|
|
352
|
+
trackToastClicked: r(
|
|
353
|
+
"Toast Clicked",
|
|
354
|
+
k,
|
|
355
|
+
{ skipKeyTransform: !0, forwardOriginalPayload: !0 }
|
|
356
|
+
),
|
|
357
|
+
trackToastClosed: r(
|
|
358
|
+
"Toast Closed",
|
|
359
|
+
k,
|
|
343
360
|
{ skipKeyTransform: !0, forwardOriginalPayload: !0 }
|
|
344
361
|
)
|
|
345
362
|
};
|
|
346
363
|
}
|
|
347
|
-
function
|
|
348
|
-
const o =
|
|
349
|
-
return
|
|
364
|
+
function oe() {
|
|
365
|
+
const o = Z();
|
|
366
|
+
return ee(o);
|
|
350
367
|
}
|
|
351
368
|
export {
|
|
352
|
-
|
|
369
|
+
ae as QuestionEnumValues,
|
|
353
370
|
b as QuestionnaireInteractionValues,
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
371
|
+
O as SortEnumValues,
|
|
372
|
+
ee as buildTrackingEvents,
|
|
373
|
+
Z as useTrackEvent,
|
|
374
|
+
oe as useTrackingEvents
|
|
358
375
|
};
|
|
359
376
|
//# 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 { useMixpanel } from \"./MixpanelProvider\";\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});\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 unitTitle: z.string().min(1, \"unitTitle is required\"),\n unitSlug: z.string().min(1, \"unitSlug is required\"),\n});\nconst getInTouchFormSchema = unitEventSchema.extend({\n propertyName: z.string().min(1, \"propertyName is required\"),\n\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 = unitEventSchema.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 furnitureViewedSchema = unitEventSchema.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})\nconst furnitureExternalUrlSchema = unitEventSchema.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})\nconst furnitureSavedSchema = unitEventSchema.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})\nconst furnitureModalOpenedSchema = unitEventSchema.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})\n\nconst roomEnteredSchema = unitEventSchema.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 = unitEventSchema.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 = unitEventSchema.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 unitWithPropertyNameSchema = propertyWithNameSchema.extend({\n unitId: z.string().min(1, \"unitId is required\"),\n unitTitle: z.string().min(1, \"unitTitle is required\"),\n unitSlug: z.string().min(1, \"unitSlug is required\"),\n});\n\nconst hoverUnitSchema = unitWithPropertyNameSchema.extend({\n favoritedUnit: z.boolean(),\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});\n\nconst clickUnitFavoritesSchema = unitWithPropertyNameSchema.extend({\n favoritedUnit: z.boolean(),\n});\n\nconst unitUnfavoritedSchema = propertyWithNameSchema.extend({\n unitId: z.string().min(1, \"unitId is required\"),\n unitTitle: z.string().min(1, \"unitTitle is required\"),\n unitSlug: z.string().min(1, \"unitSlug is required\"),\n resultsUnitCount: z.number().int().nonnegative(),\n unitCountDate: z.string().optional(),\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 FurnitureViewedEvent = z.infer<typeof furnitureViewedSchema>;\nexport type FurnitureExternalUrlClickedEvent = z.infer<typeof furnitureExternalUrlSchema>;\nexport type FurnitureSavedEvent = z.infer<typeof furnitureSavedSchema>;\nexport type FurnitureModalOpenedEvent = z.infer<typeof furnitureModalOpenedSchema>;\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>;\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 mixpanel = useMixpanel();\n return (eventName: string, data?: Record<string, any>) => {\n const payload =\n data == null ? data : (convertKeysToSnakeCase(data) as Record<string, any>);\n mixpanel.track(eventName, payload);\n };\n}\n\nconst createStrictTrackerInternal =\n <Schema extends z.ZodTypeAny>(\n eventName: string,\n schema: Schema,\n dispatch: (\n eventName: string,\n payload: unknown,\n options?: { skipKeyTransform?: boolean },\n ) => void,\n options?: { skipKeyTransform?: boolean; forwardOriginalPayload?: boolean },\n ) =>\n (payload: AnalyticsPayload<Schema>) => {\n const normalizedPayload = convertKeysToCamelCase(\n payload,\n ) as z.input<Schema>;\n const parsed = schema.parse(normalizedPayload);\n const payloadForDispatch = options?.forwardOriginalPayload\n ? payload\n : parsed;\n dispatch(eventName, payloadForDispatch, {\n skipKeyTransform: options?.skipKeyTransform,\n });\n };\n\nexport function buildTrackingEvents(trackEvent: TrackEventFn) {\n const dispatch = (\n eventName: string,\n payload: unknown,\n options?: { skipKeyTransform?: boolean },\n ) => {\n const finalPayload = options?.skipKeyTransform\n ? (payload as Record<string, any>)\n : (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 options?: { skipKeyTransform?: boolean; forwardOriginalPayload?: boolean },\n ) => createStrictTrackerInternal(eventName, schema, dispatch, options);\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 parsed = viewAllUnitsSchema.parse({\n unitCountDate: new Date().toISOString(),\n ...normalizedPayload,\n });\n dispatch(\"View All Units\", parsed);\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 parsed = questionnaireEventSchema.parse({\n ...normalizedPayload,\n interactedElement: \"Skip\",\n });\n dispatch(\"Questionnaire Navigated\", parsed);\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 parsed = continueQuestionnaireEventSchema.parse({\n ...normalizedPayload,\n interactedElement: \"Continue\",\n });\n dispatch(\"Questionnaire Navigated\", parsed);\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 parsed = questionnaireEventSchema.parse({\n ...normalizedPayload,\n interactedElement: \"Back\",\n });\n dispatch(\"Questionnaire Navigated\", parsed);\n },\n trackClickUnit: createStrictTracker(\"Unit Card Clicked\", clickUnitSchema, {\n skipKeyTransform: true,\n forwardOriginalPayload: true,\n }),\n trackHoverUnit: createStrictTracker(\"Unit Hovered\", hoverUnitSchema, {\n skipKeyTransform: true,\n forwardOriginalPayload: true,\n }),\n trackLoadMore: (\n payload: AnalyticsPayload<typeof loadMoreSchema>,\n ) => {\n const normalizedPayload = convertKeysToCamelCase(\n payload,\n ) as z.input<typeof loadMoreSchema>;\n const parsed = loadMoreSchema.parse({\n unitCountDate: new Date().toISOString(),\n ...normalizedPayload,\n });\n dispatch(\"Load More\", parsed);\n },\n trackFilterOpened: createStrictTracker(\"Filter Opened\", filterOpenSchema),\n trackFilterCanceled: createStrictTracker(\n \"Filter Canceled\",\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 parsed = sortOpenSchema.parse({\n unitCountDate: new Date().toISOString(),\n ...normalizedPayload,\n });\n dispatch(\"Sort Opened\", parsed);\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 { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackScheduleTourFormSubmitted: createStrictTracker(\n \"Schedule Tour Form Submitted\",\n scheduleTourFormSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackScheduleTourUrlClicked: createStrictTracker(\n \"Schedule Tour URL Clicked\",\n scheduleTourFormSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackGetInTouchFormOpened: createStrictTracker(\n \"Form Opened\",\n getInTouchFormSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackGetInTouchFormSubmitted: createStrictTracker(\n \"Form Submitted\",\n getInTouchFormSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackStyleDrawerOpened: createStrictTracker(\n \"Style Menu Opened\",\n styleDrawerSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackStyleDrawerChanged: createStrictTracker(\n \"Style Changed\",\n styleDrawerSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackFurnitureViewed: createStrictTracker(\n \"Furniture Selected\",\n furnitureViewedSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackFurnitureExternalUrlClicked: createStrictTracker(\n \"Purchase Link Clicked\",\n furnitureExternalUrlSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackFurnitureSaved: createStrictTracker(\n \"Furniture Saved\",\n furnitureSavedSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackFurnitureModalOpened: createStrictTracker(\n \"Furniture Modal Opened\",\n furnitureModalOpenedSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackRoomEntered: createStrictTracker(\n \"Room Entered\",\n roomEnteredSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackRoomLeft: createStrictTracker(\n \"Room Left\",\n roomLeftSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackVideoStarted: createStrictTracker(\n \"Video Started\",\n videoStartedSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackEmailRedirect: createStrictTracker(\n \"Email Tracked\",\n emailTrackedSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n };\n}\n\nexport function useTrackingEvents() {\n const trackEvent = useTrackEvent();\n return buildTrackingEvents(trackEvent);\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","unitEventSchema","getInTouchFormSchema","z.boolean","styleDrawerSchema","furnitureViewedSchema","furnitureExternalUrlSchema","furnitureSavedSchema","furnitureModalOpenedSchema","roomEnteredSchema","roomLeftSchema","videoStartedSchema","emailTrackedSchema","unitWithPropertyNameSchema","hoverUnitSchema","selectionSchema","filterOpenSchema","filterMutationSchema","sortEventSchema","sortOpenSchema","questionnaireResultSchema","z.array","clickUnitSchema","clickUnitFavoritesSchema","unitUnfavoritedSchema","useTrackEvent","mixpanel","useMixpanel","eventName","data","payload","convertKeysToSnakeCase","createStrictTrackerInternal","schema","dispatch","options","normalizedPayload","convertKeysToCamelCase","parsed","payloadForDispatch","buildTrackingEvents","trackEvent","finalPayload","createStrictTracker","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 { useMixpanel } from \"./MixpanelProvider\";\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});\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 unitTitle: z.string().min(1, \"unitTitle is required\"),\n unitSlug: z.string().min(1, \"unitSlug is required\"),\n});\nconst getInTouchFormSchema = unitEventSchema.extend({\n propertyName: z.string().min(1, \"propertyName is required\"),\n\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 = unitEventSchema.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 furnitureViewedSchema = unitEventSchema.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})\nconst furnitureExternalUrlSchema = unitEventSchema.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})\nconst furnitureSavedSchema = unitEventSchema.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})\nconst furnitureModalOpenedSchema = unitEventSchema.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})\n\nconst roomEnteredSchema = unitEventSchema.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 = unitEventSchema.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 = unitEventSchema.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 toastSchema = unitEventSchema.extend({\n toastCopy: z.string().min(1, \"toastCopy is required\"),\n})\nconst unitWithPropertyNameSchema = propertyWithNameSchema.extend({\n unitId: z.string().min(1, \"unitId is required\"),\n unitTitle: z.string().min(1, \"unitTitle is required\"),\n unitSlug: z.string().min(1, \"unitSlug is required\"),\n});\n\nconst hoverUnitSchema = unitWithPropertyNameSchema.extend({\n favoritedUnit: z.boolean(),\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});\n\nconst clickUnitFavoritesSchema = unitWithPropertyNameSchema.extend({\n favoritedUnit: z.boolean(),\n});\n\nconst unitUnfavoritedSchema = propertyWithNameSchema.extend({\n unitId: z.string().min(1, \"unitId is required\"),\n unitTitle: z.string().min(1, \"unitTitle is required\"),\n unitSlug: z.string().min(1, \"unitSlug is required\"),\n resultsUnitCount: z.number().int().nonnegative(),\n unitCountDate: z.string().optional(),\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 FurnitureViewedEvent = z.infer<typeof furnitureViewedSchema>;\nexport type FurnitureExternalUrlClickedEvent = z.infer<typeof furnitureExternalUrlSchema>;\nexport type FurnitureSavedEvent = z.infer<typeof furnitureSavedSchema>;\nexport type FurnitureModalOpenedEvent = z.infer<typeof furnitureModalOpenedSchema>;\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>;\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 mixpanel = useMixpanel();\n return (eventName: string, data?: Record<string, any>) => {\n const payload =\n data == null ? data : (convertKeysToSnakeCase(data) as Record<string, any>);\n mixpanel.track(eventName, payload);\n };\n}\n\nconst createStrictTrackerInternal =\n <Schema extends z.ZodTypeAny>(\n eventName: string,\n schema: Schema,\n dispatch: (\n eventName: string,\n payload: unknown,\n options?: { skipKeyTransform?: boolean },\n ) => void,\n options?: { skipKeyTransform?: boolean; forwardOriginalPayload?: boolean },\n ) =>\n (payload: AnalyticsPayload<Schema>) => {\n const normalizedPayload = convertKeysToCamelCase(\n payload,\n ) as z.input<Schema>;\n const parsed = schema.parse(normalizedPayload);\n const payloadForDispatch = options?.forwardOriginalPayload\n ? payload\n : parsed;\n dispatch(eventName, payloadForDispatch, {\n skipKeyTransform: options?.skipKeyTransform,\n });\n };\n\nexport function buildTrackingEvents(trackEvent: TrackEventFn) {\n const dispatch = (\n eventName: string,\n payload: unknown,\n options?: { skipKeyTransform?: boolean },\n ) => {\n const finalPayload = options?.skipKeyTransform\n ? (payload as Record<string, any>)\n : (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 options?: { skipKeyTransform?: boolean; forwardOriginalPayload?: boolean },\n ) => createStrictTrackerInternal(eventName, schema, dispatch, options);\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 parsed = viewAllUnitsSchema.parse({\n unitCountDate: new Date().toISOString(),\n ...normalizedPayload,\n });\n dispatch(\"View All Units\", parsed);\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 parsed = questionnaireEventSchema.parse({\n ...normalizedPayload,\n interactedElement: \"Skip\",\n });\n dispatch(\"Questionnaire Navigated\", parsed);\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 parsed = continueQuestionnaireEventSchema.parse({\n ...normalizedPayload,\n interactedElement: \"Continue\",\n });\n dispatch(\"Questionnaire Navigated\", parsed);\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 parsed = questionnaireEventSchema.parse({\n ...normalizedPayload,\n interactedElement: \"Back\",\n });\n dispatch(\"Questionnaire Navigated\", parsed);\n },\n trackClickUnit: createStrictTracker(\"Unit Card Clicked\", clickUnitSchema, {\n skipKeyTransform: true,\n forwardOriginalPayload: true,\n }),\n trackHoverUnit: createStrictTracker(\"Unit Hovered\", hoverUnitSchema, {\n skipKeyTransform: true,\n forwardOriginalPayload: true,\n }),\n trackLoadMore: (\n payload: AnalyticsPayload<typeof loadMoreSchema>,\n ) => {\n const normalizedPayload = convertKeysToCamelCase(\n payload,\n ) as z.input<typeof loadMoreSchema>;\n const parsed = loadMoreSchema.parse({\n unitCountDate: new Date().toISOString(),\n ...normalizedPayload,\n });\n dispatch(\"Load More\", parsed);\n },\n trackFilterOpened: createStrictTracker(\"Filter Opened\", filterOpenSchema),\n trackFilterCanceled: createStrictTracker(\n \"Filter Canceled\",\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 parsed = sortOpenSchema.parse({\n unitCountDate: new Date().toISOString(),\n ...normalizedPayload,\n });\n dispatch(\"Sort Opened\", parsed);\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 { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackScheduleTourFormSubmitted: createStrictTracker(\n \"Schedule Tour Form Submitted\",\n scheduleTourFormSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackScheduleTourUrlClicked: createStrictTracker(\n \"Schedule Tour URL Clicked\",\n scheduleTourFormSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackGetInTouchFormOpened: createStrictTracker(\n \"Form Opened\",\n getInTouchFormSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackGetInTouchFormSubmitted: createStrictTracker(\n \"Form Submitted\",\n getInTouchFormSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackStyleDrawerOpened: createStrictTracker(\n \"Style Menu Opened\",\n styleDrawerSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackStyleDrawerChanged: createStrictTracker(\n \"Style Changed\",\n styleDrawerSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackFurnitureViewed: createStrictTracker(\n \"Furniture Selected\",\n furnitureViewedSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackFurnitureExternalUrlClicked: createStrictTracker(\n \"Purchase Link Clicked\",\n furnitureExternalUrlSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackFurnitureSaved: createStrictTracker(\n \"Furniture Saved\",\n furnitureSavedSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackFurnitureModalOpened: createStrictTracker(\n \"Furniture Modal Opened\",\n furnitureModalOpenedSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackRoomEntered: createStrictTracker(\n \"Room Entered\",\n roomEnteredSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackRoomLeft: createStrictTracker(\n \"Room Left\",\n roomLeftSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackVideoStarted: createStrictTracker(\n \"Video Started\",\n videoStartedSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackEmailRedirect: createStrictTracker(\n \"Email Tracked\",\n emailTrackedSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackToastImpression: createStrictTracker(\n \"Toast Impression\",\n toastSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackToastClicked: createStrictTracker(\n \"Toast Clicked\",\n toastSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n trackToastClosed: createStrictTracker(\n \"Toast Closed\",\n toastSchema,\n { skipKeyTransform: true, forwardOriginalPayload: true },\n ),\n };\n}\n\nexport function useTrackingEvents() {\n const trackEvent = useTrackEvent();\n return buildTrackingEvents(trackEvent);\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","unitEventSchema","getInTouchFormSchema","z.boolean","styleDrawerSchema","furnitureViewedSchema","furnitureExternalUrlSchema","furnitureSavedSchema","furnitureModalOpenedSchema","roomEnteredSchema","roomLeftSchema","videoStartedSchema","emailTrackedSchema","toastSchema","unitWithPropertyNameSchema","hoverUnitSchema","selectionSchema","filterOpenSchema","filterMutationSchema","sortEventSchema","sortOpenSchema","questionnaireResultSchema","z.array","clickUnitSchema","clickUnitFavoritesSchema","unitUnfavoritedSchema","useTrackEvent","mixpanel","useMixpanel","eventName","data","payload","convertKeysToSnakeCase","createStrictTrackerInternal","schema","dispatch","options","normalizedPayload","convertKeysToCamelCase","parsed","payloadForDispatch","buildTrackingEvents","trackEvent","finalPayload","createStrictTracker","useTrackingEvents"],"mappings":"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"}
|