diff options
| author | Mohamed Bassem <me@mbassem.com> | 2025-03-02 10:46:23 +0000 |
|---|---|---|
| committer | Mohamed Bassem <me@mbassem.com> | 2025-03-02 10:46:59 +0000 |
| commit | 379c49b2cd6d081cbe593c969b6f2128b60407c9 (patch) | |
| tree | e5b137fe03dd4113b6ec4c05ee15259ff61981f9 /packages | |
| parent | feac3147fe3af648f8f39f339411dbeff116ca6c (diff) | |
| download | karakeep-379c49b2cd6d081cbe593c969b6f2128b60407c9.tar.zst | |
feat(web): Show list stats in the sidebar
Diffstat (limited to 'packages')
| -rw-r--r-- | packages/shared-react/hooks/bookmarks.ts | 4 | ||||
| -rw-r--r-- | packages/shared-react/hooks/lists.ts | 2 | ||||
| -rw-r--r-- | packages/trpc/routers/lists.ts | 11 |
3 files changed, 17 insertions, 0 deletions
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]])) }; + }), }); |
