enhancement
major
minor
major
minor
major
#29977
View layer: <tree-table> has no node display (icon, label, CSS class per cell) and no row-class
Observed with 8.0.0-alpha11 in E-Home (haumacher/ehome, doc/tl-todo.md).
A <tree> shows a node through a nodeContent control provider (icon and label of the object). A <tree-table> has nothing comparable:
- its first column displays a value by the column type alone (a reference by its label and icon, a text without icon);
- no column declaration chooses a display control or a CSS class per cell (Column#cssClass(row) exists in the table API, but no declaration sets it);
- the row-class of <table> (#29815) is not offered: TreeTableElement passes no row class to createTable.
Reproduction: a <tree-table> over devices cannot show a device as "Taster (1.1.3)" with the device icon, nor mark a changed device by a CSS class, other than a text column without icon.
Expected: a column with a configurable display control / CSS class (or a node display for the tree column), and row-class on <tree-table>.
Workaround in E-Home: an own <computed-column> subclass rendering icon, label and class through ReactResourceCellControl.
Lösung
- row-class auf <tree-table>: wie bei <table> ein TL-Script-Ausdruck über die Zeile, der die CSS-Klasse der Zeile berechnet.
- cell-class an jeder Spaltendeklaration (<column>, <computed-column>, <dynamic-columns>): ein TL-Script-Ausdruck über Zeile ($row) und Zellwert ($value), dessen Ergebnis die Zelle als CSS-Klasse trägt (z.B. tl-status-error). Gilt für <table>, <tree-table> und <composition-table>.
- display an jeder Spaltendeklaration: ein ReactControlProvider - derselbe Vertrag wie nodeContent von <tree> -, der die Zelle aus dem Zellwert erzeugt, statt der aus dem Spaltentyp abgeleiteten Anzeige. Mehrere Werte einer Zelle werden einzeln über den Provider angezeigt.
- ResourceDisplayByExpression (com.top_logic.layout.view.element): ein Anzeige-Provider mit den TL-Script-Ausdrücken label, icon, css-class und tooltip über das angezeigte Objekt ($value); ein nicht gesetzter Ausdruck liefert den Wert des Objekts selbst. Verwendbar als nodeContent eines <tree> und als display einer Spalte; die Suche einer solchen Spalte findet den angezeigten Text.
Beispiel: {{{#!xml <computed-column name="device" value="$row">
<display class="com.top_logic.layout.view.element.ResourceDisplayByExpression">
<label>$value.get(my:Device#name) + ' (' + $value.get(my:Device#address) + ')'</label>
<css-class>$value.get(my:Device#changed) ? 'tl-status-warning' : null</css-class>
</display>
</computed-column> }}}
Technische Anmerkungen
- Die Eingänge, die die Skripte einer Spalte (aggregate, comparator, tooltip, cell-class) sehen, zählen als Zell-Eingänge der Tabelle: ändert sich einer, werden die Zellen neu aufgebaut, statt ihre alte Klasse oder ihren alten Tooltip zu behalten.
- In Tabellen mit Zeilenbearbeitung und in <composition-table> werden nicht bearbeitete Zellen wie in jeder anderen Tabelle gerendert; bisher fehlte dort der tooltip einer Spalte.
- Eine Spalte mit Skript-Filter zeigt ihren Wert typgerecht an statt als reinen Text.
- ReactResourceCellControl entfernt eine CSS-Klasse und ein Icon, die für einen früheren Zustand des angezeigten Objekts gesetzt waren.
- MetaResourceControlProvider wird im In-App-Konfigurationseditor angeboten.
Demo: tl-demo-react, Demos → Baumtabellen-Anzeige.