Files
WatchLink/src/app/admin/page.tsx
MrSphay 035a255125
All checks were successful
Build / build (push) Successful in 9m18s
Template Compliance / compliance (push) Successful in 6s
Release Dry Run / release-dry-run (push) Successful in 1m28s
Gate setup and admin navigation
2026-05-15 17:32:26 +02:00

76 lines
2.4 KiB
TypeScript

import { AppShell } from "@/components/app-shell";
import { StatusBadge } from "@/components/status-badge";
import { SYSTEM_PERMISSIONS } from "@/lib/access";
import { requireCurrentUser, userIsAdmin } from "@/lib/session";
import { requireInitialSetup } from "@/lib/setup";
import { rooms } from "@/lib/sample-data";
import { redirect } from "next/navigation";
export default async function AdminPage() {
await requireInitialSetup();
const user = await requireCurrentUser();
if (!userIsAdmin(user)) {
redirect("/dashboard");
}
return (
<AppShell active="Admin" isAdmin>
<header className="topbar">
<div className="title-block">
<h1>Admin</h1>
<p>Manage roles, rooms, permissions, and users.</p>
</div>
<StatusBadge tone="good">Admin</StatusBadge>
</header>
<section className="room-layout">
<section className="panel">
<div className="panel-header">
<h2>Rooms</h2>
<button className="button primary">Create room</button>
</div>
<div className="panel-body">
<table className="table">
<thead>
<tr>
<th>Name</th>
<th>Owner</th>
<th>Access</th>
<th>Status</th>
</tr>
</thead>
<tbody>
{rooms.map((room) => (
<tr key={room.name}>
<td>{room.name}</td>
<td>{room.owner}</td>
<td>{room.visibility}</td>
<td>{room.status}</td>
</tr>
))}
</tbody>
</table>
</div>
</section>
<section className="panel">
<div className="panel-header">
<h2>Permissions</h2>
<StatusBadge>Roles</StatusBadge>
</div>
<div className="panel-body">
{SYSTEM_PERMISSIONS.map((permission) => (
<div className="row" key={permission}>
<div className="row-title">
<strong>{permission}</strong>
<span>Assignable to roles</span>
</div>
<StatusBadge>Enabled</StatusBadge>
</div>
))}
</div>
</section>
</section>
</AppShell>
);
}