/* Copyright © 2016-2019 Lidor Systems. All rights reserved. This file is part of the "IntegralUI Web" Library. The contents of this file are subject to the IntegralUI Web License, and may not be used except in compliance with the License. A copy of the License should have been installed in the product's root installation directory or it can be found at http://www.lidorsystems.com/products/web/studio/license-agreement.aspx. This SOFTWARE is provided "AS IS", WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the specific language governing rights and limitations under the License. Any infringement will be prosecuted under applicable laws. */ import { Component, ViewContainerRef, ViewChild, ViewChildren, ViewEncapsulation } from '@angular/core'; import { IntegralUITreeView } from '../../integralui/components/integralui.treeview'; @Component({ selector: '', template: `

TreeView / Events

{{item.text}}

Event log:

  • {{ev.name}}{{ev.info}}{{ev.value}}

This sample presents all events that are fired from the TreeView. Depending on action, a specific event is fired, which you can handle by creating an event handler.

The following events are supported:

  • afterCollapse - Occurs after item is collapsed
  • afterExpand - Occurs after item is expanded
  • afterSelect - Occurs after item is selected
  • beforeCollapse - Occurs before item is collapsed
  • beforeExpand - Occurs before item is expanded
  • beforeSelect - Occurs before item is selected
  • clear - Occurs when all items are removed
  • dragOver - Occurs when item is dragged over TreeView space
  • dragDrop - Occurs when drag-drop operation is completed
  • itemAdding - Occurs before item is added
  • itemAdded - Occurs after item is added
  • itemRemoving - Occurs before item is removed
  • itemRemoved - Occurs after item is removed
  • keyDown - Occurs when key is hold down while the item has focus
  • keyPress - Occurs when key is pressed while the item has focus
  • keyUp - Occurs when key is released while the item has focus
  • loadComplete - Occurs when data is loaded into the TreeView using loadData method
  • scrollPosChanged - Occurs when scroll position changes
  • selectionChanged - Occurs when selected item has changed
  • updateComplete - Occurs when TreeView layout is updated

Depending on some conditions, when handling some of above events you can prevent the default action to proceed, by canceling the operation. Event data has a cancel field, which when set to true will cancel the process.

For more information check out the source code of this sample (treeview/treeview-events.ts) file.

`, encapsulation: ViewEncapsulation.None }) export class TreeViewEventsSample { @ViewChild('application', {read: ViewContainerRef, static: false}) applicationRef: ViewContainerRef; @ViewChild('treeview', { static: false }) treeview: IntegralUITreeView; public data: Array = []; public eventLog: Array = []; private itemCount: number = 3; public disableButtons: boolean = false; private parentItem: any = null; private itemIndex: number = -1; constructor(){ this.data = [ { id: 1, text: "Item1", items: [ { id: 11, pid: 1, text: "Item11" }, { id: 12, pid: 1, text: "Item12", items: [ { id: 121, pid: 12, text: "Item121" }, { id: 122, pid: 12, text: "Item122", expanded: false, items: [ { id: 1221, pid: 122, text: "Item1221" }, { id: 1222, pid: 122, text: "Item1222" } ] }, { id: 123, pid: 12, text: "Item123" } ] } ] }, { id: 2, text: "Item2", expanded: false, items: [ { id: 21, pid: 2, text: "Item21" }, { id: 22, pid: 2, text: "Item22", expanded: false, items: [ { id: 221, pid: 22, text: "Item221" } ] } ] }, { id: 3, text: "Item3" } ]; } createNewItem(){ this.itemCount++; return { text: "Item " + this.itemCount }; } addRoot(){ let item: any = this.createNewItem(); this.treeview.addItem(item); this.treeview.selectedItem = item; this.treeview.updateLayout(); this.disableButtons = false; } addChild(){ let item: any = this.createNewItem(); this.treeview.addItem(item, this.treeview.selectedItem); this.treeview.updateLayout(); this.disableButtons = false; } remove(){ if (this.treeview.selectedItem){ this.treeview.removeItem(this.treeview.selectedItem); this.treeview.updateLayout(); } } clear(){ this.treeview.clearItems(); this.treeview.updateLayout(); } selectNewItem(){ let list: Array = this.treeview.getList('', this.parentItem); if (list && list.length > 0){ if (this.itemIndex == list.length) this.itemIndex = list.length - 1; if (this.itemIndex >= 0 && this.itemIndex < list.length){ if (this.itemIndex < list.length) this.treeview.selectedItem = list[this.itemIndex]; else this.treeview.selectedItem = list[list.length-1]; } } else if (this.parentItem) this.treeview.selectedItem = this.parentItem; else this.treeview.selectedItem = null; } clearEventLog(){ this.eventLog.length = 0; } // Events onAfterCollapse(e: any){ if (e.item) this.eventLog.unshift({ name: "afterCollapse", info: " event was fired after item is collapsed: ", value: e.item.text }); } onAfterExpand(e: any){ if (e.item) this.eventLog.unshift({ name: "afterExpand", info: " event was fired after item is expanded: ", value: e.item.text }); } onAfterSelect(e: any){ if (e.item) this.eventLog.unshift({ name: "afterSelect", info: " event was fired after item is selected: ", value: e.item.text }); } onBeforeCollapse(e: any){ if (e.item) this.eventLog.unshift({ name: "beforeCollapse", info: " event was fired before item is collapsed: ", value: e.item.text }); } onBeforeExpand(e: any){ if (e.item) this.eventLog.unshift({ name: "beforeExpand", info: " event was fired before item is expanded: ", value: e.item.text }); } onBeforeSelect(e: any){ if (e.item) this.eventLog.unshift({ name: "beforeSelect", info: " event was fired before item is selected: ", value: e.item.text }); } onDragOver(e: any){ this.eventLog.unshift({ name: "dragover", info: " event was fired when item is dragged over TreeView space" }); } onDragDrop(e: any){ this.eventLog.unshift({ name: "dragdrop", info: " event was fired when drag-drop operation is completed" }); let self = this; setTimeout(function(){ self.treeview.selectedItem = e.dragItem; }, 100); } onItemAdding(e: any){ this.eventLog.unshift({ name: "itemAdding", info: " event was fired before item is added: ", value: e.item.text }); } onItemAdded(e: any){ this.eventLog.unshift({ name: "itemAdded", info: " event was fired after item is added: ", value: e.item.text }); this.disableButtons = false; } onClear(e: any){ this.eventLog.unshift({ name: "clear", info: " event was fired when all items are removed at once", value: '' }); this.itemCount = 0; this.disableButtons = true; } onItemRemoving(e: any){ this.eventLog.unshift({ name: "itemRemoving", info: " event was fired before item is removed: ", value: e.item.text }); this.itemIndex = -1; this.parentItem = this.treeview.getItemParent(e.item); let list: Array = this.treeview.getList('', this.parentItem); if (list && list.length > 0) this.itemIndex = list.indexOf(e.item); } onItemRemoved(e: any){ this.eventLog.unshift({ name: "itemRemoved", info: " event was fired after item is removed: ", value: e.item.text }); this.itemCount = this.itemCount > 0 ? this.itemCount - 1 : 0; this.selectNewItem(); if (this.itemCount == 0) this.disableButtons = true; } onKeyDown(e: any){ this.eventLog.unshift({ name: "keyDown", info: " event was fired when key is hold down while the item has focus: ", value: e.item.text }); } onKeyPress(e: any){ this.eventLog.unshift({ name: "keyPress", info: " event was fired when key is pressed while the item has focus: ", value: e.item.text }); } onKeyUp(e: any){ this.eventLog.unshift({ name: "keyUp", info: " event was fired when key is released while the item has focus: ", value: e.item.text }); } onScrollPosChanged(e: any){ this.eventLog.unshift({ name: "scrollPosChanged", info: " event was fired when scroll position changes: ", value: "{ x: " + e.value.x + ", y: " + e.value.y + " }" }); } onSelectionChanged(e: any){ this.eventLog.unshift({ name: "selectionChanged", info: " event was fired when selected item has changed: ", value: e.item.text }); } }