aboutsummaryrefslogtreecommitdiffstats
path: root/packages/shared-react/hooks/lists.ts
diff options
context:
space:
mode:
authorMohamed Bassem <me@mbassem.com>2024-04-19 00:09:27 +0100
committerGitHub <noreply@github.com>2024-04-19 00:09:27 +0100
commite0999f701cd1834c3d940113cd8dd5247c5fe95f (patch)
treec4169a564ecd3f933e711bcc8ef7db20532174ea /packages/shared-react/hooks/lists.ts
parentdeba31ee010f785a9739fd4df8a64a3056c9593d (diff)
downloadkarakeep-e0999f701cd1834c3d940113cd8dd5247c5fe95f.tar.zst
feature: Nested lists (#110). Fixes #62
* feature: Add support for nested lists * prevent moving the parent to a subtree
Diffstat (limited to 'packages/shared-react/hooks/lists.ts')
-rw-r--r--packages/shared-react/hooks/lists.ts78
1 files changed, 76 insertions, 2 deletions
diff --git a/packages/shared-react/hooks/lists.ts b/packages/shared-react/hooks/lists.ts
index d5654f9f..61e50689 100644
--- a/packages/shared-react/hooks/lists.ts
+++ b/packages/shared-react/hooks/lists.ts
@@ -1,11 +1,44 @@
+import { ZBookmarkList } from "@hoarder/shared/types/lists";
+import {
+ listsToTree,
+ ZBookmarkListRoot,
+} from "@hoarder/shared/utils/listUtils";
+
import { api } from "../trpc";
+export function useCreateBookmarkList(
+ ...opts: Parameters<typeof api.lists.create.useMutation>
+) {
+ const apiUtils = api.useUtils();
+ return api.lists.create.useMutation({
+ ...opts[0],
+ onSuccess: (res, req, meta) => {
+ apiUtils.lists.list.invalidate();
+ return opts[0]?.onSuccess?.(res, req, meta);
+ },
+ });
+}
+
+export function useEditBookmarkList(
+ ...opts: Parameters<typeof api.lists.edit.useMutation>
+) {
+ const apiUtils = api.useUtils();
+ return api.lists.edit.useMutation({
+ ...opts[0],
+ onSuccess: (res, req, meta) => {
+ apiUtils.lists.list.invalidate();
+ apiUtils.lists.get.invalidate({ listId: req.listId });
+ return opts[0]?.onSuccess?.(res, req, meta);
+ },
+ });
+}
+
export function useAddBookmarkToList(
...opts: Parameters<typeof api.lists.addToList.useMutation>
) {
const apiUtils = api.useUtils();
return api.lists.addToList.useMutation({
- ...opts,
+ ...opts[0],
onSuccess: (res, req, meta) => {
apiUtils.bookmarks.getBookmarks.invalidate({ listId: req.listId });
return opts[0]?.onSuccess?.(res, req, meta);
@@ -18,10 +51,51 @@ export function useRemoveBookmarkFromList(
) {
const apiUtils = api.useUtils();
return api.lists.removeFromList.useMutation({
- ...opts,
+ ...opts[0],
onSuccess: (res, req, meta) => {
apiUtils.bookmarks.getBookmarks.invalidate({ listId: req.listId });
return opts[0]?.onSuccess?.(res, req, meta);
},
});
}
+
+export function useDeleteBookmarkList(
+ ...opts: Parameters<typeof api.lists.delete.useMutation>
+) {
+ const apiUtils = api.useUtils();
+ return api.lists.delete.useMutation({
+ ...opts[0],
+ onSuccess: (res, req, meta) => {
+ apiUtils.lists.list.invalidate();
+ apiUtils.lists.get.invalidate({ listId: req.listId });
+ return opts[0]?.onSuccess?.(res, req, meta);
+ },
+ });
+}
+
+export function useBookmarkLists(
+ ...opts: Parameters<typeof api.lists.list.useQuery>
+) {
+ return api.lists.list.useQuery(opts[0], {
+ ...opts[1],
+ select: (data) => {
+ return { data: data.lists, ...listsToTree(data.lists) };
+ },
+ });
+}
+
+export function augmentBookmarkListsWithInitialData(
+ data:
+ | {
+ data: ZBookmarkList[];
+ root: ZBookmarkListRoot;
+ allPaths: ZBookmarkList[][];
+ }
+ | undefined,
+ initialData: ZBookmarkList[],
+) {
+ if (data) {
+ return data;
+ }
+ return { data: initialData, ...listsToTree(initialData) };
+}