ontimize-web-ngx
Version:
Ontimize Web framework using Angular 15
93 lines • 14.3 kB
JavaScript
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==