36 lines
1.2 KiB
TypeScript
36 lines
1.2 KiB
TypeScript
// app/portal/rigs/page.tsx
|
|
import { cookies } from "next/headers";
|
|
import { redirect } from "next/navigation";
|
|
import RigsSwitcher from "@/components/portal/RigsSwitcher";
|
|
|
|
type Opt = { id: string | number; label: string };
|
|
|
|
export default async function Page() {
|
|
const jar = await cookies(); // Next 15: async
|
|
const ma_at = jar.get("ma_at")?.value;
|
|
if (!ma_at) {
|
|
redirect("/auth/sign-in?next=/portal/rigs");
|
|
}
|
|
|
|
const DIRECTUS = (process.env.DIRECTUS_URL || "").replace(/\/$/, "");
|
|
const res = await fetch(
|
|
`${DIRECTUS}/items/user_rig_type?fields=id,name&sort=sort`,
|
|
{
|
|
headers: {
|
|
Authorization: `Bearer ${ma_at}`,
|
|
Accept: "application/json",
|
|
"Cache-Control": "no-store",
|
|
},
|
|
cache: "no-store",
|
|
}
|
|
);
|
|
|
|
// Be resilient: if this fails, just show no options so the page still builds
|
|
const json = res.ok ? await res.json().catch(() => ({ data: [] })) : { data: [] };
|
|
const rigTypes: Opt[] = (json?.data ?? []).map((r: any) => ({
|
|
id: r.id,
|
|
label: r.name ?? String(r.id),
|
|
}));
|
|
|
|
return <RigsSwitcher rigTypes={rigTypes} />;
|
|
}
|