@salesforcedevs/dw-components 1.3.363 → 1.3.377
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,10 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@salesforcedevs/dw-components",
|
|
3
|
-
"version": "1.3.
|
|
3
|
+
"version": "1.3.377",
|
|
4
4
|
"description": "Lightning web components for https://developer.salesforce.com",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"engines": {
|
|
7
|
-
"node": "
|
|
7
|
+
"node": "18.18.0"
|
|
8
8
|
},
|
|
9
9
|
"publishConfig": {
|
|
10
10
|
"access": "public"
|
|
@@ -26,5 +26,5 @@
|
|
|
26
26
|
"@types/setimmediate": "1.0.4",
|
|
27
27
|
"setimmediate": "1.0.5"
|
|
28
28
|
},
|
|
29
|
-
"gitHead": "
|
|
29
|
+
"gitHead": "e9a71ae9df89246f57650e112b3feb1894baa986"
|
|
30
30
|
}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
.language-selector {
|
|
2
|
+
height: 42px;
|
|
3
|
+
border-radius: 4px;
|
|
4
|
+
border: 1px solid var(--dx-g-language-picker-font-color);
|
|
5
|
+
padding-left: 16px;
|
|
6
|
+
padding-right: 16px;
|
|
7
|
+
background-color: var(--dx-g-language-picker-background-color);
|
|
8
|
+
display: flex;
|
|
9
|
+
justify-content: space-between;
|
|
10
|
+
align-items: center;
|
|
11
|
+
cursor: pointer;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
.language-selector > span {
|
|
15
|
+
font-size: 16px;
|
|
16
|
+
line-height: 24px;
|
|
17
|
+
font-weight: 400;
|
|
18
|
+
color: var(--dx-g-language-picker-font-color);
|
|
19
|
+
user-select: none;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
dx-icon {
|
|
23
|
+
--dx-c-icon-color: var(--dx-g-language-picker-font-color);
|
|
24
|
+
|
|
25
|
+
pointer-events: none;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
.dropdown-options {
|
|
29
|
+
color: var(--dx-g-language-picker-font-color);
|
|
30
|
+
display: flex;
|
|
31
|
+
flex-direction: column;
|
|
32
|
+
height: 140px;
|
|
33
|
+
justify-content: space-between;
|
|
34
|
+
border-radius: 6px;
|
|
35
|
+
border: 1px solid var(--dx-g-language-picker-font-color);
|
|
36
|
+
background-color: var(--dx-g-language-picker-background-color);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
.dropdown-options > div:first-child {
|
|
40
|
+
padding-top: 16px;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
.dropdown-options > div {
|
|
44
|
+
padding-left: 16px;
|
|
45
|
+
height: 41px;
|
|
46
|
+
padding-top: 8px;
|
|
47
|
+
padding-bottom: 8px;
|
|
48
|
+
font-size: 16px;
|
|
49
|
+
line-height: 24px;
|
|
50
|
+
font-weight: 400;
|
|
51
|
+
user-select: none;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
.option {
|
|
55
|
+
color: var(--dx-g-language-picker-option-color);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
.option:not(.selected) {
|
|
59
|
+
padding-left: 40px;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
.option:not(.selected):hover {
|
|
63
|
+
background-color: var(--dx-g-language-picker-option-hover-color);
|
|
64
|
+
cursor: pointer;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
.selected {
|
|
68
|
+
font-weight: 700;
|
|
69
|
+
display: flex;
|
|
70
|
+
padding-left: 16px;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
.selected dx-icon {
|
|
74
|
+
--dx-c-icon-color: var(--dx-g-language-picker-checkmark-color);
|
|
75
|
+
|
|
76
|
+
padding-top: 5px;
|
|
77
|
+
padding-right: 5px;
|
|
78
|
+
}
|
|
@@ -1,11 +1,36 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<dx-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
2
|
+
<dx-popover lwc:if={visible} width="140px">
|
|
3
|
+
<div class="language-selector" slot="control">
|
|
4
|
+
<span>{selectedLanguage}</span>
|
|
5
|
+
<dx-icon
|
|
6
|
+
sprite="general"
|
|
7
|
+
symbol="chevron-down"
|
|
8
|
+
size="medium"
|
|
9
|
+
></dx-icon>
|
|
10
|
+
</div>
|
|
11
|
+
<div class="dropdown-options" slot="content">
|
|
12
|
+
<div>{placeholder}</div>
|
|
13
|
+
<template for:each={languages} for:item="option">
|
|
14
|
+
<template lwc:if={option.isSelected}>
|
|
15
|
+
<div class="option selected" key={option.value}>
|
|
16
|
+
<dx-icon
|
|
17
|
+
sprite="action"
|
|
18
|
+
symbol="approval"
|
|
19
|
+
size="medium"
|
|
20
|
+
></dx-icon>
|
|
21
|
+
<span>{option.label}</span>
|
|
22
|
+
</div>
|
|
23
|
+
</template>
|
|
24
|
+
<template lwc:else>
|
|
25
|
+
<div
|
|
26
|
+
class="option"
|
|
27
|
+
key={option.value}
|
|
28
|
+
onclick={handleLanguageChange}
|
|
29
|
+
>
|
|
30
|
+
{option.label}
|
|
31
|
+
</div>
|
|
32
|
+
</template>
|
|
33
|
+
</template>
|
|
34
|
+
</div>
|
|
35
|
+
</dx-popover>
|
|
11
36
|
</template>
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { track as trackClick } from "dxUtils/analytics";
|
|
2
2
|
import { api, LightningElement, track } from "lwc";
|
|
3
|
-
import {
|
|
3
|
+
import { Option } from "typings/custom";
|
|
4
4
|
|
|
5
5
|
const ANALYTICS_INFO = {
|
|
6
6
|
element_title: "Select Language",
|
|
@@ -11,21 +11,28 @@ const language_local_names_map: any = {
|
|
|
11
11
|
japanese: "日本語",
|
|
12
12
|
english: "English"
|
|
13
13
|
};
|
|
14
|
+
const DEFAULT = language_local_names_map.english;
|
|
14
15
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
16
|
+
interface ACF {
|
|
17
|
+
language: string;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
interface Post {
|
|
21
|
+
acf: ACF;
|
|
22
|
+
link?: string;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
const normalizePostLink = (post: Post) => {
|
|
19
26
|
switch (post.acf.language) {
|
|
20
27
|
case "japanese":
|
|
21
|
-
return post.link
|
|
28
|
+
return post.link?.replace("/blogs/", "/jpblogs/");
|
|
22
29
|
default:
|
|
23
30
|
return post.link;
|
|
24
31
|
}
|
|
25
32
|
};
|
|
26
33
|
|
|
27
34
|
export default class LanguageSelector extends LightningElement {
|
|
28
|
-
@track languages
|
|
35
|
+
@track languages: Option[] = [];
|
|
29
36
|
selectedLanguage?: string;
|
|
30
37
|
loading = true;
|
|
31
38
|
@api postAcf!: string;
|
|
@@ -35,6 +42,7 @@ export default class LanguageSelector extends LightningElement {
|
|
|
35
42
|
|
|
36
43
|
generateTranslationOptions = async () => {
|
|
37
44
|
const acf = JSON.parse(this.postAcf);
|
|
45
|
+
this.selectedLanguage = this.getLanguageOrDefaultIfInvalid({ acf });
|
|
38
46
|
|
|
39
47
|
try {
|
|
40
48
|
const canonicalId = acf?.canonicalid;
|
|
@@ -47,25 +55,18 @@ export default class LanguageSelector extends LightningElement {
|
|
|
47
55
|
)
|
|
48
56
|
).json();
|
|
49
57
|
|
|
50
|
-
Object.values(alternatePosts).forEach(
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
this._languageMap[localLanguageName] =
|
|
56
|
-
normalizePostLink(post);
|
|
57
|
-
}
|
|
58
|
-
);
|
|
58
|
+
Object.values(alternatePosts).forEach((post: Post) => {
|
|
59
|
+
const localLanguageName =
|
|
60
|
+
this.getLanguageOrDefaultIfInvalid(post);
|
|
61
|
+
this._languageMap[localLanguageName] = normalizePostLink(post);
|
|
62
|
+
});
|
|
59
63
|
|
|
60
64
|
this.languages = Object.values(alternatePosts).map((post) => {
|
|
65
|
+
const language = this.getLanguageOrDefaultIfInvalid(post);
|
|
61
66
|
return {
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
label:
|
|
66
|
-
language_local_names_map[post.acf.language] ||
|
|
67
|
-
language_local_names_map.english,
|
|
68
|
-
disabled: false
|
|
67
|
+
id: language,
|
|
68
|
+
label: language,
|
|
69
|
+
isSelected: language === this.selectedLanguage
|
|
69
70
|
};
|
|
70
71
|
});
|
|
71
72
|
} catch (e) {
|
|
@@ -73,12 +74,12 @@ export default class LanguageSelector extends LightningElement {
|
|
|
73
74
|
} finally {
|
|
74
75
|
this.loading = false;
|
|
75
76
|
}
|
|
76
|
-
|
|
77
|
-
this.selectedLanguage =
|
|
78
|
-
language_local_names_map[acf?.language] ||
|
|
79
|
-
language_local_names_map.english;
|
|
80
77
|
};
|
|
81
78
|
|
|
79
|
+
private getLanguageOrDefaultIfInvalid(post: Post) {
|
|
80
|
+
return language_local_names_map[post.acf.language] || DEFAULT;
|
|
81
|
+
}
|
|
82
|
+
|
|
82
83
|
connectedCallback() {
|
|
83
84
|
this.generateTranslationOptions();
|
|
84
85
|
}
|
|
@@ -87,8 +88,14 @@ export default class LanguageSelector extends LightningElement {
|
|
|
87
88
|
return !this.loading && !this.noTranslationsAvailable;
|
|
88
89
|
}
|
|
89
90
|
|
|
90
|
-
|
|
91
|
-
|
|
91
|
+
get placeholder() {
|
|
92
|
+
return this.selectedLanguage === language_local_names_map.english
|
|
93
|
+
? "Language"
|
|
94
|
+
: "言語";
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
handleLanguageChange(evt: Event): void {
|
|
98
|
+
const selectedLanguage = evt.target.innerHTML;
|
|
92
99
|
const url = this._languageMap[selectedLanguage];
|
|
93
100
|
trackClick(this.template.activeElement!, "custEv_ctaButtonClick", {
|
|
94
101
|
...ANALYTICS_INFO,
|