Bugfixes: Zähler/Bankkarte/Ausweis/Zählerstand-Modal editierbar

Vier weitere Vorkommen desselben Anti-Patterns wie beim
AddressModal-Fix vom 2026-06-03: setFormData(getInitialFormData())
unbedingt im Render-Body, getriggert durch formData.X !== prop.X.
Jeder Tastendruck setzte den State zurück → kein Editieren möglich.

Fix in MeterModal (meterNumber), BankCardModal (iban),
IdentityDocumentModal (documentNumber), MeterReadingModal (value):
nach useEffect mit [entity?.id]-Dependency umgezogen.
This commit is contained in:
2026-06-08 20:54:40 +02:00
parent 523eab30d5
commit 60851450f6
2 changed files with 29 additions and 12 deletions
+9
View File
@@ -97,6 +97,15 @@ isolierte Instanz (keine Multi-Tenancy im Code), Provisioning + Abrechnung
## ✅ Erledigt
- [x] **🐞 Modal-Felder ließen sich nicht editieren (Zähler/Bankkarte/Ausweis/Zählerstand)**
- Vier identische Vorkommen desselben Anti-Patterns wie beim
AddressModal-Fix von 2026-06-03: `setFormData(getInitialFormData())`
im Render-Body, getriggert durch `formData.X !== prop.X`. Jeder
Tastendruck setzte den State zurück.
- Fix in allen vier Modals (MeterModal, BankCardModal,
IdentityDocumentModal, MeterReadingModal): nach `useEffect` mit
`[<entity>?.id]`-Dependency umgezogen.
- [x] **🐞 JpgToPdfModal: PDF blieb trotz vorherigem Fix bei 20+ MB**
- Stage-Test: 2 Handy-JPGs → 23 MB PDF. Ursache: Smartphone-Fotos
haben 4000-6000 px Kante (24 MP), das vergrößert die JPEG-Datei
+20 -12
View File
@@ -2679,10 +2679,12 @@ function BankCardModal({
const isPending = createMutation.isPending || updateMutation.isPending;
// Update form when bankCard prop changes
if (isEditing && formData.iban !== bankCard.iban) {
// Re-Init nur beim Wechsel zur anderen Karte nicht bei jedem
// Tastendruck (das löste vorher Reset auf DB-Wert aus).
useEffect(() => {
setFormData(getInitialFormData());
}
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [bankCard?.id]);
return (
<Modal isOpen={isOpen} onClose={onClose} title={isEditing ? 'Bankkarte bearbeiten' : 'Bankkarte hinzufügen'}>
@@ -2829,10 +2831,12 @@ function DocumentModal({
const isPending = createMutation.isPending || updateMutation.isPending;
// Update form when document prop changes
if (isEditing && formData.documentNumber !== document.documentNumber) {
// Re-Init nur beim Wechsel zum anderen Ausweis nicht bei jedem
// Tastendruck (das löste vorher Reset auf DB-Wert aus).
useEffect(() => {
setFormData(getInitialFormData());
}
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [document?.id]);
return (
<Modal isOpen={isOpen} onClose={onClose} title={isEditing ? 'Ausweis bearbeiten' : 'Ausweis hinzufügen'}>
@@ -3039,10 +3043,12 @@ function MeterModal({
const isPending = createMutation.isPending || updateMutation.isPending;
// Update form when meter prop changes
if (isEditing && formData.meterNumber !== meter.meterNumber) {
// Re-Init nur beim Wechsel zum anderen Zähler nicht bei jedem
// Tastendruck (das löste vorher Reset auf DB-Wert aus).
useEffect(() => {
setFormData(getInitialFormData());
}
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [meter?.id]);
const noDeliveryAddresses = deliveryAddresses.length === 0;
const successorLocked = !isEditing && formData.isSuccessor && !!predecessor;
@@ -3276,10 +3282,12 @@ function MeterReadingModal({
const isPending = createMutation.isPending || updateMutation.isPending;
// Update form when reading prop changes
if (isEditing && formData.value !== reading.value.toString()) {
// Re-Init nur beim Wechsel zum anderen Zählerstand nicht bei
// jedem Tastendruck (das löste vorher Reset auf DB-Wert aus).
useEffect(() => {
setFormData(getInitialFormData());
}
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [reading?.id]);
return (
<Modal isOpen={isOpen} onClose={onClose} title={isEditing ? 'Zählerstand bearbeiten' : 'Zählerstand erfassen'}>