UNPKG

@alfresco/adf-content-services

Version:
99 lines 13.6 kB
/*! * @license * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ import { Injectable } from '@angular/core'; import { BehaviorSubject, merge } from 'rxjs'; import { map } from 'rxjs/operators'; import { FlatTreeControl } from '@angular/cdk/tree'; import { TreeViewService } from '../services/tree-view.service'; import * as i0 from "@angular/core"; import * as i1 from "@angular/cdk/tree"; import * as i2 from "../services/tree-view.service"; export class TreeViewDataSource { get data() { return this.treeNodes; } set data(value) { this.treeControl.dataNodes = value; this.dataChange.next(value); } constructor(treeControl, treeViewService) { this.treeControl = treeControl; this.treeViewService = treeViewService; this.dataChange = new BehaviorSubject([]); this.childrenSubscription = null; this.changeSubscription = null; this.dataChange.subscribe((treeNodes) => (this.treeNodes = treeNodes)); } connect(collectionViewer) { this.changeSubscription = this.treeControl.expansionModel.changed.subscribe((change) => { if (change.added && change.added.length > 0) { this.expandTreeNodes(change); } else if (change.removed) { this.reduceTreeNodes(change); } }); return merge(collectionViewer.viewChange, this.dataChange).pipe(map(() => this.data)); } disconnect() { if (this.childrenSubscription) { this.childrenSubscription.unsubscribe(); } if (this.changeSubscription) { this.changeSubscription.unsubscribe(); } } expandTreeNodes(change) { change.added.forEach((node) => this.expandNode(node)); } reduceTreeNodes(change) { change.removed .slice() .reverse() .forEach((node) => this.toggleNode(node)); } expandNode(node) { this.childrenSubscription = this.treeViewService.getTreeNodes(node.nodeId).subscribe((children) => { const index = this.data.indexOf(node); if (!children || index < 0) { node.expandable = false; return; } const nodes = children.map((actualNode) => { actualNode.level = node.level + 1; return actualNode; }); this.data.splice(index + 1, 0, ...nodes); this.dataChange.next(this.data); }); } toggleNode(node) { const index = this.data.indexOf(node); let count = 0; for (let i = index + 1; i < this.data.length && this.data[i].level > node.level; i++, count++) { /* empty */ } this.data.splice(index + 1, count); this.dataChange.next(this.data); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: TreeViewDataSource, deps: [{ token: i1.FlatTreeControl }, { token: i2.TreeViewService }], target: i0.ɵɵFactoryTarget.Injectable }); } static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: TreeViewDataSource }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: TreeViewDataSource, decorators: [{ type: Injectable }], ctorParameters: () => [{ type: i1.FlatTreeControl }, { type: i2.TreeViewService }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS12aWV3LWRhdGFzb3VyY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWIvY29udGVudC1zZXJ2aWNlcy9zcmMvbGliL3RyZWUtdmlldy9kYXRhL3RyZWUtdmlldy1kYXRhc291cmNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQWMsTUFBTSxNQUFNLENBQUM7QUFDMUQsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUVwRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sK0JBQStCLENBQUM7Ozs7QUFHaEUsTUFBTSxPQUFPLGtCQUFrQjtJQU0zQixJQUFJLElBQUk7UUFDSixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDMUIsQ0FBQztJQUVELElBQUksSUFBSSxDQUFDLEtBQXFCO1FBQzFCLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztRQUNuQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsWUFBb0IsV0FBMEMsRUFBVSxlQUFnQztRQUFwRixnQkFBVyxHQUFYLFdBQVcsQ0FBK0I7UUFBVSxvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFieEcsZUFBVSxHQUFHLElBQUksZUFBZSxDQUFpQixFQUFFLENBQUMsQ0FBQztRQUNyRCx5QkFBb0IsR0FBRyxJQUFJLENBQUM7UUFDNUIsdUJBQWtCLEdBQUcsSUFBSSxDQUFDO1FBWXRCLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFD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LEtBQUssR0FBRyxDQUFDLENBQUM7UUFDZCxLQUFLLElBQUksQ0FBQyxHQUFHLEtBQUssR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQztZQUM1RixXQUFXO1FBQ2YsQ0FBQztRQUNELElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDbkMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3BDLENBQUM7OEdBMUVRLGtCQUFrQjtrSEFBbEIsa0JBQWtCOzsyRkFBbEIsa0JBQWtCO2tCQUQ5QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiLyohXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IMKpIDIwMDUtMjAyNSBIeWxhbmQgU29mdHdhcmUsIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb2xsZWN0aW9uVmlld2VyLCBTZWxlY3Rpb25DaGFuZ2UgfSBmcm9tICdAYW5ndWxhci9jZGsvY29sbGVjdGlvbnMnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBtZXJnZSwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgRmxhdFRyZWVDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3RyZWUnO1xuaW1wb3J0IHsgVHJlZUJhc2VOb2RlIH0gZnJvbSAnLi4vbW9kZWxzL3RyZWUtdmlldy5tb2RlbCc7XG5pbXBvcnQgeyBUcmVlVmlld1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy90cmVlLXZpZXcuc2VydmljZSc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBUcmVlVmlld0RhdGFTb3VyY2Uge1xuICAgIHRyZWVOb2RlczogVHJlZUJhc2VOb2RlW107XG4gICAgZGF0YUNoYW5nZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VHJlZUJhc2VOb2RlW10+KFtdKTtcbiAgICBjaGlsZHJlblN1YnNjcmlwdGlvbiA9IG51bGw7XG4gICAgY2hhbmdlU3Vic2NyaXB0aW9uID0gbnVsbDtcblxuICAgIGdldCBkYXRhKCk6IFRyZWVCYXNlTm9kZVtdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHJlZU5vZGVzO1xuICAgIH1cblxuICAgIHNldCBkYXRhKHZhbHVlOiBUcmVlQmFzZU5vZGVbXSkge1xuICAgICAgICB0aGlzLnRyZWVDb250cm9sLmRhdGFOb2RlcyA9IHZhbHVlO1xuICAgICAgICB0aGlzLmRhdGFDaGFuZ2UubmV4dCh2YWx1ZSk7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSB0cmVlQ29udHJvbDogRmxhdFRyZWVDb250cm9sPFRyZWVCYXNlTm9kZT4sIHByaXZhdGUgdHJlZVZpZXdTZXJ2aWNlOiBUcmVlVmlld1NlcnZpY2UpIHtcbiAgICAgICAgdGhpcy5kYXRhQ2hhbmdlLnN1YnNjcmliZSgodHJlZU5vZGVzKSA9PiAodGhpcy50cmVlTm9kZXMgPSB0cmVlTm9kZXMpKTtcbiAgICB9XG5cbiAgICBjb25uZWN0KGNvbGxlY3Rpb25WaWV3ZXI6IENvbGxlY3Rpb25WaWV3ZXIpOiBPYnNlcnZhYmxlPFRyZWVCYXNlTm9kZVtdPiB7XG4gICAgICAgIHRoaXMuY2hhbmdlU3Vic2NyaXB0aW9uID0gdGhpcy50cmVlQ29udHJvbC5leHBhbnNpb25Nb2RlbC5jaGFuZ2VkLnN1YnNjcmliZSgoY2hhbmdlKSA9PiB7XG4gICAgICAgICAgICBpZiAoKGNoYW5nZSBhcyBTZWxlY3Rpb25DaGFuZ2U8VHJlZUJhc2VOb2RlPikuYWRkZWQgJiYgKGNoYW5nZSBhcyBTZWxlY3Rpb25DaGFuZ2U8VHJlZUJhc2VOb2RlPikuYWRkZWQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZXhwYW5kVHJlZU5vZGVzKGNoYW5nZSBhcyBTZWxlY3Rpb25DaGFuZ2U8VHJlZUJhc2VOb2RlPik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKChjaGFuZ2UgYXMgU2VsZWN0aW9uQ2hhbmdlPFRyZWVCYXNlTm9kZT4pLnJlbW92ZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlZHVjZVRyZWVOb2RlcyhjaGFuZ2UgYXMgU2VsZWN0aW9uQ2hhbmdlPFRyZWVCYXNlTm9kZT4pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIG1lcmdlKGNvbGxlY3Rpb25WaWV3ZXIudmlld0NoYW5nZSwgdGhpcy5kYXRhQ2hhbmdlKS5waXBlKG1hcCgoKSA9PiB0aGlzLmRhdGEpKTtcbiAgICB9XG5cbiAgICBkaXNjb25uZWN0KCkge1xuICAgICAgICBpZiAodGhpcy5jaGlsZHJlblN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5jaGlsZHJlblN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmNoYW5nZVN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZXhwYW5kVHJlZU5vZGVzKGNoYW5nZTogU2VsZWN0aW9uQ2hhbmdlPFRyZWVCYXNlTm9kZT4pIHtcbiAgICAgICAgY2hhbmdlLmFkZGVkLmZvckVhY2goKG5vZGUpID0+IHRoaXMuZXhwYW5kTm9kZShub2RlKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZWR1Y2VUcmVlTm9kZXMoY2hhbmdlOiBTZWxlY3Rpb25DaGFuZ2U8VHJlZUJhc2VOb2RlPikge1xuICAgICAgICBjaGFuZ2UucmVtb3ZlZFxuICAgICAgICAgICAgLnNsaWNlKClcbiAgICAgICAgICAgIC5yZXZlcnNlKClcbiAgICAgICAgICAgIC5mb3JFYWNoKChub2RlKSA9PiB0aGlzLnRvZ2dsZU5vZGUobm9kZSkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZXhwYW5kTm9kZShub2RlOiBUcmVlQmFzZU5vZGUpIHtcbiAgICAgICAgdGhpcy5jaGlsZHJlblN1YnNjcmlwdGlvbiA9IHRoaXMudHJlZVZpZXdTZXJ2aWNlLmdldFRyZWVOb2Rlcyhub2RlLm5vZGVJZCkuc3Vic2NyaWJlKChjaGlsZHJlbikgPT4ge1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmRhdGEuaW5kZXhPZihub2RlKTtcbiAgICAgICAgICAgIGlmICghY2hpbGRyZW4gfHwgaW5kZXggPCAwKSB7XG4gICAgICAgICAgICAgICAgbm9kZS5leHBhbmRhYmxlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgbm9kZXMgPSBjaGlsZHJlbi5tYXAoKGFjdHVhbE5vZGUpID0+IHtcbiAgICAgICAgICAgICAgICBhY3R1YWxOb2RlLmxldmVsID0gbm9kZS5sZXZlbCArIDE7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFjdHVhbE5vZGU7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuZGF0YS5zcGxpY2UoaW5kZXggKyAxLCAwLCAuLi5ub2Rlcyk7XG4gICAgICAgICAgICB0aGlzLmRhdGFDaGFuZ2UubmV4dCh0aGlzLmRhdGEpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICB0b2dnbGVOb2RlKG5vZGU6IFRyZWVCYXNlTm9kZSkge1xuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuZGF0YS5pbmRleE9mKG5vZGUpO1xuICAgICAgICBsZXQgY291bnQgPSAwO1xuICAgICAgICBmb3IgKGxldCBpID0gaW5kZXggKyAxOyBpIDwgdGhpcy5kYXRhLmxlbmd0aCAmJiB0aGlzLmRhdGFbaV0ubGV2ZWwgPiBub2RlLmxldmVsOyBpKyssIGNvdW50KyspIHtcbiAgICAgICAgICAgIC8qIGVtcHR5ICovXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kYXRhLnNwbGljZShpbmRleCArIDEsIGNvdW50KTtcbiAgICAgICAgdGhpcy5kYXRhQ2hhbmdlLm5leHQodGhpcy5kYXRhKTtcbiAgICB9XG59XG4iXX0=