From 9f3492dad0a37361ca796e8c4de2bfc32328b554 Mon Sep 17 00:00:00 2001 From: Terry Truong Date: Sun, 20 Mar 2022 20:38:03 +1100 Subject: Add animation on expand/collapse failure --- src/components/TileTree.vue | 56 ++++++++++++++++++++++++++++++++++----------- 1 file changed, 43 insertions(+), 13 deletions(-) (limited to 'src/components/TileTree.vue') diff --git a/src/components/TileTree.vue b/src/components/TileTree.vue index f0d8f07..85516c9 100644 --- a/src/components/TileTree.vue +++ b/src/components/TileTree.vue @@ -18,12 +18,12 @@ function preprocessTol(node: any): any { } const tol: TolNode = preprocessTol(tolRaw); -// Configurable settings (integer values specify pixels) +// Configurable settings let layoutOptions: LayoutOptions = { - tileSpacing: 8, - headerSz: 20, - minTileSz: 50, - maxTileSz: 200, + tileSpacing: 8, //px + headerSz: 20, //px + minTileSz: 50, //px + maxTileSz: 200, //px layoutType: 'sweep', //'sqr' | 'rect' | 'sweep' rectMode: 'auto', //'horz' | 'vert' | 'linear' | 'auto' sweepMode: 'left', //'left' | 'top' | 'shorter' | 'auto' @@ -63,18 +63,28 @@ export default defineComponent({ setTimeout(() => {this.resizeThrottled = false;}, otherOptions.resizeDelay); } }, - onInnerLeafClicked(clickedNode: LayoutNode){ - if (clickedNode.tolNode.children.length == 0){ - console.log('Tile-to-expand has no children'); + onInnerLeafClicked({layoutNode, domNode}: {layoutNode: LayoutNode, domNode: HTMLElement}){ + if (layoutNode.tolNode.children.length == 0){ + //console.log('Tile to expand has no children'); return; } - if (!this.layoutTree.tryLayoutOnExpand([0,0], [this.width,this.height], clickedNode)){ - console.log('Unable to layout tree'); + let success = this.layoutTree.tryLayoutOnExpand([0,0], [this.width,this.height], layoutNode); + if (!success){ + // Trigger failure animation + domNode.classList.remove('animate-expand-shrink'); + domNode.offsetWidth; // Triggers reflow + domNode.classList.add('animate-expand-shrink'); + //console.log('Unable to layout tree'); } }, - onInnerHeaderClicked(clickedNode: LayoutNode){ - if (!this.layoutTree.tryLayoutOnCollapse([0,0], [this.width,this.height], clickedNode)){ - console.log('Unable to layout tree'); + onInnerHeaderClicked({layoutNode, domNode}: {layoutNode: LayoutNode, domNode: HTMLElement}){ + let success = this.layoutTree.tryLayoutOnCollapse([0,0], [this.width,this.height], layoutNode); + if (!success){ + // Trigger failure animation + domNode.classList.remove('animate-expand-shrink'); + domNode.offsetWidth; // Triggers reflow + domNode.classList.add('animate-expand-shrink'); + //console.log('Unable to layout tree'); } }, }, @@ -101,3 +111,23 @@ export default defineComponent({ @leaf-clicked="onInnerLeafClicked" @header-clicked="onInnerHeaderClicked"/> + + -- cgit v1.2.3