@jetshop/core 5.15.0-alpha.015c7260 → 5.15.0-alpha.6caa50c3
Sign up to get free protection for your applications and to get access to all the features.
- package/ChannelHandler/ChannelHandler.js +1 -0
- package/ChannelHandler/ChannelHandler.js.map +1 -1
- package/ChannelHandler/channelUtils.js +0 -6
- package/ChannelHandler/channelUtils.js.map +1 -1
- package/ChannelHandler/redirectUtils.test.js +54 -105
- package/analytics/AnalyticsProvider.d.ts +5 -0
- package/analytics/AnalyticsProvider.js +31 -11
- package/analytics/AnalyticsProvider.js.map +1 -1
- package/analytics/integrations/ga4.js +62 -22
- package/analytics/integrations/ga4.js.map +1 -1
- package/analytics/integrations/gtag/gtag.js +35 -3
- package/analytics/integrations/gtag/gtag.js.map +1 -1
- package/analytics/integrations/gtm/gtm.d.ts +12 -0
- package/analytics/integrations/gtm/gtm.js +236 -0
- package/analytics/integrations/gtm/gtm.js.map +1 -0
- package/analytics/integrations/gtm/index.d.ts +1 -12
- package/analytics/integrations/gtm/index.js +1 -200
- package/analytics/integrations/gtm/index.js.map +1 -1
- package/analytics/trackerRegistry.d.ts +12 -0
- package/analytics/trackerRegistry.js +3 -1
- package/analytics/trackerRegistry.js.map +1 -1
- package/boot/SharedTree.js +1 -1
- package/boot/SharedTree.js.map +1 -1
- package/boot/apollo.js +2 -2
- package/boot/apollo.js.map +1 -1
- package/boot/client/startClient.js +2 -6
- package/boot/client/startClient.js.map +1 -1
- package/boot/server/createRenderer.js +7 -4
- package/boot/server/createRenderer.js.map +1 -1
- package/components/ChannelContext/ChannelContext.d.ts +1 -1
- package/components/ChannelContext/ChannelContext.js.map +1 -1
- package/components/ConfigProvider.d.ts +1 -0
- package/components/ConfigProvider.js.map +1 -1
- package/components/DynamicRoute/ProductRoute.js +9 -2
- package/components/DynamicRoute/ProductRoute.js.map +1 -1
- package/components/DynamicRoute/RouteResolver.d.ts +1 -1
- package/components/Head.js +6 -2
- package/components/Head.js.map +1 -1
- package/components/SortOrder/SortOrderContainer.js +7 -1
- package/components/SortOrder/SortOrderContainer.js.map +1 -1
- package/hooks/ProductList/list-transforms.d.ts +2 -0
- package/hooks/useChannels.d.ts +1 -0
- package/hooks/useChannels.js +10 -0
- package/hooks/useChannels.js.map +1 -0
- package/hooks/useCustomerOrders.test.js +5 -5
- package/package.json +2 -2
- package/test-utils/variables.js +1761 -188
- package/types.d.ts +71 -3
@@ -17,8 +17,7 @@ function productToItem(product, selectedVariation, useArticleNumberAsId = false,
|
|
17
17
|
export function ga4Tracker({ trackingId, additionalGtagTrackingIds = [], currency, brandCustomField, useArticleNumberAsId = false }) {
|
18
18
|
return {
|
19
19
|
name: 'ga4',
|
20
|
-
initBrowser() {
|
21
|
-
const script = `https://www.googletagmanager.com/gtag/js?id=${trackingId}`;
|
20
|
+
initBrowser({ config }) {
|
22
21
|
const w = window;
|
23
22
|
w.dataLayer = w.dataLayer || [];
|
24
23
|
w.dataLayer.push({
|
@@ -33,6 +32,27 @@ export function ga4Tracker({ trackingId, additionalGtagTrackingIds = [], currenc
|
|
33
32
|
w.gtag = function gtag() {
|
34
33
|
w.dataLayer.push(arguments);
|
35
34
|
};
|
35
|
+
if (config.useTrackingConsentAPI) {
|
36
|
+
/**
|
37
|
+
NB:
|
38
|
+
Only cookieless pings will be sent to Google servers.
|
39
|
+
There’s also a wait time of 500 milliseconds before any Google tags are allowed to fire,
|
40
|
+
to give time for the update command to be invoked.
|
41
|
+
*/
|
42
|
+
const consent = config.consentedToTracking ? 'granted' : 'denied';
|
43
|
+
gtag()('consent', 'default', {
|
44
|
+
ad_storage: consent,
|
45
|
+
// https://www.simoahava.com/analytics/consent-mode-google-tags/#restrict-advertising-storage
|
46
|
+
analytics_storage: consent,
|
47
|
+
personalization_storage: consent,
|
48
|
+
functionality_storage: 'granted',
|
49
|
+
security_storage: 'granted',
|
50
|
+
wait_for_update: 500
|
51
|
+
});
|
52
|
+
// NB: This only works when you set ad_storage to denied.
|
53
|
+
// https://developers.google.com/tag-platform/devguides/consent#redact_ads_data
|
54
|
+
gtag()('set', 'ads_data_redaction', true);
|
55
|
+
}
|
36
56
|
w.gtag('js', new Date());
|
37
57
|
if (process.env.REACT_APP_DEBUG_MODE === 'true') {
|
38
58
|
gtag()('config', trackingId, {
|
@@ -45,10 +65,22 @@ export function ga4Tracker({ trackingId, additionalGtagTrackingIds = [], currenc
|
|
45
65
|
additionalGtagTrackingIds.forEach((id) => {
|
46
66
|
gtag()('config', id);
|
47
67
|
});
|
48
|
-
injectScript({
|
68
|
+
injectScript({
|
69
|
+
src: `https://www.googletagmanager.com/gtag/js?id=${trackingId}`
|
70
|
+
});
|
49
71
|
gtag();
|
50
72
|
},
|
51
|
-
|
73
|
+
consent(consents) {
|
74
|
+
gtag()('consent', 'update', consents
|
75
|
+
? Object.assign(Object.assign({}, consents), { functionality_storage: 'granted' }) : {
|
76
|
+
ad_storage: 'granted',
|
77
|
+
analytics_storage: 'granted',
|
78
|
+
personalization_storage: 'granted',
|
79
|
+
functionality_storage: 'granted',
|
80
|
+
security_storage: 'granted'
|
81
|
+
});
|
82
|
+
},
|
83
|
+
trackProduct({ quantity, action, product, selectedVariation, list, listName, index, category }, context, eventId) {
|
52
84
|
const productItem = Object.assign(Object.assign({}, productToItem(product, selectedVariation, useArticleNumberAsId, brandCustomField, category)), { quantity, item_list_name: list || listName || context.list, index: index });
|
53
85
|
switch (action) {
|
54
86
|
case 'click':
|
@@ -56,28 +88,32 @@ export function ga4Tracker({ trackingId, additionalGtagTrackingIds = [], currenc
|
|
56
88
|
content_type: 'product',
|
57
89
|
currency,
|
58
90
|
value: product.price.incVat,
|
59
|
-
items: [productItem]
|
91
|
+
items: [productItem],
|
92
|
+
eventId
|
60
93
|
});
|
61
94
|
break;
|
62
95
|
case 'view':
|
63
96
|
gtag()('event', 'view_item', {
|
64
97
|
currency,
|
65
98
|
value: product.price.incVat,
|
66
|
-
items: [productItem]
|
99
|
+
items: [productItem],
|
100
|
+
eventId
|
67
101
|
});
|
68
102
|
break;
|
69
103
|
case 'add':
|
70
104
|
gtag()('event', 'add_to_cart', {
|
71
105
|
currency,
|
72
106
|
value: product.price.incVat,
|
73
|
-
items: [productItem]
|
107
|
+
items: [productItem],
|
108
|
+
eventId
|
74
109
|
});
|
75
110
|
break;
|
76
111
|
case 'remove':
|
77
112
|
gtag()('event', 'remove_from_cart', {
|
78
113
|
currency,
|
79
114
|
value: product.price.incVat,
|
80
|
-
items: [productItem]
|
115
|
+
items: [productItem],
|
116
|
+
eventId
|
81
117
|
});
|
82
118
|
break;
|
83
119
|
default:
|
@@ -102,14 +138,15 @@ export function ga4Tracker({ trackingId, additionalGtagTrackingIds = [], currenc
|
|
102
138
|
// items
|
103
139
|
// });
|
104
140
|
// },
|
105
|
-
trackPageView({ pathname, title }, _context) {
|
141
|
+
trackPageView({ pathname, title }, _context, eventId) {
|
106
142
|
gtag()('event', 'page_view', {
|
107
143
|
currency,
|
108
144
|
page_path: pathname,
|
109
|
-
page_title: title
|
145
|
+
page_title: title,
|
146
|
+
eventId
|
110
147
|
});
|
111
148
|
},
|
112
|
-
trackList({ listName, products, category }, _context) {
|
149
|
+
trackList({ listName, products, category }, _context, eventId) {
|
113
150
|
const items = products.map((product, i) => {
|
114
151
|
var _a;
|
115
152
|
return (Object.assign(Object.assign({}, productToItem(product, null, useArticleNumberAsId, brandCustomField)), { price: (_a = product.price) === null || _a === void 0 ? void 0 : _a.incVat, item_list_name: listName, index: i }));
|
@@ -117,27 +154,30 @@ export function ga4Tracker({ trackingId, additionalGtagTrackingIds = [], currenc
|
|
117
154
|
gtag()('event', 'view_item_list', {
|
118
155
|
item_list_id: category,
|
119
156
|
item_list_name: listName,
|
120
|
-
items
|
157
|
+
items,
|
158
|
+
eventId
|
121
159
|
});
|
122
160
|
},
|
123
|
-
trackExperiment({ id, variant }, _context) {
|
161
|
+
trackExperiment({ id, variant }, _context, eventId) {
|
124
162
|
gtag()('config', trackingId, {
|
125
|
-
experiments: [{ id, variant }]
|
163
|
+
experiments: [{ id, variant }],
|
164
|
+
eventId
|
126
165
|
});
|
127
166
|
},
|
128
|
-
trackUser({ userId }, _context) {
|
129
|
-
gtag()('event', 'authentication', { user_id: userId });
|
167
|
+
trackUser({ userId }, _context, eventId) {
|
168
|
+
gtag()('event', 'authentication', { user_id: userId, eventId });
|
130
169
|
},
|
131
|
-
trackLogin(_props, _context) {
|
132
|
-
gtag()('event', 'login', { trackingId });
|
170
|
+
trackLogin(_props, _context, eventId) {
|
171
|
+
gtag()('event', 'login', { trackingId, eventId });
|
133
172
|
},
|
134
|
-
trackRegister(_props, _context) {
|
135
|
-
gtag()('event', 'sign_up', { trackingId });
|
173
|
+
trackRegister(_props, _context, eventId) {
|
174
|
+
gtag()('event', 'sign_up', { trackingId, eventId });
|
136
175
|
},
|
137
|
-
trackAddToWishList({ articleNumber, productName }, _context) {
|
176
|
+
trackAddToWishList({ articleNumber, productName }, _context, eventId) {
|
138
177
|
gtag()('event', 'add_to_wishlist', {
|
139
178
|
articleNumber,
|
140
|
-
productName
|
179
|
+
productName,
|
180
|
+
eventId
|
141
181
|
});
|
142
182
|
}
|
143
183
|
};
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"ga4.js","sourceRoot":"","sources":["ga4.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,OAAO,EAAE,QAAQ,EAAE,MAAM,yDAAyD,CAAC;AAEnF,MAAM,IAAI,GAAG,GAAG,EAAE,CAAE,MAAc,CAAC,IAAI,CAAC;AAkBxC,SAAS,aAAa,CACpB,OAAgB,EAChB,iBAAiC,EACjC,oBAAoB,GAAG,KAAK,EAC5B,gBAAyB,EACzB,QAAiB;;IAEjB,OAAO;QACL,SAAS,EAAE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,IAAI;QACxB,OAAO,EAAE,oBAAoB;YAC3B,CAAC,CAAC,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,aAAa;YACxB,CAAC,CAAC,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,EAAE,0CAAE,QAAQ,EAAE;QAC3B,KAAK,EAAE,CAAA,MAAA,iBAAiB,aAAjB,iBAAiB,uBAAjB,iBAAiB,CAAE,KAAK,0CAAE,MAAM,MAAI,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,KAAK,0CAAE,MAAM,CAAA;QACjE,aAAa,EAAE,QAAQ;QACvB,YAAY,EAAE,MAAA,iBAAiB,aAAjB,iBAAiB,uBAAjB,iBAAiB,CAAE,MAAM,0CAAE,IAAI,CAAC,GAAG,CAAC;QAClD,UAAU,EAAE,QAAQ,CAAC,OAAO,EAAE,gBAAgB,CAAC;KAChD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,EACzB,UAAU,EACV,yBAAyB,GAAG,EAAE,EAC9B,QAAQ,EACR,gBAAgB,EAChB,oBAAoB,GAAG,KAAK,EAO7B;IACC,OAAO;QACL,IAAI,EAAE,KAAK;QACX,WAAW
|
1
|
+
{"version":3,"file":"ga4.js","sourceRoot":"","sources":["ga4.ts"],"names":[],"mappings":"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"}
|
@@ -33,8 +33,7 @@ function getProductData({ product, selectedVariation, useArticleNumberAsId = fal
|
|
33
33
|
}
|
34
34
|
export const gtagTracker = ({ trackingId, additionalGtagTrackingIds = [], currency, brandCustomField, useArticleNumberAsId = false }) => ({
|
35
35
|
name: 'gtag',
|
36
|
-
initBrowser() {
|
37
|
-
const script = `https://www.googletagmanager.com/gtag/js?id=${trackingId}`;
|
36
|
+
initBrowser({ config }) {
|
38
37
|
const w = window;
|
39
38
|
w.dataLayer = w.dataLayer || [];
|
40
39
|
w.dataLayer.push({
|
@@ -49,6 +48,27 @@ export const gtagTracker = ({ trackingId, additionalGtagTrackingIds = [], curren
|
|
49
48
|
w.gtag = function gtag() {
|
50
49
|
w.dataLayer.push(arguments); // I'm not sure why but this dosen't work using rest params. Don't change this line
|
51
50
|
};
|
51
|
+
if (config.useTrackingConsentAPI) {
|
52
|
+
/**
|
53
|
+
NB:
|
54
|
+
Only cookieless pings will be sent to Google servers.
|
55
|
+
There’s also a wait time of 500 milliseconds before any Google tags are allowed to fire,
|
56
|
+
to give time for the update command to be invoked.
|
57
|
+
*/
|
58
|
+
const consent = config.consentedToTracking ? 'granted' : 'denied';
|
59
|
+
gtag()('consent', 'default', {
|
60
|
+
ad_storage: consent,
|
61
|
+
// https://www.simoahava.com/analytics/consent-mode-google-tags/#restrict-advertising-storage
|
62
|
+
analytics_storage: consent,
|
63
|
+
personalization_storage: consent,
|
64
|
+
functionality_storage: 'granted',
|
65
|
+
security_storage: 'granted',
|
66
|
+
wait_for_update: 500
|
67
|
+
});
|
68
|
+
// NB: This only works when you set ad_storage to denied.
|
69
|
+
// https://developers.google.com/tag-platform/devguides/consent#redact_ads_data
|
70
|
+
gtag()('set', 'ads_data_redaction', true);
|
71
|
+
}
|
52
72
|
w.gtag('js', new Date());
|
53
73
|
gtag()('config', trackingId, {
|
54
74
|
currency,
|
@@ -60,9 +80,21 @@ export const gtagTracker = ({ trackingId, additionalGtagTrackingIds = [], curren
|
|
60
80
|
send_page_view: false
|
61
81
|
});
|
62
82
|
});
|
63
|
-
injectScript({
|
83
|
+
injectScript({
|
84
|
+
src: `https://www.googletagmanager.com/gtag/js?id=${trackingId}`
|
85
|
+
});
|
64
86
|
gtag();
|
65
87
|
},
|
88
|
+
consent(consents) {
|
89
|
+
gtag()('consent', 'update', consents
|
90
|
+
? Object.assign(Object.assign({}, consents), { functionality_storage: 'granted' }) : {
|
91
|
+
ad_storage: 'granted',
|
92
|
+
analytics_storage: 'granted',
|
93
|
+
personalization_storage: 'granted',
|
94
|
+
functionality_storage: 'granted',
|
95
|
+
security_storage: 'granted'
|
96
|
+
});
|
97
|
+
},
|
66
98
|
trackProduct({ quantity, action, product, selectedVariation, list, listName, index, category }, context, eventId) {
|
67
99
|
const productData = Object.assign(Object.assign({}, getProductData({
|
68
100
|
product,
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"gtag.js","sourceRoot":"","sources":["gtag.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,OAAO,EAAE,QAAQ,EAAE,MAAM,oDAAoD,CAAC;AAC9E,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,yBAAyB,EAAE,MAAM,uCAAuC,CAAC;AAElF,MAAM,IAAI,GAAG,GAAG,EAAE,CAAE,MAAc,CAAC,IAAI,CAAC;AAExC,SAAS,cAAc,CAAC,EACtB,OAAO,EACP,iBAAiB,EACjB,oBAAoB,GAAG,KAAK,EAC5B,gBAAgB,EAChB,QAAQ,GAAG,EAAE,EAOd;IACC,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC;IAClD,IAAI,oBAAoB,EAAE;QACxB,OAAO;YACL,EAAE,EAAE,CAAA,iBAAiB,aAAjB,iBAAiB,uBAAjB,iBAAiB,CAAE,aAAa,KAAI,OAAO,CAAC,aAAa;YAC7D,SAAS,EAAE,OAAO,CAAC,EAAE;YACrB,UAAU,EAAE,OAAO,CAAC,aAAa;YACjC,OAAO,EAAE,iBAAiB,aAAjB,iBAAiB,uBAAjB,iBAAiB,CAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;YAC5C,UAAU,EAAE,iBAAiB,aAAjB,iBAAiB,uBAAjB,iBAAiB,CAAE,aAAa;YAC5C,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,YAAY,EAAE,OAAO,CAAC,aAAa;YACnC,QAAQ;YACR,KAAK;SACN,CAAC;KACH;SAAM;QACL,2IAA2I;QAC3I,yHAAyH;QACzH,OAAO;YACL,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,OAAO,EAAE,CAAA,iBAAiB,aAAjB,iBAAiB,uBAAjB,iBAAiB,CAAE,aAAa,KAAI,OAAO,CAAC,aAAa;YAClE,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,WAAW,EAAE,OAAO,CAAC,aAAa;YAClC,QAAQ;YACR,KAAK;SACN,CAAC;KACH;AACH,CAAC;AAED,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,EAC1B,UAAU,EACV,yBAAyB,GAAG,EAAE,EAC9B,QAAQ,EACR,gBAAgB,EAChB,oBAAoB,GAAG,KAAK,EAO7B,EAAW,EAAE,CAAC,CAAC;IACd,IAAI,EAAE,MAAM;IACZ,WAAW
|
1
|
+
{"version":3,"file":"gtag.js","sourceRoot":"","sources":["gtag.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,12 @@
|
|
1
|
+
import { Tracker } from './../../trackerRegistry';
|
2
|
+
declare global {
|
3
|
+
interface Window {
|
4
|
+
dataLayer: any[];
|
5
|
+
}
|
6
|
+
}
|
7
|
+
export declare const gtmTracker: ({ containerId, currency, useArticleNumberAsId, brandCustomField }: {
|
8
|
+
containerId: string;
|
9
|
+
currency: string;
|
10
|
+
brandCustomField?: string;
|
11
|
+
useArticleNumberAsId?: boolean;
|
12
|
+
}) => Tracker;
|
@@ -0,0 +1,236 @@
|
|
1
|
+
import { injectScript } from '../../utils/script';
|
2
|
+
import { getBrand } from '@jetshop/core/components/OpenGraph/OpenGraphProductData';
|
3
|
+
import { unSlugify } from '../unslugify';
|
4
|
+
import { breadcrumbsWithoutProduct } from '../../utils/breadcrumbsWithoutProduct';
|
5
|
+
function push(event) {
|
6
|
+
if (window.dataLayer) {
|
7
|
+
if (event.ecommerce) {
|
8
|
+
window.dataLayer.push({ ecommerce: null });
|
9
|
+
}
|
10
|
+
window.dataLayer.push(event);
|
11
|
+
}
|
12
|
+
}
|
13
|
+
function getProductData({ product, selectedVariation, useArticleNumberAsId = false, brandCustomField, category = '' }) {
|
14
|
+
if (useArticleNumberAsId) {
|
15
|
+
return {
|
16
|
+
id: (selectedVariation === null || selectedVariation === void 0 ? void 0 : selectedVariation.articleNumber) || product.articleNumber,
|
17
|
+
productId: product.id,
|
18
|
+
productSKU: product.articleNumber,
|
19
|
+
variant: selectedVariation === null || selectedVariation === void 0 ? void 0 : selectedVariation.values.join('_'),
|
20
|
+
variantSKU: selectedVariation === null || selectedVariation === void 0 ? void 0 : selectedVariation.articleNumber,
|
21
|
+
name: product.name,
|
22
|
+
base_product: product.articleNumber,
|
23
|
+
category,
|
24
|
+
brand: getBrand(product, brandCustomField)
|
25
|
+
};
|
26
|
+
}
|
27
|
+
else {
|
28
|
+
// This is kept as backwards compatibility. Some shops rely on the product id being the internal Jetshop id, instead of the article number.
|
29
|
+
// Changing this could affect the statistics in Google Ads/Merchant/Analytics, so we want the new behaviour to be opt-in.
|
30
|
+
return {
|
31
|
+
id: product.id,
|
32
|
+
variant: selectedVariation
|
33
|
+
? selectedVariation.articleNumber
|
34
|
+
: product.articleNumber,
|
35
|
+
name: product.name,
|
36
|
+
base_product: product.articleNumber,
|
37
|
+
category,
|
38
|
+
brand: getBrand(product, brandCustomField)
|
39
|
+
};
|
40
|
+
}
|
41
|
+
}
|
42
|
+
export const gtmTracker = ({ containerId, currency, useArticleNumberAsId = false, brandCustomField }) => ({
|
43
|
+
name: 'gtm',
|
44
|
+
initBrowser({ config }) {
|
45
|
+
const script = `https://www.googletagmanager.com/gtm.js?id=${containerId}`;
|
46
|
+
const w = window;
|
47
|
+
w.dataLayer = w.dataLayer || [];
|
48
|
+
w.dataLayer.push({
|
49
|
+
'gtm.start': new Date().getTime(),
|
50
|
+
event: 'gtm.js',
|
51
|
+
originalLocation: document.location.protocol +
|
52
|
+
'//' +
|
53
|
+
document.location.hostname +
|
54
|
+
document.location.pathname +
|
55
|
+
document.location.search
|
56
|
+
});
|
57
|
+
if (config.useTrackingConsentAPI) {
|
58
|
+
/**
|
59
|
+
NB:
|
60
|
+
Only cookieless pings will be sent to Google servers.
|
61
|
+
There’s also a wait time of 500 milliseconds before any Google tags are allowed to fire,
|
62
|
+
to give time for the update command to be invoked.
|
63
|
+
*/
|
64
|
+
const consent = config.consentedToTracking ? 'granted' : 'denied';
|
65
|
+
w.dataLayer.push({
|
66
|
+
event: 'gtm_consent_default',
|
67
|
+
ad_storage: consent,
|
68
|
+
// https://www.simoahava.com/analytics/consent-mode-google-tags/#restrict-advertising-storage
|
69
|
+
analytics_storage: consent,
|
70
|
+
personalization_storage: consent,
|
71
|
+
functionality_storage: 'granted',
|
72
|
+
security_storage: 'granted',
|
73
|
+
wait_for_update: 500
|
74
|
+
});
|
75
|
+
}
|
76
|
+
injectScript({ src: script });
|
77
|
+
},
|
78
|
+
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
79
|
+
consent() {
|
80
|
+
// Consent updated should be handled from inside GTM
|
81
|
+
},
|
82
|
+
trackProduct({ quantity, action, product, selectedVariation, list, listName, index, category }, context, eventId) {
|
83
|
+
const productData = Object.assign(Object.assign({}, getProductData({
|
84
|
+
product,
|
85
|
+
selectedVariation,
|
86
|
+
useArticleNumberAsId,
|
87
|
+
brandCustomField,
|
88
|
+
category
|
89
|
+
})), { price: (selectedVariation && selectedVariation.price.incVat) ||
|
90
|
+
(product.price && product.price.incVat), quantity, position: index });
|
91
|
+
switch (action) {
|
92
|
+
case 'click':
|
93
|
+
push({
|
94
|
+
event: 'productClick',
|
95
|
+
productIds: product.articleNumber,
|
96
|
+
ecommerce: {
|
97
|
+
click: {
|
98
|
+
actionField: { list: list || listName || context.list },
|
99
|
+
products: [productData]
|
100
|
+
}
|
101
|
+
},
|
102
|
+
eventId
|
103
|
+
});
|
104
|
+
break;
|
105
|
+
case 'view':
|
106
|
+
push({
|
107
|
+
event: 'productDetails',
|
108
|
+
ecommerce: {
|
109
|
+
currencyCode: currency,
|
110
|
+
detail: {
|
111
|
+
products: [productData]
|
112
|
+
}
|
113
|
+
},
|
114
|
+
eventId
|
115
|
+
});
|
116
|
+
break;
|
117
|
+
case 'add':
|
118
|
+
push({
|
119
|
+
event: 'addToCart',
|
120
|
+
productIds: product.articleNumber,
|
121
|
+
ecommerce: {
|
122
|
+
actionField: {
|
123
|
+
list: list || listName || context.list
|
124
|
+
},
|
125
|
+
currencyCode: currency,
|
126
|
+
add: {
|
127
|
+
products: [productData]
|
128
|
+
}
|
129
|
+
},
|
130
|
+
eventId
|
131
|
+
});
|
132
|
+
break;
|
133
|
+
case 'remove':
|
134
|
+
push({
|
135
|
+
event: 'removeFromCart',
|
136
|
+
productIds: product.articleNumber,
|
137
|
+
pageType: 'cart',
|
138
|
+
ecommerce: {
|
139
|
+
currencyCode: currency,
|
140
|
+
remove: {
|
141
|
+
products: [productData]
|
142
|
+
}
|
143
|
+
},
|
144
|
+
eventId
|
145
|
+
});
|
146
|
+
break;
|
147
|
+
default:
|
148
|
+
console.log('Error: Gtag can not track action ' + action);
|
149
|
+
break;
|
150
|
+
}
|
151
|
+
},
|
152
|
+
trackCartCheckout({ cart }, _, eventId) {
|
153
|
+
const items = cart.items.map((item) => {
|
154
|
+
var _a, _b, _c;
|
155
|
+
return (Object.assign(Object.assign({}, getProductData({
|
156
|
+
product: item.product,
|
157
|
+
selectedVariation: item.variant,
|
158
|
+
useArticleNumberAsId,
|
159
|
+
brandCustomField,
|
160
|
+
category: breadcrumbsWithoutProduct((_a = item.product.primaryRoute) === null || _a === void 0 ? void 0 : _a.breadcrumbs) ||
|
161
|
+
unSlugify((_c = (_b = item.product.canonicalCategory) === null || _b === void 0 ? void 0 : _b.primaryRoute) === null || _c === void 0 ? void 0 : _c.path) ||
|
162
|
+
''
|
163
|
+
})), { price: item.total.incVat, quantity: item.quantity }));
|
164
|
+
});
|
165
|
+
push({
|
166
|
+
event: 'checkout',
|
167
|
+
ecommerce: {
|
168
|
+
products: items
|
169
|
+
},
|
170
|
+
eventId
|
171
|
+
});
|
172
|
+
},
|
173
|
+
trackPageView({ pathname, title }, _, eventId) {
|
174
|
+
push({
|
175
|
+
event: 'pageView',
|
176
|
+
pagePath: pathname,
|
177
|
+
pageTitle: title,
|
178
|
+
eventId
|
179
|
+
});
|
180
|
+
},
|
181
|
+
trackList({ listName, products, category }, _, eventId) {
|
182
|
+
const productData = products.map((product, i) => {
|
183
|
+
var _a, _b, _c, _d;
|
184
|
+
return (Object.assign(Object.assign({}, getProductData({
|
185
|
+
product,
|
186
|
+
selectedVariation: null,
|
187
|
+
useArticleNumberAsId,
|
188
|
+
brandCustomField,
|
189
|
+
category: category ||
|
190
|
+
breadcrumbsWithoutProduct((_a = product === null || product === void 0 ? void 0 : product.primaryRoute) === null || _a === void 0 ? void 0 : _a.breadcrumbs) ||
|
191
|
+
unSlugify((_c = (_b = product === null || product === void 0 ? void 0 : product.canonicalCategory) === null || _b === void 0 ? void 0 : _b.primaryRoute) === null || _c === void 0 ? void 0 : _c.path)
|
192
|
+
})), { price: (_d = product.price) === null || _d === void 0 ? void 0 : _d.incVat, position: i, list: listName }));
|
193
|
+
});
|
194
|
+
push({
|
195
|
+
event: 'productList',
|
196
|
+
ecommerce: {
|
197
|
+
currencyCode: currency,
|
198
|
+
impressions: productData
|
199
|
+
},
|
200
|
+
eventId
|
201
|
+
});
|
202
|
+
},
|
203
|
+
trackExperiment({ id, variant }, _, eventId) {
|
204
|
+
push({
|
205
|
+
experiment: `${id}.${variant}`,
|
206
|
+
eventId
|
207
|
+
});
|
208
|
+
},
|
209
|
+
trackUser({ userId }, _, eventId) {
|
210
|
+
push({
|
211
|
+
userId,
|
212
|
+
eventId
|
213
|
+
});
|
214
|
+
},
|
215
|
+
trackLogin(_, __, eventId) {
|
216
|
+
push({
|
217
|
+
event: 'login',
|
218
|
+
eventId
|
219
|
+
});
|
220
|
+
},
|
221
|
+
trackRegister(_, __, eventId) {
|
222
|
+
push({
|
223
|
+
event: 'register',
|
224
|
+
eventId
|
225
|
+
});
|
226
|
+
},
|
227
|
+
trackAddToWishList({ articleNumber, productName }, _, eventId) {
|
228
|
+
push({
|
229
|
+
event: 'addToWishlist',
|
230
|
+
articleNumber,
|
231
|
+
productName,
|
232
|
+
eventId
|
233
|
+
});
|
234
|
+
}
|
235
|
+
});
|
236
|
+
//# sourceMappingURL=gtm.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"gtm.js","sourceRoot":"","sources":["gtm.ts"],"names":[],"mappings":"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"}
|
@@ -1,12 +1 @@
|
|
1
|
-
|
2
|
-
declare global {
|
3
|
-
interface Window {
|
4
|
-
dataLayer: any[];
|
5
|
-
}
|
6
|
-
}
|
7
|
-
export declare const gtmTracker: ({ containerId, currency, useArticleNumberAsId, brandCustomField }: {
|
8
|
-
containerId: string;
|
9
|
-
currency: string;
|
10
|
-
brandCustomField?: string;
|
11
|
-
useArticleNumberAsId?: boolean;
|
12
|
-
}) => Tracker;
|
1
|
+
export * from './gtm';
|