fix: get label should use childrenKeyName for arrayTreeFilter when us… (#11311)

* fix: get label should use childrenKeyName for arrayTreeFilter when use customer fieldNames otherwise It can not get correct label array

* feat: add fieldNames test case in Cascader

* fix: cli fail

* fix: cil fail again
This commit is contained in:
qliu 2018-07-28 13:29:39 +08:00 committed by Wei Zhu
parent 1bbf59bb1d
commit c6518b92aa
2 changed files with 37 additions and 0 deletions

View File

@ -190,4 +190,40 @@ describe('Cascader', () => {
wrapper.setProps({ options: [options[0]] });
expect(wrapper.find('.ant-cascader-menu-item').length).toBe(1);
});
it('can use fieldNames', () => {
const customerOptions = [{
code: 'zhejiang',
name: 'Zhejiang',
items: [{
code: 'hangzhou',
name: 'Hangzhou',
items: [{
code: 'xihu',
name: 'West Lake',
}],
}],
}, {
code: 'jiangsu',
name: 'Jiangsu',
items: [{
code: 'nanjing',
name: 'Nanjing',
items: [{
code: 'zhonghuamen',
name: 'Zhong Hua Men',
}],
}],
}];
const wrapper = mount(<Cascader
options={customerOptions}
fieldNames={{
children: 'items',
label: 'name',
value: 'code',
}}
/>);
wrapper.instance().handleChange(['zhejiang', 'hangzhou', 'xihu'], customerOptions);
expect(wrapper.find('.ant-cascader-picker-label').text().split('/').length).toBe(3);
});
});

View File

@ -253,6 +253,7 @@ export default class Cascader extends React.Component<CascaderProps, CascaderSta
const unwrappedValue = Array.isArray(value[0]) ? value[0] : value;
const selectedOptions: CascaderOptionType[] = arrayTreeFilter(options,
(o: CascaderOptionType, level: number) => o[names.value] === unwrappedValue[level],
{ childrenKeyName: names.children },
);
const label = selectedOptions.map(o => o[names.label]);
return displayRender(label, selectedOptions);