From e0999f701cd1834c3d940113cd8dd5247c5fe95f Mon Sep 17 00:00:00 2001 From: Mohamed Bassem Date: Fri, 19 Apr 2024 00:09:27 +0100 Subject: feature: Nested lists (#110). Fixes #62 * feature: Add support for nested lists * prevent moving the parent to a subtree --- packages/shared-react/hooks/lists.ts | 78 +++++++++++++++++++++++++++++++++++- 1 file changed, 76 insertions(+), 2 deletions(-) (limited to 'packages/shared-react/hooks/lists.ts') 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 +) { + 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 +) { + 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 ) { 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 +) { + 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 +) { + 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) }; +} -- cgit v1.2.3-70-g09d2