jordancheney89/causality
0
1from dash import Output, Input, State2 3from .psm import register_psm_callbacks4from .bayesian import register_bayesian_callbacks5from .uplift import register_uplift_callbacks6from .comparison import register_comparison_callbacks7 8# Pure-clientside toggle: flipping `is_open` doesn't need a server roundtrip.9_TOGGLE_JS = "function(n, is_open) { return !is_open; }"10 11 12def _register_collapse_toggles(app, pairs):13 """Wire `methodology_collapse` (and similar) buttons to their collapses14 via a single clientside callback per pair.15 16 `pairs` is an iterable of `(button_id, collapse_id)`. The button-click17 flips the collapse's `is_open` state with no server work.18 """19 for btn_id, collapse_id in pairs:20 app.clientside_callback(21 _TOGGLE_JS,22 Output(collapse_id, "is_open"),23 Input(btn_id, "n_clicks"),24 State(collapse_id, "is_open"),25 prevent_initial_call=True,26 )27 28 29def register_callbacks(app):30 register_psm_callbacks(app)31 register_bayesian_callbacks(app)32 register_uplift_callbacks(app)33 register_comparison_callbacks(app)34 _register_collapse_toggles(35 app,36 [37 ("method-btn-tab2", "method-collapse-tab2"),38 ("method-btn-tab3", "method-collapse-tab3"),39 ("method-btn-tab4", "method-collapse-tab4"),40 ("method-btn-tab5", "method-collapse-tab5"),41 ("ppc-btn", "ppc-collapse"),42 ("diag-btn", "diag-collapse"),43 ],44 )45 