@inseefr/lunatic 3.11.2 → 3.12.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.
Files changed (33) hide show
  1. package/esm/type.source.d.ts +17 -9
  2. package/esm/use-lunatic/commons/fill-components/fill-component-expressions.d.ts +1 -1
  3. package/esm/use-lunatic/commons/fill-components/fill-component-expressions.js.map +1 -1
  4. package/esm/use-lunatic/commons/fill-components/fill-components.js +10 -2
  5. package/esm/use-lunatic/commons/fill-components/fill-components.js.map +1 -1
  6. package/esm/use-lunatic/props/propOptions.d.ts +9 -1
  7. package/esm/use-lunatic/props/propOptions.js +56 -1
  8. package/esm/use-lunatic/props/propOptions.js.map +1 -1
  9. package/esm/use-lunatic/props/propOptions.spec.js +220 -56
  10. package/esm/use-lunatic/props/propOptions.spec.js.map +1 -1
  11. package/package.json +4 -1
  12. package/src/stories/checkbox/checkbox.stories.tsx +13 -0
  13. package/src/stories/checkbox/sourceOneDynamicOptions.json +496 -0
  14. package/src/stories/dropdown/dropdown.stories.tsx +12 -0
  15. package/src/stories/dropdown/sourceDynamicOptions.json +496 -0
  16. package/src/stories/radio/radio.stories.tsx +13 -0
  17. package/src/stories/radio/sourceDynamicOptions.json +496 -0
  18. package/src/type.source.ts +19 -9
  19. package/src/use-lunatic/commons/fill-components/fill-component-expressions.ts +2 -1
  20. package/src/use-lunatic/commons/fill-components/fill-components.ts +9 -10
  21. package/src/use-lunatic/props/propOptions.spec.ts +217 -147
  22. package/src/use-lunatic/props/propOptions.ts +99 -10
  23. package/tsconfig.build.tsbuildinfo +1 -1
  24. package/type.source.d.ts +17 -9
  25. package/use-lunatic/commons/fill-components/fill-component-expressions.d.ts +1 -1
  26. package/use-lunatic/commons/fill-components/fill-component-expressions.js.map +1 -1
  27. package/use-lunatic/commons/fill-components/fill-components.js +9 -1
  28. package/use-lunatic/commons/fill-components/fill-components.js.map +1 -1
  29. package/use-lunatic/props/propOptions.d.ts +9 -1
  30. package/use-lunatic/props/propOptions.js +57 -2
  31. package/use-lunatic/props/propOptions.js.map +1 -1
  32. package/use-lunatic/props/propOptions.spec.js +217 -55
  33. package/use-lunatic/props/propOptions.spec.js.map +1 -1
@@ -124,8 +124,8 @@ export type ComponentCheckboxBooleanDefinition = ComponentDefinitionBaseWithResp
124
124
  export type ComponentRadioDefinition = ComponentDefinitionBaseWithResponse & {
125
125
  componentType: 'Radio';
126
126
  orientation?: 'horizontal' | 'vertical';
127
- options: OptionsWithDetail;
128
- };
127
+ } & ComponentRadioDefinition1;
128
+ export type ComponentRadioDefinition1 = StaticOptions | OptionsFromVariable;
129
129
  export type OptionsWithDetail = {
130
130
  value: string | boolean;
131
131
  label: VTLExpression;
@@ -140,16 +140,16 @@ export type OptionsWithDetail = {
140
140
  }[];
141
141
  export type ComponentDropdownDefinition = ComponentDefinitionBaseWithResponse & {
142
142
  componentType: 'Dropdown';
143
- options: Options;
144
- };
143
+ } & ComponentDropdownDefinition1;
144
+ export type ComponentDropdownDefinition1 = StaticOptions | OptionsFromVariable;
145
145
  export type ComponentQuestionDefinition = ComponentDefinitionBase & {
146
146
  componentType: 'Question';
147
147
  components: ComponentDefinition[];
148
148
  };
149
149
  export type ComponentCheckboxOneDefinition = ComponentDefinitionBaseWithResponse & {
150
150
  componentType: 'CheckboxOne';
151
- options: OptionsWithDetail;
152
- };
151
+ } & ComponentCheckboxOneDefinition1;
152
+ export type ComponentCheckboxOneDefinition1 = StaticOptions | OptionsFromVariable;
153
153
  export type ComponentSuggesterDefinition = ComponentDefinitionBaseWithResponse & {
154
154
  componentType: 'Suggester';
155
155
  /**
@@ -186,11 +186,12 @@ export type ComponentPairWiseLinksDefinition = ComponentDefinitionBase & {
186
186
  };
187
187
  };
188
188
  sourceVariables?: {
189
- /** Name of the variable containing the name of the respondent */
189
+ /**
190
+ * Name of the variable containing the name of the respondent
191
+ */
190
192
  name?: string;
191
193
  /**
192
- * Name of the variable containing the gender of the respondent
193
- * (value of variable -> 1:male, 2: female)
194
+ * Name of the variable containing the sex/gender of the respondent (value of variable -> 1: man, 2: woman)
194
195
  */
195
196
  gender?: string;
196
197
  };
@@ -375,6 +376,13 @@ export type ControlDefinition = {
375
376
  export type ResponseDefinition = {
376
377
  name: string;
377
378
  };
379
+ export type StaticOptions = {
380
+ options: OptionsWithDetail;
381
+ };
382
+ export type OptionsFromVariable = {
383
+ optionSource: string;
384
+ optionFilter?: VTLExpression;
385
+ };
378
386
  export type ComponentText = {
379
387
  componentType: 'Text';
380
388
  label: VTLExpression;
@@ -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":"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"}
1
+ {"version":3,"file":"fill-component-expressions.js","sourceRoot":"","sources":["../../../../src/use-lunatic/commons/fill-components/fill-component-expressions.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEjD,MAAM,cAAc,GAAG;IACtB,CAAC,OAAO,EAAE,IAAI,CAAC;IACf,CAAC,MAAM,EAAE,IAAI,CAAC;IACd,CAAC,eAAe,EAAE,IAAI,CAAC;IACvB,CAAC,oBAAoB,EAAE,IAAI,CAAC;IAC5B,CAAC,aAAa,EAAE,IAAI,CAAC;IACrB,CAAC,YAAY,EAAE,UAAU,CAAC;IAC1B,CAAC,iBAAiB,EAAE,IAAI,CAAC;IACzB,CAAC,uBAAuB,EAAE,IAAI,CAAC;IAC/B,CAAC,wBAAwB,EAAE,IAAI,CAAC;IAChC,CAAC,qBAAqB,EAAE,IAAI,CAAC;IAC7B,CAAC,sBAAsB,EAAE,IAAI,CAAC;IAC9B,CAAC,qBAAqB,EAAE,UAAU,CAAC;IACnC,CAAC,aAAa,EAAE,IAAI,CAAC;IACrB,CAAC,YAAY,EAAE,IAAI,CAAC;IACpB,CAAC,WAAW,EAAE,UAAU,CAAC;IACzB,CAAC,WAAW,EAAE,UAAU,CAAC;IACzB,CAAC,iBAAiB,EAAE,UAAU,CAAC;IAC/B,CAAC,iBAAiB,EAAE,UAAU,CAAC;IAC/B,CAAC,iBAAiB,EAAE,QAAQ,CAAC;IAC7B,CAAC,cAAc,EAAE,IAAI,CAAC;IACtB,CAAC,UAAU,EAAE,QAAQ,CAAC;IACtB,CAAC,mBAAmB,EAAE,QAAQ,CAAC;IAC/B,iBAAiB;IACjB,CAAC,iBAAiB,EAAE,UAAU,CAAC;IAC/B,CAAC,sBAAsB,EAAE,UAAU,CAAC;CAC3B,CAAC;AAEX,oEAAoE;AACpE,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AAEtC,SAAS,UAAU,CAAC,CAAU;IAC7B,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;QAC3B,OAAO,CAAC,CAAC;IACV,CAAC;IACD,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;QAC3B,OAAO,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACxB,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtC,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACzB,CAAC;IACD,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;QAChB,OAAO,CAAC,CAAC;IACV,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC;AACjD,CAAC;AAED,SAAS,QAAQ,CAAC,CAAU;IAC3B,IAAI,OAAO,CAAC,KAAK,SAAS,EAAE,CAAC;QAC5B,OAAO,CAAC,CAAC;IACV,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtC,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACvB,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;QACtB,OAAO,KAAK,CAAC;IACd,CAAC;IACD,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC;AACnB,CAAC;AAED,SAAS,UAAU,CAAC,CAAU;IAC7B,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;QAC3B,OAAO,CAAC,CAAC;IACV,CAAC;IACD,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;QAC3B,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC;IACrB,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;QACtB,OAAO,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrC,CAAC;IACD,IAAI,CAAC,CAAC,EAAE,CAAC;QACR,OAAO,EAAE,CAAC;IACX,CAAC;IACD,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC;AACrB,CAAC;AAyBD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,UAAU,wBAAwB,CACvC,SAAqC,EACrC,KAGC;IAED,IAAI,eAAe,GAAQ,SAAS,CAAC,CAAC,4DAA4D;IAElG,KAAK,MAAM,SAAS,IAAI,cAAc,EAAE,CAAC;QACxC,MAAM,YAAY,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC7C,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;QAE5B,0BAA0B;QAC1B,MAAM,OAAO,GAAG,CAAC,UAAmB,EAAE,EAAE;;YACvC,qFAAqF;YACrF,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAI,WAAW,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBACxE,OAAO,UAAU,CAAC;YACnB,CAAC;YACD,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,EAAE,CAAC;gBACpC,MAAM,IAAI,KAAK,CACd,2BAA2B,SAAS,CAAC,CAAC,CAAC,UAAU,UAAU,EAAE,CAC7D,CAAC;YACH,CAAC;YACD,MAAM,MAAM,GAAG,KAAK,CAAC,iBAAiB,CAAC,UAAU,EAAE;gBAClD,SAAS,EAAE,MAAA,KAAK,CAAC,KAAK,CAAC,eAAe,mCAAI,KAAK,CAAC,KAAK,CAAC,SAAS;aAC/D,CAAC,CAAC;YACH,IAAI,CAAC;gBACJ,OAAO,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;YACzC,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACZ,MAAM,IAAI,KAAK,CAAC,wBAAwB,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACzE,CAAC;QACF,CAAC,CAAC;QACF,eAAe,GAAG,uBAAuB,CACxC,eAAe,EACf,YAAY,EACZ,OAAO,CACP,CAAC;IACH,CAAC;IAED,OAAO,eAAe,CAAC;AACxB,CAAC;AAED,SAAS,iBAAiB,CACzB,UAAmB;IAEnB,OAAO,OAAO,CACb,UAAU;QACT,OAAO,UAAU,KAAK,QAAQ;QAC9B,MAAM,IAAI,UAAU;QACpB,OAAO,IAAI,UAAU,CACtB,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,SAAS,uBAAuB,CAC/B,GAAY,EACZ,IAAc,EACd,WAAoC;IAEpC,sDAAsD;IACtD,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,uBAAuB,CAAC,IAAI,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC;IAC5E,CAAC;IAED,+CAA+C;IAC/C,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC;IACzB,CAAC;IACD,MAAM,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;IACjC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,IAAI,GAAG,CAAC,EAAE,CAAC;QAC1C,OAAO,GAAG,CAAC;IACZ,CAAC;IACD,OAAO;QACN,GAAG,GAAG;QACN,CAAC,QAAQ,CAAC,EAAE,uBAAuB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,WAAW,CAAC;KACrE,CAAC;AACH,CAAC"}
@@ -3,7 +3,7 @@ import { getComponentTypeProps } from '../../props/getComponentTypeProps';
3
3
  import { getMissingResponseProp } from '../../props/propMissingResponse';
4
4
  import { getValueProp } from '../../props/propValue';
5
5
  import { getIterationsProp } from '../../props/propIterations';
6
- import { getOptionsProp } from '../../props/propOptions';
6
+ import { computeOptionsFromComponent } from '../../props/propOptions';
7
7
  /**
8
8
  * To make this work with TypeScript we need to call function in succession, we prefer expressiveness here over generalized approach
9
9
  */
@@ -43,7 +43,15 @@ parentReadOnly) => {
43
43
  missingResponse: getMissingResponseProp(component, state),
44
44
  management: state.management,
45
45
  iterations: getIterationsProp(component, state),
46
- options: getOptionsProp(interpretedProps, state.variables, state.handleChanges, state.pager.iteration, value, state.logger, state.disableFilters, shouldBeFiltered),
46
+ options: computeOptionsFromComponent(interpretedProps, {
47
+ variables: state.variables,
48
+ handleChanges: state.handleChanges,
49
+ pagerIteration: state.pager.iteration,
50
+ value,
51
+ logger: state.logger,
52
+ disableFilters: state.disableFilters,
53
+ shouldParentBeFiltered: shouldBeFiltered,
54
+ }),
47
55
  ...getComponentTypeProps(interpretedProps, state),
48
56
  // This is too dynamic to be typed correctly, so we allow any here
49
57
  };
@@ -1 +1 @@
1
- {"version":3,"file":"fill-components.js","sourceRoot":"","sources":["../../../../src/use-lunatic/commons/fill-components/fill-components.ts"],"names":[],"mappings":"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"}
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 getOptionsProp(definition: DeepTranslateExpression<LunaticComponentDefinition>, variables: LunaticVariablesStore, handleChanges: LunaticChangesHandler, pagerIteration: LunaticState['pager']['iteration'], value: unknown, logger: LunaticLogger, disableFilters?: boolean, shouldParentBeFiltered?: boolean): {
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;
@@ -2,7 +2,7 @@ import { isNumber } from '../../utils/number';
2
2
  /**
3
3
  * Compute options for checkboxes / radios / dropdown
4
4
  */
5
- export function getOptionsProp(definition, variables, handleChanges, pagerIteration, value, logger, disableFilters, shouldParentBeFiltered) {
5
+ export function computeOptionsFromComponent(definition, { variables, handleChanges, pagerIteration, value, logger, disableFilters, shouldParentBeFiltered, }) {
6
6
  const iteration = isNumber(pagerIteration) ? [pagerIteration] : undefined;
7
7
  if (definition.componentType === 'CheckboxGroup') {
8
8
  return definition.responses
@@ -40,9 +40,24 @@ export function getOptionsProp(definition, variables, handleChanges, pagerIterat
40
40
  });
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 ||
@@ -84,6 +99,46 @@ export function getOptionsProp(definition, variables, handleChanges, pagerIterat
84
99
  });
85
100
  });
86
101
  }
102
+ /**
103
+ * Get all options from a source variable, applying filters.
104
+ */
105
+ function computeOptionsFromSource(optionSource, { variables, value, handleChanges, responseName, logger, shouldParentBeFiltered, optionFilter, }) {
106
+ // we don't know the type of the optionSource values (string, numbers, boolean)
107
+ const optionValues = variables.get(optionSource);
108
+ if (!optionValues) {
109
+ return [];
110
+ }
111
+ const normalizedValues = Array.isArray(optionValues)
112
+ ? optionValues
113
+ : [optionValues];
114
+ return normalizedValues
115
+ .filter((option, index) => {
116
+ // option is an empty value, we remove it from the options list
117
+ if (option === null || option === undefined) {
118
+ return false;
119
+ }
120
+ // no filter expression, we keep the option
121
+ if (!optionFilter) {
122
+ return true;
123
+ }
124
+ // apply filter expression on option (applied to its iteration)
125
+ return !isFilteredOutOption(variables, [index], logger, optionFilter);
126
+ })
127
+ .map((option) => {
128
+ return {
129
+ label: String(option),
130
+ value: option,
131
+ checked: value === option,
132
+ onCheck: () => {
133
+ handleChanges([{ name: responseName, value: option }]);
134
+ },
135
+ onUncheck: () => {
136
+ handleChanges([{ name: responseName, value: null }]);
137
+ },
138
+ shouldBeFiltered: shouldParentBeFiltered,
139
+ };
140
+ });
141
+ }
87
142
  /**
88
143
  * Check if an option should be filtered, depending on its conditionFilter.
89
144
  */
@@ -1 +1 @@
1
- {"version":3,"file":"propOptions.js","sourceRoot":"","sources":["../../../src/use-lunatic/props/propOptions.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"propOptions.js","sourceRoot":"","sources":["../../../src/use-lunatic/props/propOptions.ts"],"names":[],"mappings":"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"}
@@ -1,69 +1,100 @@
1
1
  import { beforeEach, describe, expect, it, vi } from 'vitest';
2
2
  import { LunaticVariablesStore } from '../commons/variables/lunatic-variables-store';
3
- import { getOptionsProp } from './propOptions';
4
- describe('getOptionsProp()', () => {
3
+ import { computeOptionsFromComponent } from './propOptions';
4
+ describe('computeOptionsFromComponent', () => {
5
5
  let variables;
6
- const checkboxGroupDefinition = {
7
- id: 'CheckboxGroup',
8
- componentType: 'CheckboxGroup',
9
- responses: [
10
- {
11
- label: 'Option 1',
12
- response: { name: 'O1' },
13
- id: 'id1',
14
- },
15
- {
16
- label: 'Option 2',
17
- response: { name: 'O2' },
18
- id: 'id2',
19
- },
20
- ],
21
- };
22
- const radioDefinition = {
23
- id: 'RadioGroup',
24
- componentType: 'Radio',
25
- response: { name: 'RADIO' },
26
- options: [
27
- {
28
- label: 'Option 1',
29
- value: 'id1',
30
- },
31
- {
32
- label: 'Option 2',
33
- value: 'id2',
34
- },
35
- ],
36
- };
37
6
  let mockChange;
38
7
  const mockLogger = vi.fn();
39
8
  beforeEach(() => {
40
9
  mockChange = vi.fn();
41
10
  variables = new LunaticVariablesStore();
42
11
  });
43
- describe('CheckboxGroup', () => {
12
+ describe('Options based on a fixed list', () => {
13
+ const checkboxGroupDefinition = {
14
+ id: 'CheckboxGroup',
15
+ componentType: 'CheckboxGroup',
16
+ responses: [
17
+ {
18
+ label: 'Option 1',
19
+ response: { name: 'O1' },
20
+ id: 'id1',
21
+ },
22
+ {
23
+ label: 'Option 2',
24
+ response: { name: 'O2' },
25
+ id: 'id2',
26
+ },
27
+ ],
28
+ };
29
+ const radioDefinition = {
30
+ id: 'RadioGroup',
31
+ componentType: 'Radio',
32
+ response: { name: 'RADIO' },
33
+ options: [
34
+ {
35
+ label: 'Option 1',
36
+ value: 'id1',
37
+ },
38
+ {
39
+ label: 'Option 2',
40
+ value: 'id2',
41
+ },
42
+ ],
43
+ };
44
44
  it('should check boxes', () => {
45
45
  variables.set('O2', false);
46
- let options = getOptionsProp(checkboxGroupDefinition, variables, mockChange, undefined, undefined, mockLogger);
46
+ let options = computeOptionsFromComponent(checkboxGroupDefinition, {
47
+ variables,
48
+ handleChanges: mockChange,
49
+ pagerIteration: undefined,
50
+ value: undefined,
51
+ logger: mockLogger,
52
+ });
47
53
  expect(options[1].checked).toBe(false);
48
54
  variables.set('O2', true);
49
- options = getOptionsProp(checkboxGroupDefinition, variables, mockChange, undefined, undefined, mockLogger);
55
+ options = computeOptionsFromComponent(checkboxGroupDefinition, {
56
+ variables,
57
+ handleChanges: mockChange,
58
+ pagerIteration: undefined,
59
+ value: undefined,
60
+ logger: mockLogger,
61
+ });
50
62
  expect(options[1].checked).toBe(true);
51
63
  });
52
64
  it('should check boxes correctly within iteration', () => {
53
65
  variables.set('O1', []);
54
66
  variables.set('O2', []);
55
- let options = getOptionsProp(checkboxGroupDefinition, variables, mockChange, 0, undefined, mockLogger);
67
+ let options = computeOptionsFromComponent(checkboxGroupDefinition, {
68
+ variables,
69
+ handleChanges: mockChange,
70
+ pagerIteration: 0,
71
+ value: undefined,
72
+ logger: mockLogger,
73
+ });
56
74
  expect(options.filter((o) => o.checked), 'Nothing checked when variable empty').toHaveLength(0);
57
75
  variables.set('O1', [true, 0]);
58
- options = getOptionsProp(checkboxGroupDefinition, variables, mockChange, 0, undefined, mockLogger);
76
+ options = computeOptionsFromComponent(checkboxGroupDefinition, {
77
+ variables,
78
+ handleChanges: mockChange,
79
+ pagerIteration: 0,
80
+ value: undefined,
81
+ logger: mockLogger,
82
+ });
59
83
  expect(options[0].checked).toBe(true);
60
84
  expect(options[1].checked).toBe(false);
61
85
  });
62
86
  it('should create handleChange correctly', () => {
87
+ var _a, _b;
63
88
  variables.set('O1', [true, false]);
64
89
  variables.set('O2', [false, true]);
65
- const options = getOptionsProp(checkboxGroupDefinition, variables, mockChange, 1, undefined, mockLogger);
66
- options[1].onCheck(false);
90
+ const options = computeOptionsFromComponent(checkboxGroupDefinition, {
91
+ variables,
92
+ handleChanges: mockChange,
93
+ pagerIteration: 1,
94
+ value: undefined,
95
+ logger: mockLogger,
96
+ });
97
+ (_b = (_a = options[1]).onCheck) === null || _b === void 0 ? void 0 : _b.call(_a, false);
67
98
  expect(mockChange).toHaveBeenLastCalledWith([
68
99
  { name: 'O2', value: false },
69
100
  ]);
@@ -94,7 +125,13 @@ describe('getOptionsProp()', () => {
94
125
  ],
95
126
  };
96
127
  variables.set('DETAIL', true);
97
- const options = getOptionsProp(definition, variables, mockChange, undefined, undefined, mockLogger);
128
+ const options = computeOptionsFromComponent(definition, {
129
+ variables,
130
+ handleChanges: mockChange,
131
+ pagerIteration: undefined,
132
+ value: undefined,
133
+ logger: mockLogger,
134
+ });
98
135
  expect(options).toHaveLength(2);
99
136
  expect(options[0].detailLabel).toBe('Precize:');
100
137
  expect(options[1].detailLabel).toBe('Precize:');
@@ -127,7 +164,13 @@ describe('getOptionsProp()', () => {
127
164
  ],
128
165
  };
129
166
  variables.set('DETAIL', true);
130
- const options = getOptionsProp(definition, variables, mockChange, undefined, undefined, mockLogger);
167
+ const options = computeOptionsFromComponent(definition, {
168
+ variables,
169
+ handleChanges: mockChange,
170
+ pagerIteration: undefined,
171
+ value: undefined,
172
+ logger: mockLogger,
173
+ });
131
174
  expect(options).toHaveLength(2);
132
175
  expect(options[0].detailLabel).toBe('Precize:');
133
176
  expect(options[1].detailLabel).toBe('Precize:');
@@ -154,7 +197,13 @@ describe('getOptionsProp()', () => {
154
197
  },
155
198
  ],
156
199
  };
157
- const options = getOptionsProp(definition, variables, mockChange, undefined, undefined, mockLogger);
200
+ const options = computeOptionsFromComponent(definition, {
201
+ variables,
202
+ handleChanges: mockChange,
203
+ pagerIteration: undefined,
204
+ value: undefined,
205
+ logger: mockLogger,
206
+ });
158
207
  // First option should be filtered out since its conditionFilter is evaluated to false
159
208
  expect(options).toHaveLength(1);
160
209
  expect(options[0].label).toBe('Option 2');
@@ -175,7 +224,13 @@ describe('getOptionsProp()', () => {
175
224
  },
176
225
  ],
177
226
  };
178
- const options = getOptionsProp(definition, variables, mockChange, undefined, undefined, mockLogger);
227
+ const options = computeOptionsFromComponent(definition, {
228
+ variables,
229
+ handleChanges: mockChange,
230
+ pagerIteration: undefined,
231
+ value: undefined,
232
+ logger: mockLogger,
233
+ });
179
234
  // First option should be filtered out since its conditionFilter is evaluated to false
180
235
  expect(options).toHaveLength(1);
181
236
  expect(options[0].label).toBe('Option 2');
@@ -196,7 +251,13 @@ describe('getOptionsProp()', () => {
196
251
  vi.spyOn(variables, 'run').mockImplementation(() => {
197
252
  throw new Error('Test error');
198
253
  });
199
- const options = getOptionsProp(definition, variables, mockChange, undefined, undefined, mockLogger);
254
+ const options = computeOptionsFromComponent(definition, {
255
+ variables,
256
+ handleChanges: mockChange,
257
+ pagerIteration: undefined,
258
+ value: undefined,
259
+ logger: mockLogger,
260
+ });
200
261
  // Ensure the option is not filtered
201
262
  expect(options).toHaveLength(1);
202
263
  expect(options[0].shouldBeFiltered).toBe(false);
@@ -216,7 +277,13 @@ describe('getOptionsProp()', () => {
216
277
  vi.spyOn(variables, 'run').mockImplementation(() => {
217
278
  throw new Error('Test error');
218
279
  });
219
- const options = getOptionsProp(definition, variables, mockChange, undefined, undefined, mockLogger);
280
+ const options = computeOptionsFromComponent(definition, {
281
+ variables,
282
+ handleChanges: mockChange,
283
+ pagerIteration: undefined,
284
+ value: undefined,
285
+ logger: mockLogger,
286
+ });
220
287
  // Ensure the option is not filtered
221
288
  expect(options).toHaveLength(1);
222
289
  expect(options[0].shouldBeFiltered).toBe(false);
@@ -237,8 +304,14 @@ describe('getOptionsProp()', () => {
237
304
  vi.spyOn(variables, 'run').mockImplementation(() => {
238
305
  return false;
239
306
  });
240
- const options = getOptionsProp(definition, variables, mockChange, undefined, undefined, mockLogger, true // disableFilters = true
241
- );
307
+ const options = computeOptionsFromComponent(definition, {
308
+ variables,
309
+ handleChanges: mockChange,
310
+ pagerIteration: undefined,
311
+ value: undefined,
312
+ logger: mockLogger,
313
+ disableFilters: true,
314
+ });
242
315
  // Ensure the option is not filtered
243
316
  expect(options).toHaveLength(1);
244
317
  // the option should would have been filtered if we did not disable filters
@@ -259,8 +332,14 @@ describe('getOptionsProp()', () => {
259
332
  vi.spyOn(variables, 'run').mockImplementation(() => {
260
333
  return false;
261
334
  });
262
- const options = getOptionsProp(definition, variables, mockChange, undefined, undefined, mockLogger, true // disableFilters = true
263
- );
335
+ const options = computeOptionsFromComponent(definition, {
336
+ variables,
337
+ handleChanges: mockChange,
338
+ pagerIteration: undefined,
339
+ value: undefined,
340
+ logger: mockLogger,
341
+ disableFilters: true,
342
+ });
264
343
  // Ensure the option is not filtered
265
344
  expect(options).toHaveLength(1);
266
345
  // the option should would have been filtered if we did not disable filters
@@ -278,9 +357,15 @@ describe('getOptionsProp()', () => {
278
357
  },
279
358
  ],
280
359
  };
281
- const options = getOptionsProp(definition, variables, mockChange, undefined, undefined, mockLogger, true, // disableFilters = true
282
- true // parent component should be filtered
283
- );
360
+ const options = computeOptionsFromComponent(definition, {
361
+ variables,
362
+ handleChanges: mockChange,
363
+ pagerIteration: undefined,
364
+ value: undefined,
365
+ logger: mockLogger,
366
+ disableFilters: true,
367
+ shouldParentBeFiltered: true,
368
+ });
284
369
  // Ensure the option is not filtered
285
370
  expect(options).toHaveLength(1);
286
371
  // the option would have been filtered if we did not disable filters because its parent would
@@ -297,14 +382,93 @@ describe('getOptionsProp()', () => {
297
382
  },
298
383
  ],
299
384
  };
300
- const options = getOptionsProp(definition, variables, mockChange, undefined, undefined, mockLogger, true, // disableFilters = true
301
- true // parent component should be filtered
302
- );
385
+ const options = computeOptionsFromComponent(definition, {
386
+ variables,
387
+ handleChanges: mockChange,
388
+ pagerIteration: undefined,
389
+ value: undefined,
390
+ logger: mockLogger,
391
+ disableFilters: true,
392
+ shouldParentBeFiltered: true,
393
+ });
303
394
  // Ensure the option is not filtered
304
395
  expect(options).toHaveLength(1);
305
396
  // the option would have been filtered if we did not disable filters because its parent would
306
397
  expect(options[0].shouldBeFiltered).toBe(true);
307
398
  });
308
399
  });
400
+ describe('Options based on a source variable', () => {
401
+ const radioOptionSourceDefinition = {
402
+ id: 'RadioGroupDynamic',
403
+ componentType: 'Radio',
404
+ response: { name: 'RADIO' },
405
+ optionSource: 'NAME',
406
+ };
407
+ it('should build options when the source variable is an array of strings', () => {
408
+ variables.set('NAME', ['Maëlle', 'Verso']);
409
+ const options = computeOptionsFromComponent(radioOptionSourceDefinition, {
410
+ variables,
411
+ handleChanges: mockChange,
412
+ pagerIteration: undefined,
413
+ value: undefined,
414
+ logger: mockLogger,
415
+ }); // force type but it should infer type correctly
416
+ expect(options).toHaveLength(2);
417
+ expect(options[0].value).toBe('Maëlle');
418
+ expect(options[0].label).toBe('Maëlle');
419
+ expect(options[1].value).toBe('Verso');
420
+ expect(options[1].label).toBe('Verso');
421
+ });
422
+ it('should build options when the source variable is an array of numbers', () => {
423
+ variables.set('NAME', [10, 20]);
424
+ const options = computeOptionsFromComponent(radioOptionSourceDefinition, {
425
+ variables,
426
+ handleChanges: mockChange,
427
+ pagerIteration: undefined,
428
+ value: undefined,
429
+ logger: mockLogger,
430
+ }); // force type but it should infer type correctly
431
+ expect(options).toHaveLength(2);
432
+ expect(options[0].value).toBe(10);
433
+ expect(options[0].label).toBe('10');
434
+ expect(options[1].value).toBe(20);
435
+ expect(options[1].label).toBe('20');
436
+ });
437
+ it('should set the response when selecting a dynamic option', () => {
438
+ var _a, _b, _c, _d;
439
+ variables.set('NAME', ['Maëlle', 'Verso']);
440
+ const options = 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
+ (_b = (_a = options[0]).onCheck) === null || _b === void 0 ? void 0 : _b.call(_a);
448
+ expect(mockChange).toHaveBeenLastCalledWith([
449
+ { name: 'RADIO', value: 'Maëlle' },
450
+ ]);
451
+ (_d = (_c = options[1]).onCheck) === null || _d === void 0 ? void 0 : _d.call(_c);
452
+ expect(mockChange).toHaveBeenLastCalledWith([
453
+ { name: 'RADIO', value: 'Verso' },
454
+ ]);
455
+ });
456
+ 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 = 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
+ expect(options.map((option) => option.value)).toEqual(['Verso', 'Aline']);
471
+ });
472
+ });
309
473
  });
310
474
  //# sourceMappingURL=propOptions.spec.js.map