From bf903a804ada02e8421035dff52469a992768602 Mon Sep 17 00:00:00 2001 From: Charles Lee Date: Tue, 10 Nov 2020 13:45:13 +0800 Subject: [PATCH] Support different path length in Cascader (#1529) --- .../zent/src/cascader/demos/4.multiple.md | 38 +++++++------------ packages/zent/src/cascader/forest.ts | 7 +++- 2 files changed, 20 insertions(+), 25 deletions(-) diff --git a/packages/zent/src/cascader/demos/4.multiple.md b/packages/zent/src/cascader/demos/4.multiple.md index ef6cb504df..f8eed67827 100644 --- a/packages/zent/src/cascader/demos/4.multiple.md +++ b/packages/zent/src/cascader/demos/4.multiple.md @@ -28,7 +28,6 @@ en-US: import { MenuCascader } from 'zent'; class Simple extends React.Component { - state = { value: [ ['330000', '330100', '330106'], @@ -50,8 +49,8 @@ class Simple extends React.Component { { value: '330107', label: '{i18n.yh}', - } - ] + }, + ], }, { value: '330200', @@ -60,10 +59,10 @@ class Simple extends React.Component { { value: '330206', label: '{i18n.lw}', - } - ] - } - ] + }, + ], + }, + ], }, { value: '120000', @@ -72,24 +71,18 @@ class Simple extends React.Component { { value: '120100', label: '{i18n.be}', - children: [ - { - value: '120111', - label: '{i18n.al}' - } - ] - } - ] - } - ] - } + }, + ], + }, + ], + }; onChange = (value, selectedOptions, meta) => { - console.log(value, selectedOptions, meta) + console.log(value, selectedOptions, meta); this.setState({ value, }); - } + }; render() { return ( @@ -104,8 +97,5 @@ class Simple extends React.Component { } } -ReactDOM.render( - - , mountNode -); +ReactDOM.render(, mountNode); ``` diff --git a/packages/zent/src/cascader/forest.ts b/packages/zent/src/cascader/forest.ts index 5730726cda..0f6610cb5e 100644 --- a/packages/zent/src/cascader/forest.ts +++ b/packages/zent/src/cascader/forest.ts @@ -299,7 +299,12 @@ export class Forest { const { value } = startNode; return this.reducePath((acc, path) => { - if (path[idx].value === value && (!predicate || predicate(path))) { + // Paths may have different lengths + if ( + path.length > idx && + path[idx].value === value && + (!predicate || predicate(path)) + ) { acc.push(path); }