From 66c8ba6842fc6b0b8abfa4c3cfb18db8928b6bdc Mon Sep 17 00:00:00 2001 From: Aidan Cunniffe Date: Mon, 16 Oct 2017 12:45:07 -0400 Subject: [PATCH 1/2] [changed] isOpen function treats null or undefined prop as not being set. some users may want to override isOpen and use the default behavior and logic. JSX does not support conditional setting of props so null is often treated as not set at all. --- lib/Autocomplete.js | 3 ++- lib/__tests__/Autocomplete-test.js | 8 +++++++- 2 files changed, 9 insertions(+), 2 deletions(-) mode change 100644 => 100755 lib/Autocomplete.js mode change 100644 => 100755 lib/__tests__/Autocomplete-test.js diff --git a/lib/Autocomplete.js b/lib/Autocomplete.js old mode 100644 new mode 100755 index 202389d8..1d47b1f1 --- a/lib/Autocomplete.js +++ b/lib/Autocomplete.js @@ -525,7 +525,8 @@ class Autocomplete extends React.Component { } isOpen() { - return 'open' in this.props ? this.props.open : this.state.isOpen + if ('open' in this.props && this.props.open !== undefined && this.props.open !== null) return this.props.open + else return this.state.isOpen } render() { diff --git a/lib/__tests__/Autocomplete-test.js b/lib/__tests__/Autocomplete-test.js old mode 100644 new mode 100755 index 7ad9f759..f0611fa3 --- a/lib/__tests__/Autocomplete-test.js +++ b/lib/__tests__/Autocomplete-test.js @@ -148,7 +148,7 @@ describe('Autocomplete acceptance tests', () => { expect(tree.state('highlightedIndex')).toEqual(0) }) - it('should display menu based on `props.open` when provided', () => { + it('should display menu based on `props.open` when provided with bool', () => { const tree = mount(AutocompleteComponentJSX({})) expect(tree.state('isOpen')).toBe(false) expect(tree.find('> div').length).toBe(0) @@ -159,6 +159,12 @@ describe('Autocomplete acceptance tests', () => { expect(tree.find('> div').length).toBe(0) tree.setProps({ open: true }) expect(tree.find('> div').length).toBe(1) + tree.setProps({ open: null }) + tree.setState({ isOpen: false }) + expect(tree.find('> div').length).toBe(0) + tree.setProps({ open: undefined }) + tree.setState({ isOpen: false }) + expect(tree.find('> div').length).toBe(0) }) it('should set menu positions on initial render if the menu is visible', () => { From d5c282e8d3b49cfdc8c8d425adcb5e3a8f92a03a Mon Sep 17 00:00:00 2001 From: Aidan Cunniffe Date: Mon, 16 Oct 2017 15:46:56 -0400 Subject: [PATCH 2/2] Formatting fixes --- lib/Autocomplete.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/Autocomplete.js b/lib/Autocomplete.js index 1d47b1f1..49aad59d 100755 --- a/lib/Autocomplete.js +++ b/lib/Autocomplete.js @@ -525,8 +525,8 @@ class Autocomplete extends React.Component { } isOpen() { - if ('open' in this.props && this.props.open !== undefined && this.props.open !== null) return this.props.open - else return this.state.isOpen + if ('open' in this.props && this.props.open !== undefined && this.props.open !== null) return this.props.open + else return this.state.isOpen } render() {