Skip to content

Possible bug when updating existing components #2381

Open
@pascal-pfeiffer

Description

@pascal-pfeiffer

Wave SDK Version, OS

wave 1.3.4

Actual behavior

Given the small demo code below, I don't seem to be able to update the value of textbox3 without recreating the item
In my interpretation of the description of #1870, the code below should work.

Expected behavior

Ability to update the value and label of textbox3

Steps To Reproduce

from h2o_wave import Q, copy_expando, ui, main, app  # noqa: 401


async def meta(q: Q) -> None:
    q.page["meta"] = ui.meta_card(
        box="",
        title="my app",
        layouts=[
            ui.layout(
                breakpoint="0px",
                width="100%",
                zones=[
                    ui.zone(
                        "content",
                        size="1",
                    ),
                ],
            ),
        ],
        script=None,
        notification_bar=None,
    )

    q.page["meta"].theme = "h2o-dark"


@app("/")
async def serve(q: Q):
    print(q.args)
    copy_expando(q.args, q.client)

    q.page["my_important_content"] = ui.form_card(box="content", items=[])

    items = [
        ui.text_l("Cool headline"),
        ui.textbox(
            name="textbox1",
            label="Value1",
            value=q.client["textbox1"],
            trigger=True,
            required=True,
        ),
        ui.textbox(
            name="textbox2",
            label="Value2",
            value=q.client["textbox2"],
            trigger=True,
            required=True,
        ),
    ]

    items_exp = items + [
        ui.textbox(
            name="textbox3",
            label="Concatenated values",
            value=q.client["textbox3"],
            disabled=True,
        ),
    ]

    q.page["my_important_content"].items = items_exp

    if q.args.__wave_submission_name__ == "home":
        q.client["nav/active"] = "home"
    elif q.args.__wave_submission_name__ == "settings":
        q.client["nav/active"] = "settings"

    if (
        q.args.__wave_submission_name__ == "textbox1"
        or q.args.__wave_submission_name__ == "textbox2"
    ):
        print("updating the page")
        new_value = q.client["textbox1"] + q.client["textbox2"]
        print(new_value)

        # these both don't do anything
        q.page["my_important_content"].textbox3.value = new_value
        q.page["my_important_content"].textbox3.label = new_value

        # these both don't do anything
        q.page["textbox3"].value = new_value
        q.page["textbox3"].label = new_value

        # these both don't do anything
        q.page["content"].textbox3.value = new_value
        q.page["content"].textbox3.label = new_value

        # these both don't do anything
        q.page["meta"].textbox3.value = new_value
        q.page["meta"].textbox3.label = new_value

        # removes the item
        q.page["my_important_content"].items[3].label = new_value

        # does nothing
        q.page["my_important_content"].items[3].value = new_value

        # This removes the component
        q.page["my_important_content"].items.textbox3 = ui.textbox(
            name="textbox3",
            label="Concatenated values",
            value=new_value,
            disabled=True,
        )

        # This removes the component
        q.page["my_important_content"].items["textbox3"] = ui.textbox(
            name="textbox3",
            label="Concatenated values",
            value=new_value,
            disabled=True,
        )

        # This removes the component
        q.page["my_important_content"].textbox3 = ui.textbox(
            name="textbox3",
            label="Concatenated values",
            value=new_value,
            disabled=True,
        )

        # This works
        q.page["my_important_content"].items[3] = ui.textbox(
            name="textbox3",
            label="Concatenated values",
            value=new_value,
            disabled=True,
        )

        # This works
        items_exp = items + [
            ui.textbox(
                name="textbox3",
                label="Concatenated values",
                value=new_value,
                disabled=True,
            ),
        ]
        q.page["my_important_content"].items = items_exp

    await meta(q)

    await q.page.save()

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugBug in codepyRelated to Python Driver

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions