@bimeister/pupakit.tree
Version:
PupaKit Tree
78 lines • 12.1 kB
JavaScript
import '@angular/core';
import { EventBus } from '@bimeister/event-bus/rxjs';
import '@bimeister/utilities';
import 'rxjs';
import { TreeEvents } from '../events/tree.events';
import '../interfaces/tree-controller-options.interface';
import '../interfaces/tree-data-display-collection-ref.interface';
import { DefaultTreeEventHandler } from './default-tree-event-handler.class';
import './flat-tree-item.class';
import { TreeDataDisplayCollection } from './tree-data-display-collection.class';
import { DEFAULT_TREE_ITEM_SIZE_PX } from '../constants/default-tree-item-size-px.const';
import { EventsQueue, QueueEvents } from '@bimeister/pupakit.common';
export class TreeController {
constructor(options) {
this.options = options;
this.eventBus = new EventBus();
this.queue = new EventsQueue(this.eventBus);
this.dataDisplayCollection = new TreeDataDisplayCollection();
this.handler = new DefaultTreeEventHandler(this.eventBus, this.dataDisplayCollection);
this.setScrollBehavior(options?.scrollBehavior);
this.setTrackBy(options?.trackBy);
this.setHasDragAndDrop(options?.hasDragAndDrop);
this.setTreeItemSizePx(options?.treeItemSizePx);
}
dispatchInQueue(event) {
const queueEvent = new QueueEvents.AddToQueue(event);
this.eventBus.dispatch(queueEvent);
}
getOptions() {
return this.options;
}
setData(data) {
this.dispatchInQueue(new TreeEvents.SetData(data));
}
setSelected(...selectedIds) {
this.dispatchInQueue(new TreeEvents.SetSelected(selectedIds));
}
setLoading(isLoading) {
this.eventBus.dispatch(new TreeEvents.SetLoading(isLoading));
}
setHasDragAndDrop(hasDragAndDrop = false) {
this.dataDisplayCollection.hasDragAndDrop$.next(hasDragAndDrop);
}
getEvents(eventType) {
return this.queue.getEvents(eventType);
}
getDataDisplayCollectionRef() {
return this.dataDisplayCollection;
}
expand(treeItemId) {
this.eventBus.dispatch(new TreeEvents.Expand(treeItemId));
}
setChildren(treeItemId, children) {
this.dispatchInQueue(new TreeEvents.SetChildren({ treeItemId, children }));
}
removeChildren(treeItemId) {
this.dispatchInQueue(new TreeEvents.RemoveChildren(treeItemId));
}
removeTreeItem(treeItemId) {
this.dispatchInQueue(new TreeEvents.RemoveItem(treeItemId));
}
setTreeItem(treeItem) {
this.dispatchInQueue(new TreeEvents.UpdateItem(treeItem));
}
scrollTo(treeItemId) {
this.dispatchInQueue(new TreeEvents.ScrollById(treeItemId));
}
setScrollBehavior(scrollBehavior = 'smooth') {
this.dataDisplayCollection.scrollBehavior$.next(scrollBehavior);
}
setTrackBy(trackBy = TreeDataDisplayCollection.trackBy) {
this.dataDisplayCollection.trackBy$.next(trackBy);
}
setTreeItemSizePx(treeItemSizePx = DEFAULT_TREE_ITEM_SIZE_PX) {
this.dataDisplayCollection.treeItemSizePx$.next(treeItemSizePx);
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS1jb250cm9sbGVyLmNsYXNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2RlY2xhcmF0aW9ucy9jbGFzc2VzL3RyZWUtY29udHJvbGxlci5jbGFzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFzQyxlQUFlLENBQUM7QUFDdEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3JELE9BQXlCLHNCQUFzQixDQUFDO0FBQ2hELE9BQTJCLE1BQU0sQ0FBQztBQUNsQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDbkQsT0FBc0MsaURBQWlELENBQUM7QUFDeEYsT0FBNkMsMERBQTBELENBQUM7QUFDeEcsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDN0UsT0FBNkIsd0JBQXdCLENBQUM7QUFDdEQsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDakYsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDekYsT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUVyRSxNQUFNLE9BQU8sY0FBYztJQVV6QixZQUErQixPQUF5QztRQUF6QyxZQUFPLEdBQVAsT0FBTyxDQUFrQztRQVR4RCxhQUFRLEdBQWEsSUFBSSxRQUFRLEVBQUUsQ0FBQztRQUVqQyxVQUFLLEdBQWdCLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNwRCwwQkFBcUIsR0FBOEIsSUFBSSx5QkFBeUIsRUFBRSxDQUFDO1FBQ25GLFlBQU8sR0FBNEIsSUFBSSx1QkFBdUIsQ0FDL0UsSUFBSSxDQUFDLFFBQVEsRUFDYixJQUFJLENBQUMscUJBQXFCLENBQzNCLENBQUM7UUFHQSxJQUFJLENBQUMsaUJBQWlCLENBQUMsT0FBTyxFQUFFLGNBQWMs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QUFDLENBQUM7SUFDcEQsQ0FBQztJQUVPLGlCQUFpQixDQUFDLGlCQUF5Qix5QkFBeUI7UUFDMUUsSUFBSSxDQUFDLHFCQUFxQixDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDbEUsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVHJhY2tCeUZ1bmN0aW9uLCBUeXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBFdmVudEJ1cyB9IGZyb20gJ0BiaW1laXN0ZXIvZXZlbnQtYnVzL3J4anMnO1xuaW1wb3J0IHsgTnVsbGFibGUgfSBmcm9tICdAYmltZWlzdGVyL3V0aWxpdGllcyc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBUcmVlRXZlbnRzIH0gZnJvbSAnLi4vZXZlbnRzL3RyZWUuZXZlbnRzJztcbmltcG9ydCB7IFRyZWVDb250cm9sbGVyT3B0aW9ucyB9IGZyb20gJy4uL2ludGVyZmFjZXMvdHJlZS1jb250cm9sbGVyLW9wdGlvbnMuaW50ZXJmYWNlJztcbmltcG9ydCB7IFRyZWVEYXRhRGlzcGxheUNvbGxlY3Rpb25SZWYgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3RyZWUtZGF0YS1kaXNwbGF5LWNvbGxlY3Rpb24tcmVmLmludGVyZmFjZSc7XG5pbXBvcnQgeyBEZWZhdWx0VHJlZUV2ZW50SGFuZGxlciB9IGZyb20gJy4vZGVmYXVsdC10cmVlLWV2ZW50LWhhbmRsZXIuY2xhc3MnO1xuaW1wb3J0IHsgRmxhdFRyZWVJdGVtIH0gZnJvbSAnLi9mbGF0LXRyZWUtaXRlbS5jbGFzcyc7XG5pbXBvcnQgeyBUcmVlRGF0YURpc3BsYXlDb2xsZWN0aW9uIH0gZnJvbSAnLi90cmVlLWRhdGEtZGlzcGxheS1jb2xsZWN0aW9uLmNsYXNzJztcbmltcG9ydCB7IERFRkFVTFRfVFJFRV9JVEVNX1NJWkVfUFggfSBmcm9tICcuLi9jb25zdGFudHMvZGVmYXVsdC10cmVlLWl0ZW0tc2l6ZS1weC5jb25zdCc7XG5pbXBvcnQgeyBFdmVudHNRdWV1ZSwgUXVldWVFdmVudHMgfSBmcm9tICdAYmltZWlzdGVyL3B1cGFraXQuY29tbW9uJztcblxuZXhwb3J0IGNsYXNzIFRyZWVDb250cm9sbGVyIHtcbiAgcHVibGljIHJlYWRvbmx5IGV2ZW50QnVzOiBFdmVudEJ1cyA9IG5ldyBFdmVudEJ1cygpO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBxdWV1ZTogRXZlbnRzUXVldWUgPSBuZXcgRXZlbnRzUXVldWUodGhpcy5ldmVudEJ1cyk7XG4gIHByb3RlY3RlZCByZWFkb25seSBkYXRhRGlzcGxheUNvbGxlY3Rpb246IFRyZWVEYXRhRGlzcGxheUNvbGxlY3Rpb24gPSBuZXcgVHJlZURhdGFEaXNwbGF5Q29sbGVjdGlvbigpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgaGFuZGxlcjogRGVmYXVsdFRyZWVFdmVudEhhbmRsZXIgPSBuZXcgRGVmYXVsdFRyZWVFdmVudEhhbmRsZXIoXG4gICAgdGhpcy5ldmVudEJ1cyxcbiAgICB0aGlzLmRhdGFEaXNwbGF5Q29sbGVjdGlvblxuICApO1xuXG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCByZWFkb25seSBvcHRpb25zPzogTnVsbGFibGU8VHJlZUNvbnRyb2xsZXJPcHRpb25zPikge1xuICAgIHRoaXMuc2V0U2Nyb2xsQmVoYXZpb3Iob3B0aW9ucz8uc2Nyb2xsQmVoYXZpb3IpO1xuICAgIHRoaXMuc2V0VHJhY2tCeShvcHRpb25zPy50cmFja0J5KTtcbiAgICB0aGlzLnNldEhhc0RyYWdBbmREcm9wKG9wdGlvbnM/Lmhhc0RyYWdBbmREcm9wKTtcbiAgICB0aGlzLnNldFRyZWVJdGVtU2l6ZVB4KG9wdGlvbnM/LnRyZWVJdGVtU2l6ZVB4KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBkaXNwYXRjaEluUXVldWUoZXZlbnQ6IFRyZWVFdmVudHMuVHJlZUV2ZW50QmFzZSk6IHZvaWQge1xuICAgIGNvbnN0IHF1ZXVlRXZlbnQ6IFF1ZXVlRXZlbnRzLkFkZFRvUXVldWUgPSBuZXcgUXVldWVFdmVudHMuQWRkVG9RdWV1ZShldmVudCk7XG4gICAgdGhpcy5ldmVudEJ1cy5kaXNwYXRjaChxdWV1ZUV2ZW50KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRPcHRpb25zKCk6IE51bGxhYmxlPFRyZWVDb250cm9sbGVyT3B0aW9ucz4ge1xuICAgIHJldHVybiB0aGlzLm9wdGlvbnM7XG4gIH1cblxuICBwdWJsaWMgc2V0RGF0YShkYXRhOiBGbGF0VHJlZUl0ZW1bXSk6IHZvaWQge1xuICAgIHRoaXMuZGlzcGF0Y2hJblF1ZXVlKG5ldyBUcmVlRXZlbnRzLlNldERhdGEoZGF0YSkpO1xuICB9XG5cbiAgcHVibGljIHNldFNlbGVjdGVkKC4uLnNlbGVjdGVkSWRzOiBzdHJpbmdbXSk6IHZvaWQge1xuICAgIHRoaXMuZGlzcGF0Y2hJblF1ZXVlKG5ldyBUcmVlRXZlbnRzLlNldFNlbGVjdGVkKHNlbGVjdGVkSWRzKSk7XG4gIH1cblxuICBwdWJsaWMgc2V0TG9hZGluZyhpc0xvYWRpbmc6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmV2ZW50QnVzLmRpc3BhdGNoKG5ldyBUcmVlRXZlbnRzLlNldExvYWRpbmcoaXNMb2FkaW5nKSk7XG4gIH1cblxuICBwdWJsaWMgc2V0SGFzRHJhZ0FuZERyb3AoaGFzRHJhZ0FuZERyb3A6IGJvb2xlYW4gPSBmYWxzZSk6IHZvaWQge1xuICAgIHRoaXMuZGF0YURpc3BsYXlDb2xsZWN0aW9uLmhhc0RyYWdBbmREcm9wJC5uZXh0KGhhc0RyYWdBbmREcm9wKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRFdmVudHM8RSBleHRlbmRzIFRyZWVFdmVudHMuVHJlZUV2ZW50QmFzZT4oZXZlbnRUeXBlOiBUeXBlPEU+KTogT2JzZXJ2YWJsZTxFPiB7XG4gICAgcmV0dXJuIHRoaXMucXVldWUuZ2V0RXZlbnRzKGV2ZW50VHlwZSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0RGF0YURpc3BsYXlDb2xsZWN0aW9uUmVmKCk6IFRyZWVEYXRhRGlzcGxheUNvbGxlY3Rpb25SZWYge1xuICAgIHJldHVybiB0aGlzLmRhdGFEaXNwbGF5Q29sbGVjdGlvbjtcbiAgfVxuXG4gIHB1YmxpYyBleHBhbmQodHJlZUl0ZW1JZDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5ldmVudEJ1cy5kaXNwYXRjaChuZXcgVHJlZUV2ZW50cy5FeHBhbmQodHJlZUl0ZW1JZCkpO1xuICB9XG5cbiAgcHVibGljIHNldENoaWxkcmVuKHRyZWVJdGVtSWQ6IHN0cmluZywgY2hpbGRyZW46IEZsYXRUcmVlSXRlbVtdKTogdm9pZCB7XG4gICAgdGhpcy5kaXNwYXRjaEluUXVldWUobmV3IFRyZWVFdmVudHMuU2V0Q2hpbGRyZW4oeyB0cmVlSXRlbUlkLCBjaGlsZHJlbiB9KSk7XG4gIH1cblxuICBwdWJsaWMgcmVtb3ZlQ2hpbGRyZW4odHJlZUl0ZW1JZDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5kaXNwYXRjaEluUXVldWUobmV3IFRyZWVFdmVudHMuUmVtb3ZlQ2hpbGRyZW4odHJlZUl0ZW1JZCkpO1xuICB9XG5cbiAgcHVibGljIHJlbW92ZVRyZWVJdGVtKHRyZWVJdGVtSWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuZGlzcGF0Y2hJblF1ZXVlKG5ldyBUcmVlRXZlbnRzLlJlbW92ZUl0ZW0odHJlZUl0ZW1JZCkpO1xuICB9XG5cbiAgcHVibGljIHNldFRyZWVJdGVtKHRyZWVJdGVtOiBGbGF0VHJlZUl0ZW0pOiB2b2lkIHtcbiAgICB0aGlzLmRpc3BhdGNoSW5RdWV1ZShuZXcgVHJlZUV2ZW50cy5VcGRhdGVJdGVtKHRyZWVJdGVtKSk7XG4gIH1cblxuICBwdWJsaWMgc2Nyb2xsVG8odHJlZUl0ZW1JZDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5kaXNwYXRjaEluUXVldWUobmV3IFRyZWVFdmVudHMuU2Nyb2xsQnlJZCh0cmVlSXRlbUlkKSk7XG4gIH1cblxuICBwcml2YXRlIHNldFNjcm9sbEJlaGF2aW9yKHNjcm9sbEJlaGF2aW9yOiBTY3JvbGxCZWhhdmlvciA9ICdzbW9vdGgnKTogdm9pZCB7XG4gICAgdGhpcy5kYXRhRGlzcGxheUNvbGxlY3Rpb24uc2Nyb2xsQmVoYXZpb3IkLm5leHQoc2Nyb2xsQmVoYXZpb3IpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRUcmFja0J5KHRyYWNrQnk6IFRyYWNrQnlGdW5jdGlvbjxGbGF0VHJlZUl0ZW0+ID0gVHJlZURhdGFEaXNwbGF5Q29sbGVjdGlvbi50cmFja0J5KTogdm9pZCB7XG4gICAgdGhpcy5kYXRhRGlzcGxheUNvbGxlY3Rpb24udHJhY2tCeSQubmV4dCh0cmFja0J5KTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0VHJlZUl0ZW1TaXplUHgodHJlZUl0ZW1TaXplUHg6IG51bWJlciA9IERFRkFVTFRfVFJFRV9JVEVNX1NJWkVfUFgpOiB2b2lkIHtcbiAgICB0aGlzLmRhdGFEaXNwbGF5Q29sbGVjdGlvbi50cmVlSXRlbVNpemVQeCQubmV4dCh0cmVlSXRlbVNpemVQeCk7XG4gIH1cbn1cbiJdfQ==