From 68569ad875911a62c03508bceeaf153b247ed2c9 Mon Sep 17 00:00:00 2001 From: Azalea <22280294+hykilpikonna@users.noreply.github.com> Date: Sun, 11 Feb 2024 22:40:04 -0500 Subject: [PATCH] [O] Externalize cal heatmap --- AquaNet/src/libs/ui.ts | 37 ++++++++++++++++++++++++++++++- AquaNet/src/pages/UserHome.svelte | 32 ++------------------------ 2 files changed, 38 insertions(+), 31 deletions(-) diff --git a/AquaNet/src/libs/ui.ts b/AquaNet/src/libs/ui.ts index c25b6aaf..4eca3e2d 100644 --- a/AquaNet/src/libs/ui.ts +++ b/AquaNet/src/libs/ui.ts @@ -8,6 +8,11 @@ import { PointElement, CategoryScale, TimeScale, } from 'chart.js'; +import moment from "moment/moment"; +// @ts-ignore +import CalHeatmap from "cal-heatmap"; +// @ts-ignore +import CalTooltip from 'cal-heatmap/plugins/Tooltip'; export function title(t: string) { document.title = `AquaNet - ${t}` @@ -24,4 +29,34 @@ export function registerChart() { CategoryScale, TimeScale ); -} \ No newline at end of file +} + +export function renderCal(el: HTMLElement, d: {date: any, value: any}[]) { + const cal = new CalHeatmap(); + return cal.paint({ + itemSelector: el, + domain: { + type: 'month', + label: { text: 'MMM', textAlign: 'start', position: 'top' }, + }, + subDomain: { + type: 'ghDay', + radius: 2, width: 11, height: 11, gutter: 4 + }, + range: 12, + data: {source: d, x: 'date', y: 'value'}, + scale: { + color: { + type: 'linear', + range: ['#14432a', '#4dd05a'], + domain: [0, d.reduce((a, b) => Math.max(a, b.value), 0)] + }, + }, + date: {start: moment().subtract(1, 'year').add(1, 'month').toDate()}, + theme: "dark", + }, [ + [CalTooltip, {text: (_: Date, v: number, d: any) => + `${v ?? "No"} songs played on ${d.format('MMMM D, YYYY')}`}] + ]); +} + diff --git a/AquaNet/src/pages/UserHome.svelte b/AquaNet/src/pages/UserHome.svelte index f9f2fb80..5ace4cf2 100644 --- a/AquaNet/src/pages/UserHome.svelte +++ b/AquaNet/src/pages/UserHome.svelte @@ -1,13 +1,11 @@