|
4 | 4 |
|
5 | 5 | from dash_test_components import ComponentAsProp |
6 | 6 |
|
7 | | -from dash.dcc import Checklist |
| 7 | +from dash.dcc import Checklist, Dropdown |
8 | 8 | from dash.html import Button, Div, Span |
9 | 9 |
|
10 | 10 |
|
@@ -379,3 +379,65 @@ def opts(n): |
379 | 379 |
|
380 | 380 | dash_duo.find_elements("#b label > input")[0].click() |
381 | 381 | dash_duo.wait_for_text_to_equal("#counter", "1") |
| 382 | + |
| 383 | + |
| 384 | +def test_rdcap004_side_effect_same_component(dash_duo): |
| 385 | + options = [ |
| 386 | + {"label": "aa1", "value": "aa1"}, |
| 387 | + {"label": "aa2", "value": "aa2"}, |
| 388 | + {"label": "aa3", "value": "aa3"}, |
| 389 | + {"label": "best value", "value": "bb1"}, |
| 390 | + {"label": "better value", "value": "bb2"}, |
| 391 | + {"label": "bye", "value": "bb3"}, |
| 392 | + ] |
| 393 | + |
| 394 | + app = Dash(__name__) |
| 395 | + |
| 396 | + app.layout = Div( |
| 397 | + [ |
| 398 | + Div( |
| 399 | + ["Single dynamic Dropdown", Dropdown(id="my-dynamic-dropdown")], |
| 400 | + style={"width": 200, "marginLeft": 20, "marginTop": 20}, |
| 401 | + ), |
| 402 | + Button( |
| 403 | + "Reset", |
| 404 | + id="button", |
| 405 | + n_clicks=0, |
| 406 | + ), |
| 407 | + Div(0, id="counter"), |
| 408 | + ] |
| 409 | + ) |
| 410 | + app.clientside_callback( |
| 411 | + "function(_, prev) {return parseInt(prev) + 1}", |
| 412 | + Output("counter", "children"), |
| 413 | + Input("my-dynamic-dropdown", "value"), |
| 414 | + State("counter", "children"), |
| 415 | + prevent_initial_call=True, |
| 416 | + ) |
| 417 | + |
| 418 | + @app.callback( |
| 419 | + Output("my-dynamic-dropdown", "options"), |
| 420 | + Input("my-dynamic-dropdown", "search_value"), |
| 421 | + ) |
| 422 | + def update_options(search_value): |
| 423 | + if search_value is None: |
| 424 | + return options |
| 425 | + return [o for o in options if search_value in o["label"]] |
| 426 | + |
| 427 | + @app.callback( |
| 428 | + Output("my-dynamic-dropdown", "value"), |
| 429 | + Input("button", "n_clicks"), |
| 430 | + ) |
| 431 | + def on_button(n_clicks): |
| 432 | + return None |
| 433 | + |
| 434 | + dash_duo.start_server(app) |
| 435 | + |
| 436 | + # Initial callback |
| 437 | + dash_duo.wait_for_text_to_equal("#counter", "1") |
| 438 | + |
| 439 | + search = dash_duo.wait_for_element("#my-dynamic-dropdown input") |
| 440 | + |
| 441 | + search.send_keys("a") |
| 442 | + |
| 443 | + dash_duo.wait_for_text_to_equal("#counter", "1") |
0 commit comments