UNPKG

@ux-aspects/ux-aspects

Version:

Open source user interface framework for building modern, responsive, mobile big data applications

58 lines 7.47 kB
import { Directive, ElementRef, EventEmitter, inject, Output } from '@angular/core'; import { fromEvent, Subject } from 'rxjs'; import { takeUntil } from 'rxjs/operators'; import * as i0 from "@angular/core"; export class PartitionMapSegmentEventsDirective { constructor() { this._elementRef = inject(ElementRef); /** Emit when the segment receives focus */ this.segmentFocus = new EventEmitter(); /** Emit when the segment is blurred */ this.segmentBlur = new EventEmitter(); /** Unsubscribe from observables */ this._onDestroy = new Subject(); } ngAfterViewInit() { // Get the parent segment element // Note we cannot use DI to get the element as this is a template // and the context has no knowledge of the partition map template const segment = this.getSegmentElement(); if (segment) { fromEvent(segment, 'focus') .pipe(takeUntil(this._onDestroy)) .subscribe(event => this.segmentFocus.emit(event)); fromEvent(segment, 'blur') .pipe(takeUntil(this._onDestroy)) .subscribe(event => this.segmentBlur.emit(event)); } } ngOnDestroy() { this._onDestroy.next(); this._onDestroy.complete(); } /** * Find the parent element that is a partition map segment */ getSegmentElement() { let ancestor = this._elementRef.nativeElement.parentElement; while (ancestor !== null) { if (ancestor.classList.contains('partition-map-segment')) { return ancestor; } ancestor = ancestor.parentElement; } } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: PartitionMapSegmentEventsDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); } static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.12", type: PartitionMapSegmentEventsDirective, selector: "[segmentFocus],[segmentBlur]", outputs: { segmentFocus: "segmentFocus", segmentBlur: "segmentBlur" }, ngImport: i0 }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: PartitionMapSegmentEventsDirective, decorators: [{ type: Directive, args: [{ selector: '[segmentFocus],[segmentBlur]', }] }], propDecorators: { segmentFocus: [{ type: Output }], segmentBlur: [{ type: Output }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFydGl0aW9uLW1hcC1zZWdtZW50LWV2ZW50cy5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9wYXJ0aXRpb24tbWFwL2V2ZW50cy9wYXJ0aXRpb24tbWFwLXNlZ21lbnQtZXZlbnRzLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWlCLFNBQVMsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBYSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUcsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDMUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDOztBQUszQyxNQUFNLE9BQU8sa0NBQWtDO0lBSC9DO1FBSXFCLGdCQUFXLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRWxELDJDQUEyQztRQUNqQyxpQkFBWSxHQUFHLElBQUksWUFBWSxFQUFjLENBQUM7UUFFeEQsdUNBQXVDO1FBQzdCLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQWMsQ0FBQztRQUV2RCxtQ0FBbUM7UUFDbEIsZUFBVSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7S0FxQ3JEO0lBbkNHLGVBQWU7UUFDWCxpQ0FBaUM7UUFDakMsaUVBQWlFO1FBQ2pFLGlFQUFpRTtRQUNqRSxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUV6QyxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQ1YsU0FBUyxDQUFhLE9BQU8sRUFBRSxPQUFPLENBQUM7aUJBQ2xDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2lCQUNoQyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBRXZELFNBQVMsQ0FBYSxPQUFPLEVBQUUsTUFBTSxDQUFDO2lCQUNqQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztpQkFDaEMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUMxRCxDQUFDO0lBQ0wsQ0FBQztJQUVELFdBQVc7UUFDUCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUVEOztPQUVHO0lBQ0ssaUJBQWlCO1FBQ3JCLElBQUksUUFBUSxHQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBNkIsQ0FBQyxhQUFhLENBQUM7UUFFN0UsT0FBTyxRQUFRLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDdkIsSUFBSSxRQUFRLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyx1QkFBdUIsQ0FBQyxFQUFFLENBQUM7Z0JBQ3ZELE9BQU8sUUFBUSxDQUFDO1lBQ3BCLENBQUM7WUFDRCxRQUFRLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQztRQUN0QyxDQUFDO0lBQ0wsQ0FBQzsrR0E5Q1Esa0NBQWtDO21HQUFsQyxrQ0FBa0M7OzRGQUFsQyxrQ0FBa0M7a0JBSDlDLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLDhCQUE4QjtpQkFDM0M7OEJBS2EsWUFBWTtzQkFBckIsTUFBTTtnQkFHRyxXQUFXO3NCQUFwQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIGluamVjdCwgT25EZXN0cm95LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGZyb21FdmVudCwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogJ1tzZWdtZW50Rm9jdXNdLFtzZWdtZW50Qmx1cl0nLFxufSlcbmV4cG9ydCBjbGFzcyBQYXJ0aXRpb25NYXBTZWdtZW50RXZlbnRzRGlyZWN0aXZlIGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9lbGVtZW50UmVmID0gaW5qZWN0KEVsZW1lbnRSZWYpO1xuXG4gICAgLyoqIEVtaXQgd2hlbiB0aGUgc2VnbWVudCByZWNlaXZlcyBmb2N1cyAqL1xuICAgIEBPdXRwdXQoKSBzZWdtZW50Rm9jdXMgPSBuZXcgRXZlbnRFbWl0dGVyPEZvY3VzRXZlbnQ+KCk7XG5cbiAgICAvKiogRW1pdCB3aGVuIHRoZSBzZWdtZW50IGlzIGJsdXJyZWQgKi9cbiAgICBAT3V0cHV0KCkgc2VnbWVudEJsdXIgPSBuZXcgRXZlbnRFbWl0dGVyPEZvY3VzRXZlbnQ+KCk7XG5cbiAgICAvKiogVW5zdWJzY3JpYmUgZnJvbSBvYnNlcnZhYmxlcyAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX29uRGVzdHJveSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIC8vIEdldCB0aGUgcGFyZW50IHNlZ21lbnQgZWxlbWVudFxuICAgICAgICAvLyBOb3RlIHdlIGNhbm5vdCB1c2UgREkgdG8gZ2V0IHRoZSBlbGVtZW50IGFzIHRoaXMgaXMgYSB0ZW1wbGF0ZVxuICAgICAgICAvLyBhbmQgdGhlIGNvbnRleHQgaGFzIG5vIGtub3dsZWRnZSBvZiB0aGUgcGFydGl0aW9uIG1hcCB0ZW1wbGF0ZVxuICAgICAgICBjb25zdCBzZWdtZW50ID0gdGhpcy5nZXRTZWdtZW50RWxlbWVudCgpO1xuXG4gICAgICAgIGlmIChzZWdtZW50KSB7XG4gICAgICAgICAgICBmcm9tRXZlbnQ8Rm9jdXNFdmVudD4oc2VnbWVudCwgJ2ZvY3VzJylcbiAgICAgICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5fb25EZXN0cm95KSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKGV2ZW50ID0+IHRoaXMuc2VnbWVudEZvY3VzLmVtaXQoZXZlbnQpKTtcblxuICAgICAgICAgICAgZnJvbUV2ZW50PEZvY3VzRXZlbnQ+KHNlZ21lbnQsICdibHVyJylcbiAgICAgICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5fb25EZXN0cm95KSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKGV2ZW50ID0+IHRoaXMuc2VnbWVudEJsdXIuZW1pdChldmVudCkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX29uRGVzdHJveS5uZXh0KCk7XG4gICAgICAgIHRoaXMuX29uRGVzdHJveS5jb21wbGV0ZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZpbmQgdGhlIHBhcmVudCBlbGVtZW50IHRoYXQgaXMgYSBwYXJ0aXRpb24gbWFwIHNlZ21lbnRcbiAgICAgKi9cbiAgICBwcml2YXRlIGdldFNlZ21lbnRFbGVtZW50KCk6IEhUTUxFbGVtZW50IHtcbiAgICAgICAgbGV0IGFuY2VzdG9yID0gKHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudCkucGFyZW50RWxlbWVudDtcblxuICAgICAgICB3aGlsZSAoYW5jZXN0b3IgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGlmIChhbmNlc3Rvci5jbGFzc0xpc3QuY29udGFpbnMoJ3BhcnRpdGlvbi1tYXAtc2VnbWVudCcpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFuY2VzdG9yO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYW5jZXN0b3IgPSBhbmNlc3Rvci5wYXJlbnRFbGVtZW50O1xuICAgICAgICB9XG4gICAgfVxufSJdfQ==