@inseefr/lunatic 2.5.0-fast-forward → 2.5.1-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 (94) hide show
  1. package/README.md +26 -26
  2. package/lib/components/commons/components/combo-box/combo-box.js +2 -2
  3. package/lib/components/commons/components/{default-option-renderer.js → combo-box/panel/combo-box-option.js} +3 -2
  4. package/lib/components/commons/components/{default-option-renderer.spec.js → combo-box/panel/combo-box-option.spec.js} +5 -5
  5. package/lib/components/commons/components/combo-box/panel/panel.js +4 -4
  6. package/lib/components/commons/components/combo-box/selection/LabelOrInput.js +51 -0
  7. package/lib/components/commons/components/combo-box/selection/LabelOrInput.spec.js +23 -0
  8. package/lib/components/commons/components/combo-box/selection/__snapshots__/selection.spec.tsx.snap +14 -12
  9. package/lib/components/commons/components/combo-box/selection/{delete.js → clear-button.js} +6 -3
  10. package/lib/components/commons/components/combo-box/selection/{delete.spec.js → clear-button.spec.js} +9 -9
  11. package/lib/components/commons/components/combo-box/selection/combo-box-label-selection.js +47 -0
  12. package/lib/components/commons/components/{default-label-renderer.spec.js → combo-box/selection/combo-box-label-selection.spec.js} +4 -4
  13. package/lib/components/commons/components/combo-box/selection/input.js +2 -2
  14. package/lib/components/commons/components/combo-box/selection/label-selection.js +8 -12
  15. package/lib/components/commons/components/combo-box/selection/label-selection.spec.js +3 -11
  16. package/lib/components/commons/components/combo-box/selection/selection.js +5 -11
  17. package/lib/components/commons/components/combo-box/selection/selection.spec.js +5 -30
  18. package/lib/components/commons/index.js +1 -12
  19. package/lib/components/duration/duration.js +52 -0
  20. package/lib/components/duration/duration.scss +17 -0
  21. package/lib/components/duration/durationInput.js +72 -0
  22. package/lib/components/duration/durationUtils.js +31 -0
  23. package/lib/components/duration/formatDuration.js +28 -0
  24. package/lib/components/duration/formatDuration.spec.js +38 -0
  25. package/lib/components/duration/getDurationFromValue.js +64 -0
  26. package/lib/components/duration/index.js +13 -0
  27. package/lib/components/index.js +7 -0
  28. package/lib/components/loop/block-for-loop/block-for-loop.js +5 -7
  29. package/lib/components/modal-controls/modal-controls.js +3 -5
  30. package/lib/components/suggester/html/suggester.js +2 -4
  31. package/lib/components/table/table-orchestrator.js +0 -1
  32. package/lib/src/components/commons/components/combo-box/combo-box.d.ts +3 -3
  33. package/lib/src/components/commons/components/combo-box/combo-box.stories.d.ts +3 -3
  34. package/lib/src/components/commons/components/combo-box/combo-box.type.d.ts +1 -1
  35. package/lib/src/components/commons/components/combo-box/panel/combo-box-option.d.ts +8 -0
  36. package/lib/src/components/commons/components/combo-box/panel/panel.d.ts +7 -4
  37. package/lib/src/components/commons/components/combo-box/selection/LabelOrInput.d.ts +16 -0
  38. package/lib/src/components/commons/components/combo-box/selection/clear-button.d.ts +9 -0
  39. package/lib/src/components/commons/components/combo-box/selection/combo-box-label-selection.d.ts +10 -0
  40. package/lib/src/components/commons/components/combo-box/selection/input.d.ts +9 -4
  41. package/lib/src/components/commons/components/combo-box/selection/label-selection.d.ts +9 -9
  42. package/lib/src/components/commons/components/combo-box/state-management/actions.d.ts +5 -5
  43. package/lib/src/components/commons/index.d.ts +0 -3
  44. package/lib/src/components/dropdown/html/dropdown-simple/simple-label-renderer.d.ts +2 -2
  45. package/lib/src/components/dropdown/html/dropdown-simple/simple-option-renderer.d.ts +2 -2
  46. package/lib/src/components/dropdown/html/dropdown-writable/dropdown-writable.d.ts +2 -2
  47. package/lib/src/components/dropdown/html/dropdown-writable/writable-label-renderer.d.ts +2 -2
  48. package/lib/src/components/dropdown/html/dropdown-writable/writable-option-renderer.d.ts +2 -2
  49. package/lib/src/components/duration/duration.d.ts +4 -0
  50. package/lib/src/components/duration/durationInput.d.ts +7 -0
  51. package/lib/src/components/duration/durationUtils.d.ts +30 -0
  52. package/lib/src/components/duration/formatDuration.d.ts +2 -0
  53. package/lib/src/components/duration/formatDuration.spec.d.ts +1 -0
  54. package/lib/src/components/duration/getDurationFromValue.d.ts +8 -0
  55. package/lib/src/components/duration/index.d.ts +1 -0
  56. package/lib/src/components/index.d.ts +1 -0
  57. package/lib/src/components/loop/block-for-loop/block-for-loop-ochestrator.d.ts +1 -1
  58. package/lib/src/components/loop/block-for-loop/block-for-loop.d.ts +3 -3
  59. package/lib/src/components/loop/roster-for-loop/roster-for-loop-orchestrator.d.ts +1 -1
  60. package/lib/src/components/modal-controls/modal-controls.d.ts +1 -1
  61. package/lib/src/components/suggester/html/suggester.d.ts +2 -2
  62. package/lib/src/components/suggester/searching/create-searching.d.ts +2 -2
  63. package/lib/src/components/table/table-orchestrator.d.ts +1 -1
  64. package/lib/src/components/type.d.ts +7 -0
  65. package/lib/src/i18n/index.d.ts +2 -2
  66. package/lib/src/i18n/inputNumberProps.d.ts +1 -1
  67. package/lib/src/use-lunatic/actions.d.ts +2 -2
  68. package/lib/src/use-lunatic/commons/index.d.ts +6 -7
  69. package/lib/src/use-lunatic/reducer/reduce-on-init.spec.d.ts +1 -0
  70. package/lib/src/use-lunatic/use-lunatic.d.ts +12 -0
  71. package/lib/src/utils/object.d.ts +1 -0
  72. package/lib/{components/commons/components/combo-box/selection/displayLabelOrInput.js → stories/duration/duration.stories.js} +29 -14
  73. package/lib/stories/duration/source.json +32 -0
  74. package/lib/stories/duration/source1.json +32 -0
  75. package/lib/use-lunatic/commons/execute-expression/create-refresh-calculated.spec.js +2 -0
  76. package/lib/use-lunatic/commons/index.js +6 -13
  77. package/lib/use-lunatic/reducer/reduce-on-init.js +3 -3
  78. package/lib/use-lunatic/reducer/reduce-on-init.spec.js +17 -0
  79. package/lib/use-lunatic/use-lunatic.js +1 -2
  80. package/lib/utils/object.js +6 -0
  81. package/package.json +1 -1
  82. package/lib/components/commons/components/combo-box/selection/displayLabelOrInput.spec.js +0 -56
  83. package/lib/components/commons/components/default-label-renderer.js +0 -37
  84. package/lib/src/components/commons/components/combo-box/selection/delete.d.ts +0 -8
  85. package/lib/src/components/commons/components/combo-box/selection/displayLabelOrInput.d.ts +0 -5
  86. package/lib/src/components/commons/components/default-label-renderer.d.ts +0 -8
  87. package/lib/src/components/commons/components/default-option-renderer.d.ts +0 -7
  88. package/lib/src/utils/store-tools/auto-load.d.ts +0 -6
  89. package/lib/use-lunatic/commons/load-suggesters.js +0 -158
  90. package/lib/utils/store-tools/auto-load.js +0 -162
  91. /package/lib/src/components/commons/components/combo-box/{selection/delete.spec.d.ts → panel/combo-box-option.spec.d.ts} +0 -0
  92. /package/lib/src/components/commons/components/combo-box/selection/{displayLabelOrInput.spec.d.ts → LabelOrInput.spec.d.ts} +0 -0
  93. /package/lib/src/components/commons/components/{default-label-renderer.spec.d.ts → combo-box/selection/clear-button.spec.d.ts} +0 -0
  94. /package/lib/src/components/commons/components/{default-option-renderer.spec.d.ts → combo-box/selection/combo-box-label-selection.spec.d.ts} +0 -0
@@ -5,9 +5,8 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.Selection = Selection;
7
7
  var _react = require("react");
8
- var _labelSelection = require("./label-selection");
9
- var _input = _interopRequireDefault(require("./input"));
10
8
  var _selectionContainer = _interopRequireDefault(require("./selection-container"));
9
+ var _LabelOrInput = require("./LabelOrInput");
11
10
  var _jsxRuntime = require("react/jsx-runtime");
12
11
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
13
12
  function Selection(_ref) {
@@ -26,28 +25,23 @@ function Selection(_ref) {
26
25
  var onChangeEx = (0, _react.useCallback)(function (e) {
27
26
  onChange === null || onChange === void 0 ? void 0 : onChange(e.target.value);
28
27
  }, [onChange]);
29
- return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_selectionContainer["default"], {
28
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_selectionContainer["default"], {
30
29
  id: id,
31
30
  labelId: labelId,
32
31
  expanded: expanded,
33
32
  "aria-owns": "".concat(id, "-list"),
34
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_labelSelection.LabelSelection, {
33
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_LabelOrInput.LabelOrInput, {
35
34
  labelRenderer: labelRenderer,
36
35
  placeholder: placeholder,
37
36
  selectedIndex: selectedIndex,
38
37
  options: options,
39
38
  search: search,
40
- disabled: disabled
41
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_input["default"], {
42
- id: "combobox-input-".concat(id),
43
- className: "lunatic-combo-box-input",
39
+ disabled: disabled,
44
40
  onChange: onChangeEx,
45
41
  value: search,
46
- placeholder: placeholder,
47
- disabled: disabled,
48
42
  focused: focused,
49
43
  editable: editable,
50
44
  expanded: expanded
51
- })]
45
+ })
52
46
  });
53
47
  }
@@ -15,15 +15,8 @@ var options = [{
15
15
  value: 'banana'
16
16
  }];
17
17
  (0, _vitest.describe)('Selection component', function () {
18
- var LabelRenderer = function LabelRenderer(_ref) {
19
- var option = _ref.option;
20
- return /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
21
- children: option ? option.label : 'No selection'
22
- });
23
- };
24
18
  (0, _vitest.it)('should render correctly with default props', function () {
25
19
  var _render = (0, _react.render)( /*#__PURE__*/(0, _jsxRuntime.jsx)(_selection.Selection, {
26
- labelRenderer: LabelRenderer,
27
20
  options: options
28
21
  })),
29
22
  container = _render.container;
@@ -31,7 +24,6 @@ var options = [{
31
24
  });
32
25
  (0, _vitest.it)('should render correctly when it is editable', function () {
33
26
  var _render2 = (0, _react.render)( /*#__PURE__*/(0, _jsxRuntime.jsx)(_selection.Selection, {
34
- labelRenderer: LabelRenderer,
35
27
  options: options,
36
28
  editable: true
37
29
  })),
@@ -40,7 +32,6 @@ var options = [{
40
32
  });
41
33
  (0, _vitest.it)('should render correctly when it is expanded', function () {
42
34
  var _render3 = (0, _react.render)( /*#__PURE__*/(0, _jsxRuntime.jsx)(_selection.Selection, {
43
- labelRenderer: LabelRenderer,
44
35
  options: options,
45
36
  expanded: true
46
37
  })),
@@ -49,40 +40,24 @@ var options = [{
49
40
  });
50
41
  (0, _vitest.it)('should render correctly when it is disabled', function () {
51
42
  var _render4 = (0, _react.render)( /*#__PURE__*/(0, _jsxRuntime.jsx)(_selection.Selection, {
52
- labelRenderer: function labelRenderer(_ref2) {
53
- var option = _ref2.option;
54
- return /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
55
- children: option ? option.label : 'No selection'
56
- });
57
- },
58
43
  options: options,
59
- disabled: true
44
+ disabled: true,
45
+ placeholder: "hello!"
60
46
  })),
61
47
  container = _render4.container;
62
48
  (0, _vitest.expect)(container.firstChild).toMatchSnapshot();
63
49
  });
64
50
  (0, _vitest.it)('should render the selected option when there is a selection', function () {
65
51
  var _render5 = (0, _react.render)( /*#__PURE__*/(0, _jsxRuntime.jsx)(_selection.Selection, {
66
- labelRenderer: function labelRenderer(_ref3) {
67
- var option = _ref3.option;
68
- return /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
69
- children: option ? option.label : 'No selection'
70
- });
71
- },
72
52
  options: options,
73
- selectedIndex: 0
53
+ selectedIndex: 0,
54
+ expanded: false
74
55
  })),
75
56
  getByText = _render5.getByText;
76
- (0, _vitest.expect)(getByText('Apple')).toBeInTheDocument();
57
+ (0, _vitest.expect)(getByText('apple - Apple')).toBeInTheDocument();
77
58
  });
78
59
  (0, _vitest.it)('should not render the input when it is not editable', function () {
79
60
  var _render6 = (0, _react.render)( /*#__PURE__*/(0, _jsxRuntime.jsx)(_selection.Selection, {
80
- labelRenderer: function labelRenderer(_ref4) {
81
- var option = _ref4.option;
82
- return /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
83
- children: option ? option.label : 'No selection'
84
- });
85
- },
86
61
  options: options,
87
62
  placeholder: "Search fruits",
88
63
  editable: false
@@ -10,13 +10,6 @@ Object.defineProperty(exports, "ComboBox", {
10
10
  return _comboBox["default"];
11
11
  }
12
12
  });
13
- Object.defineProperty(exports, "DefaultLabelRenderer", {
14
- enumerable: true,
15
- get: function get() {
16
- return _defaultLabelRenderer["default"];
17
- }
18
- });
19
- exports.DefaultOptionRenderer = void 0;
20
13
  Object.defineProperty(exports, "Errors", {
21
14
  enumerable: true,
22
15
  get: function get() {
@@ -90,8 +83,6 @@ Object.defineProperty(exports, "useOptionsKeydown", {
90
83
  return _useOptionsKeydown["default"];
91
84
  }
92
85
  });
93
- var _defaultOptionRenderer = _interopRequireDefault(require("./components/default-option-renderer"));
94
- var _defaultLabelRenderer = _interopRequireDefault(require("./components/default-label-renderer"));
95
86
  var _fieldContainer = _interopRequireDefault(require("./components/field-container"));
96
87
  var _label = _interopRequireDefault(require("./components/label"));
97
88
  var _fieldset = _interopRequireDefault(require("./components/fieldset"));
@@ -109,6 +100,4 @@ var _safetyLabel = _interopRequireDefault(require("./safety-label"));
109
100
  var _errors = _interopRequireDefault(require("./components/errors"));
110
101
  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); }
111
102
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
112
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
113
- var DefaultOptionRenderer = _defaultOptionRenderer["default"]; // We need to export this way to avoid crash on storybook TODO : investigate
114
- exports.DefaultOptionRenderer = DefaultOptionRenderer;
103
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports["default"] = void 0;
7
+ require("./duration.scss");
8
+ var _commons = require("../commons");
9
+ var _lunaticComponentWithoutLabel = _interopRequireDefault(require("../commons/components/lunatic-component-without-label"));
10
+ var _durationInput = _interopRequireDefault(require("./durationInput"));
11
+ var _jsxRuntime = require("react/jsx-runtime");
12
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
13
+ function Duration(props) {
14
+ var value = props.value,
15
+ label = props.label,
16
+ format = props.format,
17
+ handleChange = props.handleChange,
18
+ response = props.response,
19
+ id = props.id,
20
+ preferences = props.preferences,
21
+ declarations = props.declarations,
22
+ missing = props.missing,
23
+ missingResponse = props.missingResponse,
24
+ management = props.management,
25
+ description = props.description;
26
+ var onChange = (0, _commons.useOnHandleChange)({
27
+ handleChange: handleChange,
28
+ response: response,
29
+ value: value !== null && value !== void 0 ? value : ''
30
+ });
31
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_lunaticComponentWithoutLabel["default"], {
32
+ id: id,
33
+ preferences: preferences,
34
+ declarations: declarations,
35
+ value: value,
36
+ missing: missing,
37
+ missingResponse: missingResponse,
38
+ management: management,
39
+ description: description,
40
+ handleChange: handleChange,
41
+ children: /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
42
+ className: "container",
43
+ children: [label, /*#__PURE__*/(0, _jsxRuntime.jsx)(_durationInput["default"], {
44
+ value: value,
45
+ format: format,
46
+ onChange: onChange
47
+ })]
48
+ })
49
+ });
50
+ }
51
+ var _default = Duration;
52
+ exports["default"] = _default;
@@ -0,0 +1,17 @@
1
+ .input-field {
2
+ width: 100px;
3
+ margin-right: 10px
4
+ }
5
+ .field-group {
6
+ display: flex;
7
+ }
8
+
9
+ .input-field-group {
10
+ display: flex;
11
+ align-items: first baseline;
12
+ margin: 5px;
13
+ }
14
+
15
+ .input-label {
16
+ margin-right: 5px;
17
+ }
@@ -0,0 +1,72 @@
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["default"] = void 0;
8
+ var _react = require("react");
9
+ var _object = require("../../utils/object");
10
+ var _formatDuration = require("./formatDuration");
11
+ var _getDurationFromValue = require("./getDurationFromValue");
12
+ var _durationUtils = require("./durationUtils");
13
+ var _jsxRuntime = require("react/jsx-runtime");
14
+ 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; }
15
+ 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; }
16
+ 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
+ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
18
+ 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 _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
20
+ 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."); }
21
+ 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); }
22
+ 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; }
23
+ 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; } }
24
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
25
+ var DurationInput = function DurationInput(_ref) {
26
+ var value = _ref.value,
27
+ format = _ref.format,
28
+ onChange = _ref.onChange;
29
+ // We need to keep an internal state since one field can be empty (null value in duration)
30
+ // but we still send "0" and we don't want the field to display "0"
31
+ var _useState = (0, _react.useState)((0, _getDurationFromValue.getDurationFromValue)(value, format)),
32
+ _useState2 = _slicedToArray(_useState, 2),
33
+ duration = _useState2[0],
34
+ setDuration = _useState2[1];
35
+
36
+ // Generate handler for a specific unit field (year, month...)
37
+ var changeHandler = function changeHandler(unit) {
38
+ return function (e) {
39
+ if (!e.target.checkValidity()) {
40
+ return;
41
+ }
42
+ var fieldValue = Number.isNaN(e.target.valueAsNumber) ? null : e.target.valueAsNumber;
43
+ var newDuration = _objectSpread(_objectSpread({}, duration), {}, _defineProperty({}, unit, fieldValue));
44
+ onChange((0, _formatDuration.formatDuration)(newDuration));
45
+ setDuration(newDuration);
46
+ };
47
+ };
48
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
49
+ className: "field-group",
50
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
51
+ className: "input-field-group",
52
+ children: (0, _object.objectKeys)(duration).map(function (unit) {
53
+ var _duration$unit;
54
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_react.Fragment, {
55
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("label", {
56
+ htmlFor: "".concat(unit, "Input"),
57
+ className: "input-label",
58
+ children: _durationUtils.labelByUnit[unit]
59
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)("input", _objectSpread({
60
+ id: "".concat(unit, "Input"),
61
+ type: "number",
62
+ value: (_duration$unit = duration[unit]) !== null && _duration$unit !== void 0 ? _duration$unit : '',
63
+ className: "input-field",
64
+ onChange: changeHandler(unit)
65
+ }, _durationUtils.propsByUnit[unit]))]
66
+ }, unit);
67
+ })
68
+ })
69
+ });
70
+ };
71
+ var _default = DurationInput;
72
+ exports["default"] = _default;
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.propsByUnit = exports.labelByUnit = void 0;
7
+ var propsByUnit = {
8
+ hours: {
9
+ min: '0',
10
+ max: '23'
11
+ },
12
+ minutes: {
13
+ min: '0',
14
+ max: '59'
15
+ },
16
+ months: {
17
+ min: '0',
18
+ max: '11'
19
+ },
20
+ years: {
21
+ min: '0'
22
+ }
23
+ };
24
+ exports.propsByUnit = propsByUnit;
25
+ var labelByUnit = {
26
+ hours: 'Heures :',
27
+ minutes: 'Minutes :',
28
+ months: 'Mois : ',
29
+ years: 'Années :'
30
+ };
31
+ exports.labelByUnit = labelByUnit;
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.formatDuration = void 0;
7
+ var formatDuration = function formatDuration(duration) {
8
+ var prefix = 'hours' in duration && 'minutes' in duration ? 'PT' : 'P';
9
+ // The duration has no numeric value (all nulls), then return null
10
+ if (Object.values(duration).filter(function (v) {
11
+ return v !== null;
12
+ }).length === 0) {
13
+ return null;
14
+ }
15
+
16
+ // Recreate unit so we can control the unit order for formatting
17
+ var units = ['years', 'months', 'hours', 'minutes'];
18
+ var durationParts = '';
19
+ for (var _i = 0, _units = units; _i < _units.length; _i++) {
20
+ var unit = _units[_i];
21
+ if (unit in duration) {
22
+ var _duration$unit;
23
+ durationParts += ((_duration$unit = duration[unit]) !== null && _duration$unit !== void 0 ? _duration$unit : 0) + unit[0].toUpperCase();
24
+ }
25
+ }
26
+ return prefix + durationParts;
27
+ };
28
+ exports.formatDuration = formatDuration;
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+
3
+ var _vitest = require("vitest");
4
+ var _formatDuration = require("./formatDuration");
5
+ (0, _vitest.describe)('formatDuration', function () {
6
+ (0, _vitest.it)('should format time correctly', function () {
7
+ (0, _vitest.expect)((0, _formatDuration.formatDuration)({
8
+ hours: 12,
9
+ minutes: 15
10
+ })).toEqual('PT12H15M');
11
+ (0, _vitest.expect)((0, _formatDuration.formatDuration)({
12
+ hours: 14,
13
+ minutes: 50
14
+ })).toEqual('PT14H50M');
15
+ (0, _vitest.expect)((0, _formatDuration.formatDuration)({
16
+ hours: null,
17
+ minutes: null
18
+ })).toEqual(null);
19
+ });
20
+ (0, _vitest.it)('should format date correctly', function () {
21
+ (0, _vitest.expect)((0, _formatDuration.formatDuration)({
22
+ years: 12,
23
+ months: 15
24
+ })).toEqual('P12Y15M');
25
+ (0, _vitest.expect)((0, _formatDuration.formatDuration)({
26
+ years: 14,
27
+ months: 50
28
+ })).toEqual('P14Y50M');
29
+ (0, _vitest.expect)((0, _formatDuration.formatDuration)({
30
+ years: 14,
31
+ months: null
32
+ })).toEqual('P14Y0M');
33
+ (0, _vitest.expect)((0, _formatDuration.formatDuration)({
34
+ years: null,
35
+ months: null
36
+ })).toEqual(null);
37
+ });
38
+ });
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.getDurationFromValue = void 0;
7
+ function _toArray(arr) { return _arrayWithHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableRest(); }
8
+ 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."); }
9
+ 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); }
10
+ 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; }
11
+ function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
12
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
13
+ /**
14
+ * Convert a string into a duration
15
+ *
16
+ * ## Example
17
+ * - "P12Y5M" => {year: 12, month: 5}
18
+ */
19
+ var getDurationFromValue = function getDurationFromValue(value, format) {
20
+ // Handle nulls value
21
+ if (value === null && format === 'PTnHnM') {
22
+ return {
23
+ hours: null,
24
+ minutes: null
25
+ };
26
+ } else if (value === null) {
27
+ return {
28
+ years: null,
29
+ months: null
30
+ };
31
+ }
32
+ var match = matchFromFormat(value, format);
33
+ if (format === 'PTnHnM') {
34
+ return {
35
+ hours: match[0],
36
+ minutes: match[1]
37
+ };
38
+ }
39
+ return {
40
+ years: match[0],
41
+ months: match[1]
42
+ };
43
+ };
44
+
45
+ /**
46
+ * Generate a regexp from the format to extract the numbers from the string
47
+ *
48
+ * ## Example :
49
+ * - "P12Y3M" => [12, 3]
50
+ */
51
+ exports.getDurationFromValue = getDurationFromValue;
52
+ var matchFromFormat = function matchFromFormat(value, format) {
53
+ var regex = new RegExp(format.replaceAll('n', '(\\d+)'));
54
+ var match = value.match(regex);
55
+ if (!match) {
56
+ throw new Error("Invalid duration value \"".concat(value, "\" does not match the format \"").concat(format, "\""));
57
+ }
58
+ var _match = _toArray(match),
59
+ _ = _match[0],
60
+ matches = _match.slice(1);
61
+ return matches.map(function (v) {
62
+ return parseInt(v, 10);
63
+ });
64
+ };
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "default", {
7
+ enumerable: true,
8
+ get: function get() {
9
+ return _duration["default"];
10
+ }
11
+ });
12
+ var _duration = _interopRequireDefault(require("./duration"));
13
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
@@ -51,6 +51,12 @@ Object.defineProperty(exports, "Dropdown", {
51
51
  return _dropdown["default"];
52
52
  }
53
53
  });
54
+ Object.defineProperty(exports, "Duration", {
55
+ enumerable: true,
56
+ get: function get() {
57
+ return _duration["default"];
58
+ }
59
+ });
54
60
  Object.defineProperty(exports, "FilterDescription", {
55
61
  enumerable: true,
56
62
  get: function get() {
@@ -194,6 +200,7 @@ var _suggesterLoaderWidget = _interopRequireDefault(require("./suggester-loader-
194
200
  var _roundabout = _interopRequireDefault(require("./roundabout"));
195
201
  var _table = _interopRequireDefault(require("./table"));
196
202
  var _componentSet = _interopRequireDefault(require("./component-set"));
203
+ var _duration = _interopRequireDefault(require("./duration"));
197
204
  var _summary = require("./summary");
198
205
  var _questionInformation = _interopRequireDefault(require("./questions/question-information"));
199
206
  var _questionContext = _interopRequireDefault(require("./questions/question-context"));
@@ -5,17 +5,15 @@ Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
7
  exports["default"] = void 0;
8
- var _react = _interopRequireWildcard(require("react"));
8
+ var _react = require("react");
9
+ var _i18n = _interopRequireDefault(require("../../../i18n"));
9
10
  var _commons = require("../../commons");
10
11
  var _declarations = require("../../declarations");
11
- var _blockForLoopOchestrator = _interopRequireDefault(require("./block-for-loop-ochestrator"));
12
- var _handleRowButton = _interopRequireDefault(require("../commons/handle-row-button"));
13
- var _i18n = _interopRequireDefault(require("../../../i18n"));
14
12
  var _getInitLength = _interopRequireDefault(require("../commons/get-init-length"));
13
+ var _handleRowButton = _interopRequireDefault(require("../commons/handle-row-button"));
14
+ var _blockForLoopOchestrator = _interopRequireDefault(require("./block-for-loop-ochestrator"));
15
15
  var _jsxRuntime = require("react/jsx-runtime");
16
16
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
17
- 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); }
18
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
19
17
  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; }
20
18
  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; }
21
19
  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; }
@@ -120,7 +118,7 @@ function BlockForLoop(_ref) {
120
118
  }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_declarations.DeclarationsDetachable, {
121
119
  declarations: declarations,
122
120
  id: id
123
- }), min && max && min !== max && /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
121
+ }), Number.isInteger(min) && Number.isInteger(max) && min !== max && /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
124
122
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_handleRowButton["default"], {
125
123
  onClick: addRow,
126
124
  disabled: nbRows === max,
@@ -5,13 +5,11 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports["default"] = void 0;
7
7
  var _classnames = _interopRequireDefault(require("classnames"));
8
- var _react = _interopRequireWildcard(require("react"));
9
8
  var _closeOrSkip = _interopRequireDefault(require("./close-or-skip"));
10
9
  var _modalContainer = _interopRequireDefault(require("./modal-container"));
11
10
  require("./modal-controls.scss");
12
11
  var _jsxRuntime = require("react/jsx-runtime");
13
- 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); }
14
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
12
+ var _react = require("react");
15
13
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
16
14
  function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
17
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."); }
@@ -25,7 +23,7 @@ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { va
25
23
  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; }
26
24
  function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
27
25
  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); }
28
- function Error(_ref) {
26
+ function ErrorItem(_ref) {
29
27
  var criticality = _ref.criticality,
30
28
  errorMessage = _ref.errorMessage;
31
29
  return /*#__PURE__*/(0, _jsxRuntime.jsx)("li", {
@@ -36,7 +34,7 @@ function Error(_ref) {
36
34
  function ComponentErrors(_ref2) {
37
35
  var errors = _ref2.errors;
38
36
  var content = errors.map(function (error, index) {
39
- return /*#__PURE__*/(0, _react.createElement)(Error, _objectSpread(_objectSpread({}, error), {}, {
37
+ return /*#__PURE__*/(0, _react.createElement)(ErrorItem, _objectSpread(_objectSpread({}, error), {}, {
40
38
  key: index
41
39
  }));
42
40
  }, []);
@@ -30,10 +30,8 @@ function Suggester(_ref) {
30
30
  placeholder = _ref$placeholder === void 0 ? _i18n["default"].PLACEHOLDER : _ref$placeholder,
31
31
  _ref$onSelect = _ref.onSelect,
32
32
  onSelect = _ref$onSelect === void 0 ? _function.voidFunction : _ref$onSelect,
33
- _ref$labelRenderer = _ref.labelRenderer,
34
- labelRenderer = _ref$labelRenderer === void 0 ? _commons.DefaultLabelRenderer : _ref$labelRenderer,
35
- _ref$optionRenderer = _ref.optionRenderer,
36
- optionRenderer = _ref$optionRenderer === void 0 ? _commons.DefaultOptionRenderer : _ref$optionRenderer,
33
+ labelRenderer = _ref.labelRenderer,
34
+ optionRenderer = _ref.optionRenderer,
37
35
  value = _ref.value,
38
36
  disabled = _ref.disabled,
39
37
  id = _ref.id,
@@ -4,7 +4,6 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports["default"] = void 0;
7
- var _react = _interopRequireDefault(require("react"));
8
7
  var _row = _interopRequireDefault(require("./row"));
9
8
  var _jsxRuntime = require("react/jsx-runtime");
10
9
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
@@ -1,6 +1,6 @@
1
1
  import { ReactNode } from 'react';
2
2
  import './combo-box.scss';
3
- import { ComboBoxOption } from './combo-box.type';
3
+ import { ComboBoxOptionType } from './combo-box.type';
4
4
  import { SelectionProps } from './selection/selection';
5
5
  import { PanelProps } from './panel/panel';
6
6
  import { LunaticBaseProps } from '../../../type';
@@ -9,13 +9,13 @@ type Props = SelectionProps & PanelProps & {
9
9
  classStyle?: string;
10
10
  value: string | null;
11
11
  messageError?: string;
12
- getOptionValue?: (o: ComboBoxOption) => string;
12
+ getOptionValue?: (o: ComboBoxOptionType) => string;
13
13
  label?: ReactNode;
14
14
  description?: ReactNode;
15
15
  errors?: LunaticBaseProps['errors'];
16
16
  onChange?: (s: string | null) => void;
17
17
  onSelect: (s: string | null) => void;
18
- options: ComboBoxOption[];
18
+ options: ComboBoxOptionType[];
19
19
  };
20
20
  declare const _default: import("react").ComponentType<Props>;
21
21
  export default _default;
@@ -1,6 +1,6 @@
1
1
  /// <reference types="react" />
2
2
  import { Meta, Story } from '@storybook/react';
3
- import { ComboBoxOption } from './combo-box.type';
3
+ import { ComboBoxOptionType } from './combo-box.type';
4
4
  declare const stories: Meta;
5
5
  export default stories;
6
6
  export declare const Default: Story<{
@@ -15,7 +15,7 @@ export declare const Default: Story<{
15
15
  classStyle?: string | undefined;
16
16
  value: string | null;
17
17
  messageError?: string | undefined;
18
- getOptionValue?: ((o: ComboBoxOption) => string) | undefined;
18
+ getOptionValue?: ((o: ComboBoxOptionType) => string) | undefined;
19
19
  label?: import("react").ReactNode;
20
20
  description?: import("react").ReactNode;
21
21
  errors?: {
@@ -23,5 +23,5 @@ export declare const Default: Story<{
23
23
  } | undefined;
24
24
  onChange?: ((s: string | null) => void) | undefined;
25
25
  onSelect: (s: string | null) => void;
26
- options: ComboBoxOption[];
26
+ options: ComboBoxOptionType[];
27
27
  }>;
@@ -1,5 +1,5 @@
1
1
  import { ReactNode } from 'react';
2
- export type ComboBoxOption = {
2
+ export type ComboBoxOptionType = {
3
3
  id?: string;
4
4
  description?: ReactNode;
5
5
  label?: ReactNode;