@salesforcedevs/dx-components 0.53.10 → 0.53.11-alpha

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 (45) hide show
  1. package/lwc.config.json +15 -17
  2. package/package.json +3 -6
  3. package/src/modules/base-elements/headerBase/headerBase.ts +1 -1
  4. package/src/modules/dx/cardCallout/cardCallout.ts +4 -4
  5. package/src/modules/dx/cardNews/cardNews.ts +1 -1
  6. package/src/modules/dx/codeBlock/codeBlock.ts +1 -1
  7. package/src/modules/dx/dropdownOption/dropdownOption.ts +1 -1
  8. package/src/modules/dx/footer/footer.ts +1 -1
  9. package/src/modules/dx/footerOption/footerOption.ts +1 -1
  10. package/src/modules/dx/groupText/groupText.ts +1 -1
  11. package/src/modules/dx/headerMobileNavMenuOption/headerMobileNavMenuOption.ts +1 -1
  12. package/src/modules/dx/pagination/pagination.ts +1 -1
  13. package/src/modules/dx/sidebar/sidebar.ts +1 -1
  14. package/src/modules/dx/sidebarOld/sidebarOld.ts +1 -1
  15. package/src/modules/dx/tab/tab.ts +1 -1
  16. package/src/modules/dx/treeItem/treeItem.ts +1 -1
  17. package/src/modules/utils/analytics/analytics.ts +24 -0
  18. package/LICENSE +0 -12
  19. package/src/modules/dx/cardBlogPostProvider/cardBlogPostProvider.css +0 -3
  20. package/src/modules/dx/cardBlogPostProvider/cardBlogPostProvider.html +0 -16
  21. package/src/modules/dx/cardBlogPostProvider/cardBlogPostProvider.ts +0 -29
  22. package/src/modules/dx/cardPodcastEpisodeProvider/cardPodcastEpisodeProvider.css +0 -3
  23. package/src/modules/dx/cardPodcastEpisodeProvider/cardPodcastEpisodeProvider.html +0 -12
  24. package/src/modules/dx/cardPodcastEpisodeProvider/cardPodcastEpisodeProvider.ts +0 -29
  25. package/src/modules/dx/contentArchive/contentArchive.css +0 -242
  26. package/src/modules/dx/contentArchive/contentArchive.html +0 -337
  27. package/src/modules/dx/contentArchive/contentArchive.ts +0 -461
  28. package/src/modules/dx/contentArchive/contentArchive.types.ts +0 -6
  29. package/src/modules/dx/instrumentation/instrumentation.html +0 -1
  30. package/src/modules/dx/instrumentation/instrumentation.ts +0 -116
  31. package/src/modules/dx/newsletterForm/newsletterForm.css +0 -73
  32. package/src/modules/dx/newsletterForm/newsletterForm.html +0 -73
  33. package/src/modules/dx/newsletterForm/newsletterForm.ts +0 -238
  34. package/src/modules/dx/podcastSubscription/podcastSubscription.css +0 -91
  35. package/src/modules/dx/podcastSubscription/podcastSubscription.html +0 -24
  36. package/src/modules/dx/podcastSubscription/podcastSubscription.ts +0 -52
  37. package/src/modules/dx/searchResults/coveo.css +0 -18989
  38. package/src/modules/dx/searchResults/searchResults.css +0 -387
  39. package/src/modules/dx/searchResults/searchResults.html +0 -104
  40. package/src/modules/dx/searchResults/searchResults.ts +0 -186
  41. package/src/modules/dx/slackCta/slackCta.css +0 -47
  42. package/src/modules/dx/slackCta/slackCta.html +0 -17
  43. package/src/modules/dx/slackCta/slackCta.ts +0 -12
  44. package/src/modules/utils/contentArchive/altData.js +0 -3
  45. package/src/modules/utils/contentArchive/contentArchive.ts +0 -163
@@ -1,73 +0,0 @@
1
- <template>
2
- <form
3
- onsubmit={handleSubmit}
4
- onchange={handleChange}
5
- onkeydown={handleKeyDown}
6
- >
7
- <slot name="form-heading">
8
- <h4 class="newsletter-form-heading dx-text-heading-8">
9
- Sign up now to receive the newsletter.
10
- </h4>
11
- </slot>
12
- <dx-input
13
- name="fname"
14
- value={firstName}
15
- placeholder="Your first name"
16
- label="First Name"
17
- onchange={handleChange}
18
- missing-error-message="Enter your first name"
19
- validity-on-blur="true"
20
- required="true"
21
- ></dx-input>
22
- <dx-input
23
- name="lname"
24
- value={lastName}
25
- placeholder="Your last name"
26
- label="Last Name"
27
- onchange={handleChange}
28
- missing-error-message="Enter your last name"
29
- validity-on-blur="true"
30
- required="true"
31
- ></dx-input>
32
- <dx-input
33
- name="email"
34
- type="email"
35
- value={email}
36
- placeholder="Your email address"
37
- label="Email"
38
- onchange={handleChange}
39
- missing-error-message="Enter your email address"
40
- validity-on-blur="true"
41
- required="true"
42
- ></dx-input>
43
- <dx-select
44
- name="country"
45
- class="country-select"
46
- label="Country/Region"
47
- onchange={handleChange}
48
- placeholder="Select your Country/Region"
49
- message-when-value-missing="Select your country/region"
50
- json-options={countries}
51
- value={country}
52
- required="true"
53
- ></dx-select>
54
- <template if:true={checkboxTextSet}>
55
- <template if:true={showMarketingCheckbox}>
56
- <dx-checkbox
57
- class="marketing-checkbox"
58
- value={marketingText}
59
- label={marketingText}
60
- ></dx-checkbox>
61
- </template>
62
- <p class="legal-text" lwc:dom="manual"></p>
63
- <template if:true={showLegalCheckbox}>
64
- <dx-checkbox
65
- class="legal-checkbox"
66
- value={legalText}
67
- required="true"
68
- ></dx-checkbox>
69
- </template>
70
- </template>
71
- <button class="form-submit" type="submit">Subscribe Now</button>
72
- </form>
73
- </template>
@@ -1,238 +0,0 @@
1
- import { LightningElement, api } from "lwc";
2
- import { track } from "dx/instrumentation";
3
- import { CountryOptions, CheckboxTextSet } from "typings/custom";
4
-
5
- const ANALYTICS_INFO = {
6
- itemTitle: "newsletter sign up submit",
7
- formName: "newsletter",
8
- formType: "newsletter",
9
- method: "email",
10
- destinationType: "internal",
11
- clickText: "Subscribe Now",
12
- clickUrl: "/newsletter/success",
13
- elementType: "button",
14
- ctaClick: true
15
- };
16
-
17
- export default class Form extends LightningElement {
18
- @api checkboxTextSet: string = "";
19
- @api countries: string = "";
20
-
21
- private firstName: string = "";
22
- private lastName: string = "";
23
- private email: string = "";
24
- private country: string = "";
25
-
26
- private showLegalText: boolean = false;
27
- private showLegalCheckbox: boolean = false;
28
- private showMarketingCheckbox: boolean = false;
29
- private legalText: string = "";
30
- private marketingText: string | null = null;
31
- private hasRendered: boolean = false;
32
-
33
- renderedCallback() {
34
- if (!this.hasRendered) {
35
- // Focus the first input in the form
36
- this.template.querySelector("dx-input")?.focus();
37
-
38
- this.setInitialEmail();
39
- this.hasRendered = true;
40
- } else if (this.hasRendered && this.showLegalCheckbox) {
41
- // Grab the legal checkbox and append the legal text as innerHTML (text has anchor links in it)
42
- const legalCheckboxElement = this.template.querySelector(
43
- "dx-checkbox.legal-checkbox"
44
- );
45
- const legalCheckboxSpan = document.createElement("span");
46
- this.setInnerHtml(legalCheckboxSpan, this.legalText);
47
-
48
- if (legalCheckboxElement) {
49
- legalCheckboxElement.appendChild(legalCheckboxSpan);
50
- }
51
- }
52
- }
53
-
54
- handleKeyDown(e: KeyboardEvent) {
55
- if (e.key === "Enter") {
56
- this.handleSubmit(e);
57
- }
58
- }
59
-
60
- handleChange(e: any) {
61
- switch (e.target.name) {
62
- case "fname":
63
- this.firstName = e.target.value;
64
- break;
65
- case "lname":
66
- this.lastName = e.target.value;
67
- break;
68
- case "email":
69
- this.email = e.target.value;
70
- break;
71
- case "country":
72
- this.country = e.target.value;
73
- this.handleConsent(e.target);
74
- break;
75
- default:
76
- break;
77
- }
78
- }
79
-
80
- handleSubmit(e: Event) {
81
- e.preventDefault();
82
-
83
- const allFormElements = Array.from(
84
- this.template.querySelectorAll("dx-input, dx-select, dx-checkbox")
85
- );
86
-
87
- const legalCheckboxElement = this.template.querySelector(
88
- "dx-checkbox.legal-checkbox"
89
- );
90
-
91
- if (legalCheckboxElement) {
92
- allFormElements.push(legalCheckboxElement);
93
- }
94
-
95
- const passed = !allFormElements
96
- .map((formElement) => formElement.reportValidity())
97
- .includes(false);
98
-
99
- // All fields passed validation
100
- if (passed) {
101
- this.sendFormData();
102
- }
103
- }
104
-
105
- setInitialEmail() {
106
- // Set email if provided in the query param
107
- const queryString = window.location.search;
108
- const urlParams = new URLSearchParams(queryString);
109
-
110
- const subscriberEmail = urlParams.get("subscriberEmail");
111
-
112
- if (subscriberEmail) {
113
- this.email = subscriberEmail;
114
- }
115
- }
116
-
117
- getFormData() {
118
- const marketingConsented = this.template.querySelector(
119
- "dx-checkbox.marketing-checkbox"
120
- )?.checked;
121
- const date = new Date().toISOString();
122
-
123
- return {
124
- InfoEmail: marketingConsented ? true : false,
125
- "First Name": this.firstName,
126
- "Last Name": this.lastName,
127
- Consent: marketingConsented
128
- ? "Explicit"
129
- : this.showMarketingCheckbox
130
- ? ""
131
- : "Implied",
132
- "Email Status Update": date,
133
- email: this.email,
134
- Country: this.country,
135
- "Privacy Policy": true,
136
- referrer: "footer"
137
- };
138
- }
139
-
140
- async sendFormData() {
141
- const formData = this.getFormData();
142
- const errorMsg = "Error while subscribing to newsletter";
143
- const submitButtonEl = this.template.querySelector(".form-submit");
144
-
145
- submitButtonEl.setAttribute("disabled", "true");
146
- submitButtonEl.textContent = "...Processing request";
147
-
148
- try {
149
- const res = await fetch("/pages/pardot/footer_optin", {
150
- method: "POST",
151
- headers: {
152
- "Content-Type": "application/json"
153
- },
154
- body: JSON.stringify(formData)
155
- });
156
-
157
- if (!res.ok) {
158
- throw new Error(errorMsg);
159
- }
160
-
161
- const data = await res.json();
162
-
163
- if (!data.success) {
164
- throw new Error(errorMsg);
165
- }
166
-
167
- // GTM event
168
- track(submitButtonEl, "custEv_formCompletion", ANALYTICS_INFO);
169
-
170
- window.location.assign("/newsletter/success");
171
- } catch (error) {
172
- submitButtonEl.setAttribute("disabled", "false");
173
- submitButtonEl.textContent = "Subscribe Now";
174
- console.error(error);
175
- }
176
- }
177
-
178
- handleConsent(countrySelectElement: any) {
179
- if (this.checkboxTextSet) {
180
- const countryOptions = countrySelectElement.jsonOptions.find(
181
- (jsonOption) => jsonOption.value === countrySelectElement.value
182
- );
183
-
184
- this.setLegalAndMarketingData(countryOptions);
185
- }
186
- }
187
-
188
- setLegalAndMarketingData(countryOptions: CountryOptions) {
189
- // Parse the text sets for the checkbox info
190
- const parsedCheckboxTextSet = JSON.parse(this.checkboxTextSet);
191
-
192
- // Check for alternate text set or set to default
193
- const checkboxTextSet = countryOptions.checkboxTextSet
194
- ? parsedCheckboxTextSet[countryOptions.checkboxTextSet]
195
- : parsedCheckboxTextSet.default;
196
-
197
- // Set the checkbox text
198
- this.setCheckboxTextSet(checkboxTextSet);
199
-
200
- // Toggle visibility of legal/marketing data
201
- this.toggleLegalAndMarketingVisibility(
202
- countryOptions.showLegalText,
203
- countryOptions.showLegalCheckbox,
204
- countryOptions.showMarketingCheckbox
205
- );
206
-
207
- // Grab the legal text paragraph element and set inner html (this is due to text having html elements in the string)
208
- const legalTextElement = this.template.querySelector(".legal-text");
209
-
210
- if (legalTextElement && this.showLegalText) {
211
- this.setInnerHtml(legalTextElement, this.legalText);
212
- } else if (legalTextElement && !this.showLegalText) {
213
- // Clear legal text
214
- this.setInnerHtml(legalTextElement, "");
215
- }
216
- }
217
-
218
- setCheckboxTextSet(checkboxTextSet: CheckboxTextSet) {
219
- this.legalText = checkboxTextSet.legalText;
220
- this.marketingText = checkboxTextSet.marketingText;
221
- }
222
-
223
- toggleLegalAndMarketingVisibility(
224
- showLegalText: boolean,
225
- showLegalCheckbox: boolean,
226
- showMarketingCheckbox: boolean
227
- ) {
228
- this.showLegalText = showLegalText;
229
- this.showLegalCheckbox = showLegalCheckbox;
230
- this.showMarketingCheckbox = showMarketingCheckbox;
231
- }
232
-
233
- setInnerHtml(element: HTMLElement, value: string) {
234
- // disable lwc warning because text received from json has HTML
235
- // eslint-disable-next-line @lwc/lwc/no-inner-html
236
- element.innerHTML = value;
237
- }
238
- }
@@ -1,91 +0,0 @@
1
- @import "helpers/reset";
2
- @import "helpers/text";
3
-
4
- .container {
5
- background-repeat: no-repeat;
6
- background-position: center;
7
- display: flex;
8
- flex-direction: column;
9
- flex-wrap: wrap;
10
- align-items: center;
11
- justify-content: center;
12
- text-align: center;
13
- }
14
-
15
- @media screen and (max-width: 768px) {
16
- .container {
17
- background-image: url("/assets/svg/podcast-subscription-clouds-small.svg");
18
- background-size: auto 200px;
19
- }
20
-
21
- .dx-text-heading-4 {
22
- max-width: 28ex;
23
- font-size: var(--dx-g-text-lg);
24
- }
25
-
26
- .badges {
27
- margin: 8px auto 6px auto;
28
- text-align: center;
29
- }
30
-
31
- .badges a {
32
- display: inline-block;
33
- margin: 4px auto;
34
- }
35
-
36
- .badges img {
37
- width: 164px;
38
- }
39
-
40
- .secondary-links {
41
- display: none;
42
- }
43
-
44
- .or-wherever {
45
- margin-top: 2px;
46
- }
47
- }
48
-
49
- @media screen and (min-width: 768px) {
50
- .container {
51
- background-image: url("/assets/svg/podcast-subscription-clouds.svg");
52
- min-height: 230px;
53
- }
54
-
55
- .badges {
56
- display: flex;
57
- flex-direction: row;
58
- }
59
-
60
- .badges a {
61
- display: inline-block;
62
- margin: 22px 13px 8px 13px;
63
- }
64
-
65
- .badges img {
66
- height: 40px;
67
- }
68
-
69
- .or-wherever {
70
- display: none;
71
- }
72
-
73
- .secondary-links {
74
- display: flex;
75
- flex-direction: row;
76
- justify-content: space-between;
77
- }
78
-
79
- .secondary-links li {
80
- margin: 9px 6px;
81
- }
82
-
83
- .secondary-links a {
84
- color: var(--dx-g-blue-vibrant-50);
85
- text-decoration: none;
86
- }
87
-
88
- .secondary-links a:hover {
89
- text-decoration: underline;
90
- }
91
- }
@@ -1,24 +0,0 @@
1
- <template>
2
- <div class="container">
3
- <h2 class="dx-text-heading-4">
4
- Tune in to the Salesforce Developers Podcast
5
- </h2>
6
- <ul class="badges">
7
- <template for:each={badgeLinks} for:item="badgeLink">
8
- <li key={badgeLink.href}>
9
- <a href={badgeLink.href}>
10
- <img src={badgeLink.imgSrc} alt={badgeLink.imgAlt} />
11
- </a>
12
- </li>
13
- </template>
14
- </ul>
15
- <p class="or-wherever">Or wherever you listen to podcasts!</p>
16
- <ul class="secondary-links">
17
- <template for:each={secondaryLinks} for:item="secondaryLink">
18
- <li key={secondaryLink.href}>
19
- <a href={secondaryLink.href}>{secondaryLink.text}</a>
20
- </li>
21
- </template>
22
- </ul>
23
- </div>
24
- </template>
@@ -1,52 +0,0 @@
1
- import { LightningElement } from "lwc";
2
-
3
- export default class PodcastSubscription extends LightningElement {
4
- badgeLinks = [
5
- {
6
- href: "https://podcasts.apple.com/us/podcast/salesforce-developer-podcast/id1482325260",
7
- imgAlt: "Listen on Apple Podcasts",
8
- imgSrc: "/assets/svg/podcasts-subscription-apple.svg"
9
- },
10
- {
11
- href: "https://www.google.com/podcasts?feed=aHR0cHM6Ly9zYWxlc2ZvcmNlZGV2cG9kY2FzdC5saWJzeW4uY29tL3Jzcw%3D%3D",
12
- imgAlt: "Listen on Google Podcasts",
13
- imgSrc: "/assets/svg/podcasts-subscription-google.svg"
14
- },
15
- {
16
- imgSrc: "/assets/svg/podcasts-subscription-spotify.svg",
17
- imgAlt: "Listen on Spotify",
18
- href: "https://open.spotify.com/show/75y378cB3FM6RQ8MGUDJ5M"
19
- }
20
- ];
21
-
22
- secondaryLinks = [
23
- {
24
- href: "https://app.stitcher.com/browse/feed/470480/details",
25
- text: "Stitcher"
26
- },
27
- {
28
- href: "https://www.amazon.com/Emerald-City-Productions-Salesforce-Developer/dp/B082PPXMLN/",
29
- text: "Alexa"
30
- },
31
- {
32
- href: "https://www.pandora.com/podcast/salesforce-developer-podcast/PC:34746",
33
- text: "Pandora"
34
- },
35
- {
36
- href: "https://www.iheart.com/podcast/263-salesforce-developer-podca-56252827",
37
- text: "iHeartRadio"
38
- },
39
- {
40
- href: "https://tunein.com/podcasts/Technology-Podcasts/Salesforce-Developer-Podcast-p1255006/",
41
- text: "Tune-in"
42
- },
43
- {
44
- href: "https://player.fm/series/salesforce-developer-podcast",
45
- text: "PlayerFM"
46
- },
47
- {
48
- href: "https://dev.to/salesforce_developers_podcast",
49
- text: "dev.to"
50
- }
51
- ];
52
- }