@miso.ai/client-sdk-ui 1.11.0-beta.8 → 1.11.0
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/feedback.js +6 -39
- package/dist/cjs/actor/fields.js +14 -6
- package/dist/cjs/actor/index.js +0 -7
- package/dist/cjs/actor/interactions.js +4 -15
- package/dist/cjs/actor/sessions.js +2 -32
- package/dist/cjs/actor/tracker.js +25 -26
- package/dist/cjs/actor/utils.js +0 -49
- package/dist/cjs/actor/view.js +40 -40
- package/dist/cjs/actor/views.js +29 -8
- package/dist/cjs/constants.js +18 -19
- package/dist/cjs/defaults/hybrid-search/phrases.js +3 -3
- package/dist/cjs/defaults/hybrid-search/templates.js +28 -9
- package/dist/cjs/element/role/index.js +12 -5
- package/dist/cjs/element/role/{miso-hits.js → miso-more.js} +4 -4
- package/dist/cjs/element/role/miso-total.js +20 -0
- package/dist/cjs/layout/affiliation/affiliation.js +0 -3
- package/dist/cjs/layout/banner/banner.js +0 -4
- package/dist/cjs/layout/button/more-button.js +73 -0
- package/dist/cjs/layout/container/container.js +0 -3
- package/dist/cjs/layout/error/error.js +0 -4
- package/dist/cjs/layout/index.js +7 -0
- package/dist/cjs/layout/input/facets.js +0 -4
- package/dist/cjs/layout/input/option-list.js +0 -4
- package/dist/cjs/layout/input/search-box.js +13 -12
- package/dist/cjs/layout/list/cards.js +0 -3
- package/dist/cjs/layout/list/carousel.js +0 -3
- package/dist/cjs/layout/list/collection.js +22 -7
- package/dist/cjs/layout/list/list.js +0 -3
- package/dist/cjs/layout/radio/feedback.js +0 -3
- package/dist/cjs/layout/radio/radio.js +0 -4
- package/dist/cjs/layout/raf.js +4 -2
- package/dist/cjs/layout/text/text.js +0 -4
- package/dist/cjs/layout/text/typewriter/index.js +0 -3
- package/dist/cjs/layout/triggerable.js +79 -0
- package/dist/cjs/util/states.js +0 -15
- package/dist/cjs/version.js +1 -1
- package/dist/cjs/workflow/answer-based.js +70 -105
- package/dist/cjs/workflow/ask.js +29 -27
- package/dist/cjs/workflow/asks.js +1 -1
- package/dist/cjs/workflow/autocompletable.js +33 -0
- package/dist/cjs/workflow/autocomplete.js +122 -0
- package/dist/cjs/workflow/base.js +156 -98
- package/dist/cjs/workflow/explore.js +48 -46
- package/dist/cjs/workflow/hybrid-search-answer.js +17 -7
- package/dist/cjs/workflow/hybrid-search-results.js +17 -87
- package/dist/cjs/workflow/hybrid-search-views.js +122 -0
- package/dist/cjs/workflow/hybrid-search.js +47 -168
- package/dist/cjs/workflow/options.js +32 -17
- package/dist/cjs/workflow/processors.js +166 -2
- package/dist/cjs/workflow/recommendation.js +36 -49
- package/dist/cjs/workflow/search-based.js +228 -0
- package/dist/cjs/workflow/search.js +21 -68
- package/dist/cjs/workflow/use-link.js +44 -0
- package/package.json +2 -2
- package/src/actor/feedback.js +6 -23
- package/src/actor/fields.js +14 -6
- package/src/actor/index.js +0 -1
- package/src/actor/interactions.js +4 -10
- package/src/actor/sessions.js +3 -31
- package/src/actor/tracker.js +25 -19
- package/src/actor/utils.js +0 -47
- package/src/actor/view.js +27 -15
- package/src/actor/views.js +32 -8
- package/src/constants.js +25 -16
- package/src/defaults/hybrid-search/phrases.js +2 -2
- package/src/defaults/hybrid-search/templates.js +20 -9
- package/src/element/role/index.js +2 -1
- package/src/element/role/{miso-hits.js → miso-more.js} +3 -3
- package/src/element/role/miso-total.js +16 -0
- package/src/layout/affiliation/affiliation.js +1 -5
- package/src/layout/banner/banner.js +0 -5
- package/src/layout/button/more-button.js +69 -0
- package/src/layout/container/container.js +1 -5
- package/src/layout/error/error.js +0 -5
- package/src/layout/index.js +2 -1
- package/src/layout/input/facets.js +0 -5
- package/src/layout/input/option-list.js +0 -5
- package/src/layout/input/search-box.js +11 -14
- package/src/layout/list/cards.js +0 -4
- package/src/layout/list/carousel.js +0 -4
- package/src/layout/list/collection.js +21 -9
- package/src/layout/list/list.js +0 -4
- package/src/layout/radio/feedback.js +0 -4
- package/src/layout/radio/radio.js +0 -5
- package/src/layout/raf.js +2 -2
- package/src/layout/text/text.js +0 -5
- package/src/layout/text/typewriter/index.js +1 -5
- package/src/layout/triggerable.js +76 -0
- package/src/util/states.js +0 -14
- package/src/version.js +1 -1
- package/src/workflow/answer-based.js +61 -72
- package/src/workflow/ask.js +30 -24
- package/src/workflow/asks.js +1 -1
- package/src/workflow/autocompletable.js +29 -0
- package/src/workflow/autocomplete.js +113 -0
- package/src/workflow/base.js +133 -87
- package/src/workflow/explore.js +38 -30
- package/src/workflow/hybrid-search-answer.js +17 -6
- package/src/workflow/hybrid-search-results.js +17 -77
- package/src/workflow/hybrid-search-views.js +124 -0
- package/src/workflow/hybrid-search.js +47 -157
- package/src/workflow/options.js +26 -11
- package/src/workflow/processors.js +151 -3
- package/src/workflow/recommendation.js +32 -33
- package/src/workflow/search-based.js +222 -0
- package/src/workflow/search.js +21 -65
- package/src/workflow/use-link.js +40 -0
- package/dist/cjs/actor/autocomplete.js +0 -160
- package/dist/cjs/workflow/utils.js +0 -42
- package/src/actor/autocomplete.js +0 -133
- package/src/workflow/utils.js +0 -29
|
@@ -5,6 +5,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
7
|
var fields = _interopRequireWildcard(require("./fields.js"));
|
|
8
|
+
var _constants = require("../constants.js");
|
|
8
9
|
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
9
10
|
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
10
11
|
class FeedbackActor {
|
|
@@ -13,45 +14,11 @@ class FeedbackActor {
|
|
|
13
14
|
this._unsubscribes = [hub.on(fields.feedback(), state => this._trigger(state))];
|
|
14
15
|
}
|
|
15
16
|
_trigger(state) {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
} = data && data.value || {};
|
|
22
|
-
if (!question_id) {
|
|
23
|
-
return;
|
|
24
|
-
}
|
|
25
|
-
// TODO: ad-hoc
|
|
26
|
-
const {
|
|
27
|
-
request
|
|
28
|
-
} = data || {};
|
|
29
|
-
const {
|
|
30
|
-
payload
|
|
31
|
-
} = request || {};
|
|
32
|
-
const question_source = payload && payload._meta && payload._meta.question_source;
|
|
33
|
-
this._hub.trigger(fields.interaction(), this._buildInteraction(state, {
|
|
34
|
-
question_source
|
|
35
|
-
}));
|
|
36
|
-
}
|
|
37
|
-
_buildInteraction(_ref, _ref2) {
|
|
38
|
-
let {
|
|
39
|
-
value,
|
|
40
|
-
unselected
|
|
41
|
-
} = _ref;
|
|
42
|
-
let {
|
|
43
|
-
question_source
|
|
44
|
-
} = _ref2;
|
|
45
|
-
return {
|
|
46
|
-
type: 'feedback',
|
|
47
|
-
context: {
|
|
48
|
-
custom_context: {
|
|
49
|
-
result_type: 'answer',
|
|
50
|
-
question_source,
|
|
51
|
-
value: unselected ? 'unselected' : value
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
};
|
|
17
|
+
this._hub.trigger(fields.tracker(), {
|
|
18
|
+
type: _constants.EVENT_TYPE.FEEDBACK,
|
|
19
|
+
result_type: 'answer',
|
|
20
|
+
value: state.unselected ? 'unselected' : state.value
|
|
21
|
+
});
|
|
55
22
|
}
|
|
56
23
|
_destroy() {
|
|
57
24
|
for (const unsubscribe of this._unsubscribes) {
|
package/dist/cjs/actor/fields.js
CHANGED
|
@@ -3,12 +3,14 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
+
exports.completions = completions;
|
|
6
7
|
exports.data = data;
|
|
7
8
|
exports.event = event;
|
|
8
9
|
exports.feedback = feedback;
|
|
9
10
|
exports.filters = filters;
|
|
10
11
|
exports.input = input;
|
|
11
12
|
exports.interaction = interaction;
|
|
13
|
+
exports.more = more;
|
|
12
14
|
exports.query = query;
|
|
13
15
|
exports.request = request;
|
|
14
16
|
exports.response = response;
|
|
@@ -22,20 +24,23 @@ function session() {
|
|
|
22
24
|
function suggestions() {
|
|
23
25
|
return 'suggestions';
|
|
24
26
|
}
|
|
27
|
+
function completions() {
|
|
28
|
+
return 'completions';
|
|
29
|
+
}
|
|
25
30
|
function filters() {
|
|
26
31
|
return 'filters';
|
|
27
32
|
}
|
|
28
33
|
function query() {
|
|
29
34
|
return 'query';
|
|
30
35
|
}
|
|
31
|
-
function request(
|
|
32
|
-
return
|
|
36
|
+
function request() {
|
|
37
|
+
return 'request';
|
|
33
38
|
}
|
|
34
|
-
function response(
|
|
35
|
-
return
|
|
39
|
+
function response() {
|
|
40
|
+
return 'response';
|
|
36
41
|
}
|
|
37
|
-
function data(
|
|
38
|
-
return
|
|
42
|
+
function data() {
|
|
43
|
+
return 'data';
|
|
39
44
|
}
|
|
40
45
|
function view(role) {
|
|
41
46
|
return role ? `view:${role}` : 'view';
|
|
@@ -54,4 +59,7 @@ function feedback() {
|
|
|
54
59
|
}
|
|
55
60
|
function input() {
|
|
56
61
|
return 'input';
|
|
62
|
+
}
|
|
63
|
+
function more() {
|
|
64
|
+
return 'more';
|
|
57
65
|
}
|
package/dist/cjs/actor/index.js
CHANGED
|
@@ -3,12 +3,6 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
Object.defineProperty(exports, "AutocompleteActor", {
|
|
7
|
-
enumerable: true,
|
|
8
|
-
get: function () {
|
|
9
|
-
return _autocomplete.default;
|
|
10
|
-
}
|
|
11
|
-
});
|
|
12
6
|
Object.defineProperty(exports, "DataActor", {
|
|
13
7
|
enumerable: true,
|
|
14
8
|
get: function () {
|
|
@@ -53,7 +47,6 @@ var _sessions = _interopRequireDefault(require("./sessions.js"));
|
|
|
53
47
|
var _data = _interopRequireDefault(require("./data.js"));
|
|
54
48
|
var _views = _interopRequireDefault(require("./views.js"));
|
|
55
49
|
var _feedback = _interopRequireDefault(require("./feedback.js"));
|
|
56
|
-
var _autocomplete = _interopRequireDefault(require("./autocomplete.js"));
|
|
57
50
|
var _interactions = _interopRequireDefault(require("./interactions.js"));
|
|
58
51
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
59
52
|
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
@@ -19,25 +19,14 @@ class InteractionsActor {
|
|
|
19
19
|
this._unsubscribes = [hub.on(fields.interaction(), payload => this._handle(payload))];
|
|
20
20
|
}
|
|
21
21
|
_handle(payload) {
|
|
22
|
+
// TODO: omit when option == false
|
|
22
23
|
payload = (0, _commons.asArray)(payload);
|
|
23
|
-
const {
|
|
24
|
-
preprocess = [],
|
|
25
|
-
handle
|
|
26
|
-
} = this._options.resolved.interactions;
|
|
27
|
-
for (const p of preprocess) {
|
|
28
|
-
payload = payload.map(p);
|
|
29
|
-
}
|
|
30
|
-
// TODO: support filter?
|
|
31
24
|
if (payload.length === 0) {
|
|
32
25
|
return;
|
|
33
26
|
}
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
}
|
|
37
|
-
this._client.api.interactions.upload(payload, {
|
|
38
|
-
merge: true
|
|
39
|
-
});
|
|
40
|
-
}
|
|
27
|
+
this._client.api.interactions.upload(payload, {
|
|
28
|
+
merge: true
|
|
29
|
+
});
|
|
41
30
|
}
|
|
42
31
|
destroy() {
|
|
43
32
|
for (const unsubscribe of this._unsubscribes) {
|
|
@@ -12,44 +12,14 @@ class SessionMaker {
|
|
|
12
12
|
constructor(hub) {
|
|
13
13
|
this._hub = hub;
|
|
14
14
|
this._sessionIndex = 0;
|
|
15
|
-
(0, _commons.delegateGetters)(hub, this, ['active']);
|
|
16
|
-
}
|
|
17
|
-
get active() {
|
|
18
|
-
// TODO: may eliminate active flag?
|
|
19
|
-
const session = this._hub.states[fields.session()];
|
|
20
|
-
return !!(session && session.active);
|
|
21
|
-
}
|
|
22
|
-
new() {
|
|
23
|
-
let {
|
|
24
|
-
force = false
|
|
25
|
-
} = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
26
|
-
const currentSession = this._hub.states[fields.session()];
|
|
27
|
-
if (currentSession && !currentSession.active && !force) {
|
|
28
|
-
return;
|
|
29
|
-
}
|
|
30
|
-
const session = this._create();
|
|
31
|
-
this._hub.update(fields.session(), session);
|
|
32
|
-
}
|
|
33
|
-
start() {
|
|
34
|
-
const session = this._hub.states[fields.session()] || this._create();
|
|
35
|
-
if (session.active) {
|
|
36
|
-
return;
|
|
37
|
-
}
|
|
38
|
-
this._hub.update(fields.session(), Object.assign({}, session, {
|
|
39
|
-
active: true
|
|
40
|
-
}));
|
|
41
15
|
}
|
|
42
16
|
restart() {
|
|
43
|
-
|
|
44
|
-
}
|
|
45
|
-
_create() {
|
|
46
|
-
let active = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
|
|
47
|
-
return Object.freeze({
|
|
48
|
-
active,
|
|
17
|
+
const session = Object.freeze({
|
|
49
18
|
uuid: (0, _commons.uuidv4)(),
|
|
50
19
|
index: this._sessionIndex++,
|
|
51
20
|
meta: {}
|
|
52
21
|
});
|
|
22
|
+
this._hub.update(fields.session(), session);
|
|
53
23
|
}
|
|
54
24
|
}
|
|
55
25
|
exports.default = SessionMaker;
|
|
@@ -8,7 +8,6 @@ var _commons = require("@miso.ai/commons");
|
|
|
8
8
|
var _constants = require("../constants.js");
|
|
9
9
|
var fields = _interopRequireWildcard(require("./fields.js"));
|
|
10
10
|
var _states = _interopRequireDefault(require("../util/states.js"));
|
|
11
|
-
var _utils = require("./utils.js");
|
|
12
11
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
13
12
|
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
14
13
|
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
@@ -36,35 +35,35 @@ class Tracker {
|
|
|
36
35
|
return this._states.getFullState(item);
|
|
37
36
|
}
|
|
38
37
|
_trigger(type, items) {
|
|
39
|
-
|
|
38
|
+
(0, _constants.validateEventType)(type);
|
|
40
39
|
if (this._valueless) {
|
|
41
|
-
meta = items;
|
|
42
40
|
items = VALUELESS_ITEMS;
|
|
43
41
|
}
|
|
44
|
-
(0, _constants.validateEventType)(type);
|
|
45
42
|
this._syncSession();
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
return;
|
|
50
|
-
}
|
|
51
|
-
this._states.set(items, type, _constants.TRACKING_STATUS.TRIGGERED);
|
|
43
|
+
items = this._states.untriggered((0, _commons.asArray)(items), type);
|
|
44
|
+
if (items.length === 0) {
|
|
45
|
+
return;
|
|
52
46
|
}
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
})
|
|
47
|
+
this._states.set(items, type, _constants.TRACKING_STATUS.TRIGGERED);
|
|
48
|
+
this._sendToHub({
|
|
49
|
+
type,
|
|
50
|
+
items: this._valueless ? undefined : items
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
submit(_ref2) {
|
|
54
|
+
let {
|
|
55
|
+
value
|
|
56
|
+
} = _ref2;
|
|
57
|
+
this._syncSession();
|
|
58
|
+
this._sendToHub({
|
|
59
|
+
type: _constants.EVENT_TYPE.SUBMIT,
|
|
60
|
+
value
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
_sendToHub(args) {
|
|
64
|
+
this._hub.trigger(fields.tracker(), Object.freeze((0, _commons.trimObj)(Object.assign({
|
|
65
|
+
role: this._role
|
|
66
|
+
}, args))));
|
|
68
67
|
}
|
|
69
68
|
_syncSession() {
|
|
70
69
|
const sessionId = this._getSessionId();
|
|
@@ -96,7 +95,7 @@ class Tracker {
|
|
|
96
95
|
}
|
|
97
96
|
}
|
|
98
97
|
exports.default = Tracker;
|
|
99
|
-
for (const type of _constants.
|
|
98
|
+
for (const type of _constants.PERFORMANCE_EVENT_TYPES) {
|
|
100
99
|
Tracker.prototype[type] = function (items, meta) {
|
|
101
100
|
this._trigger(type, items, meta);
|
|
102
101
|
};
|
package/dist/cjs/actor/utils.js
CHANGED
|
@@ -4,55 +4,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.isCurrentSession = isCurrentSession;
|
|
7
|
-
exports.isProduct = isProduct;
|
|
8
|
-
exports.toInteraction = toInteraction;
|
|
9
|
-
var _commons = require("@miso.ai/commons");
|
|
10
|
-
var _constants = require("../constants.js");
|
|
11
|
-
const PRODUCT_TYPED_PROPERTIES = new Set([_constants.ROLE.PRODUCTS, _constants.ROLE.SOURCES, _constants.ROLE.RELATED_RESOURCES]);
|
|
12
|
-
|
|
13
|
-
// TODO: move away
|
|
14
|
-
function isProduct(property) {
|
|
15
|
-
return PRODUCT_TYPED_PROPERTIES.has(property);
|
|
16
|
-
}
|
|
17
|
-
function toInteraction(_ref, _ref2) {
|
|
18
|
-
let {
|
|
19
|
-
property,
|
|
20
|
-
misoId,
|
|
21
|
-
request
|
|
22
|
-
} = _ref;
|
|
23
|
-
let {
|
|
24
|
-
event,
|
|
25
|
-
values,
|
|
26
|
-
manual
|
|
27
|
-
} = _ref2;
|
|
28
|
-
// TODO: ad-hoc
|
|
29
|
-
const question_source = request && request._meta && request._meta.question_source;
|
|
30
|
-
const isProductType = isProduct(property);
|
|
31
|
-
const isSubmit = event === _constants.EVENT_TYPE.SUBMIT;
|
|
32
|
-
const isAffiliation = property === _constants.ROLE.AFFILIATION;
|
|
33
|
-
const product_ids = isProductType && values ? values.map(v => typeof v === 'string' ? v : v.product_id).filter(v => v) : !isSubmit ? [] : undefined;
|
|
34
|
-
const items = !isProductType && !isSubmit && values ? values.map(v => v.text || v.id || v) : undefined;
|
|
35
|
-
const value = isSubmit ? values : undefined;
|
|
36
|
-
const channel = isAffiliation ? values[0] && values[0].channel : undefined;
|
|
37
|
-
const positions = isAffiliation ? values.map(v => v.position) : undefined;
|
|
38
|
-
const payload = (0, _commons.trimObj)({
|
|
39
|
-
type: event === 'viewable' ? 'viewable_impression' : event,
|
|
40
|
-
product_ids,
|
|
41
|
-
miso_id: misoId,
|
|
42
|
-
context: {
|
|
43
|
-
custom_context: (0, _commons.trimObj)({
|
|
44
|
-
property,
|
|
45
|
-
channel,
|
|
46
|
-
items,
|
|
47
|
-
value,
|
|
48
|
-
positions,
|
|
49
|
-
trigger: manual ? 'manual' : 'auto',
|
|
50
|
-
question_source
|
|
51
|
-
})
|
|
52
|
-
}
|
|
53
|
-
});
|
|
54
|
-
return payload;
|
|
55
|
-
}
|
|
56
7
|
function isCurrentSession(hub, session) {
|
|
57
8
|
if (!session) {
|
|
58
9
|
return false;
|
package/dist/cjs/actor/view.js
CHANGED
|
@@ -28,7 +28,7 @@ class ViewActor {
|
|
|
28
28
|
target: this
|
|
29
29
|
});
|
|
30
30
|
this._views = views;
|
|
31
|
-
this.
|
|
31
|
+
this._mapping = asMappingFunction((views._roles.mappings || {})[role] || role);
|
|
32
32
|
(0, _commons.defineValues)(this, {
|
|
33
33
|
role,
|
|
34
34
|
interface: new View(this)
|
|
@@ -112,6 +112,9 @@ class ViewActor {
|
|
|
112
112
|
}
|
|
113
113
|
return this._tracker;
|
|
114
114
|
}
|
|
115
|
+
get workflowOptions() {
|
|
116
|
+
return this._views._getWorkflowOptions();
|
|
117
|
+
}
|
|
115
118
|
get filters() {
|
|
116
119
|
return this._views.filters;
|
|
117
120
|
}
|
|
@@ -138,35 +141,32 @@ class ViewActor {
|
|
|
138
141
|
const previousData = this._data;
|
|
139
142
|
this._data = data = this._sliceData(data || this._views._getData());
|
|
140
143
|
|
|
141
|
-
//
|
|
144
|
+
// if data is unchanged, skip unless forced
|
|
145
|
+
if (!force && statesEqual(data, previousData)) {
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
142
148
|
const {
|
|
143
149
|
session,
|
|
144
150
|
status,
|
|
145
151
|
ongoing,
|
|
146
152
|
request,
|
|
147
|
-
meta
|
|
153
|
+
meta,
|
|
154
|
+
value
|
|
148
155
|
} = data;
|
|
149
|
-
const
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
}
|
|
156
|
+
const baseState = Object.assign({
|
|
157
|
+
session,
|
|
158
|
+
status,
|
|
159
|
+
ongoing,
|
|
160
|
+
request,
|
|
161
|
+
meta,
|
|
162
|
+
data: value
|
|
163
|
+
}, getDataEmptyness(data));
|
|
158
164
|
|
|
159
165
|
// render
|
|
160
166
|
const notifyUpdate = function () {
|
|
161
167
|
let state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
162
168
|
let options = arguments.length > 1 ? arguments[1] : undefined;
|
|
163
|
-
state !== false && _this.updateState(Object.assign({
|
|
164
|
-
session,
|
|
165
|
-
status,
|
|
166
|
-
ongoing,
|
|
167
|
-
request,
|
|
168
|
-
meta
|
|
169
|
-
}, state), options);
|
|
169
|
+
state !== false && _this.updateState(Object.assign({}, baseState, state), options);
|
|
170
170
|
};
|
|
171
171
|
try {
|
|
172
172
|
await this._layout.render(element, data, {
|
|
@@ -179,29 +179,15 @@ class ViewActor {
|
|
|
179
179
|
});
|
|
180
180
|
}
|
|
181
181
|
}
|
|
182
|
-
updateState(
|
|
183
|
-
let {
|
|
184
|
-
session,
|
|
185
|
-
status,
|
|
186
|
-
ongoing,
|
|
187
|
-
request,
|
|
188
|
-
meta,
|
|
189
|
-
error
|
|
190
|
-
} = _ref;
|
|
182
|
+
updateState(state) {
|
|
191
183
|
let {
|
|
192
184
|
silent = false
|
|
193
185
|
} = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
}
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
status,
|
|
200
|
-
ongoing,
|
|
201
|
-
request,
|
|
202
|
-
meta,
|
|
203
|
-
error
|
|
204
|
-
}));
|
|
186
|
+
// there might be error from notifyUpdate() call
|
|
187
|
+
const status = state.error ? _constants.STATUS.ERRONEOUS : state.status;
|
|
188
|
+
state = this._state = Object.freeze((0, _commons.trimObj)(Object.assign({}, state, {
|
|
189
|
+
status
|
|
190
|
+
})));
|
|
205
191
|
const {
|
|
206
192
|
role
|
|
207
193
|
} = this;
|
|
@@ -221,7 +207,7 @@ class ViewActor {
|
|
|
221
207
|
} = data,
|
|
222
208
|
rest = _objectWithoutPropertiesLoose(data, _excluded);
|
|
223
209
|
const sliced = Object.assign({
|
|
224
|
-
value:
|
|
210
|
+
value: this._mapping(data),
|
|
225
211
|
status,
|
|
226
212
|
data: value,
|
|
227
213
|
meta
|
|
@@ -300,4 +286,18 @@ function asMappingFunction(fn) {
|
|
|
300
286
|
default:
|
|
301
287
|
throw new Error(`Invalid mapping function: ${fn}`);
|
|
302
288
|
}
|
|
289
|
+
}
|
|
290
|
+
function getDataEmptyness(data) {
|
|
291
|
+
return isDataStatusRelevantToEmptyness(data) ? {
|
|
292
|
+
empty: !!isDateValueEmpty(data)
|
|
293
|
+
} : {};
|
|
294
|
+
}
|
|
295
|
+
function isDataStatusRelevantToEmptyness(data) {
|
|
296
|
+
return data.status === _constants.STATUS.READY && !data.ongoing;
|
|
297
|
+
}
|
|
298
|
+
function isDateValueEmpty(data) {
|
|
299
|
+
const {
|
|
300
|
+
value
|
|
301
|
+
} = data;
|
|
302
|
+
return value === undefined || (Array.isArray(value) || typeof value === 'string') && !value.length;
|
|
303
303
|
}
|
package/dist/cjs/actor/views.js
CHANGED
|
@@ -20,8 +20,7 @@ class ViewsActor {
|
|
|
20
20
|
workflow,
|
|
21
21
|
extensions,
|
|
22
22
|
layouts,
|
|
23
|
-
roles
|
|
24
|
-
rolesConfig = {},
|
|
23
|
+
roles,
|
|
25
24
|
options
|
|
26
25
|
} = _ref;
|
|
27
26
|
this._hub = hub;
|
|
@@ -29,13 +28,16 @@ class ViewsActor {
|
|
|
29
28
|
this._extensions = extensions;
|
|
30
29
|
this._layoutFactory = layouts;
|
|
31
30
|
this._options = options;
|
|
32
|
-
this.
|
|
31
|
+
this._roles = roles;
|
|
33
32
|
this._containers = new Map();
|
|
34
33
|
this._containerTracker = undefined;
|
|
35
34
|
this._views = {};
|
|
36
|
-
this._trackers = new Trackers(this, roles);
|
|
35
|
+
this._trackers = new Trackers(this, roles.members);
|
|
37
36
|
this._filters = new _filters.default(this);
|
|
38
|
-
for (const role of roles) {
|
|
37
|
+
for (const role of roles.members) {
|
|
38
|
+
if (role === _constants.ROLE.CONTAINER) {
|
|
39
|
+
continue;
|
|
40
|
+
}
|
|
39
41
|
this._views[role] = new _view.default(this, role);
|
|
40
42
|
}
|
|
41
43
|
(0, _commons.defineValues)(this, {
|
|
@@ -45,7 +47,9 @@ class ViewsActor {
|
|
|
45
47
|
window.addEventListener('resize', syncSize);
|
|
46
48
|
this._unsubscribes = [() => window.removeEventListener('resize', syncSize), hub.on(fields.data(), data => this.refresh({
|
|
47
49
|
data
|
|
48
|
-
})), options.on('trackers', () => this._syncTrackers()), options.on('layouts', () => this._syncLayouts())];
|
|
50
|
+
})), options.on('autocomplete', () => this._syncAutocompleteOptions()), options.on('pagination', () => this._syncPaginationOptions()), options.on('trackers', () => this._syncTrackers()), options.on('layouts', () => this._syncLayouts())];
|
|
51
|
+
this._syncAutocompleteOptions();
|
|
52
|
+
this._syncPaginationOptions();
|
|
49
53
|
this._syncTrackers();
|
|
50
54
|
this._syncLayouts();
|
|
51
55
|
}
|
|
@@ -146,7 +150,8 @@ class ViewsActor {
|
|
|
146
150
|
// TODO: try to omit if unchanged
|
|
147
151
|
const fn = () => this._layoutFactory.create(name, Object.assign({}, options, {
|
|
148
152
|
role,
|
|
149
|
-
workflow: this._workflowName
|
|
153
|
+
workflow: this._workflowName,
|
|
154
|
+
workflowOptions: this._getWorkflowOptions()
|
|
150
155
|
}));
|
|
151
156
|
if (role === _constants.ROLE.CONTAINER) {
|
|
152
157
|
for (const view of this._containers.values()) {
|
|
@@ -166,7 +171,8 @@ class ViewsActor {
|
|
|
166
171
|
const [name, options] = args;
|
|
167
172
|
return this._layoutFactory.create(name, Object.assign({}, options, {
|
|
168
173
|
role,
|
|
169
|
-
workflow: this._workflowName
|
|
174
|
+
workflow: this._workflowName,
|
|
175
|
+
workflowOptions: this._getWorkflowOptions()
|
|
170
176
|
}));
|
|
171
177
|
}
|
|
172
178
|
get(role) {
|
|
@@ -232,6 +238,18 @@ class ViewsActor {
|
|
|
232
238
|
}
|
|
233
239
|
return this._containerTracker;
|
|
234
240
|
}
|
|
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
|
+
}
|
|
235
253
|
_error(e) {
|
|
236
254
|
// TODO: hub trigger error event
|
|
237
255
|
console.error(e);
|
|
@@ -269,6 +287,9 @@ class Trackers {
|
|
|
269
287
|
constructor(views, roles) {
|
|
270
288
|
this._views = views;
|
|
271
289
|
for (const role of roles) {
|
|
290
|
+
if (role === _constants.ROLE.CONTAINER) {
|
|
291
|
+
continue;
|
|
292
|
+
}
|
|
272
293
|
Object.defineProperty(this, role, {
|
|
273
294
|
get: () => views.get(role).tracker
|
|
274
295
|
});
|
package/dist/cjs/constants.js
CHANGED
|
@@ -3,8 +3,10 @@
|
|
|
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.
|
|
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;
|
|
7
7
|
exports.isDataRole = isDataRole;
|
|
8
|
+
exports.isPerformanceEventType = isPerformanceEventType;
|
|
9
|
+
exports.isProductRole = isProductRole;
|
|
8
10
|
exports.validateEventType = validateEventType;
|
|
9
11
|
exports.validateTrackingStatus = validateTrackingStatus;
|
|
10
12
|
const ATTR_DATA_MISO_UNIT_ID = exports.ATTR_DATA_MISO_UNIT_ID = `data-miso-unit-id`;
|
|
@@ -30,34 +32,31 @@ const ROLE = exports.ROLE = Object.freeze({
|
|
|
30
32
|
AFFILIATION: 'affiliation',
|
|
31
33
|
KEYWORDS: 'keywords',
|
|
32
34
|
FACETS: 'facets',
|
|
33
|
-
|
|
35
|
+
TOTAL: 'total',
|
|
36
|
+
MORE: 'more',
|
|
34
37
|
ERROR: 'error'
|
|
35
38
|
});
|
|
36
|
-
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.
|
|
39
|
+
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]);
|
|
37
40
|
function isDataRole(role) {
|
|
38
41
|
return DATA_ROLE_SET.has(role);
|
|
39
42
|
}
|
|
40
|
-
const
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
CONTAINER: 'container',
|
|
45
|
-
BANNER: 'banner',
|
|
46
|
-
LIST: 'list',
|
|
47
|
-
QUERY: 'query',
|
|
48
|
-
RADIO: 'radio',
|
|
49
|
-
FILTERS: 'filters',
|
|
50
|
-
TEXT: 'text',
|
|
51
|
-
AFFILIATION: 'affiliation',
|
|
52
|
-
ERROR: 'error'
|
|
53
|
-
});
|
|
43
|
+
const PRODUCT_ROLE_SET = new Set([ROLE.PRODUCTS, ROLE.SOURCES, ROLE.RELATED_RESOURCES]);
|
|
44
|
+
function isProductRole(role) {
|
|
45
|
+
return PRODUCT_ROLE_SET.has(role);
|
|
46
|
+
}
|
|
54
47
|
const EVENT_TYPE = exports.EVENT_TYPE = Object.freeze({
|
|
55
48
|
IMPRESSION: 'impression',
|
|
56
49
|
VIEWABLE: 'viewable',
|
|
57
50
|
CLICK: 'click',
|
|
58
|
-
SUBMIT: 'submit'
|
|
51
|
+
SUBMIT: 'submit',
|
|
52
|
+
FEEDBACK: 'feedback'
|
|
59
53
|
});
|
|
60
|
-
const TRACKING_EVENT_TYPES = exports.TRACKING_EVENT_TYPES = [EVENT_TYPE.IMPRESSION, EVENT_TYPE.VIEWABLE, EVENT_TYPE.CLICK, EVENT_TYPE.SUBMIT];
|
|
54
|
+
const TRACKING_EVENT_TYPES = exports.TRACKING_EVENT_TYPES = [EVENT_TYPE.IMPRESSION, EVENT_TYPE.VIEWABLE, EVENT_TYPE.CLICK, EVENT_TYPE.SUBMIT, EVENT_TYPE.FEEDBACK];
|
|
55
|
+
const PERFORMANCE_EVENT_TYPES = exports.PERFORMANCE_EVENT_TYPES = [EVENT_TYPE.IMPRESSION, EVENT_TYPE.VIEWABLE, EVENT_TYPE.CLICK];
|
|
56
|
+
const PERFORMANCE_EVENT_TYPE_SET = new Set(PERFORMANCE_EVENT_TYPES);
|
|
57
|
+
function isPerformanceEventType(type) {
|
|
58
|
+
return PERFORMANCE_EVENT_TYPE_SET.has(type);
|
|
59
|
+
}
|
|
61
60
|
const TRACKING_STATUS = exports.TRACKING_STATUS = Object.freeze({
|
|
62
61
|
UNTRACKED: 'untracked',
|
|
63
62
|
TRACKING: 'tracking',
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.sources = exports.showMore = exports.showLess = exports.question = exports.keywords =
|
|
6
|
+
exports.total = exports.sources = exports.showMore = exports.showLess = exports.question = exports.keywords = void 0;
|
|
7
7
|
/**
|
|
8
8
|
* The phrase to display <miso-question>
|
|
9
9
|
*/
|
|
@@ -20,8 +20,8 @@ const sources = exports.sources = 'Sources';
|
|
|
20
20
|
const keywords = exports.keywords = 'You searched for “${value}”';
|
|
21
21
|
|
|
22
22
|
/**
|
|
23
|
-
* The phrase to display <miso-
|
|
23
|
+
* The phrase to display <miso-total>
|
|
24
24
|
*/
|
|
25
|
-
const
|
|
25
|
+
const total = exports.total = '${value} Results';
|
|
26
26
|
const showMore = exports.showMore = 'Show more';
|
|
27
27
|
const showLess = exports.showLess = 'Show less';
|