aboutsummaryrefslogtreecommitdiffstats
path: root/apps/web/app
diff options
context:
space:
mode:
Diffstat (limited to 'apps/web/app')
-rw-r--r--apps/web/app/dashboard/@modal/(.)preview/[bookmarkId]/page.tsx35
-rw-r--r--apps/web/app/dashboard/@modal/[...catchAll]/page.tsx3
-rw-r--r--apps/web/app/dashboard/@modal/default.tsx3
-rw-r--r--apps/web/app/dashboard/layout.tsx3
-rw-r--r--apps/web/app/dashboard/preview/[bookmarkId]/page.tsx20
5 files changed, 60 insertions, 4 deletions
diff --git a/apps/web/app/dashboard/@modal/(.)preview/[bookmarkId]/page.tsx b/apps/web/app/dashboard/@modal/(.)preview/[bookmarkId]/page.tsx
new file mode 100644
index 00000000..432e7a6c
--- /dev/null
+++ b/apps/web/app/dashboard/@modal/(.)preview/[bookmarkId]/page.tsx
@@ -0,0 +1,35 @@
+"use client";
+
+import { useState } from "react";
+import { useRouter } from "next/navigation";
+import BookmarkPreview from "@/components/dashboard/preview/BookmarkPreview";
+import { Dialog, DialogContent } from "@/components/ui/dialog";
+
+export default function BookmarkPreviewPage({
+ params,
+}: {
+ params: { bookmarkId: string };
+}) {
+ const router = useRouter();
+
+ const [open, setOpen] = useState(true);
+
+ const setOpenWithRouter = (value: boolean) => {
+ setOpen(value);
+ if (!value) {
+ router.back();
+ }
+ };
+
+ return (
+ <Dialog open={open} onOpenChange={setOpenWithRouter}>
+ <DialogContent
+ className="h-[90%] max-w-[90%] overflow-hidden p-0"
+ hideCloseBtn={true}
+ onOpenAutoFocus={(e) => e.preventDefault()}
+ >
+ <BookmarkPreview bookmarkId={params.bookmarkId} />
+ </DialogContent>
+ </Dialog>
+ );
+}
diff --git a/apps/web/app/dashboard/@modal/[...catchAll]/page.tsx b/apps/web/app/dashboard/@modal/[...catchAll]/page.tsx
new file mode 100644
index 00000000..1fd97c20
--- /dev/null
+++ b/apps/web/app/dashboard/@modal/[...catchAll]/page.tsx
@@ -0,0 +1,3 @@
+export default function CatchAll() {
+ return null;
+}
diff --git a/apps/web/app/dashboard/@modal/default.tsx b/apps/web/app/dashboard/@modal/default.tsx
new file mode 100644
index 00000000..6ddf1b76
--- /dev/null
+++ b/apps/web/app/dashboard/@modal/default.tsx
@@ -0,0 +1,3 @@
+export default function Default() {
+ return null;
+}
diff --git a/apps/web/app/dashboard/layout.tsx b/apps/web/app/dashboard/layout.tsx
index 3b6908f8..23c379cb 100644
--- a/apps/web/app/dashboard/layout.tsx
+++ b/apps/web/app/dashboard/layout.tsx
@@ -7,8 +7,10 @@ import serverConfig from "@hoarder/shared/config";
export default async function Dashboard({
children,
+ modal,
}: Readonly<{
children: React.ReactNode;
+ modal: React.ReactNode;
}>) {
return (
<div className="flex min-h-screen w-screen flex-col sm:h-screen sm:flex-row">
@@ -21,6 +23,7 @@ export default async function Dashboard({
<MobileSidebar />
<Separator />
</div>
+ {modal}
<div className="container min-h-screen p-4">{children}</div>
</main>
</div>
diff --git a/apps/web/app/dashboard/preview/[bookmarkId]/page.tsx b/apps/web/app/dashboard/preview/[bookmarkId]/page.tsx
index 6cac7377..236f5447 100644
--- a/apps/web/app/dashboard/preview/[bookmarkId]/page.tsx
+++ b/apps/web/app/dashboard/preview/[bookmarkId]/page.tsx
@@ -1,18 +1,30 @@
+import { notFound } from "next/navigation";
import BookmarkPreview from "@/components/dashboard/preview/BookmarkPreview";
import { api } from "@/server/api/client";
+import { TRPCError } from "@trpc/server";
export default async function BookmarkPreviewPage({
params,
}: {
params: { bookmarkId: string };
}) {
- const bookmark = await api.bookmarks.getBookmark({
- bookmarkId: params.bookmarkId,
- });
+ let bookmark;
+ try {
+ bookmark = await api.bookmarks.getBookmark({
+ bookmarkId: params.bookmarkId,
+ });
+ } catch (e) {
+ if (e instanceof TRPCError) {
+ if (e.code === "NOT_FOUND") {
+ notFound();
+ }
+ }
+ throw e;
+ }
return (
<div className="max-h-screen">
- <BookmarkPreview initialData={bookmark} />
+ <BookmarkPreview bookmarkId={bookmark.id} initialData={bookmark} />
</div>
);
}