diff options
-rw-r--r-- | api/command_search_test.go | 13 | ||||
-rw-r--r-- | app/command_search.go | 42 | ||||
-rw-r--r-- | i18n/en.json | 16 | ||||
-rw-r--r-- | webapp/actions/channel_actions.jsx | 4 |
4 files changed, 75 insertions, 0 deletions
diff --git a/api/command_search_test.go b/api/command_search_test.go new file mode 100644 index 000000000..1ea2e6f6b --- /dev/null +++ b/api/command_search_test.go @@ -0,0 +1,13 @@ +// Copyright (c) 2017-present Mattermost, Inc. All Rights Reserved. +// See License.txt for license information. + +package api + +import ( + "testing" +) + +func TestSearchCommand(t *testing.T) { + th := Setup().InitBasic() + th.BasicClient.Must(th.BasicClient.Command(th.BasicChannel.Id, "/search")) +} diff --git a/app/command_search.go b/app/command_search.go new file mode 100644 index 000000000..2e35dccf4 --- /dev/null +++ b/app/command_search.go @@ -0,0 +1,42 @@ +// Copyright (c) 2017-present Mattermost, Inc. All Rights Reserved. +// See License.txt for license information. + +package app + +import ( + "github.com/mattermost/platform/model" + goi18n "github.com/nicksnyder/go-i18n/i18n" +) + +type SearchProvider struct { +} + +const ( + CMD_SEARCH = "search" +) + +func init() { + RegisterCommandProvider(&SearchProvider{}) +} + +func (search *SearchProvider) GetTrigger() string { + return CMD_SEARCH +} + +func (search *SearchProvider) GetCommand(T goi18n.TranslateFunc) *model.Command { + return &model.Command{ + Trigger: CMD_SEARCH, + AutoComplete: true, + AutoCompleteDesc: T("api.command_search.desc"), + AutoCompleteHint: T("api.command_search.hint"), + DisplayName: T("api.command_search.name"), + } +} + +func (search *SearchProvider) DoCommand(args *model.CommandArgs, message string) *model.CommandResponse { + // This command is handled client-side and shouldn't hit the server. + return &model.CommandResponse{ + Text: args.T("api.command_search.unsupported.app_error"), + ResponseType: model.COMMAND_RESPONSE_TYPE_EPHEMERAL, + } +} diff --git a/i18n/en.json b/i18n/en.json index 640ed93ea..2e2efc52d 100644 --- a/i18n/en.json +++ b/i18n/en.json @@ -700,6 +700,22 @@ "translation": "open" }, { + "id": "api.command_search.desc", + "translation": "Search text in messages" + }, + { + "id": "api.command_search.hint", + "translation": "[text]" + }, + { + "id": "api.command_search.name", + "translation": "search" + }, + { + "id": "api.command_search.unsupported.app_error", + "translation": "The search command is not supported on your device" + }, + { "id": "api.command_settings.desc", "translation": "Open the Account Settings dialog" }, diff --git a/webapp/actions/channel_actions.jsx b/webapp/actions/channel_actions.jsx index 887aca030..6e529d332 100644 --- a/webapp/actions/channel_actions.jsx +++ b/webapp/actions/channel_actions.jsx @@ -8,6 +8,7 @@ import * as ChannelUtils from 'utils/channel_utils.jsx'; import PreferenceStore from 'stores/preference_store.jsx'; import * as GlobalActions from 'actions/global_actions.jsx'; +import * as PostActions from 'actions/post_actions.jsx'; import {loadProfilesForSidebar, loadNewDMIfNeeded, loadNewGMIfNeeded} from 'actions/user_actions.jsx'; import {trackEvent} from 'actions/diagnostics_actions.jsx'; @@ -57,6 +58,9 @@ export function executeCommand(message, args, success, error) { msg = cmd + msg.substring(cmdLength, msg.length); switch (cmd) { + case '/search': + PostActions.searchForTerm(msg.substring(cmdLength + 1, msg.length)); + return; case '/shortcuts': if (UserAgent.isMobile()) { const err = {message: Utils.localizeMessage('create_post.shortcutsNotSupported', 'Keyboard shortcuts are not supported on your device')}; |