From f1685d5d5ed5f3e30438c613d433c196c29fe0e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A4=BC=E4=B8=8A?= Date: Fri, 11 Mar 2022 23:34:11 +0800 Subject: [PATCH 1/5] feat: fix js error if value not in options --- docs/examples/multiple.tsx | 21 ++++++++++++++------- src/Select.tsx | 2 +- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/docs/examples/multiple.tsx b/docs/examples/multiple.tsx index ca50631a4..9927e0414 100644 --- a/docs/examples/multiple.tsx +++ b/docs/examples/multiple.tsx @@ -5,8 +5,9 @@ import '../../assets/index.less'; const children = []; for (let i = 10; i < 36; i += 1) { + const val = i.toString(36) + i; children.push( - , ); @@ -17,7 +18,12 @@ class Test extends React.Component { useAnim: false, showArrow: false, loading: false, - value: ['a10'], + value: [ + { + label: '默认值', + value: 'value-not-in-options', + }, + ], }; onChange = (value, options) => { @@ -32,22 +38,22 @@ class Test extends React.Component { }; onDeselect = (...args) => { - console.log(args); + console.log('onDeselect', args); }; - useAnim = e => { + useAnim = (e) => { this.setState({ useAnim: e.target.checked, }); }; - showArrow = e => { + showArrow = (e) => { this.setState({ showArrow: e.target.checked, }); }; - loading = e => { + loading = (e) => { this.setState({ loading: e.target.checked, }); @@ -95,8 +101,9 @@ class Test extends React.Component { placeholder="please select" onChange={this.onChange} onFocus={() => console.log('focus')} - onBlur={v => console.log('blur', v)} + onBlur={(v) => console.log('blur', v)} tokenSeparators={[' ', ',']} + labelInValue={true} > {children} diff --git a/src/Select.tsx b/src/Select.tsx index 99e72bfe9..72c33317a 100644 --- a/src/Select.tsx +++ b/src/Select.tsx @@ -450,7 +450,7 @@ const Select = React.forwardRef( ? { label: option?.[mergedFieldNames.label], value: val, - key: option.key ?? val, + key: option?.key ?? val, } : val, injectPropsWithOption(option), From 1882d08f48207ddd52e6616690e009854e50be96 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A4=BC=E4=B8=8A?= Date: Mon, 14 Mar 2022 00:07:22 +0800 Subject: [PATCH 2/5] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E6=B5=8B?= =?UTF-8?q?=E8=AF=95=E7=94=A8=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/examples/multiple.tsx | 21 +++++++-------------- tests/Multiple.test.tsx | 20 ++++++++++++++++++++ 2 files changed, 27 insertions(+), 14 deletions(-) diff --git a/docs/examples/multiple.tsx b/docs/examples/multiple.tsx index 9927e0414..ca50631a4 100644 --- a/docs/examples/multiple.tsx +++ b/docs/examples/multiple.tsx @@ -5,9 +5,8 @@ import '../../assets/index.less'; const children = []; for (let i = 10; i < 36; i += 1) { - const val = i.toString(36) + i; children.push( - , ); @@ -18,12 +17,7 @@ class Test extends React.Component { useAnim: false, showArrow: false, loading: false, - value: [ - { - label: '默认值', - value: 'value-not-in-options', - }, - ], + value: ['a10'], }; onChange = (value, options) => { @@ -38,22 +32,22 @@ class Test extends React.Component { }; onDeselect = (...args) => { - console.log('onDeselect', args); + console.log(args); }; - useAnim = (e) => { + useAnim = e => { this.setState({ useAnim: e.target.checked, }); }; - showArrow = (e) => { + showArrow = e => { this.setState({ showArrow: e.target.checked, }); }; - loading = (e) => { + loading = e => { this.setState({ loading: e.target.checked, }); @@ -101,9 +95,8 @@ class Test extends React.Component { placeholder="please select" onChange={this.onChange} onFocus={() => console.log('focus')} - onBlur={(v) => console.log('blur', v)} + onBlur={v => console.log('blur', v)} tokenSeparators={[' ', ',']} - labelInValue={true} > {children} diff --git a/tests/Multiple.test.tsx b/tests/Multiple.test.tsx index a5e6f6b6e..9d5d1017a 100644 --- a/tests/Multiple.test.tsx +++ b/tests/Multiple.test.tsx @@ -475,6 +475,26 @@ describe('Select.Multiple', () => { expect(wrapper.exists('.rc-select-selection-item-remove')).toBeFalsy(); }); + it('do not crash if value not in options when removing option', () => { + const wrapper = mount( + , + ); + + removeSelection(wrapper, 0); + }); + describe('optionLabelProp', () => { it('basic', () => { const wrapper = mount( From 1280d236c7d180014fe0aa3b7df7c716d8c58ed5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A4=BC=E4=B8=8A?= Date: Mon, 14 Mar 2022 00:15:49 +0800 Subject: [PATCH 3/5] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E6=B5=8B?= =?UTF-8?q?=E8=AF=95=E7=94=A8=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/Multiple.test.tsx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/Multiple.test.tsx b/tests/Multiple.test.tsx index 9d5d1017a..15a32aba3 100644 --- a/tests/Multiple.test.tsx +++ b/tests/Multiple.test.tsx @@ -493,6 +493,8 @@ describe('Select.Multiple', () => { ); removeSelection(wrapper, 0); + expectOpen(wrapper, false); + expect(wrapper.find('Selector').props().values.length).toEqual(0); }); describe('optionLabelProp', () => { From ff05fb98c5133568c0e5538f054ea243af2dbfaf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A4=BC=E4=B8=8A?= Date: Mon, 14 Mar 2022 09:38:34 +0800 Subject: [PATCH 4/5] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E6=B5=8B?= =?UTF-8?q?=E8=AF=95=E7=94=A8=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Select.tsx | 2 +- tests/Multiple.test.tsx | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/Select.tsx b/src/Select.tsx index 72c33317a..99e72bfe9 100644 --- a/src/Select.tsx +++ b/src/Select.tsx @@ -450,7 +450,7 @@ const Select = React.forwardRef( ? { label: option?.[mergedFieldNames.label], value: val, - key: option?.key ?? val, + key: option.key ?? val, } : val, injectPropsWithOption(option), diff --git a/tests/Multiple.test.tsx b/tests/Multiple.test.tsx index 15a32aba3..f4ccee4b0 100644 --- a/tests/Multiple.test.tsx +++ b/tests/Multiple.test.tsx @@ -491,9 +491,8 @@ describe('Select.Multiple', () => { , ); - + expect(findSelection(wrapper, 0).text()).toEqual('value not in options'); removeSelection(wrapper, 0); - expectOpen(wrapper, false); expect(wrapper.find('Selector').props().values.length).toEqual(0); }); From 26a68ffcc9c7c779d6dbc0cd95fb3644c13f865e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A4=BC=E4=B8=8A?= Date: Mon, 14 Mar 2022 09:39:42 +0800 Subject: [PATCH 5/5] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E6=B5=8B?= =?UTF-8?q?=E8=AF=95=E7=94=A8=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Select.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Select.tsx b/src/Select.tsx index 99e72bfe9..72c33317a 100644 --- a/src/Select.tsx +++ b/src/Select.tsx @@ -450,7 +450,7 @@ const Select = React.forwardRef( ? { label: option?.[mergedFieldNames.label], value: val, - key: option.key ?? val, + key: option?.key ?? val, } : val, injectPropsWithOption(option),