From 1cdf9473cfbab6cd0a720d1a7afeef18c2d15024 Mon Sep 17 00:00:00 2001 From: BoykoAlex Date: Tue, 3 Dec 2019 21:56:47 -0500 Subject: [PATCH] Layout with filter text for closed and opened group headers --- src/lib/palette/palette.component.ts | 40 ++++++++++++++++++++-------- 1 file changed, 29 insertions(+), 11 deletions(-) diff --git a/src/lib/palette/palette.component.ts b/src/lib/palette/palette.component.ts index cf6a593..ade38dc 100644 --- a/src/lib/palette/palette.component.ts +++ b/src/lib/palette/palette.component.ts @@ -360,22 +360,22 @@ export class Palette implements OnInit, OnDestroy, OnChanges { let parentWidth: number = this._paletteSize - Flo.SCROLLBAR_WIDTH; console.debug(`Parent Width: ${parentWidth}`); + const presentGroups = new Set(); + this.palette.model.getCells().forEach((cell: dia.Cell) => { const metadata: Flo.ElementMetadata = cell.attr('metadata'); if (cell.get('header')) { - const previous = paletteNodes.length > 0 ? paletteNodes[paletteNodes.length - 1] : undefined; - // If previous is a paletter header node as well then the previous header had no nodes under it and we can hide it and remove from paletteNodes aeeay - if (previous && previous.get('header') && !this.closedGroups.has(previous.get('header'))) { - paletteNodes.pop().attr('./display', 'none'); - } - cell.attr('./display', 'block'); - cell.removeAttr('./display'); paletteNodes.push(cell); - } else if (metadata && metadata.group && metadata.name && !this.closedGroups.has(metadata.group) + } else if (metadata && metadata.group && metadata.name && (!filterText || metadata.group.indexOf(filterText) >= 0 || metadata.name.indexOf(filterText) >= 0)) { - cell.attr('./display', 'block'); - cell.removeAttr('./display'); - paletteNodes.push(cell); + if (!this.closedGroups.has(metadata.group)) { + cell.attr('./display', 'block'); + cell.removeAttr('./display'); + paletteNodes.push(cell); + } else { + cell.attr('./display', 'none'); + } + presentGroups.add(metadata.group); } else { if (cell === this.noMacthesFoundNode) { @@ -385,6 +385,24 @@ export class Palette implements OnInit, OnDestroy, OnChanges { } }); + // Clean group headers + const filteredGroupHeaders: dia.Cell[] = []; + paletteNodes.forEach(cell => { + if (cell.get('header')) { + if (presentGroups.has(cell.get('header'))) { + cell.attr('./display', 'block'); + cell.removeAttr('./display'); + filteredGroupHeaders.push(cell); + } else { + cell.attr('./display', 'none'); + } + } else { + filteredGroupHeaders.push(cell); + } + }); + + paletteNodes = filteredGroupHeaders; + // Check if last group is empty const previous = paletteNodes.length > 0 ? paletteNodes[paletteNodes.length - 1] : undefined; // If previous is a paletter header node as well then the previous header had no nodes under it and we can hide it and remove from paletteNodes aeeay