@admin-layout/tailwind-design-pro 10.1.1-alpha.15 → 10.1.1-alpha.16
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/lib/components/DeepLinkWaitingPage/DeepLinkWaitingPage.d.ts +8 -0
- package/lib/components/DeepLinkWaitingPage/DeepLinkWaitingPage.d.ts.map +1 -0
- package/lib/components/DeepLinkWaitingPage/DeepLinkWaitingPage.js +146 -0
- package/lib/components/DeepLinkWaitingPage/DeepLinkWaitingPage.js.map +1 -0
- package/lib/components/UI/PropertyCard.d.ts.map +1 -1
- package/lib/components/UI/PropertyCard.js +9 -3
- package/lib/components/UI/PropertyCard.js.map +1 -1
- package/lib/compute.d.ts.map +1 -1
- package/lib/compute.js +12 -0
- package/lib/compute.js.map +1 -1
- package/lib/config/analytics-config.d.ts +59 -0
- package/lib/config/analytics-config.d.ts.map +1 -0
- package/lib/config/analytics-config.js +34 -0
- package/lib/config/analytics-config.js.map +1 -0
- package/lib/config/env-config.d.ts +1 -0
- package/lib/config/env-config.d.ts.map +1 -1
- package/lib/config/env-config.js +4 -1
- package/lib/config/env-config.js.map +1 -1
- package/lib/config/index.d.ts +3 -0
- package/lib/config/index.d.ts.map +1 -0
- package/lib/routes.json +12 -0
- package/lib/utils/analytics-utils.d.ts +43 -0
- package/lib/utils/analytics-utils.d.ts.map +1 -0
- package/lib/utils/analytics.d.ts +48 -0
- package/lib/utils/analytics.d.ts.map +1 -0
- package/lib/utils/analytics.js +169 -0
- package/lib/utils/analytics.js.map +1 -0
- package/package.json +2 -2
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
interface DeepLinkWaitingPageProps {
|
|
3
|
+
redirectDelay?: number;
|
|
4
|
+
googleAnalyticsId?: string;
|
|
5
|
+
}
|
|
6
|
+
declare const DeepLinkWaitingPage: React.FC<DeepLinkWaitingPageProps>;
|
|
7
|
+
export default DeepLinkWaitingPage;
|
|
8
|
+
//# sourceMappingURL=DeepLinkWaitingPage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DeepLinkWaitingPage.d.ts","sourceRoot":"","sources":["../../../src/components/DeepLinkWaitingPage/DeepLinkWaitingPage.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAC;AAKnD,UAAU,wBAAwB;IAC9B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,QAAA,MAAM,mBAAmB,EAAE,KAAK,CAAC,EAAE,CAAC,wBAAwB,CA0K3D,CAAC;AAEF,eAAe,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
import {jsx,jsxs}from'react/jsx-runtime';import {useState,useEffect}from'react';import {useSearchParams,useParams}from'react-router-dom';import {initGA,trackPageView,trackEvent}from'../../utils/analytics.js';import {config}from'../../config/env-config.js';import {EVENT_ACTIONS,EVENT_CATEGORIES}from'../../config/analytics-config.js';const DeepLinkWaitingPage = ({
|
|
2
|
+
redirectDelay = 5,
|
|
3
|
+
googleAnalyticsId = config.GOOGLE_ANALYTICS_ID
|
|
4
|
+
}) => {
|
|
5
|
+
const [searchParams] = useSearchParams();
|
|
6
|
+
const {
|
|
7
|
+
propertyId
|
|
8
|
+
} = useParams();
|
|
9
|
+
const [countdown, setCountdown] = useState(redirectDelay);
|
|
10
|
+
const [redirectUrl, setRedirectUrl] = useState('');
|
|
11
|
+
useEffect(() => {
|
|
12
|
+
// Initialize Google Analytics if enabled
|
|
13
|
+
{
|
|
14
|
+
initGA(googleAnalyticsId);
|
|
15
|
+
}
|
|
16
|
+
// Get the redirect URL from URL parameters
|
|
17
|
+
const url = searchParams.get('redirectUrl');
|
|
18
|
+
if (url) {
|
|
19
|
+
setRedirectUrl(url);
|
|
20
|
+
}
|
|
21
|
+
// Track page view if enabled
|
|
22
|
+
{
|
|
23
|
+
trackPageView(window.location.pathname, `Deep Link Waiting Page - Property: ${propertyId || 'Unknown'}`);
|
|
24
|
+
}
|
|
25
|
+
// Start countdown
|
|
26
|
+
const timer = setInterval(() => {
|
|
27
|
+
setCountdown(prev => {
|
|
28
|
+
if (prev <= 1) {
|
|
29
|
+
clearInterval(timer);
|
|
30
|
+
// Track auto-redirect event if enabled
|
|
31
|
+
{
|
|
32
|
+
trackEvent(EVENT_CATEGORIES.REDIRECTION, EVENT_ACTIONS.AUTO_REDIRECT, `To: ${url || 'Unknown'}`);
|
|
33
|
+
}
|
|
34
|
+
// Redirect after countdown finishes
|
|
35
|
+
window.location.href = url || '';
|
|
36
|
+
return 0;
|
|
37
|
+
}
|
|
38
|
+
return prev - 1;
|
|
39
|
+
});
|
|
40
|
+
}, 1000);
|
|
41
|
+
return () => clearInterval(timer);
|
|
42
|
+
}, [searchParams, redirectDelay, propertyId, googleAnalyticsId]);
|
|
43
|
+
const handleManualRedirect = () => {
|
|
44
|
+
if (redirectUrl) {
|
|
45
|
+
// Track manual click event if enabled
|
|
46
|
+
{
|
|
47
|
+
trackEvent(EVENT_CATEGORIES.REDIRECTION, EVENT_ACTIONS.MANUAL_CLICK, `To: ${redirectUrl}`, countdown);
|
|
48
|
+
}
|
|
49
|
+
window.location.href = redirectUrl;
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
return jsx("div", {
|
|
53
|
+
className: "flex flex-col items-center justify-center min-h-screen bg-gray-50 p-4",
|
|
54
|
+
children: jsxs("div", {
|
|
55
|
+
className: "max-w-3xl w-full bg-white rounded-lg shadow-lg p-8 text-center",
|
|
56
|
+
children: [jsx("h1", {
|
|
57
|
+
className: "text-2xl font-bold mb-6",
|
|
58
|
+
children: "Thank you, almost there..."
|
|
59
|
+
}), jsxs("div", {
|
|
60
|
+
className: "flex justify-center items-center space-x-8 mb-10",
|
|
61
|
+
children: [jsxs("div", {
|
|
62
|
+
className: "text-center",
|
|
63
|
+
children: [jsx("img", {
|
|
64
|
+
src: "https://pbs.twimg.com/profile_images/1687470682165112833/egFUxwF-_400x400.jpg",
|
|
65
|
+
alt: "Our Logo",
|
|
66
|
+
className: "w-32 h-auto mb-2"
|
|
67
|
+
}), jsx("p", {
|
|
68
|
+
children: "You've found your property"
|
|
69
|
+
})]
|
|
70
|
+
}), jsxs("div", {
|
|
71
|
+
className: "flex items-center",
|
|
72
|
+
children: [jsx("div", {
|
|
73
|
+
className: "w-12 h-12 bg-blue-500 rounded-full flex items-center justify-center text-white",
|
|
74
|
+
children: jsx("svg", {
|
|
75
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
76
|
+
className: "h-6 w-6",
|
|
77
|
+
fill: "none",
|
|
78
|
+
viewBox: "0 0 24 24",
|
|
79
|
+
stroke: "currentColor",
|
|
80
|
+
children: jsx("path", {
|
|
81
|
+
strokeLinecap: "round",
|
|
82
|
+
strokeLinejoin: "round",
|
|
83
|
+
strokeWidth: 2,
|
|
84
|
+
d: "M14 5l7 7m0 0l-7 7m7-7H3"
|
|
85
|
+
})
|
|
86
|
+
})
|
|
87
|
+
}), jsx("div", {
|
|
88
|
+
className: "w-16 h-2 bg-gray-200",
|
|
89
|
+
children: jsx("div", {
|
|
90
|
+
className: "h-full bg-blue-500",
|
|
91
|
+
style: {
|
|
92
|
+
width: `${countdown / redirectDelay * 100}%`
|
|
93
|
+
}
|
|
94
|
+
})
|
|
95
|
+
}), jsx("div", {
|
|
96
|
+
className: "w-12 h-12 bg-gray-200 rounded-full flex items-center justify-center text-gray-500",
|
|
97
|
+
children: jsx("svg", {
|
|
98
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
99
|
+
className: "h-6 w-6",
|
|
100
|
+
fill: "none",
|
|
101
|
+
viewBox: "0 0 24 24",
|
|
102
|
+
stroke: "currentColor",
|
|
103
|
+
children: jsx("path", {
|
|
104
|
+
strokeLinecap: "round",
|
|
105
|
+
strokeLinejoin: "round",
|
|
106
|
+
strokeWidth: 2,
|
|
107
|
+
d: "M14 5l7 7m0 0l-7 7m7-7H3"
|
|
108
|
+
})
|
|
109
|
+
})
|
|
110
|
+
})]
|
|
111
|
+
}), jsxs("div", {
|
|
112
|
+
className: "text-center",
|
|
113
|
+
children: [jsx("img", {
|
|
114
|
+
src: searchParams.get('partnerLogo') || '/images/partner-logo.png',
|
|
115
|
+
alt: "Partner Logo",
|
|
116
|
+
className: "w-32 h-auto mb-2"
|
|
117
|
+
}), jsxs("p", {
|
|
118
|
+
children: ["Now complete your booking with", jsx("br", {}), "the property provider ", searchParams.get('partnerName')]
|
|
119
|
+
})]
|
|
120
|
+
})]
|
|
121
|
+
}), jsxs("p", {
|
|
122
|
+
className: "mb-4",
|
|
123
|
+
children: ["You will be redirected in ", jsx("span", {
|
|
124
|
+
className: "font-bold",
|
|
125
|
+
children: countdown
|
|
126
|
+
}), " seconds"]
|
|
127
|
+
}), jsx("button", {
|
|
128
|
+
onClick: handleManualRedirect,
|
|
129
|
+
className: "px-6 py-2 bg-blue-600 text-white rounded-md hover:bg-blue-700 transition-colors",
|
|
130
|
+
children: "Continue Now"
|
|
131
|
+
}), jsxs("p", {
|
|
132
|
+
className: "mt-8 text-sm text-gray-500",
|
|
133
|
+
children: ["If you are not redirected to ", searchParams.get('partnerName') || 'the provider', " in a few seconds, please", ' ', jsx("a", {
|
|
134
|
+
href: redirectUrl,
|
|
135
|
+
className: "text-blue-600 hover:underline",
|
|
136
|
+
onClick: () => {
|
|
137
|
+
{
|
|
138
|
+
trackEvent(EVENT_CATEGORIES.REDIRECTION, EVENT_ACTIONS.LINK_CLICK, `To: ${redirectUrl}`, countdown);
|
|
139
|
+
}
|
|
140
|
+
},
|
|
141
|
+
children: "click here"
|
|
142
|
+
}), "."]
|
|
143
|
+
})]
|
|
144
|
+
})
|
|
145
|
+
});
|
|
146
|
+
};export{DeepLinkWaitingPage as default};//# sourceMappingURL=DeepLinkWaitingPage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DeepLinkWaitingPage.js","sources":["../../../src/components/DeepLinkWaitingPage/DeepLinkWaitingPage.tsx"],"sourcesContent":[null],"names":["_jsx"],"mappings":"8UAUA,MAAM,mBAAmB,GAAuC,CAAC;AAI7D,EAAA,aAAmB,GAAA,CAAA;AACnB,EAAA,iBAAkB,GAAA,MAAK,CAAA;MACjB;QACA,CAAA,YAAY,CAAA,GAAgB,iBAAI;QAE7B;;AAEL,GAAA,GAAA,SAAoB,EAAA;kBACV,EAAkB,YAAA,CAAA,GAAA,QAAE,CAAA,aAAA,CAAA;QAC9B,CAAC,WAAA,EAAA,cAAA,CAAA,GAAA,QAAA,CAAA,EAAA,CAAA;WAE0C,CAAA,MAAA;;IAEjC;YACN,CAAc,iBAAI,CAAC;;;UAInB,GAAA,GAAA,YAAgB,CAAC,GAAA,CAAA,aAAW,CAAA;AAC5B,IAAA,IAAA,GAAA,EAAA;oBACH,CAAA,GAAA,CAAA;;AAGD;AACI,IAAsB;AAClB,MAAA,aAAA,CAAI,MAAI,CAAA,QAAQ,CAAA,QAAA,EAAA,CAAA,mCAAA,EAAA,UAAA,IAAA,SAAA,CAAA,CAAA,CAAA;;;6BAGR,CAAA,MAAA;AACA,MAAA,YAAA,CAAA,IAAA,IAAA;oBAKJ,CAAC,EAAA;uBACmC,CAAA,KAAA,CAAA;;AAEpC,UAAS;sBACZ,CAAA,gBAAA,CAAA,WAAA,EAAA,aAAA,CAAA,aAAA,EAAA,CAAA,IAAA,EAAA,GAAA,IAAA,SAAA,CAAA,CAAA,CAAA;;AAEL;UACH,MAAO,CAAC,QAAA,CAAA,IAAA,GAAA,GAAA,IAAA,EAAA;AAET,UAAA,QAAU;;QAGR,OAAA,IAAA,GAAA,CAAA;QACF;YACI;iBACI,aAAA,CAAA,KAAiB,CAAA;AACjB,GAAA,EAAA,CAAA,YAAA,EAAA,aACI,EAAA,UAAiB,EAAA,iBACJ,CAAA,CAAA;4BAIpB,GAAA,MAAA;AACD,IAAA,IAAA,WAAO,EAAQ;;AAEvB,MAAE;AAEF,QAAA,UACI,CAAA,gBAAc,CAAA,WAAwE,EAAA,aAAA,CAAA,YAAA,EAAA,CAAA,IAAA,EAAA,WAAA,CAAA,CAAA,EAAA,SAAA,CAAA;;AAwF9D,MAAA,MAAA,CAAA,QAAA,CAAA,IAAA,GAAA,WAAA;;AAOR,GAAA;AASxB,EAAE,OAAAA,GAAA,CAAA,KAAA,EAAA;AAEF,IAAA,SAAA,EAAe,uEAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PropertyCard.d.ts","sourceRoot":"","sources":["../../../src/components/UI/PropertyCard.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAoD,MAAM,OAAO,CAAC;AAezE,UAAU,aAAa;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACtB;AAED,KAAK,iBAAiB,GAAG;IACrB,IAAI,CAAC,EAAE,GAAG,CAAC;IACX,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,aAAa,CAAC,EAAE,aAAa,EAAE,CAAC;IAChC,UAAU,CAAC,EAAE,GAAG,EAAE,CAAC;CACtB,CAAC;
|
|
1
|
+
{"version":3,"file":"PropertyCard.d.ts","sourceRoot":"","sources":["../../../src/components/UI/PropertyCard.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAoD,MAAM,OAAO,CAAC;AAezE,UAAU,aAAa;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACtB;AAED,KAAK,iBAAiB,GAAG;IACrB,IAAI,CAAC,EAAE,GAAG,CAAC;IACX,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,aAAa,CAAC,EAAE,aAAa,EAAE,CAAC;IAChC,UAAU,CAAC,EAAE,GAAG,EAAE,CAAC;CACtB,CAAC;AAgFF,eAAO,MAAM,YAAY,GAAI,sHAW1B,iBAAiB,GAAG,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,4CA0W1D,CAAC"}
|
|
@@ -1,12 +1,17 @@
|
|
|
1
1
|
import {jsx,Fragment,jsxs}from'react/jsx-runtime';import {useMemo,useState,useEffect,useCallback}from'react';import {BsHeart}from'@react-icons/all-files/bs/BsHeart.js';import {BsStarFill}from'@react-icons/all-files/bs/BsStarFill.js';import {FaUserAlt}from'@react-icons/all-files/fa/FaUserAlt.js';import {useTranslation}from'react-i18next';import {WithAuthentication}from'@adminide-stack/user-auth0-browser/lib/index.component.js';import {Splide,SplideSlide}from'@cdmbase/react-splide';import {useLocation}from'@remix-run/react';import {format}from'date-fns';import {startCase}from'lodash-es';import {useTailwindTheme}from'../../hooks/useTailwindTheme.js';import {useGetCurrentLongLat}from'../../hooks/use-get-current-lat-long.js';import {LocationIcon}from'./icons/LocationIcon.js';import {renderDynamicIcon}from'../../helpers/DynamicIcon.js';import {config}from'../../config/env-config.js';const convertHotelName = name => {
|
|
2
2
|
return name.toLowerCase().replace(/[^a-z0-9\s-]/g, '').replace(/[\s-]+/g, '-').replace(/-+/g, '-');
|
|
3
3
|
};
|
|
4
|
+
const airbnbLogo = 'https://upload.wikimedia.org/wikipedia/commons/thumb/6/69/Airbnb_Logo_B%C3%A9lo.svg/512px-Airbnb_Logo_B%C3%A9lo.svg.png';
|
|
5
|
+
const bookingLogo = 'https://upload.wikimedia.org/wikipedia/commons/thumb/b/be/Booking.com_logo.svg/1920px-Booking.com_logo.svg.png';
|
|
6
|
+
const pricelineLogo = 'https://upload.wikimedia.org/wikipedia/commons/thumb/e/e1/Priceline.com_logo.svg/1920px-Priceline.com_logo.svg.png';
|
|
4
7
|
const generateHref = (room, from, to, adults, children) => {
|
|
5
8
|
switch (room.__typename) {
|
|
6
9
|
case 'AirbnbProperty':
|
|
7
|
-
|
|
10
|
+
const airbnbPropertyDeepLink = `/deep-link/property/${room.id}?redirectUrl=${encodeURIComponent(`https://www.airbnb.com/rooms/${room.id}?check_in=${from}&check_out=${to}&guests=${adults + children || 1}`)}&partnerName=${encodeURIComponent('Airbnb.com')}&partnerLogo=${airbnbLogo}`;
|
|
11
|
+
return airbnbPropertyDeepLink;
|
|
8
12
|
case 'BookingProperty':
|
|
9
|
-
|
|
13
|
+
const bookingPropertyDeepLink = `/deep-link/property/${room.id}?redirectUrl=${encodeURIComponent(`https://www.booking.com/hotel/${room.address.city.state.country.id}/${convertHotelName(room.name)}.html`)}&partnerName=${encodeURIComponent('Booking.com')}&partnerLogo=${bookingLogo}`;
|
|
14
|
+
return bookingPropertyDeepLink;
|
|
10
15
|
case 'PricelineProperty':
|
|
11
16
|
const propertyId = room.metadata?.id_t;
|
|
12
17
|
const cityId = room?.metadata?.city?.id || '';
|
|
@@ -14,7 +19,8 @@ const generateHref = (room, from, to, adults, children) => {
|
|
|
14
19
|
const checkOutDate = typeof to === 'string' ? to : format(new Date(to), 'yyyyMMdd');
|
|
15
20
|
const roomCount = 1;
|
|
16
21
|
const adultCount = adults;
|
|
17
|
-
|
|
22
|
+
const procelinePropertyDeepLink = `/deep-link/property/${room.id}?redirectUrl=${encodeURIComponent(`https://www.priceline.com/relax/at/${propertyId}/from/${checkInDate}/to/${checkOutDate}/rooms/${roomCount}/adults/${adultCount}?cityId=${cityId}&cur=USD&psl=${propertyId}`)}&partnerName=${encodeURIComponent('Priceline.com')}&partnerLogo=${pricelineLogo}`;
|
|
23
|
+
return procelinePropertyDeepLink;
|
|
18
24
|
default:
|
|
19
25
|
return `/property/${room.id}`;
|
|
20
26
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PropertyCard.js","sources":["../../../src/components/UI/PropertyCard.tsx"],"sourcesContent":[null],"names":["_jsxs","_jsx"],"mappings":"03BAqCA,MAAM,gBAAgB,GAAG,IAAC,IAAwB;AAC9C,EAAA,OAAA,IAAW,CAAA,WAAA,EAAA,CAAA,OAAA,CAAA,eAAA,EAAA,EAAA,CAAA,CAAA,OAAA,CAAA,SAAA,EAAA,GAAA,CAAA,CAAA,OAAA,CAAA,KAAA,EAAA,GAAA,CAAA;AACN,CAAA;AACA,MAAA,
|
|
1
|
+
{"version":3,"file":"PropertyCard.js","sources":["../../../src/components/UI/PropertyCard.tsx"],"sourcesContent":[null],"names":["_jsxs","_jsx"],"mappings":"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"}
|
package/lib/compute.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compute.d.ts","sourceRoot":"","sources":["../src/compute.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"compute.d.ts","sourceRoot":"","sources":["../src/compute.ts"],"names":[],"mappings":"AAqCA,QAAA,MAAM,aAAa,0CAA0C,CAAC;AAG9D,QAAA,MAAM,cAAc,0CAA2C,CAAC;AAEhE,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,CAAC"}
|
package/lib/compute.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { getFilteredMenus, getFilteredRoutes } from '@common-stack/client-react/lib/utils/filteredRoutes.js';
|
|
2
2
|
import { config } from './config/env-config.js';
|
|
3
|
+
import { IMenuPosition } from '@common-stack/client-react';
|
|
3
4
|
const key = 'root-layout';
|
|
4
5
|
const tailwindDesignProPage = [{
|
|
5
6
|
key: key,
|
|
@@ -30,6 +31,17 @@ const tailwindDesignProPage = [{
|
|
|
30
31
|
componentPath: "@admin-layout/tailwind-design-pro/lib/components/UpdateSettingsResource/UpdateSettingsResource.js",
|
|
31
32
|
hasLoader: true,
|
|
32
33
|
hasAction: true
|
|
34
|
+
},
|
|
35
|
+
// Add DeepLinkWaitingPage route
|
|
36
|
+
{
|
|
37
|
+
path: `//deep-link/property/:propertyId`,
|
|
38
|
+
key: 'deep-link',
|
|
39
|
+
exact: true,
|
|
40
|
+
hideInMenu: true,
|
|
41
|
+
clientOnly: true,
|
|
42
|
+
position: IMenuPosition.Middle,
|
|
43
|
+
componentPath: "@admin-layout/tailwind-design-pro/lib/components/DeepLinkWaitingPage/DeepLinkWaitingPage.js",
|
|
44
|
+
hasComponent: true
|
|
33
45
|
}];
|
|
34
46
|
// get menus
|
|
35
47
|
getFilteredMenus(tailwindDesignProPage);
|
package/lib/compute.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compute.js","sources":["../src/compute.ts"],"sourcesContent":[null],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"compute.js","sources":["../src/compute.ts"],"sourcesContent":[null],"names":[],"mappings":"2MAGA,MAAM,GAAG,GAAG,aAAa;AAEzB,MAAM,qBAAqB,GAAU,CAAA;AACjC,EAAA,GAAA,EAAA,GAAA;AACI,EAAA,IAAA,EAAA,aAAQ;AACR,EAAA,IAAA,EAAA,MAAM,CAAa,WAAA;QACnB,UAAY;AACZ,EAAA,gBAAgB,EAAA,CAAA,GAAA,CAAA;SACA,KAAA;AAChB,EAAA,SAAA,EAAK,MAAO,OAAA,0CAAA;AACZ,CAAA,EAAA;AACH,EAAA,GAAA,EAAA,0BAAA;AACD,EAAA,aAAA,EAAA,IAAA;AACI,EAAA,IAAA,EAAA,wBAA+B;AAC/B,EAAA,eAAA,EAAA,IAAe;AACf,EAAA,IAAA,EAAA;AACA,EAAA,SAAA,EAAA,MAAA,OAAqB,+DAAA,CAAA;AACrB,EAAA,IAAA,EAAA;AACA,CAAA;AACA;AACH;MAC+B,EAAA,CAAA,gCAAA,CAAA;AAChC,EAAA,GAAA,EAAA,WAAA;AACI,EAAA,KAAA,EAAA;AACA,EAAA,YAAgB,IAAA;AAChB,EAAA,UAAA,MAAW;AACX,EAAA,SAAA,EAAA,aAAgB,yDAAA,CAAA;AAChB,EAAA,QAAA,EAAA,aAAgB,CAAA;AAChB,CAAA,CAAA;;AAEH,gBAAA,CAAA,qBAAA;;AAGO,MAAA,cAAA,GAAA,iBAAA,CAAA,qBAAA"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Google Analytics Configuration
|
|
3
|
+
*/
|
|
4
|
+
export declare const ANALYTICS_CONFIG: {
|
|
5
|
+
enabled: boolean;
|
|
6
|
+
debug: boolean;
|
|
7
|
+
GA4_MEASUREMENT_ID: string;
|
|
8
|
+
trackEvents: {
|
|
9
|
+
pageViews: boolean;
|
|
10
|
+
clicks: boolean;
|
|
11
|
+
redirections: boolean;
|
|
12
|
+
errors: boolean;
|
|
13
|
+
};
|
|
14
|
+
trackUserProperties: {
|
|
15
|
+
userId: boolean;
|
|
16
|
+
deviceInfo: boolean;
|
|
17
|
+
location: boolean;
|
|
18
|
+
};
|
|
19
|
+
};
|
|
20
|
+
export declare const EVENT_CATEGORIES: {
|
|
21
|
+
REDIRECTION: string;
|
|
22
|
+
USER_INTERACTION: string;
|
|
23
|
+
SYSTEM: string;
|
|
24
|
+
ERROR: string;
|
|
25
|
+
};
|
|
26
|
+
export declare const EVENT_ACTIONS: {
|
|
27
|
+
AUTO_REDIRECT: string;
|
|
28
|
+
MANUAL_CLICK: string;
|
|
29
|
+
LINK_CLICK: string;
|
|
30
|
+
BUTTON_CLICK: string;
|
|
31
|
+
FORM_SUBMIT: string;
|
|
32
|
+
SEARCH: string;
|
|
33
|
+
VIEW_ITEM: string;
|
|
34
|
+
ADD_TO_CART: string;
|
|
35
|
+
REMOVE_FROM_CART: string;
|
|
36
|
+
BEGIN_CHECKOUT: string;
|
|
37
|
+
ADD_PAYMENT_INFO: string;
|
|
38
|
+
PURCHASE: string;
|
|
39
|
+
LOAD: string;
|
|
40
|
+
INIT: string;
|
|
41
|
+
API_ERROR: string;
|
|
42
|
+
CLIENT_ERROR: string;
|
|
43
|
+
};
|
|
44
|
+
export declare const GA4_EVENTS: {
|
|
45
|
+
PAGE_VIEW: string;
|
|
46
|
+
SEARCH: string;
|
|
47
|
+
VIEW_ITEM: string;
|
|
48
|
+
VIEW_ITEM_LIST: string;
|
|
49
|
+
SELECT_ITEM: string;
|
|
50
|
+
ADD_TO_CART: string;
|
|
51
|
+
REMOVE_FROM_CART: string;
|
|
52
|
+
BEGIN_CHECKOUT: string;
|
|
53
|
+
ADD_PAYMENT_INFO: string;
|
|
54
|
+
PURCHASE: string;
|
|
55
|
+
LOGIN: string;
|
|
56
|
+
SIGN_UP: string;
|
|
57
|
+
USER_ENGAGEMENT: string;
|
|
58
|
+
};
|
|
59
|
+
//# sourceMappingURL=analytics-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analytics-config.d.ts","sourceRoot":"","sources":["../../src/config/analytics-config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;CAwB5B,CAAC;AAGF,eAAO,MAAM,gBAAgB;;;;;CAK5B,CAAC;AAGF,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;CAwBzB,CAAC;AAGF,eAAO,MAAM,UAAU;;;;;;;;;;;;;;CActB,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import {config}from'./env-config.js';/**
|
|
2
|
+
* Google Analytics Configuration
|
|
3
|
+
*/
|
|
4
|
+
// Configuration for analytics tracking
|
|
5
|
+
const ANALYTICS_CONFIG = {
|
|
6
|
+
// Enable or disable analytics tracking
|
|
7
|
+
enabled: true,
|
|
8
|
+
// Enable or disable debugging messages in console
|
|
9
|
+
debug: process.env.NODE_ENV === 'development',
|
|
10
|
+
// GA4 Measurement ID
|
|
11
|
+
GA4_MEASUREMENT_ID: config.GOOGLE_ANALYTICS_ID,
|
|
12
|
+
// Configure what events to track
|
|
13
|
+
trackEvents: {
|
|
14
|
+
pageViews: true,
|
|
15
|
+
clicks: true,
|
|
16
|
+
redirections: true,
|
|
17
|
+
errors: true
|
|
18
|
+
},
|
|
19
|
+
// Configure what user properties to track
|
|
20
|
+
trackUserProperties: {
|
|
21
|
+
userId: true,
|
|
22
|
+
deviceInfo: true,
|
|
23
|
+
location: false // Be careful with privacy regulations like GDPR
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
// Analytics event categories
|
|
27
|
+
const EVENT_CATEGORIES = {
|
|
28
|
+
REDIRECTION: 'Redirection'};
|
|
29
|
+
// Analytics event actions
|
|
30
|
+
const EVENT_ACTIONS = {
|
|
31
|
+
// Redirections
|
|
32
|
+
AUTO_REDIRECT: 'Auto Redirect',
|
|
33
|
+
MANUAL_CLICK: 'Manual Click',
|
|
34
|
+
LINK_CLICK: 'Link Click'};export{ANALYTICS_CONFIG,EVENT_ACTIONS,EVENT_CATEGORIES};//# sourceMappingURL=analytics-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analytics-config.js","sources":["../../src/config/analytics-config.ts"],"sourcesContent":[null],"names":[],"mappings":"qCAAA;;AAEG;AAIH;AACa,MAAA,gBAAgB,GAAG;;AAE5B,EAAA,OAAA,EAAO,IAAM;;AAGb,EAAA,KAAA,EAAK,OAAS,CAAA,YAAK,kBAA0B;;oBAG3B,EAAA,MAAQ,CAAA,mBAAoB;;AAG9C,EAAA,WAAA,EAAW;AACP,IAAA,SAAA,EAAA,IAAW;AACX,IAAA,MAAA,EAAA,IAAQ;AACR,IAAA,YAAA,EAAA,IAAc;AACd,IAAA,MAAA,EAAA;AACH,GAAA;;AAGD,EAAA,mBAAA,EAAmB;AACf,IAAA,MAAA,EAAA,IAAQ;AACR,IAAA,UAAA,EAAA,IAAY;YACJ,EAAA,KAAO;AAClB;;AAGL;AACa,MAAA,gBAAgB,GAAG;AAC5B,EAAA,WAAA,EAAW;AAMf;AACa,MAAA,aAAa,GAAG;;AAEzB,EAAA,aAAA,EAAa,eAAiB;AAC9B,EAAA,YAAA,EAAY,cAAgB;AAC5B,EAAA,UAAA,EAAU"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"env-config.d.ts","sourceRoot":"","sources":["../../src/config/env-config.ts"],"names":[],"mappings":"AAaA,eAAO,MAAM,MAAM
|
|
1
|
+
{"version":3,"file":"env-config.d.ts","sourceRoot":"","sources":["../../src/config/env-config.ts"],"names":[],"mappings":"AAaA,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;0CAsCjB,CAAC"}
|
package/lib/config/env-config.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {cleanEnv,bool,
|
|
1
|
+
import {cleanEnv,str,bool,num}from'envalid';import {getEnvironment}from'@common-stack/core';import {SCROLL_THRESHOLD,LAYOUT_SETTINGS}from'./constants.js';const env = getEnvironment();
|
|
2
2
|
const defaultScrollThreshold = JSON.stringify({
|
|
3
3
|
MIN: SCROLL_THRESHOLD.MIN,
|
|
4
4
|
MAX: SCROLL_THRESHOLD.MAX,
|
|
@@ -72,5 +72,8 @@ const config = cleanEnv(env, {
|
|
|
72
72
|
ENABLE_SETTING_DRAWER: bool({
|
|
73
73
|
default: false,
|
|
74
74
|
desc: 'Enable setting drawer'
|
|
75
|
+
}),
|
|
76
|
+
GOOGLE_ANALYTICS_ID: str({
|
|
77
|
+
default: 'G-L5J3SYZ69C'
|
|
75
78
|
})
|
|
76
79
|
});export{config};//# sourceMappingURL=env-config.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"env-config.js","sources":["../../src/config/env-config.ts"],"sourcesContent":[null],"names":[],"mappings":"0JAIA,MAAM,GAAG,GAAG,cAAc,EAAE;AAE5B,MAAM,sBAAsB,GAAG,IAAI,CAAC,SAAS,CAAC;KACvC,EAAA,gBAAkB,CAAA,GAAI;KACtB,EAAA,gBAAkB,CAAA,GAAI;MACrB,EAAA,gBAAkB,CAAA,IAAK;SACpB,EAAA,gBAAkB,CAAA;AAC5B,CAAA,CAAC;AAEW,MAAA,MAAM,GAAG,QAAQ,CAAC,GAAG,EAAE;AAChC,EAAA,WAAA,EAAW,GAAE,CAAA;AACb,IAAA,OAAA,EAAA,aAAA;AACA,IAAA,IAAA,EAAA;AACA,GAAA,CAAA;AACA,EAAA,gCAA4B,EAAI,IAAS,CAAA;AACzC,IAAA,OAAA,EAAA,KAAc;AACd,IAAA,IAAA,EAAA;AAEA,GAAA,CAAA;kBACmB,EAAA,GAAA,CAAA;IACnB,OAAiC,EAAA,sBAAA;AAC7B,IAAA,IAAA,EAAA;AACA,GAAA,CAAA;iBACF,EAAA,GAAA,CAAA;IACF,OAAkC,EAAA,IAAA,CAAA,SAAA,CAAA,eAAK,CAAC;AACpC,IAAA,IAAA,EAAA;AACA,GAAA,CAAA;4BACF,EAAA,GAAA,CAAA;IACF,OAA8B,EAAA,EAAA;QAC1B,EAAO;AACP,GAAA,CAAA;gBACF,EAAA,GAAA,CAAA;IACF,OAA0B,EAAA,EAAA;AACtB,IAAA,IAAA,EAAA;AACA,GAAA,CAAA;qBACF,EAAA,GAAA,CAAA;IACF,OAA6B,EAAA,EAAA;AACzB,IAAA,IAAA,EAAA;AACA,GAAA,CAAA;eACF,EAAA,GAAA,CAAA;IACF,OAAiB,EAAA,SAAA;IACjB,IAAmB,EAAA;AACf,GAAA,CAAA;AACA,EAAA,mBAA+C,EAAA,GAAA,CAAA;WACjD,EAAA;AACF,GAAA,CAAA;
|
|
1
|
+
{"version":3,"file":"env-config.js","sources":["../../src/config/env-config.ts"],"sourcesContent":[null],"names":[],"mappings":"0JAIA,MAAM,GAAG,GAAG,cAAc,EAAE;AAE5B,MAAM,sBAAsB,GAAG,IAAI,CAAC,SAAS,CAAC;KACvC,EAAA,gBAAkB,CAAA,GAAI;KACtB,EAAA,gBAAkB,CAAA,GAAI;MACrB,EAAA,gBAAkB,CAAA,IAAK;SACpB,EAAA,gBAAkB,CAAA;AAC5B,CAAA,CAAC;AAEW,MAAA,MAAM,GAAG,QAAQ,CAAC,GAAG,EAAE;AAChC,EAAA,WAAA,EAAW,GAAE,CAAA;AACb,IAAA,OAAA,EAAA,aAAA;AACA,IAAA,IAAA,EAAA;AACA,GAAA,CAAA;AACA,EAAA,gCAA4B,EAAI,IAAS,CAAA;AACzC,IAAA,OAAA,EAAA,KAAc;AACd,IAAA,IAAA,EAAA;AAEA,GAAA,CAAA;kBACmB,EAAA,GAAA,CAAA;IACnB,OAAiC,EAAA,sBAAA;AAC7B,IAAA,IAAA,EAAA;AACA,GAAA,CAAA;iBACF,EAAA,GAAA,CAAA;IACF,OAAkC,EAAA,IAAA,CAAA,SAAA,CAAA,eAAK,CAAC;AACpC,IAAA,IAAA,EAAA;AACA,GAAA,CAAA;4BACF,EAAA,GAAA,CAAA;IACF,OAA8B,EAAA,EAAA;QAC1B,EAAO;AACP,GAAA,CAAA;gBACF,EAAA,GAAA,CAAA;IACF,OAA0B,EAAA,EAAA;AACtB,IAAA,IAAA,EAAA;AACA,GAAA,CAAA;qBACF,EAAA,GAAA,CAAA;IACF,OAA6B,EAAA,EAAA;AACzB,IAAA,IAAA,EAAA;AACA,GAAA,CAAA;eACF,EAAA,GAAA,CAAA;IACF,OAAiB,EAAA,SAAA;IACjB,IAAmB,EAAA;AACf,GAAA,CAAA;AACA,EAAA,mBAA+C,EAAA,GAAA,CAAA;WACjD,EAAA;AACF,GAAA,CAAA;wCACoC,CAAA;AACvC,IAAE,OAAA,EAAA,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,oBAAoB,CAAC"}
|
package/lib/routes.json
CHANGED
|
@@ -38,5 +38,17 @@
|
|
|
38
38
|
"hasLoader": true,
|
|
39
39
|
"hasAction": true
|
|
40
40
|
}
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
"//deep-link/property/:propertyId": {
|
|
44
|
+
"path": "//deep-link/property/:propertyId",
|
|
45
|
+
"key": "deep-link",
|
|
46
|
+
"exact": true,
|
|
47
|
+
"hideInMenu": true,
|
|
48
|
+
"clientOnly": true,
|
|
49
|
+
"position": "MIDDLE",
|
|
50
|
+
"componentPath": "@admin-layout/tailwind-design-pro/lib/components/DeepLinkWaitingPage/DeepLinkWaitingPage.js",
|
|
51
|
+
"hasComponent": true
|
|
52
|
+
}
|
|
41
53
|
}
|
|
42
54
|
]
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
export interface GA4EventParams {
|
|
2
|
+
page_location?: string;
|
|
3
|
+
page_referrer?: string;
|
|
4
|
+
page_title?: string;
|
|
5
|
+
user_id?: string;
|
|
6
|
+
search_term?: string;
|
|
7
|
+
currency?: string;
|
|
8
|
+
value?: number;
|
|
9
|
+
items?: Array<{
|
|
10
|
+
item_id: string;
|
|
11
|
+
item_name: string;
|
|
12
|
+
item_category?: string;
|
|
13
|
+
price?: number;
|
|
14
|
+
quantity?: number;
|
|
15
|
+
[key: string]: any;
|
|
16
|
+
}>;
|
|
17
|
+
[key: string]: any;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Helper function to format property data for GA4 item tracking
|
|
21
|
+
*/
|
|
22
|
+
export declare const formatPropertyForGA4: (property: any) => GA4EventParams["items"][0];
|
|
23
|
+
/**
|
|
24
|
+
* Helper function to create standard GA4 page view event params
|
|
25
|
+
*/
|
|
26
|
+
export declare const createPageViewParams: (pageTitle: string, additionalParams?: GA4EventParams) => GA4EventParams;
|
|
27
|
+
/**
|
|
28
|
+
* Helper function to create standard GA4 search event params
|
|
29
|
+
*/
|
|
30
|
+
export declare const createSearchParams: (searchTerm: string, additionalParams?: GA4EventParams) => GA4EventParams;
|
|
31
|
+
/**
|
|
32
|
+
* Helper function to track user engagement events
|
|
33
|
+
*/
|
|
34
|
+
export declare const trackUserEngagement: (analytics: any, eventName: string, params?: GA4EventParams) => void;
|
|
35
|
+
/**
|
|
36
|
+
* Helper function to track property views
|
|
37
|
+
*/
|
|
38
|
+
export declare const trackPropertyView: (analytics: any, property: any) => void;
|
|
39
|
+
/**
|
|
40
|
+
* Helper function to track property searches
|
|
41
|
+
*/
|
|
42
|
+
export declare const trackPropertySearch: (analytics: any, searchTerm: string, filters?: Record<string, any>) => void;
|
|
43
|
+
//# sourceMappingURL=analytics-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analytics-utils.d.ts","sourceRoot":"","sources":["../../src/utils/analytics-utils.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,cAAc;IAE3B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IAGpB,OAAO,CAAC,EAAE,MAAM,CAAC;IAGjB,WAAW,CAAC,EAAE,MAAM,CAAC;IAGrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,KAAK,CAAC;QACV,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,EAAE,MAAM,CAAC;QAClB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;KACtB,CAAC,CAAC;IAGH,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACtB;AAED;;GAEG;AACH,eAAO,MAAM,oBAAoB,GAAI,UAAU,GAAG,KAAG,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,CAU7E,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,oBAAoB,GAAI,WAAW,MAAM,EAAE,mBAAmB,cAAc,KAAG,cAO3F,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,kBAAkB,GAAI,YAAY,MAAM,EAAE,mBAAmB,cAAc,KAAG,cAK1F,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,mBAAmB,GAAI,WAAW,GAAG,EAAE,WAAW,MAAM,EAAE,SAAS,cAAc,SAK7F,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,iBAAiB,GAAI,WAAW,GAAG,EAAE,UAAU,GAAG,SAG9D,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,mBAAmB,GAAI,WAAW,GAAG,EAAE,YAAY,MAAM,EAAE,UAAU,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,SAIpG,CAAC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { GA4EventParams } from './analytics-utils';
|
|
2
|
+
/**
|
|
3
|
+
* Initialize Google Analytics
|
|
4
|
+
* @param {string} measurementId - Google Analytics measurement ID (GA4)
|
|
5
|
+
*/
|
|
6
|
+
export declare const initGA: (measurementId: string) => void;
|
|
7
|
+
/**
|
|
8
|
+
* Track a GA4 standard event
|
|
9
|
+
* @param {string} eventName - GA4 event name
|
|
10
|
+
* @param {GA4EventParams} eventParams - Event parameters
|
|
11
|
+
*/
|
|
12
|
+
export declare const trackGA4Event: (eventName: string, eventParams?: GA4EventParams) => void;
|
|
13
|
+
/**
|
|
14
|
+
* Check if Google Analytics is initialized
|
|
15
|
+
* @returns {boolean} Whether GA is initialized
|
|
16
|
+
*/
|
|
17
|
+
export declare const isGAInitialized: () => boolean;
|
|
18
|
+
/**
|
|
19
|
+
* Track page views
|
|
20
|
+
* @param {string} path - URL path to track
|
|
21
|
+
* @param {string} title - Page title
|
|
22
|
+
*/
|
|
23
|
+
export declare const trackPageView: (path: string, title?: string) => void;
|
|
24
|
+
/**
|
|
25
|
+
* Track events
|
|
26
|
+
* @param {string} category - Event category
|
|
27
|
+
* @param {string} action - Event action
|
|
28
|
+
* @param {string} label - Event label (optional)
|
|
29
|
+
* @param {number} value - Event value (optional)
|
|
30
|
+
*/
|
|
31
|
+
export declare const trackEvent: (category: string, action: string, label?: string, value?: number) => void;
|
|
32
|
+
/**
|
|
33
|
+
* Track exception events
|
|
34
|
+
* @param {string} description - Error description
|
|
35
|
+
* @param {boolean} fatal - Whether the error was fatal
|
|
36
|
+
*/
|
|
37
|
+
export declare const trackException: (description: string, fatal?: boolean) => void;
|
|
38
|
+
/**
|
|
39
|
+
* Track user properties
|
|
40
|
+
* @param {Record<string, string | number | boolean>} properties - User properties to track
|
|
41
|
+
*/
|
|
42
|
+
export declare const setUserProperties: (properties: Record<string, string | number | boolean>) => void;
|
|
43
|
+
/**
|
|
44
|
+
* Set user ID for cross-device tracking
|
|
45
|
+
* @param {string} userId - User ID
|
|
46
|
+
*/
|
|
47
|
+
export declare const setUserId: (userId: string) => void;
|
|
48
|
+
//# sourceMappingURL=analytics.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analytics.d.ts","sourceRoot":"","sources":["../../src/utils/analytics.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAInD;;;GAGG;AACH,eAAO,MAAM,MAAM,GAAI,eAAe,MAAM,KAAG,IAmF9C,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,aAAa,GAAI,WAAW,MAAM,EAAE,cAAc,cAAc,KAAG,IAiB/E,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,eAAe,QAAO,OAElC,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,aAAa,GAAI,MAAM,MAAM,EAAE,QAAQ,MAAM,KAAG,IAsB5D,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,UAAU,GAAI,UAAU,MAAM,EAAE,QAAQ,MAAM,EAAE,QAAQ,MAAM,EAAE,QAAQ,MAAM,KAAG,IA0B7F,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,cAAc,GAAI,aAAa,MAAM,EAAE,QAAO,OAAe,KAAG,IAmB5E,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,iBAAiB,GAAI,YAAY,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,KAAG,IAiBzF,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,SAAS,GAAI,QAAQ,MAAM,KAAG,IAsB1C,CAAC"}
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
import ReactGA from'react-ga4';import {ANALYTICS_CONFIG}from'../config/analytics-config.js';let isInitialized = false;
|
|
2
|
+
/**
|
|
3
|
+
* Initialize Google Analytics
|
|
4
|
+
* @param {string} measurementId - Google Analytics measurement ID (GA4)
|
|
5
|
+
*/
|
|
6
|
+
const initGA = measurementId => {
|
|
7
|
+
if (!measurementId) {
|
|
8
|
+
console.warn('Google Analytics Measurement ID is missing');
|
|
9
|
+
return;
|
|
10
|
+
}
|
|
11
|
+
if (isInitialized) {
|
|
12
|
+
if (ANALYTICS_CONFIG.debug) {
|
|
13
|
+
console.log('Google Analytics already initialized, skipping');
|
|
14
|
+
}
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
try {
|
|
18
|
+
ReactGA.initialize(measurementId, {
|
|
19
|
+
gaOptions: {
|
|
20
|
+
debug_mode: ANALYTICS_CONFIG.debug,
|
|
21
|
+
send_page_view: false // We'll manually track the first page view
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
isInitialized = true;
|
|
25
|
+
if (ANALYTICS_CONFIG.debug) {
|
|
26
|
+
console.log('Google Analytics initialized with ID:', measurementId);
|
|
27
|
+
}
|
|
28
|
+
// Track initial page view
|
|
29
|
+
trackPageView(window.location.pathname, document.title);
|
|
30
|
+
// Set user properties if enabled
|
|
31
|
+
if (ANALYTICS_CONFIG.trackUserProperties.deviceInfo) {
|
|
32
|
+
setDeviceInfo();
|
|
33
|
+
}
|
|
34
|
+
// Listen for analytics events from our XState machines
|
|
35
|
+
window.addEventListener('analytics.event', e => {
|
|
36
|
+
const analyticsEvent = e.detail;
|
|
37
|
+
if (!analyticsEvent || !analyticsEvent.type) return;
|
|
38
|
+
// Process the event based on its type
|
|
39
|
+
switch (analyticsEvent.type) {
|
|
40
|
+
case 'TRACK_EVENT':
|
|
41
|
+
trackEvent(analyticsEvent.params?.event_category || 'User Interaction', analyticsEvent.name, analyticsEvent.params?.event_label, analyticsEvent.params?.value);
|
|
42
|
+
break;
|
|
43
|
+
case 'PAGE_VIEW':
|
|
44
|
+
trackPageView(analyticsEvent.params?.page_path || window.location.pathname, analyticsEvent.page || analyticsEvent.params?.page_title);
|
|
45
|
+
break;
|
|
46
|
+
case 'SEARCH':
|
|
47
|
+
trackGA4Event('search', analyticsEvent.params);
|
|
48
|
+
break;
|
|
49
|
+
case 'VIEW_ITEM':
|
|
50
|
+
trackGA4Event('view_item', analyticsEvent.params);
|
|
51
|
+
break;
|
|
52
|
+
case 'USER_ENGAGEMENT':
|
|
53
|
+
trackGA4Event('user_engagement', analyticsEvent.params);
|
|
54
|
+
break;
|
|
55
|
+
case 'BEGIN_CHECKOUT':
|
|
56
|
+
trackGA4Event('begin_checkout', analyticsEvent.params);
|
|
57
|
+
break;
|
|
58
|
+
case 'ADD_PAYMENT_INFO':
|
|
59
|
+
trackGA4Event('add_payment_info', analyticsEvent.params);
|
|
60
|
+
break;
|
|
61
|
+
case 'PURCHASE':
|
|
62
|
+
trackGA4Event('purchase', analyticsEvent.params);
|
|
63
|
+
break;
|
|
64
|
+
default:
|
|
65
|
+
// For other events, track as a custom event
|
|
66
|
+
if (analyticsEvent.name) {
|
|
67
|
+
trackEvent('Custom', analyticsEvent.name, undefined, undefined);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
} catch (error) {
|
|
72
|
+
console.error('Error initializing Google Analytics:', error);
|
|
73
|
+
}
|
|
74
|
+
};
|
|
75
|
+
/**
|
|
76
|
+
* Track a GA4 standard event
|
|
77
|
+
* @param {string} eventName - GA4 event name
|
|
78
|
+
* @param {GA4EventParams} eventParams - Event parameters
|
|
79
|
+
*/
|
|
80
|
+
const trackGA4Event = (eventName, eventParams) => {
|
|
81
|
+
if (!isInitialized) {
|
|
82
|
+
if (ANALYTICS_CONFIG.debug) {
|
|
83
|
+
console.warn(`Attempted to track GA4 event ${eventName} before initialization`);
|
|
84
|
+
}
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
try {
|
|
88
|
+
ReactGA.event(eventName, eventParams);
|
|
89
|
+
if (ANALYTICS_CONFIG.debug) {
|
|
90
|
+
console.log(`GA4 event tracked: ${eventName}`, eventParams);
|
|
91
|
+
}
|
|
92
|
+
} catch (error) {
|
|
93
|
+
console.error(`Error tracking GA4 event ${eventName}:`, error);
|
|
94
|
+
}
|
|
95
|
+
};
|
|
96
|
+
/**
|
|
97
|
+
* Track page views
|
|
98
|
+
* @param {string} path - URL path to track
|
|
99
|
+
* @param {string} title - Page title
|
|
100
|
+
*/
|
|
101
|
+
const trackPageView = (path, title) => {
|
|
102
|
+
if (!isInitialized) {
|
|
103
|
+
if (ANALYTICS_CONFIG.debug) {
|
|
104
|
+
console.warn('Attempted to track page view before initialization:', path);
|
|
105
|
+
}
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
try {
|
|
109
|
+
ReactGA.send({
|
|
110
|
+
hitType: 'pageview',
|
|
111
|
+
page: path,
|
|
112
|
+
title,
|
|
113
|
+
location: window.location.href
|
|
114
|
+
});
|
|
115
|
+
if (ANALYTICS_CONFIG.debug) {
|
|
116
|
+
console.log(`Page view tracked: ${path}${title ? ` (${title})` : ''}`);
|
|
117
|
+
}
|
|
118
|
+
} catch (error) {
|
|
119
|
+
console.error('Error tracking page view:', error);
|
|
120
|
+
}
|
|
121
|
+
};
|
|
122
|
+
/**
|
|
123
|
+
* Track events
|
|
124
|
+
* @param {string} category - Event category
|
|
125
|
+
* @param {string} action - Event action
|
|
126
|
+
* @param {string} label - Event label (optional)
|
|
127
|
+
* @param {number} value - Event value (optional)
|
|
128
|
+
*/
|
|
129
|
+
const trackEvent = (category, action, label, value) => {
|
|
130
|
+
if (!isInitialized) {
|
|
131
|
+
if (ANALYTICS_CONFIG.debug) {
|
|
132
|
+
console.warn('Attempted to track event before initialization:', category, action);
|
|
133
|
+
}
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
try {
|
|
137
|
+
ReactGA.event({
|
|
138
|
+
category,
|
|
139
|
+
action,
|
|
140
|
+
label,
|
|
141
|
+
value
|
|
142
|
+
});
|
|
143
|
+
if (ANALYTICS_CONFIG.debug) {
|
|
144
|
+
console.log(`Event tracked: ${category} - ${action}${label ? ` - ${label}` : ''}${value !== undefined ? ` (${value})` : ''}`);
|
|
145
|
+
}
|
|
146
|
+
} catch (error) {
|
|
147
|
+
console.error('Error tracking event:', error);
|
|
148
|
+
}
|
|
149
|
+
};
|
|
150
|
+
/**
|
|
151
|
+
* Set device information as user properties
|
|
152
|
+
*/
|
|
153
|
+
const setDeviceInfo = () => {
|
|
154
|
+
if (!isInitialized) return;
|
|
155
|
+
try {
|
|
156
|
+
const deviceInfo = {
|
|
157
|
+
screenResolution: `${window.screen.width}x${window.screen.height}`,
|
|
158
|
+
viewportSize: `${window.innerWidth}x${window.innerHeight}`,
|
|
159
|
+
userAgent: navigator.userAgent,
|
|
160
|
+
language: navigator.language
|
|
161
|
+
};
|
|
162
|
+
ReactGA.set(deviceInfo);
|
|
163
|
+
if (ANALYTICS_CONFIG.debug) {
|
|
164
|
+
console.log('Device info set:', deviceInfo);
|
|
165
|
+
}
|
|
166
|
+
} catch (error) {
|
|
167
|
+
console.error('Error setting device info:', error);
|
|
168
|
+
}
|
|
169
|
+
};export{initGA,trackEvent,trackGA4Event,trackPageView};//# sourceMappingURL=analytics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analytics.js","sources":["../../src/utils/analytics.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@admin-layout/tailwind-design-pro",
|
|
3
|
-
"version": "10.1.1-alpha.
|
|
3
|
+
"version": "10.1.1-alpha.16",
|
|
4
4
|
"description": "Sample core for higher packages to depend on",
|
|
5
5
|
"license": "ISC",
|
|
6
6
|
"author": "CDMBase LLC",
|
|
@@ -61,5 +61,5 @@
|
|
|
61
61
|
"typescript": {
|
|
62
62
|
"definition": "lib/index.d.ts"
|
|
63
63
|
},
|
|
64
|
-
"gitHead": "
|
|
64
|
+
"gitHead": "fd4898d38116be427ab4ef1432f8d3d02332b144"
|
|
65
65
|
}
|