diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte index d799b4b..74a3920 100644 --- a/src/routes/+page.svelte +++ b/src/routes/+page.svelte @@ -13,22 +13,35 @@ let interval: NodeJS.Timer | null = null; let moreOlderPostsAvailable = true; let loadingOlderPosts = false; -function refresh() { +async function fetchPosts(filter: { since?: string, before?: string }): Promise { const params = new URLSearchParams(); - if (data.posts.length > 0) { - params.set('since', data.posts[0].created_at); + if (filter?.since !== undefined) { + params.set('since', filter.since); } - fetch(`/api/posts?${params}`) - .then(r => r.json()) - .then((resp: Post[]) => { + if (filter?.before !== undefined) { + params.set('before', filter.before); + } + + const response = await fetch(`/api/posts?${params}`); + return await response.json(); +} + +function filterDuplicates(posts: Post[]): Post[] { + return posts.filter((obj, index, arr) => { + return arr.map(mapObj => mapObj.url).indexOf(obj.url) === index; + }); +} + +function refresh() { + let filter = {}; + if (data.posts.length > 0) { + filter = { since: data.posts[0].created_at }; + } + fetchPosts(filter).then(resp => { if (resp.length > 0) { // Prepend new posts, filter dupes // There shouldn't be any duplicates, but better be safe than sorry - const combined = resp.concat(data.posts); - const filteredPosts = combined.filter((obj, index, arr) => { - return arr.map(mapObj => mapObj.url).indexOf(obj.url) === index; - }); - data.posts = filteredPosts; + data.posts = filterDuplicates(resp.concat(data.posts)); } }) .catch(e => { @@ -57,23 +70,19 @@ onMount(async () => { } }); -async function loadOlderPosts() { +function loadOlderPosts() { loadingOlderPosts = true; - const params = new URLSearchParams(); + let filter = {}; if (data.posts.length > 0) { - params.set('before', data.posts[data.posts.length - 1].created_at); + filter = { before: data.posts[data.posts.length - 1].created_at }; } - await fetch(`/api/posts?${params}`) - .then(r => r.json()) - .then((resp: Post[]) => { + + + fetchPosts(filter).then(resp => { if (resp.length > 0) { // Append old posts, filter dupes // There shouldn't be any duplicates, but better be safe than sorry - const combined = data.posts.concat(resp); - const filteredPosts = combined.filter((obj, index, arr) => { - return arr.map(mapObj => mapObj.url).indexOf(obj.url) === index; - }); - data.posts = filteredPosts; + data.posts = filterDuplicates(data.posts.concat(resp)); moreOlderPostsAvailable = true; } else { moreOlderPostsAvailable = false;