Compare commits
No commits in common. "fee1475779796224b2528d1a98cd273819ec9d77" and "2409fa2b8d5a63c81bac840125da132607ac3d2a" have entirely different histories.
fee1475779
...
2409fa2b8d
@ -13,44 +13,22 @@ let interval: NodeJS.Timer | null = null;
|
|||||||
let moreOlderPostsAvailable = true;
|
let moreOlderPostsAvailable = true;
|
||||||
let loadingOlderPosts = false;
|
let loadingOlderPosts = false;
|
||||||
|
|
||||||
interface FetchOptions {
|
|
||||||
since?: string,
|
|
||||||
before?: string,
|
|
||||||
count?: number
|
|
||||||
}
|
|
||||||
|
|
||||||
async function fetchPosts(options: FetchOptions): Promise<Post[]> {
|
|
||||||
const params = new URLSearchParams();
|
|
||||||
if (options?.since !== undefined) {
|
|
||||||
params.set('since', options.since);
|
|
||||||
}
|
|
||||||
if (options?.before !== undefined) {
|
|
||||||
params.set('before', options.before);
|
|
||||||
}
|
|
||||||
if (options?.count !== undefined) {
|
|
||||||
params.set('count', options.count.toFixed(0));
|
|
||||||
}
|
|
||||||
|
|
||||||
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() {
|
function refresh() {
|
||||||
let filter: FetchOptions = {};
|
const params = new URLSearchParams();
|
||||||
if (data.posts.length > 0) {
|
if (data.posts.length > 0) {
|
||||||
filter = { since: data.posts[0].created_at };
|
params.set('since', data.posts[0].created_at);
|
||||||
}
|
}
|
||||||
fetchPosts(filter).then(resp => {
|
fetch(`/api/posts?${params}`)
|
||||||
|
.then(r => r.json())
|
||||||
|
.then((resp: Post[]) => {
|
||||||
if (resp.length > 0) {
|
if (resp.length > 0) {
|
||||||
// Prepend new posts, filter dupes
|
// Prepend new posts, filter dupes
|
||||||
// There shouldn't be any duplicates, but better be safe than sorry
|
// There shouldn't be any duplicates, but better be safe than sorry
|
||||||
data.posts = filterDuplicates(resp.concat(data.posts));
|
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;
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.catch(e => {
|
.catch(e => {
|
||||||
@ -79,21 +57,24 @@ onMount(async () => {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
function loadOlderPosts() {
|
async function loadOlderPosts() {
|
||||||
loadingOlderPosts = true;
|
loadingOlderPosts = true;
|
||||||
const filter: FetchOptions = { count: 20 };
|
const params = new URLSearchParams();
|
||||||
if (data.posts.length > 0) {
|
if (data.posts.length > 0) {
|
||||||
filter.before = data.posts[data.posts.length - 1].created_at;
|
params.set('before', data.posts[data.posts.length - 1].created_at);
|
||||||
}
|
}
|
||||||
|
await fetch(`/api/posts?${params}`)
|
||||||
|
.then(r => r.json())
|
||||||
fetchPosts(filter).then(resp => {
|
.then((resp: Post[]) => {
|
||||||
if (resp.length > 0) {
|
if (resp.length > 0) {
|
||||||
// Append old posts, filter dupes
|
// Append old posts, filter dupes
|
||||||
// There shouldn't be any duplicates, but better be safe than sorry
|
// There shouldn't be any duplicates, but better be safe than sorry
|
||||||
data.posts = filterDuplicates(data.posts.concat(resp));
|
const combined = data.posts.concat(resp);
|
||||||
// If we got less than we expected, there are no older posts available
|
const filteredPosts = combined.filter((obj, index, arr) => {
|
||||||
moreOlderPostsAvailable = resp.length < (filter.count ?? 20);
|
return arr.map(mapObj => mapObj.url).indexOf(obj.url) === index;
|
||||||
|
});
|
||||||
|
data.posts = filteredPosts;
|
||||||
|
moreOlderPostsAvailable = true;
|
||||||
} else {
|
} else {
|
||||||
moreOlderPostsAvailable = false;
|
moreOlderPostsAvailable = false;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user