Skip to content

Commit ff9e5c6

Browse files
committed
Update filters for publish date
1 parent 72e00f2 commit ff9e5c6

File tree

3 files changed

+31
-10
lines changed

3 files changed

+31
-10
lines changed

app/ui/header.tsx

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,11 @@
33
import { useState, useEffect } from 'react';
44

55
interface HeaderProps {
6-
onChange: (opts: { sort: string; query: string }) => void;
6+
onChange: (opts: { sort: 'alpha' | 'alpha-desc' | 'published-date-desc' | 'published-date-asc'; query: string }) => void;
77
}
88

99
export default function Header({ onChange }: HeaderProps) {
10-
const [sort, setSort] = useState<'alpha' | 'date'>('alpha');
10+
const [sort, setSort] = useState<'alpha' | 'alpha-desc' | 'published-date-desc' | 'published-date-asc'>('published-date-desc');
1111
const [query, setQuery] = useState('');
1212

1313
useEffect(() => onChange({ sort, query }), [sort, query, onChange]);
@@ -48,8 +48,10 @@ export default function Header({ onChange }: HeaderProps) {
4848
focus:outline-none focus:ring-2 focus:ring-amber-500
4949
"
5050
>
51-
<option value="alpha">A → Z</option>
52-
<option value="date">Z → A</option>
51+
<option value="published-date-desc">Published Date (Newest)</option>
52+
<option value="alpha">Name (A → Z)</option>
53+
<option value="alpha-desc">Name (Z → A)</option>
54+
<option value="published-date-asc">Published Date (Oldest)</option>
5355
</select>
5456
</div>
5557
</div>

app/ui/skyboxcard.tsx

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,6 @@ import Image from 'next/image';
44
import Modal from './modal';
55
import { useState } from 'react';
66

7-
type Props = { slug: string };
8-
97
export default function SkyboxCard({
108
slug,
119
meta,

app/ui/skyboxgrid.tsx

Lines changed: 25 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@ export default function SkyboxGrid({
1111
slugs: string[];
1212
meta: Record<string, any>;
1313
}) {
14-
const [filter, setFilter] = useState<{ sort: string; query: string }>({
15-
sort: 'alpha',
14+
const [filter, setFilter] = useState<{ sort: 'alpha' | 'alpha-desc' | 'published-date-desc' | 'published-date-asc'; query: string }>({
15+
sort: 'published-date-desc',
1616
query: '',
1717
});
1818

@@ -22,8 +22,29 @@ export default function SkyboxGrid({
2222
const q = filter.query.toLowerCase();
2323
list = list.filter((s) => s.includes(q));
2424
}
25-
if (filter.sort === 'date') list.sort().reverse();
26-
else list.sort();
25+
switch (filter.sort) {
26+
case 'alpha-desc':
27+
list.sort().reverse(); // Z-A
28+
break;
29+
case 'published-date-desc': // Newest to Oldest
30+
list.sort((a, b) => {
31+
const dateA = meta[a]?.publishDate ? new Date(meta[a].publishDate).getTime() : 0;
32+
const dateB = meta[b]?.publishDate ? new Date(meta[b].publishDate).getTime() : 0;
33+
return dateB - dateA; // Sorts undefined/null dates to the end (as oldest)
34+
});
35+
break;
36+
case 'published-date-asc': // Oldest to Newest
37+
list.sort((a, b) => {
38+
const dateA = meta[a]?.publishDate ? new Date(meta[a].publishDate).getTime() : Number.MAX_SAFE_INTEGER;
39+
const dateB = meta[b]?.publishDate ? new Date(meta[b].publishDate).getTime() : Number.MAX_SAFE_INTEGER;
40+
return dateA - dateB; // Sorts undefined/null dates to the end (as newest)
41+
});
42+
break;
43+
case 'alpha': // A-Z
44+
default:
45+
list.sort();
46+
break;
47+
}
2748

2849
return list;
2950
}, [slugs, filter]);

0 commit comments

Comments
 (0)