@segment/analytics-browser-actions-google-analytics-4 1.33.0 → 1.34.0

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.
Files changed (171) hide show
  1. package/dist/cjs/addPaymentInfo/generated-types.d.ts +1 -0
  2. package/dist/cjs/addPaymentInfo/index.js +4 -2
  3. package/dist/cjs/addPaymentInfo/index.js.map +1 -1
  4. package/dist/cjs/addToCart/generated-types.d.ts +1 -0
  5. package/dist/cjs/addToCart/index.js +4 -2
  6. package/dist/cjs/addToCart/index.js.map +1 -1
  7. package/dist/cjs/addToWishlist/generated-types.d.ts +1 -0
  8. package/dist/cjs/addToWishlist/index.js +4 -2
  9. package/dist/cjs/addToWishlist/index.js.map +1 -1
  10. package/dist/cjs/beginCheckout/generated-types.d.ts +1 -0
  11. package/dist/cjs/beginCheckout/index.js +4 -2
  12. package/dist/cjs/beginCheckout/index.js.map +1 -1
  13. package/dist/cjs/customEvent/generated-types.d.ts +1 -0
  14. package/dist/cjs/customEvent/index.js +4 -2
  15. package/dist/cjs/customEvent/index.js.map +1 -1
  16. package/dist/cjs/ga4-properties.d.ts +1 -0
  17. package/dist/cjs/ga4-properties.js +7 -1
  18. package/dist/cjs/ga4-properties.js.map +1 -1
  19. package/dist/cjs/generateLead/generated-types.d.ts +1 -0
  20. package/dist/cjs/generateLead/index.js +4 -2
  21. package/dist/cjs/generateLead/index.js.map +1 -1
  22. package/dist/cjs/login/generated-types.d.ts +1 -0
  23. package/dist/cjs/login/index.js +4 -2
  24. package/dist/cjs/login/index.js.map +1 -1
  25. package/dist/cjs/purchase/generated-types.d.ts +1 -0
  26. package/dist/cjs/purchase/index.js +4 -2
  27. package/dist/cjs/purchase/index.js.map +1 -1
  28. package/dist/cjs/refund/generated-types.d.ts +1 -0
  29. package/dist/cjs/refund/index.js +4 -2
  30. package/dist/cjs/refund/index.js.map +1 -1
  31. package/dist/cjs/removeFromCart/generated-types.d.ts +1 -0
  32. package/dist/cjs/removeFromCart/index.js +4 -2
  33. package/dist/cjs/removeFromCart/index.js.map +1 -1
  34. package/dist/cjs/search/generated-types.d.ts +1 -0
  35. package/dist/cjs/search/index.js +4 -2
  36. package/dist/cjs/search/index.js.map +1 -1
  37. package/dist/cjs/selectItem/generated-types.d.ts +1 -0
  38. package/dist/cjs/selectItem/index.js +4 -2
  39. package/dist/cjs/selectItem/index.js.map +1 -1
  40. package/dist/cjs/selectPromotion/generated-types.d.ts +1 -0
  41. package/dist/cjs/selectPromotion/index.js +4 -2
  42. package/dist/cjs/selectPromotion/index.js.map +1 -1
  43. package/dist/cjs/signUp/generated-types.d.ts +1 -0
  44. package/dist/cjs/signUp/index.js +4 -2
  45. package/dist/cjs/signUp/index.js.map +1 -1
  46. package/dist/cjs/viewCart/generated-types.d.ts +1 -0
  47. package/dist/cjs/viewCart/index.js +4 -2
  48. package/dist/cjs/viewCart/index.js.map +1 -1
  49. package/dist/cjs/viewItem/generated-types.d.ts +1 -0
  50. package/dist/cjs/viewItem/index.js +4 -2
  51. package/dist/cjs/viewItem/index.js.map +1 -1
  52. package/dist/cjs/viewItemList/generated-types.d.ts +1 -0
  53. package/dist/cjs/viewItemList/index.js +4 -2
  54. package/dist/cjs/viewItemList/index.js.map +1 -1
  55. package/dist/cjs/viewPromotion/generated-types.d.ts +1 -0
  56. package/dist/cjs/viewPromotion/index.js +4 -2
  57. package/dist/cjs/viewPromotion/index.js.map +1 -1
  58. package/dist/esm/addPaymentInfo/generated-types.d.ts +1 -0
  59. package/dist/esm/addPaymentInfo/index.js +5 -3
  60. package/dist/esm/addPaymentInfo/index.js.map +1 -1
  61. package/dist/esm/addToCart/generated-types.d.ts +1 -0
  62. package/dist/esm/addToCart/index.js +5 -3
  63. package/dist/esm/addToCart/index.js.map +1 -1
  64. package/dist/esm/addToWishlist/generated-types.d.ts +1 -0
  65. package/dist/esm/addToWishlist/index.js +5 -3
  66. package/dist/esm/addToWishlist/index.js.map +1 -1
  67. package/dist/esm/beginCheckout/generated-types.d.ts +1 -0
  68. package/dist/esm/beginCheckout/index.js +5 -3
  69. package/dist/esm/beginCheckout/index.js.map +1 -1
  70. package/dist/esm/customEvent/generated-types.d.ts +1 -0
  71. package/dist/esm/customEvent/index.js +5 -3
  72. package/dist/esm/customEvent/index.js.map +1 -1
  73. package/dist/esm/ga4-properties.d.ts +1 -0
  74. package/dist/esm/ga4-properties.js +6 -0
  75. package/dist/esm/ga4-properties.js.map +1 -1
  76. package/dist/esm/generateLead/generated-types.d.ts +1 -0
  77. package/dist/esm/generateLead/index.js +5 -3
  78. package/dist/esm/generateLead/index.js.map +1 -1
  79. package/dist/esm/login/generated-types.d.ts +1 -0
  80. package/dist/esm/login/index.js +5 -3
  81. package/dist/esm/login/index.js.map +1 -1
  82. package/dist/esm/purchase/generated-types.d.ts +1 -0
  83. package/dist/esm/purchase/index.js +5 -3
  84. package/dist/esm/purchase/index.js.map +1 -1
  85. package/dist/esm/refund/generated-types.d.ts +1 -0
  86. package/dist/esm/refund/index.js +5 -3
  87. package/dist/esm/refund/index.js.map +1 -1
  88. package/dist/esm/removeFromCart/generated-types.d.ts +1 -0
  89. package/dist/esm/removeFromCart/index.js +5 -3
  90. package/dist/esm/removeFromCart/index.js.map +1 -1
  91. package/dist/esm/search/generated-types.d.ts +1 -0
  92. package/dist/esm/search/index.js +5 -3
  93. package/dist/esm/search/index.js.map +1 -1
  94. package/dist/esm/selectItem/generated-types.d.ts +1 -0
  95. package/dist/esm/selectItem/index.js +5 -3
  96. package/dist/esm/selectItem/index.js.map +1 -1
  97. package/dist/esm/selectPromotion/generated-types.d.ts +1 -0
  98. package/dist/esm/selectPromotion/index.js +5 -3
  99. package/dist/esm/selectPromotion/index.js.map +1 -1
  100. package/dist/esm/signUp/generated-types.d.ts +1 -0
  101. package/dist/esm/signUp/index.js +5 -3
  102. package/dist/esm/signUp/index.js.map +1 -1
  103. package/dist/esm/viewCart/generated-types.d.ts +1 -0
  104. package/dist/esm/viewCart/index.js +5 -3
  105. package/dist/esm/viewCart/index.js.map +1 -1
  106. package/dist/esm/viewItem/generated-types.d.ts +1 -0
  107. package/dist/esm/viewItem/index.js +5 -3
  108. package/dist/esm/viewItem/index.js.map +1 -1
  109. package/dist/esm/viewItemList/generated-types.d.ts +1 -0
  110. package/dist/esm/viewItemList/index.js +5 -3
  111. package/dist/esm/viewItemList/index.js.map +1 -1
  112. package/dist/esm/viewPromotion/generated-types.d.ts +1 -0
  113. package/dist/esm/viewPromotion/index.js +5 -3
  114. package/dist/esm/viewPromotion/index.js.map +1 -1
  115. package/dist/tsconfig.tsbuildinfo +1 -1
  116. package/package.json +2 -2
  117. package/src/__tests__/addPaymentInfo.test.ts +74 -2
  118. package/src/__tests__/addToCart.test.ts +67 -2
  119. package/src/__tests__/addToWishlist.test.ts +68 -2
  120. package/src/__tests__/beginCheckout.test.ts +72 -2
  121. package/src/__tests__/customEvent.test.ts +62 -2
  122. package/src/__tests__/generateLead.test.ts +50 -2
  123. package/src/__tests__/login.test.ts +47 -2
  124. package/src/__tests__/purchase.test.ts +71 -2
  125. package/src/__tests__/refund.test.ts +70 -2
  126. package/src/__tests__/removeFromCart.test.ts +69 -2
  127. package/src/__tests__/search.test.ts +48 -2
  128. package/src/__tests__/selectItem.test.ts +69 -2
  129. package/src/__tests__/selectPromotion.test.ts +81 -2
  130. package/src/__tests__/signUp.test.ts +42 -2
  131. package/src/__tests__/viewCart.test.ts +69 -2
  132. package/src/__tests__/viewItem.test.ts +68 -2
  133. package/src/__tests__/viewItemList.test.ts +70 -2
  134. package/src/__tests__/viewPromotion.test.ts +80 -2
  135. package/src/addPaymentInfo/generated-types.ts +4 -0
  136. package/src/addPaymentInfo/index.ts +6 -3
  137. package/src/addToCart/generated-types.ts +4 -0
  138. package/src/addToCart/index.ts +5 -3
  139. package/src/addToWishlist/generated-types.ts +4 -0
  140. package/src/addToWishlist/index.ts +5 -3
  141. package/src/beginCheckout/generated-types.ts +4 -0
  142. package/src/beginCheckout/index.ts +14 -3
  143. package/src/customEvent/generated-types.ts +4 -0
  144. package/src/customEvent/index.ts +5 -3
  145. package/src/ga4-properties.ts +7 -0
  146. package/src/generateLead/generated-types.ts +4 -0
  147. package/src/generateLead/index.ts +5 -3
  148. package/src/login/generated-types.ts +4 -0
  149. package/src/login/index.ts +5 -3
  150. package/src/purchase/generated-types.ts +4 -0
  151. package/src/purchase/index.ts +6 -3
  152. package/src/refund/generated-types.ts +4 -0
  153. package/src/refund/index.ts +6 -3
  154. package/src/removeFromCart/generated-types.ts +4 -0
  155. package/src/removeFromCart/index.ts +5 -3
  156. package/src/search/generated-types.ts +4 -0
  157. package/src/search/index.ts +5 -3
  158. package/src/selectItem/generated-types.ts +4 -0
  159. package/src/selectItem/index.ts +6 -3
  160. package/src/selectPromotion/generated-types.ts +4 -0
  161. package/src/selectPromotion/index.ts +6 -3
  162. package/src/signUp/generated-types.ts +4 -0
  163. package/src/signUp/index.ts +5 -3
  164. package/src/viewCart/generated-types.ts +4 -0
  165. package/src/viewCart/index.ts +5 -3
  166. package/src/viewItem/generated-types.ts +4 -0
  167. package/src/viewItem/index.ts +5 -3
  168. package/src/viewItemList/generated-types.ts +4 -0
  169. package/src/viewItemList/index.ts +13 -3
  170. package/src/viewPromotion/generated-types.ts +4 -0
  171. package/src/viewPromotion/index.ts +6 -3
@@ -15,6 +15,9 @@ const subscriptions: Subscription[] = [
15
15
  value: {
16
16
  '@path': '$.properties.value'
17
17
  },
18
+ send_to: {
19
+ '@path': '$.properties.send_to'
20
+ },
18
21
  items: [
19
22
  {
20
23
  item_name: {
@@ -61,7 +64,69 @@ describe('GoogleAnalytics4Web.viewItem', () => {
61
64
  await trackEventPlugin.load(Context.system(), {} as Analytics)
62
65
  })
63
66
 
64
- test('GA4 viewItem Event', async () => {
67
+ test('GA4 viewItem Event when send to is false', async () => {
68
+ const context = new Context({
69
+ event: 'View Item',
70
+ type: 'track',
71
+ properties: {
72
+ currency: 'USD',
73
+ value: 10,
74
+ send_to: false,
75
+ products: [
76
+ {
77
+ product_id: '12345',
78
+ name: 'Monopoly: 3rd Edition',
79
+ currency: 'USD'
80
+ }
81
+ ]
82
+ }
83
+ })
84
+
85
+ await viewItemEvent.track?.(context)
86
+
87
+ expect(mockGA4).toHaveBeenCalledWith(
88
+ expect.anything(),
89
+ expect.stringContaining('view_item'),
90
+ expect.objectContaining({
91
+ currency: 'USD',
92
+ items: [{ currency: 'USD', item_id: '12345', item_name: 'Monopoly: 3rd Edition' }],
93
+ value: 10,
94
+ send_to: 'default'
95
+ })
96
+ )
97
+ })
98
+ test('GA4 viewItem Event when send to is true', async () => {
99
+ const context = new Context({
100
+ event: 'View Item',
101
+ type: 'track',
102
+ properties: {
103
+ currency: 'USD',
104
+ value: 10,
105
+ send_to: true,
106
+ products: [
107
+ {
108
+ product_id: '12345',
109
+ name: 'Monopoly: 3rd Edition',
110
+ currency: 'USD'
111
+ }
112
+ ]
113
+ }
114
+ })
115
+
116
+ await viewItemEvent.track?.(context)
117
+
118
+ expect(mockGA4).toHaveBeenCalledWith(
119
+ expect.anything(),
120
+ expect.stringContaining('view_item'),
121
+ expect.objectContaining({
122
+ currency: 'USD',
123
+ items: [{ currency: 'USD', item_id: '12345', item_name: 'Monopoly: 3rd Edition' }],
124
+ value: 10,
125
+ send_to: settings.measurementID
126
+ })
127
+ )
128
+ })
129
+ test('GA4 viewItem Event when send to is undefined', async () => {
65
130
  const context = new Context({
66
131
  event: 'View Item',
67
132
  type: 'track',
@@ -86,7 +151,8 @@ describe('GoogleAnalytics4Web.viewItem', () => {
86
151
  expect.objectContaining({
87
152
  currency: 'USD',
88
153
  items: [{ currency: 'USD', item_id: '12345', item_name: 'Monopoly: 3rd Edition' }],
89
- value: 10
154
+ value: 10,
155
+ send_to: 'default'
90
156
  })
91
157
  )
92
158
  })
@@ -15,6 +15,9 @@ const subscriptions: Subscription[] = [
15
15
  item_list_name: {
16
16
  '@path': '$.properties.item_list_name'
17
17
  },
18
+ send_to: {
19
+ '@path': '$.properties.send_to'
20
+ },
18
21
  items: [
19
22
  {
20
23
  item_name: {
@@ -61,7 +64,71 @@ describe('GoogleAnalytics4Web.viewItemList', () => {
61
64
  await trackEventPlugin.load(Context.system(), {} as Analytics)
62
65
  })
63
66
 
64
- test('GA4 viewItemList Event', async () => {
67
+ test('GA4 viewItemList Event when send to is false', async () => {
68
+ const context = new Context({
69
+ event: 'View Item List',
70
+ type: 'track',
71
+ properties: {
72
+ item_list_id: 12321,
73
+ item_list_name: 'Monopoly: 3rd Edition',
74
+ send_to: false,
75
+ products: [
76
+ {
77
+ product_id: '12345',
78
+ name: 'Monopoly: 3rd Edition',
79
+ currency: 'USD'
80
+ }
81
+ ]
82
+ }
83
+ })
84
+
85
+ await viewItemListEvent.track?.(context)
86
+
87
+ expect(mockGA4).toHaveBeenCalledWith(
88
+ expect.anything(),
89
+ expect.stringContaining('view_item_list'),
90
+ expect.objectContaining({
91
+ item_list_id: 12321,
92
+ item_list_name: 'Monopoly: 3rd Edition',
93
+ items: [{ currency: 'USD', item_id: '12345', item_name: 'Monopoly: 3rd Edition' }],
94
+ send_to: 'default'
95
+ })
96
+ )
97
+ })
98
+
99
+ test('GA4 viewItemList Event when send to is true', async () => {
100
+ const context = new Context({
101
+ event: 'View Item List',
102
+ type: 'track',
103
+ properties: {
104
+ item_list_id: 12321,
105
+ item_list_name: 'Monopoly: 3rd Edition',
106
+ send_to: true,
107
+ products: [
108
+ {
109
+ product_id: '12345',
110
+ name: 'Monopoly: 3rd Edition',
111
+ currency: 'USD'
112
+ }
113
+ ]
114
+ }
115
+ })
116
+
117
+ await viewItemListEvent.track?.(context)
118
+
119
+ expect(mockGA4).toHaveBeenCalledWith(
120
+ expect.anything(),
121
+ expect.stringContaining('view_item_list'),
122
+ expect.objectContaining({
123
+ item_list_id: 12321,
124
+ item_list_name: 'Monopoly: 3rd Edition',
125
+ items: [{ currency: 'USD', item_id: '12345', item_name: 'Monopoly: 3rd Edition' }],
126
+ send_to: settings.measurementID
127
+ })
128
+ )
129
+ })
130
+
131
+ test('GA4 viewItemList Event when send to is undefined', async () => {
65
132
  const context = new Context({
66
133
  event: 'View Item List',
67
134
  type: 'track',
@@ -86,7 +153,8 @@ describe('GoogleAnalytics4Web.viewItemList', () => {
86
153
  expect.objectContaining({
87
154
  item_list_id: 12321,
88
155
  item_list_name: 'Monopoly: 3rd Edition',
89
- items: [{ currency: 'USD', item_id: '12345', item_name: 'Monopoly: 3rd Edition' }]
156
+ items: [{ currency: 'USD', item_id: '12345', item_name: 'Monopoly: 3rd Edition' }],
157
+ send_to: 'default'
90
158
  })
91
159
  )
92
160
  })
@@ -24,6 +24,9 @@ const subscriptions: Subscription[] = [
24
24
  promotion_name: {
25
25
  '@path': '$.properties.promotion_name'
26
26
  },
27
+ send_to: {
28
+ '@path': '$.properties.send_to'
29
+ },
27
30
  items: [
28
31
  {
29
32
  item_name: {
@@ -70,7 +73,81 @@ describe('GoogleAnalytics4Web.viewPromotion', () => {
70
73
  await trackEventPlugin.load(Context.system(), {} as Analytics)
71
74
  })
72
75
 
73
- test('GA4 viewPromotion Event', async () => {
76
+ test('GA4 viewPromotion Event when send to is false', async () => {
77
+ const context = new Context({
78
+ event: 'Select Promotion',
79
+ type: 'track',
80
+ properties: {
81
+ creative_name: 'summer_banner2',
82
+ creative_slot: 'featured_app_1',
83
+ location_id: 'ChIJIQBpAG2ahYAR_6128GcTUEo',
84
+ promotion_id: 'P_12345',
85
+ promotion_name: 'Summer Sale',
86
+ send_to: false,
87
+ products: [
88
+ {
89
+ product_id: '12345',
90
+ name: 'Monopoly: 3rd Edition',
91
+ currency: 'USD'
92
+ }
93
+ ]
94
+ }
95
+ })
96
+
97
+ await viewPromotionEvent.track?.(context)
98
+
99
+ expect(mockGA4).toHaveBeenCalledWith(
100
+ expect.anything(),
101
+ expect.stringContaining('view_promotion'),
102
+ expect.objectContaining({
103
+ creative_name: 'summer_banner2',
104
+ creative_slot: 'featured_app_1',
105
+ location_id: 'ChIJIQBpAG2ahYAR_6128GcTUEo',
106
+ promotion_id: 'P_12345',
107
+ promotion_name: 'Summer Sale',
108
+ items: [{ currency: 'USD', item_id: '12345', item_name: 'Monopoly: 3rd Edition' }],
109
+ send_to: 'default'
110
+ })
111
+ )
112
+ })
113
+ test('GA4 viewPromotion Event when send to is true', async () => {
114
+ const context = new Context({
115
+ event: 'Select Promotion',
116
+ type: 'track',
117
+ properties: {
118
+ creative_name: 'summer_banner2',
119
+ creative_slot: 'featured_app_1',
120
+ location_id: 'ChIJIQBpAG2ahYAR_6128GcTUEo',
121
+ promotion_id: 'P_12345',
122
+ promotion_name: 'Summer Sale',
123
+ send_to: true,
124
+ products: [
125
+ {
126
+ product_id: '12345',
127
+ name: 'Monopoly: 3rd Edition',
128
+ currency: 'USD'
129
+ }
130
+ ]
131
+ }
132
+ })
133
+
134
+ await viewPromotionEvent.track?.(context)
135
+
136
+ expect(mockGA4).toHaveBeenCalledWith(
137
+ expect.anything(),
138
+ expect.stringContaining('view_promotion'),
139
+ expect.objectContaining({
140
+ creative_name: 'summer_banner2',
141
+ creative_slot: 'featured_app_1',
142
+ location_id: 'ChIJIQBpAG2ahYAR_6128GcTUEo',
143
+ promotion_id: 'P_12345',
144
+ promotion_name: 'Summer Sale',
145
+ items: [{ currency: 'USD', item_id: '12345', item_name: 'Monopoly: 3rd Edition' }],
146
+ send_to: settings.measurementID
147
+ })
148
+ )
149
+ })
150
+ test('GA4 viewPromotion Event when send to is undefined', async () => {
74
151
  const context = new Context({
75
152
  event: 'Select Promotion',
76
153
  type: 'track',
@@ -101,7 +178,8 @@ describe('GoogleAnalytics4Web.viewPromotion', () => {
101
178
  location_id: 'ChIJIQBpAG2ahYAR_6128GcTUEo',
102
179
  promotion_id: 'P_12345',
103
180
  promotion_name: 'Summer Sale',
104
- items: [{ currency: 'USD', item_id: '12345', item_name: 'Monopoly: 3rd Edition' }]
181
+ items: [{ currency: 'USD', item_id: '12345', item_name: 'Monopoly: 3rd Edition' }],
182
+ send_to: 'default'
105
183
  })
106
184
  )
107
185
  })
@@ -115,4 +115,8 @@ export interface Payload {
115
115
  params?: {
116
116
  [k: string]: unknown
117
117
  }
118
+ /**
119
+ * If the send_to parameter is not set, events are routed to all Tag Ids (AW-xxx, G-xxx) set via Google Tag
120
+ */
121
+ send_to?: boolean
118
122
  }
@@ -9,7 +9,8 @@ import {
9
9
  coupon,
10
10
  payment_type,
11
11
  items_multi_products,
12
- params
12
+ params,
13
+ send_to
13
14
  } from '../ga4-properties'
14
15
 
15
16
  // Change from unknown to the partner SDK types
@@ -29,9 +30,10 @@ const action: BrowserActionDefinition<Settings, Function, Payload> = {
29
30
  required: true
30
31
  },
31
32
  user_properties: user_properties,
32
- params: params
33
+ params: params,
34
+ send_to: send_to
33
35
  },
34
- perform: (gtag, { payload }) => {
36
+ perform: (gtag, { payload, settings }) => {
35
37
  gtag('event', 'add_payment_info', {
36
38
  currency: payload.currency,
37
39
  value: payload.value,
@@ -40,6 +42,7 @@ const action: BrowserActionDefinition<Settings, Function, Payload> = {
40
42
  items: payload.items,
41
43
  user_id: payload.user_id ?? undefined,
42
44
  user_properties: payload.user_properties,
45
+ send_to: payload.send_to == true ? settings.measurementID : 'default',
43
46
  ...payload.params
44
47
  })
45
48
  }
@@ -107,4 +107,8 @@ export interface Payload {
107
107
  params?: {
108
108
  [k: string]: unknown
109
109
  }
110
+ /**
111
+ * If the send_to parameter is not set, events are routed to all Tag Ids (AW-xxx, G-xxx) set via Google Tag
112
+ */
113
+ send_to?: boolean
110
114
  }
@@ -2,7 +2,7 @@ import type { BrowserActionDefinition } from '@segment/browser-destination-runti
2
2
  import type { Settings } from '../generated-types'
3
3
  import type { Payload } from './generated-types'
4
4
 
5
- import { user_properties, params, value, currency, items_single_products, user_id } from '../ga4-properties'
5
+ import { user_properties, params, value, currency, items_single_products, user_id, send_to } from '../ga4-properties'
6
6
 
7
7
  const action: BrowserActionDefinition<Settings, Function, Payload> = {
8
8
  title: 'Add to Cart',
@@ -18,15 +18,17 @@ const action: BrowserActionDefinition<Settings, Function, Payload> = {
18
18
  },
19
19
  value: value,
20
20
  user_properties: user_properties,
21
- params: params
21
+ params: params,
22
+ send_to: send_to
22
23
  },
23
- perform: (gtag, { payload }) => {
24
+ perform: (gtag, { payload, settings }) => {
24
25
  gtag('event', 'add_to_cart', {
25
26
  currency: payload.currency,
26
27
  value: payload.value,
27
28
  items: payload.items,
28
29
  user_id: payload.user_id ?? undefined,
29
30
  user_properties: payload.user_properties,
31
+ send_to: payload.send_to == true ? settings.measurementID : 'default',
30
32
  ...payload.params
31
33
  })
32
34
  }
@@ -107,4 +107,8 @@ export interface Payload {
107
107
  params?: {
108
108
  [k: string]: unknown
109
109
  }
110
+ /**
111
+ * If the send_to parameter is not set, events are routed to all Tag Ids (AW-xxx, G-xxx) set via Google Tag
112
+ */
113
+ send_to?: boolean
110
114
  }
@@ -2,7 +2,7 @@ import type { BrowserActionDefinition } from '@segment/browser-destination-runti
2
2
  import type { Settings } from '../generated-types'
3
3
  import type { Payload } from './generated-types'
4
4
 
5
- import { user_properties, params, value, currency, items_single_products, user_id } from '../ga4-properties'
5
+ import { user_properties, params, value, currency, items_single_products, user_id, send_to } from '../ga4-properties'
6
6
 
7
7
  // Change from unknown to the partner SDK types
8
8
  const action: BrowserActionDefinition<Settings, Function, Payload> = {
@@ -20,15 +20,17 @@ const action: BrowserActionDefinition<Settings, Function, Payload> = {
20
20
  required: true
21
21
  },
22
22
  user_properties: user_properties,
23
- params: params
23
+ params: params,
24
+ send_to: send_to
24
25
  },
25
- perform: (gtag, { payload }) => {
26
+ perform: (gtag, { payload, settings }) => {
26
27
  gtag('event', 'add_to_wishlist', {
27
28
  currency: payload.currency,
28
29
  value: payload.value,
29
30
  items: payload.items,
30
31
  user_id: payload.user_id ?? undefined,
31
32
  user_properties: payload.user_properties,
33
+ send_to: payload.send_to == true ? settings.measurementID : 'default',
32
34
  ...payload.params
33
35
  })
34
36
  }
@@ -111,4 +111,8 @@ export interface Payload {
111
111
  user_properties?: {
112
112
  [k: string]: unknown
113
113
  }
114
+ /**
115
+ * If the send_to parameter is not set, events are routed to all Tag Ids (AW-xxx, G-xxx) set via Google Tag
116
+ */
117
+ send_to?: boolean
114
118
  }
@@ -2,7 +2,16 @@ import type { BrowserActionDefinition } from '@segment/browser-destination-runti
2
2
  import type { Settings } from '../generated-types'
3
3
  import type { Payload } from './generated-types'
4
4
 
5
- import { params, coupon, currency, value, items_multi_products, user_id, user_properties } from '../ga4-properties'
5
+ import {
6
+ params,
7
+ coupon,
8
+ currency,
9
+ value,
10
+ items_multi_products,
11
+ user_id,
12
+ user_properties,
13
+ send_to
14
+ } from '../ga4-properties'
6
15
 
7
16
  const action: BrowserActionDefinition<Settings, Function, Payload> = {
8
17
  title: 'Begin Checkout',
@@ -19,9 +28,10 @@ const action: BrowserActionDefinition<Settings, Function, Payload> = {
19
28
  },
20
29
  value: value,
21
30
  params: params,
22
- user_properties: user_properties
31
+ user_properties: user_properties,
32
+ send_to: send_to
23
33
  },
24
- perform: (gtag, { payload }) => {
34
+ perform: (gtag, { payload, settings }) => {
25
35
  gtag('event', 'begin_checkout', {
26
36
  currency: payload.currency,
27
37
  value: payload.value,
@@ -29,6 +39,7 @@ const action: BrowserActionDefinition<Settings, Function, Payload> = {
29
39
  items: payload.items,
30
40
  user_id: payload.user_id ?? undefined,
31
41
  user_properties: payload.user_properties,
42
+ send_to: payload.send_to == true ? settings.measurementID : 'default',
32
43
  ...payload.params
33
44
  })
34
45
  }
@@ -25,4 +25,8 @@ export interface Payload {
25
25
  params?: {
26
26
  [k: string]: unknown
27
27
  }
28
+ /**
29
+ * If the send_to parameter is not set, events are routed to all Tag Ids (AW-xxx, G-xxx) set via Google Tag
30
+ */
31
+ send_to?: boolean
28
32
  }
@@ -1,7 +1,7 @@
1
1
  import type { BrowserActionDefinition } from '@segment/browser-destination-runtime/types'
2
2
  import type { Settings } from '../generated-types'
3
3
  import type { Payload } from './generated-types'
4
- import { user_id, user_properties, params } from '../ga4-properties'
4
+ import { user_id, user_properties, params, send_to } from '../ga4-properties'
5
5
 
6
6
  const normalizeEventName = (name: string, lowercase: boolean | undefined): string => {
7
7
  name = name.trim()
@@ -38,14 +38,16 @@ const action: BrowserActionDefinition<Settings, Function, Payload> = {
38
38
  },
39
39
  user_id: { ...user_id },
40
40
  user_properties: user_properties,
41
- params: params
41
+ params: params,
42
+ send_to: send_to
42
43
  },
43
- perform: (gtag, { payload }) => {
44
+ perform: (gtag, { payload, settings }) => {
44
45
  const event_name = normalizeEventName(payload.name, payload.lowercase)
45
46
 
46
47
  gtag('event', event_name, {
47
48
  user_id: payload.user_id ?? undefined,
48
49
  user_properties: payload.user_properties,
50
+ send_to: payload.send_to == true ? settings.measurementID : 'default',
49
51
  ...payload.params
50
52
  })
51
53
  }
@@ -367,3 +367,10 @@ export const items_multi_products: InputField = {
367
367
  ]
368
368
  }
369
369
  }
370
+ export const send_to: InputField = {
371
+ label: 'Send To',
372
+ type: 'boolean',
373
+ default: true,
374
+ description:
375
+ 'If the send_to parameter is not set, events are routed to all Tag Ids (AW-xxx, G-xxx) set via Google Tag'
376
+ }
@@ -25,4 +25,8 @@ export interface Payload {
25
25
  params?: {
26
26
  [k: string]: unknown
27
27
  }
28
+ /**
29
+ * If the send_to parameter is not set, events are routed to all Tag Ids (AW-xxx, G-xxx) set via Google Tag
30
+ */
31
+ send_to?: boolean
28
32
  }
@@ -2,7 +2,7 @@ import type { BrowserActionDefinition } from '@segment/browser-destination-runti
2
2
  import type { Settings } from '../generated-types'
3
3
  import type { Payload } from './generated-types'
4
4
 
5
- import { user_properties, params, user_id, currency, value } from '../ga4-properties'
5
+ import { user_properties, params, user_id, currency, value, send_to } from '../ga4-properties'
6
6
 
7
7
  const action: BrowserActionDefinition<Settings, Function, Payload> = {
8
8
  title: 'Generate Lead',
@@ -15,14 +15,16 @@ const action: BrowserActionDefinition<Settings, Function, Payload> = {
15
15
  currency: currency,
16
16
  value: value,
17
17
  user_properties: user_properties,
18
- params: params
18
+ params: params,
19
+ send_to: send_to
19
20
  },
20
- perform: (gtag, { payload }) => {
21
+ perform: (gtag, { payload, settings }) => {
21
22
  gtag('event', 'generate_lead', {
22
23
  currency: payload.currency,
23
24
  value: payload.value,
24
25
  user_id: payload.user_id ?? undefined,
25
26
  user_properties: payload.user_properties,
27
+ send_to: payload.send_to == true ? settings.measurementID : 'default',
26
28
  ...payload.params
27
29
  })
28
30
  }
@@ -21,4 +21,8 @@ export interface Payload {
21
21
  params?: {
22
22
  [k: string]: unknown
23
23
  }
24
+ /**
25
+ * If the send_to parameter is not set, events are routed to all Tag Ids (AW-xxx, G-xxx) set via Google Tag
26
+ */
27
+ send_to?: boolean
24
28
  }
@@ -2,7 +2,7 @@ import type { BrowserActionDefinition } from '@segment/browser-destination-runti
2
2
  import type { Settings } from '../generated-types'
3
3
  import type { Payload } from './generated-types'
4
4
 
5
- import { user_properties, params, user_id, method } from '../ga4-properties'
5
+ import { user_properties, params, user_id, method, send_to } from '../ga4-properties'
6
6
 
7
7
  // Change from unknown to the partner SDK types
8
8
  const action: BrowserActionDefinition<Settings, Function, Payload> = {
@@ -14,14 +14,16 @@ const action: BrowserActionDefinition<Settings, Function, Payload> = {
14
14
  user_id: user_id,
15
15
  method: method,
16
16
  user_properties: user_properties,
17
- params: params
17
+ params: params,
18
+ send_to: send_to
18
19
  },
19
20
 
20
- perform: (gtag, { payload }) => {
21
+ perform: (gtag, { payload, settings }) => {
21
22
  gtag('event', 'login', {
22
23
  method: payload.method,
23
24
  user_id: payload.user_id ?? undefined,
24
25
  user_properties: payload.user_properties,
26
+ send_to: payload.send_to == true ? settings.measurementID : 'default',
25
27
  ...payload.params
26
28
  })
27
29
  }
@@ -123,4 +123,8 @@ export interface Payload {
123
123
  params?: {
124
124
  [k: string]: unknown
125
125
  }
126
+ /**
127
+ * If the send_to parameter is not set, events are routed to all Tag Ids (AW-xxx, G-xxx) set via Google Tag
128
+ */
129
+ send_to?: boolean
126
130
  }
@@ -11,7 +11,8 @@ import {
11
11
  tax,
12
12
  items_multi_products,
13
13
  params,
14
- user_properties
14
+ user_properties,
15
+ send_to
15
16
  } from '../ga4-properties'
16
17
 
17
18
  const action: BrowserActionDefinition<Settings, Function, Payload> = {
@@ -32,9 +33,10 @@ const action: BrowserActionDefinition<Settings, Function, Payload> = {
32
33
  tax: tax,
33
34
  value: { ...value, default: { '@path': '$.properties.total' } },
34
35
  user_properties: user_properties,
35
- params: params
36
+ params: params,
37
+ send_to: send_to
36
38
  },
37
- perform: (gtag, { payload }) => {
39
+ perform: (gtag, { payload, settings }) => {
38
40
  gtag('event', 'purchase', {
39
41
  currency: payload.currency,
40
42
  transaction_id: payload.transaction_id,
@@ -45,6 +47,7 @@ const action: BrowserActionDefinition<Settings, Function, Payload> = {
45
47
  items: payload.items,
46
48
  user_id: payload.user_id ?? undefined,
47
49
  user_properties: payload.user_properties,
50
+ send_to: payload.send_to == true ? settings.measurementID : 'default',
48
51
  ...payload.params
49
52
  })
50
53
  }
@@ -127,4 +127,8 @@ export interface Payload {
127
127
  params?: {
128
128
  [k: string]: unknown
129
129
  }
130
+ /**
131
+ * If the send_to parameter is not set, events are routed to all Tag Ids (AW-xxx, G-xxx) set via Google Tag
132
+ */
133
+ send_to?: boolean
130
134
  }
@@ -13,7 +13,8 @@ import {
13
13
  items_multi_products,
14
14
  params,
15
15
  user_properties,
16
- tax
16
+ tax,
17
+ send_to
17
18
  } from '../ga4-properties'
18
19
 
19
20
  const action: BrowserActionDefinition<Settings, Function, Payload> = {
@@ -34,9 +35,10 @@ const action: BrowserActionDefinition<Settings, Function, Payload> = {
34
35
  ...items_multi_products
35
36
  },
36
37
  user_properties: user_properties,
37
- params: params
38
+ params: params,
39
+ send_to: send_to
38
40
  },
39
- perform: (gtag, { payload }) => {
41
+ perform: (gtag, { payload, settings }) => {
40
42
  gtag('event', 'refund', {
41
43
  currency: payload.currency,
42
44
  transaction_id: payload.transaction_id, // Transaction ID. Required for purchases and refunds.
@@ -48,6 +50,7 @@ const action: BrowserActionDefinition<Settings, Function, Payload> = {
48
50
  items: payload.items,
49
51
  user_id: payload.user_id ?? undefined,
50
52
  user_properties: payload.user_properties,
53
+ send_to: payload.send_to == true ? settings.measurementID : 'default',
51
54
  ...payload.params
52
55
  })
53
56
  }
@@ -107,4 +107,8 @@ export interface Payload {
107
107
  params?: {
108
108
  [k: string]: unknown
109
109
  }
110
+ /**
111
+ * If the send_to parameter is not set, events are routed to all Tag Ids (AW-xxx, G-xxx) set via Google Tag
112
+ */
113
+ send_to?: boolean
110
114
  }