diff --git a/apps/dispatch/app/dispatch/_components/navbar/Navbar.tsx b/apps/dispatch/app/(app)/dispatch/_components/navbar/Navbar.tsx
similarity index 96%
rename from apps/dispatch/app/dispatch/_components/navbar/Navbar.tsx
rename to apps/dispatch/app/(app)/dispatch/_components/navbar/Navbar.tsx
index 9568f968..ca043ebc 100644
--- a/apps/dispatch/app/dispatch/_components/navbar/Navbar.tsx
+++ b/apps/dispatch/app/(app)/dispatch/_components/navbar/Navbar.tsx
@@ -1,6 +1,6 @@
import { Connection } from "./_components/Connection";
/* import { ThemeSwap } from "./_components/ThemeSwap"; */
-import { Audio } from "../../../_components/Audio/Audio";
+import { Audio } from "../../../../_components/Audio/Audio";
/* import { useState } from "react"; */
import { ExitIcon, ExternalLinkIcon } from "@radix-ui/react-icons";
import Link from "next/link";
diff --git a/apps/dispatch/app/dispatch/_components/navbar/_components/Connection.tsx b/apps/dispatch/app/(app)/dispatch/_components/navbar/_components/Connection.tsx
similarity index 98%
rename from apps/dispatch/app/dispatch/_components/navbar/_components/Connection.tsx
rename to apps/dispatch/app/(app)/dispatch/_components/navbar/_components/Connection.tsx
index 1da5f4ac..2496d489 100644
--- a/apps/dispatch/app/dispatch/_components/navbar/_components/Connection.tsx
+++ b/apps/dispatch/app/(app)/dispatch/_components/navbar/_components/Connection.tsx
@@ -1,6 +1,6 @@
"use client";
import { useSession } from "next-auth/react";
-import { useDispatchConnectionStore } from "../../../../_store/dispatch/connectionStore";
+import { useDispatchConnectionStore } from "../../../../../_store/dispatch/connectionStore";
import { useEffect, useRef, useState } from "react";
import { toast } from "react-hot-toast";
import { useMutation } from "@tanstack/react-query";
diff --git a/apps/dispatch/app/dispatch/_components/navbar/_components/ThemeSwap.tsx b/apps/dispatch/app/(app)/dispatch/_components/navbar/_components/ThemeSwap.tsx
similarity index 100%
rename from apps/dispatch/app/dispatch/_components/navbar/_components/ThemeSwap.tsx
rename to apps/dispatch/app/(app)/dispatch/_components/navbar/_components/ThemeSwap.tsx
diff --git a/apps/dispatch/app/dispatch/_components/pannel/MissionForm.tsx b/apps/dispatch/app/(app)/dispatch/_components/pannel/MissionForm.tsx
similarity index 100%
rename from apps/dispatch/app/dispatch/_components/pannel/MissionForm.tsx
rename to apps/dispatch/app/(app)/dispatch/_components/pannel/MissionForm.tsx
diff --git a/apps/dispatch/app/dispatch/_components/pannel/Pannel.tsx b/apps/dispatch/app/(app)/dispatch/_components/pannel/Pannel.tsx
similarity index 100%
rename from apps/dispatch/app/dispatch/_components/pannel/Pannel.tsx
rename to apps/dispatch/app/(app)/dispatch/_components/pannel/Pannel.tsx
diff --git a/apps/dispatch/app/(app)/dispatch/layout.tsx b/apps/dispatch/app/(app)/dispatch/layout.tsx
new file mode 100644
index 00000000..9ef4a9bc
--- /dev/null
+++ b/apps/dispatch/app/(app)/dispatch/layout.tsx
@@ -0,0 +1,27 @@
+import type { Metadata } from "next";
+import Navbar from "./_components/navbar/Navbar";
+import { getServerSession } from "api/auth/[...nextauth]/auth";
+import { Error } from "_components/Error";
+
+export const metadata: Metadata = {
+ title: "VAR: Disponent",
+ description: "Die neue VAR Leitstelle.",
+};
+
+export default async function RootLayout({
+ children,
+}: Readonly<{
+ children: React.ReactNode;
+}>) {
+ const session = await getServerSession();
+
+ if (!session?.user.permissions.includes("DISPO"))
+ return ;
+
+ return (
+ <>
+
+ {children}
+ >
+ );
+}
diff --git a/apps/dispatch/app/dispatch/page.tsx b/apps/dispatch/app/(app)/dispatch/page.tsx
similarity index 81%
rename from apps/dispatch/app/dispatch/page.tsx
rename to apps/dispatch/app/(app)/dispatch/page.tsx
index 4405f8c2..a97702f8 100644
--- a/apps/dispatch/app/dispatch/page.tsx
+++ b/apps/dispatch/app/(app)/dispatch/page.tsx
@@ -1,14 +1,14 @@
"use client";
-import { Pannel } from "dispatch/_components/pannel/Pannel";
+import { Pannel } from "(app)/dispatch/_components/pannel/Pannel";
import { usePannelStore } from "_store/pannelStore";
import { cn } from "@repo/shared-components";
import dynamic from "next/dynamic";
-import { Chat } from "../_components/left/Chat";
-import { Report } from "../_components/left/Report";
+import { Chat } from "../../_components/left/Chat";
+import { Report } from "../../_components/left/Report";
import { SituationBoard } from "_components/left/SituationBoard";
-const Map = dynamic(() => import("../_components/map/Map"), { ssr: false });
+const Map = dynamic(() => import("../../_components/map/Map"), { ssr: false });
const DispatchPage = () => {
const { isOpen } = usePannelStore();
diff --git a/apps/dispatch/app/dispatch/socket.ts b/apps/dispatch/app/(app)/dispatch/socket.ts
similarity index 100%
rename from apps/dispatch/app/dispatch/socket.ts
rename to apps/dispatch/app/(app)/dispatch/socket.ts
diff --git a/apps/dispatch/app/pilot/layout.tsx b/apps/dispatch/app/(app)/layout.tsx
similarity index 71%
rename from apps/dispatch/app/pilot/layout.tsx
rename to apps/dispatch/app/(app)/layout.tsx
index 5e60497e..b26ff919 100644
--- a/apps/dispatch/app/pilot/layout.tsx
+++ b/apps/dispatch/app/(app)/layout.tsx
@@ -1,7 +1,6 @@
import type { Metadata } from "next";
-import Navbar from "./_components/navbar/Navbar";
import { redirect } from "next/navigation";
-import { getServerSession } from "../api/auth/[...nextauth]/auth";
+import { getServerSession } from "api/auth/[...nextauth]/auth";
import { Error } from "_components/Error";
import { prisma } from "@repo/db";
@@ -27,8 +26,9 @@ export default async function RootLayout({
},
});
- if (!session || !session.user.firstname) {
- redirect("/login");
+ if (!session) {
+ console.log(session);
+ return redirect("/logout");
}
if (openPenaltys[0]) {
@@ -37,7 +37,7 @@ export default async function RootLayout({
);
}
@@ -45,7 +45,7 @@ export default async function RootLayout({
);
}
@@ -53,14 +53,5 @@ export default async function RootLayout({
if (!session.user.emailVerified) {
return ;
}
-
- if (!session.user.permissions.includes("PILOT"))
- return ;
-
- return (
- <>
-
- {children}
- >
- );
+ return <>{children}>;
}
diff --git a/apps/dispatch/app/pilot/_components/dme/Dme.tsx b/apps/dispatch/app/(app)/pilot/_components/dme/Dme.tsx
similarity index 100%
rename from apps/dispatch/app/pilot/_components/dme/Dme.tsx
rename to apps/dispatch/app/(app)/pilot/_components/dme/Dme.tsx
diff --git a/apps/dispatch/app/pilot/_components/dme/Melder_NoReflections.png b/apps/dispatch/app/(app)/pilot/_components/dme/Melder_NoReflections.png
similarity index 100%
rename from apps/dispatch/app/pilot/_components/dme/Melder_NoReflections.png
rename to apps/dispatch/app/(app)/pilot/_components/dme/Melder_NoReflections.png
diff --git a/apps/dispatch/app/pilot/_components/dme/reflektion.png b/apps/dispatch/app/(app)/pilot/_components/dme/reflektion.png
similarity index 100%
rename from apps/dispatch/app/pilot/_components/dme/reflektion.png
rename to apps/dispatch/app/(app)/pilot/_components/dme/reflektion.png
diff --git a/apps/dispatch/app/pilot/_components/dme/squad-x15.jpg b/apps/dispatch/app/(app)/pilot/_components/dme/squad-x15.jpg
similarity index 100%
rename from apps/dispatch/app/pilot/_components/dme/squad-x15.jpg
rename to apps/dispatch/app/(app)/pilot/_components/dme/squad-x15.jpg
diff --git a/apps/dispatch/app/pilot/_components/dme/useButtons.ts b/apps/dispatch/app/(app)/pilot/_components/dme/useButtons.ts
similarity index 100%
rename from apps/dispatch/app/pilot/_components/dme/useButtons.ts
rename to apps/dispatch/app/(app)/pilot/_components/dme/useButtons.ts
diff --git a/apps/dispatch/app/pilot/_components/dme/useSounds.ts b/apps/dispatch/app/(app)/pilot/_components/dme/useSounds.ts
similarity index 100%
rename from apps/dispatch/app/pilot/_components/dme/useSounds.ts
rename to apps/dispatch/app/(app)/pilot/_components/dme/useSounds.ts
diff --git a/apps/dispatch/app/pilot/_components/mrt/MRT.png b/apps/dispatch/app/(app)/pilot/_components/mrt/MRT.png
similarity index 100%
rename from apps/dispatch/app/pilot/_components/mrt/MRT.png
rename to apps/dispatch/app/(app)/pilot/_components/mrt/MRT.png
diff --git a/apps/dispatch/app/pilot/_components/mrt/MRT_MESSAGE.png b/apps/dispatch/app/(app)/pilot/_components/mrt/MRT_MESSAGE.png
similarity index 100%
rename from apps/dispatch/app/pilot/_components/mrt/MRT_MESSAGE.png
rename to apps/dispatch/app/(app)/pilot/_components/mrt/MRT_MESSAGE.png
diff --git a/apps/dispatch/app/pilot/_components/mrt/Mrt.tsx b/apps/dispatch/app/(app)/pilot/_components/mrt/Mrt.tsx
similarity index 100%
rename from apps/dispatch/app/pilot/_components/mrt/Mrt.tsx
rename to apps/dispatch/app/(app)/pilot/_components/mrt/Mrt.tsx
diff --git a/apps/dispatch/app/pilot/_components/mrt/mrt.css b/apps/dispatch/app/(app)/pilot/_components/mrt/mrt.css
similarity index 100%
rename from apps/dispatch/app/pilot/_components/mrt/mrt.css
rename to apps/dispatch/app/(app)/pilot/_components/mrt/mrt.css
diff --git a/apps/dispatch/app/pilot/_components/mrt/useButtons.ts b/apps/dispatch/app/(app)/pilot/_components/mrt/useButtons.ts
similarity index 97%
rename from apps/dispatch/app/pilot/_components/mrt/useButtons.ts
rename to apps/dispatch/app/(app)/pilot/_components/mrt/useButtons.ts
index 048fc515..dfaad039 100644
--- a/apps/dispatch/app/pilot/_components/mrt/useButtons.ts
+++ b/apps/dispatch/app/(app)/pilot/_components/mrt/useButtons.ts
@@ -1,7 +1,7 @@
import { ConnectedAircraft, Prisma } from "@repo/db";
import { usePilotConnectionStore } from "_store/pilot/connectionStore";
import { useMrtStore } from "_store/pilot/MrtStore";
-import { pilotSocket } from "pilot/socket";
+import { pilotSocket } from "(app)/pilot/socket";
import { editConnectedAircraftAPI } from "_querys/aircrafts";
import { useEffect } from "react";
import { useMutation } from "@tanstack/react-query";
diff --git a/apps/dispatch/app/pilot/_components/mrt/useSounds.ts b/apps/dispatch/app/(app)/pilot/_components/mrt/useSounds.ts
similarity index 100%
rename from apps/dispatch/app/pilot/_components/mrt/useSounds.ts
rename to apps/dispatch/app/(app)/pilot/_components/mrt/useSounds.ts
diff --git a/apps/dispatch/app/pilot/_components/navbar/Navbar.tsx b/apps/dispatch/app/(app)/pilot/_components/navbar/Navbar.tsx
similarity index 90%
rename from apps/dispatch/app/pilot/_components/navbar/Navbar.tsx
rename to apps/dispatch/app/(app)/pilot/_components/navbar/Navbar.tsx
index a8376f12..e1712fe8 100644
--- a/apps/dispatch/app/pilot/_components/navbar/Navbar.tsx
+++ b/apps/dispatch/app/(app)/pilot/_components/navbar/Navbar.tsx
@@ -1,9 +1,7 @@
"use client";
import { Connection } from "./_components/Connection";
-/* import { ThemeSwap } from "./ThemeSwap"; */
-import { Audio } from "../../../_components/Audio/Audio";
-/* import { useState } from "react"; */
+import { Audio } from "_components/Audio/Audio";
import { ExitIcon, ExternalLinkIcon } from "@radix-ui/react-icons";
import Link from "next/link";
import { Settings } from "_components/navbar/Settings";
diff --git a/apps/dispatch/app/pilot/_components/navbar/_components/Connection.tsx b/apps/dispatch/app/(app)/pilot/_components/navbar/_components/Connection.tsx
similarity index 100%
rename from apps/dispatch/app/pilot/_components/navbar/_components/Connection.tsx
rename to apps/dispatch/app/(app)/pilot/_components/navbar/_components/Connection.tsx
diff --git a/apps/dispatch/app/pilot/_components/navbar/_components/ThemeSwap.tsx b/apps/dispatch/app/(app)/pilot/_components/navbar/_components/ThemeSwap.tsx
similarity index 100%
rename from apps/dispatch/app/pilot/_components/navbar/_components/ThemeSwap.tsx
rename to apps/dispatch/app/(app)/pilot/_components/navbar/_components/ThemeSwap.tsx
diff --git a/apps/dispatch/app/(app)/pilot/layout.tsx b/apps/dispatch/app/(app)/pilot/layout.tsx
new file mode 100644
index 00000000..c734eb8e
--- /dev/null
+++ b/apps/dispatch/app/(app)/pilot/layout.tsx
@@ -0,0 +1,27 @@
+import type { Metadata } from "next";
+import Navbar from "./_components/navbar/Navbar";
+import { getServerSession } from "api/auth/[...nextauth]/auth";
+import { Error } from "_components/Error";
+
+export const metadata: Metadata = {
+ title: "VAR: Pilot",
+ description: "Die neue VAR Leitstelle.",
+};
+
+export default async function RootLayout({
+ children,
+}: Readonly<{
+ children: React.ReactNode;
+}>) {
+ const session = await getServerSession();
+
+ if (!session?.user.permissions.includes("PILOT"))
+ return ;
+
+ return (
+ <>
+
+ {children}
+ >
+ );
+}
diff --git a/apps/dispatch/app/pilot/page.tsx b/apps/dispatch/app/(app)/pilot/page.tsx
similarity index 84%
rename from apps/dispatch/app/pilot/page.tsx
rename to apps/dispatch/app/(app)/pilot/page.tsx
index d16ad76d..6b97554a 100644
--- a/apps/dispatch/app/pilot/page.tsx
+++ b/apps/dispatch/app/(app)/pilot/page.tsx
@@ -1,13 +1,13 @@
"use client";
-import { Mrt } from "pilot/_components/mrt/Mrt";
-import { Chat } from "../_components/left/Chat";
-import { Report } from "../_components/left/Report";
-import { Dme } from "pilot/_components/dme/Dme";
+import { Mrt } from "(app)/pilot/_components/mrt/Mrt";
+import { Chat } from "../../_components/left/Chat";
+import { Report } from "../../_components/left/Report";
+import { Dme } from "(app)/pilot/_components/dme/Dme";
import dynamic from "next/dynamic";
import { ConnectedDispatcher } from "tracker/_components/ConnectedDispatcher";
-const Map = dynamic(() => import("../_components/map/Map"), {
+const Map = dynamic(() => import("_components/map/Map"), {
ssr: false,
});
diff --git a/apps/dispatch/app/pilot/socket.ts b/apps/dispatch/app/(app)/pilot/socket.ts
similarity index 100%
rename from apps/dispatch/app/pilot/socket.ts
rename to apps/dispatch/app/(app)/pilot/socket.ts
diff --git a/apps/dispatch/app/(auth)/login/_components/Login.tsx b/apps/dispatch/app/(auth)/login/_components/Login.tsx
index 93440f59..57c23341 100644
--- a/apps/dispatch/app/(auth)/login/_components/Login.tsx
+++ b/apps/dispatch/app/(auth)/login/_components/Login.tsx
@@ -7,11 +7,11 @@ import { Toaster } from "react-hot-toast";
export const Login = () => {
const [isLoading, setIsLoading] = useState(false);
const searchParams = useSearchParams();
- const { data: session } = useSession();
+ const { data: session, status } = useSession();
const navigate = useRouter();
useEffect(() => {
- if (session) {
+ if (status === "authenticated") {
navigate.push("/");
}
}, [session, navigate]);
diff --git a/apps/dispatch/app/_components/QueryProvider.tsx b/apps/dispatch/app/_components/QueryProvider.tsx
index 2e222dba..de75b3d6 100644
--- a/apps/dispatch/app/_components/QueryProvider.tsx
+++ b/apps/dispatch/app/_components/QueryProvider.tsx
@@ -4,12 +4,12 @@
import { toast } from "react-hot-toast";
import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
import { ReactNode, useEffect, useState } from "react";
-import { dispatchSocket } from "dispatch/socket";
+import { dispatchSocket } from "(app)/dispatch/socket";
import { Mission, NotificationPayload } from "@repo/db";
import { HPGnotificationToast } from "_components/customToasts/HPGnotification";
import { useMapStore } from "_store/mapStore";
import { AdminMessageToast } from "_components/customToasts/AdminMessage";
-import { pilotSocket } from "pilot/socket";
+import { pilotSocket } from "(app)/pilot/socket";
export function QueryProvider({ children }: { children: ReactNode }) {
const mapStore = useMapStore((s) => s);
diff --git a/apps/dispatch/app/_components/navbar/AdminPanel.tsx b/apps/dispatch/app/_components/navbar/AdminPanel.tsx
index 2b9022d7..d5109957 100644
--- a/apps/dispatch/app/_components/navbar/AdminPanel.tsx
+++ b/apps/dispatch/app/_components/navbar/AdminPanel.tsx
@@ -150,21 +150,29 @@ export default function AdminPanel() {
}
onClick={({ reason }) =>
kickPilotMutation.mutate({ id: p.id, reason })
}
/>
}
- onClick={({ reason, until }) =>
- kickPilotMutation.mutate({ id: p.id, reason, bann: true, until })
- }
+ onClick={({ reason, until }) => {
+ if (!until) {
+ toast.error(
+ "Bitte wähle ein Datum aus. Ein permanenter Bann ist nur vom HUB aus möglich.",
+ );
+ return;
+ }
+ kickPilotMutation.mutate({ id: p.id, reason, bann: true, until });
+ }}
/>
|
}
onClick={({ reason }) =>
kickDispatchMutation.mutate({ id: d.id, reason })
}
/>
}
onClick={({ reason, until }) =>
@@ -264,12 +274,6 @@ export default function AdminPanel() {
>
-
) {
- const session = await getServerSession();
- const openPenaltys = await prisma.penalty.findMany({
- where: {
- userId: session?.user.id,
- until: {
- gte: new Date(),
- },
- suspended: false,
-
- type: { in: ["TIME_BAN", "BAN"] },
- },
- });
-
- if (!session || !session.user) {
- redirect("/login");
- }
-
- if (openPenaltys[0]) {
- if (openPenaltys[0].type === "BAN") {
- return (
-
- );
- }
- return (
-
- );
- }
-
- if (!session.user.emailVerified)
- return ;
-
- if (!session.user.permissions.includes("DISPO"))
- return ;
-
- return (
- <>
-
- {children}
- >
- );
-}
diff --git a/apps/dispatch/app/layout.tsx b/apps/dispatch/app/layout.tsx
index c399a84d..867f3528 100644
--- a/apps/dispatch/app/layout.tsx
+++ b/apps/dispatch/app/layout.tsx
@@ -42,8 +42,9 @@ export default async function RootLayout({
style: {
background: "var(--color-base-100)",
color: "var(--color-base-content)",
+ zIndex: 9999,
},
- duration: 4000,
+ duration: 5000,
}}
position="top-left"
reverseOrder={false}
diff --git a/apps/dispatch/app/page.tsx b/apps/dispatch/app/page.tsx
index af959221..90f44de0 100644
--- a/apps/dispatch/app/page.tsx
+++ b/apps/dispatch/app/page.tsx
@@ -8,7 +8,7 @@ export default () => {
const session = useSession();
useEffect(() => {
- if (session.status !== "authenticated") {
+ if (session.status === "unauthenticated") {
router.replace("/login");
return;
}
diff --git a/apps/dispatch/app/tracker/page.tsx b/apps/dispatch/app/tracker/page.tsx
index 2b62dc2c..01e1339f 100644
--- a/apps/dispatch/app/tracker/page.tsx
+++ b/apps/dispatch/app/tracker/page.tsx
@@ -2,9 +2,9 @@
import ModeSwitchDropdown from "_components/navbar/ModeSwitchDropdown";
import { useSession } from "next-auth/react";
import dynamic from "next/dynamic";
-import { ConnectedDispatcher } from "tracker/_components/ConnectedDispatcher";
+import { ConnectedDispatcher } from "./_components/ConnectedDispatcher";
-const Map = dynamic(() => import("../_components/map/Map"), {
+const Map = dynamic(() => import("_components/map/Map"), {
ssr: false,
});
diff --git a/apps/hub/app/(app)/_components/FirstPath.tsx b/apps/hub/app/(app)/_components/FirstPath.tsx
index de0fc873..f3f8a4ac 100644
--- a/apps/hub/app/(app)/_components/FirstPath.tsx
+++ b/apps/hub/app/(app)/_components/FirstPath.tsx
@@ -158,7 +158,7 @@ export const FirstPath = () => {
}
}}
>
- {page === "path" ? "Weiter" : "Pfad auswählen"}
+ {page === "path" ? "Weiter" : "Intro abschließen"}
diff --git a/apps/hub/app/(app)/_components/Stats.tsx b/apps/hub/app/(app)/_components/Stats.tsx
index a747fcdb..e8962ab2 100644
--- a/apps/hub/app/(app)/_components/Stats.tsx
+++ b/apps/hub/app/(app)/_components/Stats.tsx
@@ -256,7 +256,7 @@ export const DispoStats = async () => {
Disponent Login Zeit
- {hours}h {minutes}m
+ {hours}h {minutes}min
diff --git a/apps/hub/app/(app)/admin/user/[id]/_components/forms.tsx b/apps/hub/app/(app)/admin/user/[id]/_components/forms.tsx
index b0085d7c..029a087a 100644
--- a/apps/hub/app/(app)/admin/user/[id]/_components/forms.tsx
+++ b/apps/hub/app/(app)/admin/user/[id]/_components/forms.tsx
@@ -6,10 +6,7 @@ import {
ConnectedAircraft,
ConnectedDispatcher,
DiscordAccount,
- Penalty,
- PenaltyType,
PERMISSION,
- Report,
Station,
User,
} from "@repo/db";
@@ -57,7 +54,7 @@ import { Error } from "_components/Error";
import { useSession } from "next-auth/react";
import { setStandardName } from "../../../../../../helper/discord";
import { penaltyColumns } from "(app)/admin/penalty/columns";
-import { addPenalty, editPenalty, editPenaltys } from "(app)/admin/penalty/actions";
+import { addPenalty, editPenaltys } from "(app)/admin/penalty/actions";
import { reportColumns } from "(app)/admin/report/columns";
interface ProfileFormProps {
@@ -123,26 +120,30 @@ export const ProfileForm: React.FC = ({ user }: ProfileFormPro
{form.formState.errors.lastname && (
{form.formState.errors.lastname?.message}
)}
-
- {form.formState.errors.email && (
- {form.formState.errors.email?.message}
- )}
+ {session.data?.user.permissions.includes("ADMIN_USER_ADVANCED") && (
+ <>
+
+ {form.formState.errors.email && (
+ {form.formState.errors.email?.message}
+ )}
-
+
+ >
+ )}
|