From 6869d98ab51f0c0fac9e4bc15b31b64bad596462 Mon Sep 17 00:00:00 2001 From: gord chung Date: Tue, 12 Dec 2023 16:08:23 -0500 Subject: [PATCH] pass data as part of body browsers block responses with large payloads in header --- app/api/v1/data.py | 22 ++++++++++++---------- app/templates/analytics.html | 30 +++++++++++++++++++++--------- 2 files changed, 33 insertions(+), 19 deletions(-) diff --git a/app/api/v1/data.py b/app/api/v1/data.py index 6b82623..fd4b104 100644 --- a/app/api/v1/data.py +++ b/app/api/v1/data.py @@ -11,13 +11,15 @@ @bp.get('/data/random') def random_data(): - data = {'data': np.random.randint(0, 100, 6).tolist(), - 'label': f'blah{np.random.randint(0, 10000)}'} + label = f'blah{np.random.randint(0, 10000)}' + data = {'datasets': [{'data': np.random.randint(0, 100, 6).tolist(), + 'label': label}]} if request.headers.get('Hx-Request'): - resp = flask.Response() - resp.headers['HX-Trigger'] = json.dumps( - {'drawChart': {'target': 'chart_id', - 'datasets': [data]}}) + resp = flask.Response( + '' % + (label, json.dumps(data))) + resp.headers['HX-Trigger-After-Swap'] = json.dumps( + {'drawChart': {'target': 'chartId', 'dataId': label}}) return resp return data @@ -43,10 +45,10 @@ def sales_data(): 'data': table['Auto sales'].to_pylist()}], 'labels': pc.strftime(table['Date'], format='%Y-%m-%d').to_pylist()} if request.headers.get('Hx-Request'): - resp = flask.Response() - resp.headers['HX-Trigger'] = json.dumps( - {'drawChart': {'target': 'line_chart_id', - **data}}) + resp = flask.Response( + '' % (json.dumps(data))) + resp.headers['HX-Trigger-After-Swap'] = json.dumps( + {'drawChart': {'target': 'lineChartId', 'dataId': 'lineChartData'}}) return resp return data diff --git a/app/templates/analytics.html b/app/templates/analytics.html index 4e98ead..fd5771c 100644 --- a/app/templates/analytics.html +++ b/app/templates/analytics.html @@ -29,12 +29,17 @@


- + https://data.bts.gov/Research-and-Statistics/Auto-Sales/7n6a-n5tz @@ -44,12 +49,16 @@

- +
- +
@@ -68,11 +77,14 @@

// chartjs + htmx with payload in HX-Trigger document.body.addEventListener("drawChart", function(evt){ const chart = Chart.getChart(evt.detail.target) - addData(chart, evt.detail.datasets, evt.detail.labels); + // https://www.reddit.com/r/htmx/comments/10sdk43/comment/j72m2j7/ + data = JSON.parse(document.getElementById(evt.detail.dataId).textContent); + addData(chart, data.datasets, data.labels); + document.getElementById(evt.detail.dataId).remove() }) new Chart( - document.getElementById("chart_id"), + document.getElementById("chartId"), { type: "bar", options: { @@ -89,7 +101,7 @@

); new Chart( - document.getElementById("line_chart_id"), + document.getElementById("lineChartId"), { type: "line", options: {