diff --git a/apps/hub/app/(app)/_components/Events.tsx b/apps/hub/app/(app)/_components/Events.tsx
new file mode 100644
index 00000000..2fcc767f
--- /dev/null
+++ b/apps/hub/app/(app)/_components/Events.tsx
@@ -0,0 +1,56 @@
+import { getServerSession } from "../../api/auth/[...nextauth]/auth";
+import { PrismaClient } from "@repo/db";
+import { KursItem } from "../events/_components/item";
+
+export default async () => {
+ const prisma = new PrismaClient();
+ const session = await getServerSession();
+ if (!session) return null;
+ const user = await prisma.user.findUnique({
+ where: {
+ id: session.user.id,
+ },
+ });
+ if (!user) return null;
+
+ const events = await prisma.event.findMany({
+ include: {
+ appointments: {
+ where: {
+ appointmentDate: {
+ gte: new Date(),
+ },
+ },
+ },
+ participants: {
+ where: {
+ userId: user.id,
+ },
+ },
+ },
+ });
+ const userAppointments = await prisma.eventAppointment.findMany({
+ where: {
+ Participants: {
+ some: {
+ userId: user.id,
+ },
+ },
+ },
+ });
+
+ return (
+
+ {events.map((event) => {
+ return (
+
+ );
+ })}
+
+ );
+};
diff --git a/apps/hub/app/(app)/_components/Header.tsx b/apps/hub/app/(app)/_components/Header.tsx
index 8a9bfddd..d914c62c 100644
--- a/apps/hub/app/(app)/_components/Header.tsx
+++ b/apps/hub/app/(app)/_components/Header.tsx
@@ -6,7 +6,7 @@ interface HeaderProps {
handleCheckboxChange: (event: React.ChangeEvent) => void;
}
-export const Header = ({ isChecked, handleCheckboxChange }: HeaderProps) => {
+export default ({ isChecked, handleCheckboxChange }: HeaderProps) => {
const session = useSession();
return (
diff --git a/apps/hub/app/(app)/_components/Logbook.tsx b/apps/hub/app/(app)/_components/Logbook.tsx
new file mode 100644
index 00000000..899f32c3
--- /dev/null
+++ b/apps/hub/app/(app)/_components/Logbook.tsx
@@ -0,0 +1,66 @@
+import SortableTable from "../../_components/Table";
+
+export default async () => {
+ const columns = [
+ {
+ header: "Station",
+ accessorKey: "publicId",
+ },
+ {
+ header: "Einsatz Start",
+ accessorKey: "firstname",
+ },
+ {
+ header: "Einsatz Ende",
+ accessorKey: "lastname",
+ },
+ {
+ header: "Flugzeit",
+ accessorKey: "email",
+ },
+ ];
+
+ const data: any[] = [
+ {
+ publicId: "Station 1",
+ firstname: "01.01.2021 12:00",
+ lastname: "01.01.2021 13:04",
+ email: "01h 04m",
+ },
+ {
+ publicId: "Station 1",
+ firstname: "01.01.2021 12:00",
+ lastname: "01.01.2021 13:04",
+ email: "01h 04m",
+ },
+ {
+ publicId: "Station 1",
+ firstname: "01.01.2021 12:00",
+ lastname: "01.01.2021 13:04",
+ email: "01h 04m",
+ },
+ {
+ publicId: "Station 1",
+ firstname: "01.01.2021 12:00",
+ lastname: "01.01.2021 13:04",
+ email: "01h 04m",
+ },
+ {
+ publicId: "Station 1",
+ firstname: "01.01.2021 12:00",
+ lastname: "01.01.2021 13:04",
+ email: "01h 04m",
+ },
+ ];
+
+ return (
+ <>
+
+ >
+ );
+};
diff --git a/apps/hub/app/(app)/_components/StatsClientWrapper.tsx b/apps/hub/app/(app)/_components/StatsClientWrapper.tsx
new file mode 100644
index 00000000..6a2385b9
--- /dev/null
+++ b/apps/hub/app/(app)/_components/StatsClientWrapper.tsx
@@ -0,0 +1,25 @@
+"use client";
+
+import { useState } from "react";
+import Header from "./Header";
+import Stats from "./stats";
+
+export default () => {
+ const [isChecked, setIsChecked] = useState(true);
+
+ const handleCheckboxChange = (event: React.ChangeEvent) => {
+ setIsChecked(event.target.checked);
+ };
+
+ return (
+ <>
+
+
+
+
+ >
+ );
+};
diff --git a/apps/hub/app/(app)/_components/stats.tsx b/apps/hub/app/(app)/_components/stats.tsx
index b5c6ad2e..b43d4da9 100644
--- a/apps/hub/app/(app)/_components/stats.tsx
+++ b/apps/hub/app/(app)/_components/stats.tsx
@@ -1,129 +1,129 @@
import { PlaneIcon } from "lucide-react";
interface StatsProps {
- isChecked: boolean;
+ isChecked: boolean;
}
-export const Stats = ({ isChecked }: StatsProps) => {
- return isChecked ? PilotStats() : DispoStats();
+export default ({ isChecked }: StatsProps) => {
+ return isChecked ? : ;
};
export const PilotStats = (): JSX.Element => {
- return (
-
-
-
-
Einsätze geflogen
-
127
-
Du bist damit unter den top 5%!
-
+ return (
+
+
+
+
Einsätze geflogen
+
127
+
Du bist damit unter den top 5%!
+
-
-
-
Pilot Login Zeit
-
35h 12m
-
Mehr als 58% aller anderen User!
-
+
+
+
Pilot Login Zeit
+
35h 12m
+
Mehr als 58% aller anderen User!
+
-
-
-
Christoph 31
-
- War bisher dein Rettungsmittel der Wahl
-
-
- 87 Stationen warten noch auf dich!
-
-
-
- );
+
+
+
Christoph 31
+
+ War bisher dein Rettungsmittel der Wahl
+
+
+ 87 Stationen warten noch auf dich!
+
+
+
+ );
};
export const DispoStats = (): JSX.Element => {
- return (
-
-
-
-
Einsätze disponiert
-
578
-
Du bist damit unter den top 9%!
-
+ return (
+
+
+
+
Einsätze disponiert
+
578
+
Du bist damit unter den top 9%!
+
-
-
-
Disponent Login Zeit
-
53h 12m
-
Mehr als 69% aller anderen User!
-
+
+
+
Disponent Login Zeit
+
53h 12m
+
Mehr als 69% aller anderen User!
+
-
-
-
Christoph Berlin
-
Wurde von dir am meisten Disponiert
-
- 43 Stationen warten auf deine Einsätze!
-
-
-
- );
+
+
+
Christoph Berlin
+
Wurde von dir am meisten Disponiert
+
+ 43 Stationen warten auf deine Einsätze!
+
+
+
+ );
};
diff --git a/apps/hub/app/(app)/page.tsx b/apps/hub/app/(app)/page.tsx
index 9573b411..26404e00 100644
--- a/apps/hub/app/(app)/page.tsx
+++ b/apps/hub/app/(app)/page.tsx
@@ -1,8 +1,8 @@
-"use client";
-
-import { useState } from "react";
-import { Header } from "./_components/Header";
-import { Stats } from "./_components/stats";
+import Logbook from "./_components/Logbook";
+import { ArrowRight, NotebookText, Award, RocketIcon } from "lucide-react";
+import Link from "next/link";
+import Events from "./_components/Events";
+import StatsClientWrapper from "./_components/StatsClientWrapper";
/*
✔️ Einlog-Zeit
@@ -15,21 +15,45 @@ Aktive Events / Mandatory Events
*/
export default function Home() {
- const [isChecked, setIsChecked] = useState(true);
-
- const handleCheckboxChange = (event: React.ChangeEvent) => {
- setIsChecked(event.target.checked);
- };
-
return (
-
-
-
+
+
+
+
+
+
+
+ Logbook
+
+
+ Zum vollständigen Logbook
+
+
+
+
+
+
+
+
+
+ Verdiente Abzeichen
+
+
+ Badges
+
+
+
+
+
+ Laufende Events & Kurse
+
+
+
);
}
diff --git a/apps/hub/app/_components/Nav.tsx b/apps/hub/app/_components/Nav.tsx
index d9cbbbb5..91a525d0 100644
--- a/apps/hub/app/_components/Nav.tsx
+++ b/apps/hub/app/_components/Nav.tsx
@@ -1,10 +1,10 @@
import {
HomeIcon,
- PersonIcon,
GearIcon,
ExitIcon,
LockClosedIcon,
RocketIcon,
+ ReaderIcon,
} from "@radix-ui/react-icons";
import Link from "next/link";
@@ -22,6 +22,18 @@ export const VerticalNav = () => {
Events & Kurse
+
+
+
+ Logbook
+
+
+
+
+
+ Einstellungen
+
+
@@ -41,12 +53,6 @@ export const VerticalNav = () => {
-
-
-
- Einstellungen
-
-
);
};