diff --git a/Client/Components/widgets/Treetable_V2.ts b/Client/Components/widgets/Treetable_V2.ts index 265089d..f0a04e6 100644 --- a/Client/Components/widgets/Treetable_V2.ts +++ b/Client/Components/widgets/Treetable_V2.ts @@ -88,7 +88,9 @@ export const Treetable: m.ClosureComponent = (vnode) => { onRowMarked: onRowMarked, isSelected: isSelected, isEven: ((z % 2) == 0), - hasSiblingsWithChildren: topHasSiblingsWithChildren} as iTreerow) + hasSiblingsWithChildren: topHasSiblingsWithChildren, + filter: vnode.attrs.filter, + searchvalue: searchvalue} as iTreerow) } else { return null @@ -114,6 +116,12 @@ interface iTreerow { * den Platzhalter-Pfeil nur dann zu rendern, wenn es Nodes mit * Pfeil gibt, an denen der Text ausgerichtet werden kann. */ hasSiblingsWithChildren?: boolean + /** Optional: Filter-Funktion, die auch auf Kind-Knoten angewendet wird. + * Wenn gesetzt, werden Kind-Knoten nur gerendert, wenn der Filter + * für sie true zurückgibt. */ + filter?: (row: iTreenode, searchvalue: string) => boolean + /** Aktueller Suchwert, der an den Filter weitergereicht wird. */ + searchvalue?: string } let Treerow: m.ClosureComponent = (vnode) => { @@ -178,7 +186,9 @@ let Treerow: m.ClosureComponent = (vnode) => { // Falls der Trennode Kinder hat und expandiert werden soll, wird rekursiv die Trennode-Komponente für // die Child-Nodes aufgerufen, ansonsten wir null zurückgegeben und die Einrückung hört auf vnode.attrs.treenode.hasChildren && vnode.attrs.treenode.expand - ? vnode.attrs.treenode.children.map((tn: iTreenode, z) => { + ? vnode.attrs.treenode.children + .filter(tn => !vnode.attrs.filter || vnode.attrs.filter(tn, vnode.attrs.searchvalue || "")) + .map((tn: iTreenode, z) => { return m(Treerow, { treenode: tn, level: vnode.attrs.level + 1, @@ -186,7 +196,9 @@ let Treerow: m.ClosureComponent = (vnode) => { onRowMarked: vnode.attrs.onRowMarked, isSelected: vnode.attrs.isSelected, isEven: ((z % 2) == 0), - hasSiblingsWithChildren: childHasSiblingsWithChildren + hasSiblingsWithChildren: childHasSiblingsWithChildren, + filter: vnode.attrs.filter, + searchvalue: vnode.attrs.searchvalue } as iTreerow) }) : null