| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114 |
- import { ApiClientError } from "@/lib/frontend/apiClient";
- const DEFAULT_GENERIC = Object.freeze({
- kind: "generic",
- title: "Fehler",
- description:
- "Beim Laden der Suche ist ein Fehler aufgetreten. Bitte versuchen Sie es erneut.",
- });
- const DEFAULT_VALIDATION = Object.freeze({
- kind: "validation",
- title: "Ungültige Eingabe",
- description: "Bitte prüfen Sie Ihre Eingaben und versuchen Sie es erneut.",
- });
- const VALIDATION_MAP = Object.freeze({
- VALIDATION_SEARCH_MISSING_FILTER: {
- title: "Kein Suchbegriff",
- description: "Bitte geben Sie einen Suchbegriff ein.",
- },
- VALIDATION_SEARCH_BRANCH: {
- title: "Niederlassung fehlt",
- description: "Bitte wählen Sie eine Niederlassung aus.",
- },
- VALIDATION_SEARCH_BRANCHES: {
- title: "Niederlassungen fehlen",
- description: "Bitte wählen Sie mindestens eine Niederlassung aus.",
- },
- VALIDATION_SEARCH_SCOPE: {
- title: "Ungültiger Suchbereich",
- description: "Bitte wählen Sie einen gültigen Suchbereich aus.",
- },
- VALIDATION_SEARCH_LIMIT: {
- title: "Ungültige Seitengröße",
- description:
- "Die Anzahl der Ergebnisse pro Seite ist ungültig. Bitte versuchen Sie es erneut.",
- },
- VALIDATION_SEARCH_CURSOR: {
- title: "Ungültige Paginierung",
- description:
- "Die nächsten Ergebnisse konnten nicht geladen werden. Bitte starten Sie die Suche erneut.",
- },
- VALIDATION_SEARCH_DATE: {
- title: "Ungültiger Zeitraum",
- description: "Bitte prüfen Sie den Zeitraum und versuchen Sie es erneut.",
- },
- VALIDATION_SEARCH_RANGE: {
- title: "Ungültiger Zeitraum",
- description: "Das Startdatum darf nicht nach dem Enddatum liegen.",
- },
- });
- /**
- * mapSearchError
- *
- * Centralized error-to-UI mapping for Search UI (RHL-024).
- *
- * 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"|"validation"|"generic",
- * title: string,
- * description: string
- * }}
- */
- export function mapSearchError(err) {
- if (!err) return null;
- 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, diesen Suchbereich zu verwenden.",
- };
- }
- if (String(err.code || "").startsWith("VALIDATION_")) {
- const mapped = VALIDATION_MAP[err.code];
- return {
- kind: "validation",
- title: mapped?.title || DEFAULT_VALIDATION.title,
- description: mapped?.description || DEFAULT_VALIDATION.description,
- };
- }
- if (err.code === "CLIENT_NETWORK_ERROR") {
- return {
- kind: "generic",
- title: "Netzwerkfehler",
- description:
- "Bitte prüfen Sie Ihre Verbindung und versuchen Sie es erneut.",
- };
- }
- return DEFAULT_GENERIC;
- }
- return DEFAULT_GENERIC;
- }
|