enhancement
major
minor
defect
critical
major
minor
minor
#30197
React-Tabelle: Datumszelle im In-Place-Edit übernimmt jeden Tastatur-Zwischenstand (z. B. Jahr 0002)
Problem
In Tabellen mit In-Place-Bearbeitung von Datumszellen (Spalte vom Typ tl.core:Date, eingebauter Datumseditor ReactDatePickerControl, natives <input type="date">) wird der Wert bei jedem Change-Event des Browsers übernommen und sofort gespeichert. Der Browser feuert Change, sobald alle Segmente ein gültiges Datum ergeben. Beim Tippen der Jahreszahl entstehen dadurch Zwischenwerte wie 0002.
Beobachtet:
- In-Place-Zelle in einer Baumtabelle: Tippt man „01032027“ in eine leere Zelle, wird 01.03.0002 gespeichert. Die restliche Eingabe geht verloren.
- Segment leeren (Backspace): Es kommt zwischendurch null an.
- Formular bzw. Row-Edit-Tabelle mit Speichern-Befehl: korrekt. Der vollständige Wert bleibt im Feld, gespeichert wird erst mit „Speichern“.
Das Problem betrifft also die sofort speichernde In-Place-Bearbeitung in Tabellen.
Version: 8.0.0-alpha12, tl-layout-react.
Reproduktion
- Tabelle mit bearbeitbarer Datumsspalte im In-Place-Modus (Wert wird beim Ändern sofort geschrieben).
- In eine leere Zelle per Tastatur „01032027“ tippen.
- Erwartet: Gespeichert wird 01.03.2027, beim Verlassen der Zelle bzw. mit Enter.
- Tatsächlich: Gespeichert wird 01.03.0002, danach ist die Eingabe abgebrochen.
Erwartet
- Bei Tastatureingabe wird der Wert einer Datumszelle erst beim Verlassen (blur) bzw. mit Enter übernommen, analog zu setSendValueOnBlur(true) bei Zahl- und Textfeldern.
- Auswahl im Datumsdialog bzw. Einfügen übernimmt sofort.
- Ein leerer Zwischenwert beim Bearbeiten eines Segments wird nicht übernommen.
Auswirkung
Die Massenpflege von Terminen direkt in Tabellen (in Prime z. B. Phasentermine je Position) speichert falsche Daten. Bis zur Lösung bleibt nur die Eingabe über den Datumsdialog, das Einfügen eines vollständigen Datums oder ein Formular mit „Speichern“.
Lösung
Datumsfelder der React-UI (Datum, Uhrzeit, Datum mit Uhrzeit) verhalten sich beim Tippen wie Zahl- und Textfelder, in Tabellen wie in Formularen:
- Tastatureingabe wird zurückgehalten und erst beim Verlassen des Feldes oder mit Enter übernommen. Zwischenstände wie das Jahr 0002 oder ein leeres Segment erreichen den Server nicht.
- Auswahl im Datumsdialog und Einfügen werden sofort übernommen.
- Unvollständige Eingabe (z. B. Jahr noch leer) beim Verlassen bzw. Enter wird verworfen; das Feld zeigt wieder den zuletzt gespeicherten Wert. Eine halb getippte Eingabe löscht also nie einen gespeicherten Wert.
Technisch:
- DatePickerState erweitert TypingFieldState (sendValueOnBlur, debounceMs, commitEdits).
- ReactDatePickerControl setzt sendValueOnBlur für alle Datumsfelder und meldet abgeschlossene Bearbeitungen (commitsEdits()), wie ReactNumberInputControl.
- TLDatePicker nutzt useTLTypingField; eine Änderung ohne vorausgehende Bearbeitungstaste (Datumsdialog, Einfügen) wird sofort gesendet.
- Der MUI-Adapter MuiDatePickerAdapter folgt denselben Regeln: Tippen (onChange) wird zurückgehalten, die Auswahl im Picker (onAccept) sofort gesendet.
- Die React-Demo enthält eine Tabelle mit In-Place-bearbeitbarer Datumsspalte.