Вопрос
У меня Slack модальный с блоком section
, содержащим элемент ввода. Когда пользователь отправляет мой мод без ввода значения в этот ввод, как мне сообщить об этой ошибке пользователю?
Моя попытка № 1: ответить с ошибкой проверки
Документация Slack описывает, как проверить блоки input
при получении события view_submission
(https://api.slack.com/surfaces/modals/using#displaying_errors). Но если я возвращаю ошибку для блока section
, содержащего static_select
, то Slack не отображает сообщение об ошибке (и при этом он не закрывает модальное окно).
Моя попытка # 2: установить optional
field to false
input
блоки имеют поле optional
, которое можно использовать для проверки. Но static_select
в блоке section
не имеет поля optional
: https://api.slack.com/reference/block-kit/block-elements#select
Моя попытка № 3: использовать input
блоки
Я не могу использовать input
блоки, потому что они не вызывают block_actions
сообщений (задокументировано в https://api.slack.com/surfaces/modals/using#interactions). Мне нужно обновить модальный режим, когда пользователи отвечают на вопросы.
Моя попытка № 4: решение для отчаяния, которое работает
Я мог бы ответить на событие view_submission
с помощью "response_action ":" update " ответ. В этом ответе выведите сообщение об ошибке, подобное этому, над входом с пропущенным значением:
{
"type": "section",
"text": {
"type": "mrkdwn",
"text": "*Please provide a start time:*"
}
}
Мне не нравится это решение, потому что я сомневаюсь, что смогу продублировать приятный UX для обмена сообщениями об ошибках, который Slack предоставляет для input
проверка блока.
Подробности
Вот упрощенная версия параметра view
, который я передаю вызову views.open :
{
"blocks": [
{
"block_id": "start_times",
"type": "section",
"text": {
"type": "plain_text",
"text": "Choose a start time"
},
"accessory": {
"action_id": "start_times",
"type": "static_select",
"placeholder": {
"type": "plain_text",
"text": "Choose start"
},
"options": [
{
"text": {
"type": "plain_text",
"text": "10:27 pm"
},
"value":
"{\"path\":\"bookings/new\",\"date\":\"2020-02-14 04:27:22 UTC\"}"
},
{
"text": {
"type": "plain_text",
"text": "10:45 pm"
},
"value":
"{\"path\":\"bookings/new\",\"date\":\"2020-02-14 04:45:00 UTC\"}"
}
]
}
}
],
"callback_id": "create booking",
"private_metadata":
"{\"channel_id\":\"C6M2A4690\",\"min_start_time\":\"2020-02-14 04:27:22 UTC\",\"path\":\"bookings/create\",\"room_id\":175128,\"selected_end_time\":null,\"selected_start_time\":null}",
"type": "modal",
"submit": {
"type": "plain_text",
"text": "Book"
},
"title": {
"type": "plain_text",
"text": "Booking room"
}
}
Если пользователь сразу нажимает кнопку «Отправить», это мой ответ на событие view_submission
:
{
"response_action": "errors",
"errors": {
"start_times": "Please complete this required field"
}
}
После получения моего ответа Слэк выключает счетчик, оставляет модальный режим открытым, но не отобразить сообщение об ошибке. Модал выглядит точно так же, как при первом открытии через views.open
.