-
Notifications
You must be signed in to change notification settings - Fork 417
Expand file tree
/
Copy path[...stories].tsx
More file actions
52 lines (49 loc) · 1.62 KB
/
[...stories].tsx
File metadata and controls
52 lines (49 loc) · 1.62 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
import { A, type RouteDefinition, type RouteSectionProps } from "@solidjs/router";
import { For, Show, createMemo } from "solid-js";
import Story from "~/components/story";
import { getStories } from "~/lib/api";
import { StoryTypes } from "~/types";
export const route = {
preload({ location, params }) {
void getStories((params.stories as StoryTypes) || "top", +location.query.page || 1);
},
} satisfies RouteDefinition;
export default function Stories(props: RouteSectionProps) {
const page = () => +props.location.query.page || 1;
const type = () => (props.params.stories || "top") as StoryTypes;
const stories = createMemo(() => getStories(type(), page()));
return (
<div class="news-view">
<div class="news-list-nav">
<Show
when={page() > 1}
fallback={
<span class="page-link disabled" aria-disabled="true">
{"<"} prev
</span>
}
>
<A class="page-link" href={`/${type()}?page=${page() - 1}`} aria-label="Previous Page">
{"<"} prev
</A>
</Show>
<span>page {page()}</span>
<Show
when={stories() && stories()!.length >= 29}
fallback={
<span class="page-link disabled" aria-disabled="true">
more {">"}
</span>
}
>
<A class="page-link" href={`/${type()}?page=${page() + 1}`} aria-label="Next Page">
more {">"}
</A>
</Show>
</div>
<main class="news-list">
<For each={stories()}>{story => <Story story={story()} />}</For>
</main>
</div>
);
}