Как передать значение ввода в следующем представлении модального в каркасе слабины? - PullRequest
0 голосов
/ 05 февраля 2020

Я создаю Slack API, используя болт (на глюк). Я новичок в этом, поэтому не уверен, как реализовать эту конкретную идею.

Используя команду sla sh, я открываю модальный список, в котором перечислены три радиовхода и имеется кнопка действия, которая будет использовать клиент. views.update для представления многострочного ввода.

Я бы хотел, чтобы выбранная опция была начальным значением многострочного кода.

// this is required: github.com/slackapi/bolt

app.command("/slashcommand", async ({ ack, payload, context }) => {
  // Acknowledge the command request
  ack();

  try {
    const result = app.client.views.open({
      token: context.botToken,
      // Pass a valid trigger_id within 3 seconds of receiving it
      trigger_id: payload.trigger_id,
      // View payload
      view: {
        type: "modal",
        callback_id: 'modal_1',
        title: {
          type: "plain_text",
          text: "Initiate Feedback",
          emoji: true
        }, /*
        submit: {
          type: "plain_text",
          text: "Submit",
          emoji: true
        }, */
        close: {
          type: "plain_text",
          text: "Cancel",
          emoji: true
        },
        blocks: [
          {
            type: "context",
            elements: [
              {
                type: "mrkdwn",
                text:
                  "Modal first view"
              }
            ]
          },
          {
            type: "divider"
          },
          {
            type: "section",
            block_id: 'radio_block',
            text: {
              type: "mrkdwn",
              text: "Select from one of the following options:"
            },
            accessory: {
              type: "radio_buttons",
              action_id: 'radio_input',
              initial_option: {
                text: {
                  type: "plain_text",
                  text: "One"
                },
                value: "one",
                description: {
                  type: "plain_text",
                  text: "describe one"
                }
              },
              options: [
                {
                  text: {
                    type: "plain_text",
                    text: "One"
                  },
                  value: "one",
                  description: {
                    type: "plain_text",
                    text: "describe one"
                  }
                },
                {
                  text: {
                    type: "plain_text",
                    text: "Two"
                  },
                  value: "two",
                  description: {
                    type: "plain_text",
                    text: "describe two"
                  }
                },
                {
                  text: {
                    type: "plain_text",
                    text: "Three"
                  },
                  value: "three",
                  description: {
                    type: "plain_text",
                    text: "describe three"
                  }
                }
              ]
            }
          },
          {
            type: "actions",
            elements: [
              {
                type: "button",
                text: {
                  type: "plain_text",
                  text: "Next",
                  emoji: true
                },
                action_id: "next_1"
              }
            ]
          }
        ]
      }
    });
    console.log(result);
  } catch (error) {
    console.error(error);
  }
});

// Listen for a button invocation with action_id `next_1` (assume it's inside of a modal)
app.action("next_1", async ({ ack, body, context }) => {

  // VALUE FROM RADIO INPUT
  // const val = Radio input value;


  // Acknowledge the button request
  ack();

  try {
    const result = app.client.views.update({
      token: context.botToken,
      // Pass the view_id
      view_id: body.view.id,
      // View payload with updated blocks
      view: {
        type: "modal",
        // View identifier
        callback_id: 'feed_1',
        title: {
          type: "plain_text",
          text: "Share Feedback: message"
        },
        blocks: [
          {
            type: "section",
            text: {
              type: "plain_text",
              text: 'You choose '
            }
          },
          {
            type: "input",
            element: {
              type: "plain_text_input",
              // HERE IS WHERE THE RADIO OPTION GOES
              initial_value: `One `,
              multiline: true
            },
            label: {
              type: "plain_text",
              text: "Message",
              emoji: true
            }
          }
        ],
        submit: {
          type: "plain_text",
          text: "Submit"
        }
      }
    });
    console.log(result);
  } catch (error) {
    console.error(error);
  }
});

1 Ответ

0 голосов
/ 11 февраля 2020

Хорошо, наконец-то это выяснилось! 1) убедитесь, что ваши радио кнопки не находятся ни в каких блоках ввода! 2) выведите возвращенную полезную нагрузку в вашем действии, используя body.actions

, как только вы увидите, что вы возвращаете, будет легче нацелиться на это значение.

'' '

app.action("next_1", async ({ ack, body, context }) => {

// Result of option selected
    const val = JSON.stringify(body['actions'][0]);
// see the values
    console.log(val);
// Acknowledge the button request
    ack();

});

'' '

Дополнительная информация: https://api.slack.com/reference/interaction-payloads/actions

...