@miso.ai/client-sdk-ui 1.13.2-beta.1 → 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,490 +0,0 @@
1
- import { trimObj, mergeApiPayloads, mergeInteractions } from '@miso.ai/commons';
2
- import { STATUS, ROLE, EVENT_TYPE, REQUEST_TYPE, QUESTION_SOURCE, isPerformanceEventType, isProductRole } from '../constants.js';
3
- import { fields } from '../actor/index.js';
4
-
5
- // role mappings //
6
- export function mappingSortData(_, { hub, workflowOptions = {} } = {}) {
7
- const { sort: { options = [] } = {} } = workflowOptions.filters || {};
8
- if (!options.length) {
9
- return [];
10
- }
11
- const { sort } = hub.states[fields.filters()] || {};
12
- const selectedField = (sort && sort.field) || findDefaultSortOption(options).field;
13
- if (!selectedField) {
14
- return options;
15
- }
16
- // mark selected
17
- return options.map(option => {
18
- return {
19
- ...option,
20
- selected: option.field === selectedField,
21
- };
22
- });
23
- }
24
-
25
- function findDefaultSortOption(options) {
26
- for (const option of options) {
27
- if (option.default) {
28
- return option;
29
- }
30
- }
31
- return options[0];
32
- }
33
-
34
- export function mappingAnswerData(data) {
35
- if (!data || !data.value) {
36
- return undefined;
37
- }
38
- const { answer = '', answer_stage, finished } = data.value;
39
- return Object.freeze({ value: answer, stage: answer_stage, finished: !!finished });
40
- }
41
-
42
- export function mappingReasoningData(data) {
43
- if (!data || !data.value) {
44
- return undefined;
45
- }
46
- const { reasoning = '', reasoning_finished } = data.value;
47
- return Object.freeze({ value: reasoning, stage: 'reasoning', finished: !!reasoning_finished });
48
- }
49
-
50
- export function mappingSuggestionsData(_, { workflow } = {}) {
51
- const previous = workflow.previous;
52
- const values = previous && previous.states[fields.data()].value;
53
- const value = values && (values.suggested_followup_questions || values.followup_questions || []);
54
- return value && value.map(text => ({ text }));
55
- }
56
-
57
- export function mappingFollowUpQuestionsData(data) {
58
- if (!data || !data.value) {
59
- return undefined;
60
- }
61
- return (data.value.followup_questions || []).map(text => ({ text }));
62
- }
63
-
64
- // payload //
65
- export function writeQuestionSourceToPayload({ qs, ...payload } = {}) {
66
- return mergeApiPayloads(payload, {
67
- metadata: {
68
- question_source: qs || QUESTION_SOURCE.ORGANIC, // might be null, not undefined
69
- },
70
- });
71
- }
72
-
73
- export function disableAnswerForNonQueryRequest(payload, type) {
74
- if (type === REQUEST_TYPE.QUERY) {
75
- return payload;
76
- }
77
- return { ...payload, answer: false };
78
- }
79
-
80
- // data //
81
- export function getRevision(data) {
82
- return data && data.value && data.value.revision;
83
- }
84
-
85
- export function writeRequestFromPreviousData(data, oldData) {
86
- // patch request in case user call updateData() without request object in custom data scenario
87
- if (!data || !data.value || data.request || !oldData || !oldData.request) {
88
- return data;
89
- }
90
- const { request } = oldData;
91
- return {
92
- ...data,
93
- request,
94
- };
95
- }
96
-
97
- export function writeDataStatus(data) {
98
- const status = getStatus(data);
99
- const ongoing = status === STATUS.READY ? data.ongoing : undefined;
100
- return trimObj({ status, ongoing, ...data }); // let orinigal data override status and ongoing
101
- }
102
-
103
- function getStatus(data) {
104
- if (!data) {
105
- return STATUS.INITIAL;
106
- }
107
- const { request, error, value } = data;
108
- return error ? STATUS.ERRONEOUS : value ? STATUS.READY : request ? STATUS.LOADING : STATUS.INITIAL;
109
- }
110
-
111
- export function writeMisoIdToMeta(data) {
112
- const { value } = data;
113
- if (!value) {
114
- return data;
115
- }
116
- const { miso_id } = value;
117
- if (!miso_id) {
118
- return data;
119
- }
120
- return {
121
- ...data,
122
- meta: {
123
- ...data.meta,
124
- miso_id,
125
- },
126
- };
127
- }
128
-
129
- export function writeMisoIdToSession(data) {
130
- const { session, value } = data;
131
- if (!session || !value) {
132
- return;
133
- }
134
- const { miso_id } = value;
135
- if (!miso_id) {
136
- return;
137
- }
138
- session.meta.miso_id = miso_id;
139
- }
140
-
141
- export function writeMisoIdFromSession(data) {
142
- const { session, value } = data;
143
- if (!session || !value) {
144
- return data;
145
- }
146
- const { meta: { miso_id } = {} } = session;
147
- if (!miso_id) {
148
- return data;
149
- }
150
- return {
151
- ...data,
152
- meta: {
153
- ...data.meta,
154
- miso_id,
155
- },
156
- };
157
- }
158
-
159
- export function writeKeywordsToData(data) {
160
- const { request, value } = data;
161
- // we still want the value in loading status
162
- if (!request) {
163
- return data;
164
- }
165
- const { payload } = request || {};
166
- const { q: keywords } = payload || {};
167
- if (!keywords) {
168
- return data;
169
- }
170
- return {
171
- ...data,
172
- value: {
173
- ...value,
174
- keywords,
175
- },
176
- };
177
- }
178
-
179
- export function writeAnswerStageToMeta(data) {
180
- const { value } = data;
181
- if (!value) {
182
- return data;
183
- }
184
- const { answer_stage } = value;
185
- if (!answer_stage) {
186
- return data;
187
- }
188
- // 1. put answer_stage to meta
189
- // 2. mark ongoing flag
190
- return {
191
- ...data,
192
- ongoing: !value.finished,
193
- meta: {
194
- ...data.meta,
195
- answer_stage,
196
- },
197
- };
198
- }
199
-
200
- export function retainFacetCountsInData(data, currentFacetCounts) {
201
- if (!currentFacetCounts) {
202
- return data;
203
- }
204
- const { status, value } = data;
205
- switch (status) {
206
- case STATUS.INITIAL:
207
- case STATUS.LOADING:
208
- break;
209
- default:
210
- return data;
211
- }
212
- if (value && value.facet_counts) {
213
- return data;
214
- }
215
- return {
216
- ...data,
217
- value: {
218
- ...value,
219
- facet_counts: currentFacetCounts,
220
- },
221
- };
222
- }
223
-
224
- export function writeMisoIdAsRootMisoId(data) {
225
- const { value } = data;
226
- if (!value) {
227
- return data;
228
- }
229
- const { miso_id } = value;
230
- if (!miso_id) {
231
- return data;
232
- }
233
- return {
234
- ...data,
235
- value: {
236
- ...value,
237
- root_miso_id: miso_id,
238
- },
239
- };
240
- }
241
-
242
- export function concatItemsFromMoreResponse(oldData, newData, { role = ROLE.PRODUCTS } = {}) {
243
- if (!newData.value) {
244
- return oldData;
245
- }
246
- const { [role]: oldProducts = [], facet_counts, total, root_miso_id } = oldData.value;
247
- const { [role]: newProducts = [] } = newData.value;
248
- // keep old exhaustion flag, just in case
249
- // TODO
250
-
251
- // use old values of facet_counts and total, for they are affected by product_id exclusion
252
- return {
253
- ...newData,
254
- value: {
255
- ...newData.value,
256
- facet_counts,
257
- total,
258
- root_miso_id,
259
- [role]: [...oldProducts, ...newProducts],
260
- },
261
- }
262
- }
263
-
264
- export function writeExhaustionToData(data, { role = ROLE.PRODUCTS } = {}) {
265
- const { status, request, value } = data;
266
- // keep track of the exhaustion state
267
- if (status !== STATUS.READY || !request || !value) {
268
- return data;
269
- }
270
- const { [role]: items } = value;
271
- if (!items) {
272
- return data;
273
- }
274
- const { rows } = request.payload;
275
- const { length } = items;
276
- const exhausted = length < rows;
277
- if (!exhausted) {
278
- return data;
279
- }
280
- return {
281
- ...data,
282
- meta: {
283
- ...data.meta,
284
- exhausted: true,
285
- },
286
- };
287
- }
288
-
289
- export function carryOverQuestionIdToData(data, oldData) {
290
- const { question_id } = (oldData && oldData.value) || {};
291
- if (!question_id) {
292
- return data;
293
- }
294
- return {
295
- ...data,
296
- value: {
297
- ...data.value,
298
- question_id,
299
- },
300
- };
301
- }
302
-
303
- export function writeUnanswerableToMeta(data) {
304
- const { value } = data;
305
- if (!value) {
306
- return data;
307
- }
308
- if (!value.finished || value.finish_reason !== 'success' || (value.sources && value.sources.length > 0)) {
309
- return data;
310
- }
311
- return {
312
- ...data,
313
- meta: {
314
- ...data.meta,
315
- unanswerable: true,
316
- },
317
- };
318
- }
319
-
320
- // interactions //
321
- export function buildBaseInteraction(args) {
322
- const { role, type, items, ...rest } = args;
323
- const payload = {
324
- type: type === 'viewable' ? 'viewable_impression' : type,
325
- context: {
326
- custom_context: trimObj({
327
- property: role,
328
- }),
329
- },
330
- };
331
-
332
- if (isPerformanceEventType(type)) {
333
- if (areProducts(role, items)) {
334
- payload.product_ids = (items || []).map(v => typeof v === 'string' ? v : v.product_id).filter(v => v);
335
- } else {
336
- payload.product_ids = [];
337
- payload.context.custom_context.items = (items || []).map(v => v.text || v.id || v);
338
- }
339
- }
340
-
341
- switch (type) {
342
- case EVENT_TYPE.SUBMIT:
343
- payload.context.custom_context.value = args.value;
344
- break;
345
- case EVENT_TYPE.FEEDBACK:
346
- payload.context.custom_context.value = payload.value = args.value;
347
- payload.context.custom_context.result_type = payload.result_type = args.result_type;
348
- break;
349
- case EVENT_TYPE.HEARTBEAT:
350
- payload.type = 'custom';
351
- payload.custom_action_name = 'heartbeat';
352
- break;
353
- case EVENT_TYPE.GENERIC_CLICK:
354
- payload.type = 'custom';
355
- payload.custom_action_name = 'generic_click';
356
- payload.context.custom_context.href = args.href;
357
- break;
358
- }
359
-
360
- return trimObj(payload);
361
- }
362
-
363
- function areProducts(role, items = []) {
364
- return isProductRole(role) || (items.length > 0 && typeof items[0] === 'object' && items[0].product_id);
365
- }
366
-
367
- export function writeSessionInfoToInteraction(payload, args) {
368
- const { session } = args && args.data || {};
369
- if (!session) {
370
- return payload;
371
- }
372
- const now = args.now || Date.now();
373
- return mergeInteractions(payload, {
374
- context: {
375
- custom_context: {
376
- session_id: session.uuid,
377
- session_elapsed: now - session.startAt,
378
- session_request_elapsed: session.meta.requestAt ? now - session.meta.requestAt : undefined,
379
- },
380
- },
381
- });
382
- }
383
-
384
- export function writeRequestMetadataToInteraction(payload, args) {
385
- const { data } = args;
386
- if (!data) {
387
- return payload;
388
- }
389
- const metadata = data.request && data.request.payload && data.request.payload.metadata;
390
- if (!metadata) {
391
- return payload;
392
- }
393
- return mergeInteractions(payload, {
394
- context: {
395
- custom_context: metadata,
396
- },
397
- });
398
- }
399
-
400
- export function writeRequestInfoToInteraction(payload, args) {
401
- const { data } = args;
402
- if (!data) {
403
- return payload;
404
- }
405
- const requestPayload = data.request && data.request.payload;
406
- if (!requestPayload) {
407
- return payload;
408
- }
409
- const { question, q, fq } = requestPayload;
410
- return mergeInteractions(payload, {
411
- context: {
412
- custom_context: {
413
- question,
414
- q,
415
- fq,
416
- },
417
- },
418
- });
419
- }
420
-
421
- export function writeAffiliationInfoToInteraction(payload, args) {
422
- if (args.role !== ROLE.AFFILIATION) {
423
- return payload;
424
- }
425
- const { items } = args;
426
- const channel = (items[0] && items[0].channel) || undefined;
427
- const positions = items.map(v => v.position);
428
- return mergeInteractions(payload, {
429
- context: {
430
- custom_context: {
431
- channel,
432
- positions,
433
- },
434
- },
435
- });
436
- }
437
-
438
- export function writeAnswerInfoToInteraction(payload, args) {
439
- payload = writeQuestionInfoToInteraction(payload, args);
440
- payload = writeAnswerClickInfoToInteraction(payload, args);
441
- payload = writeEventTargetToInteraction(payload, args);
442
- return payload;
443
- }
444
-
445
- export function writeQuestionInfoToInteraction(payload = {}, { data } = {}) {
446
- if (!data) {
447
- return payload;
448
- }
449
- const { request = {}, value = {} } = data;
450
- const { question_source } = request.payload && request.payload.metadata || {};
451
- const { question_id } = value;
452
- return mergeInteractions(payload, {
453
- context: {
454
- custom_context: {
455
- question_source,
456
- question_id,
457
- },
458
- },
459
- });
460
- }
461
-
462
- export function writeAnswerClickInfoToInteraction(payload, args) {
463
- if (args.role !== ROLE.ANSWER) {
464
- return payload;
465
- }
466
- const { items = [] } = args;
467
- return mergeInteractions(payload, {
468
- context: {
469
- custom_context: {
470
- urls: items.map(item => item.url),
471
- texts: items.map(item => item.text),
472
- class_names: items.map(item => item.className),
473
- attributes: items.map(item => item.attributes),
474
- },
475
- },
476
- });
477
- }
478
-
479
- export function writeEventTargetToInteraction(payload, { event_target } = {}) {
480
- if (!event_target) {
481
- return payload;
482
- }
483
- return mergeInteractions(payload, {
484
- context: {
485
- custom_context: {
486
- event_target,
487
- },
488
- },
489
- });
490
- }
@@ -1,63 +0,0 @@
1
- import { API } from '@miso.ai/commons';
2
- import UnitWorkflow from './unit.js';
3
- import { ListLayout } from '../layout/index.js';
4
- import { ROLE } from '../constants.js';
5
- import { mergeRolesOptions, DEFAULT_TRACKER_OPTIONS } from './options/index.js';
6
-
7
- const DEFAULT_API_OPTIONS = Object.freeze({
8
- ...UnitWorkflow.DEFAULT_API_OPTIONS,
9
- group: API.GROUP.RECOMMENDATION,
10
- name: API.NAME.USER_TO_PRODUCTS,
11
- payload: {
12
- ...UnitWorkflow.DEFAULT_API_OPTIONS.payload,
13
- fl: ['*'],
14
- },
15
- });
16
-
17
- const DEFAULT_LAYOUTS = Object.freeze({
18
- ...UnitWorkflow.DEFAULT_LAYOUTS,
19
- [ROLE.PRODUCTS]: ListLayout.type,
20
- });
21
-
22
- const DEFAULT_TRACKERS = Object.freeze({
23
- ...UnitWorkflow.DEFAULT_TRACKERS,
24
- [ROLE.PRODUCTS]: DEFAULT_TRACKER_OPTIONS,
25
- });
26
-
27
- const DEFAULT_OPTIONS = Object.freeze({
28
- ...UnitWorkflow.DEFAULT_OPTIONS,
29
- api: DEFAULT_API_OPTIONS,
30
- layouts: DEFAULT_LAYOUTS,
31
- trackers: DEFAULT_TRACKERS,
32
- });
33
-
34
- const ROLES_OPTIONS = mergeRolesOptions(UnitWorkflow.ROLES_OPTIONS, {
35
- main: ROLE.PRODUCTS,
36
- members: Object.keys(DEFAULT_LAYOUTS),
37
- });
38
-
39
- export default class Recommendation extends UnitWorkflow {
40
-
41
- constructor(context, id) {
42
- super({
43
- name: 'recommendation',
44
- context,
45
- roles: ROLES_OPTIONS,
46
- defaults: DEFAULT_OPTIONS,
47
- id,
48
- });
49
- }
50
-
51
- // lifecycle //
52
- start() {
53
- // in recommendation workflow, start() triggers query
54
- this._request();
55
- return this;
56
- }
57
-
58
- notifyViewUpdate(role = ROLE.PRODUCTS, ...args) {
59
- super.notifyViewUpdate(role, ...args);
60
- return this;
61
- }
62
-
63
- }
@@ -1,14 +0,0 @@
1
- import UnitWorkflowContext from './units.js';
2
- import Recommendation from './recommendation.js';
3
-
4
- export default class Recommendations extends UnitWorkflowContext {
5
-
6
- constructor(plugin, client) {
7
- super('recommendations', plugin, client);
8
- }
9
-
10
- _create(unitId) {
11
- return new Recommendation(this, unitId);
12
- }
13
-
14
- }