Treetable: optionale isSelected-Callback für Zeilen-Markierung

Die Treetable unterstützt nun ein optionales isSelected-Callback (iTreetable.isSelected),
mit dem die Hintergrund-Einfärbung der gesamten <tr>-Zeile gesteuert werden kann. Bisher
musste jede Zelle einzeln über den columnmapper gestylt werden. Die Markierung verwendet
die w3-theme-l4-Klasse statt einer festen Farbe.

Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
This commit is contained in:
gg committed 2026-09-01 10:27:13 +02:00
1 parent 9af789b996
commit 68e9de8dc1
1 file changed
+16 -1
+16 -1
View File
@@ -33,10 +33,17 @@ export interface iTreetable {
columnmapper: Columnmapper columnmapper: Columnmapper
onRowMarked?: (node: iTreenode) => void onRowMarked?: (node: iTreenode) => void
filter?: (row:iTreenode, searchvalue:string) => boolean filter?: (row:iTreenode, searchvalue:string) => boolean
/** Optional: Callback, der für eine Treenode bestimmt, ob die gesamte
* Tabellenzeile als markiert (selektiert) dargestellt werden soll.
* Wenn gesetzt, übernimmt das Widget die Hintergrund-Einfärbung der
* <tr>-Zeile; die columnmapper-Inhalte brauchen dann kein eigenes
* Selektions-Styling mehr. */
isSelected?: (node: iTreenode) => boolean
} }
export const Treetable: m.ClosureComponent<iTreetable> = (vnode) => { export const Treetable: m.ClosureComponent<iTreetable> = (vnode) => {
let onRowMarked = vnode.attrs.onRowMarked === undefined ? (node: iTreenode) => {} : vnode.attrs.onRowMarked let onRowMarked = vnode.attrs.onRowMarked === undefined ? (node: iTreenode) => {} : vnode.attrs.onRowMarked
let isSelected = vnode.attrs.isSelected
let expandtoggle: boolean = true let expandtoggle: boolean = true
let searchvalue:string = "" let searchvalue:string = ""
function setSearchvalue(v:string) { function setSearchvalue(v:string) {
@@ -72,6 +79,7 @@ export const Treetable: m.ClosureComponent<iTreetable> = (vnode) => {
level: 0, level: 0,
columnmapper1: vnode.attrs.columnmapper, columnmapper1: vnode.attrs.columnmapper,
onRowMarked: onRowMarked, onRowMarked: onRowMarked,
isSelected: isSelected,
isEven: ((z % 2) == 0)} as iTreerow) isEven: ((z % 2) == 0)} as iTreerow)
} }
else { else {
@@ -91,16 +99,22 @@ interface iTreerow {
level: number level: number
columnmapper1: Columnmapper columnmapper1: Columnmapper
onRowMarked: (node: iTreenode) => void onRowMarked: (node: iTreenode) => void
isSelected?: (node: iTreenode) => boolean
isEven?: boolean isEven?: boolean
} }
let Treerow: m.ClosureComponent<iTreerow> = (vnode) => { let Treerow: m.ClosureComponent<iTreerow> = (vnode) => {
return { return {
view: (vnode) => { view: (vnode) => {
// Wenn ein isSelected-Callback gesetzt ist, prüfen, ob diese
// Zeile selektiert ist; in diesem Fall wird der Hintergrund der
// gesamten <tr>-Zeile eingefärbt.
const rowSelected = vnode.attrs.isSelected ? vnode.attrs.isSelected(vnode.attrs.treenode) : false
return [ return [
m("tr.w3-border-theme", {onmouseup: () => vnode.attrs.onRowMarked(vnode.attrs.treenode), m("tr.w3-border-theme", {onmouseup: () => vnode.attrs.onRowMarked(vnode.attrs.treenode),
onkeyup: () => vnode.attrs.onRowMarked(vnode.attrs.treenode), onkeyup: () => vnode.attrs.onRowMarked(vnode.attrs.treenode),
class: (vnode.attrs.isEven ? "w3-tablerow-even" : "w3-tablerow-odd"), class: (vnode.attrs.isEven ? "w3-tablerow-even" : "w3-tablerow-odd")
+ (rowSelected ? " w3-theme-l4" : ""),
style: {'border-top-style': 'solid', 'border-top-width': '1px'} style: {'border-top-style': 'solid', 'border-top-width': '1px'}
}, },
m("td", // Zunächst wird ein td-Element für die erste Spalte der Tabelle erzeugt, damit dort die m("td", // Zunächst wird ein td-Element für die erste Spalte der Tabelle erzeugt, damit dort die
@@ -150,6 +164,7 @@ let Treerow: m.ClosureComponent<iTreerow> = (vnode) => {
level: vnode.attrs.level + 1, level: vnode.attrs.level + 1,
columnmapper1: vnode.attrs.columnmapper1, columnmapper1: vnode.attrs.columnmapper1,
onRowMarked: vnode.attrs.onRowMarked, onRowMarked: vnode.attrs.onRowMarked,
isSelected: vnode.attrs.isSelected,
isEven: ((z % 2) == 0) isEven: ((z % 2) == 0)
} as iTreerow) } as iTreerow)
}) })