@salesforcedevs/dw-components 1.3.105-alpha.0 → 1.3.119

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@salesforcedevs/dw-components",
3
- "version": "1.3.105-alpha.0",
3
+ "version": "1.3.119",
4
4
  "description": "Lightning web components for https://developer.salesforce.com",
5
5
  "license": "MIT",
6
6
  "engines": {
@@ -24,5 +24,5 @@
24
24
  "@types/setimmediate": "^1.0.2",
25
25
  "setimmediate": "^1.0.5"
26
26
  },
27
- "gitHead": "22cde8b5972d7ef34581c5c10547c8a25da9bfd4"
27
+ "gitHead": "a04d7ab5bb8a1686d1d0784dedb688b7f16b5635"
28
28
  }
@@ -118,7 +118,6 @@ export default class CodeSamplesGrid extends LightningElement {
118
118
  this.selectedProductFilter?.forEach((filter) => {
119
119
  track(document, "custEv_filterAbandoned", {
120
120
  click_text: filter,
121
- click_url: filter,
122
121
  element_title: "CodeSamplesGrid",
123
122
  element_type: "filter abandoned",
124
123
  content_category: "filter"
@@ -25,9 +25,7 @@ span {
25
25
  }
26
26
 
27
27
  dx-checkbox,
28
- .privacy-notice,
29
- span.privacy-terms,
30
- span.marketing-terms {
28
+ .privacy-notice {
31
29
  width: 100%;
32
30
  margin-bottom: var(--dx-g-spacing-lg);
33
31
  }
@@ -52,7 +52,7 @@
52
52
  placeholder="Select Country/Region"
53
53
  required
54
54
  value=""
55
- onchange={handleConsent}
55
+ onchange={handleCountryChange}
56
56
  ></dx-select>
57
57
  <dx-input
58
58
  label="Postal Code"
@@ -80,33 +80,24 @@
80
80
  <dx-checkbox required name="eula" value="accepted">
81
81
  <span lwc:dom="manual" class="legal-terms"></span>
82
82
  </dx-checkbox>
83
-
84
- <template if:false={showMarketingCheckbox}>
83
+ <dx-checkbox
84
+ if:true={showMarketingCheckbox}
85
+ name="opt_in"
86
+ value="False"
87
+ >
85
88
  <span lwc:dom="manual" class="marketing-terms"></span>
86
- </template>
87
- <template if:true={showMarketingCheckbox}>
88
- <dx-checkbox
89
- name="marketingCheckbox"
90
- class="marketing-terms"
91
- value="false"
92
- onchange={handleMarketingCheckbox}
93
- >
94
- <span>{marketingText}</span>
95
- </dx-checkbox>
96
- </template>
97
-
98
- <template if:false={showLegalCheckbox}>
99
- <span lwc:dom="manual" class="legal-checkbox privacy-terms"></span>
100
- </template>
89
+ </dx-checkbox>
101
90
  <dx-checkbox
102
- if:true={showLegalCheckbox}
103
- class="privacy-terms"
104
- value={legalCheckbox}
105
- required="true"
91
+ if:true={showPrivacyCheckbox}
92
+ required
93
+ name="privacy"
94
+ value="privacy_accepted"
106
95
  >
107
- <span lwc:dom="manual" class="legal-checkbox privacy-terms"></span>
96
+ <span lwc:dom="manual" class="privacy-terms"></span>
108
97
  </dx-checkbox>
109
-
98
+ <template if:false={showPrivacyCheckbox}>
99
+ <span lwc:dom="manual" class="privacy-terms privacy-notice"></span>
100
+ </template>
110
101
  <dx-button
111
102
  class="submit-button"
112
103
  disabled={disableSubmit}
@@ -2,7 +2,6 @@ import { LightningElement, api, track } from "lwc";
2
2
  import { toJson } from "dxUtils/normalizers";
3
3
  import { track as trackGtm } from "dxUtils/analytics";
4
4
  import { submitForm, ErrorCode, SignupForm, UserData } from "./submitForm";
5
- import { CountryOptions } from "typings/custom";
6
5
 
7
6
  type SelectOption = { value: string; label: string };
8
7
  type Country = SelectOption & {
@@ -35,21 +34,16 @@ export default class DeSignupForm extends LightningElement {
35
34
  this._roles = toJson(value);
36
35
  }
37
36
 
37
+ @api marketingText: string = "";
38
+ @api privacyText: string = "";
38
39
  @api legalText: string = "";
39
- @api drmDomain: string = "https://drm.my.salesforce-sites.com";
40
40
 
41
41
  private country: Country = null;
42
42
  private disableSubmit = false;
43
43
  private username = "";
44
- private _countries: string = "";
44
+ private updateCheckboxLabels = true;
45
+ private _countries: Array<Country>;
45
46
  private _roles: Array<SelectOption>;
46
- private showMarketingCheckbox: boolean = false;
47
- private marketingCheckbox: boolean = false;
48
- private marketingText: string = "";
49
- private showLegalCheckbox: boolean = false;
50
- private privacyText: string = "";
51
- private hasRendered = false;
52
-
53
47
  @track knownDuplicateUsers = [];
54
48
 
55
49
  get usernameError(): string {
@@ -62,6 +56,10 @@ export default class DeSignupForm extends LightningElement {
62
56
  return !this.knownDuplicateUsers.includes(this.username);
63
57
  }
64
58
 
59
+ get showMarketingCheckbox(): boolean {
60
+ return this.country && this.country.showMarketingCheckbox;
61
+ }
62
+
65
63
  get showPrivacyCheckbox(): boolean {
66
64
  return this.country && !!this.country.privacyOptIn;
67
65
  }
@@ -70,18 +68,22 @@ export default class DeSignupForm extends LightningElement {
70
68
  return this.disableSubmit ? "Beep boop processing" : SIGN_UP_LABEL;
71
69
  }
72
70
 
73
- connectedCallback(): void {
74
- this.getCountryList();
75
- }
76
-
77
71
  renderedCallback(): void {
78
- if (!this.hasRendered) {
79
- this.hasRendered = true;
72
+ if (!this.updateCheckboxLabels) {
80
73
  return;
81
74
  }
82
- this.updateInnerHtml("span.legal-terms", this.legalText);
83
- this.updateInnerHtml("span.marketing-terms", this.marketingText);
84
- this.updateInnerHtml("span.legal-checkbox", this.privacyText);
75
+
76
+ this.updateCheckboxLabels =
77
+ this.updateInnerHtml("span.legal-terms", this.legalText) ||
78
+ this.updateInnerHtml(
79
+ "span.marketing-terms",
80
+ this.marketingText,
81
+ this.showMarketingCheckbox
82
+ ) ||
83
+ this.updateInnerHtml(
84
+ "span.privacy-terms",
85
+ this.country?.privacyText || this.privacyText
86
+ );
85
87
  }
86
88
 
87
89
  handleSubmit(event: Event): void {
@@ -139,6 +141,13 @@ export default class DeSignupForm extends LightningElement {
139
141
  this.username = event.detail;
140
142
  }
141
143
 
144
+ handleCountryChange(event: CustomEvent<{ value: string }>): void {
145
+ this.country = this.countries.find(
146
+ ({ value }) => value === event.detail.value
147
+ );
148
+ this.updateCheckboxLabels = true;
149
+ }
150
+
142
151
  private prepareUserData(): SignupForm | null {
143
152
  const fields = Array.from(
144
153
  this.template.querySelectorAll<HTMLFormElement>(
@@ -150,7 +159,9 @@ export default class DeSignupForm extends LightningElement {
150
159
  value: element.value
151
160
  }));
152
161
 
153
- if (fields.some((field) => !field.valid)) {
162
+ const checkboxes = this.getCheckboxesResult();
163
+
164
+ if (fields.some((field) => !field.valid) || !checkboxes.valid) {
154
165
  return null;
155
166
  }
156
167
 
@@ -159,15 +170,17 @@ export default class DeSignupForm extends LightningElement {
159
170
  userData[field.name] = field.value;
160
171
  });
161
172
 
162
- (userData as UserData).consent = this.showMarketingCheckbox
173
+ (userData as UserData).consent = this.country.showMarketingCheckbox
163
174
  ? "Explicit"
164
- : "Implied";
175
+ : "Implied ";
165
176
  const InfoEmail =
166
- this.showMarketingCheckbox && !this.marketingCheckbox
177
+ this.country.showMarketingCheckbox && !checkboxes.values.opt_in
167
178
  ? "False"
168
179
  : "True";
180
+
169
181
  const formData: SignupForm = {
170
182
  user: userData as UserData,
183
+ eula: checkboxes.values.eula,
171
184
  default_driver: DEFAULT_DRIVER,
172
185
  info_email: InfoEmail
173
186
  };
@@ -175,72 +188,24 @@ export default class DeSignupForm extends LightningElement {
175
188
  return formData;
176
189
  }
177
190
 
178
- handleConsent(countrySelectElement: any) {
179
- countrySelectElement = countrySelectElement.target;
180
- const countryOptions = countrySelectElement.options.find(
181
- (option: any) => option.value === countrySelectElement.value
182
- );
183
- this.marketingCheckbox = false;
184
- this.setLegalAndMarketingData(countryOptions);
185
- }
186
-
187
- handleMarketingCheckbox(marketingCheckbox: any) {
188
- this.marketingCheckbox = marketingCheckbox.target.checked;
189
- }
190
-
191
- setLegalAndMarketingData(countryOptions: CountryOptions) {
192
- // Set the checkbox text
193
- this.setCheckboxTextSet(
194
- countryOptions.marketingText,
195
- countryOptions.learnMore
196
- ? `${countryOptions.legalText} </br> ${countryOptions.learnMore}`
197
- : countryOptions.legalText
198
- );
199
-
200
- // Toggle visibility of legal/marketing data
201
- this.toggleLegalAndMarketingVisibility(
202
- countryOptions.showMarketingText,
203
- countryOptions.showLegalCheckbox
204
- );
205
- }
206
-
207
- setCheckboxTextSet(marketingText: string, privacyText: string) {
208
- this.marketingText = marketingText;
209
- this.privacyText = privacyText;
210
- }
211
-
212
- toggleLegalAndMarketingVisibility(
213
- showMarketingCheckbox: boolean,
214
- showLegalCheckbox: boolean
215
- ) {
216
- this.showMarketingCheckbox = showMarketingCheckbox;
217
- this.showLegalCheckbox = showLegalCheckbox;
218
- }
219
-
220
- setInnerHtml(element: HTMLElement, value: string) {
221
- // disable lwc warning because text received from json has HTML
222
- // eslint-disable-next-line @lwc/lwc/no-inner-html
223
- element.innerHTML = value;
224
- }
225
-
226
- async getCountryList() {
227
- const errorMsg = "Error while getting county list";
228
-
229
- try {
230
- const res = await fetch(
231
- `${this.drmDomain}/utilities/services/apexrest/countries`
232
- );
191
+ private getCheckboxesResult(): {
192
+ valid: boolean;
193
+ values: { eula: string; opt_in: "true" | "false" };
194
+ } {
195
+ let valid = true;
196
+ const values: { eula: string; opt_in: "true" | "false" } = {
197
+ eula: "",
198
+ opt_in: "false"
199
+ };
233
200
 
234
- if (!res.ok) {
235
- throw new Error(errorMsg);
236
- }
201
+ Array.from(
202
+ this.template.querySelectorAll<HTMLInputElement>("dx-checkbox")
203
+ ).forEach((checkbox) => {
204
+ valid = valid && checkbox.reportValidity();
205
+ values[checkbox.name] = checkbox.checked;
206
+ });
237
207
 
238
- const data = await res.json();
239
- // eslint-disable-next-line @lwc/lwc/no-api-reassignments
240
- this._countries = JSON.stringify(data);
241
- } catch (error) {
242
- console.error(error);
243
- }
208
+ return { valid, values };
244
209
  }
245
210
 
246
211
  private updateInnerHtml(
@@ -20,6 +20,7 @@ export type UserData = {
20
20
 
21
21
  export type SignupForm = {
22
22
  user: UserData;
23
+ eula: string;
23
24
  default_driver: string;
24
25
  info_email: "True" | "False";
25
26
  };
@@ -548,7 +548,6 @@ export default abstract class DocsGrid extends LightningElement {
548
548
  this.selectedProductFilters?.forEach((filter) => {
549
549
  track(document, "custEv_filterAbandoned", {
550
550
  click_text: filter,
551
- click_url: filter,
552
551
  element_title: "docs grid",
553
552
  element_type: "filter abandoned",
554
553
  content_category: "filter"