@miso.ai/client-sdk-ui 1.13.2-beta.0 → 1.14.0-beta.2

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.
Files changed (214) hide show
  1. package/dist/cjs/asset/svgs.js +15 -4
  2. package/dist/cjs/combo/ask/index.js +2 -2
  3. package/dist/cjs/constants.js +118 -98
  4. package/dist/cjs/defaults/ask/controls.js +1 -1
  5. package/dist/cjs/defaults/hybrid-search/answer-box.js +4 -4
  6. package/dist/cjs/defaults.js +169 -0
  7. package/dist/cjs/element/container/index.js +14 -0
  8. package/dist/cjs/element/container/miso-ask.js +3 -3
  9. package/dist/cjs/element/container/miso-conversation.js +21 -0
  10. package/dist/cjs/element/container/miso-explore.js +1 -1
  11. package/dist/cjs/element/container/miso-history.js +21 -0
  12. package/dist/cjs/element/container/miso-hybrid-search.js +1 -1
  13. package/dist/cjs/element/container/miso-recommendation.js +1 -1
  14. package/dist/cjs/element/container/miso-search.js +1 -1
  15. package/dist/cjs/element/context/miso-follow-ups.js +1 -1
  16. package/dist/cjs/element/role/index.js +42 -0
  17. package/dist/cjs/element/role/miso-messages.js +20 -0
  18. package/dist/cjs/element/role/miso-new-thread.js +20 -0
  19. package/dist/cjs/element/role/miso-rename.js +20 -0
  20. package/dist/cjs/element/role/miso-subscription.js +20 -0
  21. package/dist/cjs/element/role/miso-threads.js +20 -0
  22. package/dist/cjs/element/role/miso-title.js +20 -0
  23. package/dist/cjs/layout/affiliation/affiliation.js +1 -1
  24. package/dist/cjs/layout/banner/banner.js +2 -1
  25. package/dist/cjs/layout/button/button.js +130 -0
  26. package/dist/cjs/layout/button/checkbox.js +115 -0
  27. package/dist/cjs/layout/button/more-button.js +3 -3
  28. package/dist/cjs/layout/container/container.js +1 -1
  29. package/dist/cjs/layout/error/error.js +2 -1
  30. package/dist/cjs/layout/index.js +28 -0
  31. package/dist/cjs/layout/input/facets.js +4 -3
  32. package/dist/cjs/layout/input/option-list.js +3 -2
  33. package/dist/cjs/layout/input/search-box.js +42 -9
  34. package/dist/cjs/layout/input/select.js +2 -1
  35. package/dist/cjs/layout/list/cards.js +2 -1
  36. package/dist/cjs/layout/list/carousel.js +2 -1
  37. package/dist/cjs/layout/list/collection.js +5 -0
  38. package/dist/cjs/layout/list/gallery.js +2 -1
  39. package/dist/cjs/layout/list/horizontal.js +2 -1
  40. package/dist/cjs/layout/list/list.js +2 -1
  41. package/dist/cjs/layout/list/messages.js +346 -0
  42. package/dist/cjs/layout/list/threads.js +257 -0
  43. package/dist/cjs/layout/mixin/trackable.js +4 -5
  44. package/dist/cjs/layout/mixin/triggerable.js +2 -2
  45. package/dist/cjs/layout/radio/feedback.js +4 -3
  46. package/dist/cjs/layout/templates.js +70 -0
  47. package/dist/cjs/layout/text/text.js +2 -1
  48. package/dist/cjs/layout/text/typewriter/index.js +4 -2
  49. package/dist/cjs/plugin.js +43 -104
  50. package/dist/cjs/util/confirm.js +33 -0
  51. package/dist/cjs/util/modal.js +48 -0
  52. package/dist/cjs/util/prompt.js +47 -0
  53. package/dist/cjs/version.js +1 -1
  54. package/package.json +5 -4
  55. package/src/CLAUDE.md +48 -105
  56. package/src/asset/svgs.js +14 -3
  57. package/src/combo/ask/index.js +2 -2
  58. package/src/constants.js +37 -147
  59. package/src/defaults/ask/controls.js +1 -1
  60. package/src/defaults/hybrid-search/answer-box.js +2 -2
  61. package/src/defaults.js +107 -0
  62. package/src/element/container/index.js +2 -0
  63. package/src/element/container/miso-ask.js +3 -3
  64. package/src/element/container/miso-conversation.js +19 -0
  65. package/src/element/container/miso-explore.js +1 -1
  66. package/src/element/container/miso-history.js +19 -0
  67. package/src/element/container/miso-hybrid-search.js +1 -1
  68. package/src/element/container/miso-recommendation.js +1 -1
  69. package/src/element/container/miso-search.js +1 -1
  70. package/src/element/context/miso-follow-ups.js +1 -1
  71. package/src/element/role/index.js +6 -0
  72. package/src/element/role/miso-messages.js +16 -0
  73. package/src/element/role/miso-new-thread.js +16 -0
  74. package/src/element/role/miso-rename.js +16 -0
  75. package/src/element/role/miso-subscription.js +16 -0
  76. package/src/element/role/miso-threads.js +16 -0
  77. package/src/element/role/miso-title.js +16 -0
  78. package/src/layout/affiliation/affiliation.js +2 -2
  79. package/src/layout/banner/banner.js +2 -1
  80. package/src/layout/button/button.js +116 -0
  81. package/src/layout/button/checkbox.js +91 -0
  82. package/src/layout/button/more-button.js +3 -3
  83. package/src/layout/container/container.js +2 -2
  84. package/src/layout/error/error.js +2 -1
  85. package/src/layout/index.js +4 -0
  86. package/src/layout/input/facets.js +3 -2
  87. package/src/layout/input/option-list.js +3 -2
  88. package/src/layout/input/search-box.js +41 -6
  89. package/src/layout/input/select.js +2 -1
  90. package/src/layout/list/cards.js +2 -1
  91. package/src/layout/list/carousel.js +2 -1
  92. package/src/layout/list/collection.js +6 -1
  93. package/src/layout/list/gallery.js +2 -1
  94. package/src/layout/list/horizontal.js +2 -1
  95. package/src/layout/list/list.js +2 -1
  96. package/src/layout/list/messages.js +318 -0
  97. package/src/layout/list/threads.js +206 -0
  98. package/src/layout/mixin/trackable.js +2 -3
  99. package/src/layout/mixin/triggerable.js +1 -1
  100. package/src/layout/radio/feedback.js +3 -2
  101. package/src/layout/templates.js +62 -0
  102. package/src/layout/text/text.js +2 -1
  103. package/src/layout/text/typewriter/index.js +5 -3
  104. package/src/plugin.js +31 -117
  105. package/src/util/confirm.js +28 -0
  106. package/src/util/modal.js +49 -0
  107. package/src/util/prompt.js +42 -0
  108. package/src/version.js +1 -1
  109. package/dist/cjs/actor/data.js +0 -132
  110. package/dist/cjs/actor/feedback.js +0 -29
  111. package/dist/cjs/actor/fields.js +0 -57
  112. package/dist/cjs/actor/filters.js +0 -161
  113. package/dist/cjs/actor/hub.js +0 -57
  114. package/dist/cjs/actor/index.js +0 -73
  115. package/dist/cjs/actor/interactions.js +0 -36
  116. package/dist/cjs/actor/sessions.js +0 -25
  117. package/dist/cjs/actor/tracker-states.js +0 -61
  118. package/dist/cjs/actor/tracker.js +0 -109
  119. package/dist/cjs/actor/trackers.js +0 -52
  120. package/dist/cjs/actor/utils.js +0 -15
  121. package/dist/cjs/actor/view.js +0 -294
  122. package/dist/cjs/actor/views.js +0 -209
  123. package/dist/cjs/source.js +0 -27
  124. package/dist/cjs/util/proxy.js +0 -88
  125. package/dist/cjs/util/trackers.js +0 -88
  126. package/dist/cjs/workflow/affiliations.js +0 -140
  127. package/dist/cjs/workflow/answer-based.js +0 -337
  128. package/dist/cjs/workflow/ask.js +0 -319
  129. package/dist/cjs/workflow/asks.js +0 -150
  130. package/dist/cjs/workflow/autocompletable.js +0 -63
  131. package/dist/cjs/workflow/autocomplete.js +0 -120
  132. package/dist/cjs/workflow/base.js +0 -418
  133. package/dist/cjs/workflow/context.js +0 -19
  134. package/dist/cjs/workflow/explore.js +0 -210
  135. package/dist/cjs/workflow/explores.js +0 -21
  136. package/dist/cjs/workflow/hybrid-search-answer.js +0 -88
  137. package/dist/cjs/workflow/hybrid-search-views.js +0 -109
  138. package/dist/cjs/workflow/hybrid-search.js +0 -213
  139. package/dist/cjs/workflow/index.js +0 -41
  140. package/dist/cjs/workflow/options/api.js +0 -41
  141. package/dist/cjs/workflow/options/auto-query.js +0 -97
  142. package/dist/cjs/workflow/options/configurable.js +0 -45
  143. package/dist/cjs/workflow/options/data-processor.js +0 -20
  144. package/dist/cjs/workflow/options/filters.js +0 -15
  145. package/dist/cjs/workflow/options/index.js +0 -126
  146. package/dist/cjs/workflow/options/interactions.js +0 -41
  147. package/dist/cjs/workflow/options/layouts.js +0 -79
  148. package/dist/cjs/workflow/options/options.js +0 -156
  149. package/dist/cjs/workflow/options/pagination.js +0 -25
  150. package/dist/cjs/workflow/options/roles.js +0 -15
  151. package/dist/cjs/workflow/options/templates.js +0 -30
  152. package/dist/cjs/workflow/options/trackers.js +0 -83
  153. package/dist/cjs/workflow/options/utils.js +0 -33
  154. package/dist/cjs/workflow/processors.js +0 -607
  155. package/dist/cjs/workflow/recommendation.js +0 -57
  156. package/dist/cjs/workflow/recommendations.js +0 -18
  157. package/dist/cjs/workflow/search-based.js +0 -337
  158. package/dist/cjs/workflow/search.js +0 -64
  159. package/dist/cjs/workflow/unit.js +0 -57
  160. package/dist/cjs/workflow/units.js +0 -42
  161. package/dist/cjs/workflow/use-link.js +0 -49
  162. package/src/actor/data.js +0 -106
  163. package/src/actor/feedback.js +0 -28
  164. package/src/actor/fields.js +0 -51
  165. package/src/actor/filters.js +0 -149
  166. package/src/actor/hub.js +0 -47
  167. package/src/actor/index.js +0 -10
  168. package/src/actor/interactions.js +0 -32
  169. package/src/actor/sessions.js +0 -21
  170. package/src/actor/tracker-states.js +0 -57
  171. package/src/actor/tracker.js +0 -104
  172. package/src/actor/trackers.js +0 -45
  173. package/src/actor/utils.js +0 -7
  174. package/src/actor/view.js +0 -272
  175. package/src/actor/views.js +0 -224
  176. package/src/source.js +0 -17
  177. package/src/util/proxy.js +0 -81
  178. package/src/util/trackers.js +0 -84
  179. package/src/workflow/affiliations.js +0 -121
  180. package/src/workflow/answer-based.js +0 -312
  181. package/src/workflow/ask.js +0 -284
  182. package/src/workflow/asks.js +0 -143
  183. package/src/workflow/autocompletable.js +0 -67
  184. package/src/workflow/autocomplete.js +0 -114
  185. package/src/workflow/base.js +0 -396
  186. package/src/workflow/context.js +0 -16
  187. package/src/workflow/explore.js +0 -194
  188. package/src/workflow/explores.js +0 -18
  189. package/src/workflow/hybrid-search-answer.js +0 -73
  190. package/src/workflow/hybrid-search-views.js +0 -116
  191. package/src/workflow/hybrid-search.js +0 -230
  192. package/src/workflow/index.js +0 -5
  193. package/src/workflow/options/api.js +0 -31
  194. package/src/workflow/options/auto-query.js +0 -70
  195. package/src/workflow/options/configurable.js +0 -48
  196. package/src/workflow/options/data-processor.js +0 -15
  197. package/src/workflow/options/filters.js +0 -10
  198. package/src/workflow/options/index.js +0 -11
  199. package/src/workflow/options/interactions.js +0 -36
  200. package/src/workflow/options/layouts.js +0 -73
  201. package/src/workflow/options/options.js +0 -175
  202. package/src/workflow/options/pagination.js +0 -18
  203. package/src/workflow/options/roles.js +0 -12
  204. package/src/workflow/options/templates.js +0 -27
  205. package/src/workflow/options/trackers.js +0 -80
  206. package/src/workflow/options/utils.js +0 -26
  207. package/src/workflow/processors.js +0 -490
  208. package/src/workflow/recommendation.js +0 -63
  209. package/src/workflow/recommendations.js +0 -14
  210. package/src/workflow/search-based.js +0 -329
  211. package/src/workflow/search.js +0 -73
  212. package/src/workflow/unit.js +0 -51
  213. package/src/workflow/units.js +0 -43
  214. package/src/workflow/use-link.js +0 -41
@@ -1,418 +0,0 @@
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 _index = require("../actor/index.js");
9
- var sources = _interopRequireWildcard(require("../source.js"));
10
- var _constants = require("../constants.js");
11
- var _index2 = require("../layout/index.js");
12
- var _index3 = require("./options/index.js");
13
- var _processors = require("./processors.js");
14
- function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
15
- const DEFAULT_API_OPTIONS = Object.freeze({});
16
- const DEFAULT_LAYOUTS = Object.freeze({
17
- [_constants.ROLE.CONTAINER]: _index2.ContainerLayout.type,
18
- [_constants.ROLE.ERROR]: _index2.ErrorLayout.type
19
- });
20
- const DEFAULT_TRACKERS = Object.freeze({});
21
- const DEFAULT_OPTIONS = Object.freeze({
22
- api: DEFAULT_API_OPTIONS,
23
- layouts: DEFAULT_LAYOUTS,
24
- trackers: DEFAULT_TRACKERS
25
- });
26
- const ROLES_OPTIONS = Object.freeze({
27
- mappings: {
28
- [_constants.ROLE.ERROR]: data => data.error
29
- }
30
- });
31
- class Workflow extends _commons.Component {
32
- constructor(args) {
33
- super(args.name || 'workflow', args.plugin);
34
- let {
35
- context,
36
- plugin,
37
- client,
38
- defaults,
39
- options,
40
- extraOptions
41
- } = args;
42
- this._context = context;
43
- this._plugin = plugin = plugin || context._plugin;
44
- this._client = client = client || context._client;
45
- args = Object.freeze(Object.assign({}, args, {
46
- plugin,
47
- client
48
- }));
49
- this._name = args.name;
50
- this._roles = args.roles;
51
- this._extensions = plugin._getExtensions(client);
52
- this._defaults = defaults;
53
- this._options = options || new _index3.WorkflowOptions(context && context._options, defaults);
54
- this._extraOptions = extraOptions || {};
55
- this._hub = new _index.Hub({
56
- onUpdate: event => this._onHubUpdate(event),
57
- onEmit: event => this._onHubEmit(event)
58
- });
59
- this._sessionContext = new WeakMap();
60
- this._pluginContext = {
61
- processInteractionPasses: []
62
- };
63
- client._events.emit('workflow', this);
64
- this._initProperties(args);
65
- this._initActors(args);
66
- this._initSubscriptions(args);
67
- this._initSession(args);
68
- }
69
- _initProperties() {}
70
- _initActors({
71
- roles
72
- }) {
73
- const hub = this._hub;
74
- const client = this._client;
75
- const options = this._options;
76
- const extensions = this._extensions;
77
- const layouts = this._plugin.layouts;
78
- this._sessions = new _index.SessionMaker(hub);
79
- this._trackers = new _index.TrackersActor(hub, {
80
- roles,
81
- options
82
- });
83
- this._proxyTrackers = (0, _index.proxyTrackers)(this._trackers);
84
- this._data = new _index.DataActor(hub, Object.assign({
85
- source: sources.api(client),
86
- options
87
- }, this._extraOptions.api));
88
- this._views = new _index.ViewsActor(hub, {
89
- extensions,
90
- layouts,
91
- roles,
92
- options,
93
- workflow: this
94
- });
95
- this._interactions = new _index.InteractionsActor(hub, {
96
- client,
97
- options
98
- });
99
- }
100
- _initSubscriptions({
101
- roles
102
- }) {
103
- this._unsubscribes = [this._hub.on(_index.fields.session(), session => this._onSession(session)), this._hub.on(_index.fields.response(), data => this.updateData(data)), this._hub.on(_index.fields.tracker(), args => this._onTracker(args))];
104
- if (roles.main) {
105
- this._unsubscribes.push(this._hub.on(_index.fields.view(roles.main), state => this._onMainViewUpdate(state)));
106
- }
107
- }
108
- _initSession() {
109
- this.restart();
110
- }
111
- _getSessionContext(session) {
112
- let context = this._sessionContext.get(session);
113
- if (!context) {
114
- this._sessionContext.set(session, context = {});
115
- }
116
- return context;
117
- }
118
-
119
- // hub //
120
- _onHubUpdate(event) {
121
- this._runCallbacks(this._client.meta.parent._hubUpdateCallbacks, event);
122
- }
123
- _onHubEmit(event) {
124
- this._runCallbacks(this._client.meta.parent._hubEmitCallbacks, event);
125
- this._emitAsWorkflowEvent(event);
126
- }
127
- _emitAsWorkflowEvent({
128
- action: _action,
129
- name,
130
- state,
131
- silent
132
- }) {
133
- if (!silent) {
134
- this._emit(name, Object.assign({
135
- _action
136
- }, state));
137
- }
138
- }
139
-
140
- // properties //
141
- get uuid() {
142
- // TODO: review this
143
- return this.session && this.session.uuid;
144
- }
145
- get session() {
146
- return this._hub.states[_index.fields.session()];
147
- }
148
- get states() {
149
- return this._hub.states;
150
- }
151
- get status() {
152
- const data = this._hub.states[_index.fields.data()];
153
- return data && data.status;
154
- }
155
- get views() {
156
- return this._views.interface;
157
- }
158
-
159
- // lifecycle //
160
- restart() {
161
- this._emitInterruptEventIfNecessary();
162
- this._sessions.restart();
163
- return this;
164
- }
165
- _emitInterruptEventIfNecessary() {
166
- const {
167
- main
168
- } = this._roles;
169
- if (!main) {
170
- return;
171
- }
172
- const state = this._hub.states[_index.fields.view(main)] || {};
173
- if (state.session && state.status === _constants.STATUS.LOADING) {
174
- // it's interrupted by a new question
175
- this._emitLifecycleEvent('interrupt', state);
176
- this._emitLifecycleEvent('finally', state);
177
- }
178
- }
179
- _onSession(session) {
180
- this.updateData({
181
- session
182
- });
183
- }
184
- _onMainViewUpdate(state) {
185
- const {
186
- status
187
- } = state;
188
- const done = status === _constants.STATUS.READY;
189
- const erroneous = status === _constants.STATUS.ERRONEOUS;
190
- const eventName = erroneous ? 'error' : status;
191
- this._emitLifecycleEvent(eventName, state);
192
- if (done) {
193
- this._emitLifecycleEvent('done', state);
194
- }
195
- if (done || erroneous) {
196
- this._emitLifecycleEvent('finally', state);
197
- }
198
- }
199
- _shallEmitLifecycleEvent(name, {
200
- session
201
- }) {
202
- const context = this._getSessionContext(session);
203
- const events = context.lifecycleEvents || (context.lifecycleEvents = new Set());
204
- const emitted = events.has(name);
205
- events.add(name);
206
- return !emitted;
207
- }
208
- _emitLifecycleEvent(name, event) {
209
- if (!this._shallEmitLifecycleEvent(name, event)) {
210
- return;
211
- }
212
- this._emit(name, event);
213
- }
214
-
215
- // request //
216
- _request(options = {}) {
217
- this._writeRequestTimeToSession(Date.now(), options);
218
- const {
219
- session
220
- } = this;
221
- const request = (0, _index3.mergeApiOptions)(this._options.resolved.api, options);
222
- this.updateData({
223
- session,
224
- request
225
- });
226
- this._hub.update(_index.fields.request(), Object.assign({}, request, {
227
- session
228
- }));
229
- }
230
- _writeRequestTimeToSession(timestamp, options) {
231
- const {
232
- session
233
- } = this;
234
- session.meta.requestAt = timestamp;
235
- }
236
-
237
- // data //
238
- updateData(data) {
239
- if (!data) {
240
- throw new Error(`Data is required.`);
241
- }
242
- const {
243
- session
244
- } = data;
245
- if (!session) {
246
- throw new Error(`Session is required to update data.`);
247
- }
248
- if (!this.session) {
249
- throw new Error(`No session is created yet. Call workflow.restart() to start a new session.`);
250
- }
251
- if (session.uuid !== this.session.uuid) {
252
- return; // ignore data for old session or inactive session
253
- }
254
-
255
- // compare revision to omit outdated data, if any
256
- const revision = (0, _processors.getRevision)(data);
257
- if (!(0, _commons.isNullLike)(revision)) {
258
- const currentRevision = (0, _processors.getRevision)(this._hub.states[_index.fields.data()]);
259
- if (!(0, _commons.isNullLike)(currentRevision) && revision <= currentRevision) {
260
- return;
261
- }
262
- }
263
- this._updateData(data);
264
- return this;
265
- }
266
- _updateData(data) {
267
- const oldData = this._hub.states[_index.fields.data()];
268
- data = this._defaultProcessData(data, oldData);
269
- for (const process of this._options.resolved.dataProcessor) {
270
- data = process(data, oldData);
271
- }
272
- this._updateDataInHub(data, oldData);
273
- }
274
- _defaultProcessData(data, oldData) {
275
- data = (0, _processors.writeRequestFromPreviousData)(data, oldData);
276
- data = (0, _processors.writeDataStatus)(data);
277
- data = (0, _processors.writeMisoIdToMeta)(data);
278
- return data;
279
- }
280
- _updateDataInHub(data) {
281
- this._hub.update(_index.fields.data(), data);
282
- }
283
-
284
- // TODO: notifyViewUpdateAll()
285
-
286
- notifyViewUpdate(role, state) {
287
- state = Object.assign({
288
- status: _constants.STATUS.READY,
289
- session: this.session
290
- }, state);
291
- this._hub.update(_index.fields.view(role), state);
292
- return this;
293
- }
294
-
295
- // trackers //
296
- get trackers() {
297
- return this._proxyTrackers;
298
- }
299
- _onTracker(args) {
300
- const workflow = this;
301
- const data = this._hub.states[_index.fields.data()];
302
- const payload = this._buildInteraction(Object.assign({}, args, {
303
- data,
304
- workflow
305
- }));
306
- this._sendInteraction(payload);
307
- }
308
- _buildInteraction(args) {
309
- let payload = (0, _processors.buildBaseInteraction)(args);
310
- payload = this._defaultProcessInteraction(payload, args);
311
- for (const p of this._pluginContext.processInteractionPasses) {
312
- payload = p(payload, args);
313
- }
314
- const {
315
- preprocess = []
316
- } = this._options.resolved.interactions;
317
- for (const p of preprocess) {
318
- payload = p(payload, args);
319
- }
320
- return payload;
321
- }
322
- _defaultProcessInteraction(payload, args) {
323
- payload = this._writeApiInfoToInteraction(payload, args);
324
- payload = this._writeMisoIdToInteraction(payload, args);
325
- payload = (0, _processors.writeSessionInfoToInteraction)(payload, args);
326
- payload = (0, _processors.writeRequestInfoToInteraction)(payload, args);
327
- payload = (0, _processors.writeRequestMetadataToInteraction)(payload, args);
328
- payload = (0, _processors.writeAffiliationInfoToInteraction)(payload, args);
329
- return payload;
330
- }
331
- _writeApiInfoToInteraction(payload) {
332
- const {
333
- group,
334
- name
335
- } = this._options.resolved.api;
336
- return (0, _commons.mergeInteractions)(payload, {
337
- context: {
338
- custom_context: {
339
- api_group: group,
340
- api_name: name
341
- }
342
- }
343
- });
344
- }
345
- _writeMisoIdToInteraction(payload, args) {
346
- // TODO: ad-hoc, try to pass info from tracker
347
- const state = this._hub.states[_index.fields.view(args.role)] || {};
348
- const miso_id = state.meta && state.meta.miso_id || undefined;
349
- return miso_id ? (0, _commons.mergeInteractions)(payload, {
350
- miso_id
351
- }) : payload;
352
- }
353
- _sendInteraction(payload) {
354
- const {
355
- handle
356
- } = this._options.resolved.interactions;
357
- if (typeof handle === 'function') {
358
- handle(payload);
359
- } else {
360
- this._hub.trigger(_index.fields.interaction(), payload);
361
- }
362
- }
363
-
364
- // destroy //
365
- destroy(options) {
366
- this._emit('destroy');
367
- this._destroy(options);
368
- }
369
- get destroyed() {
370
- return !!this._destroyed;
371
- }
372
- _destroy({
373
- dom
374
- } = {}) {
375
- for (const unsubscribe of this._unsubscribes || []) {
376
- unsubscribe();
377
- }
378
- this._unsubscribes = [];
379
- this._views._destroy({
380
- dom
381
- });
382
- this._data._destroy();
383
- this._destroyed = true;
384
- }
385
-
386
- // helper //
387
- _runCallbacks(callbacks, event) {
388
- for (const callback of callbacks) {
389
- try {
390
- callback(Object.assign({
391
- workflow: this
392
- }, event));
393
- } catch (e) {
394
- this._error(e);
395
- }
396
- }
397
- }
398
- _emit(name, data) {
399
- this._events.emit(name, Object.assign({
400
- _event: name
401
- }, data));
402
- if (this._context) {
403
- this._context._events.emit(name, Object.assign({
404
- workflow: this,
405
- _event: name
406
- }, data));
407
- }
408
- }
409
- }
410
- exports.default = Workflow;
411
- (0, _index3.makeConfigurable)(Workflow.prototype);
412
- Object.assign(Workflow, {
413
- DEFAULT_API_OPTIONS,
414
- DEFAULT_LAYOUTS,
415
- DEFAULT_TRACKERS,
416
- DEFAULT_OPTIONS,
417
- ROLES_OPTIONS
418
- });
@@ -1,19 +0,0 @@
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 _index = require("./options/index.js");
9
- class WorkflowContext extends _commons.Component {
10
- constructor(name, plugin, client) {
11
- super(name, plugin);
12
- this._name = name;
13
- this._plugin = plugin;
14
- this._client = client;
15
- this._options = new _index.WorkflowContextOptions();
16
- }
17
- }
18
- exports.default = WorkflowContext;
19
- (0, _index.makeConfigurable)(WorkflowContext.prototype);
@@ -1,210 +0,0 @@
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 _unit = _interopRequireDefault(require("./unit.js"));
9
- var _index = require("../actor/index.js");
10
- var _constants = require("../constants.js");
11
- var _index2 = require("../layout/index.js");
12
- var _index3 = require("./options/index.js");
13
- var _useLink = require("./use-link.js");
14
- var _autocompletable = require("./autocompletable.js");
15
- const _excluded = ["value"];
16
- function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
17
- function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
18
- const DEFAULT_API_OPTIONS = Object.freeze(Object.assign({}, _unit.default.DEFAULT_API_OPTIONS, {
19
- group: _commons.API.GROUP.ASK,
20
- name: _commons.API.NAME.RELATED_QUESTIONS
21
- }));
22
- const DEFAULT_LAYOUTS = Object.freeze(Object.assign({}, _unit.default.DEFAULT_LAYOUTS, {
23
- [_constants.ROLE.RELATED_QUESTIONS]: [_index2.ListLayout.type, {
24
- itemType: 'question',
25
- link: {
26
- rel: 'noopener nofollow'
27
- }
28
- }],
29
- // TODO: should define by useLink()
30
- [_constants.ROLE.QUERY]: [_index2.SearchBoxLayout.type, {
31
- placeholder: 'Ask a question'
32
- }]
33
- }));
34
- const DEFAULT_TRACKERS = Object.freeze(Object.assign({}, _unit.default.DEFAULT_TRACKERS, {
35
- [_constants.ROLE.RELATED_QUESTIONS]: _index3.DEFAULT_TRACKER_OPTIONS,
36
- [_constants.ROLE.CONTAINER]: Object.assign({}, _index3.DEFAULT_TRACKER_OPTIONS, {
37
- itemless: true
38
- }),
39
- [_constants.ROLE.QUERY]: {
40
- [_constants.EVENT_TYPE.SUBMIT]: {
41
- active: true
42
- }
43
- }
44
- }));
45
- const DEFAULT_AUTOCOMPLETE_OPTIONS = Object.freeze({
46
- api: {
47
- group: _commons.API.GROUP.ASK,
48
- name: _commons.API.NAME.QUERY_SUGGESTION
49
- }
50
- });
51
- const DEFAULT_OPTIONS = Object.freeze(Object.assign({}, _unit.default.DEFAULT_OPTIONS, {
52
- api: DEFAULT_API_OPTIONS,
53
- layouts: DEFAULT_LAYOUTS,
54
- trackers: DEFAULT_TRACKERS,
55
- autocomplete: DEFAULT_AUTOCOMPLETE_OPTIONS
56
- }));
57
- const ROLES_OPTIONS = (0, _index3.mergeRolesOptions)(_unit.default.ROLES_OPTIONS, {
58
- main: _constants.ROLE.RELATED_QUESTIONS,
59
- members: Object.keys(DEFAULT_LAYOUTS)
60
- });
61
- class Explore extends _unit.default {
62
- constructor(context, id) {
63
- super({
64
- name: 'explore',
65
- context,
66
- roles: ROLES_OPTIONS,
67
- defaults: DEFAULT_OPTIONS,
68
- id
69
- });
70
- }
71
- _initProperties(args) {
72
- super._initProperties(args);
73
- this._initAutocomplete(args);
74
- this._productId = undefined;
75
- this._linkFn = undefined;
76
- }
77
- _initSubscriptions(args) {
78
- super._initSubscriptions(args);
79
- this._unsubscribes = [...this._unsubscribes, this._views.on(_constants.ROLE.RELATED_QUESTIONS, 'click', event => this._handleRelatedQuestionClick(event)), this._hub.on(_index.fields.query(), args => this._query(args))];
80
- }
81
-
82
- // configuration //
83
- set productId(value) {
84
- console.warning('DEPRECATED: use useApi() instead');
85
- this.useApi({
86
- product_id: value
87
- });
88
- }
89
- useApi(...args) {
90
- const options = (typeof args[0] === 'object' ? args[0] : args[1]) || {};
91
- const {
92
- product_id
93
- } = options;
94
- if (product_id) {
95
- this._productId = product_id;
96
- }
97
- return super.useApi(...args);
98
- }
99
- useLink(fn, options) {
100
- _useLink.UseLinkMixin.prototype.useLink.call(this, fn, options);
101
- // also put options to layouts
102
- if (options) {
103
- this.useLayouts({
104
- [_constants.ROLE.RELATED_QUESTIONS]: {
105
- link: options
106
- }
107
- });
108
- }
109
- return this;
110
- }
111
-
112
- // lifecycle //
113
- start({
114
- relatedQuestions = true
115
- } = {}) {
116
- if (this._linkFn === undefined) {
117
- throw new Error('Must define link mapping function with useLink(fn) before calling start()');
118
- }
119
- // in explore workflow, start() triggers query
120
- // TODO: we should still make the query lifecycle
121
- if (relatedQuestions) {
122
- this._request();
123
- } else {
124
- // TODO: ad-hoc
125
- const {
126
- session
127
- } = this;
128
- this.updateData({
129
- session,
130
- request: {},
131
- value: {
132
- related_questions: []
133
- }
134
- });
135
- }
136
- return this;
137
- }
138
- notifyViewUpdate(role = _constants.ROLE.RELATED_QUESTIONS, ...args) {
139
- super.notifyViewUpdate(role, ...args);
140
- return this;
141
- }
142
- _defaultProcessData(data, oldData) {
143
- data = super._defaultProcessData(data, oldData);
144
- data = this._addUrlToRelatedQuestions(data);
145
- return data;
146
- }
147
- _addUrlToRelatedQuestions(data) {
148
- const {
149
- value
150
- } = data;
151
- if (!value || !value.related_questions) {
152
- return data;
153
- }
154
- const [linkFn, linkOptions = {}] = this._linkFn || [];
155
- const getDisplayedUrl = text => linkFn && linkOptions.showUrl ? this._getSubmitUrl({
156
- q: text,
157
- generated: true
158
- }) : '#';
159
- const related_questions = value.related_questions.map(text => ({
160
- text,
161
- url: getDisplayedUrl(text)
162
- }));
163
- return Object.assign({}, data, {
164
- value: Object.assign({}, value, {
165
- related_questions
166
- })
167
- });
168
- }
169
- _handleRelatedQuestionClick(_ref) {
170
- let {
171
- value: question
172
- } = _ref,
173
- event = _objectWithoutPropertiesLoose(_ref, _excluded);
174
- this._events.emit('select', Object.freeze(Object.assign({}, event, {
175
- question
176
- })));
177
- const [linkFn, linkOptions = {}] = this._linkFn || [];
178
- if (!linkFn || !linkOptions.showUrl) {
179
- event.domEvent && event.domEvent.preventDefault();
180
- }
181
- if (linkFn && !linkOptions.showUrl) {
182
- this._submitToPage({
183
- q: question.text,
184
- generated: true
185
- });
186
- }
187
- }
188
- query(args) {
189
- if (!args.q) {
190
- throw new Error(`q is required in query() call`);
191
- }
192
- this._hub.update(_index.fields.query(), args);
193
- }
194
- _query(args) {
195
- this._submitToPage(Object.assign({}, args, {
196
- generated: false
197
- }));
198
- }
199
- _getSubmitUrl(args) {
200
- // TODO: if trending_questions -> qs = '_trending'
201
- let url = _useLink.UseLinkMixin.prototype._getSubmitUrl.call(this, args);
202
- if (!args.generated || !this._productId) {
203
- return url;
204
- }
205
- return `${url}&qs=${encodeURIComponent(this._productId)}`;
206
- }
207
- }
208
- exports.default = Explore;
209
- (0, _useLink.enableUseLink)(Explore.prototype);
210
- (0, _autocompletable.makeAutocompletable)(Explore.prototype);
@@ -1,21 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = void 0;
7
- var _units = _interopRequireDefault(require("./units.js"));
8
- var _explore = _interopRequireDefault(require("./explore.js"));
9
- var _autocompletable = require("./autocompletable.js");
10
- function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
11
- class Explores extends _units.default {
12
- constructor(plugin, client) {
13
- super('explores', plugin, client);
14
- this._initAutocompleteContext();
15
- }
16
- _create(unitId) {
17
- return new _explore.default(this, unitId);
18
- }
19
- }
20
- exports.default = Explores;
21
- (0, _autocompletable.makeAutocompletableContext)(Explores.prototype);