feat: heatmap metric toggle for both PP and TC views (Task B.4)

- Add Heatmap tab to Patient Pathways TAB_DEFINITIONS (was only in ALL_TAB_DEFINITIONS)
- Add dmc.SegmentedControl (Patients/Cost/Cost p.a.) to PP chart card header, hidden by default
- update_chart callback controls toggle visibility via heatmap-metric-wrapper style output
- _render_heatmap() now accepts metric param from toggle
- Add dmc.SegmentedControl to TC heatmap chart cell inline
- tc_heatmap callback reads tc-heatmap-metric-toggle value and passes metric to figure fn
This commit is contained in:
Andrew Charlwood
2026-02-07 03:05:41 +00:00
parent 51d435d9a2
commit 8e2e2b7125
5 changed files with 74 additions and 18 deletions
+4 -2
View File
@@ -195,9 +195,10 @@ def register_trust_comparison_callbacks(app):
@app.callback(
Output("tc-chart-heatmap", "figure"),
Input("app-state", "data"),
Input("tc-heatmap-metric-toggle", "value"),
prevent_initial_call=True,
)
def tc_heatmap(app_state):
def tc_heatmap(app_state, heatmap_metric):
selected = (app_state or {}).get("selected_comparison_directorate")
if not selected:
return no_update
@@ -205,13 +206,14 @@ def register_trust_comparison_callbacks(app):
from visualization.plotly_generator import create_trust_heatmap_figure
filter_id = app_state.get("date_filter_id", "all_6mo")
chart_type = app_state.get("chart_type", "directory")
metric = heatmap_metric or "patients"
try:
data = get_trust_heatmap(filter_id, chart_type, selected)
except Exception:
return _tc_empty("Failed to load heatmap data.")
if not data.get("trusts") or not data.get("drugs"):
return _tc_empty("No heatmap data for this selection.")
return create_trust_heatmap_figure(data, _tc_title(app_state))
return create_trust_heatmap_figure(data, _tc_title(app_state), metric=metric)
# 5. Duration — drug durations by trust
@app.callback(