@ux-aspects/ux-aspects
Version:
Open source user interface framework for building modern, responsive, mobile big data applications
58 lines • 7.47 kB
JavaScript
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==