From 6febe13b3f4ad4eff3f205ece445b3577255bf41 Mon Sep 17 00:00:00 2001 From: MohamedBassem Date: Fri, 16 Feb 2024 20:33:00 +0000 Subject: Migrating to react query for client side queries --- .../app/dashboard/bookmarks/components/AddLink.tsx | 26 +++--- .../bookmarks/components/BookmarkOptions.tsx | 92 +++++++++++----------- .../dashboard/settings/components/AddApiKey.tsx | 18 +++-- .../dashboard/settings/components/DeleteApiKey.tsx | 24 +++--- packages/web/app/layout.tsx | 7 +- 5 files changed, 90 insertions(+), 77 deletions(-) (limited to 'packages/web/app') diff --git a/packages/web/app/dashboard/bookmarks/components/AddLink.tsx b/packages/web/app/dashboard/bookmarks/components/AddLink.tsx index e8ecec35..34f043e7 100644 --- a/packages/web/app/dashboard/bookmarks/components/AddLink.tsx +++ b/packages/web/app/dashboard/bookmarks/components/AddLink.tsx @@ -17,21 +17,19 @@ const formSchema = z.object({ export default function AddLink() { const router = useRouter(); + const bookmarkLinkMutator = api.bookmarks.bookmarkLink.useMutation({ + onSuccess: () => { + router.refresh(); + }, + onError: () => { + toast({ description: "Something went wrong", variant: "destructive" }); + }, + }); const form = useForm>({ resolver: zodResolver(formSchema), }); - async function onSubmit(value: z.infer) { - try { - await api.bookmarks.bookmarkLink.mutate({ url: value.url, type: "link" }); - } catch (e) { - toast({ description: "Something went wrong", variant: "destructive" }); - return; - } - router.refresh(); - } - const onError: SubmitErrorHandler> = (errors) => { toast({ description: Object.values(errors) @@ -43,7 +41,13 @@ export default function AddLink() { return (
- + + bookmarkLinkMutator.mutate({ url: value.url, type: "link" }), + onError, + )} + >
{ - try { - await api.bookmarks.deleteBookmark.mutate({ - bookmarkId: linkId, - }); - + const onError = () => { + toast({ + variant: "destructive", + title: "Something went wrong", + description: "There was a problem with your request.", + }); + }; + const onSettled = () => { + router.refresh(); + }; + const deleteBookmarkMutator = api.bookmarks.deleteBookmark.useMutation({ + onSuccess: () => { toast({ description: "The bookmark has been deleted!", }); - } catch (e) { - toast({ - variant: "destructive", - title: "Something went wrong", - description: "There was a problem with your request.", - }); - } - - router.refresh(); - }; + }, + onError, + onSettled, + }); - const updateBookmark = async (req: ZUpdateBookmarksRequest) => { - try { - await api.bookmarks.updateBookmark.mutate(req); + const updateBookmarkMutator = api.bookmarks.updateBookmark.useMutation({ + onSuccess: () => { toast({ description: "The bookmark has been updated!", }); - } catch (e) { - toast({ - variant: "destructive", - title: "Something went wrong", - description: "There was a problem with your request.", - }); - } + }, + onError, + onSettled, + }); - router.refresh(); - }; - - const crawlBookmark = async () => { - try { - await api.bookmarks.recrawlBookmark.mutate({ - bookmarkId: linkId, - }); + const crawlBookmarkMutator = api.bookmarks.recrawlBookmark.useMutation({ + onSuccess: () => { toast({ description: "Re-fetch has been enqueued!", }); - } catch (e) { - toast({ - variant: "destructive", - title: "Something went wrong", - description: "There was a problem with your request.", - }); - } - - router.refresh(); - }; + }, + onError, + onSettled, + }); return ( @@ -84,7 +68,7 @@ export default function BookmarkOptions({ bookmark }: { bookmark: ZBookmark }) { - updateBookmark({ + updateBookmarkMutator.mutate({ bookmarkId: linkId, favourited: !bookmark.favourited, }) @@ -95,17 +79,29 @@ export default function BookmarkOptions({ bookmark }: { bookmark: ZBookmark }) { - updateBookmark({ bookmarkId: linkId, archived: !bookmark.archived }) + updateBookmarkMutator.mutate({ + bookmarkId: linkId, + archived: !bookmark.archived, + }) } > {bookmark.archived ? "Un-archive" : "Archive"} - + + crawlBookmarkMutator.mutate({ bookmarkId: bookmark.id }) + } + > Refresh - + + deleteBookmarkMutator.mutate({ bookmarkId: bookmark.id }) + } + > Delete diff --git a/packages/web/app/dashboard/settings/components/AddApiKey.tsx b/packages/web/app/dashboard/settings/components/AddApiKey.tsx index f4f2894c..c438f4b1 100644 --- a/packages/web/app/dashboard/settings/components/AddApiKey.tsx +++ b/packages/web/app/dashboard/settings/components/AddApiKey.tsx @@ -53,20 +53,22 @@ function AddApiKeyForm({ onSuccess }: { onSuccess: (key: string) => void }) { name: z.string(), }); const router = useRouter(); + const mutator = api.apiKeys.create.useMutation({ + onSuccess: (resp) => { + onSuccess(resp.key); + router.refresh(); + }, + onError: () => { + toast({ description: "Something went wrong", variant: "destructive" }); + }, + }); const form = useForm>({ resolver: zodResolver(formSchema), }); async function onSubmit(value: z.infer) { - try { - const resp = await api.apiKeys.create.mutate({ name: value.name }); - onSuccess(resp.key); - } catch (e) { - toast({ description: "Something went wrong", variant: "destructive" }); - return; - } - router.refresh(); + mutator.mutate({ name: value.name }); } const onError: SubmitErrorHandler> = (errors) => { diff --git a/packages/web/app/dashboard/settings/components/DeleteApiKey.tsx b/packages/web/app/dashboard/settings/components/DeleteApiKey.tsx index 715b7a2c..bc3e3c92 100644 --- a/packages/web/app/dashboard/settings/components/DeleteApiKey.tsx +++ b/packages/web/app/dashboard/settings/components/DeleteApiKey.tsx @@ -13,9 +13,9 @@ import { DialogTitle, DialogTrigger, } from "@/components/ui/dialog"; -import { api } from "@/lib/trpc"; import { useRouter } from "next/navigation"; import { toast } from "@/components/ui/use-toast"; +import { api } from "@/lib/trpc"; export default function DeleteApiKey({ name, @@ -25,13 +25,15 @@ export default function DeleteApiKey({ id: string; }) { const router = useRouter(); - const deleteKey = async () => { - await api.apiKeys.revoke.mutate({ id }); - toast({ - description: "Key was successfully deleted", - }); - router.refresh(); - }; + const mutator = api.apiKeys.revoke.useMutation({ + onSuccess: () => { + toast({ + description: "Key was successfully deleted", + }); + router.refresh(); + }, + }); + return ( @@ -54,7 +56,11 @@ export default function DeleteApiKey({ - diff --git a/packages/web/app/layout.tsx b/packages/web/app/layout.tsx index a2d34046..f1971b20 100644 --- a/packages/web/app/layout.tsx +++ b/packages/web/app/layout.tsx @@ -3,6 +3,8 @@ import { Inter } from "next/font/google"; import "./globals.css"; import React from "react"; import { Toaster } from "@/components/ui/toaster"; +import Providers from "@/lib/providers"; +import { ReactQueryDevtools } from "@tanstack/react-query-devtools"; const inter = Inter({ subsets: ["latin"] }); @@ -19,7 +21,10 @@ export default function RootLayout({ return ( - {children} + + {children} + + -- cgit v1.2.3-70-g09d2