mirror of
https://github.com/KazooTTT/kazoottt-blog-v2.git
synced 2025-06-23 02:31:31 +08:00
feat: add note modification date display and sorting
This commit is contained in:
@ -26,6 +26,10 @@ const dateTimeOptions: Intl.DateTimeFormatOptions = note.data.date_created
|
||||
};
|
||||
|
||||
const date = note.data.date_created ?? note.data.date;
|
||||
let modifiedDate = note.data?.date_modified;
|
||||
if (modifiedDate && modifiedDate.getTime() === date.getTime()) {
|
||||
modifiedDate = undefined;
|
||||
}
|
||||
---
|
||||
|
||||
<article
|
||||
@ -49,7 +53,17 @@ const date = note.data.date_created ?? note.data.date;
|
||||
)
|
||||
}
|
||||
</Tag>
|
||||
<div>
|
||||
<FormattedDate dateTimeOptions={dateTimeOptions} date={date} />
|
||||
{
|
||||
modifiedDate && (
|
||||
<span class="bg-quote/5 text-quote rounded-lg px-2 py-1">
|
||||
Updated:
|
||||
<FormattedDate class="ms-1" date={modifiedDate} dateTimeOptions={dateTimeOptions} />
|
||||
</span>
|
||||
)
|
||||
}
|
||||
</div>
|
||||
<div
|
||||
class="prose prose-sm prose-cactus mt-4 max-w-none [&>p:last-of-type]:mb-0"
|
||||
class:list={{ "line-clamp-6": isPreview }}
|
||||
|
@ -3,7 +3,7 @@ import { type CollectionEntry, getCollection } from "astro:content";
|
||||
import Pagination from "@/components/Paginator.astro";
|
||||
import Note from "@/components/note/Note.astro";
|
||||
import PageLayout from "@/layouts/Base.astro";
|
||||
import { collectionDateSort } from "@/utils/date";
|
||||
import { collectionModifiedDateSort } from "@/utils/date";
|
||||
import type { GetStaticPaths, Page } from "astro";
|
||||
import { Icon } from "astro-icon/components";
|
||||
|
||||
@ -11,7 +11,7 @@ export const getStaticPaths = (async ({ paginate }) => {
|
||||
const MAX_NOTES_PER_PAGE = 10;
|
||||
const allNotes = await getCollection("note");
|
||||
const notesCount = allNotes.length;
|
||||
return paginate(allNotes.sort(collectionDateSort), {
|
||||
return paginate(allNotes.sort(collectionModifiedDateSort), {
|
||||
pageSize: MAX_NOTES_PER_PAGE,
|
||||
props: { notesCount },
|
||||
});
|
||||
@ -44,6 +44,10 @@ const paginationProps = {
|
||||
},
|
||||
}),
|
||||
};
|
||||
|
||||
function calculateIndex(index: number, page: Page<CollectionEntry<"note">>) {
|
||||
return index + page.start;
|
||||
}
|
||||
---
|
||||
|
||||
<PageLayout meta={meta}>
|
||||
@ -59,7 +63,7 @@ const paginationProps = {
|
||||
{
|
||||
page.data.map((note, index) => (
|
||||
<li class="">
|
||||
<Note note={note} as="h2" isPreview index={index} />
|
||||
<Note note={note} as="h2" isPreview index={calculateIndex(index, page)} />
|
||||
</li>
|
||||
))
|
||||
}
|
||||
|
@ -21,3 +21,23 @@ export function collectionDateSort(
|
||||
) {
|
||||
return b.data.date.getTime() - a.data.date.getTime();
|
||||
}
|
||||
|
||||
const datePriorityForNote = ["date_modified", "date", "data_created"];
|
||||
|
||||
export function collectionModifiedDateSort(
|
||||
a: CollectionEntry<"post" | "note">,
|
||||
b: CollectionEntry<"post" | "note">,
|
||||
) {
|
||||
let dateA: Date = new Date(),
|
||||
dateB: Date = new Date();
|
||||
datePriorityForNote.forEach((key) => {
|
||||
if (a.data[key as keyof typeof a.data]) {
|
||||
dateA = a.data[key as keyof typeof a.data] as Date;
|
||||
}
|
||||
if (b.data[key as keyof typeof b.data]) {
|
||||
dateB = b.data[key as keyof typeof b.data] as Date;
|
||||
}
|
||||
});
|
||||
|
||||
return dateB.getTime() - dateA.getTime();
|
||||
}
|
||||
|
Reference in New Issue
Block a user