UNPKG

ontimize-web-ngx

Version:
93 lines 14.3 kB
import { BehaviorSubject, map, merge } from 'rxjs'; import { OTranslateService } from '../../services/translate'; export class OTreeDataSource { get data() { return this.dataChange.value; } set data(value) { this._treeControl.dataNodes = value; this.dataChange.next(value); } constructor(oTree, _treeControl, injector) { this.oTree = oTree; this._treeControl = _treeControl; this.injector = injector; this.dataChange = new BehaviorSubject([]); this.resultsLength = 0; this.translateService = this.injector.get(OTranslateService); this._database = this.oTree.daoTree; if (this._database) { this.resultsLength = this._database.data.length; } if (oTree.matpaginator) { this._paginator = oTree.matpaginator; } } connect(collectionViewer) { this._treeControl.expansionModel.changed.subscribe(change => { if (change.added || change.removed) { this.handleTreeControl(change); } }); return merge(collectionViewer.viewChange, this.dataChange).pipe(map(() => { let data = Object.assign([], this.data); if (this.oTree.pageable) { const totalRecordsNumber = this.oTree.getTotalRecordsNumber(); this.resultsLength = totalRecordsNumber ?? data.length; } return this.data; })); } disconnect(collectionViewer) { this.dataChange.complete(); } handleTreeControl(change) { if (change.added) { change.added.forEach(node => this.oTree.toggleNode(node, true)); } if (change.removed) { change.removed .slice() .reverse() .forEach(node => this.oTree.toggleNode(node, false)); } } isTreeFlatNode(value) { return 'level' in value && 'label' in value; } updateTree(parentNode, children, expand) { const index = this.data.findIndex(node => node.id === parentNode.id); if (!children || index < 0) { parentNode.isLoading = false; return; } const level = parentNode.level + 1; const treeNode = parentNode.childNode ? parentNode.childNode : this.oTree; const newNodes = children.map(child => this.isTreeFlatNode(child) ? child : treeNode.transformer(child, level, parentNode)); if (expand) { let insertIndex = index + 1; while (insertIndex < this.data.length && this.data[insertIndex].level > parentNode.level) { insertIndex++; } this.data.splice(insertIndex, 0, ...newNodes); if (!this._treeControl.isExpanded(parentNode)) { this._treeControl.expand(parentNode); } if (this.oTree.selection.isSelected(parentNode)) { this.oTree.selection.select(...newNodes); } } else { let count = 0; for (let i = index + 1; i < this.data.length && this.data[i].level > parentNode.level; i++, count++) ; this.data.splice(index + 1, count); } this._treeControl.dataNodes = this.data; this.dataChange.next(this.data); parentNode.isLoading = false; } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiby10cmVlLmRhdGFzb3VyY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vbnRpbWl6ZS13ZWItbmd4L3NyYy9saWIvY29tcG9uZW50cy90cmVlL28tdHJlZS5kYXRhc291cmNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE9BQU8sRUFBRSxlQUFlLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUUvRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQU03RCxNQUFNLE9BQU8sZUFBZTtJQU8xQixJQUFJLElBQUk7UUFDTixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDO0lBQy9CLENBQUM7SUFDRCxJQUFJLElBQUksQ0FBQyxLQUFzQjtRQUM3QixJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7UUFDcEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVELFlBQ1UsS0FBcUIsRUFDckIsWUFBNEMsRUFDNUMsUUFBa0I7UUFGbEIsVUFBSyxHQUFMLEtBQUssQ0FBZ0I7UUFDckIsaUJBQVksR0FBWixZQUFZLENBQWdDO1FBQzVDLGFBQVEsR0FBUixRQUFRLENBQVU7UUFqQjVCLGVBQVUsR0FBRyxJQUFJLGVBQWUsQ0FBa0IsRUFBRSxDQUFDLENBQUM7UUFHdEQsa0JBQWEsR0FBVyxDQUFDLENBQUM7UUFnQnhCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQzdELElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUM7UUFDcEMsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ2xCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxD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Q0FBQyxDQUFDO1NBQ3BDO1FBR0QsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztRQUd4QyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEMsVUFBVSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7SUFFL0IsQ0FBQztDQUdGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29sbGVjdGlvblZpZXdlciwgRGF0YVNvdXJjZSwgU2VsZWN0aW9uQ2hhbmdlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvbGxlY3Rpb25zJztcbmltcG9ydCB7IEZsYXRUcmVlQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay90cmVlJztcbmltcG9ydCB7IEluamVjdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIG1hcCwgbWVyZ2UsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgT1RyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90cmFuc2xhdGUnO1xuaW1wb3J0IHsgT1RyZWVEYW8gfSBmcm9tICcuL28tdHJlZS1kYW8uc2VydmljZSc7XG5pbXBvcnQgeyBPVHJlZUNvbXBvbmVudCB9IGZyb20gJy4vby10cmVlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBPVHJlZUZsYXROb2RlIH0gZnJvbSAnLi4vLi4vdHlwZXMvdHJlZS1mbGF0LW5vZGUudHlwZSc7XG5pbXBvcnQgeyBNYXRQYWdpbmF0b3IgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wYWdpbmF0b3InO1xuXG5leHBvcnQgY2xhc3MgT1RyZWVEYXRhU291cmNlIGltcGxlbWVudHMgRGF0YVNvdXJjZTxPVHJlZUZsYXROb2RlPiB7XG4gIGRhdGFDaGFuZ2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE9UcmVlRmxhdE5vZGVbXT4oW10pO1xuICB0cmFuc2xhdGVTZXJ2aWNlOiBhbnk7XG4gIHByb3RlY3RlZCBfZGF0YWJhc2U6IE9UcmVlRGFvO1xuICByZXN1bHRzTGVuZ3RoOiBudW1iZXIgPSAwO1xuICBwcm90ZWN0ZWQgX3BhZ2luYXRvcjogTWF0UGFnaW5hdG9yO1xuXG4gIGdldCBkYXRhKCk6IE9UcmVlRmxhdE5vZGVbXSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YUNoYW5nZS52YWx1ZTtcbiAgfVxuICBzZXQgZGF0YSh2YWx1ZTogT1RyZWVGbGF0Tm9kZVtdKSB7XG4gICAgdGhpcy5fdHJlZUNvbnRyb2wuZGF0YU5vZGVzID0gdmFsdWU7XG4gICAgdGhpcy5kYXRhQ2hhbmdlLm5leHQodmFsdWUpO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBvVHJlZTogT1RyZWVDb21wb25lbnQsXG4gICAgcHJpdmF0ZSBfdHJlZUNvbnRyb2w6IEZsYXRUcmVlQ29udHJvbDxPVHJlZUZsYXROb2RlPixcbiAgICBwcml2YXRlIGluamVjdG9yOiBJbmplY3RvclxuICApIHtcbiAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UgPSB0aGlzLmluamVjdG9yLmdldChPVHJhbnNsYXRlU2VydmljZSk7XG4gICAgdGhpcy5fZGF0YWJhc2UgPSB0aGlzLm9UcmVlLmRhb1RyZWU7XG4gICAgaWYgKHRoaXMuX2RhdGFiYXNlKSB7XG4gICAgICB0aGlzLnJlc3VsdHNMZW5ndGggPSB0aGlzLl9kYXRhYmFzZS5kYXRhLmxlbmd0aDtcbiAgICB9XG4gICAgaWYgKG9UcmVlLm1hdHBhZ2luYXRvcikge1xuICAgICAgdGhpcy5fcGFnaW5hdG9yID0gb1RyZWUubWF0cGFnaW5hdG9yO1xuICAgIH1cbiAgfVxuXG4gIGNvbm5lY3QoY29sbGVjdGlvblZpZXdlcjogQ29sbGVjdGlvblZpZXdlcik6IE9ic2VydmFibGU8T1RyZWVGbGF0Tm9kZVtdPiB7XG4gICAgdGhpcy5fdHJlZUNvbnRyb2wuZXhwYW5zaW9uTW9kZWwuY2hhbmdlZC5zdWJzY3JpYmUoY2hhbmdlID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgY2hhbmdlLmFkZGVkIHx8XG4gICAgICAgIGNoYW5nZS5yZW1vdmVkXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5oYW5kbGVUcmVlQ29udHJvbChjaGFuZ2UpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG1lcmdlKGNvbGxlY3Rpb25WaWV3ZXIudmlld0NoYW5nZSwgdGhpcy5kYXRhQ2hhbmdlKS5waXBlKG1hcCgoKSA9PiB7XG4gICAgICBsZXQgZGF0YSA9IE9iamVjdC5hc3NpZ24oW10sIHRoaXMuZGF0YSk7XG5cbiAgICAgIGlmICh0aGlzLm9UcmVlLnBhZ2VhYmxlKSB7XG4gICAgICAgIGNvbnN0IHRvdGFsUmVjb3Jkc051bWJlciA9IHRoaXMub1RyZWUuZ2V0VG90YWxSZWNvcmRzTnVtYmVyKCk7XG4gICAgICAgIHRoaXMucmVzdWx0c0xlbmd0aCA9IHRvdGFsUmVjb3Jkc051bWJlciA/PyBkYXRhLmxlbmd0aDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuZGF0YTtcbiAgICB9KSk7XG4gIH1cblxuXG4gIGRpc2Nvbm5lY3QoY29sbGVjdGlvblZpZXdlcjogQ29sbGVjdGlvblZpZXdlcik6IHZvaWQge1xuICAgIHRoaXMuZGF0YUNoYW5nZS5jb21wbGV0ZSgpO1xuICB9XG5cbiAgLyoqIEhhbmRsZSBleHBhbmQvY29sbGFwc2UgYmVoYXZpb3JzICovXG4gIGhhbmRsZVRyZWVDb250cm9sKGNoYW5nZTogU2VsZWN0aW9uQ2hhbmdlPE9UcmVlRmxhdE5vZGU+KSB7XG4gICAgaWYgKGNoYW5nZS5hZGRlZCkge1xuICAgICAgY2hhbmdlLmFkZGVkLmZvckVhY2gobm9kZSA9PiB0aGlzLm9UcmVlLnRvZ2dsZU5vZGUobm9kZSwgdHJ1ZSkpO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlLnJlbW92ZWQpIHtcbiAgICAgIGNoYW5nZS5yZW1vdmVkXG4gICAgICAgIC5zbGljZSgpXG4gICAgICAgIC5yZXZlcnNlKClcbiAgICAgICAgLmZvckVhY2gobm9kZSA9PiB0aGlzLm9UcmVlLnRvZ2dsZU5vZGUobm9kZSwgZmFsc2UpKTtcbiAgICB9XG4gIH1cblxuICBpc1RyZWVGbGF0Tm9kZSh2YWx1ZTogYW55KSB7XG4gICAgcmV0dXJuICdsZXZlbCcgaW4gdmFsdWUgJiYgJ2xhYmVsJyBpbiB2YWx1ZTtcbiAgfVxuXG4gIHVwZGF0ZVRyZWUocGFyZW50Tm9kZTogT1RyZWVGbGF0Tm9kZSwgY2hpbGRyZW46IEFycmF5PGFueT4sIGV4cGFuZDogYm9vbGVhbik6IHZvaWQge1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5kYXRhLmZpbmRJbmRleChub2RlID0+IG5vZGUuaWQgPT09IHBhcmVudE5vZGUuaWQpO1xuXG4gICAgaWYgKCFjaGlsZHJlbiB8fCBpbmRleCA8IDApIHtcbiAgICAgIHBhcmVudE5vZGUuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgbGV2ZWwgPSBwYXJlbnROb2RlLmxldmVsICsgMTtcbiAgICBjb25zdCB0cmVlTm9kZSA9IHBhcmVudE5vZGUuY2hpbGROb2RlID8gcGFyZW50Tm9kZS5jaGlsZE5vZGUgOiB0aGlzLm9UcmVlO1xuXG4gICAgLy8gVHJhbnNmb3JtYXIgaGlqb3MgbnVldm9zXG4gICAgY29uc3QgbmV3Tm9kZXM6IE9UcmVlRmxhdE5vZGVbXSA9IGNoaWxkcmVuLm1hcChjaGlsZCA9PlxuICAgICAgdGhpcy5pc1RyZWVGbGF0Tm9kZShjaGlsZCkgPyBjaGlsZCA6IHRyZWVOb2RlLnRyYW5zZm9ybWVyKGNoaWxkLCBsZXZlbCwgcGFyZW50Tm9kZSlcbiAgICApO1xuXG4gICAgaWYgKGV4cGFuZCkge1xuICAgICAgLy8gSW5zZXJ0YXIgZGVzcHXDqXMgZGUgbG9zIGhpam9zIGV4aXN0ZW50ZXNcbiAgICAgIGxldCBpbnNlcnRJbmRleCA9IGluZGV4ICsgMTtcbiAgICAgIHdoaWxlIChcbiAgICAgICAgaW5zZXJ0SW5kZXggPCB0aGlzLmRhdGEubGVuZ3RoICYmXG4gICAgICAgIHRoaXMuZGF0YVtpbnNlcnRJbmRleF0ubGV2ZWwgPiBwYXJlbnROb2RlLmxldmVsXG4gICAgICApIHtcbiAgICAgICAgaW5zZXJ0SW5kZXgrKztcbiAgICAgIH1cblxuICAgICAgdGhpcy5kYXRhLnNwbGljZShpbnNlcnRJbmRleCwgMCwgLi4ubmV3Tm9kZXMpO1xuXG4gICAgICAvLyBFeHBhbmRpciBzaSBhw7puIG5vIGxvIGVzdMOhXG4gICAgICBpZiAoIXRoaXMuX3RyZWVDb250cm9sLmlzRXhwYW5kZWQocGFyZW50Tm9kZSkpIHtcbiAgICAgICAgdGhpcy5fdHJlZUNvbnRyb2wuZXhwYW5kKHBhcmVudE5vZGUpO1xuICAgICAgfVxuXG4gICAgICAvLyBTZWxlY2Npb25hciBoaWpvcyBzaSBlbCBwYWRyZSBlc3TDoSBzZWxlY2Npb25hZG9cbiAgICAgIGlmICh0aGlzLm9UcmVlLnNlbGVjdGlvbi5pc1NlbGVjdGVkKHBhcmVudE5vZGUpKSB7XG4gICAgICAgIHRoaXMub1RyZWUuc2VsZWN0aW9uLnNlbGVjdCguLi5uZXdOb2Rlcyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBjb3VudCA9IDA7XG4gICAgICBmb3IgKFxuICAgICAgICBsZXQgaSA9IGluZGV4ICsgMTtcbiAgICAgICAgaSA8IHRoaXMuZGF0YS5sZW5ndGggJiYgdGhpcy5kYXRhW2ldLmxldmVsID4gcGFyZW50Tm9kZS5sZXZlbDtcbiAgICAgICAgaSsrLCBjb3VudCsrXG4gICAgICApO1xuICAgICAgdGhpcy5kYXRhLnNwbGljZShpbmRleCArIDEsIGNvdW50KTtcbiAgICB9XG5cbiAgICAvLyBSZWZyZXNjYXIgbm9kb3MgZGVsIHRyZWUgY29udHJvbFxuICAgIHRoaXMuX3RyZWVDb250cm9sLmRhdGFOb2RlcyA9IHRoaXMuZGF0YTtcblxuICAgIC8vIE5vdGlmaWNhciBjYW1iaW9cbiAgICB0aGlzLmRhdGFDaGFuZ2UubmV4dCh0aGlzLmRhdGEpO1xuICAgIHBhcmVudE5vZGUuaXNMb2FkaW5nID0gZmFsc2U7XG5cbiAgfVxuXG5cbn1cbiJdfQ==