@inseefr/lunatic 0.3.2-experimental → 0.3.6-experimental

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/index.js +38 -82
  2. package/lib/index.js.map +1 -1
  3. package/package.json +2 -2
  4. package/src/components/breadcrumb/component.js +29 -29
  5. package/src/components/button/component.js +53 -53
  6. package/src/components/button/index.js +1 -1
  7. package/src/components/checkbox/index.js +3 -3
  8. package/src/components/datepicker/index.js +1 -1
  9. package/src/components/declarations/index.js +1 -1
  10. package/src/components/declarations/wrappers/input-declarations-wrapper.js +28 -7
  11. package/src/components/declarations/wrappers/list-declarations-wrapper.js +232 -232
  12. package/src/components/dropdown/commons/components/dropdown.js +21 -0
  13. package/src/components/dropdown/dropdown-edit/dropdown-edit.js +4 -1
  14. package/src/components/dropdown/dropdown-simple/dropdown.js +3 -1
  15. package/src/components/filter-description/component.js +42 -42
  16. package/src/components/icon/component.js +33 -33
  17. package/src/components/input/index.js +2 -2
  18. package/src/components/input/input-number.js +2 -1
  19. package/src/components/loop/index.js +1 -1
  20. package/src/components/loop-constructor/wrapper/body-component.js +13 -1
  21. package/src/components/radio/index.js +1 -1
  22. package/src/components/sequence/index.js +1 -1
  23. package/src/components/subsequence/index.js +1 -1
  24. package/src/components/suggester/check-store.js +70 -70
  25. package/src/components/suggester/components/suggester-content.js +42 -42
  26. package/src/components/suggester/components/suggester.js +43 -3
  27. package/src/components/suggester/idb-suggester.js +7 -1
  28. package/src/components/suggester/lunatic-suggester.js +1 -0
  29. package/src/components/suggester/suggester-wrapper.js +6 -0
  30. package/src/components/tooltip/response.js +52 -52
  31. package/src/stories/checkbox-boolean/data-forced.json +48 -48
  32. package/src/stories/icons/icons.stories.js +16 -16
  33. package/src/stories/questionnaire/kish.json +275 -0
  34. package/src/stories/questionnaire/logement-queen.json +23390 -23390
  35. package/src/stories/questionnaire/logement-s2.json +46027 -44536
  36. package/src/stories/questionnaire/questionnaire.stories.js +14 -2
  37. package/src/stories/utils/custom-lunatic.scss +23 -23
  38. package/src/stories/utils/orchestrator-split.js +4 -2
  39. package/src/stories/utils/orchestrator.js +4 -2
  40. package/src/tests/components/breadcrumb.spec.js +13 -13
  41. package/src/tests/components/button.spec.js +11 -11
  42. package/src/tests/components/checkbox-boolean.spec.js +45 -45
  43. package/src/tests/components/checkbox-group.spec.js +53 -53
  44. package/src/tests/components/checkbox-one.spec.js +32 -32
  45. package/src/tests/components/datepicker.spec.js +22 -22
  46. package/src/tests/components/declarations-wrappers/input-declarations-wrapper.spec.js +67 -67
  47. package/src/tests/components/declarations-wrappers/list-declarations-wrapper.spec.js +52 -52
  48. package/src/tests/components/declarations-wrappers/simple-declarations-wrapper.spec.js +21 -21
  49. package/src/tests/components/declarations.spec.js +46 -46
  50. package/src/tests/components/input.spec.js +18 -18
  51. package/src/tests/components/loops/loop-static.json +66 -66
  52. package/src/tests/components/loops/loop.json +258 -258
  53. package/src/tests/components/loops/loop.spec.js +30 -30
  54. package/src/tests/components/loops/roster-for-loop.spec.js +18 -18
  55. package/src/tests/components/progress-bar.spec.js +15 -15
  56. package/src/tests/components/radio.spec.js +27 -27
  57. package/src/tests/components/sequence.spec.js +9 -9
  58. package/src/tests/components/subsequence.spec.js +9 -9
  59. package/src/tests/components/table.spec.js +11 -11
  60. package/src/tests/components/textarea.spec.js +18 -18
  61. package/src/tests/components/tooltip.spec.js +25 -25
  62. package/src/tests/setup/setupTests.js +4 -4
  63. package/src/tests/utils/lib/alphabet.spec.js +36 -36
  64. package/src/tests/utils/lib/array.spec.js +22 -22
  65. package/src/tests/utils/lib/checkbox/group.spec.js +72 -72
  66. package/src/tests/utils/lib/decorator/title-decorator.spec.js +12 -12
  67. package/src/tests/utils/lib/input-number.spec.js +18 -18
  68. package/src/tests/utils/lib/items-positioning.spec.js +17 -17
  69. package/src/tests/utils/lib/label-position.spec.js +22 -22
  70. package/src/tests/utils/lib/loops/bindings.spec.js +75 -75
  71. package/src/tests/utils/lib/loops/shared.spec.js +82 -82
  72. package/src/tests/utils/lib/missing/missing.spec.js +74 -74
  73. package/src/tests/utils/lib/missing/mock.js +137 -137
  74. package/src/tests/utils/lib/pagination/shared.spec.js +42 -42
  75. package/src/tests/utils/lib/responses.spec.js +64 -64
  76. package/src/tests/utils/lib/style.spec.js +26 -26
  77. package/src/tests/utils/lib/tooltip/build-response.spec.js +95 -95
  78. package/src/tests/utils/lib/tooltip/content.spec.js +109 -109
  79. package/src/tests/utils/to-expose/handler/handler.spec.js +94 -94
  80. package/src/tests/utils/to-expose/handler/questionnaire.json +158 -158
  81. package/src/tests/utils/to-expose/handler/results/index.js +6 -6
  82. package/src/tests/utils/to-expose/handler/results/res-double.json +158 -158
  83. package/src/tests/utils/to-expose/handler/results/res-input-collected.json +158 -158
  84. package/src/tests/utils/to-expose/handler/results/res-input-edited.json +158 -158
  85. package/src/tests/utils/to-expose/handler/results/res-loop.json +158 -158
  86. package/src/tests/utils/to-expose/handler/results/res-matrix.json +158 -158
  87. package/src/tests/utils/to-expose/handler/results/res-responses.json +158 -158
  88. package/src/tests/utils/to-expose/hooks/use-lunatic.spec.js +46 -46
  89. package/src/tests/utils/to-expose/init-questionnaire/data.json +12 -12
  90. package/src/tests/utils/to-expose/init-questionnaire/init-questionnaire.spec.js +19 -19
  91. package/src/tests/utils/to-expose/interpret/interpret.spec.js +48 -48
  92. package/src/tests/utils/to-expose/state/questionnaire.json +61 -61
  93. package/src/tests/utils/to-expose/state/results.js +78 -78
  94. package/src/utils/lib/splitting.js +55 -23
  95. package/src/utils/lib/tooltip/build-response.js +41 -41
  96. package/src/utils/store-tools/create/index.js +1 -1
  97. package/src/utils/store-tools/create/update-store-info.js +26 -26
  98. package/src/utils/store-tools/index.js +5 -5
  99. package/src/utils/to-expose/handler.js +12 -14
  100. package/src/utils/to-expose/hooks/lunatic-split.js +44 -27
  101. package/src/utils/to-expose/hooks/lunatic.js +12 -5
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@inseefr/lunatic",
3
- "version": "0.3.2-experimental",
3
+ "version": "0.3.6-experimental",
4
4
  "workersVersion": "0.2.1-experimental",
5
5
  "description": "Library of questionnaire components",
6
6
  "repository": {
@@ -50,7 +50,7 @@
50
50
  "library"
51
51
  ],
52
52
  "dependencies": {
53
- "@inseefr/trevas": "^0.1.11",
53
+ "@inseefr/trevas": "^0.1.14",
54
54
  "date-fns": "^2.25.0",
55
55
  "lodash.camelcase": "^4.3.0",
56
56
  "lodash.debounce": "^4.0.8",
@@ -1,29 +1,29 @@
1
- import React from 'react';
2
- import PropTypes from 'prop-types';
3
- import { buildStyleObject } from '../../utils/lib';
4
- import './breadcrumb.scss';
5
-
6
- const Breadcrumb = ({ elements, style }) => (
7
- <div
8
- aria-label={`breadcrumb`}
9
- className="breadcrumb-lunatic"
10
- style={buildStyleObject(style)}
11
- >
12
- {elements.map((e, i) => (
13
- <React.Fragment key={`breadcrumb-${e.toLowerCase()}`}>
14
- {e && (
15
- <span className={i !== 0 ? 'breadcrumb-element-lunatic' : undefined}>
16
- {e}
17
- </span>
18
- )}
19
- </React.Fragment>
20
- ))}
21
- </div>
22
- );
23
-
24
- Breadcrumb.propTypes = {
25
- elements: PropTypes.arrayOf(PropTypes.string).isRequired,
26
- style: PropTypes.object,
27
- };
28
-
29
- export default Breadcrumb;
1
+ import React from 'react';
2
+ import PropTypes from 'prop-types';
3
+ import { buildStyleObject } from '../../utils/lib';
4
+ import './breadcrumb.scss';
5
+
6
+ const Breadcrumb = ({ elements, style }) => (
7
+ <div
8
+ aria-label={`breadcrumb`}
9
+ className="breadcrumb-lunatic"
10
+ style={buildStyleObject(style)}
11
+ >
12
+ {elements.map((e, i) => (
13
+ <React.Fragment key={`breadcrumb-${e.toLowerCase()}`}>
14
+ {e && (
15
+ <span className={i !== 0 ? 'breadcrumb-element-lunatic' : undefined}>
16
+ {e}
17
+ </span>
18
+ )}
19
+ </React.Fragment>
20
+ ))}
21
+ </div>
22
+ );
23
+
24
+ Breadcrumb.propTypes = {
25
+ elements: PropTypes.arrayOf(PropTypes.string).isRequired,
26
+ style: PropTypes.object,
27
+ };
28
+
29
+ export default Breadcrumb;
@@ -1,53 +1,53 @@
1
- import React from 'react';
2
- import PropTypes from 'prop-types';
3
- import {
4
- buildStyleObject,
5
- createObjectEvent,
6
- isFunction,
7
- } from '../../utils/lib';
8
- import './button.scss';
9
- import { BUTTON_CATEGORY, EVENT_CLICK } from '../../constants';
10
-
11
- const Button = ({
12
- label,
13
- value,
14
- onClick,
15
- disabled,
16
- style,
17
- logFunction,
18
- id,
19
- }) => {
20
- const handleClick = (e) => {
21
- onClick(e);
22
- if (isFunction(logFunction))
23
- logFunction(
24
- createObjectEvent(
25
- `button-lunatic-${id}`,
26
- BUTTON_CATEGORY,
27
- EVENT_CLICK,
28
- null,
29
- label
30
- )
31
- );
32
- };
33
- return (
34
- <button
35
- type="button"
36
- aria-label={label || 'button'}
37
- className="button-lunatic"
38
- style={buildStyleObject(style)}
39
- disabled={disabled}
40
- onClick={handleClick}
41
- >
42
- {value}
43
- </button>
44
- );
45
- };
46
-
47
- Button.propTypes = {
48
- value: PropTypes.oneOfType([PropTypes.string, PropTypes.element]).isRequired,
49
- disabled: PropTypes.bool,
50
- onClick: PropTypes.func.isRequired,
51
- };
52
-
53
- export default Button;
1
+ import React from 'react';
2
+ import PropTypes from 'prop-types';
3
+ import {
4
+ buildStyleObject,
5
+ createObjectEvent,
6
+ isFunction,
7
+ } from '../../utils/lib';
8
+ import './button.scss';
9
+ import { BUTTON_CATEGORY, EVENT_CLICK } from '../../constants';
10
+
11
+ const Button = ({
12
+ label,
13
+ value,
14
+ onClick,
15
+ disabled,
16
+ style,
17
+ logFunction,
18
+ id,
19
+ }) => {
20
+ const handleClick = (e) => {
21
+ onClick(e);
22
+ if (isFunction(logFunction))
23
+ logFunction(
24
+ createObjectEvent(
25
+ `button-lunatic-${id}`,
26
+ BUTTON_CATEGORY,
27
+ EVENT_CLICK,
28
+ null,
29
+ label
30
+ )
31
+ );
32
+ };
33
+ return (
34
+ <button
35
+ type="button"
36
+ aria-label={label || 'button'}
37
+ className="button-lunatic"
38
+ style={buildStyleObject(style)}
39
+ disabled={disabled}
40
+ onClick={handleClick}
41
+ >
42
+ {value}
43
+ </button>
44
+ );
45
+ };
46
+
47
+ Button.propTypes = {
48
+ value: PropTypes.oneOfType([PropTypes.string, PropTypes.element]).isRequired,
49
+ disabled: PropTypes.bool,
50
+ onClick: PropTypes.func.isRequired,
51
+ };
52
+
53
+ export default Button;
@@ -1 +1 @@
1
- export { default } from './component';
1
+ export { default } from './component';
@@ -1,3 +1,3 @@
1
- export { default as CheckboxGroup } from './group';
2
- export { default as CheckboxBoolean } from './boolean';
3
- export { default as CheckboxOne } from './one';
1
+ export { default as CheckboxGroup } from './group';
2
+ export { default as CheckboxBoolean } from './boolean';
3
+ export { default as CheckboxOne } from './one';
@@ -1 +1 @@
1
- export { default } from './component';
1
+ export { default } from './component';
@@ -1 +1 @@
1
- export { default } from './component';
1
+ export { default } from './component';
@@ -172,14 +172,25 @@ const InputDeclarationsWrapper = ({
172
172
  aria-required={mandatory}
173
173
  onChange={(e) => {
174
174
  const v = e.target.value;
175
+ const valueToFire = v === '' ? null : v;
176
+ const valueToFireForArrows =
177
+ Number.parseFloat(v).toFixed(decimals);
175
178
  if (
179
+ decimals &&
180
+ v !== '' &&
181
+ !new RegExp(`^[0-9]+(.[0-9]{1,${decimals}})?$`).test(
182
+ valueToFireForArrows
183
+ )
184
+ ) {
185
+ e.preventDefault();
186
+ } else if (
176
187
  (([null, ''].includes(v) && value.length > 0) ||
177
188
  ([null, ''].includes(value) && v.length > 0)) &&
178
189
  componentType !== 'Datepicker'
179
190
  ) {
180
- setValue(v);
191
+ setValue(valueToFire);
181
192
  handleChange({
182
- [U.getResponseName(response)]: v,
193
+ [U.getResponseName(response)]: valueToFire,
183
194
  });
184
195
  } else if (
185
196
  // Chrome
@@ -187,11 +198,16 @@ const InputDeclarationsWrapper = ({
187
198
  'Event' &&
188
199
  roleType !== 'datepicker') ||
189
200
  // FF hack: impossible to handle arrow events
190
- (Math.abs(v - value) === 1 && isInputNumber)
201
+ (Math.abs(v - value).toFixed(decimals) !==
202
+ Number.parseFloat(`${Math.pow(10, -decimals)}`).toFixed(
203
+ decimals
204
+ ) &&
205
+ !Number.parseInt(v, 10) &&
206
+ isInputNumber)
191
207
  ) {
192
- setValue(v);
208
+ setValue(valueToFireForArrows);
193
209
  handleChange({
194
- [U.getResponseName(response)]: v,
210
+ [U.getResponseName(response)]: valueToFireForArrows,
195
211
  });
196
212
  } else {
197
213
  if (isInputNumber) {
@@ -205,12 +221,17 @@ const InputDeclarationsWrapper = ({
205
221
  return null;
206
222
  } else validate(v);
207
223
  }
208
- if (management) setValue(v);
209
- else setValue(v === '' ? null : v);
224
+ if (management) setValue(valueToFire);
225
+ else setValue(valueToFire);
210
226
  }
211
227
  }}
212
228
  onBlur={handleChangeOnBlur}
213
229
  onFocus={handleFocusIn}
230
+ onKeyPress={(event) => {
231
+ if (decimals === 0 && !/[0-9]/.test(event.key)) {
232
+ event.preventDefault();
233
+ }
234
+ }}
214
235
  />
215
236
  {isInputNumber && unit && unitPosition === 'AFTER' && (
216
237
  <span className="unit">{unit}</span>