From 379c49b2cd6d081cbe593c969b6f2128b60407c9 Mon Sep 17 00:00:00 2001 From: Mohamed Bassem Date: Sun, 2 Mar 2025 10:46:23 +0000 Subject: feat(web): Show list stats in the sidebar --- packages/shared-react/hooks/bookmarks.ts | 4 ++++ packages/shared-react/hooks/lists.ts | 2 ++ packages/trpc/routers/lists.ts | 11 +++++++++++ 3 files changed, 17 insertions(+) (limited to 'packages') diff --git a/packages/shared-react/hooks/bookmarks.ts b/packages/shared-react/hooks/bookmarks.ts index 89715e4f..7339f6c2 100644 --- a/packages/shared-react/hooks/bookmarks.ts +++ b/packages/shared-react/hooks/bookmarks.ts @@ -30,6 +30,7 @@ export function useCreateBookmark( onSuccess: (res, req, meta) => { apiUtils.bookmarks.getBookmarks.invalidate(); apiUtils.bookmarks.searchBookmarks.invalidate(); + apiUtils.lists.stats.invalidate(); return opts[0]?.onSuccess?.(res, req, meta); }, }); @@ -61,6 +62,7 @@ export function useDeleteBookmark( apiUtils.bookmarks.getBookmarks.invalidate(); apiUtils.bookmarks.searchBookmarks.invalidate(); apiUtils.bookmarks.getBookmark.invalidate({ bookmarkId: req.bookmarkId }); + apiUtils.lists.stats.invalidate(); return opts[0]?.onSuccess?.(res, req, meta); }, }); @@ -76,6 +78,7 @@ export function useUpdateBookmark( apiUtils.bookmarks.getBookmarks.invalidate(); apiUtils.bookmarks.searchBookmarks.invalidate(); apiUtils.bookmarks.getBookmark.invalidate({ bookmarkId: req.bookmarkId }); + apiUtils.lists.stats.invalidate(); return opts[0]?.onSuccess?.(res, req, meta); }, }); @@ -138,6 +141,7 @@ export function useUpdateBookmarkTags( apiUtils.bookmarks.getBookmarks.invalidate({ tagId: id }); }); apiUtils.tags.list.invalidate(); + apiUtils.lists.stats.invalidate(); return opts[0]?.onSuccess?.(res, req, meta); }, }); diff --git a/packages/shared-react/hooks/lists.ts b/packages/shared-react/hooks/lists.ts index 46477228..ecb5d408 100644 --- a/packages/shared-react/hooks/lists.ts +++ b/packages/shared-react/hooks/lists.ts @@ -47,6 +47,7 @@ export function useAddBookmarkToList( apiUtils.lists.getListsOfBookmark.invalidate({ bookmarkId: req.bookmarkId, }); + apiUtils.lists.stats.invalidate(); return opts[0]?.onSuccess?.(res, req, meta); }, }); @@ -63,6 +64,7 @@ export function useRemoveBookmarkFromList( apiUtils.lists.getListsOfBookmark.invalidate({ bookmarkId: req.bookmarkId, }); + apiUtils.lists.stats.invalidate(); return opts[0]?.onSuccess?.(res, req, meta); }, }); diff --git a/packages/trpc/routers/lists.ts b/packages/trpc/routers/lists.ts index 59441879..f9e382f2 100644 --- a/packages/trpc/routers/lists.ts +++ b/packages/trpc/routers/lists.ts @@ -106,4 +106,15 @@ export const listsAppRouter = router({ const lists = await List.forBookmark(ctx, input.bookmarkId); return { lists: lists.map((l) => l.list) }; }), + stats: authedProcedure + .output( + z.object({ + stats: z.map(z.string(), z.number()), + }), + ) + .query(async ({ ctx }) => { + const lists = await List.getAll(ctx); + const sizes = await Promise.all(lists.map((l) => l.getSize())); + return { stats: new Map(lists.map((l, i) => [l.list.id, sizes[i]])) }; + }), }); -- cgit v1.2.3-70-g09d2