major
minor
#29089
TL-Script-Funktionen log() und info() um wählbaren Meldungs-Level (INFO, WARN, ERROR) erweitern
#29306
TL Script: dateFormat() should accept an explicit timezone to format Calendar values losslessly
defect
major
#29383
Dead SOCKET_APPENDER (Chainsaw, localhost:4445) in default logging config can stall logging and abort operations under load
minor
#29380
Kontextabhängige Auto-Nummerierung schlägt fehl, wenn Kontext und nummeriertes Objekt in einer Transaktion erzeugt werden
#29390
Teilbaum-Auswahl endet zu früh, wenn die unterste Ebene vom Ebenen-Filter nicht mitgezählt wird
#29393
URL-Routing der React-View-Schicht defekt: ForwardingReactContext delegiert getRouteManager() nicht
#29401
Bilder in einem Bild-Drop-Feld können nicht über das Browser-Kontextmenü kopiert/gespeichert werden
defect
major
#29394
Editable tables in the React UI: generalized row-set bindings for tabular editing in forms
The React UI has no editable standard table yet — only the composition table (CompositionTableControl, rendered by <composition-table> inside a <form>) supports tabular editing. The legacy UI provided the GridComponent for this (exactly the selected row editable while the component is in edit mode).
Instead of porting GridComponent, tabular editing is generalized on top of the existing form editing machinery (FormControl: edit session, lock, save/cancel, dirty tracking, FormValidationModel):
- An editable table is always a FormParticipant inside a <form>. A "standalone grid" is simply a form with a table as its only content.
- The cell-editing mechanics (one TLObjectOverlay per edited row, one AttributeFieldModel per row/column rendered through FieldControlService) are extracted from CompositionTableControl into a reusable controller.
- The row-set semantics are abstracted into a row-set binding that answers: what are the row objects, how is a new row created (and which types are offered), what does removing a row mean at commit time, and what is written back on persist. Implementations:
- Composition: derived entirely from the composition reference (current composition table behavior): create concrete subtypes of the target type, remove deletes the orphan, persist writes the composition list on the form overlay.
- Reference (non-composition): rows are the reference value; adding may link an existing object and/or create a new one; removing only unlinks; persist updates the reference on the overlay.
- Query: rows come from a TL-Script expression; add/remove semantics are not derivable and must be configured (create-types, remove = delete or disabled); without such configuration the table offers pure cell editing over the query result.
- The edit policy (all rows editable vs. exactly the selected row, the grid behavior) is an independent configuration axis of the table.
- Unlike the legacy grid, there is no auto-apply on selection change: edits buffer on row overlays and are committed in one transaction on save; validation blocks saving, not navigation.
- Row removal is buffered in the edit session and executed (unlink/delete) only during persist.