@inseefr/lunatic 3.7.6 → 3.7.7-rc.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/components/Suggester/Suggester.js +11 -2
- package/components/Suggester/Suggester.js.map +1 -1
- package/esm/components/Suggester/Suggester.js +12 -3
- package/esm/components/Suggester/Suggester.js.map +1 -1
- package/esm/use-lunatic/commons/page.js +53 -2
- package/esm/use-lunatic/commons/page.js.map +1 -1
- package/esm/use-lunatic/reducer/commons/auto-explore-loop.js +1 -1
- package/esm/use-lunatic/reducer/commons/auto-explore-loop.js.map +1 -1
- package/package.json +1 -1
- package/src/components/Suggester/Suggester.tsx +16 -5
- package/src/use-lunatic/commons/page.ts +72 -3
- package/src/use-lunatic/reducer/commons/auto-explore-loop.ts +1 -1
- package/tsconfig.build.tsbuildinfo +1 -1
- package/use-lunatic/commons/page.js +53 -2
- package/use-lunatic/commons/page.js.map +1 -1
- package/use-lunatic/reducer/commons/auto-explore-loop.js +1 -1
- package/use-lunatic/reducer/commons/auto-explore-loop.js.map +1 -1
|
@@ -21,7 +21,7 @@ function Suggester(props) {
|
|
|
21
21
|
function WrappedSuggester({ storeName, id, className, optionRenderer, labelRenderer, handleChanges, disabled, value, label, declarations, description, errors, readOnly, response, optionResponses = [], executeExpression, iteration, arbitrary, arbitraryValue, }) {
|
|
22
22
|
// Default options should not change between render
|
|
23
23
|
// so we can break the rule of hooks here
|
|
24
|
-
const
|
|
24
|
+
const computeSelectedOptions = () => {
|
|
25
25
|
if (arbitraryValue) {
|
|
26
26
|
return [{ id: 'OTHER', label: arbitraryValue, value: 'OTHER' }];
|
|
27
27
|
}
|
|
@@ -45,7 +45,8 @@ function WrappedSuggester({ storeName, id, className, optionRenderer, labelRende
|
|
|
45
45
|
value: value,
|
|
46
46
|
},
|
|
47
47
|
];
|
|
48
|
-
}
|
|
48
|
+
};
|
|
49
|
+
const [selectedOptions, setSelectedOptions] = (0, react_2.useState)(computeSelectedOptions);
|
|
49
50
|
const { state, options, search, setSearch, onFocus, onBlur } = (0, useSuggestions_1.useSuggestions)({
|
|
50
51
|
storeName: storeName,
|
|
51
52
|
allowArbitrary: !!arbitrary,
|
|
@@ -112,6 +113,14 @@ function WrappedSuggester({ storeName, id, className, optionRenderer, labelRende
|
|
|
112
113
|
onChange(null);
|
|
113
114
|
setSearch('');
|
|
114
115
|
};
|
|
116
|
+
// Fix display issue (when handleChanges is called outside this component (in management mode, return to FORCED value by example) )
|
|
117
|
+
// We have to re-compute actual selection
|
|
118
|
+
(0, react_2.useEffect)(() => {
|
|
119
|
+
if (value) {
|
|
120
|
+
setSelectedOptions(computeSelectedOptions());
|
|
121
|
+
}
|
|
122
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
123
|
+
}, [value]);
|
|
115
124
|
return ((0, jsx_runtime_1.jsx)(CustomSuggester_1.CustomSuggester, { state: state, id: id, className: className, optionRenderer: optionRenderer, labelRenderer: labelRenderer, options: options, onSelect: onChange, onFocus: onFocus, search: search, onSearch: handleSearch, onClear: handleClear, disabled: disabled, readOnly: readOnly, value: selectedOptions, label: label, onBlur: onBlur, declarations: declarations, description: description, errors: componentErrors }));
|
|
116
125
|
}
|
|
117
126
|
//# sourceMappingURL=Suggester.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Suggester.js","sourceRoot":"","sources":["../../src/components/Suggester/Suggester.tsx"],"names":[],"mappings":";;;;;AAQA,8BAOC;AAED,
|
|
1
|
+
{"version":3,"file":"Suggester.js","sourceRoot":"","sources":["../../src/components/Suggester/Suggester.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
import { createElement as _createElement } from "react";
|
|
3
|
-
import { useState } from 'react';
|
|
3
|
+
import { useEffect, useState } from 'react';
|
|
4
4
|
import { CustomSuggester } from './CustomSuggester';
|
|
5
5
|
import { getComponentErrors } from '../shared/ComponentErrors/ComponentErrors';
|
|
6
6
|
import { OTHER_VALUE, useSuggestions } from './useSuggestions';
|
|
@@ -15,7 +15,7 @@ export function WrappedSuggester({ storeName, id, className, optionRenderer, lab
|
|
|
15
15
|
var _a;
|
|
16
16
|
// Default options should not change between render
|
|
17
17
|
// so we can break the rule of hooks here
|
|
18
|
-
const
|
|
18
|
+
const computeSelectedOptions = () => {
|
|
19
19
|
if (arbitraryValue) {
|
|
20
20
|
return [{ id: 'OTHER', label: arbitraryValue, value: 'OTHER' }];
|
|
21
21
|
}
|
|
@@ -39,7 +39,8 @@ export function WrappedSuggester({ storeName, id, className, optionRenderer, lab
|
|
|
39
39
|
value: value,
|
|
40
40
|
},
|
|
41
41
|
];
|
|
42
|
-
}
|
|
42
|
+
};
|
|
43
|
+
const [selectedOptions, setSelectedOptions] = useState(computeSelectedOptions);
|
|
43
44
|
const { state, options, search, setSearch, onFocus, onBlur } = useSuggestions({
|
|
44
45
|
storeName: storeName,
|
|
45
46
|
allowArbitrary: !!arbitrary,
|
|
@@ -106,6 +107,14 @@ export function WrappedSuggester({ storeName, id, className, optionRenderer, lab
|
|
|
106
107
|
onChange(null);
|
|
107
108
|
setSearch('');
|
|
108
109
|
};
|
|
110
|
+
// Fix display issue (when handleChanges is called outside this component (in management mode, return to FORCED value by example) )
|
|
111
|
+
// We have to re-compute actual selection
|
|
112
|
+
useEffect(() => {
|
|
113
|
+
if (value) {
|
|
114
|
+
setSelectedOptions(computeSelectedOptions());
|
|
115
|
+
}
|
|
116
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
117
|
+
}, [value]);
|
|
109
118
|
return (_jsx(CustomSuggester, { state: state, id: id, className: className, optionRenderer: optionRenderer, labelRenderer: labelRenderer, options: options, onSelect: onChange, onFocus: onFocus, search: search, onSearch: handleSearch, onClear: handleClear, disabled: disabled, readOnly: readOnly, value: selectedOptions, label: label, onBlur: onBlur, declarations: declarations, description: description, errors: componentErrors }));
|
|
110
119
|
}
|
|
111
120
|
//# sourceMappingURL=Suggester.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Suggester.js","sourceRoot":"","sources":["../../../src/components/Suggester/Suggester.tsx"],"names":[],"mappings":";;AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"Suggester.js","sourceRoot":"","sources":["../../../src/components/Suggester/Suggester.tsx"],"names":[],"mappings":"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"}
|
|
@@ -10,7 +10,50 @@ export function getPageId({ subPage, page, }) {
|
|
|
10
10
|
* Converts a page number (3.1.2) to an array of numbers [3, 1, 2]
|
|
11
11
|
*/
|
|
12
12
|
export function pageStringToNumbers(page) {
|
|
13
|
-
return page.split('.').map((v) => parseInt(v, 10));
|
|
13
|
+
return page.split('.').map((v) => Number.parseInt(v, 10));
|
|
14
|
+
}
|
|
15
|
+
// see useLoopUtils.ts
|
|
16
|
+
function getIterationOfLoop(component, executeExpression) {
|
|
17
|
+
const min = 'lines' in component ? executeExpression(component.lines.min) : 0;
|
|
18
|
+
const iterations = 'iterations' in component
|
|
19
|
+
? executeExpression(component.iterations)
|
|
20
|
+
: 0;
|
|
21
|
+
return Math.max(min, iterations);
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Check if component has a conditionFilter defined
|
|
25
|
+
* @param component
|
|
26
|
+
* @returns
|
|
27
|
+
*/
|
|
28
|
+
function hasConditionFilter(component) {
|
|
29
|
+
return 'conditionFilter' in component && !!component.conditionFilter;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Check if a not paginated Loop has at least one component to display
|
|
33
|
+
* @param component
|
|
34
|
+
* @param state
|
|
35
|
+
* @returns boolean indicating if the not paginated Loop is empty
|
|
36
|
+
*/
|
|
37
|
+
function hasAtLeastOneComponentVisible(component, state) {
|
|
38
|
+
if (component.componentType === 'Loop' && !component.paginatedLoop) {
|
|
39
|
+
const nbIteration = getIterationOfLoop(component, state.executeExpression);
|
|
40
|
+
for (let iterationOfLoop = 0; iterationOfLoop < nbIteration; iterationOfLoop++) {
|
|
41
|
+
for (const c of component.components) {
|
|
42
|
+
// if no conditionFilter -> component is visible
|
|
43
|
+
if (!hasConditionFilter(c))
|
|
44
|
+
return true;
|
|
45
|
+
if (executeConditionFilter(
|
|
46
|
+
// @ts-expect-error Seem to be a typescript issue since we check type with hasConditionFilter, c.conditionFilter is defined
|
|
47
|
+
c.conditionFilter, state.executeExpression, iterationOfLoop)) {
|
|
48
|
+
return true;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
// no component visible in all iterations
|
|
53
|
+
return false;
|
|
54
|
+
}
|
|
55
|
+
// not a Loop
|
|
56
|
+
return true;
|
|
14
57
|
}
|
|
15
58
|
/**
|
|
16
59
|
* Check if we are on an empty page
|
|
@@ -33,7 +76,15 @@ export function isPageEmpty(state) {
|
|
|
33
76
|
}
|
|
34
77
|
// Use condition filter if present
|
|
35
78
|
if ('conditionFilter' in component && component.conditionFilter) {
|
|
36
|
-
|
|
79
|
+
const conditionFilterResult = executeConditionFilter(component.conditionFilter, executeExpression, iteration);
|
|
80
|
+
// early return if the result of filter is false
|
|
81
|
+
if (!conditionFilterResult)
|
|
82
|
+
return false;
|
|
83
|
+
// early return if the component is not a not Loop
|
|
84
|
+
if (component.componentType !== 'Loop')
|
|
85
|
+
return conditionFilterResult;
|
|
86
|
+
// if the conditionFilter of NOT paginated Loop is true (have to be visible), we have to check if at least one component is visible inside
|
|
87
|
+
return hasAtLeastOneComponentVisible(component, state);
|
|
37
88
|
}
|
|
38
89
|
return true;
|
|
39
90
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"page.js","sourceRoot":"","sources":["../../../src/use-lunatic/commons/page.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,sBAAsB,MAAM,4BAA4B,CAAC;AAEhE,MAAM,UAAU,SAAS,CAAC,EACzB,OAAO,EACP,IAAI,GACoD;IACxD,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC3B,OAAO,IAAI,CAAC;IACb,CAAC;IACD,OAAO,GAAG,IAAI,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;AACjC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAY;IAC/C,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"page.js","sourceRoot":"","sources":["../../../src/use-lunatic/commons/page.ts"],"names":[],"mappings":"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"}
|
|
@@ -27,7 +27,7 @@ export function autoExploreLoop(state, direction = 'forward') {
|
|
|
27
27
|
newPager.iteration = isForward ? 0 : newPager.nbIterations - 1;
|
|
28
28
|
hasExploredLoop = true;
|
|
29
29
|
};
|
|
30
|
-
// The page is a loop
|
|
30
|
+
// The page is a paginated loop
|
|
31
31
|
if (page.isLoop && page.subPages && page.subPages.length > 0) {
|
|
32
32
|
goInsideSubpage(page.subPages, state.executeExpression(page.iterations));
|
|
33
33
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auto-explore-loop.js","sourceRoot":"","sources":["../../../../src/use-lunatic/reducer/commons/auto-explore-loop.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAEpE;;GAEG;AACH,MAAM,UAAU,eAAe,CAC9B,KAA0B,EAC1B,YAAoC,SAAS;;IAE7C,MAAM,QAAQ,GAAG;QAChB,GAAG,KAAK,CAAC,KAAK;KACd,CAAC;IACF,MAAM,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;IACnC,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACjC,IAAI,eAAe,GAAG,KAAK,CAAC;IAC5B,MAAM,SAAS,GAAG,SAAS,KAAK,SAAS,CAAC;IAE1C,MAAM,eAAe,GAAG,CAAC,QAAkB,EAAE,WAAmB,EAAE,EAAE;QACnE,uCAAuC;QACvC,IAAI,WAAW,KAAK,CAAC,EAAE,CAAC;YACvB,QAAQ,CAAC,IAAI,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACpC,eAAe,GAAG,IAAI,CAAC;YACvB,OAAO;QACR,CAAC;QACD,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC;QACnC,MAAM,YAAY,GAAG,mBAAmB,CACvC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,CACxC,CAAC;QACF,QAAQ,CAAC,IAAI,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;QAChC,QAAQ,CAAC,OAAO,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,sBAAsB;QAC9D,QAAQ,CAAC,UAAU,GAAG,UAAU,CAAC;QACjC,QAAQ,CAAC,YAAY,GAAG,WAAW,CAAC;QACpC,QAAQ,CAAC,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,YAAY,GAAG,CAAC,CAAC;QAC/D,eAAe,GAAG,IAAI,CAAC;IACxB,CAAC,CAAC;IAEF
|
|
1
|
+
{"version":3,"file":"auto-explore-loop.js","sourceRoot":"","sources":["../../../../src/use-lunatic/reducer/commons/auto-explore-loop.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { useState } from 'react';
|
|
1
|
+
import { useEffect, useState } from 'react';
|
|
2
2
|
import type { LunaticComponentProps } from '../type';
|
|
3
3
|
import { CustomSuggester } from './CustomSuggester';
|
|
4
4
|
import { getComponentErrors } from '../shared/ComponentErrors/ComponentErrors';
|
|
@@ -38,9 +38,7 @@ export function WrappedSuggester({
|
|
|
38
38
|
}: LunaticComponentProps<'Suggester'>) {
|
|
39
39
|
// Default options should not change between render
|
|
40
40
|
// so we can break the rule of hooks here
|
|
41
|
-
const [
|
|
42
|
-
[SuggesterOptionType] | []
|
|
43
|
-
>(() => {
|
|
41
|
+
const computeSelectedOptions = (): [SuggesterOptionType] | [] => {
|
|
44
42
|
if (arbitraryValue) {
|
|
45
43
|
return [{ id: 'OTHER', label: arbitraryValue, value: 'OTHER' }];
|
|
46
44
|
}
|
|
@@ -67,7 +65,11 @@ export function WrappedSuggester({
|
|
|
67
65
|
value: value,
|
|
68
66
|
},
|
|
69
67
|
];
|
|
70
|
-
}
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
const [selectedOptions, setSelectedOptions] = useState<
|
|
71
|
+
[SuggesterOptionType] | []
|
|
72
|
+
>(computeSelectedOptions);
|
|
71
73
|
|
|
72
74
|
const { state, options, search, setSearch, onFocus, onBlur } = useSuggestions(
|
|
73
75
|
{
|
|
@@ -143,6 +145,15 @@ export function WrappedSuggester({
|
|
|
143
145
|
setSearch('');
|
|
144
146
|
};
|
|
145
147
|
|
|
148
|
+
// Fix display issue (when handleChanges is called outside this component (in management mode, return to FORCED value by example) )
|
|
149
|
+
// We have to re-compute actual selection
|
|
150
|
+
useEffect(() => {
|
|
151
|
+
if (value) {
|
|
152
|
+
setSelectedOptions(computeSelectedOptions());
|
|
153
|
+
}
|
|
154
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
155
|
+
}, [value]);
|
|
156
|
+
|
|
146
157
|
return (
|
|
147
158
|
<CustomSuggester
|
|
148
159
|
state={state}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { LunaticReducerState } from '../type';
|
|
1
|
+
import type { LunaticComponentDefinition, LunaticReducerState } from '../type';
|
|
2
2
|
import { getComponentsFromState } from './get-components-from-state';
|
|
3
3
|
import executeConditionFilter from './execute-condition-filter';
|
|
4
4
|
|
|
@@ -16,7 +16,69 @@ export function getPageId({
|
|
|
16
16
|
* Converts a page number (3.1.2) to an array of numbers [3, 1, 2]
|
|
17
17
|
*/
|
|
18
18
|
export function pageStringToNumbers(page: string): number[] {
|
|
19
|
-
return page.split('.').map((v) => parseInt(v, 10));
|
|
19
|
+
return page.split('.').map((v) => Number.parseInt(v, 10));
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
// see useLoopUtils.ts
|
|
23
|
+
function getIterationOfLoop(
|
|
24
|
+
component: LunaticComponentDefinition,
|
|
25
|
+
executeExpression: LunaticReducerState['executeExpression']
|
|
26
|
+
) {
|
|
27
|
+
const min =
|
|
28
|
+
'lines' in component ? executeExpression<number>(component.lines.min) : 0;
|
|
29
|
+
const iterations =
|
|
30
|
+
'iterations' in component
|
|
31
|
+
? executeExpression<number>(component.iterations)
|
|
32
|
+
: 0;
|
|
33
|
+
return Math.max(min, iterations);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Check if component has a conditionFilter defined
|
|
38
|
+
* @param component
|
|
39
|
+
* @returns
|
|
40
|
+
*/
|
|
41
|
+
function hasConditionFilter(component: LunaticComponentDefinition): boolean {
|
|
42
|
+
return 'conditionFilter' in component && !!component.conditionFilter;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Check if a not paginated Loop has at least one component to display
|
|
47
|
+
* @param component
|
|
48
|
+
* @param state
|
|
49
|
+
* @returns boolean indicating if the not paginated Loop is empty
|
|
50
|
+
*/
|
|
51
|
+
function hasAtLeastOneComponentVisible(
|
|
52
|
+
component: LunaticComponentDefinition,
|
|
53
|
+
state: LunaticReducerState
|
|
54
|
+
): boolean {
|
|
55
|
+
if (component.componentType === 'Loop' && !component.paginatedLoop) {
|
|
56
|
+
const nbIteration = getIterationOfLoop(component, state.executeExpression);
|
|
57
|
+
for (
|
|
58
|
+
let iterationOfLoop = 0;
|
|
59
|
+
iterationOfLoop < nbIteration;
|
|
60
|
+
iterationOfLoop++
|
|
61
|
+
) {
|
|
62
|
+
for (const c of component.components) {
|
|
63
|
+
// if no conditionFilter -> component is visible
|
|
64
|
+
if (!hasConditionFilter(c)) return true;
|
|
65
|
+
if (
|
|
66
|
+
executeConditionFilter(
|
|
67
|
+
// @ts-expect-error Seem to be a typescript issue since we check type with hasConditionFilter, c.conditionFilter is defined
|
|
68
|
+
c.conditionFilter,
|
|
69
|
+
state.executeExpression,
|
|
70
|
+
iterationOfLoop
|
|
71
|
+
)
|
|
72
|
+
) {
|
|
73
|
+
return true;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
// no component visible in all iterations
|
|
78
|
+
return false;
|
|
79
|
+
}
|
|
80
|
+
// not a Loop
|
|
81
|
+
return true;
|
|
20
82
|
}
|
|
21
83
|
|
|
22
84
|
/**
|
|
@@ -27,6 +89,7 @@ export function isPageEmpty(state: LunaticReducerState): boolean {
|
|
|
27
89
|
const { executeExpression, pager, options } = state;
|
|
28
90
|
const { iteration } = pager;
|
|
29
91
|
const components = getComponentsFromState(state, true);
|
|
92
|
+
|
|
30
93
|
const visibleComponents = components.filter((component) => {
|
|
31
94
|
if (options.disableFilters) {
|
|
32
95
|
return true;
|
|
@@ -42,11 +105,17 @@ export function isPageEmpty(state: LunaticReducerState): boolean {
|
|
|
42
105
|
|
|
43
106
|
// Use condition filter if present
|
|
44
107
|
if ('conditionFilter' in component && component.conditionFilter) {
|
|
45
|
-
|
|
108
|
+
const conditionFilterResult = executeConditionFilter(
|
|
46
109
|
component.conditionFilter,
|
|
47
110
|
executeExpression,
|
|
48
111
|
iteration
|
|
49
112
|
);
|
|
113
|
+
// early return if the result of filter is false
|
|
114
|
+
if (!conditionFilterResult) return false;
|
|
115
|
+
// early return if the component is not a not Loop
|
|
116
|
+
if (component.componentType !== 'Loop') return conditionFilterResult;
|
|
117
|
+
// if the conditionFilter of NOT paginated Loop is true (have to be visible), we have to check if at least one component is visible inside
|
|
118
|
+
return hasAtLeastOneComponentVisible(component, state);
|
|
50
119
|
}
|
|
51
120
|
return true;
|
|
52
121
|
});
|