aboutsummaryrefslogtreecommitdiff
path: root/web/pw-server/src/routes/matches/index.svelte
diff options
context:
space:
mode:
authorIlion Beyst <ilion.beyst@gmail.com>2022-08-11 23:06:53 +0200
committerIlion Beyst <ilion.beyst@gmail.com>2022-08-11 23:06:53 +0200
commit7c4314ae23c3021af1d17e76e582e2f03b507838 (patch)
tree116c9096d817c9f4d1750316029a6aec3a60d186 /web/pw-server/src/routes/matches/index.svelte
parent406c7266019c0c36cfe5069bfe5cf293badd3a30 (diff)
downloadplanetwars.dev-7c4314ae23c3021af1d17e76e582e2f03b507838.tar.xz
planetwars.dev-7c4314ae23c3021af1d17e76e582e2f03b507838.zip
save matches pagination cursor in url
Diffstat (limited to 'web/pw-server/src/routes/matches/index.svelte')
-rw-r--r--web/pw-server/src/routes/matches/index.svelte47
1 files changed, 26 insertions, 21 deletions
diff --git a/web/pw-server/src/routes/matches/index.svelte b/web/pw-server/src/routes/matches/index.svelte
index c6eca50..95e653f 100644
--- a/web/pw-server/src/routes/matches/index.svelte
+++ b/web/pw-server/src/routes/matches/index.svelte
@@ -3,12 +3,22 @@
const PAGE_SIZE = "50";
- export async function load({ fetch }) {
+ export async function load({ url, fetch }) {
try {
const apiClient = new ApiClient(fetch);
- const matches = await apiClient.get("/api/matches", {
+
+ let query = {
count: PAGE_SIZE,
- });
+ before: url.searchParams.get("before"),
+ after: url.searchParams.get("after"),
+ };
+
+ let matches = await apiClient.get("/api/matches", removeUndefined(query));
+
+ // TODO: should this be done client-side?
+ if (query["after"]) {
+ matches = matches.reverse();
+ }
return {
props: {
@@ -22,28 +32,30 @@
};
}
}
+
+ function removeUndefined(obj: Record<string, string>): Record<string, string> {
+ Object.keys(obj).forEach((key) => {
+ if (obj[key] === undefined || obj[key] === null) {
+ delete obj[key];
+ }
+ });
+ return obj;
+ }
</script>
<script lang="ts">
+ import { goto } from "$app/navigation";
+
import MatchList from "$lib/components/matches/MatchList.svelte";
export let matches: object[];
- let loading = false;
async function loadNewer() {
if (matches.length == 0) {
return;
}
const firstTimestamp = matches[0]["timestamp"];
- const apiClient = new ApiClient();
- const reversedNewPage = await apiClient.get("/api/matches", {
- count: PAGE_SIZE,
- after: firstTimestamp,
- });
-
- if (reversedNewPage.length > 0) {
- matches = reversedNewPage.reverse();
- }
+ goto(`?after=${firstTimestamp}`);
}
async function loadOlder() {
@@ -51,14 +63,7 @@
return;
}
const lastTimestamp = matches[matches.length - 1]["timestamp"];
- const apiClient = new ApiClient();
- const newPage = await apiClient.get("/api/matches", {
- count: PAGE_SIZE,
- before: lastTimestamp,
- });
- if (newPage.length > 0) {
- matches = newPage;
- }
+ goto(`?before=${lastTimestamp}`);
}
</script>