64 lines
2.7 KiB
TypeScript
64 lines
2.7 KiB
TypeScript
|
|
import Link from "next/link";
|
||
|
|
import { redirect } from "next/navigation";
|
||
|
|
|
||
|
|
import { registerExternalFile } from "@/lib/external-import";
|
||
|
|
import { firstSearchParam } from "@/utils/external-file";
|
||
|
|
|
||
|
|
export const dynamic = "force-dynamic";
|
||
|
|
|
||
|
|
/**
|
||
|
|
* N8 entry point ที่สอง (ตามคำขอผู้ใช้ 2026-09-22): เข้า `/annotate?fileUrl=&fileId=&typeId=`
|
||
|
|
* โดยตรง — ลงทะเบียนเอกสารแล้ว redirect ต่อไป `/annotate/<id>` ของตัว viewer จริง
|
||
|
|
* (entry เดิมที่หน้า "/" ยังใช้ได้คู่กัน — สัญญาลิงก์รับทั้ง /?fileUrl= และ /annotate?fileUrl=)
|
||
|
|
*/
|
||
|
|
export default async function AnnotateEntryPage({
|
||
|
|
searchParams,
|
||
|
|
}: {
|
||
|
|
searchParams: Record<string, string | string[] | undefined>;
|
||
|
|
}) {
|
||
|
|
const fileUrl = firstSearchParam(searchParams.fileUrl);
|
||
|
|
if (fileUrl) {
|
||
|
|
const result = await registerExternalFile(
|
||
|
|
fileUrl,
|
||
|
|
firstSearchParam(searchParams.fileId),
|
||
|
|
firstSearchParam(searchParams.typeId),
|
||
|
|
);
|
||
|
|
// redirect โยน NEXT_REDIRECT — เรียกนอก try/catch เสมอ
|
||
|
|
if (result.ok) redirect(`/annotate/${result.fileId}`);
|
||
|
|
return (
|
||
|
|
<main className="mx-auto max-w-2xl px-4 py-10 sm:px-8">
|
||
|
|
<div
|
||
|
|
role="alert"
|
||
|
|
className="rounded-xl border border-red-200 bg-red-50 p-4 text-sm text-red-700"
|
||
|
|
>
|
||
|
|
เปิดเอกสารจากลิงก์ไม่สำเร็จ: {result.error}
|
||
|
|
</div>
|
||
|
|
<Link
|
||
|
|
href="/"
|
||
|
|
className="mt-4 inline-block rounded-md bg-primary px-4 py-2 text-sm font-medium text-white transition hover:opacity-90"
|
||
|
|
>
|
||
|
|
กลับหน้ารายการ
|
||
|
|
</Link>
|
||
|
|
</main>
|
||
|
|
);
|
||
|
|
}
|
||
|
|
|
||
|
|
// ไม่มี fileUrl เลย — ไม่มีอะไรให้เปิด (route จริงของ viewer อยู่ที่ /annotate/[id])
|
||
|
|
return (
|
||
|
|
<main className="mx-auto max-w-2xl px-4 py-10 sm:px-8">
|
||
|
|
<div className="rounded-xl border border-slate-200 bg-white p-6 text-sm text-slate-600">
|
||
|
|
ไม่ได้ระบุลิงก์เอกสาร — ใช้ <code className="rounded bg-slate-100 px-1">
|
||
|
|
/annotate?fileUrl=…&fileId=…&typeId=…
|
||
|
|
</code>{" "}
|
||
|
|
หรือเลือกไฟล์จากหน้ารายการ
|
||
|
|
</div>
|
||
|
|
<Link
|
||
|
|
href="/"
|
||
|
|
className="mt-4 inline-block rounded-md bg-primary px-4 py-2 text-sm font-medium text-white transition hover:opacity-90"
|
||
|
|
>
|
||
|
|
กลับหน้ารายการ
|
||
|
|
</Link>
|
||
|
|
</main>
|
||
|
|
);
|
||
|
|
}
|