def yaxis_min_max_values( yaxis_type, yaxis, inputs, yaxis_inputs, range_data, ext_aggs ): """ dash callback controlling values for selected y-axis in y-axis range editor """ y = make_list(inputs.get("y")) final_cols = build_final_cols( y, inputs.get("z"), inputs.get("agg"), ext_aggs if inputs.get("chart_type") not in NON_EXT_AGGREGATION else [], ) dd_style = dict( display="block" if yaxis_type == "multi" and len(final_cols) > 1 else "none" ) type_style = ( {"borderRadius": "0 0.25rem 0.25rem 0"} if yaxis_type == "default" else None ) min_max_style = ( "none" if (yaxis_type == "default") or (yaxis_type == "multi" and yaxis is None) else "block" ) label_style = dict(display=min_max_style) input_style = {"lineHeight": "inherit", "display": min_max_style} curr_min, curr_max = (None, None) range_min, range_max = ((range_data or {}).get(p) or {} for p in ["min", "max"]) if yaxis: curr_vals = (yaxis_inputs or {}).get("data", {}).get(yaxis) or {} curr_min = curr_vals.get("min") or range_min.get(yaxis) curr_max = curr_vals.get("max") or range_max.get(yaxis) elif yaxis_type == "single": curr_vals = (yaxis_inputs or {}).get("data", {}).get("all") or {} curr_min = curr_vals.get("min") if curr_min is None: curr_min = get_default_range(range_min, final_cols) curr_max = curr_vals.get("max") if curr_max is None: curr_max = get_default_range(range_max, final_cols, max=True) return ( curr_min, curr_max, dd_style, label_style, input_style, label_style, input_style, type_style, )
def update_yaxis_data( yaxis_type, yaxis_min, yaxis_max, yaxis, yaxes, yaxis_data, range_data, inputs, ext_aggs, ): """ dash callback controlling updates to y-axis range state """ yaxis_data = yaxis_data or dict(data={}) yaxis_data["type"] = yaxis_type yaxis = yaxis or yaxes[0]["value"] if len(yaxes) else None yaxis_name = "all" if yaxis_type == "single" else yaxis if yaxis_name == "all": final_cols = build_final_cols( make_list(inputs.get("y")), inputs.get("z"), inputs.get("agg"), ext_aggs if inputs.get("chart_type") not in NON_EXT_AGGREGATION else [], ) mins = range_data.get("min", {}) maxs = range_data.get("max", {}) range_min = get_default_range(mins, final_cols) range_max = get_default_range(maxs, final_cols, max=True) elif yaxis is None: raise PreventUpdate else: range_min, range_max = (range_data[p].get(yaxis_name) for p in ["min", "max"]) if yaxis_name in yaxis_data["data"]: if (yaxis_min, yaxis_max) == (range_min, range_max): del yaxis_data["data"][yaxis_name] else: yaxis_data["data"][yaxis_name] = dict(min=yaxis_min, max=yaxis_max) else: if (yaxis_min, yaxis_max) != (range_min, range_max): yaxis_data["data"][yaxis_name] = dict(min=yaxis_min, max=yaxis_max) return yaxis_data
def on_data( _ts1, _ts2, _ts3, _ts4, _ts5, _ts6, _ts7, _ts8, load_clicks, inputs, chart_inputs, yaxis_data, map_data, cs_data, treemap_data, funnel_data, last_chart_inputs, auto_load, prev_load_clicks, ext_aggs, ): """ dash callback controlling the building of dash charts """ all_inputs = dict_merge( inputs, chart_inputs, dict(yaxis=yaxis_data or {}), map_data, cs_data, treemap_data, funnel_data, dict(extended_aggregation=ext_aggs or []) if inputs.get("chart_type") not in NON_EXT_AGGREGATION else {}, ) if not auto_load and load_clicks == prev_load_clicks: raise PreventUpdate if all_inputs == last_chart_inputs: raise PreventUpdate if is_app_root_defined(dash_app.server.config.get("APPLICATION_ROOT")): all_inputs["app_root"] = dash_app.server.config["APPLICATION_ROOT"] charts, range_data, code = build_chart(**all_inputs) agg_disabled = len(ext_aggs) > 0 ext_agg_tt = text("ext_agg_desc") ext_agg_warning = show_style(agg_disabled) if agg_disabled: ext_agg_tt = html.Div([ html.Span(text("ext_agg_desc")), html.Br(), html.Ul([ html.Li( extended_aggregations.build_extended_agg_desc(ext_agg), className="mb-0", ) for ext_agg in ext_aggs ]), ]) final_cols = build_final_cols( make_list(inputs.get("y")), inputs.get("z"), inputs.get("agg"), ext_aggs if inputs.get("chart_type") not in NON_EXT_AGGREGATION else [], ) return ( charts, all_inputs, range_data, "\n".join(make_list(code) + [CHART_EXPORT_CODE]), get_yaxis_type_tabs(final_cols), load_clicks, dict(display="block" if valid_chart(**all_inputs) else "none"), agg_disabled, ext_agg_tt, ext_agg_warning, )