/*--------------------------------------------------------------------------------------------- * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the Source EULA. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ import 'vs/css!./media/treeComponent'; import { Component, Input, Inject, ChangeDetectorRef, forwardRef, ViewChild, ElementRef, OnDestroy, AfterViewInit } from '@angular/core'; import * as azdata from 'azdata'; import { ComponentBase } from 'sql/workbench/browser/modelComponents/componentBase'; import { IComponent, IComponentDescriptor, IModelStore } from 'sql/workbench/browser/modelComponents/interfaces'; import { Tree } from 'vs/base/parts/tree/browser/treeImpl'; import { TreeComponentRenderer } from 'sql/workbench/browser/modelComponents/treeComponentRenderer'; import { TreeComponentDataSource } from 'sql/workbench/browser/modelComponents/treeDataSource'; import { attachListStyler } from 'vs/platform/theme/common/styler'; import { DefaultFilter, DefaultAccessibilityProvider, DefaultController } from 'vs/base/parts/tree/browser/treeDefaults'; import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; import { ITreeComponentItem } from 'sql/workbench/common/views'; import { TreeViewDataProvider } from 'sql/workbench/browser/modelComponents/treeViewDataProvider'; import * as DOM from 'vs/base/browser/dom'; import { StandardKeyboardEvent } from 'vs/base/browser/keyboardEvent'; import { KeyCode } from 'vs/base/common/keyCodes'; import { values } from 'vs/base/common/collections'; import { IThemeService } from 'vs/platform/theme/common/themeService'; class Root implements ITreeComponentItem { label = { label: 'root' }; handle = '0'; parentHandle = null; collapsibleState = 2; children = void 0; options = undefined; } @Component({ selector: 'modelview-tree', template: `
` }) export default class TreeComponent extends ComponentBase implements IComponent, OnDestroy, AfterViewInit { @Input() descriptor: IComponentDescriptor; @Input() modelStore: IModelStore; private _tree: Tree; private _treeRenderer: TreeComponentRenderer; private _dataProvider: TreeViewDataProvider; @ViewChild('input', { read: ElementRef }) private _inputContainer: ElementRef; constructor( @Inject(forwardRef(() => ChangeDetectorRef)) changeRef: ChangeDetectorRef, @Inject(IThemeService) private themeService: IThemeService, @Inject(IInstantiationService) private _instantiationService: IInstantiationService, @Inject(forwardRef(() => ElementRef)) el: ElementRef ) { super(changeRef, el); } ngOnInit(): void { this.baseInit(); } ngAfterViewInit(): void { if (this._inputContainer) { this.createTreeControl(); } } ngOnDestroy(): void { this.baseDestroy(); } public setDataProvider(handle: number, componentId: string, context: any): any { this._dataProvider = new TreeViewDataProvider(handle, componentId, context); this.createTreeControl(); } public refreshDataProvider(itemsToRefreshByHandle: { [treeItemHandle: string]: ITreeComponentItem }): void { if (this._dataProvider) { this._dataProvider.getItemsToRefresh(itemsToRefreshByHandle); } if (this._tree) { for (const item of values(itemsToRefreshByHandle)) { this._tree.refresh(