@inseefr/lunatic 2.4.10 → 2.5.0-fast-forward

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 (103) 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 +8 -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/reducer/reduce-on-init.d.ts +1 -1
  62. package/lib/src/use-lunatic/replace-component-sequence.d.ts +3 -3
  63. package/lib/src/use-lunatic/type-source.d.ts +27 -13
  64. package/lib/src/use-lunatic/type.d.ts +4 -12
  65. package/lib/src/use-lunatic/use-lunatic.d.ts +475 -10
  66. package/lib/src/utils/store-tools/worker-path.d.ts +1 -0
  67. package/lib/stories/component-set/component-set.stories.js +2 -1
  68. package/lib/stories/loop/block-for-loop.stories.js +8 -1
  69. package/lib/stories/loop/roster-for-loop.stories.js +92 -2
  70. package/lib/{use-lunatic/reducer/reduce-roundabout.js → stories/question-explication/question-explication.stories.js} +21 -17
  71. package/lib/stories/question-explication/source.json +17 -0
  72. package/lib/stories/roundabout/roundabout.stories.js +2 -1
  73. package/lib/stories/suggester/source-component-set.json +67 -0
  74. package/lib/stories/suggester/suggester.stories.js +9 -1
  75. package/lib/stories/summary/data.json +32 -0
  76. package/lib/stories/summary/source.json +353 -0
  77. package/lib/stories/summary/summary.stories.js +37 -0
  78. package/lib/stories/utils/orchestrator.js +21 -6
  79. package/lib/use-lunatic/commons/check-pager.js +1 -2
  80. package/lib/use-lunatic/commons/fill-components/fill-missing-response.js +14 -12
  81. package/lib/use-lunatic/commons/page-navigation.js +109 -0
  82. package/lib/use-lunatic/commons/page-navigation.spec.js +129 -0
  83. package/lib/use-lunatic/commons/page.js +44 -0
  84. package/lib/use-lunatic/reducer/commons/auto-explore-loop.js +37 -0
  85. package/lib/use-lunatic/reducer/commons/index.js +0 -8
  86. package/lib/use-lunatic/reducer/reduce-go-next-page.js +25 -159
  87. package/lib/use-lunatic/reducer/reduce-go-previous-page.js +21 -127
  88. package/lib/use-lunatic/reducer/reduce-go-to-page.js +51 -55
  89. package/lib/use-lunatic/reducer/reduce-on-init.js +8 -10
  90. package/lib/use-lunatic/reducer/resolve-component-controls/resolve-roundabout-control.js +1 -1
  91. package/lib/use-lunatic/reducer/resolve-component-controls/resolve-simple-control.js +1 -1
  92. package/lib/use-lunatic/type-source.js +0 -2
  93. package/lib/use-lunatic/use-lunatic.js +22 -4
  94. package/lib/use-lunatic/use-lunatic.test.js +9 -7
  95. package/lib/utils/store-tools/auto-load.js +2 -2
  96. package/lib/utils/store-tools/worker-path.js +13 -0
  97. package/lib/utils/suggester-workers/append-to-index/create-append-task.js +2 -2
  98. package/package.json +3 -4
  99. package/lib/components/button/__snapshots__/lunatic-button.spec.jsx.snap +0 -80
  100. package/lib/components/commons/components/combo-box/selection/__snapshots__/selection.spec.jsx.snap +0 -81
  101. package/lib/src/use-lunatic/reducer/commons/is-empty-on-empty-page.d.ts +0 -3
  102. package/lib/src/use-lunatic/reducer/reduce-roundabout.d.ts +0 -2
  103. package/lib/use-lunatic/reducer/commons/is-empty-on-empty-page.js +0 -32
@@ -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,37 @@
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
+ newPager.iteration = isForward ? 0 : newPager.nbIterations - 1;
32
+ }
33
+ return _objectSpread(_objectSpread({}, state), {}, {
34
+ isInLoop: newPager.nbIterations !== undefined,
35
+ pager: newPager
36
+ });
37
+ }
@@ -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;
@@ -4,143 +4,37 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports["default"] = void 0;
7
- var _commons = require("../commons");
8
- var _commons2 = require("./commons");
9
- var _reduceRoundabout = require("./reduce-roundabout");
7
+ var _pageNavigation = require("../commons/page-navigation");
8
+ var _autoExploreLoop = require("./commons/auto-explore-loop");
9
+ var _page = require("../commons/page");
10
10
  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); }
11
11
  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; }
12
12
  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; }
13
13
  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; }
14
14
  function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
15
15
  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); }
16
- function getPreviousPage(pager) {
17
- var page = pager.page;
18
- var p = Number.parseInt(page);
19
- if (p > 1) {
20
- return "".concat(parseInt(page, 10) - 1);
21
- }
22
- return page;
23
- }
24
- function goStartLoop(state, _ref) {
25
- var previous = _ref.previous,
26
- iterations = _ref.iterations,
27
- loopDependencies = _ref.loopDependencies;
28
- var pages = state.pages,
29
- pager = state.pager,
30
- executeExpression = state.executeExpression;
31
- var subPages = pages[previous].subPages;
32
-
33
- //TODO: check if loop components are all filtered
34
-
35
- if (Array.isArray(subPages)) {
36
- var nbIterations = executeExpression((0, _commons.getCompatibleVTLExpression)(iterations), {
37
- bindingDependencies: loopDependencies
38
- });
39
- return _objectSpread(_objectSpread({}, state), {}, {
40
- isInLoop: true,
41
- pager: _objectSpread(_objectSpread({}, pager), {}, {
42
- page: previous,
43
- subPage: subPages.length - 1,
44
- nbSubPages: subPages.length,
45
- iteration: nbIterations - 1,
46
- nbIterations: nbIterations
47
- })
48
- });
49
- }
50
- return state;
51
- }
52
- function goPreviousSubPage(state) {
53
- var pager = state.pager;
54
- var subPage = pager.subPage;
55
- return _objectSpread(_objectSpread({}, state), {}, {
56
- pager: _objectSpread(_objectSpread({}, pager), {}, {
57
- subPage: subPage ? subPage - 1 : subPage
58
- })
59
- });
60
- }
61
- function goPreviousIteration(state) {
62
- var pager = state.pager,
63
- pages = state.pages;
64
- var iteration = pager.iteration,
65
- page = pager.page,
66
- roundabout = pager.roundabout;
67
- if (roundabout) {
68
- return (0, _reduceRoundabout.reduceToRoundabout)(state);
69
- }
70
- var subPages = pages[page].subPages;
71
- return _objectSpread(_objectSpread({}, state), {}, {
72
- pager: _objectSpread(_objectSpread({}, pager), {}, {
73
- subPage: (subPages !== null && subPages !== void 0 ? subPages : []).length - 1,
74
- iteration: (iteration !== null && iteration !== void 0 ? iteration : 0) - 1
75
- })
76
- });
77
- }
78
- function goPreviousPage(state, _ref2) {
79
- var previous = _ref2.previous;
80
- var pager = state.pager;
81
- var page = pager.page;
82
- var updatedPager = _objectSpread(_objectSpread({}, pager), {}, {
83
- page: previous,
84
- iteration: undefined,
85
- nbIterations: undefined,
86
- subPage: undefined,
87
- nbSubPages: undefined,
88
- shallowIteration: undefined
89
- });
90
- if (previous !== page) {
91
- return _objectSpread(_objectSpread({}, state), {}, {
92
- isInLoop: false,
93
- pager: updatedPager
94
- });
95
- }
96
- return state;
97
- }
98
- function validateChange(state) {
99
- var pager = state.pager;
100
- var updatedState = _objectSpread({}, state);
101
- if ((0, _commons2.isOnEmptyPage)(updatedState)) {
102
- return reduceGoPreviousPage(updatedState);
103
- }
104
- return updatedState;
105
- }
106
16
  function reduceGoPreviousPage(state) {
17
+ var _pages$pager$page;
107
18
  var pages = state.pages,
108
- pager = state.pager,
109
- isInLoop = state.isInLoop,
110
- variables = state.variables;
111
- var iteration = pager.iteration,
112
- subPage = pager.subPage,
113
- roundabout = pager.roundabout,
114
- nbIterations = pager.nbIterations;
115
-
116
- // dans une boucle et l'itération courante n'est pas finie
117
- if (isInLoop && subPage && subPage > 0) {
118
- return validateChange(goPreviousSubPage(state));
19
+ pager = state.pager;
20
+ var parentType = (_pages$pager$page = pages[pager.page]) === null || _pages$pager$page === void 0 ? void 0 : _pages$pager$page.components[0].componentType;
21
+ var prevPager = (0, _pageNavigation.getPrevPager)(pager, parentType);
22
+ var pageId = (0, _page.getPageId)(prevPager);
23
+ var prevPage = pages[pageId];
24
+ if (!prevPage) {
25
+ throw new Error("Cannot reach previous page ".concat(pageId));
119
26
  }
120
- // dans une boucle, l'itération courante est finie mais il reste encore au moins une autre
121
- if (isInLoop && subPage === 0 && iteration && iteration > 0) {
122
- return validateChange(goPreviousIteration(state));
123
- }
124
- if (roundabout && nbIterations && nbIterations > 1) {
125
- return (0, _reduceRoundabout.reduceToRoundabout)(state);
126
- }
127
- var previous = getPreviousPage(pager);
128
- var _pages$previous = pages[previous],
129
- isLoop = _pages$previous.isLoop,
130
- iterations = _pages$previous.iterations,
131
- loopDependencies = _pages$previous.loopDependencies;
132
- // on rentre dans une boucle
133
- if (isLoop) {
134
- return validateChange(goStartLoop(state, {
135
- previous: previous,
136
- loopDependencies: loopDependencies,
137
- iterations: iterations
138
- }));
27
+
28
+ // If we reached a loop, go to the last iteration / sequence
29
+ var newState = (0, _autoExploreLoop.autoExploreLoop)(_objectSpread(_objectSpread({}, state), {}, {
30
+ pager: prevPager
31
+ }), 'backward');
32
+
33
+ // We reached an empty page, keep going backward
34
+ if ((0, _page.isPageEmpty)(newState)) {
35
+ return reduceGoPreviousPage(newState);
139
36
  }
140
- // on change de page
141
- return validateChange(goPreviousPage(state, {
142
- previous: previous
143
- }));
37
+ return newState;
144
38
  }
145
39
  var _default = reduceGoPreviousPage;
146
40
  exports["default"] = _default;