AdaptiveCards icon indicating copy to clipboard operation
AdaptiveCards copied to clipboard

[Designer] Update data binding

Open anna-dingler opened this issue 1 year ago • 3 comments

Related Issue

Fixes #8013

Description

When generating the templating variable from the Bind... button in the designer, we have an edge case for data variables that contain special characters. In this scenario, we typically want to use index syntax and wrap the var in braces.

However, this does not work for arrays. For arrays, we index into the first element by appending [0] to the name. This forces the index syntax incorrectly because the name now includes special characters.

I updated the logic to remove [0] from the end of array type names before checking for special characters.

Sample Card

{
    "type": "AdaptiveCard",
    "$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
    "version": "1.5",
    "body": [
        {
            "type": "TextBlock",
            "wrap": true,
            // Add text property manually in the designer and Bind to `name`
        }
    ],
    "data": {
        "employees": [
            {
                "name": "Gabriela Leticia"
            },
            {
                "name": "Natalia Tercera"
            },
            {
                "name": "Waleska Cristobal"
            }
        ]
    }
}

How Verified

Verified on the CI site.

anna-dingler avatar Jun 21 '24 22:06 anna-dingler

Hi Anna, This looks odd:

['employees[0]']

I don't think this is valid syntax to access into an array.

jwoo-msft avatar Jun 26 '24 01:06 jwoo-msft

Hi Anna, This looks odd:

['employees[0]']

I don't think this is valid syntax to access into an array.

Hey @jwoo-msft! That sample is confusing - sorry! That is the previous behavior that the PR fixes. If you try to use the Bind... feature right now, that is the result. The issue occurs because we use the indexer syntax (wrap in []) if the json key contains special characters. However, for arrays, we asses the key after we add [0] and it is incorrectly wrapped.

If you want to see the new behavior, I can kick off another ci build for this branch.

anna-dingler avatar Jun 26 '24 16:06 anna-dingler

Hi @anna-dingler ,

[$root.employees[0]] works, but 'employee[0]' is just a string in AEL expression.

jwoo-msft avatar Jun 26 '24 19:06 jwoo-msft