メインコンテンツまでスキップ

モーダルの更新と多重表示

モーダル内では、複数のモーダルをスタックのように重ねることができます。views_open という APIを呼び出すと、親となるとなるモーダルビューが追加されます。この最初の呼び出しの後、views_update を呼び出すことでそのビューを更新することができます。また、views_push を呼び出すと、親のモーダルの上にさらに新しいモーダルビューを重ねることもできます。

views_update

モーダルの更新は、組み込みのクライアントで views_update API を呼び出します。この API呼び出しでは、ビューを開いた時に生成された view_id と、更新後の blocks のリストを含む新しい view を指定します。既存のモーダルに含まれるエレメントをユーザーが操作した時にビューを更新する場合は、リクエストの body に含まれる view_id が利用できます。

views_push

既存のモーダルの上に新しいモーダルをスタックのように追加する場合は、組み込みのクライアントで views_push API を呼び出します。この API 呼び出しでは、有効な trigger_id と新しいビューのペイロードを指定します。views_push の引数は モーダルの開始 と同じです。モーダルを開いた後、このモーダルのスタックに追加できるモーダルビューは 2 つまでです。

モーダルの更新と多重表示に関する詳細は、API ドキュメントを参照してください。

指定可能な引数の一覧はモジュールドキュメントを参考にしてください。

# モーダルに含まれる、`button_abc` という action_id のボタンの呼び出しをリッスン
@app.action("button_abc")
def update_modal(ack, body, client):
# ボタンのリクエストを確認
ack()
# 組み込みのクライアントで views_update を呼び出し
client.views_update(
# view_id を渡すこと
view_id=body["view"]["id"],
# 競合状態を防ぐためのビューの状態を示す文字列
hash=body["view"]["hash"],
# 更新後の blocks を含むビューのペイロード
view={
"type": "modal",
# ビューの識別子
"callback_id": "view_1",
"title": {"type": "plain_text", "text":"Updated modal"},
"blocks": [
{
"type": "section",
"text": {"type": "plain_text", "text":"You updated the modal!"}
},
{
"type": "image",
"image_url": "https://media.giphy.com/media/SVZGEcYt7brkFUyU90/giphy.gif",
"alt_text":"Yay!The modal was updated"
}
]
}
)