@inseefr/lunatic 2.7.4 → 2.7.6

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 (102) hide show
  1. package/README.fr.md +1 -1
  2. package/README.md +6 -1
  3. package/lib/components/commons/components/md-label/link.js +39 -34
  4. package/lib/components/commons/components/md-label/md-label.js +2 -2
  5. package/lib/components/commons/components/md-label/md-label.spec.js +71 -0
  6. package/lib/components/commons/components/md-label/router-link.js +29 -0
  7. package/lib/components/commons/components/variable-status/variable-status.js +2 -2
  8. package/lib/components/index.scss +19 -1
  9. package/lib/components/loop/block-for-loop.js +2 -0
  10. package/lib/components/loop/constant.js +10 -0
  11. package/lib/components/loop/roster-for-loop/roster-for-loop.js +42 -20
  12. package/lib/components/lunatic-components.js +45 -7
  13. package/lib/components/table/lunatic-table.js +5 -1
  14. package/lib/hooks/use-auto-focus.js +1 -1
  15. package/lib/src/components/commons/components/md-label/router-link.d.ts +6 -0
  16. package/lib/src/components/datepicker/lunatic-datepicker.d.ts +1 -1
  17. package/lib/src/components/loop/constant.d.ts +4 -0
  18. package/lib/src/components/loop/roster-for-loop/roster-for-loop.d.ts +1 -0
  19. package/lib/src/components/lunatic-components.d.ts +12 -5
  20. package/lib/src/components/type.d.ts +4 -1
  21. package/lib/src/use-lunatic/commons/compile-controls.d.ts +4 -3
  22. package/lib/src/use-lunatic/commons/fill-components/fill-component-required.d.ts +75 -70
  23. package/lib/src/use-lunatic/commons/fill-components/fill-from-state.d.ts +55 -50
  24. package/lib/src/use-lunatic/commons/fill-components/fill-iterations.d.ts +31 -26
  25. package/lib/src/use-lunatic/commons/fill-components/fill-specific-expression.d.ts +680 -73
  26. package/lib/src/use-lunatic/commons/use-components-from-state.d.ts +1 -1
  27. package/lib/src/use-lunatic/commons/variables/lunatic-variables-store.d.ts +1 -0
  28. package/lib/src/use-lunatic/hooks/use-page-has-response.d.ts +6 -0
  29. package/lib/src/use-lunatic/reducer/commons/is-loop-component.d.ts +2 -2
  30. package/lib/src/use-lunatic/reducer/controls/check-base-control.d.ts +2 -0
  31. package/lib/src/use-lunatic/reducer/{resolve-component-controls/resolve-roundabout-control.d.ts → controls/check-roundabout-control.d.ts} +2 -2
  32. package/lib/src/use-lunatic/type-source.d.ts +16 -10
  33. package/lib/src/use-lunatic/use-lunatic.d.ts +12 -5
  34. package/lib/src/utils/suggester-workers/searching/meloto-order.d.ts +2 -1
  35. package/lib/stories/behaviour/controls/controls.stories.js +14 -7
  36. package/lib/stories/behaviour/controls/loop.json +130 -0
  37. package/lib/stories/behaviour/controls/{V2_ControlesNonNum_horsBoucle_PasPageFin.json → simple.json} +2 -2
  38. package/lib/stories/date-picker/source.json +22 -67
  39. package/lib/stories/declaration/source.json +14 -28
  40. package/lib/stories/dropdown/source.json +11 -28
  41. package/lib/stories/filter-description/source.json +3 -2
  42. package/lib/stories/input/input.stories.js +1 -8
  43. package/lib/stories/input/source.json +1 -63
  44. package/lib/stories/input-number/input-number.stories.js +2 -22
  45. package/lib/stories/input-number/source.json +4 -6
  46. package/lib/stories/loop/{block-for-loop.stories.js → loop.stories.js} +10 -8
  47. package/lib/stories/loop/roster-for-loop.stories.js +8 -2
  48. package/lib/stories/loop/source-bloc.json +10 -39
  49. package/lib/stories/loop/source-paginated.json +65 -78
  50. package/lib/stories/{loop/paginated-loop.stories.js → markdown/markdown.stories.js} +4 -4
  51. package/lib/stories/markdown/source.json +40 -0
  52. package/lib/stories/overview/overview.stories.js +1 -1
  53. package/lib/stories/pairwise/pairwise-links.stories.js +4 -4
  54. package/lib/stories/pairwise/{links.json → source.json} +2 -6
  55. package/lib/stories/question-context/question-context.stories.js +31 -0
  56. package/lib/stories/question-context/source.json +13 -0
  57. package/lib/stories/question-explication/source.json +1 -1
  58. package/lib/stories/{loop/not-paginated-loop.stories.js → question-information/question-information.stories.js} +5 -8
  59. package/lib/stories/question-information/source.json +14 -0
  60. package/lib/stories/roundabout/source.json +21 -31
  61. package/lib/stories/sequence/sequence.stories.js +7 -1
  62. package/lib/stories/sequence/source.json +17 -0
  63. package/lib/stories/suggester/simple.json +1 -1
  64. package/lib/stories/suggester/suggester-workers.stories.js +36 -1
  65. package/lib/stories/table/source-colspan.json +314 -0
  66. package/lib/stories/table/table.stories.js +7 -1
  67. package/lib/stories/textarea/source.json +6 -22
  68. package/lib/stories/utils/orchestrator.js +89 -49
  69. package/lib/stories/utils/orchestrator.scss +49 -0
  70. package/lib/stories/utils/referentiel.js +8 -4
  71. package/lib/use-lunatic/commons/compile-controls.js +135 -34
  72. package/lib/use-lunatic/commons/fill-components/fill-component-value.js +10 -0
  73. package/lib/use-lunatic/commons/fill-components/fill-specific-expression.js +4 -1
  74. package/lib/use-lunatic/commons/variables/behaviours/cleaning-behaviour.js +14 -9
  75. package/lib/use-lunatic/commons/variables/get-questionnaire-data.js +6 -1
  76. package/lib/use-lunatic/commons/variables/lunatic-variables-store.js +25 -7
  77. package/lib/use-lunatic/commons/variables/lunatic-variables-store.spec.js +39 -0
  78. package/lib/use-lunatic/hooks/use-page-has-response.js +104 -0
  79. package/lib/use-lunatic/reducer/{resolve-component-controls/resolve-simple-control.js → controls/check-base-control.js} +5 -7
  80. package/lib/use-lunatic/reducer/{resolve-component-controls/resolve-roundabout-control.js → controls/check-roundabout-control.js} +2 -3
  81. package/lib/use-lunatic/reducer/overview/overview-on-init.js +6 -4
  82. package/lib/use-lunatic/type-source.js +1 -0
  83. package/lib/use-lunatic/use-lunatic.js +3 -1
  84. package/lib/utils/env.js +1 -1
  85. package/lib/utils/suggester-workers/searching/meloto-order.js +6 -5
  86. package/package.json +2 -2
  87. package/workers-release/lunatic-search-worker-0.3.0.js +1 -1
  88. package/lib/src/use-lunatic/commons/get-errors-without-empty-value.d.ts +0 -6
  89. package/lib/src/use-lunatic/reducer/resolve-component-controls/index.d.ts +0 -1
  90. package/lib/src/use-lunatic/reducer/resolve-component-controls/resolve-component-control.d.ts +0 -6
  91. package/lib/src/use-lunatic/reducer/resolve-component-controls/resolve-simple-control.d.ts +0 -3
  92. package/lib/stories/Introduction.stories.mdx +0 -112
  93. package/lib/stories/behaviour/controls/V2_Controles_BouclesLiees_PasPageFin.json +0 -533
  94. package/lib/stories/input/source-with-question.json +0 -80
  95. package/lib/stories/input-number/source-euros.json +0 -37
  96. package/lib/stories/input-number/source-thansand.json +0 -34
  97. package/lib/stories/loop/source-not-paginated.json +0 -138
  98. package/lib/use-lunatic/commons/get-errors-without-empty-value.js +0 -24
  99. package/lib/use-lunatic/reducer/resolve-component-controls/index.js +0 -12
  100. package/lib/use-lunatic/reducer/resolve-component-controls/resolve-component-control.js +0 -38
  101. /package/lib/stories/behaviour/controls/{V2_ControlesNum_horsBoucle_PasPageFin.json → simple-numeric.json} +0 -0
  102. /package/lib/stories/pairwise/{links-componentset.json → source-componentset.json} +0 -0
@@ -259,27 +259,45 @@ var LunaticVariable = /*#__PURE__*/function () {
259
259
  }, {
260
260
  key: "setValue",
261
261
  value: function setValue(value, iteration) {
262
- var _this = this;
263
262
  if (value === this.getSavedValue(iteration)) {
264
263
  return false;
265
264
  }
266
265
  // Decompose arrays, to only update items that changed
267
266
  if (Array.isArray(value) && !Array.isArray(iteration)) {
268
- return !!value.map(function (v, k) {
269
- return _this.setValue(v, [k]);
270
- }).find(function (v) {
271
- return v;
272
- });
267
+ return this.setValueForArray(value);
273
268
  }
274
269
  // We want to save a value at a specific iteration, but the value is not an array yet
275
270
  if (iteration !== undefined && !Array.isArray(this.value)) {
276
271
  this.value = [];
277
272
  }
278
273
  this.value = !Array.isArray(iteration) ? value : (0, _array.setAtIndex)(this.value, iteration, value);
279
- this.updatedAt.set(iteration === null || iteration === void 0 ? void 0 : iteration.join('.'), performance.now());
274
+ if (value === undefined) {
275
+ this.updatedAt["delete"](iteration === null || iteration === void 0 ? void 0 : iteration.join('.'));
276
+ } else {
277
+ this.updatedAt.set(iteration === null || iteration === void 0 ? void 0 : iteration.join('.'), performance.now());
278
+ }
280
279
  this.updatedAt.set(undefined, performance.now());
281
280
  return true;
282
281
  }
282
+ }, {
283
+ key: "setValueForArray",
284
+ value: function setValueForArray(value) {
285
+ var _this = this;
286
+ var savedValue = this.getSavedValue();
287
+ var oldSize = Array.isArray(savedValue) ? savedValue.length : -1;
288
+ var newSize = value.length;
289
+ // Update every item of the array and look if we changed one item
290
+ var oneValueChanged = (0, _array.times)(Math.max(oldSize, newSize), function (k) {
291
+ return _this.setValue(value[k], [k]);
292
+ }).find(function (v) {
293
+ return v;
294
+ }) !== undefined;
295
+ // New array is smaller, shorten the array
296
+ if (oldSize > newSize && Array.isArray(this.value)) {
297
+ this.value = this.value.slice(0, newSize);
298
+ }
299
+ return oneValueChanged;
300
+ }
283
301
  }, {
284
302
  key: "getSavedValue",
285
303
  value: function getSavedValue(iteration) {
@@ -14,6 +14,12 @@ var _missingBehaviour = require("./behaviours/missing-behaviour");
14
14
  variables.set('FIRSTNAME', 'John');
15
15
  (0, _vitest.expect)(variables.get('FIRSTNAME')).toEqual('John');
16
16
  });
17
+ (0, _vitest.it)('should handle array correctly', function () {
18
+ variables.set('AGE', [10, 20, 30]);
19
+ (0, _vitest.expect)(variables.get('AGE')).toEqual([10, 20, 30]);
20
+ variables.set('AGE', [10, 20]);
21
+ (0, _vitest.expect)(variables.get('AGE')).toEqual([10, 20]);
22
+ });
17
23
  (0, _vitest.it)('should create a store from an object', function () {
18
24
  var store = _lunaticVariablesStore.LunaticVariablesStore.makeFromObject({
19
25
  name: 'John',
@@ -86,6 +92,39 @@ var _missingBehaviour = require("./behaviours/missing-behaviour");
86
92
  return variables.run('Hello world');
87
93
  }).toThrowError();
88
94
  });
95
+ (0, _vitest.describe)('event listener', function () {
96
+ (0, _vitest.it)('should trigger onChange', function () {
97
+ variables.set('FIRSTNAME', 'John');
98
+ var spy = _vitest.vi.fn();
99
+ variables.on('change', function (e) {
100
+ return spy(e.detail.name, e.detail.value);
101
+ });
102
+ variables.set('FIRSTNAME', 'Jane');
103
+ (0, _vitest.expect)(spy).toHaveBeenCalledWith('FIRSTNAME', 'Jane');
104
+ });
105
+ (0, _vitest.it)('should trigger onChange on array', function () {
106
+ variables.set('AGE', [18, 23, 24]);
107
+ var spy = _vitest.vi.fn();
108
+ variables.on('change', function (e) {
109
+ return spy(e.detail.name, e.detail.value);
110
+ });
111
+ variables.set('AGE', [18, 23]);
112
+ (0, _vitest.expect)(spy).toHaveBeenCalledWith('AGE', [18, 23]);
113
+ variables.set('AGE', [18, 25]);
114
+ (0, _vitest.expect)(spy).toHaveBeenCalledWith('AGE', [18, 25]);
115
+ });
116
+ (0, _vitest.it)('should not trigger onChange when value does not change', function () {
117
+ variables.set('FIRSTNAME', 'John');
118
+ variables.set('AGE', [18, 20]);
119
+ var spy = _vitest.vi.fn();
120
+ variables.on('change', function (e) {
121
+ return spy(e.detail.name, e.detail.value);
122
+ });
123
+ variables.set('FIRSTNAME', 'John');
124
+ variables.set('AGE', [18, 20]);
125
+ (0, _vitest.expect)(spy).not.toHaveBeenCalled();
126
+ });
127
+ });
89
128
  (0, _vitest.describe)('with iteration', function () {
90
129
  (0, _vitest.it)('should handle arrays', function () {
91
130
  variables.set('FIRSTNAME', ['John', 'Jane']);
@@ -0,0 +1,104 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.usePageHasResponse = usePageHasResponse;
7
+ var _react = require("react");
8
+ var _isObject = require("../../utils/is-object");
9
+ function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
10
+ function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
11
+ function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
12
+ function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
13
+ function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
14
+ function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
15
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
16
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
17
+ /**
18
+ * Check if a page has one response (value is filled for at least one field)
19
+ */
20
+ function usePageHasResponse(components, executeExpression) {
21
+ return (0, _react.useCallback)(function () {
22
+ if (!Array.isArray(components)) {
23
+ return false;
24
+ }
25
+ var _iterator = _createForOfIteratorHelper(components),
26
+ _step;
27
+ try {
28
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
29
+ var component = _step.value;
30
+ // Some components are considered as "filled" by default
31
+ if (['PairwiseLinks', 'Roundabout'].includes(component.componentType)) {
32
+ return true;
33
+ }
34
+ // For Table, we have to extract components from its body and apply isSubComponentsEmpty function
35
+ if (component.componentType === 'Table') {
36
+ // Body is array for array (row), each "cell" could be an Label or Component, so we filter array.
37
+ var childrenComponent = component.body.reduce(function (_, row) {
38
+ var componentsInRow = row.filter(function (cell) {
39
+ return (0, _isObject.isObject)(cell) && 'componentType' in cell;
40
+ });
41
+ return [].concat(_toConsumableArray(_), _toConsumableArray(componentsInRow));
42
+ }, []);
43
+ return !isSubComponentsEmpty(childrenComponent, executeExpression);
44
+ }
45
+
46
+ // We found a value in one of the root component
47
+ if ('value' in component && !isEmpty(component.value)) {
48
+ return true;
49
+ }
50
+ // For rosterForLoop we need to inspect child components
51
+ if ('components' in component && Array.isArray(component.components) && !isSubComponentsEmpty(component.components, executeExpression)) {
52
+ return true;
53
+ }
54
+ }
55
+ } catch (err) {
56
+ _iterator.e(err);
57
+ } finally {
58
+ _iterator.f();
59
+ }
60
+ return false;
61
+ }, [components, executeExpression]);
62
+ }
63
+
64
+ /**
65
+ * Check if a value is empty
66
+ * - null ou undefined ou ''
67
+ * - for arrays, every item must be empty
68
+ * - for objects, every value must be empty
69
+ */
70
+ function isEmpty(value) {
71
+ // Array is empty if all items are empty
72
+ if (Array.isArray(value)) {
73
+ // We find one value that is not empty
74
+ return value.find(function (v) {
75
+ return !isEmpty(v);
76
+ }) === undefined;
77
+ }
78
+ // For object inspect each values
79
+ if (_typeof(value) === 'object' && value !== null) {
80
+ return isEmpty(Object.values(value));
81
+ }
82
+ return !value;
83
+ }
84
+
85
+ /**
86
+ * For complex component we need to inspect child components, interpret the response value
87
+ */
88
+ function isSubComponentsEmpty(components, executeExpression) {
89
+ var _iterator2 = _createForOfIteratorHelper(components),
90
+ _step2;
91
+ try {
92
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
93
+ var component = _step2.value;
94
+ if ('response' in component && !isEmpty(executeExpression(component.response.name))) {
95
+ return false;
96
+ }
97
+ }
98
+ } catch (err) {
99
+ _iterator2.e(err);
100
+ } finally {
101
+ _iterator2.f();
102
+ }
103
+ return true;
104
+ }
@@ -3,13 +3,11 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.resolveSimpleControl = resolveSimpleControl;
7
- function resolveSimpleControl(state, control) {
8
- var _state$pager, _control$control$valu, _control$control;
9
- var executeExpression = state.executeExpression;
10
- var _ref = (_state$pager = state.pager) !== null && _state$pager !== void 0 ? _state$pager : {},
11
- iteration = _ref.iteration,
12
- linksIterations = _ref.linksIterations;
6
+ exports.checkBaseControl = checkBaseControl;
7
+ function checkBaseControl(control, executeExpression, pager) {
8
+ var _control$control$valu, _control$control;
9
+ var iteration = pager.iteration,
10
+ linksIterations = pager.linksIterations;
13
11
  var criticality = control.criticality,
14
12
  errorMessage = control.errorMessage,
15
13
  id = control.id,
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.resolveRoundaboutControl = resolveRoundaboutControl;
6
+ exports.checkRoundaboutControl = checkRoundaboutControl;
7
7
  /**
8
8
  * Pour le Roundabout, le controle doit être validé pour chaque itération
9
9
  * composants l'unité enquêtée.
@@ -11,9 +11,8 @@ exports.resolveRoundaboutControl = resolveRoundaboutControl;
11
11
  * Le rondpoint ne peut pas être placé dans une boucle car l'itération est effacée.
12
12
  * TODO intégrer cela dans le cadre de boucle de bloucle.
13
13
  */
14
- function resolveRoundaboutControl(state, control) {
14
+ function checkRoundaboutControl(control, executeExpression) {
15
15
  var _control$control$valu, _control$control;
16
- var executeExpression = state.executeExpression;
17
16
  var criticality = control.criticality,
18
17
  errorMessage = control.errorMessage,
19
18
  id = control.id,
@@ -25,10 +25,12 @@ var isSequence = function isSequence(sourceComponent) {
25
25
  return sourceComponent.components.length > 0 && 'hierarchy' in sourceComponent.components[0];
26
26
  };
27
27
  var isSequenceSamePage = function isSequenceSamePage(sourceComponent, page) {
28
- return sourceComponent.components[0].hierarchy.sequence.page === page;
28
+ var _sourceComponent$comp;
29
+ return ((_sourceComponent$comp = sourceComponent.components[0].hierarchy) === null || _sourceComponent$comp === void 0 ? void 0 : _sourceComponent$comp.sequence.page) === page;
29
30
  };
30
31
  var isSubsequenceSamePage = function isSubsequenceSamePage(sourceComponent, page) {
31
- return sourceComponent.components[0].hierarchy.subSequence !== undefined && sourceComponent.components[0].hierarchy.subSequence.page === page;
32
+ var _sourceComponent$comp2, _sourceComponent$comp3;
33
+ return ((_sourceComponent$comp2 = sourceComponent.components[0].hierarchy) === null || _sourceComponent$comp2 === void 0 ? void 0 : _sourceComponent$comp2.subSequence) !== undefined && ((_sourceComponent$comp3 = sourceComponent.components[0].hierarchy) === null || _sourceComponent$comp3 === void 0 ? void 0 : _sourceComponent$comp3.subSequence.page) === page;
32
34
  };
33
35
  var isPageReached = function isPageReached(page, lastReachedPage) {
34
36
  return parseInt(page, 10) <= parseInt(lastReachedPage, 10);
@@ -64,7 +66,7 @@ function getOverview(state) {
64
66
  var component = _step.value;
65
67
  var hierarchy = component.hierarchy,
66
68
  conditionFilter = component.conditionFilter;
67
- if (hierarchy.subSequence) {
69
+ if (hierarchy && hierarchy.subSequence) {
68
70
  var _executeExpression, _pager$lastReachedPag;
69
71
  overviewEntries.subSequences.push(_objectSpread(_objectSpread({}, hierarchy.subSequence), {}, {
70
72
  type: 'subSequence',
@@ -75,7 +77,7 @@ function getOverview(state) {
75
77
  evaluatedLabel: executeExpression(hierarchy.subSequence.label),
76
78
  children: []
77
79
  }));
78
- } else {
80
+ } else if (hierarchy) {
79
81
  var _pager$lastReachedPag2, _executeExpression2;
80
82
  overviewEntries.sequences.push(_objectSpread(_objectSpread({}, hierarchy.sequence), {}, {
81
83
  type: 'sequence',
@@ -20,6 +20,7 @@ var TypeOfControl = exports.TypeOfControl = /*#__PURE__*/function (TypeOfControl
20
20
  }({});
21
21
  var ControlTypeEnum = exports.ControlTypeEnum = /*#__PURE__*/function (ControlTypeEnum) {
22
22
  ControlTypeEnum["roundabout"] = "roundabout";
23
+ ControlTypeEnum["row"] = "ROW";
23
24
  ControlTypeEnum["simple"] = "simple";
24
25
  return ControlTypeEnum;
25
26
  }({});
@@ -19,6 +19,7 @@ var _reducer = _interopRequireDefault(require("./reducer"));
19
19
  var _useSuggesters = require("./use-suggesters");
20
20
  var _getQuestionnaireData = require("./commons/variables/get-questionnaire-data");
21
21
  var _useTrackChanges2 = require("../hooks/use-track-changes");
22
+ var _usePageHasResponse = require("./hooks/use-page-has-response");
22
23
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
23
24
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
24
25
  function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; }
@@ -212,7 +213,8 @@ function useLunatic(source) {
212
213
  overview: buildedOverview,
213
214
  loopVariables: (0, _useLoopVariables.useLoopVariables)(pager, state.pages),
214
215
  getChangedData: getChangedData,
215
- resetChangedData: resetChangedData
216
+ resetChangedData: resetChangedData,
217
+ hasPageResponse: (0, _usePageHasResponse.usePageHasResponse)(components, executeExpression)
216
218
  };
217
219
  }
218
220
  var _default = exports["default"] = useLunatic;
package/lib/utils/env.js CHANGED
@@ -7,7 +7,7 @@ exports.isTestEnv = isTestEnv;
7
7
  function isTestEnv() {
8
8
  try {
9
9
  // using vitest, process.env is defined
10
- return /test/.test("".concat(process.env.npm_lifecycle_event));
10
+ return "".concat(process.env.VITEST) === 'true';
11
11
  } catch (e) {
12
12
  // process.env is not defined
13
13
  // so we are not running as test so we can return false
@@ -8,16 +8,17 @@ exports.value = value;
8
8
  var _prepareStringIndexation = _interopRequireDefault(require("../commons-tokenizer/prepare-string-indexation"));
9
9
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
10
10
  function value(entity) {
11
+ var _suggestion$label;
11
12
  var tokens = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
12
13
  var suggestion = entity.suggestion;
13
- var label = suggestion.label;
14
- var prepared = (0, _prepareStringIndexation["default"])(label);
15
- if (label && label.length) {
14
+ var used = (_suggestion$label = suggestion.label) !== null && _suggestion$label !== void 0 ? _suggestion$label : suggestion.id;
15
+ var prepared = (0, _prepareStringIndexation["default"])(used);
16
+ if (used && used.length) {
16
17
  return tokens.reduce(function (score, token, i) {
17
18
  var index = prepared.search(token);
18
19
  if (index >= 0) {
19
- var how = label.length - index;
20
- how /= label.length;
20
+ var how = used.length - index;
21
+ how /= used.length;
21
22
  var weight = tokens.length - i;
22
23
  weight /= tokens.length;
23
24
  return score + how * weight;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@inseefr/lunatic",
3
- "version": "2.7.4",
3
+ "version": "2.7.6",
4
4
  "workersVersion": "0.3.0",
5
5
  "description": "Library of questionnaire components",
6
6
  "repository": {
@@ -83,7 +83,7 @@
83
83
  "react-keyboard-event-handler": "^1.5.4",
84
84
  "react-markdown": "^8.0.3",
85
85
  "react-number-format": "^5.1.3",
86
- "react-tooltip": "^4.2.15",
86
+ "react-tooltip": "^5.23.0",
87
87
  "remove-accents": "^0.4.2",
88
88
  "sass": "^1.58.3",
89
89
  "snowball": "^0.3.1",