UNPKG

@bimeister/pupakit.tree

Version:
78 lines 12.1 kB
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==