|
|
@@ -0,0 +1,75 @@
|
|
|
+import { ApiClientError } from "@/lib/frontend/apiClient";
|
|
|
+
|
|
|
+/**
|
|
|
+ * mapExplorerError
|
|
|
+ *
|
|
|
+ * Centralized error-to-UI mapping for the Explorer.
|
|
|
+ *
|
|
|
+ * Important:
|
|
|
+ * - All returned strings are user-facing => German.
|
|
|
+ * - We intentionally do NOT expose raw backend messages to the UI.
|
|
|
+ *
|
|
|
+ * @param {unknown} err
|
|
|
+ * @returns {null | {
|
|
|
+ * kind: "unauthenticated"|"forbidden"|"notfound"|"generic",
|
|
|
+ * title: string,
|
|
|
+ * description: string
|
|
|
+ * }}
|
|
|
+ */
|
|
|
+export function mapExplorerError(err) {
|
|
|
+ if (!err) return null;
|
|
|
+
|
|
|
+ // Standard backend/client errors
|
|
|
+ if (err instanceof ApiClientError) {
|
|
|
+ if (err.code === "AUTH_UNAUTHENTICATED") {
|
|
|
+ return {
|
|
|
+ kind: "unauthenticated",
|
|
|
+ title: "Sitzung abgelaufen",
|
|
|
+ description:
|
|
|
+ "Ihre Sitzung ist abgelaufen. Sie werden zum Login weitergeleitet.",
|
|
|
+ };
|
|
|
+ }
|
|
|
+
|
|
|
+ if (err.code === "AUTH_FORBIDDEN_BRANCH") {
|
|
|
+ return {
|
|
|
+ kind: "forbidden",
|
|
|
+ title: "Kein Zugriff",
|
|
|
+ description:
|
|
|
+ "Sie haben keine Berechtigung, diese Niederlassung zu öffnen.",
|
|
|
+ };
|
|
|
+ }
|
|
|
+
|
|
|
+ if (err.code === "FS_NOT_FOUND") {
|
|
|
+ return {
|
|
|
+ kind: "notfound",
|
|
|
+ title: "Nicht gefunden",
|
|
|
+ description:
|
|
|
+ "Dieser Pfad existiert nicht (mehr). Bitte wählen Sie eine andere Ebene.",
|
|
|
+ };
|
|
|
+ }
|
|
|
+
|
|
|
+ if (err.code === "CLIENT_NETWORK_ERROR") {
|
|
|
+ return {
|
|
|
+ kind: "generic",
|
|
|
+ title: "Netzwerkfehler",
|
|
|
+ description:
|
|
|
+ "Bitte prüfen Sie Ihre Verbindung und versuchen Sie es erneut.",
|
|
|
+ };
|
|
|
+ }
|
|
|
+
|
|
|
+ return {
|
|
|
+ kind: "generic",
|
|
|
+ title: "Fehler",
|
|
|
+ description:
|
|
|
+ "Beim Laden ist ein Fehler aufgetreten. Bitte versuchen Sie es erneut.",
|
|
|
+ };
|
|
|
+ }
|
|
|
+
|
|
|
+ // Unknown errors
|
|
|
+ return {
|
|
|
+ kind: "generic",
|
|
|
+ title: "Fehler",
|
|
|
+ description:
|
|
|
+ "Beim Laden ist ein Fehler aufgetreten. Bitte versuchen Sie es erneut.",
|
|
|
+ };
|
|
|
+}
|