Skip to content

Commit 11542a1

Browse files
authored
AntDesign - Fix FieldSelect with 3+ level !struct nesting (#564)
* Fix AntDesign FieldSelect with 2+ level nesting * lint fix * chlog * fix test
1 parent eebb172 commit 11542a1

File tree

3 files changed

+17
-10
lines changed

3 files changed

+17
-10
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
- Fixed issue with frozen config (`Object.freeze`) by using `clone` (issue #345) (PR #490)
66
- Fix: Filter value sources for func args correctly. LHS field can be used as arg in RHS function. (PR #490)
77
- MUI - Support showSearch (autocomplete) for field select widget (issue #479 #521) (PR #563)
8+
- AntDesign - Fix FieldSelect with 3+ level !struct nesting (issue #224) (PR #564)
89
- 4.7.2
910
- Fixed import of rule_group with `not` (issue #548) (PR #559)
1011
- 4.7.1

modules/components/widgets/antd/core/FieldSelect.jsx

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -77,19 +77,25 @@ export default class FieldSelect extends PureComponent {
7777
return res;
7878
}
7979

80-
renderSelectItems(fields) {
80+
renderSelectItems(fields, level = 0) {
8181
return fields.map(field => {
8282
const {items, key, path, label, fullLabel, altLabel, tooltip, grouplabel, disabled} = field;
83+
const groupPrefix = level > 0 ? "\u00A0\u00A0".repeat(level) : "";
84+
const prefix = level > 1 ? "\u00A0\u00A0".repeat(level-1) : "";
8385
const pathKey = path || key;
8486
if (items) {
85-
return <OptGroup
86-
key={pathKey}
87-
label={label}
88-
>
89-
{this.renderSelectItems(items)}
90-
</OptGroup>;
87+
const simpleItems = items.filter(it => !it.items);
88+
const complexItems = items.filter(it => !!it.items);
89+
const gr = simpleItems.length
90+
? [<OptGroup
91+
key={pathKey}
92+
label={groupPrefix+label}
93+
>{this.renderSelectItems(simpleItems, level+1)}</OptGroup>]
94+
: [];
95+
const list = complexItems.length ? this.renderSelectItems(complexItems, level+1) : [];
96+
return [...gr, ...list];
9197
} else {
92-
const option = tooltip ? <Tooltip title={tooltip}>{label}</Tooltip> : label;
98+
const option = tooltip ? <Tooltip title={tooltip}>{prefix+label}</Tooltip> : prefix+label;
9399
return <Option
94100
key={pathKey}
95101
value={pathKey}
@@ -101,7 +107,7 @@ export default class FieldSelect extends PureComponent {
101107
{option}
102108
</Option>;
103109
}
104-
});
110+
}).flat(Infinity);
105111
}
106112

107113
}

tests/specs/WidgetsAntd.test.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ describe("antdesign widgets render", () => {
99
it("should render select by default", () => {
1010
with_qb_ant(configs.with_struct, inits.with_nested, "JsonLogic", (qb) => {
1111
expect(qb.find(".query-builder")).to.have.length(1);
12-
expect(qb.find(".ant-select-selection-item").at(0).text()).to.equal("user.info.firstName");
12+
expect(qb.find(".ant-select-selection-item").at(0).text()).to.equal("  firstName");
1313
});
1414
});
1515

0 commit comments

Comments
 (0)