@inseefr/lunatic 3.4.17 → 3.4.18

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.
@@ -38,7 +38,7 @@ function hasOneResponse(components, executeExpression) {
38
38
  }, []);
39
39
  return !isSubComponentsEmpty(childrenComponent, executeExpression);
40
40
  }
41
- // We found a value in one of the root component
41
+ // We found a value in one of the root component. Used for Loop
42
42
  if ('value' in component && !isEmpty(component.value)) {
43
43
  return true;
44
44
  }
@@ -1 +1 @@
1
- {"version":3,"file":"use-page-has-response.js","sourceRoot":"","sources":["../../../src/use-lunatic/hooks/use-page-has-response.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"use-page-has-response.js","sourceRoot":"","sources":["../../../src/use-lunatic/hooks/use-page-has-response.ts"],"names":[],"mappings":"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"}
@@ -19,11 +19,22 @@ export function getValueProp(component, args) {
19
19
  }
20
20
  // For loop, value will be a map of child component values
21
21
  if ('components' in component) {
22
- return Object.fromEntries(component.components
23
- .map((c) => ('response' in c ? c.response.name : null))
24
- .filter((name) => name !== null)
25
- .map((name) => [name, args.variables.get(name)]));
22
+ return getChildResponseValues(component.components, args.variables);
26
23
  }
27
24
  return null;
28
25
  }
26
+ /**
27
+ * Get the values of every child components recursively.
28
+ */
29
+ function getChildResponseValues(components, variables) {
30
+ return Object.fromEntries(components.flatMap((c) => {
31
+ if ('response' in c) {
32
+ return [[c.response.name, variables.get(c.response.name)]];
33
+ }
34
+ if ('components' in c) {
35
+ return Object.entries(getChildResponseValues(c.components, variables));
36
+ }
37
+ return [];
38
+ }));
39
+ }
29
40
  //# sourceMappingURL=propValue.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"propValue.js","sourceRoot":"","sources":["../../../src/use-lunatic/props/propValue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAIjE,MAAM,UAAU,YAAY,CAC3B,SAAqC,EACrC,IAGC;;IAED,IAAI,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC;QAC7C,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC;QACxB,CAAC,CAAC,SAAS,CAAC;IACb,IAAI,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE,CAAC;QAChC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC;IACxC,CAAC;IACD,IAAI,YAAY,CAAC,SAAS,CAAC,EAAE,CAAC;QAC7B,OAAO,MAAM,CAAC,WAAW,CACxB,MAAA,MAAA,SAAS,CAAC,SAAS,0CAAE,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;YAC1C,QAAQ,CAAC,IAAI;YACb,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;SAC5C,CAAC,mCAAI,EAAE,CACR,CAAC;IACH,CAAC;IACD,IAAI,WAAW,CAAC,SAAS,CAAC,EAAE,CAAC;QAC5B,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAC/D,CAAC;IACD,0DAA0D;IAC1D,IAAI,YAAY,IAAI,SAAS,EAAE,CAAC;QAC/B,OAAO,MAAM,CAAC,WAAW,CACxB,SAAS,CAAC,UAAU;aAClB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;aACtD,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC;aAC/B,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAK,CAAC,CAAC,CAAC,CAClD,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACb,CAAC"}
1
+ {"version":3,"file":"propValue.js","sourceRoot":"","sources":["../../../src/use-lunatic/props/propValue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAIjE,MAAM,UAAU,YAAY,CAC3B,SAAqC,EACrC,IAGC;;IAED,IAAI,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC;QAC7C,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC;QACxB,CAAC,CAAC,SAAS,CAAC;IACb,IAAI,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE,CAAC;QAChC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC;IACxC,CAAC;IACD,IAAI,YAAY,CAAC,SAAS,CAAC,EAAE,CAAC;QAC7B,OAAO,MAAM,CAAC,WAAW,CACxB,MAAA,MAAA,SAAS,CAAC,SAAS,0CAAE,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;YAC1C,QAAQ,CAAC,IAAI;YACb,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;SAC5C,CAAC,mCAAI,EAAE,CACR,CAAC;IACH,CAAC;IACD,IAAI,WAAW,CAAC,SAAS,CAAC,EAAE,CAAC;QAC5B,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAC/D,CAAC;IACD,0DAA0D;IAC1D,IAAI,YAAY,IAAI,SAAS,EAAE,CAAC;QAC/B,OAAO,sBAAsB,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;IACrE,CAAC;IACD,OAAO,IAAI,CAAC;AACb,CAAC;AAED;;GAEG;AACH,SAAS,sBAAsB,CAC9B,UAAwC,EACxC,SAAgC;IAEhC,OAAO,MAAM,CAAC,WAAW,CACxB,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;QACxB,IAAI,UAAU,IAAI,CAAC,EAAE,CAAC;YACrB,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC5D,CAAC;QACD,IAAI,YAAY,IAAI,CAAC,EAAE,CAAC;YACvB,OAAO,MAAM,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC;QACxE,CAAC;QACD,OAAO,EAAE,CAAC;IACX,CAAC,CAAC,CACF,CAAC;AACH,CAAC"}
@@ -18,7 +18,7 @@ describe('fillComponentValue', () => {
18
18
  },
19
19
  }));
20
20
  };
21
- describe('response', () => {
21
+ describe('single response', () => {
22
22
  const component = {
23
23
  response: { name: 'PRENOM' },
24
24
  };
@@ -31,7 +31,7 @@ describe('fillComponentValue', () => {
31
31
  expectFilledComponent(component, { PRENOM: ['John', 'Renaud'] }, 3).toBe(undefined);
32
32
  });
33
33
  });
34
- describe('responses', () => {
34
+ describe('multiple responses', () => {
35
35
  const component = {
36
36
  responses: times(3, (k) => ({
37
37
  response: { name: `NAME${k}` },
@@ -50,5 +50,52 @@ describe('fillComponentValue', () => {
50
50
  });
51
51
  });
52
52
  });
53
+ describe('Loop component with nested components', () => {
54
+ const loopComponent = {
55
+ id: 'm7j9kwro',
56
+ componentType: 'Loop',
57
+ components: [
58
+ {
59
+ id: 'm7j9iem8',
60
+ componentType: 'Sequence',
61
+ },
62
+ {
63
+ id: 'question-m7j9q1ep',
64
+ componentType: 'Question',
65
+ components: [
66
+ {
67
+ id: 'm7j9q1ep',
68
+ componentType: 'Input',
69
+ response: { name: 'VOTREPRENO' },
70
+ },
71
+ ],
72
+ },
73
+ {
74
+ id: 'question-m7jb81xh',
75
+ componentType: 'Question',
76
+ components: [
77
+ {
78
+ id: 'm7jb81xh',
79
+ componentType: 'InputNumber',
80
+ response: { name: 'VOTREAGE' },
81
+ },
82
+ ],
83
+ },
84
+ ],
85
+ };
86
+ it('should correctly extract values from nested responses as arrays', () => {
87
+ const values = {
88
+ VOTREPRENO: ['Alice', 'Bob', 'Charlie'],
89
+ VOTREAGE: [22, 30, 40],
90
+ };
91
+ expectFilledComponent(loopComponent, values).toEqual(values);
92
+ });
93
+ it('should return null for missing responses', () => {
94
+ expectFilledComponent(loopComponent).toEqual({
95
+ VOTREPRENO: null,
96
+ VOTREAGE: null,
97
+ });
98
+ });
99
+ });
53
100
  });
54
101
  //# sourceMappingURL=propValue.spec.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"propValue.spec.js","sourceRoot":"","sources":["../../../src/use-lunatic/props/propValue.spec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,OAAO,EAAE,qBAAqB,EAAE,MAAM,8CAA8C,CAAC;AACrF,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAE1C,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IACnC,6BAA6B;IAC7B,MAAM,qBAAqB,GAAG,CAC7B,SAAqC;IACrC,6BAA6B;IAC7B,SAAkC,EAAE;IACpC,kBAAkB;IAClB,SAAkB,EACjB,EAAE;QACH,OAAO,MAAM,CACZ,YAAY,CAAC,SAAS,EAAE;YACvB,SAAS,EAAE,qBAAqB,CAAC,cAAc,CAAC,MAAM,CAAC;YACvD,KAAK,EAAE;gBACN,OAAO,EAAE,CAAC;gBACV,IAAI,EAAE,CAAC;gBACP,SAAS;aACT;SACD,CAAC,CACF,CAAC;IACH,CAAC,CAAC;IAEF,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE;QACzB,MAAM,SAAS,GAAG;YACjB,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;SACW,CAAC;QAEzC,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;YAC3C,qBAAqB,CAAC,SAAS,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAClE,qBAAqB,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;YACpD,qBAAqB,CAAC,SAAS,EAAE,EAAE,MAAM,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CACvE,QAAQ,CACR,CAAC;YACF,qBAAqB,CAAC,SAAS,EAAE,EAAE,MAAM,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CACvE,SAAS,CACT,CAAC;QACH,CAAC,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;IACH,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;QAC1B,MAAM,SAAS,GAAG;YACjB,SAAS,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC3B,QAAQ,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE,EAAE;aAC9B,CAAC,CAAC;SAC4C,CAAC;QAEjD,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;YAC9C,qBAAqB,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC;gBACxC,KAAK,EAAE,IAAI;gBACX,KAAK,EAAE,IAAI;gBACX,KAAK,EAAE,IAAI;aACX,CAAC,CAAC;YACH,qBAAqB,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC;gBACzD,KAAK,EAAE,IAAI;gBACX,KAAK,EAAE,IAAI;gBACX,KAAK,EAAE,IAAI;aACX,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"propValue.spec.js","sourceRoot":"","sources":["../../../src/use-lunatic/props/propValue.spec.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@inseefr/lunatic",
3
- "version": "3.4.17",
3
+ "version": "3.4.18",
4
4
  "description": "Library of questionnaire components",
5
5
  "repository": {
6
6
  "type": "git",
@@ -156,3 +156,45 @@ describe('usePageHasResponse', () => {
156
156
  expect(result.current()).toBeTruthy();
157
157
  });
158
158
  });
159
+
160
+ it('should be true for a loop component with values', () => {
161
+ const mockExecuteExpression = vi.fn();
162
+ mockExecuteExpression.mockReturnValueOnce('my value');
163
+
164
+ const values = {
165
+ VOTREPRENO: ['Alice', 'Bob', 'Charlie'],
166
+ VOTREAGE: [22, 30, 40],
167
+ };
168
+
169
+ const components = [
170
+ {
171
+ ...defaultComponentValues,
172
+ componentType: 'Loop',
173
+ components: [
174
+ {
175
+ ...defaultComponentValues,
176
+ componentType: 'Question',
177
+ components: [
178
+ {
179
+ ...defaultComponentValues,
180
+ componentType: 'Input',
181
+ response: { name: 'VOTREPRENO' },
182
+ },
183
+ {
184
+ ...defaultComponentValues,
185
+ componentType: 'InputNumber',
186
+ response: { name: 'VOTREAGE' },
187
+ },
188
+ ],
189
+ },
190
+ ],
191
+ value: values,
192
+ },
193
+ ] as any as LunaticComponentProps[];
194
+
195
+ const { result } = renderHook(() =>
196
+ usePageHasResponse(components, mockExecuteExpression)
197
+ );
198
+
199
+ expect(result.current()).toBeTruthy();
200
+ });
@@ -60,7 +60,7 @@ function hasOneResponse(
60
60
  return !isSubComponentsEmpty(childrenComponent, executeExpression);
61
61
  }
62
62
 
63
- // We found a value in one of the root component
63
+ // We found a value in one of the root component. Used for Loop
64
64
  if ('value' in component && !isEmpty(component.value)) {
65
65
  return true;
66
66
  }
@@ -25,7 +25,7 @@ describe('fillComponentValue', () => {
25
25
  );
26
26
  };
27
27
 
28
- describe('response', () => {
28
+ describe('single response', () => {
29
29
  const component = {
30
30
  response: { name: 'PRENOM' },
31
31
  } as LunaticComponentDefinition<'Input'>;
@@ -44,7 +44,7 @@ describe('fillComponentValue', () => {
44
44
  );
45
45
  });
46
46
  });
47
- describe('responses', () => {
47
+ describe('multiple responses', () => {
48
48
  const component = {
49
49
  responses: times(3, (k) => ({
50
50
  response: { name: `NAME${k}` },
@@ -64,4 +64,55 @@ describe('fillComponentValue', () => {
64
64
  });
65
65
  });
66
66
  });
67
+
68
+ describe('Loop component with nested components', () => {
69
+ const loopComponent = {
70
+ id: 'm7j9kwro',
71
+ componentType: 'Loop',
72
+ components: [
73
+ {
74
+ id: 'm7j9iem8',
75
+ componentType: 'Sequence',
76
+ },
77
+ {
78
+ id: 'question-m7j9q1ep',
79
+ componentType: 'Question',
80
+ components: [
81
+ {
82
+ id: 'm7j9q1ep',
83
+ componentType: 'Input',
84
+ response: { name: 'VOTREPRENO' },
85
+ },
86
+ ],
87
+ },
88
+ {
89
+ id: 'question-m7jb81xh',
90
+ componentType: 'Question',
91
+ components: [
92
+ {
93
+ id: 'm7jb81xh',
94
+ componentType: 'InputNumber',
95
+ response: { name: 'VOTREAGE' },
96
+ },
97
+ ],
98
+ },
99
+ ],
100
+ } as LunaticComponentDefinition;
101
+
102
+ it('should correctly extract values from nested responses as arrays', () => {
103
+ const values = {
104
+ VOTREPRENO: ['Alice', 'Bob', 'Charlie'],
105
+ VOTREAGE: [22, 30, 40],
106
+ };
107
+
108
+ expectFilledComponent(loopComponent, values).toEqual(values);
109
+ });
110
+
111
+ it('should return null for missing responses', () => {
112
+ expectFilledComponent(loopComponent).toEqual({
113
+ VOTREPRENO: null,
114
+ VOTREAGE: null,
115
+ });
116
+ });
117
+ });
67
118
  });
@@ -29,12 +29,27 @@ export function getValueProp(
29
29
  }
30
30
  // For loop, value will be a map of child component values
31
31
  if ('components' in component) {
32
- return Object.fromEntries(
33
- component.components
34
- .map((c) => ('response' in c ? c.response.name : null))
35
- .filter((name) => name !== null)
36
- .map((name) => [name, args.variables.get(name!)])
37
- );
32
+ return getChildResponseValues(component.components, args.variables);
38
33
  }
39
34
  return null;
40
35
  }
36
+
37
+ /**
38
+ * Get the values of every child components recursively.
39
+ */
40
+ function getChildResponseValues(
41
+ components: LunaticComponentDefinition[],
42
+ variables: LunaticVariablesStore
43
+ ): Record<string, unknown> {
44
+ return Object.fromEntries(
45
+ components.flatMap((c) => {
46
+ if ('response' in c) {
47
+ return [[c.response.name, variables.get(c.response.name)]];
48
+ }
49
+ if ('components' in c) {
50
+ return Object.entries(getChildResponseValues(c.components, variables));
51
+ }
52
+ return [];
53
+ })
54
+ );
55
+ }