feat: sort private pages by alphabet
This commit is contained in:
parent
c10ebb3c1d
commit
629983ea77
3 changed files with 9 additions and 8 deletions
|
|
@ -33,10 +33,11 @@ export function enrichPostsWithDates(posts: Post[]): PostWithDates[] {
|
||||||
return posts.map(enrichPostWithDates);
|
return posts.map(enrichPostWithDates);
|
||||||
}
|
}
|
||||||
|
|
||||||
function sortPosts(posts: PostWithDates[]): PostWithDates[] {
|
function sortPosts(posts: PostWithDates[], { alphabetically = false } = {}): PostWithDates[] {
|
||||||
return posts.slice().sort((a, b) => {
|
return posts.slice().sort((a, b) => {
|
||||||
if (a.data.pinned && !b.data.pinned) return -1;
|
if (a.data.pinned && !b.data.pinned) return -1;
|
||||||
if (!a.data.pinned && b.data.pinned) return 1;
|
if (!a.data.pinned && b.data.pinned) return 1;
|
||||||
|
if (alphabetically) return a.data.title.localeCompare(b.data.title);
|
||||||
return b.dates.created.getTime() - a.dates.created.getTime();
|
return b.dates.created.getTime() - a.dates.created.getTime();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
@ -49,7 +50,7 @@ export function resolveRelatedPosts(
|
||||||
return slugs.flatMap(s => bySlug.get(s) ?? []);
|
return slugs.flatMap(s => bySlug.get(s) ?? []);
|
||||||
}
|
}
|
||||||
|
|
||||||
export function organizePostsByCategory(posts: PostWithDates[]): {
|
export function organizePostsByCategory(posts: PostWithDates[], { sortAlphabetically = false } = {}): {
|
||||||
grouped: Record<string, PostWithDates[]>;
|
grouped: Record<string, PostWithDates[]>;
|
||||||
categories: string[];
|
categories: string[];
|
||||||
} {
|
} {
|
||||||
|
|
@ -67,7 +68,7 @@ export function organizePostsByCategory(posts: PostWithDates[]): {
|
||||||
});
|
});
|
||||||
|
|
||||||
for (const category of categories) {
|
for (const category of categories) {
|
||||||
grouped[category] = sortPosts(grouped[category]);
|
grouped[category] = sortPosts(grouped[category], { alphabetically: sortAlphabetically });
|
||||||
}
|
}
|
||||||
|
|
||||||
return { grouped, categories };
|
return { grouped, categories };
|
||||||
|
|
|
||||||
|
|
@ -34,7 +34,7 @@ const related = post.data.related ? resolveRelatedPosts(post.data.related, allPo
|
||||||
{related.length > 0 && (
|
{related.length > 0 && (
|
||||||
<details open>
|
<details open>
|
||||||
<summary>related</summary>
|
<summary>related</summary>
|
||||||
<pre set:html={related.map(p => formatListItem(p.dates.created, `/draft/${getSlug(p.id)}`, p.data.title)).join('\n')} />
|
<pre set:html={related.map(p => formatListItem(p.dates.created, `/private/${getSlug(p.id)}`, p.data.title)).join('\n')} />
|
||||||
</details>
|
</details>
|
||||||
)}
|
)}
|
||||||
</Layout>
|
</Layout>
|
||||||
|
|
@ -13,19 +13,19 @@ if (!session) return Astro.redirect('/api/auth/signin');
|
||||||
|
|
||||||
const rawPosts = await getCollection('md', ({ data }) => data.draft === true);
|
const rawPosts = await getCollection('md', ({ data }) => data.draft === true);
|
||||||
const posts = enrichPostsWithDates(rawPosts);
|
const posts = enrichPostsWithDates(rawPosts);
|
||||||
const { grouped, categories: sortedCategories } = organizePostsByCategory(posts);
|
const { grouped, categories: sortedCategories } = organizePostsByCategory(posts, { sortAlphabetically: true });
|
||||||
---
|
---
|
||||||
<Layout title="drafts - lewis m.w.">
|
<Layout title="private - lewis m.w.">
|
||||||
|
|
||||||
<p class="muted">logged in as {session.user?.name} <a href="/api/auth/signout">sign out</a></p>
|
<p class="muted">logged in as {session.user?.name} <a href="/api/auth/signout">sign out</a></p>
|
||||||
|
|
||||||
{sortedCategories.length === 0 ? (
|
{sortedCategories.length === 0 ? (
|
||||||
<p class="muted">no drafts</p>
|
<p class="muted">nothing here</p>
|
||||||
) : (
|
) : (
|
||||||
sortedCategories.map(category => (
|
sortedCategories.map(category => (
|
||||||
<details open>
|
<details open>
|
||||||
<summary>{category}</summary>
|
<summary>{category}</summary>
|
||||||
<pre set:html={grouped[category].map(post => formatListItem(post.dates.created, `/draft/${getSlug(post.id)}`, post.data.title, { pinned: post.data.pinned })).join('\n')} />
|
<pre set:html={grouped[category].map(post => formatListItem(post.dates.created, `/private/${getSlug(post.id)}`, post.data.title, { pinned: post.data.pinned })).join('\n')} />
|
||||||
</details>
|
</details>
|
||||||
))
|
))
|
||||||
)}
|
)}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue