aboutsummaryrefslogtreecommitdiffstats
path: root/packages/web/app/dashboard/bookmarks/components
diff options
context:
space:
mode:
authorMohamedBassem <me@mbassem.com>2024-02-20 14:05:53 +0000
committerMohamedBassem <me@mbassem.com>2024-02-20 14:05:53 +0000
commit7c04276bacf6e9ecc0cce4a2ece7a25dc8e5deaa (patch)
tree22064a23a42b37e6b42f4c3cc3f1ff5da3fccdb7 /packages/web/app/dashboard/bookmarks/components
parentfb5b114ec4d42668aeb4fa0dce30125f1cac04e7 (diff)
downloadkarakeep-7c04276bacf6e9ecc0cce4a2ece7a25dc8e5deaa.tar.zst
ui: hydrate the react query cache in the client side components
Diffstat (limited to 'packages/web/app/dashboard/bookmarks/components')
-rw-r--r--packages/web/app/dashboard/bookmarks/components/AddLink.tsx5
-rw-r--r--packages/web/app/dashboard/bookmarks/components/BookmarkOptions.tsx8
-rw-r--r--packages/web/app/dashboard/bookmarks/components/Bookmarks.tsx8
-rw-r--r--packages/web/app/dashboard/bookmarks/components/BookmarksGrid.tsx15
4 files changed, 23 insertions, 13 deletions
diff --git a/packages/web/app/dashboard/bookmarks/components/AddLink.tsx b/packages/web/app/dashboard/bookmarks/components/AddLink.tsx
index 6498b313..7663543f 100644
--- a/packages/web/app/dashboard/bookmarks/components/AddLink.tsx
+++ b/packages/web/app/dashboard/bookmarks/components/AddLink.tsx
@@ -3,7 +3,6 @@
import { Form, FormControl, FormField, FormItem } from "@/components/ui/form";
import { Input } from "@/components/ui/input";
import { Plus } from "lucide-react";
-import { useRouter } from "next/navigation";
import { useForm, SubmitErrorHandler } from "react-hook-form";
import { z } from "zod";
import { zodResolver } from "@hookform/resolvers/zod";
@@ -17,14 +16,14 @@ const formSchema = z.object({
});
export default function AddLink() {
- const router = useRouter();
const { setLoading } = useLoadingCard();
+ const invalidateBookmarksCache = api.useUtils().bookmarks.invalidate;
const bookmarkLinkMutator = api.bookmarks.bookmarkLink.useMutation({
onMutate: () => {
setLoading(true);
},
onSuccess: () => {
- router.refresh();
+ invalidateBookmarksCache();
},
onError: () => {
toast({ description: "Something went wrong", variant: "destructive" });
diff --git a/packages/web/app/dashboard/bookmarks/components/BookmarkOptions.tsx b/packages/web/app/dashboard/bookmarks/components/BookmarkOptions.tsx
index 1360f966..a72478c1 100644
--- a/packages/web/app/dashboard/bookmarks/components/BookmarkOptions.tsx
+++ b/packages/web/app/dashboard/bookmarks/components/BookmarkOptions.tsx
@@ -2,8 +2,7 @@
import { useToast } from "@/components/ui/use-toast";
import { api } from "@/lib/trpc";
-import { ZBookmark, ZUpdateBookmarksRequest } from "@/lib/types/api/bookmarks";
-import { useRouter } from "next/navigation";
+import { ZBookmark } from "@/lib/types/api/bookmarks";
import { Button } from "@/components/ui/button";
import {
DropdownMenu,
@@ -15,9 +14,10 @@ import { Archive, MoreHorizontal, RotateCw, Star, Trash2 } from "lucide-react";
export default function BookmarkOptions({ bookmark }: { bookmark: ZBookmark }) {
const { toast } = useToast();
- const router = useRouter();
const linkId = bookmark.id;
+ const invalidateBookmarksCache = api.useUtils().bookmarks.invalidate;
+
const onError = () => {
toast({
variant: "destructive",
@@ -26,7 +26,7 @@ export default function BookmarkOptions({ bookmark }: { bookmark: ZBookmark }) {
});
};
const onSettled = () => {
- router.refresh();
+ invalidateBookmarksCache();
};
const deleteBookmarkMutator = api.bookmarks.deleteBookmark.useMutation({
onSuccess: () => {
diff --git a/packages/web/app/dashboard/bookmarks/components/Bookmarks.tsx b/packages/web/app/dashboard/bookmarks/components/Bookmarks.tsx
index 0afb42bd..44495f1f 100644
--- a/packages/web/app/dashboard/bookmarks/components/Bookmarks.tsx
+++ b/packages/web/app/dashboard/bookmarks/components/Bookmarks.tsx
@@ -14,10 +14,12 @@ export default async function Bookmarks({
redirect("/");
}
- const bookmarks = await api.bookmarks.getBookmarks({
+ const query = {
favourited,
archived,
- });
+ };
+
+ const bookmarks = await api.bookmarks.getBookmarks(query);
// TODO: This needs to be polished
return (
@@ -27,7 +29,7 @@ export default async function Bookmarks({
{bookmarks.bookmarks.length == 0 ? (
"No bookmarks"
) : (
- <BookmarksGrid bookmarks={bookmarks.bookmarks} />
+ <BookmarksGrid query={query} bookmarks={bookmarks.bookmarks} />
)}
</div>
</>
diff --git a/packages/web/app/dashboard/bookmarks/components/BookmarksGrid.tsx b/packages/web/app/dashboard/bookmarks/components/BookmarksGrid.tsx
index 1963a980..c1c8f3e0 100644
--- a/packages/web/app/dashboard/bookmarks/components/BookmarksGrid.tsx
+++ b/packages/web/app/dashboard/bookmarks/components/BookmarksGrid.tsx
@@ -3,7 +3,8 @@
import { useLoadingCard } from "@/lib/hooks/use-loading-card";
import BookmarkCardSkeleton from "./BookmarkCardSkeleton";
import LinkCard from "./LinkCard";
-import { ZBookmark } from "@/lib/types/api/bookmarks";
+import { ZBookmark, ZGetBookmarksRequest } from "@/lib/types/api/bookmarks";
+import { api } from "@/lib/trpc";
function renderBookmark(bookmark: ZBookmark) {
switch (bookmark.content.type) {
@@ -12,16 +13,24 @@ function renderBookmark(bookmark: ZBookmark) {
}
}
+export const dynamic = "force-dynamic";
+
export default function BookmarksGrid({
- bookmarks,
+ query,
+ bookmarks: initialBookmarks,
}: {
+ query: ZGetBookmarksRequest;
bookmarks: ZBookmark[];
}) {
+ const { data } = api.bookmarks.getBookmarks.useQuery(query, {
+ initialData: { bookmarks: initialBookmarks },
+ staleTime: Infinity,
+ });
const { loading } = useLoadingCard();
return (
<div className="container grid grid-cols-1 gap-4 sm:grid-cols-1 md:grid-cols-2 lg:grid-cols-3">
{loading && <BookmarkCardSkeleton />}
- {bookmarks.map((b) => renderBookmark(b))}
+ {data.bookmarks.map((b) => renderBookmark(b))}
</div>
);
}