@miso.ai/client-sdk-ui 1.11.4-beta.1 → 1.11.4-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/filters.js +57 -11
- package/dist/cjs/actor/tracker.js +1 -6
- package/dist/cjs/actor/view.js +6 -8
- package/dist/cjs/actor/views.js +10 -26
- package/dist/cjs/constants.js +12 -2
- package/dist/cjs/element/role/index.js +7 -0
- package/dist/cjs/element/role/miso-sort.js +20 -0
- package/dist/cjs/layout/affiliation/affiliation.js +1 -1
- package/dist/cjs/layout/container/container.js +2 -2
- package/dist/cjs/layout/index.js +7 -0
- package/dist/cjs/layout/input/facets.js +2 -2
- package/dist/cjs/layout/input/search-box.js +1 -1
- package/dist/cjs/layout/input/select.js +150 -0
- package/dist/cjs/layout/raf.js +2 -4
- package/dist/cjs/layout/trackable.js +3 -3
- package/dist/cjs/layout/triggerable.js +1 -1
- package/dist/cjs/util/trackers.js +2 -0
- package/dist/cjs/version.js +1 -1
- package/dist/cjs/workflow/answer-based.js +2 -2
- package/dist/cjs/workflow/ask.js +4 -1
- package/dist/cjs/workflow/base.js +4 -4
- package/dist/cjs/workflow/context.js +3 -3
- package/dist/cjs/workflow/explore.js +2 -2
- package/dist/cjs/workflow/hybrid-search-answer.js +9 -7
- package/dist/cjs/workflow/hybrid-search-results.js +18 -16
- package/dist/cjs/workflow/hybrid-search-views.js +5 -12
- package/dist/cjs/workflow/hybrid-search.js +2 -2
- package/dist/cjs/workflow/options/api.js +56 -0
- package/dist/cjs/workflow/options/configurable.js +49 -0
- package/dist/cjs/workflow/options/data-processor.js +23 -0
- package/dist/cjs/workflow/options/filters.js +18 -0
- package/dist/cjs/workflow/options/index.js +115 -0
- package/dist/cjs/workflow/options/interactions.js +44 -0
- package/dist/cjs/workflow/options/layouts.js +83 -0
- package/dist/cjs/workflow/options/options.js +154 -0
- package/dist/cjs/workflow/options/pagination.js +28 -0
- package/dist/cjs/workflow/options/roles.js +17 -0
- package/dist/cjs/workflow/options/trackers.js +39 -0
- package/dist/cjs/workflow/options/utils.js +33 -0
- package/dist/cjs/workflow/processors.js +39 -33
- package/dist/cjs/workflow/recommendation.js +2 -2
- package/dist/cjs/workflow/search-based.js +59 -22
- package/package.json +2 -2
- package/src/actor/filters.js +53 -12
- package/src/actor/tracker.js +1 -6
- package/src/actor/view.js +7 -8
- package/src/actor/views.js +9 -30
- package/src/constants.js +11 -0
- package/src/element/role/index.js +1 -0
- package/src/element/role/miso-sort.js +16 -0
- package/src/layout/affiliation/affiliation.js +1 -1
- package/src/layout/container/container.js +2 -2
- package/src/layout/index.js +1 -0
- package/src/layout/input/facets.js +3 -2
- package/src/layout/input/search-box.js +1 -1
- package/src/layout/input/select.js +142 -0
- package/src/layout/raf.js +2 -2
- package/src/layout/trackable.js +3 -3
- package/src/layout/triggerable.js +1 -1
- package/src/util/trackers.js +2 -0
- package/src/version.js +1 -1
- package/src/workflow/answer-based.js +1 -1
- package/src/workflow/ask.js +4 -1
- package/src/workflow/base.js +1 -1
- package/src/workflow/context.js +1 -1
- package/src/workflow/explore.js +1 -1
- package/src/workflow/hybrid-search-answer.js +8 -3
- package/src/workflow/hybrid-search-results.js +21 -7
- package/src/workflow/hybrid-search-views.js +4 -12
- package/src/workflow/hybrid-search.js +3 -3
- package/src/workflow/options/api.js +46 -0
- package/src/workflow/options/configurable.js +48 -0
- package/src/workflow/options/data-processor.js +15 -0
- package/src/workflow/options/filters.js +10 -0
- package/src/workflow/options/index.js +10 -0
- package/src/workflow/options/interactions.js +36 -0
- package/src/workflow/options/layouts.js +73 -0
- package/src/workflow/options/options.js +169 -0
- package/src/workflow/options/pagination.js +18 -0
- package/src/workflow/options/roles.js +12 -0
- package/src/workflow/options/trackers.js +32 -0
- package/src/workflow/options/utils.js +26 -0
- package/src/workflow/processors.js +30 -34
- package/src/workflow/recommendation.js +1 -1
- package/src/workflow/search-based.js +58 -13
- package/dist/cjs/workflow/options.js +0 -448
- package/src/workflow/options.js +0 -433
|
@@ -15,6 +15,30 @@ function mergeState() {
|
|
|
15
15
|
facets: Object.freeze((0, _commons.trimObj)(Object.assign({}, state.facets, update.facets)))
|
|
16
16
|
})));
|
|
17
17
|
}
|
|
18
|
+
function optionsToState() {
|
|
19
|
+
let {
|
|
20
|
+
sort
|
|
21
|
+
} = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
22
|
+
// TODO: facets
|
|
23
|
+
return (0, _commons.trimObj)({
|
|
24
|
+
facets: Object.freeze({}),
|
|
25
|
+
sort: sortOptionsToState(sort)
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
function sortOptionsToState(sort) {
|
|
29
|
+
if (!sort) {
|
|
30
|
+
return undefined;
|
|
31
|
+
}
|
|
32
|
+
const {
|
|
33
|
+
options = []
|
|
34
|
+
} = sort;
|
|
35
|
+
for (const option of options) {
|
|
36
|
+
if (option.default) {
|
|
37
|
+
return Object.freeze(option);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
return Object.freeze(options[0]);
|
|
41
|
+
}
|
|
18
42
|
class Filters {
|
|
19
43
|
constructor(views) {
|
|
20
44
|
let {
|
|
@@ -22,7 +46,6 @@ class Filters {
|
|
|
22
46
|
} = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
23
47
|
this._views = views;
|
|
24
48
|
this._hub = views._hub;
|
|
25
|
-
this._states = this._initialStates = mergeState({}); // TODO: support custom initial states
|
|
26
49
|
const error = this._error = this._error.bind(this);
|
|
27
50
|
this._events = new _commons.EventEmitter({
|
|
28
51
|
target: this,
|
|
@@ -31,13 +54,24 @@ class Filters {
|
|
|
31
54
|
(0, _commons.defineValues)(this, {
|
|
32
55
|
facets: new Facets(this, facetsOptions)
|
|
33
56
|
});
|
|
57
|
+
this._unsubscribes = [views._options.on('filters', () => this._syncOptions())];
|
|
58
|
+
this._syncOptions();
|
|
59
|
+
this._states = undefined;
|
|
34
60
|
}
|
|
35
|
-
|
|
36
|
-
|
|
61
|
+
_syncOptions() {
|
|
62
|
+
const options = this._views._options.resolved.filters;
|
|
63
|
+
this._initialStates = optionsToState(options);
|
|
64
|
+
this.apply({
|
|
65
|
+
silent: true
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
_getStates() {
|
|
69
|
+
return this._states || this._initialStates;
|
|
37
70
|
}
|
|
38
71
|
update(updates) {
|
|
39
|
-
const oldStates = this.
|
|
40
|
-
|
|
72
|
+
const oldStates = this._getStates();
|
|
73
|
+
this._states = mergeState(Object.assign({}, oldStates, updates));
|
|
74
|
+
const states = this._getStates();
|
|
41
75
|
this._events.emit('update', {
|
|
42
76
|
updates,
|
|
43
77
|
states,
|
|
@@ -45,21 +79,33 @@ class Filters {
|
|
|
45
79
|
});
|
|
46
80
|
}
|
|
47
81
|
reset() {
|
|
48
|
-
const oldStates = this.
|
|
49
|
-
|
|
82
|
+
const oldStates = this.states;
|
|
83
|
+
this._states = undefined;
|
|
84
|
+
const states = this._getStates();
|
|
50
85
|
this._events.emit('reset', {
|
|
51
86
|
states,
|
|
52
87
|
oldStates
|
|
53
88
|
});
|
|
54
89
|
}
|
|
55
90
|
apply() {
|
|
56
|
-
|
|
57
|
-
|
|
91
|
+
let {
|
|
92
|
+
silent = false
|
|
93
|
+
} = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
94
|
+
const states = this._getStates();
|
|
95
|
+
this._hub.update(fields.filters(), states, {
|
|
96
|
+
silent
|
|
97
|
+
});
|
|
98
|
+
!silent && this._events.emit('apply');
|
|
58
99
|
}
|
|
59
100
|
_error(error) {
|
|
60
101
|
this._views._error(error);
|
|
61
102
|
}
|
|
62
|
-
_destroy() {
|
|
103
|
+
_destroy() {
|
|
104
|
+
for (const unsubscribe of this._unsubscribes) {
|
|
105
|
+
unsubscribe();
|
|
106
|
+
}
|
|
107
|
+
this._unsubscribes = [];
|
|
108
|
+
}
|
|
63
109
|
}
|
|
64
110
|
exports.default = Filters;
|
|
65
111
|
class Facets {
|
|
@@ -92,7 +138,7 @@ class Facets {
|
|
|
92
138
|
}
|
|
93
139
|
}
|
|
94
140
|
_select(field, value) {
|
|
95
|
-
const values = this._options.
|
|
141
|
+
const values = this._options.multivalued ? [...(this._filters._states.facets[field] || []), value] : [value];
|
|
96
142
|
values.sort();
|
|
97
143
|
this._filters.update({
|
|
98
144
|
facets: {
|
|
@@ -17,20 +17,15 @@ class Tracker {
|
|
|
17
17
|
let {
|
|
18
18
|
hub,
|
|
19
19
|
role,
|
|
20
|
-
valueless = false
|
|
21
|
-
options
|
|
20
|
+
valueless = false
|
|
22
21
|
} = _ref;
|
|
23
22
|
this._hub = hub;
|
|
24
23
|
this._role = role;
|
|
25
24
|
this._valueless = !!valueless;
|
|
26
|
-
this._options = options;
|
|
27
25
|
// TODO: know item type
|
|
28
26
|
|
|
29
27
|
this._states = new _states.default(this._getSessionId());
|
|
30
28
|
}
|
|
31
|
-
get options() {
|
|
32
|
-
return typeof this._options === 'function' ? this._options() : this._options;
|
|
33
|
-
}
|
|
34
29
|
getState(item) {
|
|
35
30
|
return this._states.getFullState(item);
|
|
36
31
|
}
|
package/dist/cjs/actor/view.js
CHANGED
|
@@ -106,14 +106,16 @@ class ViewActor {
|
|
|
106
106
|
} = this;
|
|
107
107
|
this._tracker = new _tracker.default({
|
|
108
108
|
hub,
|
|
109
|
-
role
|
|
110
|
-
options: () => this._getTrackerOptions()
|
|
109
|
+
role
|
|
111
110
|
});
|
|
112
111
|
}
|
|
113
112
|
return this._tracker;
|
|
114
113
|
}
|
|
115
114
|
get workflowOptions() {
|
|
116
|
-
return this._views.
|
|
115
|
+
return this._views._options.resolved;
|
|
116
|
+
}
|
|
117
|
+
get trackerOptions() {
|
|
118
|
+
return this._views._getTrackerOptions(this.role);
|
|
117
119
|
}
|
|
118
120
|
get filters() {
|
|
119
121
|
return this._views.filters;
|
|
@@ -195,10 +197,6 @@ class ViewActor {
|
|
|
195
197
|
silent
|
|
196
198
|
});
|
|
197
199
|
}
|
|
198
|
-
_getTrackerOptions() {
|
|
199
|
-
// used by tracker to expose tracker options to layout
|
|
200
|
-
return this._views._getTrackerOptions(this.role);
|
|
201
|
-
}
|
|
202
200
|
_sliceData(data) {
|
|
203
201
|
const {
|
|
204
202
|
value,
|
|
@@ -207,7 +205,7 @@ class ViewActor {
|
|
|
207
205
|
} = data,
|
|
208
206
|
rest = _objectWithoutPropertiesLoose(data, _excluded);
|
|
209
207
|
const sliced = Object.assign({
|
|
210
|
-
value: this._mapping(data),
|
|
208
|
+
value: this._mapping(data, this),
|
|
211
209
|
status,
|
|
212
210
|
data: value,
|
|
213
211
|
meta
|
package/dist/cjs/actor/views.js
CHANGED
|
@@ -47,10 +47,7 @@ class ViewsActor {
|
|
|
47
47
|
window.addEventListener('resize', syncSize);
|
|
48
48
|
this._unsubscribes = [() => window.removeEventListener('resize', syncSize), hub.on(fields.data(), data => this.refresh({
|
|
49
49
|
data
|
|
50
|
-
})), options.on('
|
|
51
|
-
this._syncAutocompleteOptions();
|
|
52
|
-
this._syncPaginationOptions();
|
|
53
|
-
this._syncTrackers();
|
|
50
|
+
})), options.on('layouts', () => this._syncLayouts())];
|
|
54
51
|
this._syncLayouts();
|
|
55
52
|
}
|
|
56
53
|
get trackers() {
|
|
@@ -150,15 +147,17 @@ class ViewsActor {
|
|
|
150
147
|
// TODO: try to omit if unchanged
|
|
151
148
|
const fn = () => this._layoutFactory.create(name, Object.assign({}, options, {
|
|
152
149
|
role,
|
|
153
|
-
workflow: this._workflowName
|
|
154
|
-
workflowOptions: this._getWorkflowOptions()
|
|
150
|
+
workflow: this._workflowName
|
|
155
151
|
}));
|
|
156
152
|
if (role === _constants.ROLE.CONTAINER) {
|
|
157
153
|
for (const view of this._containers.values()) {
|
|
158
154
|
view.layout = fn();
|
|
159
155
|
}
|
|
160
156
|
} else {
|
|
161
|
-
this.get(role)
|
|
157
|
+
const view = this.get(role);
|
|
158
|
+
if (view) {
|
|
159
|
+
view.layout = fn();
|
|
160
|
+
}
|
|
162
161
|
}
|
|
163
162
|
}
|
|
164
163
|
}
|
|
@@ -171,12 +170,11 @@ class ViewsActor {
|
|
|
171
170
|
const [name, options] = args;
|
|
172
171
|
return this._layoutFactory.create(name, Object.assign({}, options, {
|
|
173
172
|
role,
|
|
174
|
-
workflow: this._workflowName
|
|
175
|
-
workflowOptions: this._getWorkflowOptions()
|
|
173
|
+
workflow: this._workflowName
|
|
176
174
|
}));
|
|
177
175
|
}
|
|
178
176
|
get(role) {
|
|
179
|
-
return this._views[role]
|
|
177
|
+
return this._views[role];
|
|
180
178
|
}
|
|
181
179
|
get views() {
|
|
182
180
|
return this._getViews(true);
|
|
@@ -219,11 +217,9 @@ class ViewsActor {
|
|
|
219
217
|
_getData(data) {
|
|
220
218
|
return data || this._hub.states[fields.data()];
|
|
221
219
|
}
|
|
222
|
-
_syncTrackers() {
|
|
223
|
-
this._trackerOptions = this._options.resolved.trackers;
|
|
224
|
-
}
|
|
225
220
|
_getTrackerOptions(role) {
|
|
226
|
-
|
|
221
|
+
const allTrackerOptions = this._options.resolved.trackers;
|
|
222
|
+
return (0, _trackers.normalizeTrackerOptions)(allTrackerOptions && allTrackerOptions[role] || false);
|
|
227
223
|
}
|
|
228
224
|
_getContainerTracker() {
|
|
229
225
|
if (!this._containerTracker) {
|
|
@@ -238,18 +234,6 @@ class ViewsActor {
|
|
|
238
234
|
}
|
|
239
235
|
return this._containerTracker;
|
|
240
236
|
}
|
|
241
|
-
_syncAutocompleteOptions() {
|
|
242
|
-
this._autocompleteOptions = this._options.resolved.autocomplete;
|
|
243
|
-
}
|
|
244
|
-
_syncPaginationOptions() {
|
|
245
|
-
this._paginationOptions = this._options.resolved.pagination;
|
|
246
|
-
}
|
|
247
|
-
_getWorkflowOptions() {
|
|
248
|
-
return (0, _commons.trimObj)({
|
|
249
|
-
autocomplete: this._autocompleteOptions,
|
|
250
|
-
pagination: this._paginationOptions
|
|
251
|
-
});
|
|
252
|
-
}
|
|
253
237
|
_error(e) {
|
|
254
238
|
// TODO: hub trigger error event
|
|
255
239
|
console.error(e);
|
package/dist/cjs/constants.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.TRACKING_STATUS = exports.TRACKING_EVENT_TYPES = exports.STATUS = exports.ROLE = exports.PERFORMANCE_EVENT_TYPES = exports.ORGANIC_QUESTION_SOURCE = exports.EVENT_TYPE = exports.DEFAULT_UNIT_ID = exports.ATTR_DATA_MISO_UNIT_ID = exports.ATTR_DATA_MISO_PRODUCT_ID = void 0;
|
|
6
|
+
exports.WORKFLOW_CONFIGURABLE = exports.TRACKING_STATUS = exports.TRACKING_EVENT_TYPES = exports.STATUS = exports.ROLE = exports.PERFORMANCE_EVENT_TYPES = exports.ORGANIC_QUESTION_SOURCE = exports.EVENT_TYPE = exports.DEFAULT_UNIT_ID = exports.ATTR_DATA_MISO_UNIT_ID = exports.ATTR_DATA_MISO_PRODUCT_ID = void 0;
|
|
7
7
|
exports.isDataRole = isDataRole;
|
|
8
8
|
exports.isPerformanceEventType = isPerformanceEventType;
|
|
9
9
|
exports.isProductRole = isProductRole;
|
|
@@ -34,6 +34,7 @@ const ROLE = exports.ROLE = Object.freeze({
|
|
|
34
34
|
FACETS: 'facets',
|
|
35
35
|
TOTAL: 'total',
|
|
36
36
|
MORE: 'more',
|
|
37
|
+
SORT: 'sort',
|
|
37
38
|
ERROR: 'error'
|
|
38
39
|
});
|
|
39
40
|
const DATA_ROLE_SET = new Set([ROLE.PRODUCTS, ROLE.CATEGORIES, ROLE.ATTRIBUTES, ROLE.RESULTS, ROLE.ITEMS, ROLE.QUESTION, ROLE.ANSWER, ROLE.SOURCES, ROLE.RELATED_RESOURCES, ROLE.QUERY_SUGGESTIONS, ROLE.RELATED_QUESTIONS, ROLE.AFFILIATION, ROLE.FACETS, ROLE.TOTAL]);
|
|
@@ -81,4 +82,13 @@ function validateTrackingStatus(value) {
|
|
|
81
82
|
if (value !== TRACKING_STATUS.UNTRACKED && value !== TRACKING_STATUS.TRACKING && value !== TRACKING_STATUS.TRIGGERED) {
|
|
82
83
|
throw new Error(`Unrecognized tracking status: ${value}`);
|
|
83
84
|
}
|
|
84
|
-
}
|
|
85
|
+
}
|
|
86
|
+
const WORKFLOW_CONFIGURABLE = exports.WORKFLOW_CONFIGURABLE = Object.freeze({
|
|
87
|
+
API: 'api',
|
|
88
|
+
LAYOUTS: 'layouts',
|
|
89
|
+
DATA_PROCESSOR: 'dataProcessor',
|
|
90
|
+
TRACKERS: 'trackers',
|
|
91
|
+
INTERACTIONS: 'interactions',
|
|
92
|
+
FILTERS: 'filters',
|
|
93
|
+
PAGINATION: 'pagination'
|
|
94
|
+
});
|
|
@@ -87,6 +87,12 @@ Object.defineProperty(exports, "MisoResultsElement", {
|
|
|
87
87
|
return _misoResults.default;
|
|
88
88
|
}
|
|
89
89
|
});
|
|
90
|
+
Object.defineProperty(exports, "MisoSortElement", {
|
|
91
|
+
enumerable: true,
|
|
92
|
+
get: function () {
|
|
93
|
+
return _misoSort.default;
|
|
94
|
+
}
|
|
95
|
+
});
|
|
90
96
|
Object.defineProperty(exports, "MisoSourcesElement", {
|
|
91
97
|
enumerable: true,
|
|
92
98
|
get: function () {
|
|
@@ -121,5 +127,6 @@ var _misoKeywords = _interopRequireDefault(require("./miso-keywords.js"));
|
|
|
121
127
|
var _misoTotal = _interopRequireDefault(require("./miso-total.js"));
|
|
122
128
|
var _misoFacets = _interopRequireDefault(require("./miso-facets.js"));
|
|
123
129
|
var _misoMore = _interopRequireDefault(require("./miso-more.js"));
|
|
130
|
+
var _misoSort = _interopRequireDefault(require("./miso-sort.js"));
|
|
124
131
|
var _misoError = _interopRequireDefault(require("./miso-error.js"));
|
|
125
132
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var _misoComponent = _interopRequireDefault(require("./miso-component.js"));
|
|
8
|
+
var _constants = require("../../constants.js");
|
|
9
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
10
|
+
class MisoSortElement extends _misoComponent.default {
|
|
11
|
+
constructor() {
|
|
12
|
+
super({
|
|
13
|
+
role: _constants.ROLE.SORT
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
static get tagName() {
|
|
17
|
+
return 'miso-sort';
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
exports.default = MisoSortElement;
|
|
@@ -203,7 +203,7 @@ class AffiliationLayout extends _collection.default {
|
|
|
203
203
|
super.initialize(view);
|
|
204
204
|
const {
|
|
205
205
|
viewable: options
|
|
206
|
-
} = this._view.
|
|
206
|
+
} = this._view.trackerOptions || {};
|
|
207
207
|
this._viewable = new _commons.CarouselItemViewabilityObserver(this._onViewable.bind(this), options);
|
|
208
208
|
}
|
|
209
209
|
|
|
@@ -106,7 +106,7 @@ class ContainerLayout extends _raf.default {
|
|
|
106
106
|
_trackImpression() {
|
|
107
107
|
const {
|
|
108
108
|
impression: options
|
|
109
|
-
} = this._view.
|
|
109
|
+
} = this._view.trackerOptions || {};
|
|
110
110
|
if (!options) {
|
|
111
111
|
return;
|
|
112
112
|
}
|
|
@@ -119,7 +119,7 @@ class ContainerLayout extends _raf.default {
|
|
|
119
119
|
async _trackViewable(element) {
|
|
120
120
|
const {
|
|
121
121
|
viewable: options
|
|
122
|
-
} = this._view.
|
|
122
|
+
} = this._view.trackerOptions || {};
|
|
123
123
|
if (!options) {
|
|
124
124
|
return;
|
|
125
125
|
}
|
package/dist/cjs/layout/index.js
CHANGED
|
@@ -81,6 +81,12 @@ Object.defineProperty(exports, "SearchBoxLayout", {
|
|
|
81
81
|
return _searchBox.default;
|
|
82
82
|
}
|
|
83
83
|
});
|
|
84
|
+
Object.defineProperty(exports, "SelectLayout", {
|
|
85
|
+
enumerable: true,
|
|
86
|
+
get: function () {
|
|
87
|
+
return _select.default;
|
|
88
|
+
}
|
|
89
|
+
});
|
|
84
90
|
Object.defineProperty(exports, "TemplateBasedLayout", {
|
|
85
91
|
enumerable: true,
|
|
86
92
|
get: function () {
|
|
@@ -114,5 +120,6 @@ var _text = _interopRequireDefault(require("./text/text.js"));
|
|
|
114
120
|
var _index = _interopRequireDefault(require("./text/typewriter/index.js"));
|
|
115
121
|
var _affiliation = _interopRequireDefault(require("./affiliation/affiliation.js"));
|
|
116
122
|
var _facets = _interopRequireDefault(require("./input/facets.js"));
|
|
123
|
+
var _select = _interopRequireDefault(require("./input/select.js"));
|
|
117
124
|
var _moreButton = _interopRequireDefault(require("./button/more-button.js"));
|
|
118
125
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
@@ -5,6 +5,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
7
|
var _commons = require("@miso.ai/commons");
|
|
8
|
+
var _index = require("../../actor/index.js");
|
|
8
9
|
var _template = _interopRequireDefault(require("../template.js"));
|
|
9
10
|
var _bindings = _interopRequireDefault(require("../../util/bindings.js"));
|
|
10
11
|
const _excluded = ["className", "templates"];
|
|
@@ -150,7 +151,6 @@ class FacetsLayout extends _template.default {
|
|
|
150
151
|
initialize(view) {
|
|
151
152
|
const {
|
|
152
153
|
proxyElement,
|
|
153
|
-
hub,
|
|
154
154
|
filters
|
|
155
155
|
} = view;
|
|
156
156
|
this._unsubscribes = [...this._unsubscribes, proxyElement.on('click', e => this._handleClick(e)), filters.on('update', e => this._updateSelections(e)), filters.on('reset', () => this._syncSelections())];
|
|
@@ -166,7 +166,7 @@ class FacetsLayout extends _template.default {
|
|
|
166
166
|
this._clearBindings();
|
|
167
167
|
}
|
|
168
168
|
_syncSelections() {
|
|
169
|
-
const selectedValues = getSelectedValues(this._view.
|
|
169
|
+
const selectedValues = getSelectedValues(this._view.hub.states[_index.fields.filters()].facets);
|
|
170
170
|
for (const {
|
|
171
171
|
value: {
|
|
172
172
|
field,
|
|
@@ -396,7 +396,7 @@ class SearchBoxLayout extends _template.default {
|
|
|
396
396
|
_trackSubmit(value) {
|
|
397
397
|
const {
|
|
398
398
|
[_constants.EVENT_TYPE.SUBMIT]: options
|
|
399
|
-
} = this._view.
|
|
399
|
+
} = this._view.trackerOptions || {};
|
|
400
400
|
if (!options) {
|
|
401
401
|
return;
|
|
402
402
|
}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var _commons = require("@miso.ai/commons");
|
|
8
|
+
var _template = _interopRequireDefault(require("../template.js"));
|
|
9
|
+
var _trackable = require("../trackable.js");
|
|
10
|
+
const _excluded = ["className", "templates"];
|
|
11
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
12
|
+
function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (e.includes(n)) continue; t[n] = r[n]; } return t; }
|
|
13
|
+
const TYPE = 'select';
|
|
14
|
+
const DEFAULT_CLASSNAME = 'miso-select';
|
|
15
|
+
function root(layout, state) {
|
|
16
|
+
const {
|
|
17
|
+
className,
|
|
18
|
+
role,
|
|
19
|
+
templates
|
|
20
|
+
} = layout;
|
|
21
|
+
const roleAttr = role ? `data-role="${role}"` : '';
|
|
22
|
+
const values = layout._getItems(state);
|
|
23
|
+
const selected = values.find(value => value.selected) || values[0];
|
|
24
|
+
return `
|
|
25
|
+
<div class="${className}" ${roleAttr}>
|
|
26
|
+
${templates.button(layout, selected)}
|
|
27
|
+
${templates.options(layout, state)}
|
|
28
|
+
</div>`;
|
|
29
|
+
}
|
|
30
|
+
function button(layout, value) {
|
|
31
|
+
const {
|
|
32
|
+
className,
|
|
33
|
+
templates
|
|
34
|
+
} = layout;
|
|
35
|
+
return `<button class="${className}__button" data-role="button" tabindex="0">${templates.text(layout, value)}</button>`;
|
|
36
|
+
}
|
|
37
|
+
function options(layout, state) {
|
|
38
|
+
const {
|
|
39
|
+
className,
|
|
40
|
+
templates
|
|
41
|
+
} = layout;
|
|
42
|
+
const values = layout._getItems(state);
|
|
43
|
+
return `<ul class="${className}__options">${values.map((value, index) => templates.option(layout, value, {
|
|
44
|
+
index
|
|
45
|
+
})).join('')}</ul>`;
|
|
46
|
+
}
|
|
47
|
+
function option(layout, value) {
|
|
48
|
+
const {
|
|
49
|
+
className,
|
|
50
|
+
templates
|
|
51
|
+
} = layout;
|
|
52
|
+
const selectedClass = value.selected ? 'selected' : '';
|
|
53
|
+
return `<li class="${className}__option ${selectedClass}" data-role="option" tabindex="0">${templates.text(layout, value)}</li>`;
|
|
54
|
+
}
|
|
55
|
+
function text(layout, value) {
|
|
56
|
+
return (0, _commons.escapeHtml)(value && value.text && (0, _commons.kebabOrSnakeToHuman)(value.text) || value || '');
|
|
57
|
+
}
|
|
58
|
+
const DEFAULT_TEMPLATES = Object.freeze({
|
|
59
|
+
root,
|
|
60
|
+
button,
|
|
61
|
+
options,
|
|
62
|
+
option,
|
|
63
|
+
text
|
|
64
|
+
});
|
|
65
|
+
class SelectLayout extends _template.default {
|
|
66
|
+
static get type() {
|
|
67
|
+
return TYPE;
|
|
68
|
+
}
|
|
69
|
+
static get defaultTemplates() {
|
|
70
|
+
return DEFAULT_TEMPLATES;
|
|
71
|
+
}
|
|
72
|
+
static get defaultClassName() {
|
|
73
|
+
return DEFAULT_CLASSNAME;
|
|
74
|
+
}
|
|
75
|
+
constructor() {
|
|
76
|
+
let _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
77
|
+
let {
|
|
78
|
+
className = DEFAULT_CLASSNAME,
|
|
79
|
+
templates
|
|
80
|
+
} = _ref,
|
|
81
|
+
options = _objectWithoutPropertiesLoose(_ref, _excluded);
|
|
82
|
+
super(Object.assign({
|
|
83
|
+
className,
|
|
84
|
+
templates: Object.assign({}, DEFAULT_TEMPLATES, templates)
|
|
85
|
+
}, options));
|
|
86
|
+
this._initTrackable();
|
|
87
|
+
}
|
|
88
|
+
initialize(view) {
|
|
89
|
+
const {
|
|
90
|
+
proxyElement
|
|
91
|
+
} = view;
|
|
92
|
+
this._unsubscribes = [...this._unsubscribes, proxyElement.on('click', e => this._handleClick(e))];
|
|
93
|
+
}
|
|
94
|
+
_afterRender(element, state) {
|
|
95
|
+
this._syncBindings(element, state);
|
|
96
|
+
}
|
|
97
|
+
_unrender() {
|
|
98
|
+
this._clearBindings();
|
|
99
|
+
}
|
|
100
|
+
_getItems(state) {
|
|
101
|
+
return state.value || [];
|
|
102
|
+
}
|
|
103
|
+
_getOptionsElement(element) {
|
|
104
|
+
return element.querySelector(`[data-role="options"]`);
|
|
105
|
+
}
|
|
106
|
+
_getItemElements(element) {
|
|
107
|
+
return element ? Array.from(element.querySelectorAll(`[data-role="option"]`)) : [];
|
|
108
|
+
}
|
|
109
|
+
_handleClick(event) {
|
|
110
|
+
if (!this._element) {
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
for (let element = event.target; element && element !== this._element; element = element.parentElement) {
|
|
114
|
+
const {
|
|
115
|
+
role
|
|
116
|
+
} = element.dataset;
|
|
117
|
+
switch (role) {
|
|
118
|
+
case 'button':
|
|
119
|
+
this._toggle();
|
|
120
|
+
break;
|
|
121
|
+
case 'option':
|
|
122
|
+
const binding = this._bindings.get(element);
|
|
123
|
+
this._select(binding && binding.value);
|
|
124
|
+
break;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
_toggle() {
|
|
129
|
+
if (!this._element) {
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
const child = this._element.children[0];
|
|
133
|
+
child && child.classList.toggle('open');
|
|
134
|
+
}
|
|
135
|
+
async _select(value) {
|
|
136
|
+
if (!value) {
|
|
137
|
+
return;
|
|
138
|
+
}
|
|
139
|
+
// TODO: reflect selection right away
|
|
140
|
+
this._view._events.emit('select', {
|
|
141
|
+
value
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
destroy() {
|
|
145
|
+
this._destroyTrackable();
|
|
146
|
+
super.destroy();
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
exports.default = SelectLayout;
|
|
150
|
+
(0, _trackable.makeTrackable)(SelectLayout.prototype);
|
package/dist/cjs/layout/raf.js
CHANGED
|
@@ -5,21 +5,19 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
7
|
var _commons = require("@miso.ai/commons");
|
|
8
|
-
const _excluded = ["role", "workflow"
|
|
8
|
+
const _excluded = ["role", "workflow"];
|
|
9
9
|
function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (e.includes(n)) continue; t[n] = r[n]; } return t; }
|
|
10
10
|
class RafLayout {
|
|
11
11
|
constructor() {
|
|
12
12
|
let _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
13
13
|
let {
|
|
14
14
|
role,
|
|
15
|
-
workflow
|
|
16
|
-
workflowOptions
|
|
15
|
+
workflow
|
|
17
16
|
} = _ref,
|
|
18
17
|
options = _objectWithoutPropertiesLoose(_ref, _excluded);
|
|
19
18
|
(0, _commons.defineValues)(this, {
|
|
20
19
|
role,
|
|
21
20
|
workflow,
|
|
22
|
-
workflowOptions,
|
|
23
21
|
options
|
|
24
22
|
});
|
|
25
23
|
this._unsubscribes = [];
|
|
@@ -56,7 +56,7 @@ class TrackableMixin {
|
|
|
56
56
|
}
|
|
57
57
|
const {
|
|
58
58
|
impression: options
|
|
59
|
-
} = this._view.
|
|
59
|
+
} = this._view.trackerOptions || {};
|
|
60
60
|
if (!options) {
|
|
61
61
|
return;
|
|
62
62
|
}
|
|
@@ -80,7 +80,7 @@ class TrackableMixin {
|
|
|
80
80
|
}
|
|
81
81
|
const {
|
|
82
82
|
viewable: options
|
|
83
|
-
} = this._view.
|
|
83
|
+
} = this._view.trackerOptions || {};
|
|
84
84
|
if (!options) {
|
|
85
85
|
return;
|
|
86
86
|
}
|
|
@@ -94,7 +94,7 @@ class TrackableMixin {
|
|
|
94
94
|
_trackClick(event, binding) {
|
|
95
95
|
const {
|
|
96
96
|
click: options
|
|
97
|
-
} = this._view.
|
|
97
|
+
} = this._view.trackerOptions || {};
|
|
98
98
|
if ((0, _trackers.validateClick)(options, event, binding)) {
|
|
99
99
|
this._view.tracker.click([binding.value]);
|
|
100
100
|
}
|
|
@@ -19,7 +19,7 @@ class TriggerableMixin {
|
|
|
19
19
|
if (!this.options.infiniteScroll) {
|
|
20
20
|
return;
|
|
21
21
|
}
|
|
22
|
-
const workflowPaginationOptions = this.workflowOptions.pagination;
|
|
22
|
+
const workflowPaginationOptions = this._view.workflowOptions.pagination;
|
|
23
23
|
if (!workflowPaginationOptions.active || workflowPaginationOptions.mode !== 'infiniteScroll') {
|
|
24
24
|
return;
|
|
25
25
|
}
|
|
@@ -8,6 +8,8 @@ exports.validateClick = validateClick;
|
|
|
8
8
|
var _commons = require("@miso.ai/commons");
|
|
9
9
|
const _excluded = ["impression", "viewable", "click"];
|
|
10
10
|
function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (e.includes(n)) continue; t[n] = r[n]; } return t; }
|
|
11
|
+
// TODO: think about how to incorporate this with workflow options
|
|
12
|
+
|
|
11
13
|
const DEFAULT_TRACKER_OPTIONS = Object.freeze({
|
|
12
14
|
impression: Object.freeze({}),
|
|
13
15
|
viewable: Object.freeze({
|
package/dist/cjs/version.js
CHANGED
|
@@ -10,7 +10,7 @@ var _index = require("../actor/index.js");
|
|
|
10
10
|
var _constants = require("../constants.js");
|
|
11
11
|
var _index2 = require("../layout/index.js");
|
|
12
12
|
var _index3 = require("../affiliation/index.js");
|
|
13
|
-
var
|
|
13
|
+
var _index4 = require("./options/index.js");
|
|
14
14
|
var _processors = require("./processors.js");
|
|
15
15
|
var _useLink = require("./use-link.js");
|
|
16
16
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
@@ -65,7 +65,7 @@ const DEFAULT_OPTIONS = Object.freeze(Object.assign({}, _base.default.DEFAULT_OP
|
|
|
65
65
|
layouts: DEFAULT_LAYOUTS,
|
|
66
66
|
trackers: DEFAULT_TRACKERS
|
|
67
67
|
}));
|
|
68
|
-
const ROLES_OPTIONS = (0,
|
|
68
|
+
const ROLES_OPTIONS = (0, _index4.mergeRolesOptions)(_base.default.ROLES_OPTIONS, {
|
|
69
69
|
main: _constants.ROLE.ANSWER,
|
|
70
70
|
members: Object.keys(DEFAULT_LAYOUTS)
|
|
71
71
|
});
|