ほら、マルチセレクトメニューとかで「すべて選択」「すべて解除」とかやりたいじゃないですか。
残念ながら、SlackのAPIにはそのような機能がないのでviews.update
を駆使して実現する。
まず views.open
でModal Viewを表示する。
|
|
後述するが このようなモーダルビューができるMultiSelectBlockElement
の action_id
は意味を成さなくなるので空でよい。
そんで、
select-menu-action
ブロックの slack.InteractionTypeBlockActions
(“block_action”) のハンドラで
|
|
という具合に、InitialOptions
を差し替えて views.update
を実行する。
ただし、ドキュメントにもあるように
Preserving input entry
Data entered or selected in input blocks can be preserved while updating views. The new view object that you use with views.update should contain the same input blocks and elements with identical block_id and action_id values.
views.update method | Slack
InputBlock
の block_id
と、そのブロックに属する BlockElement
の action_id
が views.open
のときと同じだと入力状態が維持されるということになっているので、 action_id
を空にして渡してやることで値の上書きを可能にする。
空で実行すると都度ランダムな文字列が割り当てられ、異なる action_id
になるためである。
まったく小賢しいのだが、これで「すべて選択」「すべて解除」ボタンが実装できた。
くそめんどくさいのでどうにかしてほしい。