| title | Updating and pushing views |
|---|---|
| lang | en |
| slug | updating-pushing-views |
| order | 11 |
Modals contain a stack of views. When you call views_open, you add the root view to the modal. After the initial call, you can dynamically update a view by calling views_update, or stack a new view on top of the root view by calling views_push.
views_update
To update a view, you can use the built-in client to call views_update with the view_id that was generated when you opened the view, and a new view including the updated blocks list. If you're updating the view when a user interacts with an element inside of an existing view, the view_id will be available in the body of the request.
views_push
To push a new view onto the view stack, you can use the built-in client to call views_push with a valid trigger_id a new view payload. The arguments for views_push is the same as opening modals. After you open a modal, you may only push two additional views onto the view stack.
Learn more about updating and pushing views in our API documentation.
# Listen for a button invocation with action_id `button_abc` (assume it's inside of a modal)
@app.action("button_abc")
def update_modal(ack, body, client):
# Acknowledge the button request
ack()
# Call views_update with the built-in client
client.views_update(
# Pass the view_id
view_id=body["view"]["id"],
# String that represents view state to protect against race conditions
hash=body["view"]["hash"],
# View payload with updated blocks
view={
"type": "modal",
# View identifier
"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"
}
]
}
)