Skip to content

Commit 1ca8869

Browse files
committed
error banner: add error handling
1 parent ed6ea15 commit 1ca8869

2 files changed

Lines changed: 54 additions & 11 deletions

File tree

src/app/page.tsx

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,26 @@
11
"use client";
22

33
import { CreateRoom } from "@/components/createRoom";
4+
import { ErrorBanner } from "@/components/ErrorBanner";
45
import { useRouter } from "next/navigation";
6+
import { Suspense } from "react";
57

68
export default function Home() {
79
const router = useRouter();
810
return (
9-
<main className="flex h-screen w-screen flex-col items-center justify-center gap-8 p-4">
10-
<header>
11-
<h1 className="text-2xl font-bold tracking-tight text-green-500">
12-
{">"}private_chat
13-
</h1>
14-
<p className="text-sm text-zinc-500">
15-
A private, self-destructing chat room.
16-
</p>
17-
</header>
18-
<CreateRoom router={router} />
19-
</main>
11+
<Suspense>
12+
<main className="flex h-screen w-screen flex-col items-center justify-center gap-8 p-4">
13+
<ErrorBanner />
14+
<header>
15+
<h1 className="text-2xl font-bold tracking-tight text-green-500">
16+
{">"}private_chat
17+
</h1>
18+
<p className="text-sm text-zinc-500">
19+
A private, self-destructing chat room.
20+
</p>
21+
</header>
22+
<CreateRoom router={router} />
23+
</main>
24+
</Suspense>
2025
);
2126
}

src/components/ErrorBanner.tsx

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
import { useSearchParams } from "next/navigation";
2+
3+
export const ErrorBanner = () => {
4+
const searchParams = useSearchParams();
5+
const wasDestroyed = searchParams.get("destroyed") === "true";
6+
const error = searchParams.get("error");
7+
const roomNotFound = error === "room-not-found";
8+
const roomFull = error === "room-full";
9+
10+
return (
11+
<>
12+
{wasDestroyed && (
13+
<div className="border border-red-900 bg-red-950/50 p-4 text-center">
14+
<p className="text-sm font-bold text-red-500">ROOM DESTROYED</p>
15+
<p className="mt-1 text-xs text-zinc-500">
16+
All messages were permanently deleted.
17+
</p>
18+
</div>
19+
)}
20+
{roomNotFound && (
21+
<div className="border border-red-900 bg-red-950/50 p-4 text-center">
22+
<p className="text-sm font-bold text-red-500">ROOM NOT FOUND</p>
23+
<p className="mt-1 text-xs text-zinc-500">
24+
This room may have expired or never existed.
25+
</p>
26+
</div>
27+
)}
28+
{roomFull && (
29+
<div className="border border-red-900 bg-red-950/50 p-4 text-center">
30+
<p className="text-sm font-bold text-red-500">ROOM FULL</p>
31+
<p className="mt-1 text-xs text-zinc-500">
32+
This room is at maximum capacity.
33+
</p>
34+
</div>
35+
)}
36+
</>
37+
);
38+
};

0 commit comments

Comments
 (0)