Files
Matthias c1d7a49bc3 feat: add react-resizable-panels dependency and update canvas components for improved layout
- Introduced the react-resizable-panels package to enhance panel resizing capabilities.
- Refactored CanvasPage to utilize CanvasShell for a cleaner layout.
- Updated CanvasSidebar to support a compact mode and improved rendering logic for user entries.
- Enhanced CanvasUserMenu with a compact option for better UI adaptability.
2026-04-01 08:46:26 +02:00

51 lines
1.2 KiB
TypeScript

import { notFound, redirect } from "next/navigation";
import { CanvasShell } from "@/components/canvas/canvas-shell";
import { api } from "@/convex/_generated/api";
import type { Id } from "@/convex/_generated/dataModel";
import { fetchAuthQuery, isAuthenticated } from "@/lib/auth-server";
export default async function CanvasPage({
params,
}: {
params: Promise<{ canvasId: string }>;
}) {
const authenticated = await isAuthenticated();
if (!authenticated) {
redirect("/auth/sign-in");
}
const { canvasId } = await params;
let typedCanvasId: Id<"canvases">;
if (/^\d+$/.test(canvasId)) {
const oneBasedIndex = Number(canvasId);
if (!Number.isSafeInteger(oneBasedIndex) || oneBasedIndex < 1) {
notFound();
}
const canvases = await fetchAuthQuery(api.canvases.list, {});
const selectedCanvas = canvases[oneBasedIndex - 1];
if (!selectedCanvas) {
notFound();
}
typedCanvasId = selectedCanvas._id;
} else {
typedCanvasId = canvasId as Id<"canvases">;
}
try {
const canvas = await fetchAuthQuery(api.canvases.get, {
canvasId: typedCanvasId,
});
if (!canvas) {
notFound();
}
} catch {
notFound();
}
return <CanvasShell canvasId={typedCanvasId} />;
}