refactor(blog): Move the calculation of days between posts to the client side

This commit is contained in:
Thomas 2025-04-02 20:28:05 +01:00
parent 630b2ce654
commit 246afa924f
No known key found for this signature in database
5 changed files with 25 additions and 39 deletions

View file

@ -4,19 +4,14 @@ import { differenceInCalendarDays, getYear } from 'date-fns';
export const prerender = true;
export const load: Load = async ({ params, url }) => {
export const load: Load = async ({}) => {
const controller = await BlogController.singleton();
const posts = await controller.getAllBlogPosts();
const currentYear = getYear(new Date());
const mostRecentPost = posts[0];
const daysSinceLastPublish = differenceInCalendarDays(new Date(), new Date(mostRecentPost.date));
const numberOfPosts = posts.length;
const firstPost = posts[numberOfPosts - 1];
const daysSinceFirstPost = differenceInCalendarDays(new Date(), new Date(firstPost.date));
const averageDaysBetweenPosts = Number(daysSinceFirstPost / numberOfPosts).toFixed(2);
const numberOfBlogPostsThisYear: number = posts.filter(
(post) => getYear(new Date(post.date)) === currentYear
).length;
@ -24,9 +19,6 @@ export const load: Load = async ({ params, url }) => {
return {
posts,
firstPost,
averageDaysBetweenPosts,
daysSinceFirstPost,
daysSinceLastPublish,
numberOfPosts,
numberOfBlogPostsThisYear,
};

View file

@ -1,25 +1,26 @@
<script lang="ts">
import { differenceInCalendarDays } from "date-fns";
import type { PageData } from "./$types.js";
import Navbar from "$lib/components/Navbar.svelte";
import BlogHead from "./BlogHead.svelte";
import BlogHeader from "./BlogHeader.svelte";
import BlogPostListItem from "./BlogPostListItem.svelte";
import { BlogPost } from "$lib/blog/BlogPost.js";
interface Props {
data: PageData;
}
let { data }: Props = $props();
const { data }: Props = $props();
let {
posts,
numberOfPosts,
daysSinceLastPublish,
daysSinceFirstPost,
averageDaysBetweenPosts,
numberOfBlogPostsThisYear,
} = $derived(data);
const { numberOfBlogPostsThisYear, numberOfPosts, posts } = data;
const daysSinceFirstPost = $derived(
differenceInCalendarDays(new Date(), new Date(posts[posts.length - 1].date))
);
const daysSinceLastPublish = $derived(
differenceInCalendarDays(new Date(), new Date(posts[0].date))
);
</script>
<BlogHead />
@ -34,7 +35,7 @@
{numberOfBlogPostsThisYear}
{daysSinceFirstPost}
{numberOfPosts}
averageDaysBetweenPosts={Number(averageDaysBetweenPosts)}
averageDaysBetweenPosts={Number(daysSinceFirstPost / posts.length)}
{daysSinceLastPublish}
/>
<section class="section">

View file

@ -38,7 +38,7 @@
<p class="heading__text">
I have written {numberOfBlogPostsThisYear}
{numberOfBlogPostsThisYear === 1 ? "piece" : "pieces"} so far this year. On average
I publish something every {averageDaysBetweenPosts} days ({numberOfPosts}
I publish something every {averageDaysBetweenPosts.toFixed(2)} days ({numberOfPosts}
posts in {daysSinceFirstPost} days).
</p>

View file

@ -16,14 +16,9 @@ export const load: Load = async ({ params, url }) => {
const currentYear = getYear(new Date());
console.log({ posts });
const mostRecentPost = posts[0];
const daysSinceLastPublish = differenceInCalendarDays(new Date(), new Date(mostRecentPost.date));
const numberOfPosts = posts.length;
const firstPost = posts[numberOfPosts - 1];
const daysSinceFirstPost = differenceInCalendarDays(new Date(), new Date(firstPost.date));
const averageDaysBetweenPosts = Number(daysSinceFirstPost / numberOfPosts).toFixed(2);
const numberOfBlogPostsThisYear: number = posts.filter(
(post) => getYear(new Date(post.date)) === currentYear
).length;
@ -32,9 +27,6 @@ export const load: Load = async ({ params, url }) => {
tag,
posts,
firstPost,
averageDaysBetweenPosts,
daysSinceFirstPost,
daysSinceLastPublish,
numberOfPosts,
numberOfBlogPostsThisYear,
};

View file

@ -4,6 +4,7 @@
import Navbar from "$lib/components/Navbar.svelte";
import BlogHeader from "../../BlogHeader.svelte";
import BlogPostListItem from "../../BlogPostListItem.svelte";
import { differenceInCalendarDays } from "date-fns";
interface Props {
data: PageData;
@ -11,15 +12,15 @@
let { data }: Props = $props();
let {
posts,
tag,
numberOfPosts,
daysSinceLastPublish,
daysSinceFirstPost,
averageDaysBetweenPosts,
numberOfBlogPostsThisYear,
} = $derived(data);
const { posts, tag, numberOfPosts, numberOfBlogPostsThisYear } = data;
const daysSinceFirstPost = $derived(
differenceInCalendarDays(new Date(), new Date(posts[posts.length - 1].date))
);
const daysSinceLastPublish = $derived(
differenceInCalendarDays(new Date(), new Date(posts[0].date))
);
</script>
<BlogHead />
@ -32,7 +33,7 @@
{numberOfBlogPostsThisYear}
{daysSinceFirstPost}
{numberOfPosts}
averageDaysBetweenPosts={Number(averageDaysBetweenPosts)}
averageDaysBetweenPosts={(posts.length, daysSinceFirstPost)}
{daysSinceLastPublish}
/>