@miso.ai/client-sdk-ui 1.11.5-beta.8 → 1.11.5

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.
@@ -72,7 +72,8 @@ const STATUS = exports.STATUS = Object.freeze({
72
72
  ONGOING: 'ongoing',
73
73
  DONE: 'done',
74
74
  EMPTY: 'empty',
75
- NONEMPTY: 'nonempty'
75
+ NONEMPTY: 'nonempty',
76
+ UNANSWERABLE: 'unanswerable'
76
77
  });
77
78
  function validateEventType(value) {
78
79
  if (TRACKING_EVENT_TYPES.indexOf(value) < 0) {
@@ -15,13 +15,15 @@ class AnswerBox {
15
15
  constructor(client, element) {
16
16
  let {
17
17
  classPrefix = _constants.CLASS_PREFIX,
18
- phrases = {}
18
+ phrases = {},
19
+ hideWhenUnanswerable = true
19
20
  } = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
20
21
  this._client = client;
21
22
  this._workflow = client.ui.hybridSearch;
22
23
  this._element = element;
23
24
  this._classPrefix = classPrefix;
24
25
  this._phrases = phrases;
26
+ this._hideWhenUnanswerable = hideWhenUnanswerable;
25
27
  this._init();
26
28
  }
27
29
  _init() {
@@ -65,10 +67,19 @@ class AnswerBox {
65
67
  const {
66
68
  status
67
69
  } = this._workflow._answer;
70
+ const {
71
+ meta: {
72
+ unanswerable = false
73
+ } = {}
74
+ } = this._workflow._answer._hub.states[_index.fields.data()];
68
75
  switch (status) {
69
76
  case _constants2.STATUS.ERRONEOUS:
70
77
  case _constants2.STATUS.READY:
71
- this.show();
78
+ if (unanswerable && this._hideWhenUnanswerable) {
79
+ this.hide();
80
+ } else {
81
+ this.show();
82
+ }
72
83
  break;
73
84
  default:
74
85
  this.hide();
@@ -7,11 +7,12 @@ exports.wireAnswerBox = wireAnswerBox;
7
7
  var _answerBox = _interopRequireDefault(require("./answer-box.js"));
8
8
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
9
9
  function wireAnswerBox(client, element) {
10
+ let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
10
11
  if (!client) {
11
12
  throw new Error('client is required');
12
13
  }
13
14
  if (!element) {
14
15
  return;
15
16
  }
16
- new _answerBox.default(client, element);
17
+ new _answerBox.default(client, element, options);
17
18
  }
@@ -18,6 +18,15 @@ class Sections extends _templates.Sections {
18
18
  helpers
19
19
  });
20
20
  }
21
+ answer(options) {
22
+ const {
23
+ container
24
+ } = this._helpers;
25
+ return container(options, {
26
+ name: 'answer',
27
+ visibleWhen: 'ready !unanswerable'
28
+ }, [...this.question(options), '<miso-answer></miso-answer>', '<miso-feedback></miso-feedback>']);
29
+ }
21
30
  answerBox(options) {
22
31
  const {
23
32
  element
@@ -80,13 +80,17 @@ class ContainerLayout extends _raf.default {
80
80
  ongoing,
81
81
  meta: {
82
82
  miso_id,
83
- empty = false
83
+ empty = false,
84
+ unanswerable = false
84
85
  } = {}
85
86
  } = state;
86
87
  const statuses = [status, empty ? _constants.STATUS.EMPTY : _constants.STATUS.NONEMPTY];
87
88
  if (status === _constants.STATUS.READY) {
88
89
  statuses.push(ongoing ? _constants.STATUS.ONGOING : _constants.STATUS.DONE);
89
90
  }
91
+ if (unanswerable) {
92
+ statuses.push(_constants.STATUS.UNANSWERABLE);
93
+ }
90
94
  element.setAttribute('status', statuses.join(' '));
91
95
  if (miso_id) {
92
96
  element.setAttribute('miso-id', miso_id);
@@ -198,8 +198,7 @@ class GalleryLayout extends _collection.default {
198
198
  _syncCssVariables() {
199
199
  const context = this._galleryContext;
200
200
  let {
201
- itemAspectRatio = 1,
202
- height = DEFAULT_HEIGHT
201
+ itemAspectRatio = 1
203
202
  } = this.options;
204
203
  itemAspectRatio = context.itemAspectRatio = (0, _dom.cssAspectRatio)(itemAspectRatio);
205
204
  const {
@@ -209,7 +208,6 @@ class GalleryLayout extends _collection.default {
209
208
  return;
210
209
  }
211
210
  // TODO: skip if equal to default values
212
- element.style.setProperty('--miso-gallery-height', `${height}`);
213
211
  element.style.setProperty('--miso-gallery-item-1x1-aspect-ratio', `${itemAspectRatio}`);
214
212
  element.style.setProperty('--miso-gallery-item-1x2-aspect-ratio', `${itemAspectRatio.scaleBy([1, 2])}`);
215
213
  }
@@ -234,7 +232,7 @@ class GalleryLayout extends _collection.default {
234
232
 
235
233
  // update DOM
236
234
  listElement.style.aspectRatio = `${columnCount} / 2`;
237
- listElement.style.height = 'auto';
235
+ listElement.style.height = itemCount > 0 ? 'auto' : '0';
238
236
  }
239
237
  _syncItemCount() {
240
238
  let {
@@ -4,4 +4,4 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = void 0;
7
- var _default = exports.default = '1.11.5-beta.8';
7
+ var _default = exports.default = '1.11.5';
@@ -70,6 +70,7 @@ class HybridSearchAnswer extends _answerBased.default {
70
70
  data = super._defaultProcessData(data);
71
71
  data = (0, _processors.writeKeywordsToData)(data);
72
72
  data = (0, _processors.writeMisoIdFromSession)(data);
73
+ data = (0, _processors.writeUnanswerableToMeta)(data);
73
74
  return data;
74
75
  }
75
76
  _updateDataInHub(data) {
@@ -18,6 +18,7 @@ exports.writeKeywordsToData = writeKeywordsToData;
18
18
  exports.writeMisoIdFromSession = writeMisoIdFromSession;
19
19
  exports.writeMisoIdToMeta = writeMisoIdToMeta;
20
20
  exports.writeMisoIdToSession = writeMisoIdToSession;
21
+ exports.writeUnanswerableToMeta = writeUnanswerableToMeta;
21
22
  var _commons = require("@miso.ai/commons");
22
23
  var _constants = require("../constants.js");
23
24
  var _index = require("../actor/index.js");
@@ -346,4 +347,20 @@ function mergeInteraction() {
346
347
  custom_context: (0, _commons.trimObj)(Object.assign({}, base.context && base.context.custom_context, patch.context && patch.context.custom_context))
347
348
  }))
348
349
  }));
350
+ }
351
+ function writeUnanswerableToMeta(data) {
352
+ const {
353
+ value
354
+ } = data;
355
+ if (!value) {
356
+ return data;
357
+ }
358
+ if (!value.finished || value.finish_reason !== 'success' || value.sources && value.sources.length > 0) {
359
+ return data;
360
+ }
361
+ return Object.assign({}, data, {
362
+ meta: Object.assign({}, data.meta, {
363
+ unanswerable: true
364
+ })
365
+ });
349
366
  }
package/package.json CHANGED
@@ -26,7 +26,7 @@
26
26
  "url": "https://github.com/MisoAI/miso-client-js-sdk/issues"
27
27
  },
28
28
  "dependencies": {
29
- "@miso.ai/commons": "1.11.5-beta.8"
29
+ "@miso.ai/commons": "1.11.5"
30
30
  },
31
- "version": "1.11.5-beta.8"
31
+ "version": "1.11.5"
32
32
  }
package/src/constants.js CHANGED
@@ -105,6 +105,7 @@ export const STATUS = Object.freeze({
105
105
  DONE: 'done',
106
106
  EMPTY: 'empty',
107
107
  NONEMPTY: 'nonempty',
108
+ UNANSWERABLE: 'unanswerable',
108
109
  });
109
110
 
110
111
  export function validateEventType(value) {
@@ -9,12 +9,13 @@ const TOGGLE_BUTTON_SELECTOR = '[data-role="answer-box-toggle"]';
9
9
 
10
10
  export default class AnswerBox {
11
11
 
12
- constructor(client, element, { classPrefix = CLASS_PREFIX, phrases = {} } = {}) {
12
+ constructor(client, element, { classPrefix = CLASS_PREFIX, phrases = {}, hideWhenUnanswerable = true } = {}) {
13
13
  this._client = client;
14
14
  this._workflow = client.ui.hybridSearch;
15
15
  this._element = element;
16
16
  this._classPrefix = classPrefix;
17
17
  this._phrases = phrases;
18
+ this._hideWhenUnanswerable = hideWhenUnanswerable;
18
19
  this._init();
19
20
  }
20
21
 
@@ -58,10 +59,16 @@ export default class AnswerBox {
58
59
 
59
60
  _syncWofkflowStatus() {
60
61
  const { status } = this._workflow._answer;
62
+ const { meta: { unanswerable = false } = {} } = this._workflow._answer._hub.states[fields.data()];
63
+
61
64
  switch (status) {
62
65
  case STATUS.ERRONEOUS:
63
66
  case STATUS.READY:
64
- this.show();
67
+ if (unanswerable && this._hideWhenUnanswerable) {
68
+ this.hide();
69
+ } else {
70
+ this.show();
71
+ }
65
72
  break;
66
73
  default:
67
74
  this.hide();
@@ -1,11 +1,11 @@
1
1
  import AnswerBox from './answer-box.js';
2
2
 
3
- export function wireAnswerBox(client, element) {
3
+ export function wireAnswerBox(client, element, options = {}) {
4
4
  if (!client) {
5
5
  throw new Error('client is required');
6
6
  }
7
7
  if (!element) {
8
8
  return;
9
9
  }
10
- new AnswerBox(client, element);
10
+ new AnswerBox(client, element, options);
11
11
  }
@@ -9,6 +9,15 @@ class Sections extends _Sections {
9
9
  super({ helpers });
10
10
  }
11
11
 
12
+ answer(options) {
13
+ const { container } = this._helpers;
14
+ return container(options, { name: 'answer', visibleWhen: 'ready !unanswerable' }, [
15
+ ...this.question(options),
16
+ '<miso-answer></miso-answer>',
17
+ '<miso-feedback></miso-feedback>',
18
+ ]);
19
+ }
20
+
12
21
  answerBox(options) {
13
22
  const { element } = this._helpers;
14
23
  const { classPrefix } = options;
@@ -60,11 +60,14 @@ export default class ContainerLayout extends RafLayout {
60
60
  if (!element) {
61
61
  return;
62
62
  }
63
- const { status, ongoing, meta: { miso_id, empty = false } = {} } = state;
63
+ const { status, ongoing, meta: { miso_id, empty = false, unanswerable = false } = {} } = state;
64
64
  const statuses = [status, empty ? STATUS.EMPTY : STATUS.NONEMPTY];
65
65
  if (status === STATUS.READY) {
66
66
  statuses.push(ongoing ? STATUS.ONGOING : STATUS.DONE);
67
67
  }
68
+ if (unanswerable) {
69
+ statuses.push(STATUS.UNANSWERABLE);
70
+ }
68
71
  element.setAttribute('status', statuses.join(' '));
69
72
  if (miso_id) {
70
73
  element.setAttribute('miso-id', miso_id);
@@ -170,14 +170,13 @@ export default class GalleryLayout extends CollectionLayout {
170
170
 
171
171
  _syncCssVariables() {
172
172
  const context = this._galleryContext;
173
- let { itemAspectRatio = 1, height = DEFAULT_HEIGHT } = this.options;
173
+ let { itemAspectRatio = 1 } = this.options;
174
174
  itemAspectRatio = context.itemAspectRatio = cssAspectRatio(itemAspectRatio);
175
175
  const { element } = this._view;
176
176
  if (!element) {
177
177
  return;
178
178
  }
179
179
  // TODO: skip if equal to default values
180
- element.style.setProperty('--miso-gallery-height', `${height}`);
181
180
  element.style.setProperty('--miso-gallery-item-1x1-aspect-ratio', `${itemAspectRatio}`);
182
181
  element.style.setProperty('--miso-gallery-item-1x2-aspect-ratio', `${itemAspectRatio.scaleBy([1, 2])}`);
183
182
  }
@@ -198,7 +197,7 @@ export default class GalleryLayout extends CollectionLayout {
198
197
 
199
198
  // update DOM
200
199
  listElement.style.aspectRatio = `${columnCount} / 2`;
201
- listElement.style.height = 'auto';
200
+ listElement.style.height = itemCount > 0 ? 'auto' : '0';
202
201
  }
203
202
 
204
203
  _syncItemCount({ state } = {}) {
package/src/version.js CHANGED
@@ -1 +1 @@
1
- export default '1.11.5-beta.8';
1
+ export default '1.11.5';
@@ -1,7 +1,7 @@
1
1
  import AnswerBasedWorkflow from './answer-based.js';
2
2
  import { ROLE, STATUS, ORGANIC_QUESTION_SOURCE } from '../constants.js';
3
3
  import { mergeRolesOptions } from './options/index.js';
4
- import { writeKeywordsToData, writeMisoIdToSession, writeMisoIdFromSession } from './processors.js';
4
+ import { writeKeywordsToData, writeMisoIdToSession, writeMisoIdFromSession, writeUnanswerableToMeta } from './processors.js';
5
5
  import { makeAutocompletable } from './autocompletable.js';
6
6
 
7
7
  const ROLES_OPTIONS = mergeRolesOptions(AnswerBasedWorkflow.ROLES_OPTIONS, {
@@ -64,6 +64,7 @@ export default class HybridSearchAnswer extends AnswerBasedWorkflow {
64
64
  data = super._defaultProcessData(data);
65
65
  data = writeKeywordsToData(data);
66
66
  data = writeMisoIdFromSession(data);
67
+ data = writeUnanswerableToMeta(data);
67
68
  return data;
68
69
  }
69
70
 
@@ -287,3 +287,20 @@ export function mergeInteraction(base = {}, patch = {}) {
287
287
  }),
288
288
  });
289
289
  }
290
+
291
+ export function writeUnanswerableToMeta(data) {
292
+ const { value } = data;
293
+ if (!value) {
294
+ return data;
295
+ }
296
+ if (!value.finished || value.finish_reason !== 'success' || (value.sources && value.sources.length > 0)) {
297
+ return data;
298
+ }
299
+ return {
300
+ ...data,
301
+ meta: {
302
+ ...data.meta,
303
+ unanswerable: true,
304
+ },
305
+ };
306
+ }