@miso.ai/client-sdk-ui 1.10.0-beta.2 → 1.10.0-beta.3
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/dist/cjs/actor/data.js +1 -1
- package/dist/cjs/actor/tracker.js +1 -1
- package/dist/cjs/actor/view.js +1 -1
- package/dist/cjs/affiliation/index.js +99 -0
- package/dist/cjs/combo/ask/options.js +1 -1
- package/dist/cjs/combo/base.js +1 -1
- package/dist/cjs/constants.js +3 -1
- package/dist/cjs/defaults/ask/controls.js +1 -1
- package/dist/cjs/defaults/ask/templates.js +14 -4
- package/dist/cjs/element/role/index.js +7 -0
- package/dist/cjs/element/role/miso-affiliation.js +20 -0
- package/dist/cjs/layout/affiliation/affiliation.js +109 -0
- package/dist/cjs/layout/banner/banner.js +1 -1
- package/dist/cjs/layout/container/container.js +1 -1
- package/dist/cjs/layout/error/error.js +1 -1
- package/dist/cjs/layout/index.js +7 -0
- package/dist/cjs/layout/input/option-list.js +1 -1
- package/dist/cjs/layout/input/search-box.js +1 -1
- package/dist/cjs/layout/list/cards.js +1 -1
- package/dist/cjs/layout/list/carousel.js +1 -1
- package/dist/cjs/layout/list/collection.js +7 -1
- package/dist/cjs/layout/list/list.js +1 -1
- package/dist/cjs/layout/radio/feedback.js +1 -1
- package/dist/cjs/layout/radio/radio.js +1 -1
- package/dist/cjs/layout/raf.js +1 -1
- package/dist/cjs/layout/template.js +1 -1
- package/dist/cjs/layout/templates.js +123 -44
- package/dist/cjs/layout/text/text.js +1 -1
- package/dist/cjs/layout/text/typewriter/index.js +1 -1
- package/dist/cjs/plugin.js +1 -1
- package/dist/cjs/util/tracker.js +1 -1
- package/dist/cjs/version.js +1 -1
- package/dist/cjs/workflow/ask.js +12 -2
- package/dist/cjs/workflow/asks.js +1 -1
- package/dist/cjs/workflow/base.js +1 -1
- package/dist/cjs/workflow/explore.js +1 -1
- package/dist/cjs/workflow/options.js +1 -1
- package/package.json +2 -2
- package/src/affiliation/index.js +83 -0
- package/src/constants.js +3 -0
- package/src/defaults/ask/templates.js +14 -2
- package/src/element/role/index.js +1 -0
- package/src/element/role/miso-affiliation.js +16 -0
- package/src/layout/affiliation/affiliation.js +84 -0
- package/src/layout/index.js +1 -0
- package/src/layout/list/collection.js +7 -1
- package/src/layout/templates.js +92 -26
- package/src/version.js +1 -1
- package/src/workflow/ask.js +6 -1
package/src/layout/templates.js
CHANGED
|
@@ -42,37 +42,86 @@ export function article(layout, state, data, meta) {
|
|
|
42
42
|
].join('');
|
|
43
43
|
}
|
|
44
44
|
|
|
45
|
-
export function
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
45
|
+
export function affiliation(layout, state, data, meta) {
|
|
46
|
+
const { templates } = layout;
|
|
47
|
+
const [openTag, closeTag] = tagPair(layout, data);
|
|
48
|
+
return [
|
|
49
|
+
openTag,
|
|
50
|
+
(templates.infoBlock || templates.affiliationInfoBlock || affiliationInfoBlock)(layout, data, meta),
|
|
51
|
+
(templates.imageBlock || imageBlock)(layout, data, meta),
|
|
52
|
+
(templates.brandBlock || brandBlock)(layout, data, meta),
|
|
53
|
+
closeTag,
|
|
54
|
+
].join('');
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
export function affiliationInfoBlock(layout, data, meta) {
|
|
58
|
+
const { className, templates } = layout;
|
|
59
|
+
return `<div class="${className}__item-info-container">${[
|
|
60
|
+
(templates.titleBlock || titleBlock)(layout, data, meta),
|
|
61
|
+
(templates.descriptionBlock || descriptionBlock)(layout, data, meta),
|
|
62
|
+
(templates.priceBlock || priceBlock)(layout, data, meta),
|
|
63
|
+
(templates.ctaBlock || ctaBlock)(layout, data, meta),
|
|
64
|
+
].join('')}</div>`;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
export function productInfoBlock(layout, data, meta) {
|
|
68
|
+
const { className, templates } = layout;
|
|
69
|
+
return `<div class="${className}__item-info-container">${[
|
|
70
|
+
(templates.titleBlock || titleBlock)(layout, data, meta),
|
|
71
|
+
(templates.descriptionBlock || descriptionBlock)(layout, data, meta),
|
|
72
|
+
(templates.priceBlock || priceBlock)(layout, data, meta),
|
|
73
|
+
].join('')}</div>`;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
export function articleInfoBlock(layout, data, meta) {
|
|
77
|
+
const { className, templates } = layout;
|
|
78
|
+
return `<div class="${className}__item-info-container">${[
|
|
79
|
+
(templates.titleBlock || titleBlock)(layout, data, meta),
|
|
80
|
+
(templates.dateBlock || dateBlock)(layout, data, meta),
|
|
81
|
+
(templates.descriptionBlock || descriptionBlock)(layout, data, meta),
|
|
82
|
+
(templates.ctaBlock || ctaBlock)(layout, data, meta),
|
|
83
|
+
].join('')}</div>`;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
export function titleBlock({ className }, { title }) {
|
|
87
|
+
return title ? `<div class="${className}__item-title">${escapeHtml(title)}</div>` : '';
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
export function brandBlock({ className }, { brand, brand_logo }) {
|
|
91
|
+
if (!brand && !brand_logo) {
|
|
92
|
+
return '';
|
|
57
93
|
}
|
|
58
|
-
|
|
94
|
+
brand_logo = undefined;
|
|
95
|
+
const content = brand_logo ? `<img class="${className}__item-brand-logo" src="${brand_logo}"${brand ? ` alt="${brand}"` : ''}>` : `<div class="${className}__item-brand">${brand}</div>`;
|
|
96
|
+
return `<div class="${className}__item-brand-container">${content}</div>`;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
export function descriptionBlock({ className }, { snippet, description }) {
|
|
100
|
+
return snippet ? `<div class="${className}__item-snippet">${snippet}</div>` : description ? `<div class="${className}__item-desc">${escapeHtml(description)}</div>` : '';
|
|
59
101
|
}
|
|
60
102
|
|
|
61
|
-
export function
|
|
103
|
+
export function dateBlock({ className, templates }, { created_at, updated_at, published_at }) {
|
|
62
104
|
const date = published_at || created_at || updated_at;
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
105
|
+
return date ? `<div class="${className}__item-date">${formatDate(date, templates.date)}</div>` : '';
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
export function priceBlock({ className }, { sale_price, original_price, discount_rate_percent, currency = 'USD' }) {
|
|
109
|
+
const price = sale_price || original_price;
|
|
110
|
+
if (!price) {
|
|
111
|
+
return '';
|
|
66
112
|
}
|
|
67
|
-
|
|
68
|
-
|
|
113
|
+
const has_price_difference = original_price !== undefined && sale_price !== undefined && sale_price < original_price;
|
|
114
|
+
discount_rate_percent = discount_rate_percent || (has_price_difference ? Math.floor((1 - sale_price / original_price) * 100) : undefined);
|
|
115
|
+
|
|
116
|
+
let content = '';
|
|
117
|
+
if (has_price_difference) {
|
|
118
|
+
content += `<span class="${className}__item-original-price miso-price" data-currency="${currency}">${original_price}</span><br>`;
|
|
69
119
|
}
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
content += `<div class="${className}__item-desc">${escapeHtml(description)}</div>`;
|
|
120
|
+
content += `<span class="${className}__item-price miso-price" data-currency="${currency}">${price}</span>`;
|
|
121
|
+
if (discount_rate_percent) {
|
|
122
|
+
content += `<span class="${className}__item-discount-rate"> (${discount_rate_percent}% off)</span>`;
|
|
74
123
|
}
|
|
75
|
-
return `<div class="${className}__item-
|
|
124
|
+
return `<div class="${className}__item-price-container">${content}</div>`;
|
|
76
125
|
}
|
|
77
126
|
|
|
78
127
|
export function imageBlock({ className }, { cover_image }) {
|
|
@@ -84,8 +133,25 @@ export function imageBlock({ className }, { cover_image }) {
|
|
|
84
133
|
}
|
|
85
134
|
|
|
86
135
|
export function indexBlock({ className }, data, { index }) {
|
|
87
|
-
|
|
88
|
-
|
|
136
|
+
return `<div class="${className}__item-index-container"><span class="${className}__item-index miso-citation-index" data-index="${index + 1}"></span></div>`;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
export function ctaBlock(layout, data, meta) {
|
|
140
|
+
const { className, templates } = layout;
|
|
141
|
+
let _cta = templates.cta || cta;
|
|
142
|
+
if (typeof _cta === 'function') {
|
|
143
|
+
_cta = _cta(layout, data, meta);
|
|
144
|
+
}
|
|
145
|
+
return _cta ? `<div class="${className}__item-cta-container">${_cta}</div>` : '';
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
export function cta(layout, data, meta) {
|
|
149
|
+
const { className, templates } = layout;
|
|
150
|
+
let text = templates.ctaText;
|
|
151
|
+
if (typeof text === 'function') {
|
|
152
|
+
text = text(layout, data, meta);
|
|
153
|
+
}
|
|
154
|
+
return text ? `<div class="${className}__item-cta">${text}</div>` : '';
|
|
89
155
|
}
|
|
90
156
|
|
|
91
157
|
// helpers //
|
package/src/version.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export default '1.10.0-beta.
|
|
1
|
+
export default '1.10.0-beta.3';
|
package/src/workflow/ask.js
CHANGED
|
@@ -4,8 +4,9 @@ import { mergeApiOptions } from './options.js';
|
|
|
4
4
|
import * as sources from '../source/index.js';
|
|
5
5
|
import { fields, FeedbackActor, AutocompleteActor } from '../actor/index.js';
|
|
6
6
|
import { ROLE, STATUS, ORGANIC_QUESTION_SOURCE } from '../constants.js';
|
|
7
|
-
import { SearchBoxLayout, OptionListLayout, ListLayout, TextLayout, TypewriterLayout, FeedbackLayout } from '../layout/index.js';
|
|
7
|
+
import { SearchBoxLayout, OptionListLayout, ListLayout, TextLayout, TypewriterLayout, FeedbackLayout, AffiliationLayout } from '../layout/index.js';
|
|
8
8
|
import { makeConfigurable } from './options.js';
|
|
9
|
+
import { processData as processAffiliationData } from '../affiliation/index.js';
|
|
9
10
|
|
|
10
11
|
const DEFAULT_API_OPTIONS = Object.freeze({
|
|
11
12
|
group: API.GROUP.ASK,
|
|
@@ -35,6 +36,7 @@ const DEFAULT_LAYOUTS = Object.freeze({
|
|
|
35
36
|
[ROLE.SOURCES]: [ListLayout.type, { incremental: true, itemType: 'article', templates: { ordered: true } }],
|
|
36
37
|
[ROLE.RELATED_RESOURCES]: [ListLayout.type, { incremental: true, itemType: 'article' }],
|
|
37
38
|
[ROLE.QUERY_SUGGESTIONS]: OptionListLayout.type,
|
|
39
|
+
[ROLE.AFFILIATION]: [AffiliationLayout.type, { itemType: 'affiliation', link: { rel: 'noopener nofollow' } }],
|
|
38
40
|
});
|
|
39
41
|
|
|
40
42
|
const DEFAULT_TRACKERS = Object.freeze({
|
|
@@ -207,6 +209,9 @@ export default class Ask extends Workflow {
|
|
|
207
209
|
}
|
|
208
210
|
}
|
|
209
211
|
|
|
212
|
+
// affiliation
|
|
213
|
+
data = processAffiliationData(data);
|
|
214
|
+
|
|
210
215
|
// 1. put answer_stage to meta
|
|
211
216
|
// 2. mark ongoing flag
|
|
212
217
|
return {
|