From aeecc3327f0d8ea9e06dc391470a8f8d70b031f1 Mon Sep 17 00:00:00 2001 From: duffyduck Date: Fri, 17 Jul 2026 14:45:20 +0200 Subject: [PATCH] SIM-Karten: PIN/PUK-Fehler statt stummer Alert-Meldung MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Der bisherige alert() maskierte die eigentliche Ursache (Vertrag nicht gefunden / Kein Zugriff / Decrypt-Fehler). Ersetzt durch Toast mit Backend-Message + console.error mit Stacktrace, plus Info-Toast wenn die SIM in der DB gar keine PIN/PUK hinterlegt hat. Endpoint (GET /contracts/simcard/:id/credentials) und Auditing unverändert. Co-Authored-By: Claude Opus 4.7 --- .../src/pages/contracts/ContractDetail.tsx | 33 ++++++++++++------- 1 file changed, 21 insertions(+), 12 deletions(-) diff --git a/frontend/src/pages/contracts/ContractDetail.tsx b/frontend/src/pages/contracts/ContractDetail.tsx index 1845af40..d295da0a 100644 --- a/frontend/src/pages/contracts/ContractDetail.tsx +++ b/frontend/src/pages/contracts/ContractDetail.tsx @@ -15,6 +15,7 @@ import Input from '../../components/ui/Input'; import Modal from '../../components/ui/Modal'; import FileUpload from '../../components/ui/FileUpload'; import { Edit, Trash2, Copy, Eye, EyeOff, ArrowLeft, ArrowRight, Download, ExternalLink, Plus, ChevronDown, ChevronUp, Gauge, CheckCircle, Circle, ClipboardList, MessageSquare, Calculator, Info, X, BellOff, Lock, Shield, FileText, Images } from 'lucide-react'; +import toast from 'react-hot-toast'; import JpgToPdfModal from '../../components/ui/JpgToPdfModal'; import { calculateConsumption, calculateCosts, calculateMultiMeterConsumption } from '../../utils/energyCalculations'; import CopyButton, { CopyableBlock } from '../../components/ui/CopyButton'; @@ -122,19 +123,27 @@ function SimCardDisplay({ simCard }: { simCard: SimCard }) { if (showCredentials) { setShowCredentials(false); setCredentials(null); - } else { - setIsLoading(true); - try { - const res = await contractApi.getSimCardCredentials(simCard.id); - if (res.data) { - setCredentials(res.data); - setShowCredentials(true); - } - } catch (err) { - alert('PIN/PUK konnte nicht geladen werden'); - } finally { - setIsLoading(false); + return; + } + setIsLoading(true); + try { + const res = await contractApi.getSimCardCredentials(simCard.id); + if (!res?.data) { + toast.error('Backend lieferte keine PIN/PUK-Daten zurück'); + return; } + if (!res.data.pin && !res.data.puk) { + toast('Für diese SIM sind keine PIN/PUK hinterlegt', { icon: 'ℹ️' }); + } + setCredentials(res.data); + setShowCredentials(true); + } catch (err) { + const msg = err instanceof Error ? err.message : 'Unbekannter Fehler'; + // eslint-disable-next-line no-console + console.error('[SimCardDisplay] getSimCardCredentials failed:', err); + toast.error(`PIN/PUK konnte nicht geladen werden: ${msg}`); + } finally { + setIsLoading(false); } };