diff --git a/src/components/multi_select_state.js b/src/components/multi_select_state.js index 5b8d513..d8206b3 100644 --- a/src/components/multi_select_state.js +++ b/src/components/multi_select_state.js @@ -49,7 +49,10 @@ const withMultiSelectState = WrappedComponent => componentWillReceiveProps(nextProps) { const { searchValue, searchSelectedItemsValue } = this.props; if (this.props.selectedItems !== nextProps.selectedItems) { - this.setState({ selectedItems: nextProps.selectedItems }); + this.setState({ + selectedItems: nextProps.selectedItems, + filteredSelectedItems: nextProps.selectedItems + }); } if (this.props.items !== nextProps.items) { const { items } = nextProps; @@ -101,7 +104,6 @@ const withMultiSelectState = WrappedComponent => componentDidMount() { window.addEventListener("keyup", this.onKeyUp); } - componentWillUnmount() { window.removeEventListener("keyup", this.onKeyUp, false); } diff --git a/stories/multi-select.stories.js b/stories/multi-select.stories.js index 9d67544..458db74 100644 --- a/stories/multi-select.stories.js +++ b/stories/multi-select.stories.js @@ -357,4 +357,50 @@ storiesOf("React Multi Select", module) /> ); }) + ) + .add( + "As a controlled component", + withReadme(Readme, () => { + class SelectedItemsController extends React.Component { + SINGLE_ITEM = [{ id: 1, label: "Item 1" }]; + MULTI_ITEMS = [ + { id: 2, label: "Item 2" }, + { id: 4, label: "Item 4" } + ] + + constructor(props) { + super(props); + this.state = { + selectedItems: this.SINGLE_ITEM, + }; + } + + render() { + return ( + + { + this.setState({ + selectedItems: this.state.selectedItems.length > 1 ? this.SINGLE_ITEM : this.MULTI_ITEMS + }); + }} + /> + + + ); + } + } + + return ; + }) );