Live-update all dashboard charts via SSE
This commit is contained in:
@@ -638,10 +638,12 @@ function openPatientsModal() {
|
||||
const palette = ['#3b50a0', '#6677d6', '#10b981', '#f59e0b'];
|
||||
const tatData = {{.TATChart}};
|
||||
const trendData = {{.TrendChart}};
|
||||
let tatChart = null;
|
||||
let trendChart = null;
|
||||
|
||||
const tatEl = document.getElementById('tat-chart');
|
||||
if (tatEl && tatData.labels && tatData.labels.length) {
|
||||
const tatChart = echarts.init(tatEl);
|
||||
tatChart = echarts.init(tatEl);
|
||||
tatChart.setOption({
|
||||
color: palette,
|
||||
tooltip: {
|
||||
@@ -668,7 +670,7 @@ function openPatientsModal() {
|
||||
|
||||
const trendEl = document.getElementById('trend-chart');
|
||||
if (trendEl && trendData.labels && trendData.labels.length) {
|
||||
const trendChart = echarts.init(trendEl);
|
||||
trendChart = echarts.init(trendEl);
|
||||
trendChart.setOption({
|
||||
color: palette,
|
||||
tooltip: { trigger: 'axis' },
|
||||
@@ -689,6 +691,41 @@ function openPatientsModal() {
|
||||
});
|
||||
window.addEventListener('resize', () => trendChart.resize());
|
||||
}
|
||||
|
||||
document.body.addEventListener('htmx:sseMessage', function (evt) {
|
||||
const eventName = evt.detail && evt.detail.event ? evt.detail.event : '';
|
||||
if (eventName !== 'trend' || !trendChart) return;
|
||||
const raw = evt.detail && typeof evt.detail.data === 'string' ? evt.detail.data : '';
|
||||
if (!raw) return;
|
||||
try {
|
||||
const next = JSON.parse(raw);
|
||||
if (!next || !Array.isArray(next.labels) || !Array.isArray(next.checkedIn) || !Array.isArray(next.checkedOut)) {
|
||||
return;
|
||||
}
|
||||
trendChart.setOption({
|
||||
xAxis: { data: next.labels },
|
||||
series: [
|
||||
{ name: 'Checked In', data: next.checkedIn },
|
||||
{ name: 'Checked Out', data: next.checkedOut }
|
||||
]
|
||||
});
|
||||
} catch (_) {}
|
||||
});
|
||||
|
||||
document.body.addEventListener('htmx:sseMessage', function (evt) {
|
||||
const eventName = evt.detail && evt.detail.event ? evt.detail.event : '';
|
||||
if (eventName !== 'tat' || !tatChart) return;
|
||||
const raw = evt.detail && typeof evt.detail.data === 'string' ? evt.detail.data : '';
|
||||
if (!raw) return;
|
||||
try {
|
||||
const next = JSON.parse(raw);
|
||||
if (!next || !Array.isArray(next.labels) || !Array.isArray(next.values)) return;
|
||||
tatChart.setOption({
|
||||
xAxis: { data: next.labels },
|
||||
series: [{ name: 'Avg TAT', data: next.values }]
|
||||
});
|
||||
} catch (_) {}
|
||||
});
|
||||
})();
|
||||
</script>
|
||||
{{end}}
|
||||
|
||||
Reference in New Issue
Block a user