Fix minor Bugs,

This commit is contained in:
2026-02-04 14:27:35 +01:00
parent 4063d7ac3c
commit 9cda2a6879
15 changed files with 58 additions and 100 deletions

6
.idea/dataSources.xml generated
View File

@@ -2,10 +2,10 @@
<project version="4"> <project version="4">
<component name="DataSourceManagerImpl" format="xml" multifile-model="true"> <component name="DataSourceManagerImpl" format="xml" multifile-model="true">
<data-source source="LOCAL" name="ticket_sys@localhost" uuid="3d7ee8f1-4863-4cbc-8c64-6945c4151623"> <data-source source="LOCAL" name="ticket_sys@localhost" uuid="3d7ee8f1-4863-4cbc-8c64-6945c4151623">
<driver-ref>mysql.8</driver-ref> <driver-ref>mariadb</driver-ref>
<synchronize>true</synchronize> <synchronize>true</synchronize>
<jdbc-driver>com.mysql.cj.jdbc.Driver</jdbc-driver> <jdbc-driver>org.mariadb.jdbc.Driver</jdbc-driver>
<jdbc-url>jdbc:mysql://localhost:3306/ticket_sys</jdbc-url> <jdbc-url>jdbc:mariadb://localhost:3306/ticket_sys</jdbc-url>
<working-dir>$ProjectFileDir$</working-dir> <working-dir>$ProjectFileDir$</working-dir>
</data-source> </data-source>
</component> </component>

View File

@@ -2,5 +2,6 @@
<project version="4"> <project version="4">
<component name="DataSourcePerFileMappings"> <component name="DataSourcePerFileMappings">
<file url="file://$APPLICATION_CONFIG_DIR$/consoles/db/3d7ee8f1-4863-4cbc-8c64-6945c4151623/console.sql" value="3d7ee8f1-4863-4cbc-8c64-6945c4151623" /> <file url="file://$APPLICATION_CONFIG_DIR$/consoles/db/3d7ee8f1-4863-4cbc-8c64-6945c4151623/console.sql" value="3d7ee8f1-4863-4cbc-8c64-6945c4151623" />
<file url="file://$APPLICATION_CONFIG_DIR$/consoles/db/3d7ee8f1-4863-4cbc-8c64-6945c4151623/console_1.sql" value="3d7ee8f1-4863-4cbc-8c64-6945c4151623" />
</component> </component>
</project> </project>

View File

@@ -7,6 +7,7 @@ import {getCategories, Ticket} from "@/components/Tickets";
import {sendRequestwTokenClient} from "@/app/actions/auth"; import {sendRequestwTokenClient} from "@/app/actions/auth";
import {getUser} from "@/components/getUser"; import {getUser} from "@/components/getUser";
import {useRouter} from "next/navigation"; import {useRouter} from "next/navigation";
import {revalidatePathClient} from "@/components/revalidatePathClient/revalidatePathClient";
export default function Page({ export default function Page({
params, params,
@@ -64,7 +65,6 @@ export default function Page({
const formAction = (e: FormData) => { const formAction = (e: FormData) => {
// Wenn du die Daten aus dem e: FormData Objekt ziehen willst (wie bisher):
const ticket: Ticket = { const ticket: Ticket = {
status: Number(e.get("status")), status: Number(e.get("status")),
priority: Number(e.get("priority")), priority: Number(e.get("priority")),
@@ -74,7 +74,7 @@ export default function Page({
username: currentUser || "none", username: currentUser || "none",
}; };
sendRequestwTokenClient(`/ticket/create`, "POST",JSON.stringify(ticket)) sendRequestwTokenClient(`/ticket/create`, "POST",JSON.stringify(ticket))
router.push("/tickets") revalidatePathClient("/tickets","page").then( async () => router.push("/tickets",))
}; };
if (!currentUser) { if (!currentUser) {
@@ -151,7 +151,7 @@ export default function Page({
onChange={handleChange} onChange={handleChange}
/> />
</div> </div>
<Button type={"submit"} className={"w-min p-4 h-min m-auto text-xl"}>Bearbeiten</Button> <Button type={"submit"} className={"w-min p-4 h-min m-auto text-xl"}>Erstellen</Button>
</Form> </Form>
</SingleCard> </SingleCard>
</div> </div>

View File

@@ -6,6 +6,8 @@ import { Button } from "@/components/Button";
import {DetailedTicket, getCategories, Ticket} from "@/components/Tickets"; import {DetailedTicket, getCategories, Ticket} from "@/components/Tickets";
import { getTicket } from "@/components/Tickets/getTicket"; import { getTicket } from "@/components/Tickets/getTicket";
import {sendRequestwTokenClient} from "@/app/actions/auth"; import {sendRequestwTokenClient} from "@/app/actions/auth";
import {revalidatePathClient} from "@/components/revalidatePathClient/revalidatePathClient";
import {router} from "next/client";
export default function Page({ export default function Page({
params, params,
@@ -51,10 +53,8 @@ export default function Page({
}; };
const formAction = (e: FormData) => { const formAction = (e: FormData) => {
// Hier kannst du die Daten an den Server schicken
console.log("Form submitted with:", currentTicket); console.log("Form submitted with:", currentTicket);
// Wenn du die Daten aus dem e: FormData Objekt ziehen willst (wie bisher):
const ticket: Ticket = { const ticket: Ticket = {
status: Number(e.get("status")), status: Number(e.get("status")),
priority: Number(e.get("priority")), priority: Number(e.get("priority")),
@@ -63,8 +63,12 @@ export default function Page({
description: e.get("description")?.toString() || "none", description: e.get("description")?.toString() || "none",
username: currentTicket?.username || "none", username: currentTicket?.username || "none",
}; };
sendRequestwTokenClient(`/ticket/update/${ticketId}`, "POST",JSON.stringify(ticket))
alert("Gespeichert!"); const asyncRedirect = async () => {
await revalidatePathClient(`/tickets/${ticketId}`,"page")
await router.push("/tickets")
}
sendRequestwTokenClient(`/ticket/update/${ticketId}`, "POST",JSON.stringify(ticket)).then(asyncRedirect)
}; };
if (!currentTicket) return <div>Lade Ticket...</div>; if (!currentTicket) return <div>Lade Ticket...</div>;

View File

@@ -12,7 +12,6 @@ export default async function Page() {
<a>Deine Tickets</a> <a>Deine Tickets</a>
</SingleCard> </SingleCard>
<TicketTable/> <TicketTable/>
<a></a>
</> </>
); );
} }

View File

@@ -1,44 +0,0 @@
import type {Metadata} from "next";
import {Geist, Geist_Mono} from "next/font/google";
import "@/app/globals.css";
import React from "react";
import {Header} from "@/components/Header/Header";
import {Footer} from "@/components/Footer";
const geistSans = Geist({
variable: "--font-geist-sans",
subsets: ["latin"],
});
const geistMono = Geist_Mono({
variable: "--font-geist-mono",
subsets: ["latin"],
});
export const metadata: Metadata = {
title: "Create Next App",
description: "Generated by create next app",
};
export default function RootLayout({
children,
}: Readonly<{
children: React.ReactNode;
}>) {
return (
<html lang="de" suppressHydrationWarning>
<body
className={`${geistSans.variable} ${geistMono.variable} antialiased flex flex-col min-h-screen`}
suppressHydrationWarning
>
<Header/>
<main className={"flex grow"}>
{children}
</main>
<Footer/>
</body>
</html>
);
}

12
src/app/not-found.tsx Normal file
View File

@@ -0,0 +1,12 @@
import {Link} from "@/components/Link";
import {SingleCard} from "@/components/SingleCard/SingleCard";
import React from "react";
export default async function NotFound(): Promise<React.JSX.Element> {
return (
<SingleCard className={"flex flex-col"}>
<a>Sadly This Feature is not implemented yet!</a>
<Link href={"/home"}>Go Back</Link>
</SingleCard>
)
}

View File

@@ -15,7 +15,6 @@ export const verifySession = cache(async () => {
if (!cookie || resp === null) { if (!cookie || resp === null) {
return {isAuth: false, token: cookie} return {isAuth: false, token: cookie}
} }
console.log("hello world")
const is_valid = (await (resp as Response).json()) as TokenIsValid const is_valid = (await (resp as Response).json()) as TokenIsValid
return {isAuth: is_valid.is_valid, token: cookie} return {isAuth: is_valid.is_valid, token: cookie}

View File

@@ -25,7 +25,7 @@ export function Row({
> >
<td>{ticketname}</td> <td>{ticketname}</td>
<td>{`${StateMapping[status]}`}</td> <td>{`${StateMapping[status]}`}</td>
<td>{`${PrioMapping[priority]}`}</td> <td>{`${PrioMapping[priority -1]}`}</td>
<td>{category}</td> <td>{category}</td>
<td>{username}</td> <td>{username}</td>
</tr> </tr>

View File

@@ -1,50 +1,12 @@
import React from "react"; import React from "react";
import {Row} from "@/components/TicketTable"; import {Row} from "@/components/TicketTable";
import {Ticket} from "@/components/Tickets";
import {getTickets} from "@/components/Tickets/getTickets"; import {getTickets} from "@/components/Tickets/getTickets";
import Add from "@/components/svg/add";
import {Link} from "@/components/Link";
export async function TicketTable() { export async function TicketTable() {
const tickets = await getTickets(); const tickets = await getTickets();
console.log(tickets);
const _mockData: Ticket[] = [{
"ticketID": 1,
"ticketname": "ADAQ",
"username": "admin",
"status": 1,
"priority": 5,
"category": "Crack",
"description": "string"
},
{
"ticketID": 2,
"ticketname": "ADAQ",
"username": "admin",
"status": 1,
"priority": 5,
"category": "Crack",
"description": "string"
},
{
"ticketID": 3,
"ticketname": "ADAQ",
"username": "admin",
"status": 1,
"priority": 5,
"category": "Crack",
"description": "string"
},
{
"ticketID": 4,
"ticketname": "ADAQ",
"username": "admin",
"status": 1,
"priority": 5,
"category": "Crack",
"description": "string"
}]
return ( return (
<div className="flex flex-col w-full px-8"> <div className="flex flex-col w-full px-8">
@@ -60,13 +22,15 @@ export async function TicketTable() {
</thead> </thead>
<tbody> <tbody>
{tickets ? tickets.map((item, i) => ( {tickets ? tickets.map((item, i) => (
<Row key={`${item.ticketname}-${i}`} ticketID={item.ticketID} ticketname={item.ticketname} <Row key={`${item.ticketname}-${i}`}
ticketID={item.ticketID} ticketname={item.ticketname}
username={item.username} username={item.username}
status={item.status} priority={item.priority} category={item.category}/> status={item.status} priority={item.priority} category={item.category}/>
)): (<tr><td>There are no Tickets available</td></tr>)} )): (<tr><td>There are no Tickets available</td></tr>)}
</tbody> </tbody>
</table> </table>
<Link href={"/new/ticket"} className={"w-min p-1 pl-auto"}><Add/></Link>
</div> </div>
) )
} }

View File

@@ -1,10 +1,11 @@
import React from "react"; import React from "react";
import {Row} from "@/components/TicketTable"; import {Row} from "@/components/TicketTable";
import {RequestTicket} from "@/components/RequestTickets"; import {Ticket} from "@/components/Tickets";
export async function UserTable() { export async function UserTable() {
const mockData: RequestTicket[] = [{ const mockData: Ticket[] = [{
"ticketID": 1, "ticketID": 1,
"ticketname": "ADAQ", "ticketname": "ADAQ",
"username": "admin", "username": "admin",

View File

@@ -0,0 +1 @@
export * from "./revalidatePathClient"

View File

@@ -0,0 +1,6 @@
'use server'
import {revalidatePath} from "next/cache";
export async function revalidatePathClient(path: string, type?: "layout" | "page"): Promise<void> {
revalidatePath(path,type)
}

View File

@@ -0,0 +1,15 @@
import * as React from "react"
import { SVGProps } from "react"
const Add = (props: SVGProps<SVGSVGElement>) => (
<svg
xmlns="http://www.w3.org/2000/svg"
width={40}
height={40}
fill="#FFF"
viewBox="0 -960 960 960"
{...props}
>
<path d="M442.12-442.12H193.3v-75.76h248.82v-248.98h75.76v248.98h248.98v75.76H517.88v248.82h-75.76v-248.82Z" />
</svg>
)
export default Add