diff --git a/src/router/index.ts b/src/router/index.ts index a3e7c00..d7cf344 100644 --- a/src/router/index.ts +++ b/src/router/index.ts @@ -91,7 +91,7 @@ const router = createRouter({ { path: "", name: "admin-operation-default", - redirect: { name: "admin-operation-mission" }, + redirect: { name: "admin-operation-mission-default" }, }, { path: "mission", @@ -104,14 +104,14 @@ const router = createRouter({ path: "", name: "admin-operation-mission-default", component: () => import("@/views/admin/operation/mission/MissionList.vue"), - meta: { type: "read", section: "operation" }, + meta: { type: "read", section: "operation", module: "mission" }, beforeEnter: [abilityAndNavUpdate], }, { path: ":id", name: "admin-operation-mission-form", component: () => import("@/views/admin/operation/mission/MissionOverview.vue"), - meta: { type: "read", section: "operation", module: "force" }, + meta: { type: "read", section: "operation", module: "mission" }, beforeEnter: [abilityAndNavUpdate], }, ], diff --git a/src/stores/admin/operation/connection.ts b/src/stores/admin/operation/connection.ts index e067a6a..1059862 100644 --- a/src/stores/admin/operation/connection.ts +++ b/src/stores/admin/operation/connection.ts @@ -1,7 +1,7 @@ import { defineStore } from "pinia"; import { io, type Socket } from "socket.io-client"; import { useNotificationStore } from "../../notification"; -import { url } from "../../../serverCom"; +import { refreshToken, url } from "../../../serverCom"; export const useConnectionStore = defineStore("connection", { state: () => { @@ -20,16 +20,16 @@ export const useConnectionStore = defineStore("connection", { this.connection = io(url, { reconnection: true, reconnectionDelayMax: 10000, - auth: { - token: localStorage.getItem("accessToken"), + auth: (cb) => { + cb({ token: localStorage.getItem("accessToken") }); }, }); this.connection.on("connect", () => { - notificationStore.push("Erfolg", `Verbindung aufgebaut`, "success"); + notificationStore.push("Socket-Erfolg", `Verbindung aufgebaut`, "success"); }); - this.connection.on("connect_error", () => { - notificationStore.push("Fehler", `Verbindung fehlgeschlagen`, "error"); + this.connection.on("connect_error", (err) => { + this.handleError(err, true); }); this.connection.on("disconnecting", () => { this.connection?.disconnect(); @@ -38,26 +38,50 @@ export const useConnectionStore = defineStore("connection", { this.$reset(); }); this.connection.on("warning", (msg: string) => { - notificationStore.push("Warnung", msg, "warning"); + notificationStore.push("Socket-Warnung", msg, "warning"); }); this.connection.on("error", (msg: string) => { - notificationStore.push("Fehler", msg, "error"); + this.handleError({ + name: "Error", + message: msg, + }); }); this.connection.on("reconnect", (attemptNumber) => { - notificationStore.push("Reconnect", `Reconnect erfolgreich`, "success"); + notificationStore.push("Socket-Reconnect", `Reconnect erfolgreich`, "success"); }); this.connection.on("reconnect_attempt", (attemptNumber) => { - notificationStore.push("Reconnect-Versuch", `Reconnect-Versuch Nr.${attemptNumber}`, "info"); + notificationStore.push("Socket-Reconnect-Versuch", `Reconnect-Versuch Nr.${attemptNumber}`, "info"); }); this.connection.on("reconnect_error", (error) => { - notificationStore.push("Warnung", "Reconnect fehlgeschlagen", "warning"); + notificationStore.push("Socket-Warnung", "Reconnect fehlgeschlagen", "warning"); }); this.connection.on("reconnect_failed", () => { - notificationStore.push("Fehler", "Reconnect-Versuche erfolglos beendet", "error"); + notificationStore.push("Socket-Fehler", "Reconnect-Versuche erfolglos beendet", "error"); }); }, disconnectClient(): void { this.connection?.disconnect(); }, + handleError(err: Error, onConnect = false) { + const notificationStore = useNotificationStore(); + + if (err.message == "xhr poll error") { + notificationStore.push("Socket-Netzwerk-Fehler", "Reconnect Versuch in 10s", "error"); + } else if (err.message == "Token expired") { + notificationStore.push("Session", "Session wird verlängert", "info"); + refreshToken() + .then(() => { + notificationStore.push("Session", "Session erfolgreich verlängert", "success"); + this.connection?.disconnect().connect(); + }) + .catch(() => { + notificationStore.push("Session-Fehler", "Anmeldung wurde nicht verlängert", "error"); + }); + } else if (onConnect) { + notificationStore.push("Socket-Fehler", `Verbindung fehlgeschlagen`, "error"); + } else { + notificationStore.push("Socket-Fehler", err.message, "error"); + } + }, }, });