This commit is contained in:
PxlLoewe
2025-06-02 12:11:22 -07:00
3 changed files with 96 additions and 39 deletions

View File

@@ -1,19 +1,54 @@
"use client";
import { MessageSquareWarning } from "lucide-react"; import { MessageSquareWarning } from "lucide-react";
import { MessageForm } from "./_components/messageForm"; import { MessageForm } from "./_components/messageForm";
import { PaginatedTable } from "_components/PaginatedTable";
import { ColumnDef } from "@tanstack/react-table";
import { Notam } from "@repo/db";
export default function MessagePage() { export default function MessagePage() {
return ( return (
<div className="grid grid-cols-6 gap-4"> <>
<div className="col-span-full"> <div className="grid grid-cols-6 gap-4">
<p className="text-2xl font-semibold text-left flex items-center gap-2"> <div className="col-span-full">
<MessageSquareWarning className="w-5 h-5" /> Service Nachrichten <p className="text-2xl font-semibold text-left flex items-center gap-2">
</p> <MessageSquareWarning className="w-5 h-5" /> Service Nachrichten
</div> </p>
<div className="card bg-base-200 shadow-xl mb-4 col-span-6"> </div>
<div className="card-body"> <div className="card bg-base-200 shadow-xl mb-4 col-span-6">
<MessageForm /> <div className="card-body">
<MessageForm />
</div>
</div> </div>
</div> </div>
</div> <PaginatedTable
prismaModel="notam"
columns={
[
{
accessorKey: "message",
header: "Nachricht",
},
{
accessorKey: "color",
header: "Status",
cell: ({ row }) => {
const color = row.getValue("color");
return color;
},
},
{
accessorKey: "createdAt",
header: "Erstellt am",
sortDescFirst: false,
cell: ({ cell }) => {
const date = new Date(cell.getValue() as string);
return date.toLocaleDateString();
},
},
] as ColumnDef<Notam>[]
}
/>
</>
); );
} }

View File

@@ -8,8 +8,15 @@ import {
} from "@radix-ui/react-icons"; } from "@radix-ui/react-icons";
import Link from "next/link"; import Link from "next/link";
import { WarningAlert } from "./ui/PageAlert"; import { WarningAlert } from "./ui/PageAlert";
import { getServerSession } from "api/auth/[...nextauth]/auth";
import { Error } from "./Error";
export const VerticalNav = () => { export const VerticalNav = async () => {
const session = await getServerSession();
if (!session?.user) return <Error statusCode={401} title="Benutzer nicht authentifiziert!" />;
const viewAdminMenu = session.user.permissions.some((p) => {
return p.startsWith("ADMIN");
});
return ( return (
<ul className="menu w-64 bg-base-300 p-3 rounded-lg shadow-md font-semibold"> <ul className="menu w-64 bg-base-300 p-3 rounded-lg shadow-md font-semibold">
<li> <li>
@@ -35,34 +42,48 @@ export const VerticalNav = () => {
Einstellungen Einstellungen
</Link> </Link>
</li> </li>
<li> {viewAdminMenu && (
<details open> <li>
<summary> <details open>
<LockClosedIcon /> <summary>
Admin <LockClosedIcon />
</summary> Admin
<ul> </summary>
<li> <ul>
<Link href="/admin/user">Benutzer</Link> {session.user.permissions.includes("ADMIN_USER") && (
</li> <li>
<li> <Link href="/admin/user">Benutzer</Link>
<Link href="/admin/station">Stationen</Link> </li>
</li> )}
<li> {session.user.permissions.includes("ADMIN_STATION") && (
<Link href="/admin/keyword">Stichworte</Link> <li>
</li> <Link href="/admin/station">Stationen</Link>
<li> </li>
<Link href="/admin/event">Events</Link> )}
</li> {session.user.permissions.includes("ADMIN_KEYWORD") && (
<li> <li>
<Link href="/admin/message">Service Nachrichten</Link> <Link href="/admin/keyword">Stichworte</Link>
</li> </li>
<li> )}
<Link href="/admin/report">Reports</Link> {session.user.permissions.includes("ADMIN_EVENT") && (
</li> <li>
</ul> <Link href="/admin/event">Events</Link>
</details> </li>
</li> )}
{session.user.permissions.includes("ADMIN_MESSAGE") && (
<li>
<Link href="/admin/message">Service Nachrichten</Link>
</li>
)}
{session.user.permissions.includes("ADMIN_USER") && (
<li>
<Link href="/admin/report">Reports</Link>
</li>
)}
</ul>
</details>
</li>
)}
</ul> </ul>
); );
}; };

View File

@@ -14,6 +14,7 @@ enum PERMISSION {
AUDIO_ADMIN AUDIO_ADMIN
ADMIN_STATION ADMIN_STATION
ADMIN_KEYWORD ADMIN_KEYWORD
ADMIN_MESSAGE
AUDIO AUDIO
PILOT PILOT
DISPO DISPO