From 3c3d86855c649c85f49c47f688039057ffec4a10 Mon Sep 17 00:00:00 2001 From: Mohamed Bassem Date: Mon, 29 Dec 2025 08:56:45 +0000 Subject: refactor: add suspense boundary in sidebar layout --- apps/web/components/admin/UserList.tsx | 218 ++++++++++++++++----------------- 1 file changed, 103 insertions(+), 115 deletions(-) (limited to 'apps/web/components/admin/UserList.tsx') diff --git a/apps/web/components/admin/UserList.tsx b/apps/web/components/admin/UserList.tsx index 3a382a3b..91467f94 100644 --- a/apps/web/components/admin/UserList.tsx +++ b/apps/web/components/admin/UserList.tsx @@ -3,7 +3,6 @@ import { ActionButton } from "@/components/ui/action-button"; import { ButtonWithTooltip } from "@/components/ui/button"; import { toast } from "@/components/ui/sonner"; -import LoadingSpinner from "@/components/ui/spinner"; import { Table, TableBody, @@ -20,7 +19,6 @@ import { useSession } from "next-auth/react"; import ActionConfirmingDialog from "../ui/action-confirming-dialog"; import AddUserDialog from "./AddUserDialog"; import { AdminCard } from "./AdminCard"; -import InvitesList from "./InvitesList"; import ResetPasswordDialog from "./ResetPasswordDialog"; import UpdateUserDialog from "./UpdateUserDialog"; @@ -35,8 +33,8 @@ export default function UsersSection() { const { t } = useTranslation(); const { data: session } = useSession(); const invalidateUserList = api.useUtils().users.list.invalidate; - const { data: users } = api.users.list.useQuery(); - const { data: userStats } = api.admin.userStats.useQuery(); + const [{ users }] = api.users.list.useSuspenseQuery(); + const [userStats] = api.admin.userStats.useSuspenseQuery(); const { mutateAsync: deleteUser, isPending: isDeletionPending } = api.users.delete.useMutation({ onSuccess: () => { @@ -53,120 +51,110 @@ export default function UsersSection() { }, }); - if (!users || !userStats) { - return ; - } - return ( -
- -
-
- {t("admin.users_list.users_list")} - - - - - -
+ +
+
+ {t("admin.users_list.users_list")} + + + + + +
- - - - {t("common.name")} - {t("common.email")} - {t("admin.users_list.num_bookmarks")} - {t("admin.users_list.asset_sizes")} - {t("common.role")} - {t("admin.users_list.local_user")} - {t("common.actions")} - - - - {users.users.map((u) => ( - - {u.name} - {u.email} - - {userStats[u.id].numBookmarks} /{" "} - {u.bookmarkQuota ?? t("admin.users_list.unlimited")} - - - {toHumanReadableSize(userStats[u.id].assetSizes)} /{" "} - {u.storageQuota - ? toHumanReadableSize(u.storageQuota) - : t("admin.users_list.unlimited")} - - - {u.role && t(`common.roles.${u.role}`)} - - - {u.localUser ? : } - - - ( - { - await deleteUser({ userId: u.id }); - setDialogOpen(false); - }} - > - Delete - - )} - > - - - - - - + + + {t("common.name")} + {t("common.email")} + {t("admin.users_list.num_bookmarks")} + {t("admin.users_list.asset_sizes")} + {t("common.role")} + {t("admin.users_list.local_user")} + {t("common.actions")} + + + + {users.map((u) => ( + + {u.name} + {u.email} + + {userStats[u.id].numBookmarks} /{" "} + {u.bookmarkQuota ?? t("admin.users_list.unlimited")} + + + {toHumanReadableSize(userStats[u.id].assetSizes)} /{" "} + {u.storageQuota + ? toHumanReadableSize(u.storageQuota) + : t("admin.users_list.unlimited")} + + + {u.role && t(`common.roles.${u.role}`)} + + + {u.localUser ? : } + + + ( + { + await deleteUser({ userId: u.id }); + setDialogOpen(false); + }} > - - - - + )} + > + - - - - - - - ))} - -
-
-
- - - - -
+ + + + + + + + + + + + + + + + ))} + + +
+ ); } -- cgit v1.2.3-70-g09d2