@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
@@ -17,13 +17,17 @@ import { useFilterComponents } from './filter-components';
17
17
  import { loadSuggesters } from '../../store-tools/auto-load';
18
18
  import { getCollectedStateByValueType, getState } from '..';
19
19
 
20
+ const defaultData = {};
21
+ const defaultPreferences = [COLLECTED];
22
+ const defaultFeatures = ['VTL'];
23
+
20
24
  const useLunaticSplit = (
21
25
  source,
22
- data,
26
+ data = defaultData,
23
27
  {
24
28
  savingType = COLLECTED,
25
- preferences = [COLLECTED],
26
- features = ['VTL'],
29
+ preferences = defaultPreferences,
30
+ features = defaultFeatures,
27
31
  management = false,
28
32
  pagination = false,
29
33
  modalForControls = false,
@@ -38,37 +42,48 @@ const useLunaticSplit = (
38
42
  console.log('useLunaticSplit');
39
43
  var start = new Date().getTime();
40
44
  }
45
+ const fullQuestionnaire = useMemo(
46
+ () => mergeQuestionnaireAndData(source)(data),
47
+ [source, data]
48
+ );
41
49
  const sources = useMemo(() => getSplitQuestionnaireSource(source), [source]);
50
+ const allData = useMemo(
51
+ () => getState(fullQuestionnaire),
52
+ [fullQuestionnaire]
53
+ );
54
+ const [allBindings, setAllBindings] = useState(() =>
55
+ getBindings(fullQuestionnaire)
56
+ );
57
+
42
58
  const rootPagesOfSource = useMemo(
43
59
  () => getRootPageInSources(sources),
44
60
  [sources]
45
61
  );
46
62
 
47
- const [sourceIndice, setSourceIndice] = useState(0);
48
- const [lunaticData, setLunaticData] = useState(data || {});
63
+ const [sourceIndex, setSourceIndex] = useState(0);
64
+ const [lunaticData, setLunaticData] = useState(allData);
49
65
 
50
66
  const [initPage, setInitPage] = useState(false);
51
67
  const featuresWithoutMD = features.filter((f) => f !== 'MD');
52
68
 
53
69
  const [questionnaire, setQuestionnaire] = useState(() =>
54
- mergeQuestionnaireAndData(sources[sourceIndice])(lunaticData)
70
+ mergeQuestionnaireAndData(sources[sourceIndex])(lunaticData)
55
71
  );
56
72
  const [bindings, setBindings] = useState(() => getBindings(questionnaire));
57
- const [allBindings, setAllBindings] = useState(bindings);
58
73
 
59
74
  const [wantedPage, setWantedPage] = useState(null);
60
75
 
61
76
  // updating current source
62
77
  useEffect(() => {
63
78
  setInitPage(false);
64
- const newQ = mergeQuestionnaireAndData(sources[sourceIndice])(lunaticData);
79
+ const newQ = mergeQuestionnaireAndData(sources[sourceIndex])(lunaticData);
65
80
  setQuestionnaire(newQ);
66
81
  const bind = getBindings(newQ);
67
82
  setBindings(bind);
68
83
  setAllBindings({ ...allBindings, ...bind });
69
84
 
70
85
  // eslint-disable-next-line react-hooks/exhaustive-deps
71
- }, [sources, sourceIndice]);
86
+ }, [sources, sourceIndex]);
72
87
 
73
88
  const getBindingsSplit = (quest) => {
74
89
  const bind = getBindings(quest);
@@ -141,14 +156,14 @@ const useLunaticSplit = (
141
156
 
142
157
  const isFirstPage = page === firstPage;
143
158
  const isLastPage = page === maxPage;
144
- const isFirstSource = sourceIndice === 0;
145
- const isLastSource = sourceIndice === sources.length - 1;
159
+ const isFirstSource = sourceIndex === 0;
160
+ const isLastSource = sourceIndex === sources.length - 1;
146
161
 
147
162
  const goSplitNext = () => {
148
163
  if (!isLastSource) {
149
164
  const stateData = getState(questionnaire);
150
165
  setLunaticData(mergeStateData(lunaticData, stateData));
151
- setSourceIndice(sourceIndice + 1);
166
+ setSourceIndex(sourceIndex + 1);
152
167
  }
153
168
  };
154
169
 
@@ -189,7 +204,7 @@ const useLunaticSplit = (
189
204
  if (!isFirstSource) {
190
205
  const stateData = getState(questionnaire);
191
206
  setLunaticData(mergeStateData(lunaticData, stateData));
192
- setSourceIndice(sourceIndice - 1);
207
+ setSourceIndex(sourceIndex - 1);
193
208
  }
194
209
  };
195
210
 
@@ -233,7 +248,7 @@ const useLunaticSplit = (
233
248
  (newPage) => {
234
249
  const p = newPage?.split('.')[0];
235
250
  const index = rootPagesOfSource.findIndex((pages) => pages.includes(p));
236
- if (index === sourceIndice) {
251
+ if (index === sourceIndex) {
237
252
  setPage(newPage);
238
253
  setWantedPage(null);
239
254
  } else {
@@ -241,10 +256,10 @@ const useLunaticSplit = (
241
256
  setWantedPage(newPage);
242
257
  const stateData = getState(questionnaire);
243
258
  setLunaticData(mergeStateData(lunaticData, stateData));
244
- setSourceIndice(index);
259
+ setSourceIndex(index);
245
260
  }
246
261
  },
247
- [lunaticData, questionnaire, rootPagesOfSource, sourceIndice]
262
+ [lunaticData, questionnaire, rootPagesOfSource, sourceIndex]
248
263
  );
249
264
 
250
265
  useEffect(() => {
@@ -252,13 +267,12 @@ const useLunaticSplit = (
252
267
  if (wantedPage) {
253
268
  setPage(wantedPage);
254
269
  setWantedPage(null);
255
- setInitPage(true);
256
270
  } else {
257
271
  const getNewInitPage = () => {
258
272
  if (flow === FLOW_NEXT) {
259
273
  const tempPage =
260
- sourceIndice - 1 > 0
261
- ? sources[sourceIndice - 1].maxPage
274
+ sourceIndex - 1 > 0
275
+ ? sources[sourceIndex - 1].maxPage
262
276
  : sources[0].maxPage;
263
277
  return getPage({
264
278
  components: questionnaire.components,
@@ -270,8 +284,8 @@ const useLunaticSplit = (
270
284
  });
271
285
  } else if (flow === FLOW_PREVIOUS) {
272
286
  const tempPage =
273
- sourceIndice + 1 < sources.length - 1
274
- ? sources[sourceIndice + 1].firstPage
287
+ sourceIndex + 1 < sources.length - 1
288
+ ? sources[sourceIndex + 1].firstPage
275
289
  : sources[sources.length - 1].firstPage;
276
290
  return getPage({
277
291
  components: questionnaire.components,
@@ -289,12 +303,12 @@ const useLunaticSplit = (
289
303
  else {
290
304
  const newPage = getNewInitPage();
291
305
  if (!newPage) {
292
- if (flow === FLOW_NEXT) setSourceIndice(sourceIndice + 1);
293
- else setSourceIndice(sourceIndice - 1);
306
+ if (flow === FLOW_NEXT) setSourceIndex(sourceIndex + 1);
307
+ else setSourceIndex(sourceIndex - 1);
294
308
  } else setPage(newPage);
295
309
  }
296
- setInitPage(true);
297
310
  }
311
+ setInitPage(true);
298
312
  }
299
313
  }, [
300
314
  initPage,
@@ -305,7 +319,7 @@ const useLunaticSplit = (
305
319
  page,
306
320
  featuresWithoutMD,
307
321
  management,
308
- sourceIndice,
322
+ sourceIndex,
309
323
  sources,
310
324
  flow,
311
325
  wantedPage,
@@ -347,11 +361,14 @@ const useLunaticSplit = (
347
361
 
348
362
  useEffect(() => {
349
363
  if (Object.keys(todoExternals).length !== 0) {
350
- const newQ = updateExternals(questionnaire)(logFunction)(todoExternals);
364
+ const newQ = updateExternals(questionnaire)(logFunction, preferences)(
365
+ todoExternals
366
+ );
367
+ setBindings(getBindings(newQ));
351
368
  setQuestionnaire(newQ);
352
369
  setTodoExternals({});
353
370
  }
354
- }, [todoExternals, logFunction, questionnaire]);
371
+ }, [todoExternals, logFunction, questionnaire, preferences]);
355
372
 
356
373
  const cancelModal = () => {
357
374
  setModalContent(null);
@@ -13,13 +13,17 @@ import { COLLECTED } from '../../../constants';
13
13
  import { useFilterComponents } from './filter-components';
14
14
  import { loadSuggesters } from '../../store-tools/auto-load';
15
15
 
16
+ const defaultData = {};
17
+ const defaultPreferences = [COLLECTED];
18
+ const defaultFeatures = ['VTL'];
19
+
16
20
  const useLunatic = (
17
21
  source,
18
- data,
22
+ data = defaultData,
19
23
  {
20
24
  savingType = COLLECTED,
21
- preferences = [COLLECTED],
22
- features = ['VTL'],
25
+ preferences = defaultPreferences,
26
+ features = defaultFeatures,
23
27
  management = false,
24
28
  pagination = false,
25
29
  modalForControls = false,
@@ -212,11 +216,14 @@ const useLunatic = (
212
216
 
213
217
  useEffect(() => {
214
218
  if (Object.keys(todoExternals).length !== 0) {
215
- const newQ = updateExternals(questionnaire)(logFunction)(todoExternals);
219
+ const newQ = updateExternals(questionnaire)(logFunction, preferences)(
220
+ todoExternals
221
+ );
222
+ setBindings(getBindings(newQ));
216
223
  setQuestionnaire(newQ);
217
224
  setTodoExternals({});
218
225
  }
219
- }, [todoExternals, logFunction, questionnaire]);
226
+ }, [todoExternals, logFunction, questionnaire, preferences]);
220
227
 
221
228
  const cancelModal = () => {
222
229
  setModalContent(null);