@4site/engrid-scripts 0.23.5 → 0.23.6

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.
@@ -7,14 +7,18 @@ export declare class DataLayer {
7
7
  private endOfGiftProcessStorageKey;
8
8
  private excludedFields;
9
9
  private hashedFields;
10
- private retainedFields;
10
+ private retainedEmailField;
11
+ private retainedAddressFields;
12
+ private retainedPhoneFields;
11
13
  constructor();
12
14
  static getInstance(): DataLayer;
13
15
  private transformJSON;
14
16
  private onLoad;
17
+ private addRetainedHashesToDataLayer;
15
18
  private onSubmit;
16
19
  private attachEventListeners;
17
20
  private handleFieldValueChange;
21
+ private geRetainedFieldsValue;
18
22
  private hash;
19
23
  private shaHash;
20
24
  private getFieldLabel;
@@ -55,14 +55,16 @@ export class DataLayer {
55
55
  "supporter.billingAddress2",
56
56
  "supporter.billingAddress3",
57
57
  ];
58
- this.retainedFields = [
59
- // Supporter Address, Phone Numbers, and Address
60
- "supporter.emailAddress",
61
- "supporter.phoneNumber2",
58
+ this.retainedEmailField = "supporter.emailAddress";
59
+ this.retainedAddressFields = [
62
60
  "supporter.address1",
63
61
  "supporter.address2",
64
62
  "supporter.address3",
65
63
  ];
64
+ this.retainedPhoneFields = [
65
+ "supporter.phoneNumber2",
66
+ "supporter.phoneNumber",
67
+ ];
66
68
  if (ENGrid.getOption("RememberMe")) {
67
69
  RememberMeEvents.getInstance().onLoad.subscribe((hasData) => {
68
70
  this.logger.log("Remember me - onLoad", hasData);
@@ -120,13 +122,7 @@ export class DataLayer {
120
122
  dataLayerData[`EN_URLPARAM_${key.toUpperCase()}`] =
121
123
  this.transformJSON(value);
122
124
  });
123
- this.retainedFields.forEach((fieldName) => {
124
- const storedValue = localStorage.getItem(`EN_RETAINED_FIELD_${fieldName.toUpperCase()}`);
125
- if (storedValue) {
126
- dataLayerData[`EN_RETAINED_FIELD_${fieldName.toUpperCase()}`] =
127
- storedValue;
128
- }
129
- });
125
+ this.addRetainedHashesToDataLayer(dataLayerData);
130
126
  if (ENGrid.getPageType() === "DONATION") {
131
127
  const recurrFreqEls = document.querySelectorAll('[name="transaction.recurrfreq"]');
132
128
  const recurrValues = [...recurrFreqEls].map((el) => el.value);
@@ -139,6 +135,18 @@ export class DataLayer {
139
135
  }
140
136
  this.attachEventListeners();
141
137
  }
138
+ addRetainedHashesToDataLayer(dataLayerData) {
139
+ if (typeof window === "undefined" || !window.localStorage) {
140
+ return;
141
+ }
142
+ ["EMAIL", "ADDRESS", "PHONE"].forEach((suffix) => {
143
+ const storageKey = `EN_HASH_${suffix}`;
144
+ const storedValue = window.localStorage.getItem(storageKey);
145
+ if (storedValue) {
146
+ dataLayerData[storageKey] = storedValue;
147
+ }
148
+ });
149
+ }
142
150
  onSubmit() {
143
151
  const optIn = document.querySelector(".en__field__item:not(.en__field--question) input[name^='supporter.questions'][type='checkbox']:checked");
144
152
  if (optIn) {
@@ -206,15 +214,39 @@ export class DataLayer {
206
214
  }
207
215
  return;
208
216
  }
209
- if (this.retainedFields.includes(el.name)) {
210
- const sha256value = yield this.shaHash(el.value);
211
- localStorage.setItem(`EN_RETAINED_FIELD_${el.name.toUpperCase()}`, sha256value);
217
+ if (el.name === this.retainedEmailField) {
218
+ const retainedEmailValue = this.geRetainedFieldsValue("email");
219
+ const sha256value = yield this.shaHash(retainedEmailValue);
220
+ localStorage.setItem(`EN_HASH_EMAIL`, sha256value);
212
221
  this.dataLayer.push({
213
- event: "EN_RETAINED_VALUE_UPDATED",
214
- enFieldName: el.name,
222
+ event: "EN_HASH_VALUE_UPDATED",
223
+ enFieldName: "email",
215
224
  enFieldLabel: this.getFieldLabel(el),
216
225
  enFieldValue: sha256value,
217
226
  });
227
+ return;
228
+ }
229
+ else if (this.retainedAddressFields.includes(el.name)) {
230
+ const retainedAddressValue = this.geRetainedFieldsValue("address");
231
+ const sha256value = yield this.shaHash(retainedAddressValue);
232
+ localStorage.setItem(`EN_HASH_ADDRESS`, sha256value);
233
+ this.dataLayer.push({
234
+ event: "EN_HASH_VALUE_UPDATED",
235
+ enFieldName: "address",
236
+ enFieldLabel: "Supporter Address",
237
+ enFieldValue: sha256value,
238
+ });
239
+ }
240
+ else if (this.retainedPhoneFields.includes(el.name)) {
241
+ const retainedPhoneValue = this.geRetainedFieldsValue("phone");
242
+ const sha256value = yield this.shaHash(retainedPhoneValue);
243
+ localStorage.setItem(`EN_HASH_PHONE`, sha256value);
244
+ this.dataLayer.push({
245
+ event: "EN_HASH_VALUE_UPDATED",
246
+ enFieldName: "phone",
247
+ enFieldLabel: "Supporter Phone",
248
+ enFieldValue: sha256value,
249
+ });
218
250
  }
219
251
  this.dataLayer.push({
220
252
  event: "EN_FORM_VALUE_UPDATED",
@@ -224,6 +256,30 @@ export class DataLayer {
224
256
  });
225
257
  });
226
258
  }
259
+ geRetainedFieldsValue(kind) {
260
+ switch (kind) {
261
+ case "email":
262
+ return ENGrid.getFieldValue(this.retainedEmailField);
263
+ case "address":
264
+ return this.retainedAddressFields
265
+ .map((field) => ENGrid.getFieldValue(field))
266
+ .filter((value) => value !== "")
267
+ .join("")
268
+ .toLocaleLowerCase()
269
+ .replace(/\s+/g, "");
270
+ case "phone":
271
+ // Only return the first phone number found - prioritize phoneNumber2 over phoneNumber and remove non-numeric characters
272
+ for (const field of this.retainedPhoneFields) {
273
+ const value = ENGrid.getFieldValue(field);
274
+ if (value !== "") {
275
+ return value.replace(/\D/g, "");
276
+ }
277
+ }
278
+ return "";
279
+ default:
280
+ return "";
281
+ }
282
+ }
227
283
  hash(value) {
228
284
  return btoa(value);
229
285
  }
@@ -231,7 +287,7 @@ export class DataLayer {
231
287
  shaHash(value) {
232
288
  return __awaiter(this, void 0, void 0, function* () {
233
289
  const data = this.encoder.encode(value);
234
- const hashBuffer = yield crypto.subtle.digest('SHA-256', data);
290
+ const hashBuffer = yield crypto.subtle.digest("SHA-256", data);
235
291
  return Array.from(new Uint8Array(hashBuffer))
236
292
  .map((byte) => {
237
293
  const hex = byte.toString(16);
package/dist/version.d.ts CHANGED
@@ -1 +1 @@
1
- export declare const AppVersion = "0.23.5";
1
+ export declare const AppVersion = "0.23.6";
package/dist/version.js CHANGED
@@ -1 +1 @@
1
- export const AppVersion = "0.23.5";
1
+ export const AppVersion = "0.23.6";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@4site/engrid-scripts",
3
- "version": "0.23.5",
3
+ "version": "0.23.6",
4
4
  "description": "Scripts for the ENGRID Project",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
@@ -25,7 +25,7 @@
25
25
  "strongly-typed-events": "^2.0.9"
26
26
  },
27
27
  "homepage": "https://github.com/4site-interactive-studios/engrid#readme",
28
- "gitHead": "166eb2c31cb56ed112802d6bb08cd64dd415dd6a",
28
+ "gitHead": "9089bb5a58a68a07e619c7e9a3d196bf986b3c43",
29
29
  "devDependencies": {
30
30
  "nodemon": "^2.0.20"
31
31
  }