Slack client.views.update not maintaining selected input values

892 views Asked by At

I am updating slack modal view but it doesn't maintain selected dropdown values, on every update modal is getting reinitialized.

I want to select dropdown one and based on selection looking to populate dropdown two and on update all selected values should be maintain in the modal view.

Seeking assistance to make interactive modal view.

await client.views.update({
                    token: process.env.SLACK_BOT_TOKEN,
                    hash: view.hash,
                    view_id: view.id,
                    view: await moduleBlocks()
                });
        
    moduleBlocks (){
    const modal = {
            "callback_id": "create-incident-modal",
            "type": "modal",
            "title": {
                "type": "plain_text",
                "text": "Create Incident"
            },
            "submit": {
                "type": "plain_text",
                "text": "Submit"
            },
            "blocks": [
                {
                    "type": "input",
                    "dispatch_action": true,
                    "element": {
                        "type": "static_select",
                        "placeholder": {
                            "type": "plain_text",
                            "text": "Select an item",
                            "emoji": true
                        },
                        "options": [
                            {
                                "text": {
                                    "type": "plain_text",
                                    "text": "*option 1*",
                                    "emoji": true
                                },
                                "value": "value-0"
                            },
                            {
                                "text": {
                                    "type": "plain_text",
                                    "text": "*option 2*",
                                    "emoji": true
                                },
                                "value": "value-1"
                            },
                            {
                                "text": {
                                    "type": "plain_text",
                                    "text": "*option 3*",
                                    "emoji": true
                                },
                                "value": "value-2"
                            }
                        ],
                        "action_id": "static_select-1"
                    },
                    "label": {
                        "type": "plain_text",
                        "text": "Label",
                        "emoji": true
                    }
                },
                {
                    "type": "input",
                    "dispatch_action": true,
                    "element": {
                        "type": "static_select",
                        "placeholder": {
                            "type": "plain_text",
                            "text": "Select an item",
                            "emoji": true
                        },
                        "options": [
                            {
                                "text": {
                                    "type": "plain_text",
                                    "text": "*option2 1*",
                                    "emoji": true
                                },
                                "value": "value-0"
                            },
                            {
                                "text": {
                                    "type": "plain_text",
                                    "text": "*option2 2*",
                                    "emoji": true
                                },
                                "value": "value-1"
                            },
                            {
                                "text": {
                                    "type": "plain_text",
                                    "text": "*option3 3*",
                                    "emoji": true
                                },
                                "value": "value-2"
                            }
                        ],
                        "action_id": "static_select-2"
                    },
                    "label": {
                        "type": "plain_text",
                        "text": "Label",
                        "emoji": true
                    }
                }
            ]
        }
        return JSON.stringify(modal);
    }
1

There are 1 answers

0
mattnosleep On

Your blocks need a set block_id to maintain the same values. When you don't provide a block_id, a block_id is generated for you. When slack sees the block_id change, it resets the values.

"type": "input",
"dispatch_action": true,
"block_id": "test_id"
"element": {

When you update the each time, keep block_id the same except for the block you want to update.

Here is some info on blocks & block_id: https://api.slack.com/reference/block-kit/blocks