aboutsummaryrefslogtreecommitdiffstats
path: root/packages
diff options
context:
space:
mode:
Diffstat (limited to 'packages')
-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
-rw-r--r--packages/web/app/dashboard/settings/page.tsx1
-rw-r--r--packages/web/lib/providers.tsx2
-rw-r--r--packages/web/package.json1
-rw-r--r--packages/web/server/api/trpc.ts5
8 files changed, 30 insertions, 15 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>
);
}
diff --git a/packages/web/app/dashboard/settings/page.tsx b/packages/web/app/dashboard/settings/page.tsx
index e8799583..95637d8c 100644
--- a/packages/web/app/dashboard/settings/page.tsx
+++ b/packages/web/app/dashboard/settings/page.tsx
@@ -1,4 +1,3 @@
-import { Button } from "@/components/ui/button";
import ApiKeySettings from "./components/ApiKeySettings";
export default async function Settings() {
return (
diff --git a/packages/web/lib/providers.tsx b/packages/web/lib/providers.tsx
index e81645dd..d14d4d96 100644
--- a/packages/web/lib/providers.tsx
+++ b/packages/web/lib/providers.tsx
@@ -5,6 +5,7 @@ import React, { useState } from "react";
import { api } from "./trpc";
import { loggerLink } from "@trpc/client";
import { httpBatchLink } from "@trpc/client";
+import superjson from "superjson";
export default function Providers({ children }: { children: React.ReactNode }) {
const [queryClient] = React.useState(() => new QueryClient());
@@ -20,6 +21,7 @@ export default function Providers({ children }: { children: React.ReactNode }) {
httpBatchLink({
// TODO: Change this to be a full URL exposed as a client side setting
url: `/api/trpc`,
+ transformer: superjson,
}),
],
}),
diff --git a/packages/web/package.json b/packages/web/package.json
index 724845f5..8ec38a0b 100644
--- a/packages/web/package.json
+++ b/packages/web/package.json
@@ -38,6 +38,7 @@
"react-dom": "^18",
"react-hook-form": "^7.50.1",
"server-only": "^0.0.1",
+ "superjson": "^2.2.1",
"tailwind-merge": "^2.2.1",
"tailwindcss-animate": "^1.0.7",
"zod": "^3.22.4",
diff --git a/packages/web/server/api/trpc.ts b/packages/web/server/api/trpc.ts
index 1f4eb775..7c4af452 100644
--- a/packages/web/server/api/trpc.ts
+++ b/packages/web/server/api/trpc.ts
@@ -1,5 +1,6 @@
import { TRPCError, initTRPC } from "@trpc/server";
import { User } from "next-auth";
+import superjson from "superjson";
export type Context = {
user: User | null;
@@ -9,7 +10,9 @@ export type Context = {
// since it's not very descriptive.
// For instance, the use of a t variable
// is common in i18n libraries.
-const t = initTRPC.context<Context>().create();
+const t = initTRPC.context<Context>().create({
+ transformer: superjson,
+});
export const createCallerFactory = t.createCallerFactory;
// Base router and procedure helpers
export const router = t.router;