@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,329 +0,0 @@
1
- import { API, asArray, trimObj, mergeInteractions } from '@miso.ai/commons';
2
- import Workflow from './base.js';
3
- import { fields } from '../actor/index.js';
4
- import { STATUS, ROLE, WORKFLOW_CONFIGURABLE, REQUEST_TYPE } from '../constants.js';
5
- import { SearchBoxLayout, ListLayout, TextLayout, FacetsLayout, SelectLayout, MoreButtonLayout } from '../layout/index.js';
6
- import { mappingSortData, writeKeywordsToData, retainFacetCountsInData, writeExhaustionToData, writeMisoIdAsRootMisoId, concatItemsFromMoreResponse } from './processors.js';
7
- import { mergeRolesOptions, autoQuery as autoQueryFn, updateQueryParametersInUrl, makeConfigurable, DEFAULT_TRACKER_OPTIONS } from './options/index.js';
8
- import { enableUseLink } from './use-link.js';
9
-
10
- const DEFAULT_ROWS = 10;
11
- const DEFAULT_PAGE_LIMIT = 10;
12
-
13
- const DEFAULT_API_OPTIONS = Object.freeze({
14
- ...Workflow.DEFAULT_API_OPTIONS,
15
- group: API.GROUP.SEARCH,
16
- payload: {
17
- ...Workflow.DEFAULT_API_OPTIONS.payload,
18
- fl: ['cover_image', 'url', 'created_at', 'updated_at', 'published_at', 'title'],
19
- rows: DEFAULT_ROWS,
20
- },
21
- });
22
-
23
- function totalContent(layout, { value }) {
24
- if (value === undefined) {
25
- return '';
26
- }
27
- const { formatNumber } = layout.templates.helpers;
28
- const formatted = formatNumber(value);
29
- const label = value === 1 ? 'result' : 'results';
30
- return `${formatted} ${label}`;
31
- }
32
-
33
- const DEFAULT_LAYOUTS = Object.freeze({
34
- ...Workflow.DEFAULT_LAYOUTS,
35
- [ROLE.QUERY]: [SearchBoxLayout.type],
36
- [ROLE.PRODUCTS]: [ListLayout.type, { incremental: true, infiniteScroll: true }],
37
- [ROLE.KEYWORDS]: [TextLayout.type, { raw: true }],
38
- [ROLE.TOTAL]: [TextLayout.type, { raw: true, templates: { content: totalContent } }],
39
- [ROLE.FACETS]: [FacetsLayout.type],
40
- [ROLE.SORT]: [SelectLayout.type],
41
- [ROLE.MORE]: [MoreButtonLayout.type],
42
- });
43
-
44
- const DEFAULT_TRACKERS = Object.freeze({
45
- ...Workflow.DEFAULT_TRACKERS,
46
- [ROLE.PRODUCTS]: DEFAULT_TRACKER_OPTIONS,
47
- });
48
-
49
- const DEFAULT_PAGINATION = Object.freeze({
50
- active: false,
51
- mode: 'infiniteScroll',
52
- pageLimit: 10,
53
- });
54
-
55
- const DEFAULT_OPTIONS = Object.freeze({
56
- ...Workflow.DEFAULT_OPTIONS,
57
- api: DEFAULT_API_OPTIONS,
58
- layouts: DEFAULT_LAYOUTS,
59
- trackers: DEFAULT_TRACKERS,
60
- pagination: DEFAULT_PAGINATION,
61
- });
62
-
63
- const ROLES_OPTIONS = mergeRolesOptions(Workflow.ROLES_OPTIONS, {
64
- main: ROLE.PRODUCTS,
65
- members: Object.keys(DEFAULT_LAYOUTS),
66
- mappings: {
67
- [ROLE.FACETS]: 'facet_counts',
68
- [ROLE.SORT]: mappingSortData,
69
- },
70
- });
71
-
72
- export default class SearchBasedWorkflow extends Workflow {
73
-
74
- _initSubscriptions(args) {
75
- super._initSubscriptions(args);
76
- this._unsubscribes = [
77
- ...this._unsubscribes,
78
- this._hub.on(fields.query(), args => this._query(args)),
79
- this._hub.on(fields.filters(), () => this._refine()),
80
- this._hub.on(fields.more(), () => this._more()),
81
- this._views.on(ROLE.SORT, 'select', event => this._handleSortSelect(event)),
82
- ];
83
- }
84
-
85
- restart() {
86
- super.restart();
87
- this._page = 0;
88
- }
89
-
90
- // properties //
91
- get exhausted() {
92
- const data = this._hub.states[fields.data()];
93
- return !!(data && data.meta && data.meta.exhausted);
94
- }
95
-
96
- get page() {
97
- return this._page;
98
- }
99
-
100
- // query //
101
- autoQuery(options = {}) {
102
- autoQueryFn.call(this, options);
103
- }
104
-
105
- query(args) {
106
- if (!args.q) {
107
- throw new Error(`q is required in query() call`);
108
- }
109
- this._hub.update(fields.query(), args);
110
- }
111
-
112
- _query(args) {
113
- if (this._linkFn) {
114
- this._submitToPage(args);
115
- return;
116
- }
117
- const type = REQUEST_TYPE.QUERY;
118
-
119
- // reset filters view
120
- this._views.filters.reset({ silent: true });
121
-
122
- // start a new session
123
- this.restart({ type });
124
-
125
- // payload
126
- const payload = this._buildPayload(args, type);
127
-
128
- this._request({ payload, type });
129
- }
130
-
131
- _refine() {
132
- const type = REQUEST_TYPE.REFINE;
133
-
134
- // remember current facet_counts
135
- const { facet_counts } = this._hub.states[fields.data()].value || {};
136
- this._currentFacetCounts = facet_counts;
137
-
138
- // start a new session
139
- this.restart({ type });
140
-
141
- // payload
142
- const query = this._getQuery();
143
- const payload = this._buildPayload(query, type);
144
-
145
- this._request({ payload, type });
146
- }
147
-
148
- // TODO: expose API
149
- _more() {
150
- // if still loading, complain
151
- if (this.status !== STATUS.READY) {
152
- throw new Error(`Can not call more() while loading.`);
153
- }
154
- // no more pages, ignore
155
- if (this.exhausted || this._page >= DEFAULT_PAGE_LIMIT - 1) {
156
- return;
157
- }
158
- // don't create a new session!
159
-
160
- this._page++;
161
-
162
- // payload
163
- const type = REQUEST_TYPE.MORE;
164
- const query = this._getQuery();
165
- const payload = this._buildPayload(query, type);
166
-
167
- this._request({ payload, type });
168
- }
169
-
170
- _getQuery() {
171
- return this._hub.states[fields.query()];
172
- }
173
-
174
- _getPageSize() {
175
- return this._options.resolved.api.payload.rows;
176
- }
177
-
178
- _buildPayload(payload, type) {
179
- payload = this._writeFiltersToPayload(payload);
180
- payload = this._writePageInfoToPayload(payload);
181
- if (type === REQUEST_TYPE.MORE) {
182
- payload = this._processPayloadForMoreRequest(payload);
183
- }
184
- return payload;
185
- }
186
-
187
- _writeFiltersToPayload(payload) {
188
- const filters = this._hub.states[fields.filters()];
189
- const { facets, sort } = filters || {};
190
- return trimObj({
191
- ...payload,
192
- facet_filters: this._buildFacetFilters(facets),
193
- order_by: this._buildOrderBy(sort),
194
- });
195
- }
196
-
197
- _buildFacetFilters(facets) {
198
- if (!facets) {
199
- return undefined;
200
- }
201
- const filters = {};
202
- for (const field in facets) {
203
- const values = facets[field];
204
- if (!values || !values.length) {
205
- continue; // just in case
206
- }
207
- filters[field] = {
208
- terms: values,
209
- };
210
- }
211
- return Object.keys(filters).length ? filters : undefined;
212
- }
213
-
214
- _buildOrderBy(sort) {
215
- if (!sort) {
216
- return undefined;
217
- }
218
- return asArray(sort);
219
- }
220
-
221
- _writePageInfoToPayload(payload) {
222
- return {
223
- ...payload,
224
- metadata: {
225
- ...payload.metadata,
226
- page: this._page,
227
- },
228
- };
229
- }
230
-
231
- _processPayloadForMoreRequest(payload = {}) {
232
- const data = this._hub.states[fields.data()];
233
- const { [this._roles.main]: items = [] } = (data && data.value) || {};
234
- const productIds = items.map(item => item.product_id).filter(v => v);
235
- const exclude = [...(payload.exclude || []), ...productIds];
236
- if (exclude.length === 0) {
237
- return payload;
238
- }
239
- return {
240
- ...payload,
241
- exclude,
242
- };
243
- }
244
-
245
- _writeRequestTimeToSession(timestamp, options = {}) {
246
- if (options.type !== REQUEST_TYPE.QUERY) {
247
- return;
248
- }
249
- super._writeRequestTimeToSession(timestamp, options);
250
- }
251
-
252
- // data //
253
- _defaultProcessData(data, oldData) {
254
- data = super._defaultProcessData(data, oldData);
255
- data = writeKeywordsToData(data);
256
- data = retainFacetCountsInData(data, this._currentFacetCounts);
257
- data = writeExhaustionToData(data, { role: this._roles.main });
258
- return data;
259
- }
260
-
261
- _updateData(data) {
262
- super._updateData(data);
263
- updateQueryParametersInUrl.call(this, data);
264
- }
265
-
266
- _updateDataInHub(data, oldData) {
267
- data = this._appendResultsFromMoreRequest(data);
268
- super._updateDataInHub(data, oldData);
269
- }
270
-
271
- _appendResultsFromMoreRequest(data) {
272
- const { request } = data;
273
- if (!request) {
274
- return data; // the initial state
275
- }
276
- const { metadata } = request.payload;
277
- if (!metadata || !metadata.page) {
278
- return writeMisoIdAsRootMisoId(data); // not from "more" request
279
- }
280
- // concat records if it's from "more" request
281
- const currentData = this._hub.states[fields.data()];
282
- return concatItemsFromMoreResponse(currentData, data, { role: this._roles.main });
283
- }
284
-
285
- // view actions //
286
- _handleSortSelect({ value } = {}) {
287
- if (!value) {
288
- return;
289
- }
290
- this._views.filters.update({ sort: value });
291
- this._views.filters.apply();
292
- }
293
-
294
- // interactions //
295
- _defaultProcessInteraction(payload, args) {
296
- payload = super._defaultProcessInteraction(payload, args);
297
- payload = this._writeRootMisoIdToInteraction(payload);
298
- return payload;
299
- }
300
-
301
- _writeRootMisoIdToInteraction(payload) {
302
- const data = this._hub.states[fields.data()];
303
- const { root_miso_id } = (data && data.value) || {};
304
- if (!root_miso_id) {
305
- return payload;
306
- }
307
- return mergeInteractions(payload, {
308
- context: {
309
- custom_context: {
310
- root_miso_id,
311
- }
312
- }
313
- });
314
- }
315
-
316
- }
317
-
318
- makeConfigurable(SearchBasedWorkflow.prototype, [WORKFLOW_CONFIGURABLE.PAGINATION, WORKFLOW_CONFIGURABLE.FILTERS]);
319
-
320
- enableUseLink(SearchBasedWorkflow.prototype);
321
-
322
- Object.assign(SearchBasedWorkflow, {
323
- DEFAULT_API_OPTIONS,
324
- DEFAULT_LAYOUTS,
325
- DEFAULT_TRACKERS,
326
- DEFAULT_PAGINATION,
327
- DEFAULT_OPTIONS,
328
- ROLES_OPTIONS,
329
- });
@@ -1,73 +0,0 @@
1
- import { API } from '@miso.ai/commons';
2
- import { ROLE } from '../constants.js';
3
- import SearchBasedWorkflow from './search-based.js';
4
- import { makeAutocompletable } from './autocompletable.js';
5
-
6
- const DEFAULT_API_OPTIONS = Object.freeze({
7
- group: API.GROUP.SEARCH,
8
- name: API.NAME.SEARCH,
9
- payload: {
10
- fl: ['*'],
11
- },
12
- });
13
-
14
- const DEFAULT_AUTOCOMPLETE_OPTIONS = Object.freeze({
15
- api: {
16
- group: API.GROUP.SEARCH,
17
- name: API.NAME.AUTOCOMPLETE,
18
- payload: {
19
- completion_fields: ['suggested_queries', 'title'],
20
- fl: ['title', 'url', 'cover_image'],
21
- },
22
- },
23
- });
24
-
25
- const DEFAULT_LAYOUTS = Object.freeze({
26
- ...SearchBasedWorkflow.DEFAULT_LAYOUTS,
27
- });
28
-
29
- const DEFAULT_TRACKERS = Object.freeze({
30
- ...SearchBasedWorkflow.DEFAULT_TRACKERS,
31
- });
32
-
33
- const DEFAULT_OPTIONS = Object.freeze({
34
- ...SearchBasedWorkflow.DEFAULT_OPTIONS,
35
- api: DEFAULT_API_OPTIONS,
36
- autocomplete: DEFAULT_AUTOCOMPLETE_OPTIONS,
37
- layouts: DEFAULT_LAYOUTS,
38
- trackers: DEFAULT_TRACKERS,
39
- });
40
-
41
- const ROLES_OPTIONS = SearchBasedWorkflow.ROLES_OPTIONS;
42
-
43
- export default class Search extends SearchBasedWorkflow {
44
-
45
- constructor(plugin, client) {
46
- super({
47
- name: 'search',
48
- plugin,
49
- client,
50
- roles: ROLES_OPTIONS,
51
- defaults: DEFAULT_OPTIONS,
52
- });
53
- }
54
-
55
- _initProperties(args) {
56
- super._initProperties(args);
57
- this._initAutocomplete(args);
58
- }
59
-
60
- notifyViewUpdate(role = ROLE.PRODUCTS, ...args) {
61
- super.notifyViewUpdate(role, ...args);
62
- return this;
63
- }
64
-
65
- // destroy //
66
- _destroy(options) {
67
- this._destroyAutocomplete();
68
- super._destroy(options);
69
- }
70
-
71
- }
72
-
73
- makeAutocompletable(Search.prototype);
@@ -1,51 +0,0 @@
1
- import { defineValues, mergeInteractions } from '@miso.ai/commons';
2
- import Workflow from './base.js';
3
-
4
- export default class UnitWorkflow extends Workflow {
5
-
6
- _initProperties(args) {
7
- super._initProperties(args);
8
- const { id } = args;
9
- defineValues(this, { id });
10
- }
11
-
12
- _initSession(args) {
13
- this._context._members.set(args.id, this);
14
- super._initSession(args);
15
- }
16
-
17
- // interactions //
18
- _defaultProcessInteraction(payload, args) {
19
- payload = super._defaultProcessInteraction(payload, args);
20
- payload = this._writeUnitIdToInteraction(payload, args);
21
- return payload;
22
- }
23
-
24
- _writeUnitIdToInteraction(payload) {
25
- const unit_id = this.id;
26
- const unit_instance_uuid = this.uuid;
27
- return mergeInteractions(payload, {
28
- context: {
29
- custom_context: {
30
- unit_id,
31
- unit_instance_uuid,
32
- },
33
- },
34
- });
35
- }
36
-
37
- // destroy //
38
- _destroy(options) {
39
- this._context._members.delete(this.id);
40
- super._destroy(options);
41
- }
42
-
43
- }
44
-
45
- Object.assign(UnitWorkflow, {
46
- DEFAULT_API_OPTIONS: Workflow.DEFAULT_API_OPTIONS,
47
- DEFAULT_LAYOUTS: Workflow.DEFAULT_LAYOUTS,
48
- DEFAULT_TRACKERS: Workflow.DEFAULT_TRACKERS,
49
- DEFAULT_OPTIONS: Workflow.DEFAULT_OPTIONS,
50
- ROLES_OPTIONS: Workflow.ROLES_OPTIONS,
51
- });
@@ -1,43 +0,0 @@
1
- import { DEFAULT_UNIT_ID } from '../constants.js';
2
- import WorkflowContext from './context.js';
3
-
4
- export default class UnitWorkflowContext extends WorkflowContext {
5
-
6
- constructor(name, plugin, client) {
7
- super(name, plugin, client);
8
- this._members = new Map();
9
- }
10
-
11
- workflows() {
12
- return [...this._members.values()];
13
- }
14
-
15
- create(unitId = DEFAULT_UNIT_ID) {
16
- if (this._members.has(unitId)) {
17
- throw new Error(`Unit already exists: ${unitId}`);
18
- }
19
- return this._createAndEmit(unitId);
20
- }
21
-
22
- has(unitId = DEFAULT_UNIT_ID) {
23
- return this._members.has(unitId);
24
- }
25
-
26
- get(unitId = DEFAULT_UNIT_ID) {
27
- if (typeof unitId !== 'string') {
28
- throw new Error(`Required unit ID to be a string: ${unitId}`);
29
- }
30
- return this._members.get(unitId) || this._createAndEmit(unitId);
31
- }
32
-
33
- _createAndEmit(unitId) {
34
- const workflow = this._create(unitId);
35
- this._client._events.emit('postworkflow', workflow);
36
- return workflow;
37
- }
38
-
39
- _create(unitId) {
40
- throw new Error('Not implemented');
41
- }
42
-
43
- }
@@ -1,41 +0,0 @@
1
- import { mixin } from '@miso.ai/commons';
2
-
3
- // TODO: eliminate browser dependency
4
-
5
- export function enableUseLink(prototype) {
6
- mixin(prototype, UseLinkMixin.prototype);
7
- }
8
-
9
- export class UseLinkMixin {
10
-
11
- useLink(fn, options = {}) {
12
- if (typeof fn !== 'function' && fn !== false) {
13
- throw new Error('useLink(fn) expects fn to be a function or false');
14
- }
15
- this._linkFn = fn ? [fn, options] : false;
16
- return this;
17
- }
18
-
19
- _submitToPage(args = {}) {
20
- if (!this._linkFn) {
21
- return;
22
- }
23
- const url = this._getSubmitUrl(args);
24
- const [_, options = {}] = this._linkFn;
25
- if (options.open === false) {
26
- window.location.href = url;
27
- } else {
28
- const target = options.target || '_blank';
29
- const windowFeatures = options.windowFeatures || 'noopener';
30
- window.open(url, target, windowFeatures);
31
- }
32
- }
33
-
34
- _getSubmitUrl({ q, ...args } = {}) {
35
- if (!this._linkFn) {
36
- throw new Error('useLink(fn) must be called before _getSubmitUrl()');
37
- }
38
- return this._linkFn[0](q, args);
39
- }
40
-
41
- }