@miso.ai/client-sdk-ui 1.11.0-beta.11 → 1.11.0-beta.12
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/version.js +1 -1
- package/dist/cjs/workflow/answer-based.js +3 -18
- package/dist/cjs/workflow/explore.js +25 -30
- package/dist/cjs/workflow/hybrid-search.js +2 -2
- package/dist/cjs/workflow/use-link.js +44 -0
- package/package.json +2 -2
- package/src/version.js +1 -1
- package/src/workflow/answer-based.js +4 -19
- package/src/workflow/explore.js +18 -25
- package/src/workflow/hybrid-search.js +2 -2
- package/src/workflow/use-link.js +40 -0
package/dist/cjs/version.js
CHANGED
|
@@ -12,6 +12,7 @@ var _index2 = require("../layout/index.js");
|
|
|
12
12
|
var _index3 = require("../affiliation/index.js");
|
|
13
13
|
var _options = require("./options.js");
|
|
14
14
|
var _processors = require("./processors.js");
|
|
15
|
+
var _useLink = require("./use-link.js");
|
|
15
16
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
16
17
|
const DEFAULT_API_OPTIONS = Object.freeze(Object.assign({}, _base.default.DEFAULT_API_OPTIONS, {
|
|
17
18
|
group: _commons.API.GROUP.ASK,
|
|
@@ -84,15 +85,6 @@ class AnswerBasedWorkflow extends _base.default {
|
|
|
84
85
|
this._unsubscribes = [...this._unsubscribes, this._hub.on(_index.fields.query(), args => this._query(args)), this._views.get(_constants.ROLE.ANSWER).on('citation-click', event => this._onCitationClick(event))];
|
|
85
86
|
}
|
|
86
87
|
|
|
87
|
-
// configuration //
|
|
88
|
-
useLink(fn) {
|
|
89
|
-
if (typeof fn !== 'function' && fn !== false) {
|
|
90
|
-
throw new Error('useLink(fn) expects fn to be a function or false');
|
|
91
|
-
}
|
|
92
|
-
this._linkFn = fn;
|
|
93
|
-
return this;
|
|
94
|
-
}
|
|
95
|
-
|
|
96
88
|
// lifecycle //
|
|
97
89
|
restart() {
|
|
98
90
|
// clear question id from previous session
|
|
@@ -166,7 +158,7 @@ class AnswerBasedWorkflow extends _base.default {
|
|
|
166
158
|
_query() {
|
|
167
159
|
let args = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
168
160
|
if (this._linkFn) {
|
|
169
|
-
this.
|
|
161
|
+
this._submitToPage(args);
|
|
170
162
|
return;
|
|
171
163
|
}
|
|
172
164
|
// start a new session
|
|
@@ -181,14 +173,6 @@ class AnswerBasedWorkflow extends _base.default {
|
|
|
181
173
|
payload
|
|
182
174
|
});
|
|
183
175
|
}
|
|
184
|
-
_submit(args) {
|
|
185
|
-
if (!this._linkFn) {
|
|
186
|
-
return;
|
|
187
|
-
}
|
|
188
|
-
// TODO: we want a submit event, but only with linkFn
|
|
189
|
-
const url = this._linkFn(args.q);
|
|
190
|
-
window.open(url, '_blank');
|
|
191
|
-
}
|
|
192
176
|
_writeQuestionSourceToSession(args) {
|
|
193
177
|
this.session.meta.question_source = args.qs || _constants.ORGANIC_QUESTION_SOURCE; // might be null, not undefined
|
|
194
178
|
}
|
|
@@ -323,6 +307,7 @@ class AnswerBasedWorkflow extends _base.default {
|
|
|
323
307
|
}
|
|
324
308
|
}
|
|
325
309
|
exports.default = AnswerBasedWorkflow;
|
|
310
|
+
(0, _useLink.enableUseLink)(AnswerBasedWorkflow.prototype);
|
|
326
311
|
Object.assign(AnswerBasedWorkflow, {
|
|
327
312
|
DEFAULT_API_OPTIONS,
|
|
328
313
|
DEFAULT_AUTOCOMPLETE_OPTIONS,
|
|
@@ -10,6 +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 _options = require("./options.js");
|
|
13
|
+
var _useLink = require("./use-link.js");
|
|
13
14
|
const _excluded = ["value"];
|
|
14
15
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
15
16
|
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; }
|
|
@@ -61,7 +62,7 @@ class Explore extends _base.default {
|
|
|
61
62
|
}
|
|
62
63
|
_initSubscriptions(args) {
|
|
63
64
|
super._initSubscriptions(args);
|
|
64
|
-
this._unsubscribes = [...this._unsubscribes, this._views.get(_constants.ROLE.RELATED_QUESTIONS).on('click', event => this._handleRelatedQuestionClick(event)), this._hub.on(_index.fields.query(), args => this.
|
|
65
|
+
this._unsubscribes = [...this._unsubscribes, this._views.get(_constants.ROLE.RELATED_QUESTIONS).on('click', event => this._handleRelatedQuestionClick(event)), this._hub.on(_index.fields.query(), args => this._query(args))];
|
|
65
66
|
}
|
|
66
67
|
|
|
67
68
|
// configuration //
|
|
@@ -80,13 +81,6 @@ class Explore extends _base.default {
|
|
|
80
81
|
}
|
|
81
82
|
return super.useApi(options);
|
|
82
83
|
}
|
|
83
|
-
useLink(fn) {
|
|
84
|
-
if (typeof fn !== 'function' && fn !== false) {
|
|
85
|
-
throw new Error('useLink(fn) expects fn to be a function or false');
|
|
86
|
-
}
|
|
87
|
-
this._linkFn = fn;
|
|
88
|
-
return this;
|
|
89
|
-
}
|
|
90
84
|
|
|
91
85
|
// lifecycle //
|
|
92
86
|
start() {
|
|
@@ -94,7 +88,7 @@ class Explore extends _base.default {
|
|
|
94
88
|
relatedQuestions = true
|
|
95
89
|
} = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
96
90
|
if (this._linkFn === undefined) {
|
|
97
|
-
throw new Error('
|
|
91
|
+
throw new Error('Must define link mapping function with useLink(fn) before calling start()');
|
|
98
92
|
}
|
|
99
93
|
// in explore workflow, start() triggers query
|
|
100
94
|
// TODO: we should still make the query lifecycle
|
|
@@ -125,16 +119,24 @@ class Explore extends _base.default {
|
|
|
125
119
|
}
|
|
126
120
|
_defaultProcessData(data) {
|
|
127
121
|
data = super._defaultProcessData(data);
|
|
128
|
-
|
|
122
|
+
data = this._addUrlToRelatedQuestions(data);
|
|
123
|
+
return data;
|
|
124
|
+
}
|
|
125
|
+
_addUrlToRelatedQuestions(data) {
|
|
126
|
+
const {
|
|
129
127
|
value
|
|
130
128
|
} = data;
|
|
131
|
-
if (!value) {
|
|
129
|
+
if (!value || !value.related_questions) {
|
|
132
130
|
return data;
|
|
133
131
|
}
|
|
134
|
-
|
|
135
|
-
const related_questions = value.related_questions.map(
|
|
132
|
+
const linkFn = this._linkFn && this._linkFn[0];
|
|
133
|
+
const related_questions = value.related_questions.map(linkFn ? text => ({
|
|
136
134
|
text,
|
|
137
|
-
url: this.
|
|
135
|
+
url: this._getSubmitUrl({
|
|
136
|
+
q: text
|
|
137
|
+
}, {
|
|
138
|
+
generated: true
|
|
139
|
+
})
|
|
138
140
|
}) : text => ({
|
|
139
141
|
text
|
|
140
142
|
}));
|
|
@@ -159,26 +161,19 @@ class Explore extends _base.default {
|
|
|
159
161
|
}
|
|
160
162
|
this._hub.update(_index.fields.query(), args);
|
|
161
163
|
}
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
q
|
|
165
|
-
} = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
166
|
-
if (!this._linkFn) {
|
|
167
|
-
return;
|
|
168
|
-
}
|
|
169
|
-
const url = this._getAnswersUrl(q);
|
|
170
|
-
window.open(url, '_blank');
|
|
164
|
+
_query(args) {
|
|
165
|
+
this._submitToPage(args);
|
|
171
166
|
}
|
|
172
|
-
|
|
173
|
-
let
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
const url = this._linkFn(text);
|
|
167
|
+
_getSubmitUrl(args) {
|
|
168
|
+
let {
|
|
169
|
+
generated = false
|
|
170
|
+
} = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
171
|
+
let url = _useLink.UseLinkMixin.prototype._getSubmitUrl.call(this, args);
|
|
178
172
|
if (!generated || !this._productId) {
|
|
179
173
|
return url;
|
|
180
174
|
}
|
|
181
175
|
return `${url}&qs=${encodeURIComponent(this._productId)}`;
|
|
182
176
|
}
|
|
183
177
|
}
|
|
184
|
-
exports.default = Explore;
|
|
178
|
+
exports.default = Explore;
|
|
179
|
+
(0, _useLink.enableUseLink)(Explore.prototype);
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.UseLinkMixin = void 0;
|
|
7
|
+
exports.enableUseLink = enableUseLink;
|
|
8
|
+
var _commons = require("@miso.ai/commons");
|
|
9
|
+
function enableUseLink(prototype) {
|
|
10
|
+
(0, _commons.mixin)(prototype, UseLinkMixin.prototype);
|
|
11
|
+
}
|
|
12
|
+
class UseLinkMixin {
|
|
13
|
+
useLink(fn) {
|
|
14
|
+
let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
15
|
+
if (typeof fn !== 'function' && fn !== false) {
|
|
16
|
+
throw new Error('useLink(fn) expects fn to be a function or false');
|
|
17
|
+
}
|
|
18
|
+
this._linkFn = fn ? [fn, options] : false;
|
|
19
|
+
return this;
|
|
20
|
+
}
|
|
21
|
+
_submitToPage() {
|
|
22
|
+
let args = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
23
|
+
if (!this._linkFn) {
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
// TODO: we want a submit event
|
|
27
|
+
const url = this._getSubmitUrl(args);
|
|
28
|
+
const [_, options = {}] = this._linkFn;
|
|
29
|
+
if (options.open === false) {
|
|
30
|
+
window.location.href = url;
|
|
31
|
+
} else {
|
|
32
|
+
const target = options.target || '_blank';
|
|
33
|
+
const windowFeatures = options.windowFeatures || '';
|
|
34
|
+
window.open(url, target, windowFeatures);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
_getSubmitUrl(args) {
|
|
38
|
+
if (!this._linkFn) {
|
|
39
|
+
throw new Error('useLink(fn) must be called before _getSubmitUrl()');
|
|
40
|
+
}
|
|
41
|
+
return this._linkFn[0](args.q);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
exports.UseLinkMixin = UseLinkMixin;
|
package/package.json
CHANGED
package/src/version.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export default '1.11.0-beta.
|
|
1
|
+
export default '1.11.0-beta.12';
|
|
@@ -6,6 +6,7 @@ import { SearchBoxLayout, TextLayout, ListLayout, TypewriterLayout, FeedbackLayo
|
|
|
6
6
|
import { processData as processAffiliationData } from '../affiliation/index.js';
|
|
7
7
|
import { mergeRolesOptions } from './options.js';
|
|
8
8
|
import { writeAnswerStageToMeta, mergeInteraction } from './processors.js';
|
|
9
|
+
import { enableUseLink } from './use-link.js';
|
|
9
10
|
|
|
10
11
|
const DEFAULT_API_OPTIONS = Object.freeze({
|
|
11
12
|
...Workflow.DEFAULT_API_OPTIONS,
|
|
@@ -80,15 +81,6 @@ export default class AnswerBasedWorkflow extends Workflow {
|
|
|
80
81
|
];
|
|
81
82
|
}
|
|
82
83
|
|
|
83
|
-
// configuration //
|
|
84
|
-
useLink(fn) {
|
|
85
|
-
if (typeof fn !== 'function' && fn !== false) {
|
|
86
|
-
throw new Error('useLink(fn) expects fn to be a function or false');
|
|
87
|
-
}
|
|
88
|
-
this._linkFn = fn;
|
|
89
|
-
return this;
|
|
90
|
-
}
|
|
91
|
-
|
|
92
84
|
// lifecycle //
|
|
93
85
|
restart() {
|
|
94
86
|
// clear question id from previous session
|
|
@@ -154,7 +146,7 @@ export default class AnswerBasedWorkflow extends Workflow {
|
|
|
154
146
|
|
|
155
147
|
_query(args = {}) {
|
|
156
148
|
if (this._linkFn) {
|
|
157
|
-
this.
|
|
149
|
+
this._submitToPage(args);
|
|
158
150
|
return;
|
|
159
151
|
}
|
|
160
152
|
// start a new session
|
|
@@ -168,15 +160,6 @@ export default class AnswerBasedWorkflow extends Workflow {
|
|
|
168
160
|
this._request({ payload });
|
|
169
161
|
}
|
|
170
162
|
|
|
171
|
-
_submit(args) {
|
|
172
|
-
if (!this._linkFn) {
|
|
173
|
-
return;
|
|
174
|
-
}
|
|
175
|
-
// TODO: we want a submit event, but only with linkFn
|
|
176
|
-
const url = this._linkFn(args.q);
|
|
177
|
-
window.open(url, '_blank');
|
|
178
|
-
}
|
|
179
|
-
|
|
180
163
|
_writeQuestionSourceToSession(args) {
|
|
181
164
|
this.session.meta.question_source = args.qs || ORGANIC_QUESTION_SOURCE; // might be null, not undefined
|
|
182
165
|
}
|
|
@@ -294,6 +277,8 @@ export default class AnswerBasedWorkflow extends Workflow {
|
|
|
294
277
|
|
|
295
278
|
}
|
|
296
279
|
|
|
280
|
+
enableUseLink(AnswerBasedWorkflow.prototype);
|
|
281
|
+
|
|
297
282
|
Object.assign(AnswerBasedWorkflow, {
|
|
298
283
|
DEFAULT_API_OPTIONS,
|
|
299
284
|
DEFAULT_AUTOCOMPLETE_OPTIONS,
|
package/src/workflow/explore.js
CHANGED
|
@@ -4,6 +4,7 @@ import { fields } from '../actor/index.js';
|
|
|
4
4
|
import { ROLE, EVENT_TYPE } from '../constants.js';
|
|
5
5
|
import { ListLayout, SearchBoxLayout } from '../layout/index.js';
|
|
6
6
|
import { mergeRolesOptions } from './options.js';
|
|
7
|
+
import { enableUseLink, UseLinkMixin } from './use-link.js';
|
|
7
8
|
|
|
8
9
|
const DEFAULT_API_OPTIONS = Object.freeze({
|
|
9
10
|
...Workflow.DEFAULT_API_OPTIONS,
|
|
@@ -61,7 +62,7 @@ export default class Explore extends Workflow {
|
|
|
61
62
|
this._unsubscribes = [
|
|
62
63
|
...this._unsubscribes,
|
|
63
64
|
this._views.get(ROLE.RELATED_QUESTIONS).on('click', event => this._handleRelatedQuestionClick(event)),
|
|
64
|
-
this._hub.on(fields.query(), args => this.
|
|
65
|
+
this._hub.on(fields.query(), args => this._query(args)),
|
|
65
66
|
];
|
|
66
67
|
}
|
|
67
68
|
|
|
@@ -81,18 +82,10 @@ export default class Explore extends Workflow {
|
|
|
81
82
|
return super.useApi(options);
|
|
82
83
|
}
|
|
83
84
|
|
|
84
|
-
useLink(fn) {
|
|
85
|
-
if (typeof fn !== 'function' && fn !== false) {
|
|
86
|
-
throw new Error('useLink(fn) expects fn to be a function or false');
|
|
87
|
-
}
|
|
88
|
-
this._linkFn = fn;
|
|
89
|
-
return this;
|
|
90
|
-
}
|
|
91
|
-
|
|
92
85
|
// lifecycle //
|
|
93
86
|
start({ relatedQuestions = true } = {}) {
|
|
94
87
|
if (this._linkFn === undefined) {
|
|
95
|
-
throw new Error('
|
|
88
|
+
throw new Error('Must define link mapping function with useLink(fn) before calling start()');
|
|
96
89
|
}
|
|
97
90
|
// in explore workflow, start() triggers query
|
|
98
91
|
// TODO: we should still make the query lifecycle
|
|
@@ -113,12 +106,17 @@ export default class Explore extends Workflow {
|
|
|
113
106
|
|
|
114
107
|
_defaultProcessData(data) {
|
|
115
108
|
data = super._defaultProcessData(data);
|
|
116
|
-
|
|
117
|
-
|
|
109
|
+
data = this._addUrlToRelatedQuestions(data);
|
|
110
|
+
return data;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
_addUrlToRelatedQuestions(data) {
|
|
114
|
+
const { value } = data;
|
|
115
|
+
if (!value || !value.related_questions) {
|
|
118
116
|
return data;
|
|
119
117
|
}
|
|
120
|
-
|
|
121
|
-
const related_questions = value.related_questions.map(
|
|
118
|
+
const linkFn = this._linkFn && this._linkFn[0];
|
|
119
|
+
const related_questions = value.related_questions.map(linkFn ? (text => ({ text, url: this._getSubmitUrl({ q: text }, { generated: true }) })) : (text => ({ text })));
|
|
122
120
|
return {
|
|
123
121
|
...data,
|
|
124
122
|
value: {
|
|
@@ -139,19 +137,12 @@ export default class Explore extends Workflow {
|
|
|
139
137
|
this._hub.update(fields.query(), args);
|
|
140
138
|
}
|
|
141
139
|
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
return;
|
|
145
|
-
}
|
|
146
|
-
const url = this._getAnswersUrl(q);
|
|
147
|
-
window.open(url, '_blank');
|
|
140
|
+
_query(args) {
|
|
141
|
+
this._submitToPage(args);
|
|
148
142
|
}
|
|
149
143
|
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
return;
|
|
153
|
-
}
|
|
154
|
-
const url = this._linkFn(text);
|
|
144
|
+
_getSubmitUrl(args, { generated = false } = {}) {
|
|
145
|
+
let url = UseLinkMixin.prototype._getSubmitUrl.call(this, args);
|
|
155
146
|
if (!generated || !this._productId) {
|
|
156
147
|
return url;
|
|
157
148
|
}
|
|
@@ -159,3 +150,5 @@ export default class Explore extends Workflow {
|
|
|
159
150
|
}
|
|
160
151
|
|
|
161
152
|
}
|
|
153
|
+
|
|
154
|
+
enableUseLink(Explore.prototype);
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { mixin } from '@miso.ai/commons';
|
|
2
|
+
|
|
3
|
+
export function enableUseLink(prototype) {
|
|
4
|
+
mixin(prototype, UseLinkMixin.prototype);
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
export class UseLinkMixin {
|
|
8
|
+
|
|
9
|
+
useLink(fn, options = {}) {
|
|
10
|
+
if (typeof fn !== 'function' && fn !== false) {
|
|
11
|
+
throw new Error('useLink(fn) expects fn to be a function or false');
|
|
12
|
+
}
|
|
13
|
+
this._linkFn = fn ? [fn, options] : false;
|
|
14
|
+
return this;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
_submitToPage(args = {}) {
|
|
18
|
+
if (!this._linkFn) {
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
// TODO: we want a submit event
|
|
22
|
+
const url = this._getSubmitUrl(args);
|
|
23
|
+
const [_, options = {}] = this._linkFn;
|
|
24
|
+
if (options.open === false) {
|
|
25
|
+
window.location.href = url;
|
|
26
|
+
} else {
|
|
27
|
+
const target = options.target || '_blank';
|
|
28
|
+
const windowFeatures = options.windowFeatures || '';
|
|
29
|
+
window.open(url, target, windowFeatures);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
_getSubmitUrl(args) {
|
|
34
|
+
if (!this._linkFn) {
|
|
35
|
+
throw new Error('useLink(fn) must be called before _getSubmitUrl()');
|
|
36
|
+
}
|
|
37
|
+
return this._linkFn[0](args.q);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
}
|