@inseefr/lunatic 3.8.0-rc.0 → 3.8.0-rc.ucq-options-variable.0
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.
- package/esm/type.source.d.ts +9 -3
- package/esm/use-lunatic/commons/fill-components/fill-component-expressions.d.ts +1 -1
- package/esm/use-lunatic/commons/fill-components/fill-component-expressions.js.map +1 -1
- package/esm/use-lunatic/commons/fill-components/fill-components.js +10 -2
- package/esm/use-lunatic/commons/fill-components/fill-components.js.map +1 -1
- package/esm/use-lunatic/props/propOptions.d.ts +9 -1
- package/esm/use-lunatic/props/propOptions.js +56 -1
- package/esm/use-lunatic/props/propOptions.js.map +1 -1
- package/esm/use-lunatic/props/propOptions.spec.js +220 -56
- package/esm/use-lunatic/props/propOptions.spec.js.map +1 -1
- package/package.json +4 -1
- package/src/stories/checkbox/checkbox.stories.tsx +13 -0
- package/src/stories/checkbox/sourceOneDynamicOptions.json +496 -0
- package/src/stories/dropdown/dropdown.stories.tsx +12 -0
- package/src/stories/dropdown/sourceDynamicOptions.json +496 -0
- package/src/stories/radio/radio.stories.tsx +13 -0
- package/src/stories/radio/sourceDynamicOptions.json +496 -0
- package/src/type.source.ts +9 -3
- package/src/use-lunatic/commons/fill-components/fill-component-expressions.ts +2 -1
- package/src/use-lunatic/commons/fill-components/fill-components.ts +9 -10
- package/src/use-lunatic/props/propOptions.spec.ts +217 -147
- package/src/use-lunatic/props/propOptions.ts +97 -8
- package/tsconfig.build.tsbuildinfo +1 -1
- package/type.source.d.ts +9 -3
- package/use-lunatic/commons/fill-components/fill-component-expressions.d.ts +1 -1
- package/use-lunatic/commons/fill-components/fill-component-expressions.js.map +1 -1
- package/use-lunatic/commons/fill-components/fill-components.js +9 -1
- package/use-lunatic/commons/fill-components/fill-components.js.map +1 -1
- package/use-lunatic/props/propOptions.d.ts +9 -1
- package/use-lunatic/props/propOptions.js +57 -2
- package/use-lunatic/props/propOptions.js.map +1 -1
- package/use-lunatic/props/propOptions.spec.js +217 -55
- package/use-lunatic/props/propOptions.spec.js.map +1 -1
package/type.source.d.ts
CHANGED
|
@@ -124,7 +124,9 @@ export type ComponentCheckboxBooleanDefinition = ComponentDefinitionBaseWithResp
|
|
|
124
124
|
export type ComponentRadioDefinition = ComponentDefinitionBaseWithResponse & {
|
|
125
125
|
componentType: 'Radio';
|
|
126
126
|
orientation?: 'horizontal' | 'vertical';
|
|
127
|
-
options
|
|
127
|
+
options?: OptionsWithDetail;
|
|
128
|
+
optionSource?: string;
|
|
129
|
+
optionFilter?: VTLExpression;
|
|
128
130
|
};
|
|
129
131
|
export type OptionsWithDetail = {
|
|
130
132
|
value: string | boolean;
|
|
@@ -140,7 +142,9 @@ export type OptionsWithDetail = {
|
|
|
140
142
|
}[];
|
|
141
143
|
export type ComponentDropdownDefinition = ComponentDefinitionBaseWithResponse & {
|
|
142
144
|
componentType: 'Dropdown';
|
|
143
|
-
options
|
|
145
|
+
options?: Options;
|
|
146
|
+
optionSource?: string;
|
|
147
|
+
optionFilter?: VTLExpression;
|
|
144
148
|
};
|
|
145
149
|
export type ComponentQuestionDefinition = ComponentDefinitionBase & {
|
|
146
150
|
componentType: 'Question';
|
|
@@ -148,7 +152,9 @@ export type ComponentQuestionDefinition = ComponentDefinitionBase & {
|
|
|
148
152
|
};
|
|
149
153
|
export type ComponentCheckboxOneDefinition = ComponentDefinitionBaseWithResponse & {
|
|
150
154
|
componentType: 'CheckboxOne';
|
|
151
|
-
options
|
|
155
|
+
options?: OptionsWithDetail;
|
|
156
|
+
optionSource?: string;
|
|
157
|
+
optionFilter?: VTLExpression;
|
|
152
158
|
};
|
|
153
159
|
export type ComponentSuggesterDefinition = ComponentDefinitionBaseWithResponse & {
|
|
154
160
|
componentType: 'Suggester';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { ReactNode } from 'react';
|
|
2
2
|
import type { LunaticComponentDefinition, LunaticExpression, LunaticReducerState } from '../../type';
|
|
3
|
-
type UntranslatedProperties = 'expressions' | 'sections' | 'body' | 'item' | 'controls' | 'conditionFilter' | 'conditionReadOnly' | 'components';
|
|
3
|
+
type UntranslatedProperties = 'expressions' | 'sections' | 'body' | 'item' | 'controls' | 'conditionFilter' | 'conditionReadOnly' | 'components' | 'optionFilter';
|
|
4
4
|
export type DeepTranslateExpression<T> = T extends LunaticExpression ? ReactNode : T extends (infer ElementType)[] ? DeepTranslateExpression<ElementType>[] : T extends {
|
|
5
5
|
[k: string | number]: unknown;
|
|
6
6
|
} ? {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fill-component-expressions.js","sourceRoot":"","sources":["../../../src/use-lunatic/commons/fill-components/fill-component-expressions.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"fill-component-expressions.js","sourceRoot":"","sources":["../../../src/use-lunatic/commons/fill-components/fill-component-expressions.ts"],"names":[],"mappings":"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"}
|
|
@@ -47,7 +47,15 @@ parentReadOnly) => {
|
|
|
47
47
|
missingResponse: (0, propMissingResponse_1.getMissingResponseProp)(component, state),
|
|
48
48
|
management: state.management,
|
|
49
49
|
iterations: (0, propIterations_1.getIterationsProp)(component, state),
|
|
50
|
-
options: (0, propOptions_1.
|
|
50
|
+
options: (0, propOptions_1.computeOptionsFromComponent)(interpretedProps, {
|
|
51
|
+
variables: state.variables,
|
|
52
|
+
handleChanges: state.handleChanges,
|
|
53
|
+
pagerIteration: state.pager.iteration,
|
|
54
|
+
value,
|
|
55
|
+
logger: state.logger,
|
|
56
|
+
disableFilters: state.disableFilters,
|
|
57
|
+
shouldParentBeFiltered: shouldBeFiltered,
|
|
58
|
+
}),
|
|
51
59
|
...(0, getComponentTypeProps_1.getComponentTypeProps)(interpretedProps, state),
|
|
52
60
|
// This is too dynamic to be typed correctly, so we allow any here
|
|
53
61
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fill-components.js","sourceRoot":"","sources":["../../../src/use-lunatic/commons/fill-components/fill-components.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"fill-components.js","sourceRoot":"","sources":["../../../src/use-lunatic/commons/fill-components/fill-components.ts"],"names":[],"mappings":"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"}
|
|
@@ -19,7 +19,15 @@ export type InterpretedOption = {
|
|
|
19
19
|
/**
|
|
20
20
|
* Compute options for checkboxes / radios / dropdown
|
|
21
21
|
*/
|
|
22
|
-
export declare function
|
|
22
|
+
export declare function computeOptionsFromComponent(definition: DeepTranslateExpression<LunaticComponentDefinition>, { variables, handleChanges, pagerIteration, value, logger, disableFilters, shouldParentBeFiltered, }: {
|
|
23
|
+
variables: LunaticVariablesStore;
|
|
24
|
+
handleChanges: LunaticChangesHandler;
|
|
25
|
+
pagerIteration: LunaticState['pager']['iteration'];
|
|
26
|
+
value: unknown;
|
|
27
|
+
logger: LunaticLogger;
|
|
28
|
+
disableFilters?: boolean;
|
|
29
|
+
shouldParentBeFiltered?: boolean;
|
|
30
|
+
}): InterpretedOption[] | {
|
|
23
31
|
label: ReactNode;
|
|
24
32
|
name: string;
|
|
25
33
|
id: string;
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.computeOptionsFromComponent = computeOptionsFromComponent;
|
|
4
4
|
const number_1 = require("../../utils/number");
|
|
5
5
|
/**
|
|
6
6
|
* Compute options for checkboxes / radios / dropdown
|
|
7
7
|
*/
|
|
8
|
-
function
|
|
8
|
+
function computeOptionsFromComponent(definition, { variables, handleChanges, pagerIteration, value, logger, disableFilters, shouldParentBeFiltered, }) {
|
|
9
9
|
const iteration = (0, number_1.isNumber)(pagerIteration) ? [pagerIteration] : undefined;
|
|
10
10
|
if (definition.componentType === 'CheckboxGroup') {
|
|
11
11
|
return definition.responses
|
|
@@ -40,9 +40,24 @@ function getOptionsProp(definition, variables, handleChanges, pagerIteration, va
|
|
|
40
40
|
isFilteredOutOption(variables, iteration, logger, response.conditionFilter),
|
|
41
41
|
}));
|
|
42
42
|
}
|
|
43
|
+
// options based on another variable
|
|
44
|
+
if ('optionSource' in definition && definition.optionSource) {
|
|
45
|
+
return computeOptionsFromSource(definition.optionSource, {
|
|
46
|
+
variables,
|
|
47
|
+
value,
|
|
48
|
+
handleChanges,
|
|
49
|
+
responseName: definition.response.name,
|
|
50
|
+
logger,
|
|
51
|
+
shouldParentBeFiltered,
|
|
52
|
+
optionFilter: definition.optionFilter,
|
|
53
|
+
});
|
|
54
|
+
}
|
|
43
55
|
if (!('options' in definition)) {
|
|
44
56
|
return [];
|
|
45
57
|
}
|
|
58
|
+
if (!definition.options) {
|
|
59
|
+
return [];
|
|
60
|
+
}
|
|
46
61
|
return definition.options
|
|
47
62
|
.filter((option) => {
|
|
48
63
|
if (disableFilters ||
|
|
@@ -81,6 +96,46 @@ function getOptionsProp(definition, variables, handleChanges, pagerIteration, va
|
|
|
81
96
|
isFilteredOutOption(variables, iteration, logger, option.conditionFilter)),
|
|
82
97
|
}));
|
|
83
98
|
}
|
|
99
|
+
/**
|
|
100
|
+
* Get all options from a source variable, applying filters.
|
|
101
|
+
*/
|
|
102
|
+
function computeOptionsFromSource(optionSource, { variables, value, handleChanges, responseName, logger, shouldParentBeFiltered, optionFilter, }) {
|
|
103
|
+
// we don't know the type of the optionSource values (string, numbers, boolean)
|
|
104
|
+
const optionValues = variables.get(optionSource);
|
|
105
|
+
if (!optionValues) {
|
|
106
|
+
return [];
|
|
107
|
+
}
|
|
108
|
+
const normalizedValues = Array.isArray(optionValues)
|
|
109
|
+
? optionValues
|
|
110
|
+
: [optionValues];
|
|
111
|
+
return normalizedValues
|
|
112
|
+
.filter((option, index) => {
|
|
113
|
+
// option is an empty value, we remove it from the options list
|
|
114
|
+
if (option === null || option === undefined) {
|
|
115
|
+
return false;
|
|
116
|
+
}
|
|
117
|
+
// no filter expression, we keep the option
|
|
118
|
+
if (!optionFilter) {
|
|
119
|
+
return true;
|
|
120
|
+
}
|
|
121
|
+
// apply filter expression on option (applied to its iteration)
|
|
122
|
+
return !isFilteredOutOption(variables, [index], logger, optionFilter);
|
|
123
|
+
})
|
|
124
|
+
.map((option) => {
|
|
125
|
+
return {
|
|
126
|
+
label: String(option),
|
|
127
|
+
value: option,
|
|
128
|
+
checked: value === option,
|
|
129
|
+
onCheck: () => {
|
|
130
|
+
handleChanges([{ name: responseName, value: option }]);
|
|
131
|
+
},
|
|
132
|
+
onUncheck: () => {
|
|
133
|
+
handleChanges([{ name: responseName, value: null }]);
|
|
134
|
+
},
|
|
135
|
+
shouldBeFiltered: shouldParentBeFiltered,
|
|
136
|
+
};
|
|
137
|
+
});
|
|
138
|
+
}
|
|
84
139
|
/**
|
|
85
140
|
* Check if an option should be filtered, depending on its conditionFilter.
|
|
86
141
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"propOptions.js","sourceRoot":"","sources":["../../src/use-lunatic/props/propOptions.ts"],"names":[],"mappings":";;AA8BA,
|
|
1
|
+
{"version":3,"file":"propOptions.js","sourceRoot":"","sources":["../../src/use-lunatic/props/propOptions.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,69 +3,99 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
const vitest_1 = require("vitest");
|
|
4
4
|
const lunatic_variables_store_1 = require("../commons/variables/lunatic-variables-store");
|
|
5
5
|
const propOptions_1 = require("./propOptions");
|
|
6
|
-
(0, vitest_1.describe)('
|
|
6
|
+
(0, vitest_1.describe)('computeOptionsFromComponent', () => {
|
|
7
7
|
let variables;
|
|
8
|
-
const checkboxGroupDefinition = {
|
|
9
|
-
id: 'CheckboxGroup',
|
|
10
|
-
componentType: 'CheckboxGroup',
|
|
11
|
-
responses: [
|
|
12
|
-
{
|
|
13
|
-
label: 'Option 1',
|
|
14
|
-
response: { name: 'O1' },
|
|
15
|
-
id: 'id1',
|
|
16
|
-
},
|
|
17
|
-
{
|
|
18
|
-
label: 'Option 2',
|
|
19
|
-
response: { name: 'O2' },
|
|
20
|
-
id: 'id2',
|
|
21
|
-
},
|
|
22
|
-
],
|
|
23
|
-
};
|
|
24
|
-
const radioDefinition = {
|
|
25
|
-
id: 'RadioGroup',
|
|
26
|
-
componentType: 'Radio',
|
|
27
|
-
response: { name: 'RADIO' },
|
|
28
|
-
options: [
|
|
29
|
-
{
|
|
30
|
-
label: 'Option 1',
|
|
31
|
-
value: 'id1',
|
|
32
|
-
},
|
|
33
|
-
{
|
|
34
|
-
label: 'Option 2',
|
|
35
|
-
value: 'id2',
|
|
36
|
-
},
|
|
37
|
-
],
|
|
38
|
-
};
|
|
39
8
|
let mockChange;
|
|
40
9
|
const mockLogger = vitest_1.vi.fn();
|
|
41
10
|
(0, vitest_1.beforeEach)(() => {
|
|
42
11
|
mockChange = vitest_1.vi.fn();
|
|
43
12
|
variables = new lunatic_variables_store_1.LunaticVariablesStore();
|
|
44
13
|
});
|
|
45
|
-
(0, vitest_1.describe)('
|
|
14
|
+
(0, vitest_1.describe)('Options based on a fixed list', () => {
|
|
15
|
+
const checkboxGroupDefinition = {
|
|
16
|
+
id: 'CheckboxGroup',
|
|
17
|
+
componentType: 'CheckboxGroup',
|
|
18
|
+
responses: [
|
|
19
|
+
{
|
|
20
|
+
label: 'Option 1',
|
|
21
|
+
response: { name: 'O1' },
|
|
22
|
+
id: 'id1',
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
label: 'Option 2',
|
|
26
|
+
response: { name: 'O2' },
|
|
27
|
+
id: 'id2',
|
|
28
|
+
},
|
|
29
|
+
],
|
|
30
|
+
};
|
|
31
|
+
const radioDefinition = {
|
|
32
|
+
id: 'RadioGroup',
|
|
33
|
+
componentType: 'Radio',
|
|
34
|
+
response: { name: 'RADIO' },
|
|
35
|
+
options: [
|
|
36
|
+
{
|
|
37
|
+
label: 'Option 1',
|
|
38
|
+
value: 'id1',
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
label: 'Option 2',
|
|
42
|
+
value: 'id2',
|
|
43
|
+
},
|
|
44
|
+
],
|
|
45
|
+
};
|
|
46
46
|
(0, vitest_1.it)('should check boxes', () => {
|
|
47
47
|
variables.set('O2', false);
|
|
48
|
-
let options = (0, propOptions_1.
|
|
48
|
+
let options = (0, propOptions_1.computeOptionsFromComponent)(checkboxGroupDefinition, {
|
|
49
|
+
variables,
|
|
50
|
+
handleChanges: mockChange,
|
|
51
|
+
pagerIteration: undefined,
|
|
52
|
+
value: undefined,
|
|
53
|
+
logger: mockLogger,
|
|
54
|
+
});
|
|
49
55
|
(0, vitest_1.expect)(options[1].checked).toBe(false);
|
|
50
56
|
variables.set('O2', true);
|
|
51
|
-
options = (0, propOptions_1.
|
|
57
|
+
options = (0, propOptions_1.computeOptionsFromComponent)(checkboxGroupDefinition, {
|
|
58
|
+
variables,
|
|
59
|
+
handleChanges: mockChange,
|
|
60
|
+
pagerIteration: undefined,
|
|
61
|
+
value: undefined,
|
|
62
|
+
logger: mockLogger,
|
|
63
|
+
});
|
|
52
64
|
(0, vitest_1.expect)(options[1].checked).toBe(true);
|
|
53
65
|
});
|
|
54
66
|
(0, vitest_1.it)('should check boxes correctly within iteration', () => {
|
|
55
67
|
variables.set('O1', []);
|
|
56
68
|
variables.set('O2', []);
|
|
57
|
-
let options = (0, propOptions_1.
|
|
69
|
+
let options = (0, propOptions_1.computeOptionsFromComponent)(checkboxGroupDefinition, {
|
|
70
|
+
variables,
|
|
71
|
+
handleChanges: mockChange,
|
|
72
|
+
pagerIteration: 0,
|
|
73
|
+
value: undefined,
|
|
74
|
+
logger: mockLogger,
|
|
75
|
+
});
|
|
58
76
|
(0, vitest_1.expect)(options.filter((o) => o.checked), 'Nothing checked when variable empty').toHaveLength(0);
|
|
59
77
|
variables.set('O1', [true, 0]);
|
|
60
|
-
options = (0, propOptions_1.
|
|
78
|
+
options = (0, propOptions_1.computeOptionsFromComponent)(checkboxGroupDefinition, {
|
|
79
|
+
variables,
|
|
80
|
+
handleChanges: mockChange,
|
|
81
|
+
pagerIteration: 0,
|
|
82
|
+
value: undefined,
|
|
83
|
+
logger: mockLogger,
|
|
84
|
+
});
|
|
61
85
|
(0, vitest_1.expect)(options[0].checked).toBe(true);
|
|
62
86
|
(0, vitest_1.expect)(options[1].checked).toBe(false);
|
|
63
87
|
});
|
|
64
88
|
(0, vitest_1.it)('should create handleChange correctly', () => {
|
|
65
89
|
variables.set('O1', [true, false]);
|
|
66
90
|
variables.set('O2', [false, true]);
|
|
67
|
-
const options = (0, propOptions_1.
|
|
68
|
-
|
|
91
|
+
const options = (0, propOptions_1.computeOptionsFromComponent)(checkboxGroupDefinition, {
|
|
92
|
+
variables,
|
|
93
|
+
handleChanges: mockChange,
|
|
94
|
+
pagerIteration: 1,
|
|
95
|
+
value: undefined,
|
|
96
|
+
logger: mockLogger,
|
|
97
|
+
});
|
|
98
|
+
options[1].onCheck?.(false);
|
|
69
99
|
(0, vitest_1.expect)(mockChange).toHaveBeenLastCalledWith([
|
|
70
100
|
{ name: 'O2', value: false },
|
|
71
101
|
]);
|
|
@@ -96,7 +126,13 @@ const propOptions_1 = require("./propOptions");
|
|
|
96
126
|
],
|
|
97
127
|
};
|
|
98
128
|
variables.set('DETAIL', true);
|
|
99
|
-
const options = (0, propOptions_1.
|
|
129
|
+
const options = (0, propOptions_1.computeOptionsFromComponent)(definition, {
|
|
130
|
+
variables,
|
|
131
|
+
handleChanges: mockChange,
|
|
132
|
+
pagerIteration: undefined,
|
|
133
|
+
value: undefined,
|
|
134
|
+
logger: mockLogger,
|
|
135
|
+
});
|
|
100
136
|
(0, vitest_1.expect)(options).toHaveLength(2);
|
|
101
137
|
(0, vitest_1.expect)(options[0].detailLabel).toBe('Precize:');
|
|
102
138
|
(0, vitest_1.expect)(options[1].detailLabel).toBe('Precize:');
|
|
@@ -129,7 +165,13 @@ const propOptions_1 = require("./propOptions");
|
|
|
129
165
|
],
|
|
130
166
|
};
|
|
131
167
|
variables.set('DETAIL', true);
|
|
132
|
-
const options = (0, propOptions_1.
|
|
168
|
+
const options = (0, propOptions_1.computeOptionsFromComponent)(definition, {
|
|
169
|
+
variables,
|
|
170
|
+
handleChanges: mockChange,
|
|
171
|
+
pagerIteration: undefined,
|
|
172
|
+
value: undefined,
|
|
173
|
+
logger: mockLogger,
|
|
174
|
+
});
|
|
133
175
|
(0, vitest_1.expect)(options).toHaveLength(2);
|
|
134
176
|
(0, vitest_1.expect)(options[0].detailLabel).toBe('Precize:');
|
|
135
177
|
(0, vitest_1.expect)(options[1].detailLabel).toBe('Precize:');
|
|
@@ -156,7 +198,13 @@ const propOptions_1 = require("./propOptions");
|
|
|
156
198
|
},
|
|
157
199
|
],
|
|
158
200
|
};
|
|
159
|
-
const options = (0, propOptions_1.
|
|
201
|
+
const options = (0, propOptions_1.computeOptionsFromComponent)(definition, {
|
|
202
|
+
variables,
|
|
203
|
+
handleChanges: mockChange,
|
|
204
|
+
pagerIteration: undefined,
|
|
205
|
+
value: undefined,
|
|
206
|
+
logger: mockLogger,
|
|
207
|
+
});
|
|
160
208
|
// First option should be filtered out since its conditionFilter is evaluated to false
|
|
161
209
|
(0, vitest_1.expect)(options).toHaveLength(1);
|
|
162
210
|
(0, vitest_1.expect)(options[0].label).toBe('Option 2');
|
|
@@ -177,7 +225,13 @@ const propOptions_1 = require("./propOptions");
|
|
|
177
225
|
},
|
|
178
226
|
],
|
|
179
227
|
};
|
|
180
|
-
const options = (0, propOptions_1.
|
|
228
|
+
const options = (0, propOptions_1.computeOptionsFromComponent)(definition, {
|
|
229
|
+
variables,
|
|
230
|
+
handleChanges: mockChange,
|
|
231
|
+
pagerIteration: undefined,
|
|
232
|
+
value: undefined,
|
|
233
|
+
logger: mockLogger,
|
|
234
|
+
});
|
|
181
235
|
// First option should be filtered out since its conditionFilter is evaluated to false
|
|
182
236
|
(0, vitest_1.expect)(options).toHaveLength(1);
|
|
183
237
|
(0, vitest_1.expect)(options[0].label).toBe('Option 2');
|
|
@@ -198,7 +252,13 @@ const propOptions_1 = require("./propOptions");
|
|
|
198
252
|
vitest_1.vi.spyOn(variables, 'run').mockImplementation(() => {
|
|
199
253
|
throw new Error('Test error');
|
|
200
254
|
});
|
|
201
|
-
const options = (0, propOptions_1.
|
|
255
|
+
const options = (0, propOptions_1.computeOptionsFromComponent)(definition, {
|
|
256
|
+
variables,
|
|
257
|
+
handleChanges: mockChange,
|
|
258
|
+
pagerIteration: undefined,
|
|
259
|
+
value: undefined,
|
|
260
|
+
logger: mockLogger,
|
|
261
|
+
});
|
|
202
262
|
// Ensure the option is not filtered
|
|
203
263
|
(0, vitest_1.expect)(options).toHaveLength(1);
|
|
204
264
|
(0, vitest_1.expect)(options[0].shouldBeFiltered).toBe(false);
|
|
@@ -218,7 +278,13 @@ const propOptions_1 = require("./propOptions");
|
|
|
218
278
|
vitest_1.vi.spyOn(variables, 'run').mockImplementation(() => {
|
|
219
279
|
throw new Error('Test error');
|
|
220
280
|
});
|
|
221
|
-
const options = (0, propOptions_1.
|
|
281
|
+
const options = (0, propOptions_1.computeOptionsFromComponent)(definition, {
|
|
282
|
+
variables,
|
|
283
|
+
handleChanges: mockChange,
|
|
284
|
+
pagerIteration: undefined,
|
|
285
|
+
value: undefined,
|
|
286
|
+
logger: mockLogger,
|
|
287
|
+
});
|
|
222
288
|
// Ensure the option is not filtered
|
|
223
289
|
(0, vitest_1.expect)(options).toHaveLength(1);
|
|
224
290
|
(0, vitest_1.expect)(options[0].shouldBeFiltered).toBe(false);
|
|
@@ -239,8 +305,14 @@ const propOptions_1 = require("./propOptions");
|
|
|
239
305
|
vitest_1.vi.spyOn(variables, 'run').mockImplementation(() => {
|
|
240
306
|
return false;
|
|
241
307
|
});
|
|
242
|
-
const options = (0, propOptions_1.
|
|
243
|
-
|
|
308
|
+
const options = (0, propOptions_1.computeOptionsFromComponent)(definition, {
|
|
309
|
+
variables,
|
|
310
|
+
handleChanges: mockChange,
|
|
311
|
+
pagerIteration: undefined,
|
|
312
|
+
value: undefined,
|
|
313
|
+
logger: mockLogger,
|
|
314
|
+
disableFilters: true,
|
|
315
|
+
});
|
|
244
316
|
// Ensure the option is not filtered
|
|
245
317
|
(0, vitest_1.expect)(options).toHaveLength(1);
|
|
246
318
|
// the option should would have been filtered if we did not disable filters
|
|
@@ -261,8 +333,14 @@ const propOptions_1 = require("./propOptions");
|
|
|
261
333
|
vitest_1.vi.spyOn(variables, 'run').mockImplementation(() => {
|
|
262
334
|
return false;
|
|
263
335
|
});
|
|
264
|
-
const options = (0, propOptions_1.
|
|
265
|
-
|
|
336
|
+
const options = (0, propOptions_1.computeOptionsFromComponent)(definition, {
|
|
337
|
+
variables,
|
|
338
|
+
handleChanges: mockChange,
|
|
339
|
+
pagerIteration: undefined,
|
|
340
|
+
value: undefined,
|
|
341
|
+
logger: mockLogger,
|
|
342
|
+
disableFilters: true,
|
|
343
|
+
});
|
|
266
344
|
// Ensure the option is not filtered
|
|
267
345
|
(0, vitest_1.expect)(options).toHaveLength(1);
|
|
268
346
|
// the option should would have been filtered if we did not disable filters
|
|
@@ -280,9 +358,15 @@ const propOptions_1 = require("./propOptions");
|
|
|
280
358
|
},
|
|
281
359
|
],
|
|
282
360
|
};
|
|
283
|
-
const options = (0, propOptions_1.
|
|
284
|
-
|
|
285
|
-
|
|
361
|
+
const options = (0, propOptions_1.computeOptionsFromComponent)(definition, {
|
|
362
|
+
variables,
|
|
363
|
+
handleChanges: mockChange,
|
|
364
|
+
pagerIteration: undefined,
|
|
365
|
+
value: undefined,
|
|
366
|
+
logger: mockLogger,
|
|
367
|
+
disableFilters: true,
|
|
368
|
+
shouldParentBeFiltered: true,
|
|
369
|
+
});
|
|
286
370
|
// Ensure the option is not filtered
|
|
287
371
|
(0, vitest_1.expect)(options).toHaveLength(1);
|
|
288
372
|
// the option would have been filtered if we did not disable filters because its parent would
|
|
@@ -299,14 +383,92 @@ const propOptions_1 = require("./propOptions");
|
|
|
299
383
|
},
|
|
300
384
|
],
|
|
301
385
|
};
|
|
302
|
-
const options = (0, propOptions_1.
|
|
303
|
-
|
|
304
|
-
|
|
386
|
+
const options = (0, propOptions_1.computeOptionsFromComponent)(definition, {
|
|
387
|
+
variables,
|
|
388
|
+
handleChanges: mockChange,
|
|
389
|
+
pagerIteration: undefined,
|
|
390
|
+
value: undefined,
|
|
391
|
+
logger: mockLogger,
|
|
392
|
+
disableFilters: true,
|
|
393
|
+
shouldParentBeFiltered: true,
|
|
394
|
+
});
|
|
305
395
|
// Ensure the option is not filtered
|
|
306
396
|
(0, vitest_1.expect)(options).toHaveLength(1);
|
|
307
397
|
// the option would have been filtered if we did not disable filters because its parent would
|
|
308
398
|
(0, vitest_1.expect)(options[0].shouldBeFiltered).toBe(true);
|
|
309
399
|
});
|
|
310
400
|
});
|
|
401
|
+
(0, vitest_1.describe)('Options based on a source variable', () => {
|
|
402
|
+
const radioOptionSourceDefinition = {
|
|
403
|
+
id: 'RadioGroupDynamic',
|
|
404
|
+
componentType: 'Radio',
|
|
405
|
+
response: { name: 'RADIO' },
|
|
406
|
+
optionSource: 'NAME',
|
|
407
|
+
};
|
|
408
|
+
(0, vitest_1.it)('should build options when the source variable is an array of strings', () => {
|
|
409
|
+
variables.set('NAME', ['Maëlle', 'Verso']);
|
|
410
|
+
const options = (0, propOptions_1.computeOptionsFromComponent)(radioOptionSourceDefinition, {
|
|
411
|
+
variables,
|
|
412
|
+
handleChanges: mockChange,
|
|
413
|
+
pagerIteration: undefined,
|
|
414
|
+
value: undefined,
|
|
415
|
+
logger: mockLogger,
|
|
416
|
+
}); // force type but it should infer type correctly
|
|
417
|
+
(0, vitest_1.expect)(options).toHaveLength(2);
|
|
418
|
+
(0, vitest_1.expect)(options[0].value).toBe('Maëlle');
|
|
419
|
+
(0, vitest_1.expect)(options[0].label).toBe('Maëlle');
|
|
420
|
+
(0, vitest_1.expect)(options[1].value).toBe('Verso');
|
|
421
|
+
(0, vitest_1.expect)(options[1].label).toBe('Verso');
|
|
422
|
+
});
|
|
423
|
+
(0, vitest_1.it)('should build options when the source variable is an array of numbers', () => {
|
|
424
|
+
variables.set('NAME', [10, 20]);
|
|
425
|
+
const options = (0, propOptions_1.computeOptionsFromComponent)(radioOptionSourceDefinition, {
|
|
426
|
+
variables,
|
|
427
|
+
handleChanges: mockChange,
|
|
428
|
+
pagerIteration: undefined,
|
|
429
|
+
value: undefined,
|
|
430
|
+
logger: mockLogger,
|
|
431
|
+
}); // force type but it should infer type correctly
|
|
432
|
+
(0, vitest_1.expect)(options).toHaveLength(2);
|
|
433
|
+
(0, vitest_1.expect)(options[0].value).toBe(10);
|
|
434
|
+
(0, vitest_1.expect)(options[0].label).toBe('10');
|
|
435
|
+
(0, vitest_1.expect)(options[1].value).toBe(20);
|
|
436
|
+
(0, vitest_1.expect)(options[1].label).toBe('20');
|
|
437
|
+
});
|
|
438
|
+
(0, vitest_1.it)('should set the response when selecting a dynamic option', () => {
|
|
439
|
+
variables.set('NAME', ['Maëlle', 'Verso']);
|
|
440
|
+
const options = (0, propOptions_1.computeOptionsFromComponent)(radioOptionSourceDefinition, {
|
|
441
|
+
variables,
|
|
442
|
+
handleChanges: mockChange,
|
|
443
|
+
pagerIteration: undefined,
|
|
444
|
+
value: undefined,
|
|
445
|
+
logger: mockLogger,
|
|
446
|
+
}); // force type but it should infer type correctly
|
|
447
|
+
options[0].onCheck?.();
|
|
448
|
+
(0, vitest_1.expect)(mockChange).toHaveBeenLastCalledWith([
|
|
449
|
+
{ name: 'RADIO', value: 'Maëlle' },
|
|
450
|
+
]);
|
|
451
|
+
options[1].onCheck?.();
|
|
452
|
+
(0, vitest_1.expect)(mockChange).toHaveBeenLastCalledWith([
|
|
453
|
+
{ name: 'RADIO', value: 'Verso' },
|
|
454
|
+
]);
|
|
455
|
+
});
|
|
456
|
+
(0, vitest_1.it)('should filter options based on the optionFilter expression', () => {
|
|
457
|
+
const definition = {
|
|
458
|
+
...radioOptionSourceDefinition,
|
|
459
|
+
optionFilter: { type: 'VTL', value: 'AGE >= 18' },
|
|
460
|
+
};
|
|
461
|
+
variables.set('NAME', ['Maëlle', 'Verso', 'Aline']);
|
|
462
|
+
variables.set('AGE', [16, 30, 50]);
|
|
463
|
+
const options = (0, propOptions_1.computeOptionsFromComponent)(definition, {
|
|
464
|
+
variables,
|
|
465
|
+
handleChanges: mockChange,
|
|
466
|
+
pagerIteration: undefined,
|
|
467
|
+
value: undefined,
|
|
468
|
+
logger: mockLogger,
|
|
469
|
+
}); // force type but it should infer type correctly
|
|
470
|
+
(0, vitest_1.expect)(options.map((option) => option.value)).toEqual(['Verso', 'Aline']);
|
|
471
|
+
});
|
|
472
|
+
});
|
|
311
473
|
});
|
|
312
474
|
//# sourceMappingURL=propOptions.spec.js.map
|