@salesforcedevs/dx-components 1.3.77 → 1.3.79
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/lwc.config.json +1 -0
- package/package.json +2 -2
- package/src/modules/dx/searchResults/searchResults.css +6 -0
- package/src/modules/dx/searchResults/searchResults.ts +13 -0
- package/src/modules/dx/typeBadge/typeBadge.css +1 -32
- package/src/modules/dx/typeBadge/typeBadge.ts +17 -75
- package/src/modules/dxConstants/contentTypes/contentTypes.ts +50 -0
- package/src/modules/dxHelpers/typeBadge/typeBadge.css +31 -0
- package/src/modules/dxUtils/contentTypes/contentTypes.ts +30 -0
- package/src/modules/dxUtils/queryCoordinator/queryCoordinator.ts +1 -1
package/lwc.config.json
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@salesforcedevs/dx-components",
|
|
3
|
-
"version": "1.3.
|
|
3
|
+
"version": "1.3.79",
|
|
4
4
|
"description": "DX Lightning web components",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"engines": {
|
|
@@ -40,5 +40,5 @@
|
|
|
40
40
|
"eventsourcemock": "^2.0.0",
|
|
41
41
|
"luxon": "^3.1.0"
|
|
42
42
|
},
|
|
43
|
-
"gitHead": "
|
|
43
|
+
"gitHead": "c45d48e7eeda7e73ca8762e152b70939809ac03f"
|
|
44
44
|
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
@import "dxHelpers/reset";
|
|
2
|
+
@import "dxHelpers/typeBadge";
|
|
2
3
|
@import "./coveo.css";
|
|
3
4
|
|
|
4
5
|
/* stylelint-disable selector-class-pattern */
|
|
@@ -385,3 +386,8 @@ a.CoveoResultLink,
|
|
|
385
386
|
margin: 0 auto;
|
|
386
387
|
width: fit-content;
|
|
387
388
|
}
|
|
389
|
+
|
|
390
|
+
.dx-badge {
|
|
391
|
+
display: block;
|
|
392
|
+
margin-bottom: var(--dx-g-spacing-smd);
|
|
393
|
+
}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { LightningElement, api, track } from "lwc";
|
|
2
2
|
import type * as CoveoSDK from "coveo-search-ui";
|
|
3
3
|
import { track as trackGTM } from "dxUtils/analytics";
|
|
4
|
+
import { CONTENT_TYPE_LABELS } from "dxConstants/contentTypes";
|
|
5
|
+
import { getContentTypeColorVariables } from "dxUtils/contentTypes";
|
|
4
6
|
|
|
5
7
|
interface CoveoSearch {
|
|
6
8
|
state: typeof CoveoSDK.state;
|
|
@@ -40,6 +42,7 @@ const resultsTemplatesInnerHtml = `
|
|
|
40
42
|
data-field-publicurl=""
|
|
41
43
|
>
|
|
42
44
|
<div class="dx-result">
|
|
45
|
+
<span class="CoveoFieldValue" data-field="@content_type" data-helper="badge" data-html-value="true"></span>
|
|
43
46
|
<p class="dx-result-title">
|
|
44
47
|
<a
|
|
45
48
|
class="CoveoResultLink"
|
|
@@ -55,6 +58,7 @@ const resultsTemplatesInnerHtml = `
|
|
|
55
58
|
type="text/html"
|
|
56
59
|
>
|
|
57
60
|
<div class="dx-result">
|
|
61
|
+
<span class="CoveoFieldValue" data-field="@content_type" data-helper="badge" data-html-value="true"></span>
|
|
58
62
|
<p class="dx-result-title">
|
|
59
63
|
<a class="CoveoResultLink"></a>
|
|
60
64
|
</p>
|
|
@@ -173,6 +177,15 @@ export default class SearchResults extends LightningElement {
|
|
|
173
177
|
|
|
174
178
|
this.attachListeners(this.root);
|
|
175
179
|
|
|
180
|
+
Coveo.TemplateHelpers.registerTemplateHelper(
|
|
181
|
+
"badge",
|
|
182
|
+
(value: string) => {
|
|
183
|
+
const style = getContentTypeColorVariables(value);
|
|
184
|
+
const label = CONTENT_TYPE_LABELS[value];
|
|
185
|
+
return `<div style="${style}" class="dx-badge"><span>${label}</span></div>`;
|
|
186
|
+
}
|
|
187
|
+
);
|
|
188
|
+
|
|
176
189
|
Coveo.init(this.root);
|
|
177
190
|
}
|
|
178
191
|
|
|
@@ -1,33 +1,2 @@
|
|
|
1
1
|
@import "dxHelpers/reset";
|
|
2
|
-
|
|
3
|
-
.badge {
|
|
4
|
-
--background: var(--sds-g-gray-3);
|
|
5
|
-
--border-radius: var(--dx-g-spacing-smd);
|
|
6
|
-
--color: var(--sds-g-gray-10);
|
|
7
|
-
--height: var(--dx-g-spacing-lg);
|
|
8
|
-
--horizontal-spacing: var(--dx-g-spacing-smd);
|
|
9
|
-
--vertical-spacing: var(--dx-g-spacing-xs);
|
|
10
|
-
|
|
11
|
-
color: var(--dx-c-type-badge-color, var(--color));
|
|
12
|
-
background: var(--dx-c-type-badge-background, var(--background));
|
|
13
|
-
border-radius: var(--border-radius);
|
|
14
|
-
display: flex;
|
|
15
|
-
align-items: center;
|
|
16
|
-
justify-content: center;
|
|
17
|
-
height: var(--height);
|
|
18
|
-
width: min-content;
|
|
19
|
-
text-align: center;
|
|
20
|
-
white-space: nowrap;
|
|
21
|
-
font-family: var(--dx-g-font-sans);
|
|
22
|
-
font-size: 10px;
|
|
23
|
-
font-weight: var(--dx-g-font-bold);
|
|
24
|
-
padding: var(--vertical-spacing) var(--horizontal-spacing);
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
.badge.size-small {
|
|
28
|
-
--height: var(--dx-g-spacing-mlg);
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
dx-icon {
|
|
32
|
-
margin-right: var(--dx-g-spacing-sm);
|
|
33
|
-
}
|
|
2
|
+
@import "dxHelpers/typeBadge";
|
|
@@ -5,65 +5,20 @@ import {
|
|
|
5
5
|
Color,
|
|
6
6
|
ContentType,
|
|
7
7
|
IconSprite,
|
|
8
|
+
IconData,
|
|
8
9
|
IconSymbol,
|
|
9
10
|
TypeBadgeSize
|
|
10
11
|
} from "typings/custom";
|
|
11
12
|
import { colorToDxColors, buildStyleColorVariables } from "dxUtils/css";
|
|
12
|
-
import {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
event: "Event",
|
|
22
|
-
website: "Website",
|
|
23
|
-
podcast: "Podcast"
|
|
24
|
-
};
|
|
25
|
-
|
|
26
|
-
type IconData = {
|
|
27
|
-
iconSymbol: IconSymbol;
|
|
28
|
-
iconSprite: IconSprite;
|
|
29
|
-
};
|
|
30
|
-
|
|
31
|
-
const contentTypeIcons: {
|
|
32
|
-
[K in ContentType]: IconData;
|
|
33
|
-
} = {
|
|
34
|
-
documentation: {
|
|
35
|
-
iconSprite: "utility",
|
|
36
|
-
iconSymbol: "knowledge_base"
|
|
37
|
-
},
|
|
38
|
-
trailhead: {
|
|
39
|
-
iconSprite: "salesforcebrand",
|
|
40
|
-
iconSymbol: "learning"
|
|
41
|
-
},
|
|
42
|
-
blog: {
|
|
43
|
-
iconSprite: "utility",
|
|
44
|
-
iconSymbol: "comments"
|
|
45
|
-
},
|
|
46
|
-
forum: {
|
|
47
|
-
iconSprite: "general",
|
|
48
|
-
iconSymbol: "question-circle"
|
|
49
|
-
},
|
|
50
|
-
api: {
|
|
51
|
-
iconSprite: "utility",
|
|
52
|
-
iconSymbol: "settings"
|
|
53
|
-
},
|
|
54
|
-
event: {
|
|
55
|
-
iconSprite: "utility",
|
|
56
|
-
iconSymbol: "event"
|
|
57
|
-
},
|
|
58
|
-
website: {
|
|
59
|
-
iconSprite: "utility",
|
|
60
|
-
iconSymbol: "home"
|
|
61
|
-
},
|
|
62
|
-
podcast: {
|
|
63
|
-
iconSprite: "utility",
|
|
64
|
-
iconSymbol: "unmuted"
|
|
65
|
-
}
|
|
66
|
-
};
|
|
13
|
+
import {
|
|
14
|
+
isContentType,
|
|
15
|
+
getContentTypeColorScope,
|
|
16
|
+
getContentTypeColorVariables
|
|
17
|
+
} from "dxUtils/contentTypes";
|
|
18
|
+
import {
|
|
19
|
+
CONTENT_TYPE_LABELS,
|
|
20
|
+
CONTENT_TYPE_ICONS
|
|
21
|
+
} from "dxConstants/contentTypes";
|
|
67
22
|
|
|
68
23
|
export default class TypeBadge extends LightningElement {
|
|
69
24
|
@api size: TypeBadgeSize = "default";
|
|
@@ -111,39 +66,29 @@ export default class TypeBadge extends LightningElement {
|
|
|
111
66
|
private _iconSymbol?: IconSymbol;
|
|
112
67
|
|
|
113
68
|
private get variantIconData(): IconData | null {
|
|
114
|
-
if (this.variant && this.variant in
|
|
115
|
-
return
|
|
69
|
+
if (this.variant && this.variant in CONTENT_TYPE_ICONS) {
|
|
70
|
+
return CONTENT_TYPE_ICONS[this.variant as ContentType];
|
|
116
71
|
}
|
|
117
72
|
return null;
|
|
118
73
|
}
|
|
119
74
|
|
|
120
75
|
private get variantLabel(): string | null {
|
|
121
76
|
if (this.isContentType) {
|
|
122
|
-
return
|
|
77
|
+
return CONTENT_TYPE_LABELS[this.variant as ContentType];
|
|
123
78
|
}
|
|
124
79
|
return null;
|
|
125
80
|
}
|
|
126
81
|
|
|
127
82
|
private get variantColorScope(): string | null {
|
|
128
|
-
|
|
129
|
-
return "content-type";
|
|
130
|
-
}
|
|
131
|
-
if (this.isBrand) {
|
|
132
|
-
return "brand";
|
|
133
|
-
}
|
|
134
|
-
return null;
|
|
83
|
+
return getContentTypeColorScope(this.variant);
|
|
135
84
|
}
|
|
136
85
|
|
|
137
86
|
private get isContentType(): boolean {
|
|
138
|
-
return
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
private get isBrand(): boolean {
|
|
142
|
-
return BRANDS.includes(this.variant as ContentType);
|
|
87
|
+
return isContentType(this.variant);
|
|
143
88
|
}
|
|
144
89
|
|
|
145
90
|
private get className(): string {
|
|
146
|
-
return cx("badge", `size-${this.size}`);
|
|
91
|
+
return cx("dx-badge", `size-${this.size}`);
|
|
147
92
|
}
|
|
148
93
|
|
|
149
94
|
private get style(): string {
|
|
@@ -154,10 +99,7 @@ export default class TypeBadge extends LightningElement {
|
|
|
154
99
|
});
|
|
155
100
|
}
|
|
156
101
|
if (this.variantColorScope) {
|
|
157
|
-
return
|
|
158
|
-
background: `--dx-g-${this.variantColorScope}-${this.variant}-color-background`,
|
|
159
|
-
color: `--dx-g-${this.variantColorScope}-${this.variant}-color`
|
|
160
|
-
});
|
|
102
|
+
return getContentTypeColorVariables(this.variant);
|
|
161
103
|
}
|
|
162
104
|
if (this.color) {
|
|
163
105
|
const variables = colorToDxColors(this.color as Color);
|
|
@@ -1,3 +1,53 @@
|
|
|
1
|
+
import { ContentType, IconData } from "typings/custom";
|
|
2
|
+
|
|
3
|
+
export const CONTENT_TYPE_LABELS = {
|
|
4
|
+
documentation: "Documentation",
|
|
5
|
+
trailhead: "Trailhead",
|
|
6
|
+
blog: "Blog",
|
|
7
|
+
forum: "Forum",
|
|
8
|
+
api: "API",
|
|
9
|
+
event: "Event",
|
|
10
|
+
website: "Website",
|
|
11
|
+
podcast: "Podcast"
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
export const CONTENT_TYPE_ICONS: {
|
|
15
|
+
[K in ContentType]: IconData;
|
|
16
|
+
} = {
|
|
17
|
+
documentation: {
|
|
18
|
+
iconSprite: "utility",
|
|
19
|
+
iconSymbol: "knowledge_base"
|
|
20
|
+
},
|
|
21
|
+
trailhead: {
|
|
22
|
+
iconSprite: "salesforcebrand",
|
|
23
|
+
iconSymbol: "learning"
|
|
24
|
+
},
|
|
25
|
+
blog: {
|
|
26
|
+
iconSprite: "utility",
|
|
27
|
+
iconSymbol: "comments"
|
|
28
|
+
},
|
|
29
|
+
forum: {
|
|
30
|
+
iconSprite: "general",
|
|
31
|
+
iconSymbol: "question-circle"
|
|
32
|
+
},
|
|
33
|
+
api: {
|
|
34
|
+
iconSprite: "utility",
|
|
35
|
+
iconSymbol: "settings"
|
|
36
|
+
},
|
|
37
|
+
event: {
|
|
38
|
+
iconSprite: "utility",
|
|
39
|
+
iconSymbol: "event"
|
|
40
|
+
},
|
|
41
|
+
website: {
|
|
42
|
+
iconSprite: "utility",
|
|
43
|
+
iconSymbol: "home"
|
|
44
|
+
},
|
|
45
|
+
podcast: {
|
|
46
|
+
iconSprite: "utility",
|
|
47
|
+
iconSymbol: "unmuted"
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
|
|
1
51
|
export const CONTENT_TYPES = [
|
|
2
52
|
"documentation",
|
|
3
53
|
"trailhead",
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
.dx-badge {
|
|
2
|
+
--background: var(--sds-g-gray-3);
|
|
3
|
+
--border-radius: var(--dx-g-spacing-smd);
|
|
4
|
+
--color: var(--sds-g-gray-10);
|
|
5
|
+
--height: var(--dx-g-spacing-lg);
|
|
6
|
+
--horizontal-spacing: var(--dx-g-spacing-smd);
|
|
7
|
+
--vertical-spacing: var(--dx-g-spacing-xs);
|
|
8
|
+
|
|
9
|
+
color: var(--dx-c-type-badge-color, var(--color));
|
|
10
|
+
background: var(--dx-c-type-badge-background, var(--background));
|
|
11
|
+
border-radius: var(--border-radius);
|
|
12
|
+
display: flex;
|
|
13
|
+
align-items: center;
|
|
14
|
+
justify-content: center;
|
|
15
|
+
height: var(--height);
|
|
16
|
+
width: min-content;
|
|
17
|
+
text-align: center;
|
|
18
|
+
white-space: nowrap;
|
|
19
|
+
font-family: var(--dx-g-font-sans);
|
|
20
|
+
font-size: 10px;
|
|
21
|
+
font-weight: var(--dx-g-font-bold);
|
|
22
|
+
padding: var(--vertical-spacing) var(--horizontal-spacing);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
.dx-badge.size-small {
|
|
26
|
+
--height: var(--dx-g-spacing-mlg);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
dx-icon {
|
|
30
|
+
margin-right: var(--dx-g-spacing-sm);
|
|
31
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { CONTENT_TYPES } from "dxConstants/contentTypes";
|
|
2
|
+
import { BRANDS } from "dxConstants/brands";
|
|
3
|
+
import { ContentType } from "typings/custom";
|
|
4
|
+
import { buildStyleColorVariables } from "dxUtils/css";
|
|
5
|
+
|
|
6
|
+
export const isBrand = (id: string): boolean => {
|
|
7
|
+
return BRANDS.includes(id as ContentType);
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
export const isContentType = (id: string): boolean => {
|
|
11
|
+
return CONTENT_TYPES.includes(id as ContentType);
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
export const getContentTypeColorScope = (id: string): string | null => {
|
|
15
|
+
if (isContentType(id)) {
|
|
16
|
+
return "content-type";
|
|
17
|
+
}
|
|
18
|
+
if (isBrand(id)) {
|
|
19
|
+
return "brand";
|
|
20
|
+
}
|
|
21
|
+
return null;
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
export const getContentTypeColorVariables = (id: string): string => {
|
|
25
|
+
const scope = getContentTypeColorScope(id);
|
|
26
|
+
return buildStyleColorVariables({
|
|
27
|
+
background: `--dx-g-${scope}-${id}-color-background`,
|
|
28
|
+
color: `--dx-g-${scope}-${id}-color`
|
|
29
|
+
});
|
|
30
|
+
};
|
|
@@ -25,7 +25,7 @@ export function setUrlParamValue(options: { [key: string]: string[] }) {
|
|
|
25
25
|
|
|
26
26
|
for (const [key, value] of Object.entries(options)) {
|
|
27
27
|
if (value?.length) {
|
|
28
|
-
newParams[kebabCase(key)] = value.map((v) =>
|
|
28
|
+
newParams[kebabCase(key)] = value.map((v) => v);
|
|
29
29
|
} else {
|
|
30
30
|
delete urlParams[kebabCase(key)];
|
|
31
31
|
}
|