aboutsummaryrefslogtreecommitdiffstats
path: root/packages/shared
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--packages/shared-react/hooks/lists.ts15
-rw-r--r--packages/shared/types/lists.ts13
2 files changed, 28 insertions, 0 deletions
diff --git a/packages/shared-react/hooks/lists.ts b/packages/shared-react/hooks/lists.ts
index 4dd9bc2b..1a98cac5 100644
--- a/packages/shared-react/hooks/lists.ts
+++ b/packages/shared-react/hooks/lists.ts
@@ -36,6 +36,21 @@ export function useEditBookmarkList(
});
}
+export function useMergeLists(
+ ...opts: Parameters<typeof api.lists.merge.useMutation>
+) {
+ const apiUtils = api.useUtils();
+ return api.lists.merge.useMutation({
+ ...opts[0],
+ onSuccess: (res, req, meta) => {
+ apiUtils.lists.list.invalidate();
+ apiUtils.bookmarks.getBookmarks.invalidate({ listId: req.targetId });
+ apiUtils.lists.stats.invalidate();
+ return opts[0]?.onSuccess?.(res, req, meta);
+ },
+ });
+}
+
export function useAddBookmarkToList(
...opts: Parameters<typeof api.lists.addToList.useMutation>
) {
diff --git a/packages/shared/types/lists.ts b/packages/shared/types/lists.ts
index 474405ee..7ef5687c 100644
--- a/packages/shared/types/lists.ts
+++ b/packages/shared/types/lists.ts
@@ -85,3 +85,16 @@ export const zEditBookmarkListSchemaWithValidation = zEditBookmarkListSchema
"Smart lists cannot have unqualified terms (aka full text search terms) in the query",
path: ["query"],
});
+
+export const zMergeListSchema = z
+ .object({
+ sourceId: z.string(),
+ targetId: z.string(),
+ deleteSourceAfterMerge: z.boolean(),
+ })
+ .refine((val) => val.sourceId !== val.targetId, {
+ message: "Cannot merge a list into itself",
+ path: ["targetId"],
+ });
+
+export type ZMergeList = z.infer<typeof zMergeListSchema>;