aboutsummaryrefslogtreecommitdiffstats
path: root/packages
diff options
context:
space:
mode:
authorMohamed Bassem <me@mbassem.com>2025-03-02 10:46:23 +0000
committerMohamed Bassem <me@mbassem.com>2025-03-02 10:46:59 +0000
commit379c49b2cd6d081cbe593c969b6f2128b60407c9 (patch)
treee5b137fe03dd4113b6ec4c05ee15259ff61981f9 /packages
parentfeac3147fe3af648f8f39f339411dbeff116ca6c (diff)
downloadkarakeep-379c49b2cd6d081cbe593c969b6f2128b60407c9.tar.zst
feat(web): Show list stats in the sidebar
Diffstat (limited to 'packages')
-rw-r--r--packages/shared-react/hooks/bookmarks.ts4
-rw-r--r--packages/shared-react/hooks/lists.ts2
-rw-r--r--packages/trpc/routers/lists.ts11
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]])) };
+ }),
});