diff --git a/openbis_ng_ui/src/js/components/common/browser/BrowserController.js b/openbis_ng_ui/src/js/components/common/browser/BrowserController.js index cd761932f46140174224d31fe6650315e1b53e7d..88547a584cbb27e7233aa5f7be19b7f607a0b996 100644 --- a/openbis_ng_ui/src/js/components/common/browser/BrowserController.js +++ b/openbis_ng_ui/src/js/components/common/browser/BrowserController.js @@ -33,6 +33,7 @@ export default class BrowserController { context.initState({ loaded: false, filter: '', + usedFilter: '', nodes: [], selectedId: null, selectedObject: null, @@ -43,12 +44,8 @@ export default class BrowserController { load() { return this.doLoadNodes().then(loadedNodes => { - const { - filter, - nodes, - selectedId, - selectedObject - } = this.context.getState() + const { filter, nodes, selectedId, selectedObject } = + this.context.getState() let newNodes = this._createNodes(loadedNodes) newNodes = this._filterNodes(newNodes, filter) @@ -64,6 +61,7 @@ export default class BrowserController { this.context.setState({ loaded: true, + usedFilter: filter, nodes: newNodes }) }) @@ -120,35 +118,42 @@ export default class BrowserController { } filterChange(newFilter) { - const { - filter, - nodes, - selectedId, - selectedObject - } = this.context.getState() - - let initialNodes = null + this.context.setState({ + filter: newFilter + }) - if (newFilter.startsWith(filter)) { - initialNodes = nodes - } else { - initialNodes = this.loadedNodes + if (this.filterTimerId) { + clearTimeout(this.filterTimerId) + this.filterTimerId = null } - let newNodes = this._createNodes(initialNodes) - newNodes = this._filterNodes(newNodes, newFilter) - newNodes = this._setNodesExpanded( - newNodes, - this._getParentNodes(newNodes), - true - ) - newNodes = this._setNodesSelected(newNodes, selectedId, selectedObject) - this._sortNodes(newNodes) + this.filterTimerId = setTimeout(async () => { + const { filter, usedFilter, nodes, selectedId, selectedObject } = + this.context.getState() - this.context.setState({ - filter: newFilter, - nodes: newNodes - }) + let initialNodes = null + + if (filter.startsWith(usedFilter)) { + initialNodes = nodes + } else { + initialNodes = this.loadedNodes + } + + let newNodes = this._createNodes(initialNodes) + newNodes = this._filterNodes(newNodes, newFilter) + newNodes = this._setNodesExpanded( + newNodes, + this._getParentNodes(newNodes), + true + ) + newNodes = this._setNodesSelected(newNodes, selectedId, selectedObject) + this._sortNodes(newNodes) + + this.context.setState({ + usedFilter: filter, + nodes: newNodes + }) + }, 200) } nodeExpand(nodeId) {