diff --git a/apps/dispatch/app/layout.tsx b/apps/dispatch/app/layout.tsx
index 0e50925f..38bdc89c 100644
--- a/apps/dispatch/app/layout.tsx
+++ b/apps/dispatch/app/layout.tsx
@@ -5,6 +5,7 @@ import { NextAuthSessionProvider } from "./_components/AuthSessionProvider";
import { getServerSession } from "./api/auth/[...nextauth]/auth";
import { Toaster } from "react-hot-toast";
import { QueryProvider } from "_components/QueryProvider";
+import { prisma } from "@repo/db";
import { Error as ErrorComp } from "_components/Error";
const geistSans = localFont({
@@ -27,6 +28,22 @@ export default async function RootLayout({
children: React.ReactNode;
}>) {
const session = await getServerSession();
+
+ const latestNotam = await prisma.notam.findFirst({
+ orderBy: { createdAt: "desc" },
+ });
+
+ let wartungsarbeiten = false;
+ if (
+ latestNotam &&
+ latestNotam.wartungsmodus &&
+ latestNotam.active &&
+ ((latestNotam.showUntilActive && new Date(latestNotam.showUntil) > new Date()) ||
+ !latestNotam.showUntilActive)
+ ) {
+ wartungsarbeiten = true;
+ }
+
return (
)}
- {!session?.user.isBanned && children}
+ {!session?.user.isBanned &&
+ wartungsarbeiten &&
+ !session?.user.permissions.includes("ADMIN_MESSAGE") && (
+
+ )}
+ {!session?.user.isBanned &&
+ (!wartungsarbeiten || session?.user.permissions.includes("ADMIN_MESSAGE")) &&
+ children}
diff --git a/apps/hub/app/_components/ui/PageAlert.tsx b/apps/hub/app/_components/ui/PageAlert.tsx
index 14d30d8c..d2f12840 100644
--- a/apps/hub/app/_components/ui/PageAlert.tsx
+++ b/apps/hub/app/_components/ui/PageAlert.tsx
@@ -11,6 +11,10 @@ const fetchMainMessage = async () => {
export const WarningAlert = async () => {
const mainMessage = await fetchMainMessage();
+ if (mainMessage?.showUntilActive && new Date(mainMessage.showUntil) < new Date()) {
+ return <>>;
+ }
+
let msgColor;
switch (mainMessage?.color) {
case "WARNING":
@@ -29,13 +33,15 @@ export const WarningAlert = async () => {
msgColor = "alert alert-soft ml-3 py-2 flex items-center gap-2";
}
- if (mainMessage?.message == "" || !mainMessage) {
+ if ((mainMessage?.message == "" && !mainMessage?.wartungsmodus) || !mainMessage) {
return <>>;
} else {
return (
- {mainMessage?.message}
+
+ {mainMessage?.wartungsmodus ? "Wartungsmodus aktiv!" : mainMessage?.message}
+
);
}
diff --git a/apps/hub/app/layout.tsx b/apps/hub/app/layout.tsx
index 24f089f5..f1b4d4f1 100644
--- a/apps/hub/app/layout.tsx
+++ b/apps/hub/app/layout.tsx
@@ -5,6 +5,9 @@ import { CustomErrorBoundary } from "_components/ErrorBoundary";
import { Toaster } from "react-hot-toast";
import "./globals.css";
import { QueryProvider } from "_components/QueryClient";
+import { prisma } from "@repo/db";
+import React from "react";
+import { Error as ErrorComp } from "_components/Error";
const geistSans = Geist({
variable: "--font-geist-sans",
@@ -23,20 +26,48 @@ const RootLayout = async ({
}>) => {
const session = await getServerSession();
+ const latestNotam = await prisma.notam.findFirst({
+ orderBy: { createdAt: "desc" },
+ });
+
+ let wartungsarbeiten = false;
+ if (
+ latestNotam &&
+ latestNotam.wartungsmodus &&
+ latestNotam.active &&
+ ((latestNotam.showUntilActive && new Date(latestNotam.showUntil) > new Date()) ||
+ !latestNotam.showUntilActive)
+ ) {
+ wartungsarbeiten = true;
+ }
+
return (
-
-
-
-
- {children}
-
+ )}
+ {(!wartungsarbeiten || session?.user.permissions.includes("ADMIN_MESSAGE")) && (
+ <>
+
+
+
+
+ {children}
+
+ >
+ )}