-
-
Notifications
You must be signed in to change notification settings - Fork 145
Add search_value property to Dropdown #660
Changes from 9 commits
7d06ed2
929f337
2ad14c8
b20dbb4
8add84b
307bfd1
293b757
7980fdf
62ab2b6
78c9463
3f57805
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,54 @@ | ||
import dash | ||
from dash.dependencies import Input, Output, State | ||
from dash.exceptions import PreventUpdate | ||
import dash.testing.wait as wait | ||
import dash_core_components as dcc | ||
|
||
|
||
def test_ddsv001_dynamic_options(dash_duo): | ||
options=[ | ||
{'label': 'New York City', 'value': 'NYC'}, | ||
{'label': 'Montreal', 'value': 'MTL'}, | ||
{'label': 'San Francisco', 'value': 'SF'} | ||
] | ||
|
||
app = dash.Dash(__name__) | ||
app.layout = dcc.Dropdown(id="my-dynamic-dropdown", options=[]) | ||
|
||
@app.callback( | ||
dash.dependencies.Output('my-dynamic-dropdown', 'options'), | ||
[dash.dependencies.Input('my-dynamic-dropdown', 'search_value')], | ||
) | ||
def update_options(search_value): | ||
if not search_value: | ||
raise PreventUpdate | ||
return [o for o in options if search_value in o['label']] | ||
|
||
dash_duo.start_server(app) | ||
|
||
# Get the inner input used for search value. | ||
dropdown = dash_duo.find_element("#my-dynamic-dropdown") | ||
input_ = dropdown.find_element_by_css_selector("input") | ||
|
||
# Focus on the input to open the options menu | ||
input_.send_keys("x") | ||
|
||
#No options to be found with `x` in them, should show the empty message. | ||
dash_duo.wait_for_text_to_equal(".Select-noresults", "No results found") | ||
|
||
input_.clear() | ||
input_.send_keys("o") | ||
byronz marked this conversation as resolved.
Show resolved
Hide resolved
|
||
|
||
options = dropdown.find_elements_by_css_selector(".VirtualizedSelectOption") | ||
|
||
# Should show all options. | ||
assert len(options) == 3 | ||
|
||
# Searching for `on` | ||
input_.send_keys("n") | ||
|
||
options = dropdown.find_elements_by_css_selector(".VirtualizedSelectOption") | ||
|
||
assert len(options) == 1 | ||
print(options) | ||
assert options[0].text == "Montreal" |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
import dash | ||
from dash.dependencies import Input, Output, State | ||
import dash.testing.wait as wait | ||
import dash_core_components as dcc | ||
import dash_html_components as html | ||
|
||
|
||
def test_ddsv001_search_value(dash_duo): | ||
app = dash.Dash(__name__) | ||
app.layout = html.Div( | ||
[dcc.Dropdown(id="dropdown", search_value="something"), html.Div(id="output")] | ||
) | ||
|
||
@app.callback( | ||
Output("output", "children"), inputs=[Input("dropdown", "search_value")] | ||
) | ||
def update_output(search_value): | ||
return 'search_value="{}"'.format(search_value) | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Ah sorry, I missed this earlier - I think the test should use the same structure as the example app you gave, which is updating (BTW nota big deal but you can probably get rid of all the |
||
|
||
dash_duo.start_server(app) | ||
|
||
# Get the inner input used for search value. | ||
input_ = dash_duo.find_element("#dropdown input") | ||
|
||
dash_duo.wait_for_text_to_equal("#output", 'search_value="something"') | ||
|
||
input_.send_keys("x") | ||
dash_duo.wait_for_text_to_equal("#output", 'search_value="x"') |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
sorry I was not clear about the suggestion. the TCID added in the previous test should be unique. more details refer to Notes #2 in example. https://dash.plot.ly/testing
this one should be sth like
dddo001