@inseefr/lunatic 3.13.4 → 3.13.5-rc-fix-multimode.1

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 (81) hide show
  1. package/components/Duration/getDurationFromValue.d.ts +2 -2
  2. package/components/Duration/getDurationFromValue.js +7 -6
  3. package/components/Duration/getDurationFromValue.js.map +1 -1
  4. package/components/Suggester/CustomSuggester.d.ts +1 -0
  5. package/components/Suggester/CustomSuggester.js +2 -2
  6. package/components/Suggester/CustomSuggester.js.map +1 -1
  7. package/components/Suggester/CustomSuggester.spec.d.ts +1 -0
  8. package/components/Suggester/CustomSuggester.spec.js +32 -0
  9. package/components/Suggester/CustomSuggester.spec.js.map +1 -0
  10. package/components/Suggester/Suggester.d.ts +1 -1
  11. package/components/Suggester/Suggester.js +2 -2
  12. package/components/Suggester/Suggester.js.map +1 -1
  13. package/components/shared/Combobox/Combobox.js +2 -2
  14. package/components/shared/Combobox/Combobox.js.map +1 -1
  15. package/components/shared/Combobox/ComboboxType.d.ts +1 -0
  16. package/components/shared/Combobox/Selection/ComboboxInput.d.ts +1 -0
  17. package/components/shared/Combobox/Selection/ComboboxInput.js +2 -2
  18. package/components/shared/Combobox/Selection/ComboboxInput.js.map +1 -1
  19. package/components/shared/Combobox/Selection/ComboboxSelection.d.ts +1 -1
  20. package/components/shared/Combobox/Selection/ComboboxSelection.js +3 -3
  21. package/components/shared/Combobox/Selection/ComboboxSelection.js.map +1 -1
  22. package/esm/components/Duration/getDurationFromValue.d.ts +2 -2
  23. package/esm/components/Duration/getDurationFromValue.js +7 -6
  24. package/esm/components/Duration/getDurationFromValue.js.map +1 -1
  25. package/esm/components/Suggester/CustomSuggester.d.ts +1 -0
  26. package/esm/components/Suggester/CustomSuggester.js +2 -2
  27. package/esm/components/Suggester/CustomSuggester.js.map +1 -1
  28. package/esm/components/Suggester/CustomSuggester.spec.d.ts +1 -0
  29. package/esm/components/Suggester/CustomSuggester.spec.js +30 -0
  30. package/esm/components/Suggester/CustomSuggester.spec.js.map +1 -0
  31. package/esm/components/Suggester/Suggester.d.ts +1 -1
  32. package/esm/components/Suggester/Suggester.js +2 -2
  33. package/esm/components/Suggester/Suggester.js.map +1 -1
  34. package/esm/components/shared/Combobox/Combobox.js +2 -2
  35. package/esm/components/shared/Combobox/Combobox.js.map +1 -1
  36. package/esm/components/shared/Combobox/ComboboxType.d.ts +1 -0
  37. package/esm/components/shared/Combobox/Selection/ComboboxInput.d.ts +1 -0
  38. package/esm/components/shared/Combobox/Selection/ComboboxInput.js +2 -2
  39. package/esm/components/shared/Combobox/Selection/ComboboxInput.js.map +1 -1
  40. package/esm/components/shared/Combobox/Selection/ComboboxSelection.d.ts +1 -1
  41. package/esm/components/shared/Combobox/Selection/ComboboxSelection.js +3 -3
  42. package/esm/components/shared/Combobox/Selection/ComboboxSelection.js.map +1 -1
  43. package/esm/hooks/useMultimode.js +21 -10
  44. package/esm/hooks/useMultimode.js.map +1 -1
  45. package/esm/use-lunatic/commons/compile-controls.d.ts +5 -0
  46. package/esm/use-lunatic/commons/compile-controls.js +6 -1
  47. package/esm/use-lunatic/commons/compile-controls.js.map +1 -1
  48. package/esm/use-lunatic/commons/compile-controls.spec.d.ts +1 -0
  49. package/esm/use-lunatic/commons/compile-controls.spec.js +121 -0
  50. package/esm/use-lunatic/commons/compile-controls.spec.js.map +1 -0
  51. package/esm/utils/getArticulationState.js +12 -6
  52. package/esm/utils/getArticulationState.js.map +1 -1
  53. package/hooks/useMultimode.js +20 -8
  54. package/hooks/useMultimode.js.map +1 -1
  55. package/package.json +21 -3
  56. package/src/components/Dropdown/__snapshots__/Dropdown.spec.tsx.snap +0 -2
  57. package/src/components/Duration/getDurationFromValue.ts +10 -6
  58. package/src/components/Suggester/CustomSuggester.spec.tsx +32 -0
  59. package/src/components/Suggester/CustomSuggester.tsx +3 -0
  60. package/src/components/Suggester/Suggester.tsx +2 -0
  61. package/src/components/shared/Combobox/Combobox.tsx +2 -0
  62. package/src/components/shared/Combobox/ComboboxType.ts +1 -0
  63. package/src/components/shared/Combobox/Selection/ComboboxInput.tsx +4 -0
  64. package/src/components/shared/Combobox/Selection/ComboboxSelection.tsx +3 -2
  65. package/src/components/shared/Combobox/Selection/__snapshots__/ComboboxSelection.spec.tsx.snap +0 -4
  66. package/src/hooks/useMultimode.ts +27 -13
  67. package/src/stories/questionnaires/SRCV/data.json +116 -0
  68. package/src/stories/questionnaires/SRCV/source.json +69256 -0
  69. package/src/stories/questionnaires/SRCV/srcv.stories.tsx +23 -0
  70. package/src/use-lunatic/commons/compile-controls.spec.ts +136 -0
  71. package/src/use-lunatic/commons/compile-controls.ts +7 -1
  72. package/src/utils/getArticulationState.ts +16 -8
  73. package/tsconfig.build.tsbuildinfo +1 -1
  74. package/use-lunatic/commons/compile-controls.d.ts +5 -0
  75. package/use-lunatic/commons/compile-controls.js +6 -0
  76. package/use-lunatic/commons/compile-controls.js.map +1 -1
  77. package/use-lunatic/commons/compile-controls.spec.d.ts +1 -0
  78. package/use-lunatic/commons/compile-controls.spec.js +123 -0
  79. package/use-lunatic/commons/compile-controls.spec.js.map +1 -0
  80. package/utils/getArticulationState.js +12 -6
  81. package/utils/getArticulationState.js.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"ComboboxInput.js","sourceRoot":"","sources":["../../../../../src/components/shared/Combobox/Selection/ComboboxInput.tsx"],"names":[],"mappings":";AAAA,OAAc,EACb,MAAM,EACN,SAAS,GAGT,MAAM,OAAO,CAAC;AACf,OAAO,UAAU,MAAM,YAAY,CAAC;AACpC,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAYlE,SAAS,oBAAoB,CAAC,EAC7B,WAAW,EACX,QAAQ,EACR,QAAQ,EACR,KAAK,EACL,EAAE,EACF,UAAU,EACV,OAAO,EACP,SAAS,EACT,OAAO,GACK;IACZ,MAAM,OAAO,GAAG,MAAM,CAAmB,IAAI,CAAC,CAAC;IAE/C,SAAS,CAAC,GAAG,EAAE;QACd,IAAI,OAAO,CAAC,OAAO,IAAI,OAAO,EAAE,CAAC;YAChC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACzB,CAAC;IACF,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;IAEvB,MAAM,SAAS,GAAyB,CAAC,CAAC,EAAE,EAAE;QAC7C,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QAClB,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,WAAW,EAAE,CAAC;YAC9C,CAAC,CAAC,cAAc,EAAE,CAAC;QACpB,CAAC;IACF,CAAC,CAAC;IAEF,OAAO,CACN,gBACC,GAAG,EAAE,OAAO,EACZ,EAAE,EAAE,EAAE,EACN,SAAS,EAAE,UAAU,CAAC,yBAAyB,EAAE,SAAS,CAAC,EAC3D,IAAI,EAAC,MAAM,EACX,QAAQ,EAAE,QAAQ,EAClB,KAAK,EAAE,KAAK,kBACE,OAAO,EACrB,KAAK,EAAC,WAAW,EACjB,YAAY,EAAC,KAAK,EAClB,cAAc,EAAC,KAAK,EACpB,WAAW,EAAC,KAAK,EACjB,UAAU,EAAC,OAAO,EAClB,WAAW,EAAE,WAAW,EACxB,QAAQ,EAAE,QAAQ,qBACD,UAAU,EAC3B,SAAS,EAAE,SAAS,GACnB,CACF,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,aAAa,GAAG,kBAAkB,CAC9C,eAAe,EACf,oBAAoB,CACpB,CAAC"}
1
+ {"version":3,"file":"ComboboxInput.js","sourceRoot":"","sources":["../../../../../src/components/shared/Combobox/Selection/ComboboxInput.tsx"],"names":[],"mappings":";AAAA,OAAc,EACb,MAAM,EACN,SAAS,GAGT,MAAM,OAAO,CAAC;AACf,OAAO,UAAU,MAAM,YAAY,CAAC;AACpC,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAalE,SAAS,oBAAoB,CAAC,EAC7B,WAAW,EACX,QAAQ,EACR,QAAQ,EACR,KAAK,EACL,EAAE,EACF,UAAU,EACV,OAAO,EACP,SAAS,EACT,OAAO,EACP,QAAQ,GACI;IACZ,MAAM,OAAO,GAAG,MAAM,CAAmB,IAAI,CAAC,CAAC;IAE/C,SAAS,CAAC,GAAG,EAAE;QACd,IAAI,OAAO,CAAC,OAAO,IAAI,OAAO,EAAE,CAAC;YAChC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACzB,CAAC;IACF,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;IAEvB,MAAM,SAAS,GAAyB,CAAC,CAAC,EAAE,EAAE;QAC7C,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QAClB,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,WAAW,EAAE,CAAC;YAC9C,CAAC,CAAC,cAAc,EAAE,CAAC;QACpB,CAAC;IACF,CAAC,CAAC;IAEF,OAAO,CACN,gBACC,GAAG,EAAE,OAAO,EACZ,EAAE,EAAE,EAAE,EACN,SAAS,EAAE,UAAU,CAAC,yBAAyB,EAAE,SAAS,CAAC,EAC3D,IAAI,EAAC,MAAM,EACX,QAAQ,EAAE,QAAQ,EAClB,KAAK,EAAE,KAAK,kBACE,OAAO,mBACN,QAAQ,EACvB,QAAQ,EAAE,QAAQ,EAClB,KAAK,EAAC,WAAW,EACjB,YAAY,EAAC,KAAK,EAClB,cAAc,EAAC,KAAK,EACpB,WAAW,EAAC,KAAK,EACjB,UAAU,EAAC,OAAO,EAClB,WAAW,EAAE,WAAW,EACxB,QAAQ,EAAE,QAAQ,qBACD,UAAU,EAC3B,SAAS,EAAE,SAAS,GACnB,CACF,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,aAAa,GAAG,kBAAkB,CAC9C,eAAe,EACf,oBAAoB,CACpB,CAAC"}
@@ -3,4 +3,4 @@ import type { ComboboxSelectionProps } from '../ComboboxType';
3
3
  * Label displayed when a value is selected in the ComboBox
4
4
  * This label can either be an input (when editable or expanded) or a simple span
5
5
  */
6
- export declare function ComboboxSelection({ labelRenderer, placeholder, search, expanded, disabled, readOnly, focused, onChange, selectedIndex, options, editable, labelId, id, classNamePrefix, invalid, }: ComboboxSelectionProps): import("react/jsx-runtime").JSX.Element;
6
+ export declare function ComboboxSelection({ labelRenderer, placeholder, search, expanded, disabled, readOnly, focused, onChange, selectedIndex, options, editable, labelId, id, classNamePrefix, invalid, required, }: ComboboxSelectionProps): import("react/jsx-runtime").JSX.Element;
@@ -6,13 +6,13 @@ import { ComboboxInput } from './ComboboxInput';
6
6
  * Label displayed when a value is selected in the ComboBox
7
7
  * This label can either be an input (when editable or expanded) or a simple span
8
8
  */
9
- export function ComboboxSelection({ labelRenderer, placeholder, search, expanded, disabled, readOnly, focused, onChange, selectedIndex, options, editable, labelId, id, classNamePrefix, invalid, }) {
9
+ export function ComboboxSelection({ labelRenderer, placeholder, search, expanded, disabled, readOnly, focused, onChange, selectedIndex, options, editable, labelId, id, classNamePrefix, invalid, required, }) {
10
10
  const showLabel = !editable || !expanded;
11
- const selectedOption = selectedIndex !== undefined ? options[selectedIndex] : undefined;
11
+ const selectedOption = selectedIndex === undefined ? undefined : options[selectedIndex];
12
12
  const LabelSelectionComponent = labelRenderer !== null && labelRenderer !== void 0 ? labelRenderer : ComboboxLabelSelection;
13
13
  return (_jsx("div", { id: id, className: classnames(`${classNamePrefix !== null && classNamePrefix !== void 0 ? classNamePrefix : 'lunatic'}-combo-box-selection`, {
14
14
  focused,
15
15
  disabled,
16
- }), role: "combobox", "aria-controls": 'todo', "aria-haspopup": "listbox", "aria-expanded": expanded, "aria-autocomplete": "list", "aria-owns": id, "aria-labelledby": labelId, children: showLabel ? (_jsx(LabelSelectionComponent, { option: selectedOption, placeholder: placeholder, search: search, disabled: disabled, readOnly: readOnly })) : (_jsx(ComboboxInput, { invalid: invalid, id: `combobox-input-${id}`, className: "lunatic-combo-box-input", onChange: (e) => { var _a; return onChange === null || onChange === void 0 ? void 0 : onChange((_a = e.target.value) !== null && _a !== void 0 ? _a : e.target.innerText); }, value: search, placeholder: placeholder, disabled: disabled, readOnly: readOnly, focused: focused, labelledBy: labelId })) }));
16
+ }), role: "combobox", "aria-haspopup": "listbox", "aria-expanded": expanded, "aria-autocomplete": "list", "aria-owns": id, "aria-labelledby": labelId, children: showLabel ? (_jsx(LabelSelectionComponent, { option: selectedOption, placeholder: placeholder, search: search, disabled: disabled, readOnly: readOnly })) : (_jsx(ComboboxInput, { invalid: invalid, id: `combobox-input-${id}`, className: "lunatic-combo-box-input", onChange: (e) => { var _a; return onChange === null || onChange === void 0 ? void 0 : onChange((_a = e.target.value) !== null && _a !== void 0 ? _a : e.target.innerText); }, value: search, placeholder: placeholder, disabled: disabled, readOnly: readOnly, focused: focused, labelledBy: labelId, required: required })) }));
17
17
  }
18
18
  //# sourceMappingURL=ComboboxSelection.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ComboboxSelection.js","sourceRoot":"","sources":["../../../../../src/components/shared/Combobox/Selection/ComboboxSelection.tsx"],"names":[],"mappings":";AAAA,OAAO,UAAU,MAAM,YAAY,CAAC;AACpC,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAIhD;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,EACjC,aAAa,EACb,WAAW,EACX,MAAM,EACN,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,OAAO,EACP,QAAQ,EACR,aAAa,EACb,OAAO,EACP,QAAQ,EACR,OAAO,EACP,EAAE,EACF,eAAe,EACf,OAAO,GACiB;IACxB,MAAM,SAAS,GAAG,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC;IACzC,MAAM,cAAc,GACnB,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAClE,MAAM,uBAAuB,GAAG,aAAa,aAAb,aAAa,cAAb,aAAa,GAAI,sBAAsB,CAAC;IAExE,OAAO,CACN,cACC,EAAE,EAAE,EAAE,EACN,SAAS,EAAE,UAAU,CACpB,GAAG,eAAe,aAAf,eAAe,cAAf,eAAe,GAAI,SAAS,sBAAsB,EACrD;YACC,OAAO;YACP,QAAQ;SACR,CACD,EACD,IAAI,EAAC,UAAU,mBACA,MAAM,mBACP,SAAS,mBACR,QAAQ,uBACL,MAAM,eACb,EAAE,qBACI,OAAO,YAEvB,SAAS,CAAC,CAAC,CAAC,CACZ,KAAC,uBAAuB,IACvB,MAAM,EAAE,cAAc,EACtB,WAAW,EAAE,WAAW,EACxB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,QAAQ,GACjB,CACF,CAAC,CAAC,CAAC,CACH,KAAC,aAAa,IACb,OAAO,EAAE,OAAO,EAChB,EAAE,EAAE,kBAAkB,EAAE,EAAE,EAC1B,SAAS,EAAC,yBAAyB,EACnC,QAAQ,EAAE,CAAC,CAAgC,EAAE,EAAE,WAC9C,OAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAG,MAAA,CAAC,CAAC,MAAM,CAAC,KAAK,mCAAI,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA,EAAA,EAEjD,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,WAAW,EACxB,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,OAAO,EAChB,UAAU,EAAE,OAAO,GAClB,CACF,GACI,CACN,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"ComboboxSelection.js","sourceRoot":"","sources":["../../../../../src/components/shared/Combobox/Selection/ComboboxSelection.tsx"],"names":[],"mappings":";AAAA,OAAO,UAAU,MAAM,YAAY,CAAC;AACpC,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAIhD;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,EACjC,aAAa,EACb,WAAW,EACX,MAAM,EACN,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,OAAO,EACP,QAAQ,EACR,aAAa,EACb,OAAO,EACP,QAAQ,EACR,OAAO,EACP,EAAE,EACF,eAAe,EACf,OAAO,EACP,QAAQ,GACgB;IACxB,MAAM,SAAS,GAAG,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC;IACzC,MAAM,cAAc,GACnB,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IAClE,MAAM,uBAAuB,GAAG,aAAa,aAAb,aAAa,cAAb,aAAa,GAAI,sBAAsB,CAAC;IAExE,OAAO,CACN,cACC,EAAE,EAAE,EAAE,EACN,SAAS,EAAE,UAAU,CACpB,GAAG,eAAe,aAAf,eAAe,cAAf,eAAe,GAAI,SAAS,sBAAsB,EACrD;YACC,OAAO;YACP,QAAQ;SACR,CACD,EACD,IAAI,EAAC,UAAU,mBACD,SAAS,mBACR,QAAQ,uBACL,MAAM,eACb,EAAE,qBACI,OAAO,YAEvB,SAAS,CAAC,CAAC,CAAC,CACZ,KAAC,uBAAuB,IACvB,MAAM,EAAE,cAAc,EACtB,WAAW,EAAE,WAAW,EACxB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,QAAQ,GACjB,CACF,CAAC,CAAC,CAAC,CACH,KAAC,aAAa,IACb,OAAO,EAAE,OAAO,EAChB,EAAE,EAAE,kBAAkB,EAAE,EAAE,EAC1B,SAAS,EAAC,yBAAyB,EACnC,QAAQ,EAAE,CAAC,CAAgC,EAAE,EAAE,WAC9C,OAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAG,MAAA,CAAC,CAAC,MAAM,CAAC,KAAK,mCAAI,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA,EAAA,EAEjD,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,WAAW,EACxB,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,OAAO,EAChB,UAAU,EAAE,OAAO,EACnB,QAAQ,EAAE,QAAQ,GACjB,CACF,GACI,CACN,CAAC;AACH,CAAC"}
@@ -45,26 +45,37 @@ import { forceInt } from '../utils/number';
45
45
  */
46
46
  export function useMultimode(source, store) {
47
47
  const getMultimode = useCallback(() => {
48
- var _a;
48
+ var _a, _b, _c, _d, _e, _f;
49
49
  if (!source.multimode) {
50
50
  return {};
51
51
  }
52
- const roundabout = findComponentById(source.components, source.multimode.leaf.source);
52
+ // Initialize rules to empty objects if they do not exist
53
+ const questionnaireRules = ((_a = source.multimode.questionnaire) === null || _a === void 0 ? void 0 : _a.rules) || {};
54
+ const leafRules = ((_b = source.multimode.leaf) === null || _b === void 0 ? void 0 : _b.rules) || {};
55
+ // If neither has rules, return an empty object
56
+ if (Object.keys(questionnaireRules).length === 0 && Object.keys(leafRules).length === 0) {
57
+ return {};
58
+ }
59
+ // Get unique rule keys
53
60
  const keys = new Set([
54
- ...Object.keys(source.multimode.questionnaire.rules),
55
- ...Object.keys(source.multimode.leaf.rules),
61
+ ...Object.keys(questionnaireRules),
62
+ ...Object.keys(leafRules),
56
63
  ]);
57
- const iterations = forceInt(store.run((_a = roundabout === null || roundabout === void 0 ? void 0 : roundabout.iterations.value) !== null && _a !== void 0 ? _a : '0'));
64
+ // Handle the case where leaf.source exists to retrieve iterations
65
+ let iterations = 0;
66
+ if ((_c = source.multimode.leaf) === null || _c === void 0 ? void 0 : _c.source) {
67
+ const roundabout = findComponentById(source.components, source.multimode.leaf.source);
68
+ iterations = forceInt((_f = store.run((_e = (_d = roundabout === null || roundabout === void 0 ? void 0 : roundabout.iterations) === null || _d === void 0 ? void 0 : _d.value) !== null && _e !== void 0 ? _e : '')) !== null && _f !== void 0 ? _f : 0);
69
+ }
58
70
  return Object.fromEntries(Array.from(keys).map((key) => {
59
- var _a, _b;
60
- // Check the value at questionnaire level
61
- const questionnaireExpression = (_a = source.multimode) === null || _a === void 0 ? void 0 : _a.questionnaire.rules[key];
71
+ // Check the rule at the questionnaire level
72
+ const questionnaireExpression = questionnaireRules[key];
62
73
  if (questionnaireExpression &&
63
74
  store.run(questionnaireExpression.value)) {
64
75
  return [key, true];
65
76
  }
66
- const leafExpression = (_b = source.multimode) === null || _b === void 0 ? void 0 : _b.leaf.rules[key];
67
- // There is no expression for the leaf
77
+ // Check the rule at the leaf level
78
+ const leafExpression = leafRules[key];
68
79
  if (!leafExpression) {
69
80
  return [key, false];
70
81
  }
@@ -1 +1 @@
1
- {"version":3,"file":"useMultimode.js","sourceRoot":"","sources":["../../src/hooks/useMultimode.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AACpC,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAE3C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AACH,MAAM,UAAU,YAAY,CAC3B,MAAqB,EACrB,KAA4B;IAE5B,MAAM,YAAY,GAAG,WAAW,CAAC,GAAG,EAAE;;QACrC,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;YACvB,OAAO,EAAE,CAAC;QACX,CAAC;QAED,MAAM,UAAU,GAAG,iBAAiB,CACnC,MAAM,CAAC,UAAU,EACjB,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAC5B,CAAC;QAEF,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC;YACpB,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,aAAa,CAAC,KAAK,CAAC;YACpD,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;SAC3C,CAAC,CAAC;QACH,MAAM,UAAU,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,MAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,UAAU,CAAC,KAAK,mCAAI,GAAG,CAAC,CAAC,CAAC;QAE5E,OAAO,MAAM,CAAC,WAAW,CACxB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;;YAC5B,yCAAyC;YACzC,MAAM,uBAAuB,GAC5B,MAAA,MAAM,CAAC,SAAS,0CAAE,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC5C,IACC,uBAAuB;gBACvB,KAAK,CAAC,GAAG,CAAC,uBAAuB,CAAC,KAAK,CAAC,EACvC,CAAC;gBACF,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YACpB,CAAC;YAED,MAAM,cAAc,GAAG,MAAA,MAAM,CAAC,SAAS,0CAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAEzD,sCAAsC;YACtC,IAAI,CAAC,cAAc,EAAE,CAAC;gBACrB,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YACrB,CAAC;YAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC;gBACrC,IAAI,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;oBACzD,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;gBACpB,CAAC;YACF,CAAC;YAED,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACrB,CAAC,CAAC,CACF,CAAC;IACH,CAAC,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;IAEpB,OAAO;QACN,YAAY;KACZ,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"useMultimode.js","sourceRoot":"","sources":["../../src/hooks/useMultimode.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,10 @@
1
1
  import type { LunaticError, LunaticReducerState } from '../type';
2
+ import { type ComponentDefinition, type InterpretedComponent } from './component';
2
3
  export type StateForControls = Pick<LunaticReducerState, 'pager' | 'pages' | 'isInLoop' | 'executeExpression'>;
4
+ /**
5
+ * Figure out the number of iterations of a component.
6
+ */
7
+ export declare function computeIterations(component: InterpretedComponent | ComponentDefinition, executeExpression: LunaticReducerState['executeExpression']): number;
3
8
  /**
4
9
  * Check controls for currently visible components and output errors.
5
10
  */
@@ -61,13 +61,18 @@ function checkControls(controls, executeExpression, pager) {
61
61
  /**
62
62
  * Figure out the number of iterations of a component.
63
63
  */
64
- function computeIterations(component, executeExpression) {
64
+ export function computeIterations(component, executeExpression) {
65
+ // iterations is present and it's already computed, return the actual value (case of InterpretedComponent)
66
+ if ('iterations' in component && typeof component.iterations === 'number')
67
+ return component.iterations;
68
+ // iteratons is present and it's an expression, compute it
65
69
  if ('iterations' in component &&
66
70
  component.iterations &&
67
71
  typeof component.iterations === 'object' &&
68
72
  'value' in component.iterations) {
69
73
  return executeExpression(component.iterations);
70
74
  }
75
+ // Fallback to variable collectes by this component, return it's length
71
76
  if ('response' in component) {
72
77
  const value = executeExpression({
73
78
  type: 'VTL',
@@ -1 +1 @@
1
- {"version":3,"file":"compile-controls.js","sourceRoot":"","sources":["../../../src/use-lunatic/commons/compile-controls.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"compile-controls.js","sourceRoot":"","sources":["../../../src/use-lunatic/commons/compile-controls.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,wBAAwB,EAAE,MAAM,8CAA8C,CAAC;AACxF,OAAO,EAAE,sBAAsB,EAAE,MAAM,8CAA8C,CAAC;AACtF,OAAO,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAC;AAC1E,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAGN,eAAe,EACf,mBAAmB,EACnB,qBAAqB,GAGrB,MAAM,aAAa,CAAC;AAOrB;;;GAGG;AACH,SAAS,eAAe,CACvB,KAAuB,EACvB,UAA0D,EAC1D,aAA8C;IAE9C,IAAI,MAAM,GAAG,aAAa,aAAb,aAAa,cAAb,aAAa,GAAK,EAAqC,CAAC;IAErE,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACpC,0CAA0C;QAC1C,IAAI,UAAU,IAAI,SAAS,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC;YAClE,MAAM,eAAe,GAAG,aAAa,CACpC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,EAClD,KAAK,CAAC,iBAAiB,EACvB,KAAK,CAAC,KAAK,CACX,CAAC;YACF,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAChC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,eAAe,CAAC;YACxC,CAAC;QACF,CAAC;QAED,kEAAkE;QAClE,IAAI,qBAAqB,CAAC,SAAS,CAAC;YACnC,MAAM,GAAG,eAAe,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;QAEpD,+CAA+C;QAC/C,IAAI,eAAe,CAAC,SAAS,CAAC;YAC7B,MAAM,GAAG,SAAS,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;QAE9C,mCAAmC;QACnC,IAAI,mBAAmB,CAAC,SAAS,CAAC;YACjC,MAAM,GAAG,eAAe,CAAC,KAAK,EAAE,SAAS,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IAChE,CAAC;IAED,OAAO,MAAM,CAAC;AACf,CAAC;AAED,SAAS,eAAe,CACvB,KAAuB,EACvB,SAAyC,EACzC,MAAsC;;IAEtC,MAAM,WAAW,GAAG,MAAA,SAAS,CAAC,QAAQ,0CAAE,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC;IACxE,IAAI,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,MAAM,EAAE,CAAC;QACzB,MAAM,GAAG,oBAAoB,CAC5B,KAAK,EACL,EAAE,GAAG,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,EACvC,MAAM,CACN,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AACf,CAAC;AAED,SAAS,SAAS,CACjB,KAAuB,EACvB,SAAmC,EACnC,MAAsC;;IAEtC,MAAM,WAAW,GAAG,MAAA,SAAS,CAAC,QAAQ,0CAAE,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC;IACxE,IAAI,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,MAAM,EAAE,CAAC;QACzB,MAAM,GAAG,oBAAoB,CAC5B,KAAK,EACL,EAAE,GAAG,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,EACvC,MAAM,CACN,CAAC;IACH,CAAC;IACD,KAAK,MAAM,KAAK,IAAI,SAAS,CAAC,UAAU,EAAE,CAAC;QAC1C,MAAM,GAAG,oBAAoB,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;IACrD,CAAC;IACD,OAAO,MAAM,CAAC;AACf,CAAC;AAED,SAAS,aAAa,CACrB,QAA0B,EAC1B,iBAA2D,EAC3D,KAAmC;IAEnC,OAAO,QAAQ;SACb,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;QAChB,IAAI,OAAO,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;YACnC,OAAO,sBAAsB,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC;QAC3D,CAAC;QACD,OAAO,gBAAgB,CAAC,OAAO,EAAE,iBAAiB,EAAE,KAAK,CAAC,CAAC;IAC5D,CAAC,CAAC;SACD,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC;AAC1C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAChC,SAAqD,EACrD,iBAA2D;IAE3D,0GAA0G;IAC1G,IAAI,YAAY,IAAI,SAAS,IAAI,OAAO,SAAS,CAAC,UAAU,KAAK,QAAQ;QACxE,OAAO,SAAS,CAAC,UAAU,CAAC;IAC7B,0DAA0D;IAC1D,IACC,YAAY,IAAI,SAAS;QACzB,SAAS,CAAC,UAAU;QACpB,OAAO,SAAS,CAAC,UAAU,KAAK,QAAQ;QACxC,OAAO,IAAI,SAAS,CAAC,UAAU,EAC9B,CAAC;QACF,OAAO,iBAAiB,CAAS,SAAS,CAAC,UAAU,CAAC,CAAC;IACxD,CAAC;IAED,uEAAuE;IACvE,IAAI,UAAU,IAAI,SAAS,EAAE,CAAC;QAC7B,MAAM,KAAK,GAAG,iBAAiB,CAAC;YAC/B,IAAI,EAAE,KAAK;YACX,KAAK,EAAE,SAAS,CAAC,QAAQ,CAAC,IAAI;SAC9B,CAAC,CAAC;QACH,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAO,KAAK,CAAC,MAAM,CAAC;QACrB,CAAC;IACF,CAAC;IACD,+CAA+C;IAC/C,IAAI,YAAY,IAAI,SAAS,EAAE,CAAC;QAC/B,OAAO,IAAI,CAAC,GAAG,CACd,GAAG,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CACjC,iBAAiB,CAAC,CAAC,EAAE,iBAAiB,CAAC,CACvC,CACD,CAAC;IACH,CAAC;IACD,OAAO,CAAC,CAAC;AACV,CAAC;AAED;;;GAGG;AACH,SAAS,oBAAoB,CAC5B,KAAuB,EACvB,SAGiC,EACjC,MAAsC;;IAEtC,mCAAmC;IACnC,IAAI,SAAS,CAAC,aAAa,KAAK,UAAU,EAAE,CAAC;QAC5C,KAAK,MAAM,KAAK,IAAI,SAAS,CAAC,UAAU,EAAE,CAAC;YAC1C,MAAM,GAAG,oBAAoB,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QACrD,CAAC;QACD,OAAO,MAAM,CAAC;IACf,CAAC;IAED,yCAAyC;IACzC,IAAI,UAAU,IAAI,SAAS,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC;QACnE,OAAO,MAAM,CAAC;IACf,CAAC;IAED,qCAAqC;IACrC,MAAM,UAAU,GAAG,iBAAiB,CAAC,SAAS,EAAE,KAAK,CAAC,iBAAiB,CAAC,CAAC;IACzE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,6DAA6D;QAC7D,MAAM,cAAc,GAAG;YACtB,GAAG,KAAK,CAAC,KAAK;YACd,SAAS,EAAE,CAAC;YACZ,YAAY,EAAE,UAAU;SACxB,CAAC;QACF,yCAAyC;QACzC,IAAI,CAAC,CAAC,UAAU,IAAI,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;YACvD,SAAS;QACV,CAAC;QAED,2EAA2E;QAC3E,IAAI,qBAAqB,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACjE,MAAM,mBAAmB,GAAG,KAAK,CAAC,iBAAiB,CAClD,EAAE,KAAK,EAAE,MAAA,SAAS,CAAC,IAAI,CAAC,QAAQ,0CAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EACtD,cAAc,CACd,CAAC;YAEF,IAAI,mBAAmB,EAAE,CAAC;gBACzB,SAAS;YACV,CAAC;QACF,CAAC;QAED,uDAAuD;QACvD;QACC,+FAA+F;QAC/F,CAAC,iBAAiB,IAAI,SAAS;YAC9B,SAAS,CAAC,eAAe;YACzB,OAAO,SAAS,CAAC,eAAe,IAAI,QAAQ;YAC5C,OAAO,IAAI,SAAS,CAAC,eAAe;YACpC,CAAC,KAAK,CAAC,iBAAiB,CACvB,EAAE,KAAK,EAAE,SAAS,CAAC,eAAe,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EACvD,cAAc,CACd,CAAC;YACH,gFAAgF;YAChF,SAAS,CAAC,eAAe,KAAK,KAAK,EAClC,CAAC;YACF,SAAS;QACV,CAAC;QACD,MAAM,eAAe,GAAG,aAAa,CACpC,SAAS,CAAC,QAAQ,EAClB,KAAK,CAAC,iBAAiB,EACvB,cAAc,CACd,CAAC;QACF,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAChC,MAAM,CAAC,GAAG,SAAS,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,eAAe,CAAC;QAClD,CAAC;IACF,CAAC;IAED,OAAO,MAAM,CAAC;AACf,CAAC;AAED;;GAEG;AACH,SAAS,gBAAgB,CAAC,MAAuC;IAChE,IAAI,CAAC,MAAM,EAAE,CAAC;QACb,OAAO,KAAK,CAAC;IACd,CAAC;IACD,mDAAmD;IACnD,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;SACzC,IAAI,EAAE;SACN,IAAI,CACJ,CAAC,KAAK,EAAE,EAAE,CACT,KAAK,CAAC,WAAW,CAAC,UAAU,CAAC,OAAO,CAAC;QACrC,KAAK,CAAC,aAAa,KAAK,QAAQ,CACjC,CAAC;IACH,OAAO,aAAa,KAAK,SAAS,CAAC;AACpC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,KAAuB;IACtD,MAAM,UAAU,GAAG,sBAAsB,CAAC,KAAK,CAAC,CAAC;IACjD,MAAM,iBAAiB,GAAG,UAAU;SAClC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,wBAAwB,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;SAC9D,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE;;QACrB,IAAI,iBAAiB,IAAI,SAAS,EAAE,CAAC;YACpC,OAAO,MAAA,SAAS,CAAC,eAAe,mCAAI,IAAI,CAAC;QAC1C,CAAC;QACD,OAAO,IAAI,CAAC;IACb,CAAC,CAAC,CAAC;IACJ,MAAM,MAAM,GAAG,eAAe,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC;IACzD,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;IAC1E,OAAO;QACN,aAAa;QACb,UAAU,EAAE,gBAAgB,CAAC,aAAa,CAAC;KAC3C,CAAC;AACH,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,121 @@
1
+ import { describe, it, expect, vi, beforeEach } from 'vitest';
2
+ import { computeIterations } from './compile-controls';
3
+ // Mock de la fonction executeExpression
4
+ const mockExecuteExpression = vi.fn();
5
+ describe('computeIterations', () => {
6
+ beforeEach(() => {
7
+ vi.resetAllMocks();
8
+ });
9
+ it('should return iterations directly if it is a number', () => {
10
+ const component = {
11
+ id: 'test',
12
+ componentType: 'Loop',
13
+ iterations: 5,
14
+ };
15
+ expect(computeIterations(component, mockExecuteExpression)).toBe(5);
16
+ });
17
+ it('should execute VTL expression for iterations if it is an object', () => {
18
+ const component = {
19
+ id: 'test',
20
+ componentType: 'Loop',
21
+ iterations: { type: 'VTL', value: 'count(ARRAY)' },
22
+ };
23
+ mockExecuteExpression.mockReturnValue(3);
24
+ expect(computeIterations(component, mockExecuteExpression)).toBe(3);
25
+ expect(mockExecuteExpression).toHaveBeenCalledWith({
26
+ type: 'VTL',
27
+ value: 'count(ARRAY)',
28
+ });
29
+ });
30
+ it('should return array length if component has a response with an array value', () => {
31
+ const component = {
32
+ id: 'test',
33
+ componentType: 'Question',
34
+ response: { name: 'ARRAY' },
35
+ };
36
+ mockExecuteExpression.mockReturnValue(['a', 'b', 'c', 'd']);
37
+ expect(computeIterations(component, mockExecuteExpression)).toBe(4);
38
+ expect(mockExecuteExpression).toHaveBeenCalledWith({
39
+ type: 'VTL',
40
+ value: 'ARRAY',
41
+ });
42
+ });
43
+ it('should return 0 if response value is not an array', () => {
44
+ const component = {
45
+ id: 'test',
46
+ componentType: 'Question',
47
+ response: { name: 'VAR' },
48
+ };
49
+ mockExecuteExpression.mockReturnValue('not an array');
50
+ expect(computeIterations(component, mockExecuteExpression)).toBe(0);
51
+ });
52
+ it('should return max iterations of children if component has components', () => {
53
+ const component = {
54
+ id: 'parent',
55
+ componentType: 'Loop',
56
+ components: [
57
+ { id: 'child1', componentType: 'Question', iterations: 2 },
58
+ { id: 'child2', componentType: 'Question', iterations: 5 },
59
+ ],
60
+ };
61
+ expect(computeIterations(component, mockExecuteExpression)).toBe(5);
62
+ });
63
+ it('should return 0 if no iterations, response, or components are present', () => {
64
+ const component = {
65
+ id: 'test',
66
+ componentType: 'Question',
67
+ };
68
+ expect(computeIterations(component, mockExecuteExpression)).toBe(0);
69
+ });
70
+ it('should return 0 if iterations is null or undefined', () => {
71
+ const component1 = {
72
+ id: 'test1',
73
+ componentType: 'Loop',
74
+ iterations: null,
75
+ };
76
+ const component2 = {
77
+ id: 'test2',
78
+ componentType: 'Loop',
79
+ iterations: undefined,
80
+ };
81
+ expect(computeIterations(component1, mockExecuteExpression)).toBe(0);
82
+ expect(computeIterations(component2, mockExecuteExpression)).toBe(0);
83
+ });
84
+ it('should return 0 if all children have no iterations', () => {
85
+ const component = {
86
+ id: 'parent',
87
+ componentType: 'Loop',
88
+ components: [
89
+ { id: 'child1', componentType: 'Question' },
90
+ { id: 'child2', componentType: 'Question' },
91
+ ],
92
+ };
93
+ expect(computeIterations(component, mockExecuteExpression)).toBe(0);
94
+ });
95
+ it('should prioritize iterations over response if both are present', () => {
96
+ const component = {
97
+ id: 'test',
98
+ componentType: 'Loop',
99
+ iterations: 3,
100
+ response: { name: 'ARRAY' },
101
+ };
102
+ mockExecuteExpression.mockReturnValue(['a', 'b', 'c', 'd', 'e']);
103
+ expect(computeIterations(component, mockExecuteExpression)).toBe(3);
104
+ expect(mockExecuteExpression).not.toHaveBeenCalled();
105
+ });
106
+ it('should prioritize iterations expression over response if both are present', () => {
107
+ const component = {
108
+ id: 'test',
109
+ componentType: 'Loop',
110
+ iterations: { type: 'VTL', value: 'count(ARRAY)' },
111
+ response: { name: 'ANOTHER_ARRAY' },
112
+ };
113
+ mockExecuteExpression.mockReturnValue(7);
114
+ expect(computeIterations(component, mockExecuteExpression)).toBe(7);
115
+ expect(mockExecuteExpression).toHaveBeenCalledWith({
116
+ type: 'VTL',
117
+ value: 'count(ARRAY)',
118
+ });
119
+ });
120
+ });
121
+ //# sourceMappingURL=compile-controls.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compile-controls.spec.js","sourceRoot":"","sources":["../../../src/use-lunatic/commons/compile-controls.spec.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,7 @@ import { reducerInitializer } from '../use-lunatic/reducer/reducerInitializer';
2
2
  import { times } from './array';
3
3
  import { forceInt } from './number';
4
4
  import { isRoundaboutComponent } from '../use-lunatic/commons/component';
5
+ import { castNumber } from './cast';
5
6
  export var ArticulationState;
6
7
  (function (ArticulationState) {
7
8
  ArticulationState[ArticulationState["COMPLETED"] = 1] = "COMPLETED";
@@ -41,18 +42,23 @@ export var ArticulationState;
41
42
  */
42
43
  export function getArticulationState(source, data) {
43
44
  var _a;
45
+ if (!source.articulation) {
46
+ return {
47
+ items: [],
48
+ };
49
+ }
44
50
  const roundabout = findComponentById(source.components, source.articulation.source);
45
- const { variables } = reducerInitializer({ source, data });
46
- const iterations = forceInt(variables.run((_a = roundabout === null || roundabout === void 0 ? void 0 : roundabout.iterations.value) !== null && _a !== void 0 ? _a : '0'));
47
- const rows = times(iterations, (k) => source.articulation.items.map((item) => ({
48
- label: item.label,
49
- value: variables.run(item.value, { iteration: [k] }),
50
- })));
51
51
  if (!roundabout) {
52
52
  return {
53
53
  items: [],
54
54
  };
55
55
  }
56
+ const { variables } = reducerInitializer({ source, data });
57
+ const iterations = castNumber(variables.run((_a = roundabout.iterations.value) !== null && _a !== void 0 ? _a : '0'));
58
+ const rows = times(iterations, (k) => source.articulation.items.map((item) => ({
59
+ label: item.label,
60
+ value: variables.run(item.value, { iteration: [k] }),
61
+ })));
56
62
  return {
57
63
  items: rows.map((row, k) => {
58
64
  var _a;
@@ -1 +1 @@
1
- {"version":3,"file":"getArticulationState.js","sourceRoot":"","sources":["../../src/utils/getArticulationState.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,kBAAkB,EAAE,MAAM,2CAA2C,CAAC;AAE/E,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACpC,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AAEzE,MAAM,CAAN,IAAY,iBAIX;AAJD,WAAY,iBAAiB;IAC5B,mEAAa,CAAA;IACb,+DAAW,CAAA;IACX,wEAAgB,CAAA;AACjB,CAAC,EAJW,iBAAiB,KAAjB,iBAAiB,QAI5B;AAqBD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,MAAM,UAAU,oBAAoB,CACnC,MAAsD,EACtD,IAAiB;;IAEjB,MAAM,UAAU,GAAG,iBAAiB,CACnC,MAAM,CAAC,UAAU,EACjB,MAAM,CAAC,YAAY,CAAC,MAAM,CAC1B,CAAC;IACF,MAAM,EAAE,SAAS,EAAE,GAAG,kBAAkB,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3D,MAAM,UAAU,GAAG,QAAQ,CAC1B,SAAS,CAAC,GAAG,CAAC,MAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,UAAU,CAAC,KAAK,mCAAI,GAAG,CAAC,CAClD,CAAC;IAEF,MAAM,IAAI,GAAG,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,EAAE,EAAE,CACpC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACxC,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,KAAK,EAAE,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAc;KACjE,CAAC,CAAC,CACH,CAAC;IAEF,IAAI,CAAC,UAAU,EAAE,CAAC;QACjB,OAAO;YACN,KAAK,EAAE,EAAE;SACT,CAAC;IACH,CAAC;IAED,OAAO;QACN,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE;;YAAC,OAAA,CAAC;gBAC5B,KAAK,EAAE,GAAG;gBACV,QAAQ,EAAE,QAAQ,CACjB,MAAA,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,CAAC,mCAC9C,iBAAiB,CAAC,WAAW,CAC9B;gBACD,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI;oBACrB,CAAC,CAAC,GAAG,UAAU,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,EAAE;oBACjC,CAAC,CAAC,GAAG,CAAY;aAClB,CAAC,CAAA;SAAA,CAAC;KACH,CAAC;AACH,CAAC;AAED,MAAM,UAAU,iBAAiB,CAChC,UAAiC,EACjC,EAAU;IAEV,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;QAC5B,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,qBAAqB,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1D,OAAO,CAAC,CAAC;QACV,CAAC;QACD,IAAI,YAAY,IAAI,CAAC,EAAE,CAAC;YACvB,MAAM,KAAK,GAAG,iBAAiB,CAAC,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;YAClD,IAAI,KAAK,EAAE,CAAC;gBACX,OAAO,KAAK,CAAC;YACd,CAAC;QACF,CAAC;IACF,CAAC;IACD,OAAO,IAAI,CAAC;AACb,CAAC"}
1
+ {"version":3,"file":"getArticulationState.js","sourceRoot":"","sources":["../../src/utils/getArticulationState.ts"],"names":[],"mappings":"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"}
@@ -51,21 +51,33 @@ function useMultimode(source, store) {
51
51
  if (!source.multimode) {
52
52
  return {};
53
53
  }
54
- const roundabout = (0, getArticulationState_1.findComponentById)(source.components, source.multimode.leaf.source);
54
+ // Initialize rules to empty objects if they do not exist
55
+ const questionnaireRules = source.multimode.questionnaire?.rules || {};
56
+ const leafRules = source.multimode.leaf?.rules || {};
57
+ // If neither has rules, return an empty object
58
+ if (Object.keys(questionnaireRules).length === 0 && Object.keys(leafRules).length === 0) {
59
+ return {};
60
+ }
61
+ // Get unique rule keys
55
62
  const keys = new Set([
56
- ...Object.keys(source.multimode.questionnaire.rules),
57
- ...Object.keys(source.multimode.leaf.rules),
63
+ ...Object.keys(questionnaireRules),
64
+ ...Object.keys(leafRules),
58
65
  ]);
59
- const iterations = (0, number_1.forceInt)(store.run(roundabout?.iterations.value ?? '0'));
66
+ // Handle the case where leaf.source exists to retrieve iterations
67
+ let iterations = 0;
68
+ if (source.multimode.leaf?.source) {
69
+ const roundabout = (0, getArticulationState_1.findComponentById)(source.components, source.multimode.leaf.source);
70
+ iterations = (0, number_1.forceInt)(store.run(roundabout?.iterations?.value ?? '') ?? 0);
71
+ }
60
72
  return Object.fromEntries(Array.from(keys).map((key) => {
61
- // Check the value at questionnaire level
62
- const questionnaireExpression = source.multimode?.questionnaire.rules[key];
73
+ // Check the rule at the questionnaire level
74
+ const questionnaireExpression = questionnaireRules[key];
63
75
  if (questionnaireExpression &&
64
76
  store.run(questionnaireExpression.value)) {
65
77
  return [key, true];
66
78
  }
67
- const leafExpression = source.multimode?.leaf.rules[key];
68
- // There is no expression for the leaf
79
+ // Check the rule at the leaf level
80
+ const leafExpression = leafRules[key];
69
81
  if (!leafExpression) {
70
82
  return [key, false];
71
83
  }
@@ -1 +1 @@
1
- {"version":3,"file":"useMultimode.js","sourceRoot":"","sources":["../src/hooks/useMultimode.ts"],"names":[],"mappings":";;AAgDA,oCAqDC;AAnGD,iCAAoC;AACpC,wEAAkE;AAClE,4CAA2C;AAE3C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AACH,SAAgB,YAAY,CAC3B,MAAqB,EACrB,KAA4B;IAE5B,MAAM,YAAY,GAAG,IAAA,mBAAW,EAAC,GAAG,EAAE;QACrC,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;YACvB,OAAO,EAAE,CAAC;QACX,CAAC;QAED,MAAM,UAAU,GAAG,IAAA,wCAAiB,EACnC,MAAM,CAAC,UAAU,EACjB,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAC5B,CAAC;QAEF,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC;YACpB,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,aAAa,CAAC,KAAK,CAAC;YACpD,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;SAC3C,CAAC,CAAC;QACH,MAAM,UAAU,GAAG,IAAA,iBAAQ,EAAC,KAAK,CAAC,GAAG,CAAC,UAAU,EAAE,UAAU,CAAC,KAAK,IAAI,GAAG,CAAC,CAAC,CAAC;QAE5E,OAAO,MAAM,CAAC,WAAW,CACxB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;YAC5B,yCAAyC;YACzC,MAAM,uBAAuB,GAC5B,MAAM,CAAC,SAAS,EAAE,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC5C,IACC,uBAAuB;gBACvB,KAAK,CAAC,GAAG,CAAC,uBAAuB,CAAC,KAAK,CAAC,EACvC,CAAC;gBACF,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YACpB,CAAC;YAED,MAAM,cAAc,GAAG,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAEzD,sCAAsC;YACtC,IAAI,CAAC,cAAc,EAAE,CAAC;gBACrB,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YACrB,CAAC;YAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC;gBACrC,IAAI,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;oBACzD,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;gBACpB,CAAC;YACF,CAAC;YAED,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACrB,CAAC,CAAC,CACF,CAAC;IACH,CAAC,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;IAEpB,OAAO;QACN,YAAY;KACZ,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"useMultimode.js","sourceRoot":"","sources":["../src/hooks/useMultimode.ts"],"names":[],"mappings":";;AAgDA,oCAmEC;AAjHD,iCAAoC;AACpC,wEAAkE;AAClE,4CAA2C;AAE3C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AACH,SAAgB,YAAY,CAC3B,MAAqB,EACrB,KAA4B;IAE5B,MAAM,YAAY,GAAG,IAAA,mBAAW,EAAC,GAAG,EAAE;QACrC,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;YACvB,OAAO,EAAE,CAAC;QACX,CAAC;QAED,yDAAyD;QACzD,MAAM,kBAAkB,GAAG,MAAM,CAAC,SAAS,CAAC,aAAa,EAAE,KAAK,IAAI,EAAE,CAAC;QACvE,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;QAErD,+CAA+C;QAC/C,IAAI,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzF,OAAO,EAAE,CAAC;QACX,CAAC;QAED,uBAAuB;QACvB,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC;YACpB,GAAG,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC;YAClC,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC;SACzB,CAAC,CAAC;QAEH,kEAAkE;QAClE,IAAI,UAAU,GAAG,CAAC,CAAC;QACnB,IAAI,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC;YACnC,MAAM,UAAU,GAAG,IAAA,wCAAiB,EACnC,MAAM,CAAC,UAAU,EACjB,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAC5B,CAAC;YACF,UAAU,GAAG,IAAA,iBAAQ,EACpB,KAAK,CAAC,GAAG,CAAC,UAAU,EAAE,UAAU,EAAE,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC,CACnD,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAC,WAAW,CACxB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;YAC5B,4CAA4C;YAC5C,MAAM,uBAAuB,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC;YACxD,IACC,uBAAuB;gBACvB,KAAK,CAAC,GAAG,CAAC,uBAAuB,CAAC,KAAK,CAAC,EACvC,CAAC;gBACF,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YACpB,CAAC;YAED,mCAAmC;YACnC,MAAM,cAAc,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;YACtC,IAAI,CAAC,cAAc,EAAE,CAAC;gBACrB,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YACrB,CAAC;YAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC;gBACrC,IAAI,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;oBACzD,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;gBACpB,CAAC;YACF,CAAC;YAED,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACrB,CAAC,CAAC,CACF,CAAC;IACH,CAAC,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;IAEpB,OAAO;QACN,YAAY;KACZ,CAAC;AACH,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@inseefr/lunatic",
3
- "version": "3.13.4",
3
+ "version": "3.13.5-rc-fix-multimode.1",
4
4
  "description": "Library of questionnaire components",
5
5
  "repository": {
6
6
  "type": "git",
@@ -29,6 +29,7 @@
29
29
  "email": "nicolas.laval@insee.fr"
30
30
  }
31
31
  ],
32
+ "packageManager": "pnpm@11.8.0",
32
33
  "main": "./index.js",
33
34
  "types": "./index.d.ts",
34
35
  "module": "./esm/index.js",
@@ -87,6 +88,7 @@
87
88
  "src/components/Sequence/Sequence.tsx",
88
89
  "src/components/Subsequence/Subsequence.spec.tsx",
89
90
  "src/components/Subsequence/Subsequence.tsx",
91
+ "src/components/Suggester/CustomSuggester.spec.tsx",
90
92
  "src/components/Suggester/CustomSuggester.tsx",
91
93
  "src/components/Suggester/Suggester.spec.tsx",
92
94
  "src/components/Suggester/Suggester.tsx",
@@ -312,6 +314,9 @@
312
314
  "src/stories/paste.stories.tsx",
313
315
  "src/stories/question/question.stories.tsx",
314
316
  "src/stories/question/source.json",
317
+ "src/stories/questionnaires/SRCV/data.json",
318
+ "src/stories/questionnaires/SRCV/source.json",
319
+ "src/stories/questionnaires/SRCV/srcv.stories.tsx",
315
320
  "src/stories/questionnaires/logement/data.json",
316
321
  "src/stories/questionnaires/logement/logement.stories.tsx",
317
322
  "src/stories/questionnaires/logement/source-sequence.json",
@@ -368,6 +373,7 @@
368
373
  "src/type.utils.ts",
369
374
  "src/use-lunatic/__snapshots__/use-lunatic.test.ts.snap",
370
375
  "src/use-lunatic/actions.ts",
376
+ "src/use-lunatic/commons/compile-controls.spec.ts",
371
377
  "src/use-lunatic/commons/compile-controls.ts",
372
378
  "src/use-lunatic/commons/component.ts",
373
379
  "src/use-lunatic/commons/execute-condition-filter.ts",
@@ -603,6 +609,9 @@
603
609
  "components/Suggester/CustomSuggester.d.ts",
604
610
  "components/Suggester/CustomSuggester.js",
605
611
  "components/Suggester/CustomSuggester.js.map",
612
+ "components/Suggester/CustomSuggester.spec.d.ts",
613
+ "components/Suggester/CustomSuggester.spec.js",
614
+ "components/Suggester/CustomSuggester.spec.js.map",
606
615
  "components/Suggester/Suggester.d.ts",
607
616
  "components/Suggester/Suggester.js",
608
617
  "components/Suggester/Suggester.js.map",
@@ -1035,6 +1044,9 @@
1035
1044
  "esm/components/Suggester/CustomSuggester.d.ts",
1036
1045
  "esm/components/Suggester/CustomSuggester.js",
1037
1046
  "esm/components/Suggester/CustomSuggester.js.map",
1047
+ "esm/components/Suggester/CustomSuggester.spec.d.ts",
1048
+ "esm/components/Suggester/CustomSuggester.spec.js",
1049
+ "esm/components/Suggester/CustomSuggester.spec.js.map",
1038
1050
  "esm/components/Suggester/Suggester.d.ts",
1039
1051
  "esm/components/Suggester/Suggester.js",
1040
1052
  "esm/components/Suggester/Suggester.js.map",
@@ -1397,6 +1409,9 @@
1397
1409
  "esm/use-lunatic/commons/compile-controls.d.ts",
1398
1410
  "esm/use-lunatic/commons/compile-controls.js",
1399
1411
  "esm/use-lunatic/commons/compile-controls.js.map",
1412
+ "esm/use-lunatic/commons/compile-controls.spec.d.ts",
1413
+ "esm/use-lunatic/commons/compile-controls.spec.js",
1414
+ "esm/use-lunatic/commons/compile-controls.spec.js.map",
1400
1415
  "esm/use-lunatic/commons/component.d.ts",
1401
1416
  "esm/use-lunatic/commons/component.js",
1402
1417
  "esm/use-lunatic/commons/component.js.map",
@@ -1742,6 +1757,9 @@
1742
1757
  "use-lunatic/commons/compile-controls.d.ts",
1743
1758
  "use-lunatic/commons/compile-controls.js",
1744
1759
  "use-lunatic/commons/compile-controls.js.map",
1760
+ "use-lunatic/commons/compile-controls.spec.d.ts",
1761
+ "use-lunatic/commons/compile-controls.spec.js",
1762
+ "use-lunatic/commons/compile-controls.spec.js.map",
1745
1763
  "use-lunatic/commons/component.d.ts",
1746
1764
  "use-lunatic/commons/component.js",
1747
1765
  "use-lunatic/commons/component.js.map",
@@ -2053,8 +2071,8 @@
2053
2071
  },
2054
2072
  "devDependencies": {
2055
2073
  "@eslint/js": "^9.9.0",
2056
- "@playwright/browser-chromium": "^1.51.1",
2057
- "@playwright/test": "^1.52.0",
2074
+ "@playwright/browser-chromium": "^1.61.1",
2075
+ "@playwright/test": "^1.61.1",
2058
2076
  "@storybook/addon-a11y": "^8.2.9",
2059
2077
  "@storybook/addon-essentials": "^8.2.9",
2060
2078
  "@storybook/addon-interactions": "^8.2.9",
@@ -15,7 +15,6 @@ exports[`Dropdown > renders without crashing 1`] = `
15
15
  >
16
16
  <div
17
17
  aria-autocomplete="list"
18
- aria-controls="todo"
19
18
  aria-expanded="false"
20
19
  aria-haspopup="listbox"
21
20
  aria-labelledby="label-dropdown"
@@ -51,7 +50,6 @@ exports[`Dropdown > should handle readOnly 1`] = `
51
50
  >
52
51
  <div
53
52
  aria-autocomplete="list"
54
- aria-controls="todo"
55
53
  aria-expanded="false"
56
54
  aria-haspopup="listbox"
57
55
  aria-labelledby="label-dropdown"
@@ -1,20 +1,24 @@
1
1
  import { DurationFormat } from '../type';
2
2
  import { type DurationValue } from './durationUtils';
3
3
 
4
+ const isNullOrUndefined = (value: any): value is null | undefined =>
5
+ value === null || value === undefined;
6
+
4
7
  /**
5
8
  * Convert a string into a duration
6
9
  *
7
10
  * ## Example
8
- * - "P12Y5M" => {year: 12, month: 5}
11
+ * - "P12Y5M" => {years: 12, months: 5}
9
12
  */
10
13
  export const getDurationFromValue = (
11
- value: string | null,
14
+ value: string | null | undefined,
12
15
  format: DurationFormat
13
16
  ): DurationValue => {
14
- // Handle nulls value
15
- if (value === null && format === 'PTnHnM') {
16
- return { hours: null, minutes: null };
17
- } else if (value === null) {
17
+ // Handle nulls or undefined value
18
+ if (isNullOrUndefined(value)) {
19
+ if (format === 'PTnHnM') {
20
+ return { hours: null, minutes: null };
21
+ }
18
22
  return { years: null, months: null };
19
23
  }
20
24
 
@@ -0,0 +1,32 @@
1
+ import { fireEvent, render } from '@testing-library/react';
2
+ import { describe, it, expect, vi } from 'vitest';
3
+ import { CustomSuggester } from './CustomSuggester';
4
+
5
+ const baseProps = {
6
+ id: 'suggester-1',
7
+ state: 'success' as const,
8
+ value: [] as [],
9
+ options: [],
10
+ search: '',
11
+ onSelect: vi.fn(),
12
+ onBlur: vi.fn(),
13
+ onFocus: vi.fn(),
14
+ onSearch: vi.fn(),
15
+ onClear: vi.fn(),
16
+ optionRenderer: vi.fn(),
17
+ labelRenderer: vi.fn(),
18
+ };
19
+
20
+ describe('CustomSuggester', () => {
21
+ it('should handle required', () => {
22
+ const { container } = render(<CustomSuggester {...baseProps} required />);
23
+
24
+ // expand combobox for having the input
25
+ const content = container.querySelector('.lunatic-combo-box-content');
26
+ fireEvent.click(content!);
27
+
28
+ const input = container.querySelector('input[type="text"]');
29
+ expect(input).toHaveAttribute('required');
30
+ expect(input).toHaveAttribute('aria-required', 'true');
31
+ });
32
+ });
@@ -35,6 +35,7 @@ type Props = {
35
35
  onClear: () => void;
36
36
  search: string;
37
37
  state: 'loading' | 'error' | 'success';
38
+ required?: boolean;
38
39
  };
39
40
 
40
41
  export const CustomSuggester = slottableComponent<Props>(
@@ -61,6 +62,7 @@ export const CustomSuggester = slottableComponent<Props>(
61
62
  onClear,
62
63
  state,
63
64
  onFocus,
65
+ required,
64
66
  }) => {
65
67
  const handleSelect = (id: string | null) => {
66
68
  if (id === null) {
@@ -94,6 +96,7 @@ export const CustomSuggester = slottableComponent<Props>(
94
96
  declarations={declarations}
95
97
  description={description}
96
98
  errors={errors}
99
+ required={required}
97
100
  />
98
101
  );
99
102
  }