diff --git a/src/autocomplete/RoomProvider.js b/src/autocomplete/RoomProvider.js index 7f0e8f47d2..1934f572fb 100644 --- a/src/autocomplete/RoomProvider.js +++ b/src/autocomplete/RoomProvider.js @@ -44,7 +44,7 @@ export default class RoomProvider extends AutocompleteProvider { ), range, }; - }).slice(0, 4); + }).filter(completion => !!completion.completion && completion.completion.length > 0).slice(0, 4); } return completions; } diff --git a/src/components/views/rooms/Autocomplete.js b/src/components/views/rooms/Autocomplete.js index 278405c743..8a32883404 100644 --- a/src/components/views/rooms/Autocomplete.js +++ b/src/components/views/rooms/Autocomplete.js @@ -5,6 +5,7 @@ import flatMap from 'lodash/flatMap'; import isEqual from 'lodash/isEqual'; import sdk from '../../../index'; import type {Completion, SelectionRange} from '../../../autocomplete/Autocompleter'; +import Q from 'q'; import {getCompletions} from '../../../autocomplete/Autocompleter'; @@ -140,12 +141,15 @@ export default class Autocomplete extends React.Component { } forceComplete() { + const done = Q.defer(); this.setState({ forceComplete: true, }, () => { - this.complete(this.props.query, this.props.selection); - setTimeout(() => this.onDownArrow(), 50); // FIXME HACK + this.complete(this.props.query, this.props.selection).then(() => { + done.resolve(); + }); }); + return done.promise; } /** called from MessageComposerInput diff --git a/src/components/views/rooms/MessageComposerInput.js b/src/components/views/rooms/MessageComposerInput.js index be13cca549..c6c0ce9621 100644 --- a/src/components/views/rooms/MessageComposerInput.js +++ b/src/components/views/rooms/MessageComposerInput.js @@ -595,7 +595,9 @@ export default class MessageComposerInput extends React.Component { e.preventDefault(); // we *never* want tab's default to happen, but we do want up/down sometimes const didTab = await (e.shiftKey ? this.onUpArrow : this.onDownArrow)(e); if (!didTab && this.autocomplete) { - this.autocomplete.forceComplete(); + this.autocomplete.forceComplete().then(() => { + this.onDownArrow(e); + }); } }