From 76a0a19688cfca6e7d066eb40713ed3292e2a333 Mon Sep 17 00:00:00 2001 From: Christian Fehmer Date: Fri, 5 Sep 2025 14:05:57 +0200 Subject: [PATCH] lazy load friends page --- frontend/src/ts/pages/friends.ts | 25 +++++++++++++++++++++---- frontend/src/ts/utils/sorted-table.ts | 1 + 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/frontend/src/ts/pages/friends.ts b/frontend/src/ts/pages/friends.ts index f25533e64..abcd0891c 100644 --- a/frontend/src/ts/pages/friends.ts +++ b/frontend/src/ts/pages/friends.ts @@ -24,6 +24,7 @@ import { getLanguageDisplayString } from "../utils/strings"; import * as DB from "../db"; import { getAuthenticatedUser } from "../firebase"; import * as ServerConfiguration from "../ape/server-configuration"; +import * as AuthEvent from "../observables/auth-event"; const pageElement = $(".page.pageFriends"); @@ -167,7 +168,8 @@ async function fetchFriends(): Promise { friendsList = result.body.data; } } -async function updateFriends(): Promise { + +function updateFriends(): void { $(".pageFriends .friends .nodata").addClass("hidden"); $(".pageFriends .friends table").addClass("hidden"); @@ -404,7 +406,7 @@ $(".pageFriends .pendingRequests table").on("click", async (e) => { if (action === "accepted") { await fetchFriends(); - await updateFriends(); + updateFriends(); } } }); @@ -445,7 +447,15 @@ export const page = new Page({ throw new Error("Friends are disabled."); } - await Promise.all([fetchPendingRequests(), fetchFriends()]); + if (friendsList !== undefined && pendingRequests !== undefined) { + setTimeout(async () => { + await Promise.all([fetchPendingRequests(), fetchFriends()]); + updatePendingRequests(); + updateFriends(); + }, 0); + } else { + await Promise.all([fetchPendingRequests(), fetchFriends()]); + } }, style: "bar", keyframes: [ @@ -465,10 +475,17 @@ export const page = new Page({ Skeleton.append("pageFriends", "main"); updatePendingRequests(); - void updateFriends(); + updateFriends(); }, }); $(() => { Skeleton.save("pageFriends"); }); + +AuthEvent.subscribe((event) => { + if (event.type === "authStateChanged" && !event.data.isUserSignedIn) { + pendingRequests = undefined; + friendsList = undefined; + } +}); diff --git a/frontend/src/ts/utils/sorted-table.ts b/frontend/src/ts/utils/sorted-table.ts index 9425c764a..4124600f4 100644 --- a/frontend/src/ts/utils/sorted-table.ts +++ b/frontend/src/ts/utils/sorted-table.ts @@ -62,6 +62,7 @@ export class SortedTable { public setData(data: T[]): void { this.data = data.map((source) => ({ source })); + this.doSort(); } private doSort(): void {