summaryrefslogtreecommitdiffstats
path: root/web/react/components/suggestion/command_provider.jsx
diff options
context:
space:
mode:
Diffstat (limited to 'web/react/components/suggestion/command_provider.jsx')
-rw-r--r--web/react/components/suggestion/command_provider.jsx68
1 files changed, 68 insertions, 0 deletions
diff --git a/web/react/components/suggestion/command_provider.jsx b/web/react/components/suggestion/command_provider.jsx
new file mode 100644
index 000000000..34de3bfd1
--- /dev/null
+++ b/web/react/components/suggestion/command_provider.jsx
@@ -0,0 +1,68 @@
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
+// See License.txt for license information.
+
+import AppDispatcher from '../../dispatcher/app_dispatcher.jsx';
+import * as Client from '../../utils/client.jsx';
+import Constants from '../../utils/constants.jsx';
+import SuggestionStore from '../../stores/suggestion_store.jsx';
+
+class CommandSuggestion extends React.Component {
+ render() {
+ const {item, isSelection, onClick} = this.props;
+
+ let className = 'command-name';
+ if (isSelection) {
+ className += ' suggestion--selected';
+ }
+
+ return (
+ <div
+ className={className}
+ onClick={onClick}
+ >
+ <div className='command__title'>
+ <string>{item.suggestion}</string>
+ </div>
+ <div className='command__desc'>
+ {item.description}
+ </div>
+ </div>
+ );
+ }
+}
+
+CommandSuggestion.propTypes = {
+ item: React.PropTypes.object.isRequired,
+ isSelection: React.PropTypes.bool,
+ onClick: React.PropTypes.func
+};
+
+export default class CommandProvider {
+ handlePretextChanged(suggestionId, pretext) {
+ if (pretext.startsWith('/')) {
+ SuggestionStore.setMatchedPretext(suggestionId, pretext);
+
+ Client.executeCommand(
+ '',
+ pretext,
+ true,
+ (data) => {
+ this.handleCommandsReceived(suggestionId, pretext, data.suggestions);
+ }
+ );
+ }
+ }
+
+ handleCommandsReceived(suggestionId, matchedPretext, commandSuggestions) {
+ const terms = commandSuggestions.map(({suggestion}) => suggestion);
+
+ AppDispatcher.handleServerAction({
+ type: Constants.ActionTypes.SUGGESTION_RECEIVED_SUGGESTIONS,
+ id: suggestionId,
+ matchedPretext,
+ terms,
+ items: commandSuggestions,
+ component: CommandSuggestion
+ });
+ }
+}