PLT-6431 Prevented autocompleting while suggestions are being received (#6328)

Этот коммит содержится в:
Harrison Healey
2017-05-04 14:54:50 -04:00
коммит произвёл Christopher Speller
родитель 72351c8ef8
Коммит 44a8f76d99
7 изменённых файлов: 49 добавлений и 14 удалений

Просмотреть файл

@@ -113,7 +113,7 @@ export default class AtMentionProvider extends Provider {
const prefix = captured[1]; const prefix = captured[1];
this.startNewRequest(prefix); this.startNewRequest(suggestionId, prefix);
autocompleteUsersInChannel( autocompleteUsersInChannel(
prefix, prefix,

Просмотреть файл

@@ -75,7 +75,7 @@ export default class ChannelMentionProvider extends Provider {
const prefix = captured[3]; const prefix = captured[3];
this.startNewRequest(prefix); this.startNewRequest(suggestionId, prefix);
autocompleteChannels( autocompleteChannels(
prefix, prefix,

Просмотреть файл

@@ -1,6 +1,8 @@
// Copyright (c) 2016-present Mattermost, Inc. All Rights Reserved. // Copyright (c) 2016-present Mattermost, Inc. All Rights Reserved.
// See License.txt for license information. // See License.txt for license information.
import SuggestionStore from 'stores/suggestion_store.jsx';
export default class Provider { export default class Provider {
constructor() { constructor() {
this.latestPrefix = ''; this.latestPrefix = '';
@@ -11,9 +13,12 @@ export default class Provider {
// NO-OP for inherited classes to override // NO-OP for inherited classes to override
} }
startNewRequest(prefix) { startNewRequest(suggestionId, prefix) {
this.latestPrefix = prefix; this.latestPrefix = prefix;
this.latestComplete = false; this.latestComplete = false;
// Don't use the dispatcher here since this is only called while handling an event
SuggestionStore.setSuggestionsPending(suggestionId, true);
} }
shouldCancelDispatch(prefix) { shouldCancelDispatch(prefix) {

Просмотреть файл

@@ -40,7 +40,7 @@ export default class SearchChannelProvider extends Provider {
if (captured) { if (captured) {
const channelPrefix = captured[1]; const channelPrefix = captured[1];
this.startNewRequest(channelPrefix); this.startNewRequest(suggestionId, channelPrefix);
autocompleteChannels( autocompleteChannels(
channelPrefix, channelPrefix,

Просмотреть файл

@@ -63,7 +63,7 @@ export default class SearchUserProvider extends Provider {
if (captured) { if (captured) {
const usernamePrefix = captured[1]; const usernamePrefix = captured[1];
this.startNewRequest(usernamePrefix); this.startNewRequest(suggestionId, usernamePrefix);
autocompleteUsersInTeam( autocompleteUsersInTeam(
usernamePrefix, usernamePrefix,

Просмотреть файл

@@ -60,7 +60,7 @@ class SwitchChannelSuggestion extends Suggestion {
export default class SwitchChannelProvider extends Provider { export default class SwitchChannelProvider extends Provider {
handlePretextChanged(suggestionId, channelPrefix) { handlePretextChanged(suggestionId, channelPrefix) {
if (channelPrefix) { if (channelPrefix) {
this.startNewRequest(channelPrefix); this.startNewRequest(suggestionId, channelPrefix);
const allChannels = ChannelStore.getAll(); const allChannels = ChannelStore.getAll();
const channels = []; const channels = [];

Просмотреть файл

@@ -222,6 +222,31 @@ class SuggestionStore extends EventEmitter {
return pretext.endsWith(matchedPretext); return pretext.endsWith(matchedPretext);
} }
setSuggestionsPending(id, pending) {
this.suggestions.get(id).suggestionsPending = pending;
}
areSuggestionsPending(id) {
return this.suggestions.get(id).suggestionsPending;
}
setCompletePending(id, pending) {
this.suggestions.get(id).completePending = pending;
}
isCompletePending(id) {
return this.suggestions.get(id).completePending;
}
completeWord(id, term = '', matchedPretext = '') {
this.emitCompleteWord(id, term || this.getSelection(id), matchedPretext || this.getSelectedMatchedPretext(id));
this.setPretext(id, '');
this.clearSuggestions(id);
this.clearSelection(id);
this.emitSuggestionsChanged(id);
}
handleEventPayload(payload) { handleEventPayload(payload) {
const {type, id, ...other} = payload.action; const {type, id, ...other} = payload.action;
@@ -248,9 +273,15 @@ class SuggestionStore extends EventEmitter {
this.clearSuggestions(id); this.clearSuggestions(id);
this.addSuggestions(id, other.terms, other.items, other.component, other.matchedPretext); this.addSuggestions(id, other.terms, other.items, other.component, other.matchedPretext);
this.ensureSelectionExists(id); this.ensureSelectionExists(id);
this.emitSuggestionsChanged(id);
this.setSuggestionsPending(id, false);
if (this.isCompletePending(id)) {
this.completeWord(id);
} else {
this.emitSuggestionsChanged(id);
}
break; break;
case ActionTypes.SUGGESTION_CLEAR_SUGGESTIONS: case ActionTypes.SUGGESTION_CLEAR_SUGGESTIONS:
this.setPretext(id, ''); this.setPretext(id, '');
@@ -267,12 +298,11 @@ class SuggestionStore extends EventEmitter {
this.emitSuggestionsChanged(id); this.emitSuggestionsChanged(id);
break; break;
case ActionTypes.SUGGESTION_COMPLETE_WORD: case ActionTypes.SUGGESTION_COMPLETE_WORD:
this.emitCompleteWord(id, other.term || this.getSelection(id), other.matchedPretext || this.getSelectedMatchedPretext(id)); if (this.areSuggestionsPending(id)) {
this.setCompletePending(id, true);
this.setPretext(id, ''); } else {
this.clearSuggestions(id); this.completeWord(id, other.term, other.matchedPretext);
this.clearSelection(id); }
this.emitSuggestionsChanged(id);
break; break;
} }
} }