From 5fa05c2e19e537bf092f4f2dbd12049227c39a04 Mon Sep 17 00:00:00 2001 From: Fuwn Date: Sun, 17 Dec 2023 22:32:25 -0800 Subject: feat(wrapped): activity history panel --- src/lib/Tools/ActivityHistoryGrid.svelte | 96 ++++++++++++++++++++++++++++++++ src/lib/Tools/Wrapped.svelte | 19 ++++++- 2 files changed, 112 insertions(+), 3 deletions(-) create mode 100644 src/lib/Tools/ActivityHistoryGrid.svelte diff --git a/src/lib/Tools/ActivityHistoryGrid.svelte b/src/lib/Tools/ActivityHistoryGrid.svelte new file mode 100644 index 00000000..289afc01 --- /dev/null +++ b/src/lib/Tools/ActivityHistoryGrid.svelte @@ -0,0 +1,96 @@ + + +{#if user === undefined} + Please log in to view this page. +{:else} + {#await activityHistoryData} + Loading ... + {:then activities} + {#if activities === undefined} + Loading ... + {:else} + {@const filledActivities = fillMissingDays(activities)} + {@const highestActivity = Math.max(...filledActivities.map((activity) => activity.amount))} + +
+ {#each filledActivities as activity} +
(baseHue = Math.floor(Math.random() * 360))} + on:keydown={() => { + return; + }} + role="button" + tabindex="0" + title={`Date: ${new Date(activity.date * 1000).toLocaleDateString()}\nAmount: ${ + activity.amount + }`} + /> + {/each} +
+ {/if} + {/await} +{/if} + + diff --git a/src/lib/Tools/Wrapped.svelte b/src/lib/Tools/Wrapped.svelte index ed8e700e..3c394a0d 100644 --- a/src/lib/Tools/Wrapped.svelte +++ b/src/lib/Tools/Wrapped.svelte @@ -6,7 +6,7 @@ } from '$lib/AniList/identity'; import { onMount } from 'svelte'; import { wrapped } from '$lib/AniList/wrapped.js'; - import { activityHistory, fillMissingDays } from '$lib/AniList/activity.js'; + import { activityHistory as getActivityHistory, fillMissingDays } from '$lib/AniList/activity.js'; import { Type, mediaListCollection, type Media } from '$lib/AniList/media.js'; import anime from '../../stores/anime.js'; import lastPruneTimes from '../../stores/lastPruneTimes.js'; @@ -18,6 +18,7 @@ import { clearAllParameters } from './tool.js'; import { env } from '$env/dynamic/public'; import { estimatedDayReading } from '$lib/Media/Manga/time'; + import ActivityHistoryGrid from './ActivityHistoryGrid.svelte'; export let user: AniListAuthorisation; @@ -38,6 +39,7 @@ let highestRatedCount = 5; let mounted = false; let generated = false; + let activityHistory = true; $: { if (browser && mounted) { @@ -50,6 +52,7 @@ $page.url.searchParams.set('width', width.toString()); $page.url.searchParams.set('lightMode', lightMode.toString()); $page.url.searchParams.set('highestRatedCount', highestRatedCount.toString()); + $page.url.searchParams.set('activityHistory', activityHistory.toString()); history.replaceState(null, '', `?${$page.url.searchParams.toString()}`); } @@ -116,7 +119,8 @@ 'includeRepeats', 'width', 'forceDark', - 'highestRatedCount' + 'highestRatedCount', + 'activityHistory' ]); if (browser) { @@ -129,6 +133,7 @@ width = parseInt($page.url.searchParams.get('width') || '980', 10); lightMode = $page.url.searchParams.get('lightMode') === 'true'; highestRatedCount = parseInt($page.url.searchParams.get('highestRatedCount') || '5', 10); + activityHistory = $page.url.searchParams.get('activityHistory') === 'true'; } if (user !== undefined) { @@ -308,7 +313,7 @@ Messages: {wrapped.activities.messageCount}
- Days Active: {#await activityHistory(currentUserIdentity)} + Days Active: {#await getActivityHistory(currentUserIdentity)} Loading ... {:then activities} {#if activities === undefined} @@ -405,6 +410,13 @@
+ {#if activityHistory} +
+
+ +
+
+ {/if} {#if watermark}
@@ -424,6 +436,7 @@ Options
Enable watermark
+ Enable activity history
Enable background transparency
Enable light mode
-- cgit v1.2.3