@inseefr/lunatic 2.4.9 → 2.5.0-beta

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 (101) hide show
  1. package/lib/components/commons/components/orchestrated-component.js +10 -30
  2. package/lib/components/commons/create-row-orchestrator.js +7 -2
  3. package/lib/components/component-set/html/component-set-components.js +16 -25
  4. package/lib/components/component-set/lunatic-component-set.js +23 -37
  5. package/lib/components/index.js +14 -0
  6. package/lib/components/loop/block-for-loop/block-for-loop.js +4 -2
  7. package/lib/components/loop/block-for-loop/row.js +4 -2
  8. package/lib/components/loop/loop.js +6 -3
  9. package/lib/components/loop/roster-for-loop/body.js +4 -2
  10. package/lib/components/loop/roster-for-loop/roster-for-loop.js +2 -0
  11. package/lib/components/loop/roster-for-loop/roster-table.js +4 -2
  12. package/lib/components/loop/roster-for-loop/row.js +3 -1
  13. package/lib/components/question-explication/html/question-explication.js +53 -0
  14. package/lib/components/question-explication/html/question-explication.scss +35 -0
  15. package/lib/components/question-explication/index.js +13 -0
  16. package/lib/components/question-explication/lunatic-question-explication.js +32 -0
  17. package/lib/components/question-explication/question-explication.spec.js +49 -0
  18. package/lib/components/roundabout/lunatic-roundabout.js +2 -4
  19. package/lib/components/subsequence/subsequence.js +0 -2
  20. package/lib/components/subsequence/subsequence.spec.js +2 -2
  21. package/lib/components/summary/html/summary-container.js +14 -0
  22. package/lib/components/summary/html/summary-responses.js +53 -0
  23. package/lib/components/summary/html/summary-title.js +20 -0
  24. package/lib/components/summary/index.js +12 -0
  25. package/lib/components/summary/lunatic-summary.js +99 -0
  26. package/lib/src/components/commons/components/orchestrated-component.d.ts +4 -5
  27. package/lib/src/components/commons/create-row-orchestrator.d.ts +3 -2
  28. package/lib/src/components/component-set/html/component-set-components.d.ts +2 -2
  29. package/lib/src/components/component-set/lunatic-component-set.d.ts +2 -1
  30. package/lib/src/components/index.d.ts +2 -0
  31. package/lib/src/components/loop/block-for-loop/block-for-loop-ochestrator.d.ts +3 -2
  32. package/lib/src/components/loop/block-for-loop/row.d.ts +2 -1
  33. package/lib/src/components/loop/roster-for-loop/body.d.ts +2 -2
  34. package/lib/src/components/loop/roster-for-loop/roster-for-loop-orchestrator.d.ts +3 -2
  35. package/lib/src/components/loop/roster-for-loop/roster-table.d.ts +2 -2
  36. package/lib/src/components/loop/roster-for-loop/row.d.ts +2 -1
  37. package/lib/src/components/question-explication/html/question-explication.d.ts +7 -0
  38. package/lib/src/components/question-explication/index.d.ts +1 -0
  39. package/lib/src/components/question-explication/lunatic-question-explication.d.ts +3 -0
  40. package/lib/src/components/question-explication/question-explication.spec.d.ts +1 -0
  41. package/lib/src/components/subsequence/subsequence.d.ts +2 -2
  42. package/lib/src/components/summary/html/summary-container.d.ts +2 -0
  43. package/lib/src/components/summary/html/summary-responses.d.ts +12 -0
  44. package/lib/src/components/summary/html/summary-title.d.ts +5 -0
  45. package/lib/src/components/summary/index.d.ts +1 -0
  46. package/lib/src/components/summary/lunatic-summary.d.ts +7 -0
  47. package/lib/src/components/type.d.ts +18 -0
  48. package/lib/src/index.d.ts +1 -0
  49. package/lib/src/use-lunatic/actions.d.ts +6 -169
  50. package/lib/src/use-lunatic/commons/fill-components/fill-from-state.d.ts +137 -112
  51. package/lib/src/use-lunatic/commons/fill-components/fill-missing-response.d.ts +2 -1
  52. package/lib/src/use-lunatic/commons/fill-components/fill-specific-expression.d.ts +115 -94
  53. package/lib/src/use-lunatic/commons/page-navigation.d.ts +7 -0
  54. package/lib/src/use-lunatic/commons/page-navigation.spec.d.ts +1 -0
  55. package/lib/src/use-lunatic/commons/page.d.ts +11 -0
  56. package/lib/src/use-lunatic/commons/use-components-from-state.d.ts +1 -1
  57. package/lib/src/use-lunatic/reducer/commons/auto-explore-loop.d.ts +5 -0
  58. package/lib/src/use-lunatic/reducer/commons/index.d.ts +0 -1
  59. package/lib/src/use-lunatic/reducer/commons/is-loop-component.d.ts +2 -2
  60. package/lib/src/use-lunatic/reducer/overview/overview-on-init.d.ts +1 -7
  61. package/lib/src/use-lunatic/replace-component-sequence.d.ts +3 -3
  62. package/lib/src/use-lunatic/type-source.d.ts +27 -13
  63. package/lib/src/use-lunatic/type.d.ts +4 -12
  64. package/lib/src/use-lunatic/use-lunatic.d.ts +474 -10
  65. package/lib/src/utils/store-tools/worker-path.d.ts +1 -0
  66. package/lib/stories/component-set/component-set.stories.js +2 -1
  67. package/lib/stories/loop/block-for-loop.stories.js +8 -1
  68. package/lib/stories/loop/roster-for-loop.stories.js +8 -1
  69. package/lib/{use-lunatic/reducer/reduce-roundabout.js → stories/question-explication/question-explication.stories.js} +21 -17
  70. package/lib/stories/question-explication/source.json +17 -0
  71. package/lib/stories/roundabout/roundabout.stories.js +2 -1
  72. package/lib/stories/suggester/source-component-set.json +67 -0
  73. package/lib/stories/suggester/suggester.stories.js +9 -1
  74. package/lib/stories/summary/data.json +32 -0
  75. package/lib/stories/summary/source.json +353 -0
  76. package/lib/stories/summary/summary.stories.js +37 -0
  77. package/lib/stories/utils/orchestrator.js +5 -3
  78. package/lib/use-lunatic/commons/check-pager.js +1 -2
  79. package/lib/use-lunatic/commons/fill-components/fill-missing-response.js +14 -12
  80. package/lib/use-lunatic/commons/page-navigation.js +109 -0
  81. package/lib/use-lunatic/commons/page-navigation.spec.js +129 -0
  82. package/lib/use-lunatic/commons/page.js +44 -0
  83. package/lib/use-lunatic/reducer/commons/auto-explore-loop.js +39 -0
  84. package/lib/use-lunatic/reducer/commons/index.js +0 -8
  85. package/lib/use-lunatic/reducer/reduce-go-next-page.js +25 -159
  86. package/lib/use-lunatic/reducer/reduce-go-previous-page.js +21 -127
  87. package/lib/use-lunatic/reducer/reduce-go-to-page.js +53 -55
  88. package/lib/use-lunatic/reducer/reduce-on-init.js +5 -8
  89. package/lib/use-lunatic/reducer/resolve-component-controls/resolve-roundabout-control.js +1 -1
  90. package/lib/use-lunatic/reducer/resolve-component-controls/resolve-simple-control.js +1 -1
  91. package/lib/use-lunatic/type-source.js +0 -2
  92. package/lib/use-lunatic/use-lunatic.js +17 -3
  93. package/lib/utils/store-tools/auto-load.js +2 -2
  94. package/lib/utils/store-tools/worker-path.js +13 -0
  95. package/lib/utils/suggester-workers/append-to-index/create-append-task.js +2 -2
  96. package/package.json +3 -3
  97. package/lib/components/button/__snapshots__/lunatic-button.spec.jsx.snap +0 -80
  98. package/lib/components/commons/components/combo-box/selection/__snapshots__/selection.spec.jsx.snap +0 -81
  99. package/lib/src/use-lunatic/reducer/commons/is-empty-on-empty-page.d.ts +0 -3
  100. package/lib/src/use-lunatic/reducer/reduce-roundabout.d.ts +0 -2
  101. package/lib/use-lunatic/reducer/commons/is-empty-on-empty-page.js +0 -32
@@ -13,7 +13,7 @@ var _overview = require("./overview");
13
13
  var _waiting = _interopRequireDefault(require("./waiting"));
14
14
  var _logger = require("../../utils/logger");
15
15
  var _jsxRuntime = require("react/jsx-runtime");
16
- var _excluded = ["source", "data", "management", "shortcut", "activeControls", "features", "initialPage", "getStoreInfo", "missing", "missingStrategy", "missingShortcut", "autoSuggesterLoading", "addExternal", "preferences", "custom", "showOverview", "filterDescription", "getReferentiel", "dontKnowButton", "refusedButton"],
16
+ var _excluded = ["source", "data", "management", "shortcut", "activeControls", "features", "initialPage", "getStoreInfo", "missing", "missingStrategy", "missingShortcut", "autoSuggesterLoading", "addExternal", "preferences", "custom", "showOverview", "filterDescription", "getReferentiel", "dontKnowButton", "refusedButton", "readOnly"],
17
17
  _excluded2 = ["id", "componentType", "response", "storeName", "conditionFilter"];
18
18
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
19
19
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
@@ -63,7 +63,7 @@ function DevOptions(_ref) {
63
63
  });
64
64
  },
65
65
  children: "Go to page ".concat(toPage)
66
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(lunatic.InputNumber, {
66
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(lunatic.Input, {
67
67
  id: "page-to-jump",
68
68
  value: toPage,
69
69
  handleChange: handleChange,
@@ -147,6 +147,7 @@ function OrchestratorForStories(_ref3) {
147
147
  getReferentiel = _ref3.getReferentiel,
148
148
  dontKnowButton = _ref3.dontKnowButton,
149
149
  refusedButton = _ref3.refusedButton,
150
+ readOnly = _ref3.readOnly,
150
151
  rest = _objectWithoutProperties(_ref3, _excluded);
151
152
  var maxPage = source.maxPage;
152
153
  var _lunatic$useLunatic = lunatic.useLunatic(source, data, {
@@ -229,7 +230,8 @@ function OrchestratorForStories(_ref3) {
229
230
  }, other), rest), component), storeInfo), {}, {
230
231
  // fill error when needed
231
232
  errors: errorActive[pageTag],
232
- filterDescription: filterDescription
233
+ filterDescription: filterDescription,
234
+ disabled: readOnly
233
235
  }))
234
236
  }, "component-".concat(id));
235
237
  })
@@ -18,7 +18,6 @@ function clearPager(pager) {
18
18
  nbSubPages: undefined,
19
19
  iteration: undefined,
20
20
  shallowIteration: undefined,
21
- nbIterations: undefined,
22
- roundabout: undefined
21
+ nbIterations: undefined
23
22
  };
24
23
  }
@@ -14,20 +14,22 @@ function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input ==
14
14
  * Inject the value for the missingResponse variable
15
15
  */
16
16
  function fillMissingResponse(component, state) {
17
+ // Component does not have a missing response
18
+ if (!('missingResponse' in component) || !component.missingResponse) {
19
+ return component;
20
+ }
17
21
  var missingResponse = component.missingResponse;
18
22
  var variables = state.variables,
19
- iteration = state.pager.iteration;
20
- if (missingResponse) {
21
- var name = missingResponse.name;
22
- if (name in variables) {
23
- var value = variables[name].value;
24
- var missingValue = iteration === undefined ? value : value[iteration];
25
- return _objectSpread(_objectSpread({}, component), {}, {
26
- missingResponse: _objectSpread(_objectSpread({}, missingResponse), {}, {
27
- value: missingValue
28
- })
29
- });
30
- }
23
+ pager = state.pager;
24
+ var name = missingResponse.name;
25
+ if (name in variables) {
26
+ var value = variables[name].value;
27
+ var missingValue = pager.iteration === undefined ? value : value[pager.iteration];
28
+ return _objectSpread(_objectSpread({}, component), {}, {
29
+ missingResponse: _objectSpread(_objectSpread({}, missingResponse), {}, {
30
+ value: missingValue
31
+ })
32
+ });
31
33
  }
32
34
  return component;
33
35
  }
@@ -0,0 +1,109 @@
1
+ "use strict";
2
+
3
+ function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.getNextPager = getNextPager;
8
+ exports.getPrevPager = getPrevPager;
9
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
10
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
11
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
12
+ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
13
+ function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
14
+ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
15
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
16
+ 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); }
17
+ 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; }
18
+ function _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i["return"] && (_r = _i["return"](), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }
19
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
20
+ var resetIteration = {
21
+ subPage: undefined,
22
+ nbSubPages: undefined,
23
+ iteration: undefined,
24
+ nbIterations: undefined
25
+ };
26
+
27
+ /**
28
+ * Increment the pager to reach the next page or iteration
29
+ */
30
+ function getNextPager(pager, parent) {
31
+ // Increment the page or subPage
32
+ var _ref = pager.subPage !== undefined ? [parseInt(pager.page, 10), pager.subPage + 1] : [parseInt(pager.page, 10) + 1, undefined],
33
+ _ref2 = _slicedToArray(_ref, 2),
34
+ page = _ref2[0],
35
+ subPage = _ref2[1];
36
+ var iteration = pager.iteration;
37
+
38
+ // We reached the end of the questionnaire
39
+ if (page > parseInt(pager.maxPage, 10)) {
40
+ return pager;
41
+ }
42
+
43
+ // We reached the end of the sequence
44
+ var isEndSequence = subPage && pager.nbSubPages ? subPage >= pager.nbSubPages : false;
45
+ var moveUpOnEnd = parent === 'Roundabout';
46
+ // Move up at the end of a sequence (instead of going to the next Iteration)
47
+ if (isEndSequence && moveUpOnEnd) {
48
+ return _objectSpread(_objectSpread({}, pager), {}, {
49
+ page: page.toString()
50
+ }, resetIteration);
51
+ }
52
+
53
+ // Move to the next parent page (for loops)
54
+ if (isEndSequence && iteration !== undefined) {
55
+ subPage = 0;
56
+ iteration++;
57
+ }
58
+ // We reached the end of an iteration, move up
59
+ if (iteration !== undefined && pager.nbIterations && iteration >= pager.nbIterations) {
60
+ return getNextPager(_objectSpread(_objectSpread({}, pager), {}, {
61
+ page: page.toString()
62
+ }, resetIteration), parent);
63
+ }
64
+ return _objectSpread(_objectSpread({}, pager), {}, {
65
+ page: page.toString(),
66
+ subPage: subPage,
67
+ iteration: iteration
68
+ });
69
+ }
70
+ function getPrevPager(pager, parent) {
71
+ // Decrement the page or subPage
72
+ var _ref3 = pager.subPage !== undefined ? [parseInt(pager.page, 10), pager.subPage - 1] : [parseInt(pager.page, 10) - 1, undefined],
73
+ _ref4 = _slicedToArray(_ref3, 2),
74
+ page = _ref4[0],
75
+ subPage = _ref4[1];
76
+ var iteration = pager.iteration;
77
+ var moveUpOnStart = parent === 'Roundabout';
78
+
79
+ // We reached the start of the questionnaire
80
+ if (page <= 0) {
81
+ return pager;
82
+ }
83
+
84
+ // We reached the start of the sequence, move up
85
+ if (subPage !== undefined && pager.nbSubPages !== undefined && subPage < 0) {
86
+ var _iteration;
87
+ // Move up at the start of an iteration (for roundabout)
88
+ if (moveUpOnStart) {
89
+ return _objectSpread(_objectSpread({}, pager), {}, {
90
+ page: page.toString()
91
+ }, resetIteration);
92
+ }
93
+ subPage = pager.nbSubPages - 1;
94
+ iteration = ((_iteration = iteration) !== null && _iteration !== void 0 ? _iteration : 0) - 1;
95
+ }
96
+ var isStartSequence = iteration !== undefined && iteration < 0;
97
+
98
+ // We reached the start of an iteration, keep going backward
99
+ if (isStartSequence) {
100
+ return getPrevPager(_objectSpread(_objectSpread({}, pager), {}, {
101
+ page: page.toString()
102
+ }, resetIteration), parent);
103
+ }
104
+ return _objectSpread(_objectSpread({}, pager), {}, {
105
+ page: page.toString(),
106
+ subPage: subPage,
107
+ iteration: iteration
108
+ });
109
+ }
@@ -0,0 +1,129 @@
1
+ "use strict";
2
+
3
+ var _vitest = require("vitest");
4
+ var _pageNavigation = require("./page-navigation");
5
+ function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
6
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
7
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
8
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
9
+ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
10
+ function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
11
+ (0, _vitest.describe)('page-navigation', function () {
12
+ (0, _vitest.describe)('getNextPager', function () {
13
+ var base = {
14
+ page: '2',
15
+ maxPage: '3',
16
+ subPage: 0,
17
+ nbSubPages: 3,
18
+ iteration: 0,
19
+ nbIterations: 2
20
+ };
21
+ (0, _vitest.it)('should navigate inside a sequence', function () {
22
+ (0, _vitest.expect)((0, _pageNavigation.getNextPager)(base)).toEqual(_objectSpread(_objectSpread({}, base), {}, {
23
+ subPage: 1
24
+ }));
25
+ });
26
+ (0, _vitest.it)('should increment iteration at the end of a sequence', function () {
27
+ var pager = _objectSpread(_objectSpread({}, base), {}, {
28
+ subPage: 2
29
+ });
30
+ (0, _vitest.expect)((0, _pageNavigation.getNextPager)(pager).subPage).toEqual(0);
31
+ (0, _vitest.expect)((0, _pageNavigation.getNextPager)(pager).iteration).toEqual(1);
32
+ });
33
+ (0, _vitest.it)('should move up at the end of a sequence and an iteration', function () {
34
+ var pager = _objectSpread(_objectSpread({}, base), {}, {
35
+ subPage: 3,
36
+ iteration: 1
37
+ });
38
+ var reset = {
39
+ subPage: undefined,
40
+ nbSubPages: undefined,
41
+ iteration: undefined,
42
+ nbIterations: undefined
43
+ };
44
+ (0, _vitest.expect)((0, _pageNavigation.getNextPager)(pager)).toEqual(_objectSpread(_objectSpread(_objectSpread({}, pager), reset), {}, {
45
+ page: '3'
46
+ }));
47
+ (0, _vitest.expect)((0, _pageNavigation.getNextPager)(pager, 'Roundabout')).toEqual(_objectSpread(_objectSpread(_objectSpread({}, pager), reset), {}, {
48
+ page: '2'
49
+ }));
50
+ });
51
+ (0, _vitest.it)('should navigate on simple page without iteration', function () {
52
+ var pager = {
53
+ page: '1',
54
+ maxPage: '3',
55
+ iteration: undefined
56
+ };
57
+ (0, _vitest.expect)((0, _pageNavigation.getNextPager)(pager).page).toEqual('2');
58
+ });
59
+ (0, _vitest.it)('should stop at the last page', function () {
60
+ var pager = {
61
+ page: '3',
62
+ maxPage: '3',
63
+ iteration: undefined
64
+ };
65
+ (0, _vitest.expect)((0, _pageNavigation.getNextPager)(pager).page).toEqual('3');
66
+ });
67
+ });
68
+ (0, _vitest.describe)('getPrevPager', function () {
69
+ var base = {
70
+ page: '2',
71
+ maxPage: '3',
72
+ subPage: 2,
73
+ nbSubPages: 3,
74
+ iteration: 1,
75
+ nbIterations: 2
76
+ };
77
+ (0, _vitest.it)('should navigate inside a sequence', function () {
78
+ (0, _vitest.expect)((0, _pageNavigation.getPrevPager)(base)).toEqual(_objectSpread(_objectSpread({}, base), {}, {
79
+ subPage: 1
80
+ }));
81
+ });
82
+ (0, _vitest.it)('should decrement iteration at the start of a sequence', function () {
83
+ var pager = _objectSpread(_objectSpread({}, base), {}, {
84
+ subPage: 0
85
+ });
86
+ (0, _vitest.expect)((0, _pageNavigation.getPrevPager)(pager).subPage).toEqual(2);
87
+ (0, _vitest.expect)((0, _pageNavigation.getPrevPager)(pager).iteration).toEqual(0);
88
+ });
89
+ (0, _vitest.it)('should move up at the start of a sequence and an iteration', function () {
90
+ var pager = _objectSpread(_objectSpread({}, base), {}, {
91
+ subPage: 0,
92
+ iteration: 0
93
+ });
94
+ var reset = {
95
+ subPage: undefined,
96
+ nbSubPages: undefined,
97
+ iteration: undefined,
98
+ nbIterations: undefined
99
+ };
100
+ (0, _vitest.expect)((0, _pageNavigation.getPrevPager)(pager)).toEqual(_objectSpread(_objectSpread(_objectSpread({}, pager), reset), {}, {
101
+ page: '1'
102
+ }));
103
+ (0, _vitest.expect)((0, _pageNavigation.getPrevPager)(pager, 'Roundabout')).toEqual(_objectSpread(_objectSpread(_objectSpread({}, pager), reset), {}, {
104
+ page: '2'
105
+ }));
106
+ (0, _vitest.expect)((0, _pageNavigation.getPrevPager)(_objectSpread(_objectSpread({}, pager), {}, {
107
+ iteration: 1
108
+ }), 'Roundabout')).toEqual(_objectSpread(_objectSpread(_objectSpread({}, pager), reset), {}, {
109
+ page: '2'
110
+ }));
111
+ });
112
+ (0, _vitest.it)('should navigate on simple page without iteration', function () {
113
+ var pager = {
114
+ page: '2',
115
+ maxPage: '3',
116
+ iteration: undefined
117
+ };
118
+ (0, _vitest.expect)((0, _pageNavigation.getPrevPager)(pager).page).toEqual('1');
119
+ });
120
+ (0, _vitest.it)('should stop at the first page', function () {
121
+ var pager = {
122
+ page: '1',
123
+ maxPage: '3',
124
+ iteration: undefined
125
+ };
126
+ (0, _vitest.expect)((0, _pageNavigation.getPrevPager)(pager).page).toEqual('1');
127
+ });
128
+ });
129
+ });
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.getPageId = getPageId;
7
+ exports.isPageEmpty = isPageEmpty;
8
+ exports.pageStringToNumbers = pageStringToNumbers;
9
+ var _index = require("./index");
10
+ function getPageId(_ref) {
11
+ var subPage = _ref.subPage,
12
+ page = _ref.page;
13
+ if (subPage === undefined) {
14
+ return page;
15
+ }
16
+ return "".concat(page, ".").concat(subPage + 1);
17
+ }
18
+
19
+ /**
20
+ * Converts a page number (3.1.2) to an array of numbers [3, 1, 2]
21
+ */
22
+ function pageStringToNumbers(page) {
23
+ return page.split('.').map(function (v) {
24
+ return parseInt(v, 10);
25
+ });
26
+ }
27
+
28
+ /**
29
+ * Check if we are on an empty page
30
+ * if no components can be displayed on this page (using filter)
31
+ */
32
+ function isPageEmpty(state) {
33
+ var executeExpression = state.executeExpression,
34
+ pager = state.pager;
35
+ var iteration = pager.iteration;
36
+ var components = (0, _index.getComponentsFromState)(state);
37
+ return components.filter(function (component) {
38
+ var conditionFilter = component.conditionFilter;
39
+ if (conditionFilter) {
40
+ return (0, _index.executeConditionFilter)(conditionFilter, executeExpression, iteration);
41
+ }
42
+ return true;
43
+ }).length === 0;
44
+ }
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.autoExploreLoop = autoExploreLoop;
7
+ var _page = require("../../commons/page");
8
+ function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
9
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
10
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
11
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
12
+ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
13
+ function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
14
+ /**
15
+ * Update the pager to enter a loop if the pager is on a loop
16
+ */
17
+ function autoExploreLoop(state) {
18
+ var direction = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'forward';
19
+ var newPager = _objectSpread({}, state.pager);
20
+ var pageId = (0, _page.getPageId)(newPager);
21
+ var page = state.pages[pageId];
22
+ var isForward = direction === 'forward';
23
+ // The page is a loop
24
+ if (page.isLoop && page.subPages && page.subPages.length > 0) {
25
+ var maxSubPage = page.subPages.length;
26
+ var firstSubPage = (0, _page.pageStringToNumbers)(page.subPages[isForward ? 0 : maxSubPage - 1]);
27
+ newPager.page = firstSubPage[0].toString();
28
+ newPager.subPage = firstSubPage[1] - 1; // Subpage starts at 0
29
+ newPager.nbSubPages = maxSubPage;
30
+ newPager.nbIterations = state.executeExpression(page.iterations, {
31
+ iteration: newPager.iteration
32
+ });
33
+ newPager.iteration = isForward ? 0 : newPager.nbIterations - 1;
34
+ }
35
+ return _objectSpread(_objectSpread({}, state), {}, {
36
+ isInLoop: newPager.nbIterations !== undefined,
37
+ pager: newPager
38
+ });
39
+ }
@@ -4,7 +4,6 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  var _exportNames = {
7
- isOnEmptyPage: true,
8
7
  resizeArrayVariable: true,
9
8
  isLoopComponent: true
10
9
  };
@@ -14,19 +13,12 @@ Object.defineProperty(exports, "isLoopComponent", {
14
13
  return _isLoopComponent.isLoopComponent;
15
14
  }
16
15
  });
17
- Object.defineProperty(exports, "isOnEmptyPage", {
18
- enumerable: true,
19
- get: function get() {
20
- return _isEmptyOnEmptyPage["default"];
21
- }
22
- });
23
16
  Object.defineProperty(exports, "resizeArrayVariable", {
24
17
  enumerable: true,
25
18
  get: function get() {
26
19
  return _resizeArrayVariable["default"];
27
20
  }
28
21
  });
29
- var _isEmptyOnEmptyPage = _interopRequireDefault(require("./is-empty-on-empty-page"));
30
22
  var _resizeArrayVariable = _interopRequireDefault(require("./resize-array-variable"));
31
23
  var _isLoopComponent = require("./is-loop-component");
32
24
  var _validateConditionFilter = require("./validate-condition-filter");
@@ -6,9 +6,10 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports["default"] = void 0;
7
7
  var _commons = require("../commons");
8
8
  var _compose = _interopRequireDefault(require("../commons/compose"));
9
- var _commons2 = require("./commons");
10
9
  var _overviewOnChange = require("./overview/overview-on-change");
11
- var _reduceRoundabout = require("./reduce-roundabout");
10
+ var _pageNavigation = require("../commons/page-navigation");
11
+ var _page = require("../commons/page");
12
+ var _autoExploreLoop = require("./commons/auto-explore-loop");
12
13
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
13
14
  function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
14
15
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
@@ -16,166 +17,31 @@ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { va
16
17
  function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
17
18
  function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
18
19
  function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
19
- function getNextPage(state) {
20
- var pager = state.pager;
21
- var page = pager.page,
22
- maxPage = pager.maxPage;
23
- var p = Number.parseInt(page);
24
- var mp = Number.parseInt(maxPage);
25
- if (p < mp) {
26
- return "".concat(p + 1);
27
- }
28
- return "".concat(maxPage);
29
- }
30
- function reduceNextSubPage(state) {
31
- var pager = state.pager;
32
- var subPage = pager.subPage;
33
- var newPager = _objectSpread(_objectSpread({}, pager), {}, {
34
- subPage: (subPage !== null && subPage !== void 0 ? subPage : 0) + 1,
35
- shallowIteration: undefined
36
- });
37
- return _objectSpread(_objectSpread({}, state), {}, {
38
- pager: _objectSpread(_objectSpread({}, newPager), {}, {
39
- lastReachedPage: (0, _commons.getNewReachedPage)(newPager)
40
- }),
41
- modalErrors: undefined
42
- });
43
- }
44
- function reduceNextIteration(state) {
45
- var pager = state.pager;
46
- var iteration = pager.iteration,
47
- roundabout = pager.roundabout;
48
- if (roundabout) {
49
- return (0, _reduceRoundabout.reduceToRoundabout)(state);
50
- }
51
- var newPager = _objectSpread(_objectSpread({}, pager), {}, {
52
- subPage: 0,
53
- iteration: (iteration !== null && iteration !== void 0 ? iteration : 0) + 1
54
- });
55
- return _objectSpread(_objectSpread({}, state), {}, {
56
- pager: _objectSpread(_objectSpread({}, newPager), {}, {
57
- lastReachedPage: (0, _commons.getNewReachedPage)(newPager)
58
- }),
59
- modalErrors: undefined
60
- });
61
- }
62
- function reduceNextPage(state, _ref) {
63
- var next = _ref.next;
64
- var pager = state.pager;
65
- var newPager = _objectSpread(_objectSpread({}, pager), {}, {
66
- page: next,
67
- iteration: undefined,
68
- nbIterations: undefined,
69
- subPage: undefined,
70
- nbSubPages: undefined,
71
- shallowIteration: undefined
72
- });
73
- return _objectSpread(_objectSpread({}, state), {}, {
74
- isInLoop: false,
75
- pager: _objectSpread(_objectSpread({}, newPager), {}, {
76
- lastReachedPage: (0, _commons.getNewReachedPage)(newPager)
77
- }),
78
- modalErrors: undefined
79
- });
80
- }
81
- function reduceStartLoop(state, _ref2) {
82
- var next = _ref2.next,
83
- iterations = _ref2.iterations,
84
- loopDependencies = _ref2.loopDependencies;
85
- var pages = state.pages,
86
- pager = state.pager,
87
- executeExpression = state.executeExpression;
88
- var subPages = pages[next].subPages;
89
- if (!(0, _commons2.validateLoopConditionFilter)(state, {
90
- next: next
91
- })) {
92
- var newPager = _objectSpread(_objectSpread({}, pager), {}, {
93
- page: next,
94
- subPage: undefined,
95
- nbSubPages: undefined,
96
- iteration: undefined,
97
- nbIterations: undefined,
98
- shallowIteration: undefined
99
- });
100
- return _objectSpread(_objectSpread({}, state), {}, {
101
- pager: _objectSpread(_objectSpread({}, newPager), {}, {
102
- lastReachedPage: (0, _commons.getNewReachedPage)(newPager)
103
- })
104
- });
105
- }
106
- var nbIterations = executeExpression((0, _commons.getCompatibleVTLExpression)(iterations));
107
- if (Array.isArray(subPages)) {
108
- var _newPager = _objectSpread(_objectSpread({}, pager), {}, {
109
- page: next,
110
- subPage: 0,
111
- nbSubPages: subPages.length,
112
- iteration: 0,
113
- nbIterations: nbIterations,
114
- shallowIteration: undefined
115
- });
116
- return _objectSpread(_objectSpread({}, state), {}, {
117
- isInLoop: true,
118
- pager: _objectSpread(_objectSpread({}, _newPager), {}, {
119
- lastReachedPage: (0, _commons.getNewReachedPage)(_newPager)
120
- })
121
- });
122
- }
123
- return state;
124
- }
125
- function validateChange(state) {
126
- if ((0, _commons2.isOnEmptyPage)(state)) {
127
- return reduceGoNextPage(state);
128
- }
129
- return state;
130
- }
131
20
  function reduceGoNextPage(state) {
21
+ var _pages$pager$page;
132
22
  var pages = state.pages,
133
- isInLoop = state.isInLoop,
134
- pager = state.pager,
135
- variables = state.variables;
136
- var _nbSubPages$iteration = _objectSpread({
137
- nbSubPages: 0,
138
- iteration: 0,
139
- nbIterations: 0
140
- }, pager),
141
- iteration = _nbSubPages$iteration.iteration,
142
- nbIterations = _nbSubPages$iteration.nbIterations,
143
- subPage = _nbSubPages$iteration.subPage,
144
- nbSubPages = _nbSubPages$iteration.nbSubPages,
145
- page = _nbSubPages$iteration.page,
146
- roundabout = _nbSubPages$iteration.roundabout;
147
-
148
- /* next iteration of loop/roundabout */
149
- if (isInLoop && subPage !== undefined && subPage < nbSubPages - 1) {
150
- return validateChange(reduceNextSubPage(state));
151
- }
152
- /* next subpage of loop/roundabout */
153
- if (isInLoop && subPage === nbSubPages - 1 && iteration < nbIterations - 1) {
154
- return validateChange(reduceNextIteration(state));
23
+ pager = state.pager;
24
+ var parentType = (_pages$pager$page = pages[pager.page]) === null || _pages$pager$page === void 0 ? void 0 : _pages$pager$page.components[0].componentType;
25
+ var nextPager = (0, _pageNavigation.getNextPager)(pager, parentType);
26
+ var pageId = (0, _page.getPageId)(nextPager);
27
+ if (!pages[pageId]) {
28
+ throw new Error("Cannot reach next page ".concat(pageId));
155
29
  }
156
- /* exit of a roundabout */
157
- if (roundabout && nbIterations > 1) {
158
- return (0, _reduceRoundabout.reduceToRoundabout)(state);
159
- }
160
- var next = getNextPage(state);
161
- var _pages$next = pages[next],
162
- isLoop = _pages$next.isLoop,
163
- iterations = _pages$next.iterations,
164
- loopDependencies = _pages$next.loopDependencies;
165
- if (next === page) {
166
- // TODO: check why next === page, doesn't seems to be normal
167
- return state;
168
- }
169
- if (isLoop && iterations !== undefined) {
170
- return validateChange(reduceStartLoop(state, {
171
- next: next,
172
- iterations: iterations,
173
- loopDependencies: loopDependencies
174
- }));
175
- }
176
- return validateChange(reduceNextPage(state, {
177
- next: next
178
- }));
30
+
31
+ // If we reached a loop, go inside
32
+ var newState = (0, _autoExploreLoop.autoExploreLoop)(_objectSpread(_objectSpread({}, state), {}, {
33
+ pager: nextPager
34
+ }), 'forward');
35
+
36
+ // We reached an empty page, move forward
37
+ if ((0, _page.isPageEmpty)(newState)) {
38
+ return reduceGoNextPage(newState);
39
+ }
40
+ return _objectSpread(_objectSpread({}, newState), {}, {
41
+ pager: _objectSpread(_objectSpread({}, newState.pager), {}, {
42
+ lastReachedPage: (0, _commons.getNewReachedPage)(newState.pager)
43
+ })
44
+ });
179
45
  }
180
46
  var _default = (0, _compose["default"])(reduceGoNextPage, _overviewOnChange.overviewOnChange);
181
47
  exports["default"] = _default;