Fix auto-complete in slash command for shared channel invite (#25524)

* fix auto-complete in slash command for shared channel invite

* more providers not implementing AutocompleteDynamicArgProvider

---------

Co-authored-by: Mattermost Build <build@mattermost.com>
This commit is contained in:
Doug Lauder 2023-11-25 03:21:06 -05:00 committed by GitHub
parent de99b40e87
commit af7bc8a4a9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 15 additions and 6 deletions

View File

@ -18,7 +18,7 @@ import (
// AutocompleteDynamicArgProvider dynamically provides auto-completion args for built-in commands.
type AutocompleteDynamicArgProvider interface {
GetAutoCompleteListItems(a *App, commandArgs *model.CommandArgs, arg *model.AutocompleteArg, parsed, toBeParsed string) ([]model.AutocompleteListItem, error)
GetAutoCompleteListItems(c request.CTX, a *App, commandArgs *model.CommandArgs, arg *model.AutocompleteArg, parsed, toBeParsed string) ([]model.AutocompleteListItem, error)
}
// GetSuggestions returns suggestions for user input.
@ -243,7 +243,7 @@ func (a *App) getDynamicListArgument(c request.CTX, commandArgs *model.CommandAr
dynamicArg := arg.Data.(*model.AutocompleteDynamicListArg)
if strings.HasPrefix(dynamicArg.FetchURL, "builtin:") {
listItems, err := a.getBuiltinDynamicListArgument(commandArgs, arg, parsed, toBeParsed)
listItems, err := a.getBuiltinDynamicListArgument(c, commandArgs, arg, parsed, toBeParsed)
if err != nil {
a.Log().Error("Can't fetch dynamic list arguments for", mlog.String("url", dynamicArg.FetchURL), mlog.Err(err))
return false, parsed, toBeParsed, []model.AutocompleteSuggestion{}
@ -307,7 +307,7 @@ func parseListItems(items []model.AutocompleteListItem, parsed, toBeParsed strin
return true, parsed + toBeParsed, "", suggestions
}
func (a *App) getBuiltinDynamicListArgument(commandArgs *model.CommandArgs, arg *model.AutocompleteArg, parsed, toBeParsed string) ([]model.AutocompleteListItem, error) {
func (a *App) getBuiltinDynamicListArgument(c request.CTX, commandArgs *model.CommandArgs, arg *model.AutocompleteArg, parsed, toBeParsed string) ([]model.AutocompleteListItem, error) {
dynamicArg := arg.Data.(*model.AutocompleteDynamicListArg)
arr := strings.Split(dynamicArg.FetchURL, ":")
if len(arr) < 2 {
@ -325,5 +325,5 @@ func (a *App) getBuiltinDynamicListArgument(commandArgs *model.CommandArgs, arg
return nil, fmt.Errorf("auto-completion not available for built-in command %s", cmdName)
}
return dp.GetAutoCompleteListItems(a, commandArgs, arg, parsed, toBeParsed)
return dp.GetAutoCompleteListItems(c, a, commandArgs, arg, parsed, toBeParsed)
}

View File

@ -665,7 +665,7 @@ func (p *testCommandProvider) DoCommand(a *App, c request.CTX, args *model.Comma
}
}
func (p *testCommandProvider) GetAutoCompleteListItems(a *App, commandArgs *model.CommandArgs, arg *model.AutocompleteArg, parsed, toBeParsed string) ([]model.AutocompleteListItem, error) {
func (p *testCommandProvider) GetAutoCompleteListItems(c request.CTX, a *App, commandArgs *model.CommandArgs, arg *model.AutocompleteArg, parsed, toBeParsed string) ([]model.AutocompleteListItem, error) {
if arg.Name == "dynaArg" {
return []model.AutocompleteListItem{
{Item: "item1", Hint: "this is hint 1", HelpText: "This is help text 1."},
@ -675,3 +675,6 @@ func (p *testCommandProvider) GetAutoCompleteListItems(a *App, commandArgs *mode
}
return nil, fmt.Errorf("%s not a dynamic argument", arg.Name)
}
// ensure testCommandProvider implements AutocompleteDynamicArgProvider
var _ AutocompleteDynamicArgProvider = (*testCommandProvider)(nil)

View File

@ -22,6 +22,9 @@ const (
type RemoteProvider struct {
}
// ensure RemoteProvider implements AutocompleteDynamicArgProvider
var _ app.AutocompleteDynamicArgProvider = (*RemoteProvider)(nil)
const (
CommandTriggerRemote = "secure-connection"
)
@ -93,7 +96,7 @@ func (rp *RemoteProvider) DoCommand(a *app.App, c request.CTX, args *model.Comma
return responsef(args.T("api.command_remote.unknown_action", map[string]any{"Action": action}))
}
func (rp *RemoteProvider) GetAutoCompleteListItems(a *app.App, commandArgs *model.CommandArgs, arg *model.AutocompleteArg, parsed, toBeParsed string) ([]model.AutocompleteListItem, error) {
func (rp *RemoteProvider) GetAutoCompleteListItems(c request.CTX, a *app.App, commandArgs *model.CommandArgs, arg *model.AutocompleteArg, parsed, toBeParsed string) ([]model.AutocompleteListItem, error) {
if !a.HasPermissionTo(commandArgs.UserId, model.PermissionManageSecureConnections) {
return nil, errors.New("You require `manage_secure_connections` permission to manage secure connections.")
}

View File

@ -17,6 +17,9 @@ import (
type ShareProvider struct {
}
// ensure ShareProvide implements AutocompleteDynamicArgProvider
var _ app.AutocompleteDynamicArgProvider = (*ShareProvider)(nil)
const (
CommandTriggerShare = "share-channel"
AvailableShareActions = "invite, uninvite, unshare, status"