diff --git a/src/components/ConfirmDialogProvider.react.js b/src/components/ConfirmDialogProvider.react.js index ade2a224d..88b8bcc22 100644 --- a/src/components/ConfirmDialogProvider.react.js +++ b/src/components/ConfirmDialogProvider.react.js @@ -8,7 +8,7 @@ import ConfirmDialog from './ConfirmDialog.react' /** * Wrap children onClick to send a confirmation dialog. * You can add a button directly as a children: - * `dcc.ConfirmDialogProvider(dcc.Button('click me', id='btn'), id='confirm')` + * `dcc.ConfirmDialogProvider(html.Button('click me', id='btn'), id='confirm')` */ export default class ConfirmDialogProvider extends React.Component { render() { @@ -71,10 +71,6 @@ ConfirmDialogProvider.propTypes = { * Number of times the popup was canceled. */ cancel_n_clicks: PropTypes.number, - /** - * Set to true to send the popup. - */ - send_confirm: PropTypes.bool, /** * Is the modal currently displayed. */ diff --git a/test/test_integration.py b/test/test_integration.py index 58328c0e9..1a6e1e48b 100644 --- a/test/test_integration.py +++ b/test/test_integration.py @@ -5,6 +5,7 @@ import os import sys import time +import multiprocessing import pandas as pd import dash @@ -529,47 +530,65 @@ def update_graph(n_clicks): time.sleep(2) self.snapshot('candlestick - 2 click') - def test_confirm(self): - app = dash.Dash(__name__) - - app.layout = html.Div([ - html.Button(id='button', children='Send confirm', n_clicks=0), - dcc.ConfirmDialog(id='confirm', message='Please confirm.'), - html.Div(id='confirmed') - ]) - - @app.callback(Output('confirm', 'displayed'), [Input('button', 'n_clicks')]) - def on_click_confirm(n_clicks): - if n_clicks: - return True + def _test_confirm(self, app, test_name): + count = multiprocessing.Value('i', 0) @app.callback(Output('confirmed', 'children'), - [Input('confirm', 'n_clicks'), Input('confirm', 'submit_n_clicks'), Input('confirm', 'cancel_n_clicks')],) - def on_confirmed(n_clicks, submit_n_clicks, cancel_n_clicks): + [Input('confirm', 'n_clicks'), + Input('confirm', 'submit_n_clicks'), + Input('confirm', 'cancel_n_clicks')]) + def _on_confirmed(n_clicks, submit_n_clicks, cancel_n_clicks): if not n_clicks: - return + return '' + count.value += 1 if n_clicks == 1: + self.assertEqual(1, submit_n_clicks) return 'confirmed' elif n_clicks == 2: + self.assertEqual(1, cancel_n_clicks) return 'canceled' self.startServer(app) + self.snapshot(test_name + ' -> initial') button = self.wait_for_element_by_css_selector('#button') - self.snapshot('confirmation -> initial') - time.sleep(1) + button.click() time.sleep(1) - self.driver.switch_to.alert.accept() self.wait_for_text_to_equal('#confirmed', 'confirmed') + self.snapshot(test_name + ' -> confirmed') - self.snapshot('confirmation -> confirmed') - - time.sleep(0.2) button.click() - time.sleep(1) + time.sleep(0.5) self.driver.switch_to.alert.dismiss() time.sleep(0.5) self.wait_for_text_to_equal('#confirmed', 'canceled') + self.snapshot(test_name + ' -> canceled') + + self.assertEqual(2, count.value, 'Expected 2 callback but got ' + str(count.value)) + + def test_confirm(self): + app = dash.Dash(__name__) + + app.layout = html.Div([ + html.Button(id='button', children='Send confirm', n_clicks=0), + dcc.ConfirmDialog(id='confirm', message='Please confirm.'), + html.Div(id='confirmed') + ]) + + @app.callback(Output('confirm', 'displayed'), [Input('button', 'n_clicks')]) + def on_click_confirm(n_clicks): + if n_clicks: + return True + + self._test_confirm(app, 'ConfirmDialog') + + def test_confirm_dialog_provider(self): + app = dash.Dash(__name__) + + app.layout = html.Div([ + dcc.ConfirmDialogProvider(html.Button('click me', id='button'), id='confirm', message='Please confirm.'), + html.Div(id='confirmed') + ]) - self.snapshot('confirmation -> canceled') + self._test_confirm(app, 'ConfirmDialogProvider')