diff --git a/apps/hub/app/(app)/admin/report/actions.ts b/apps/hub/app/(app)/admin/report/actions.ts index d8aa90ec..27ade445 100644 --- a/apps/hub/app/(app)/admin/report/actions.ts +++ b/apps/hub/app/(app)/admin/report/actions.ts @@ -1,5 +1,5 @@ "use server"; -import { prisma } from "@repo/db"; +import { prisma, User } from "@repo/db"; export const markAsResolved = async (id: number) => { await prisma.report.update({ @@ -28,6 +28,18 @@ export const getReports = async () => { }); }; +export const getUserReports = async (user: User) => { + return prisma.report.findMany({ + where: { + reportedUserId: user.id, + }, + include: { + sender: true, + reported: true, + }, + }); +}; + export const fetchReportDetails = async (id: number) => { return prisma.report.findUnique({ where: { id }, diff --git a/apps/hub/app/(app)/admin/user/[id]/_components/UserReports.tsx b/apps/hub/app/(app)/admin/user/[id]/_components/UserReports.tsx new file mode 100644 index 00000000..dea3edc4 --- /dev/null +++ b/apps/hub/app/(app)/admin/user/[id]/_components/UserReports.tsx @@ -0,0 +1,98 @@ +import { User } from "@repo/db"; +import { Check, Eye, X } from "lucide-react"; +import Link from "next/link"; +import { useEffect, useState } from "react"; +import { getUserReports, handleMarkAsResolved } from "../../../report/actions"; + +export default function UserReports({ user }: { user: User }) { + const [reports, setReports] = useState< + { + id: number; + timestamp: string; + erledigt: boolean; + sender: { + id: string; + firstname: string; + lastname: string; + publicId: string; + }; + }[] + >([]); + + useEffect(() => { + const fetchReports = async (user: User) => { + const reps = await getUserReports(user); + const transformedReports = reps.map((report) => ({ + id: report.id, + timestamp: report.timestamp.toISOString(), + erledigt: report.erledigt, + sender: { + id: report.sender.id, + firstname: report.sender.firstname, + lastname: report.sender.lastname, + publicId: report.sender.publicId, + }, + })); + setReports(transformedReports); + }; + fetchReports(user); + }, [user]); + + return ( +
+ + + + + + + + + + + {reports.map((report) => ( + + + + + + + ))} + +
ErledigtSenderTimeActions
+ {report.erledigt ? ( + + ) : ( + + )} + {`${report.sender.firstname} ${report.sender.lastname} (${report.sender.publicId})`}{new Date(report.timestamp).toLocaleString()} +
+ + + + {!report.erledigt && ( + + )} +
+
+
+ ); +} 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 1a43cda5..7851cf63 100644 --- a/apps/hub/app/(app)/admin/user/[id]/_components/forms.tsx +++ b/apps/hub/app/(app)/admin/user/[id]/_components/forms.tsx @@ -24,6 +24,7 @@ import { min } from "date-fns"; import { cn } from "../../../../../../helper/cn"; import { ChartBarBigIcon, PlaneIcon } from "lucide-react"; import Link from "next/link"; +import UserReports from "./UserReports"; interface ProfileFormProps { user: User; @@ -419,6 +420,7 @@ export const AdminForm = ({ user, dispoTime, pilotTime }: AdminFormProps) => {

Reports

+ ); };