diff --git a/src/components/views/dialogs/DevtoolsDialog.js b/src/components/views/dialogs/DevtoolsDialog.js index 1566302e42..3078944b62 100644 --- a/src/components/views/dialogs/DevtoolsDialog.js +++ b/src/components/views/dialogs/DevtoolsDialog.js @@ -242,6 +242,9 @@ class SendAccountData extends GenericEditor { } } +const INITIAL_LOAD_TILES = 20; +const LOAD_TILES_STEP_SIZE = 50; + class FilteredList extends React.Component { static propTypes = { children: PropTypes.any, @@ -249,31 +252,65 @@ class FilteredList extends React.Component { onChange: PropTypes.func, }; + static filterChildren(children, query) { + if (!query) return children; + const lcQuery = query.toLowerCase(); + return children.filter((child) => child.key.toLowerCase().includes(lcQuery)); + } + constructor(props, context) { super(props, context); - this.onQuery = this.onQuery.bind(this); + + this.state = { + filteredChildren: FilteredList.filterChildren(this.props.children, this.props.query), + truncateAt: INITIAL_LOAD_TILES, + }; } - onQuery(ev) { + componentWillReceiveProps(nextProps) { + if (this.props.children === nextProps.children && this.props.query === nextProps.query) return; + this.setState({ + filteredChildren: FilteredList.filterChildren(nextProps.children, nextProps.query), + truncateAt: INITIAL_LOAD_TILES, + }); + } + + showAll = () => { + this.setState({ + truncateAt: this.state.truncateAt + LOAD_TILES_STEP_SIZE, + }); + }; + + createOverflowElement = (overflowCount: number, totalCount: number) => { + return ; + }; + + onQuery = (ev) => { if (this.props.onChange) this.props.onChange(ev.target.value); - } + }; - filterChildren() { - if (this.props.query) { - const lowerQuery = this.props.query.toLowerCase(); - return this.props.children.filter((child) => child.key.toLowerCase().includes(lowerQuery)); - } - return this.props.children; - } + getChildren = (start: number, end: number) => { + return this.state.filteredChildren.slice(start, end); + }; + + getChildCount = (): number => { + return this.state.filteredChildren.length; + }; render() { + const TruncatedList = sdk.getComponent("elements.TruncatedList"); return