forked from jshiffer/matterbridge
99 lines
2.6 KiB
Go
99 lines
2.6 KiB
Go
package slack
|
|
|
|
import (
|
|
"context"
|
|
"encoding/json"
|
|
)
|
|
|
|
const VTWorkflowStep ViewType = "workflow_step"
|
|
|
|
type (
|
|
ConfigurationModalRequest struct {
|
|
ModalViewRequest
|
|
}
|
|
|
|
WorkflowStepCompleteResponse struct {
|
|
WorkflowStepEditID string `json:"workflow_step_edit_id"`
|
|
Inputs *WorkflowStepInputs `json:"inputs,omitempty"`
|
|
Outputs *[]WorkflowStepOutput `json:"outputs,omitempty"`
|
|
}
|
|
|
|
WorkflowStepInputElement struct {
|
|
Value string `json:"value"`
|
|
SkipVariableReplacement bool `json:"skip_variable_replacement"`
|
|
}
|
|
|
|
WorkflowStepInputs map[string]WorkflowStepInputElement
|
|
|
|
WorkflowStepOutput struct {
|
|
Name string `json:"name"`
|
|
Type string `json:"type"`
|
|
Label string `json:"label"`
|
|
}
|
|
)
|
|
|
|
func NewConfigurationModalRequest(blocks Blocks, privateMetaData string, externalID string) *ConfigurationModalRequest {
|
|
return &ConfigurationModalRequest{
|
|
ModalViewRequest{
|
|
Type: VTWorkflowStep,
|
|
Title: nil, // slack configuration modal must not have a title!
|
|
Blocks: blocks,
|
|
PrivateMetadata: privateMetaData,
|
|
ExternalID: externalID,
|
|
},
|
|
}
|
|
}
|
|
|
|
func (api *Client) SaveWorkflowStepConfiguration(workflowStepEditID string, inputs *WorkflowStepInputs, outputs *[]WorkflowStepOutput) error {
|
|
return api.SaveWorkflowStepConfigurationContext(context.Background(), workflowStepEditID, inputs, outputs)
|
|
}
|
|
|
|
func (api *Client) SaveWorkflowStepConfigurationContext(ctx context.Context, workflowStepEditID string, inputs *WorkflowStepInputs, outputs *[]WorkflowStepOutput) error {
|
|
// More information: https://api.slack.com/methods/workflows.updateStep
|
|
wscr := WorkflowStepCompleteResponse{
|
|
WorkflowStepEditID: workflowStepEditID,
|
|
Inputs: inputs,
|
|
Outputs: outputs,
|
|
}
|
|
|
|
endpoint := api.endpoint + "workflows.updateStep"
|
|
jsonData, err := json.Marshal(wscr)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
response := &SlackResponse{}
|
|
if err := postJSON(ctx, api.httpclient, endpoint, api.token, jsonData, response, api); err != nil {
|
|
return err
|
|
}
|
|
|
|
if !response.Ok {
|
|
return response.Err()
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func GetInitialOptionFromWorkflowStepInput(selection *SelectBlockElement, inputs *WorkflowStepInputs, options []*OptionBlockObject) (*OptionBlockObject, bool) {
|
|
if len(*inputs) == 0 {
|
|
return &OptionBlockObject{}, false
|
|
}
|
|
if len(options) == 0 {
|
|
return &OptionBlockObject{}, false
|
|
}
|
|
|
|
if val, ok := (*inputs)[selection.ActionID]; ok {
|
|
if val.SkipVariableReplacement {
|
|
return &OptionBlockObject{}, false
|
|
}
|
|
|
|
for _, option := range options {
|
|
if option.Value == val.Value {
|
|
return option, true
|
|
}
|
|
}
|
|
}
|
|
|
|
return &OptionBlockObject{}, false
|
|
}
|