UNPKG

@ux-aspects/ux-aspects

Version:

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

91 lines 10.4 kB
import { coerceBooleanProperty } from '@angular/cdk/coercion'; import { Directive, EventEmitter, HostBinding, HostListener, inject, Input, Output } from '@angular/core'; import { Subject } from 'rxjs'; import { takeUntil } from 'rxjs/operators'; import { TreeGridService } from './tree-grid.service'; import * as i0 from "@angular/core"; export class TreeGridRowDirective { constructor() { this._treeGridService = inject(TreeGridService); this.expandedChange = new EventEmitter(); this.loading = false; this._expanded = false; this._onDestroy = new Subject(); } set expanded(value) { const expanded = coerceBooleanProperty(value); if (expanded !== this._expanded) { this._expanded = expanded; this._treeGridService.setExpanded(this.item, expanded); } } get expanded() { return this._expanded; } ngOnInit() { if (!this.item || !this.item.state) { throw new Error('uxTreeGridRow should be configured with an object emitted by uxTreeGrid.rows.'); } this.item.state.loading$.pipe(takeUntil(this._onDestroy)) .subscribe(loading => this.loading = loading); } ngOnDestroy() { this._onDestroy.next(); this._onDestroy.complete(); } collapse(event) { this.expanded = false; this.expandedChange.emit(false); if (event) { event.preventDefault(); } } expand(event) { // take into account whether or not the item can expanded if (!this.canExpand) { return; } this.expanded = true; this.expandedChange.emit(true); if (event) { event.preventDefault(); } } toggle() { this.expanded ? this.collapse() : this.expand(); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: TreeGridRowDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); } static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.12", type: TreeGridRowDirective, selector: "[uxTreeGridRow]", inputs: { item: ["uxTreeGridRow", "item"], canExpand: "canExpand", expanded: "expanded" }, outputs: { expandedChange: "expandedChange" }, host: { listeners: { "keydown.ArrowLeft": "collapse($event)", "keydown.ArrowRight": "expand($event)" }, properties: { "class.treegrid-row": "true", "class.treegrid-row-expanded": "this.expanded", "class.treegrid-row-loading": "this.loading" } }, exportAs: ["uxTreeGridRow"], ngImport: i0 }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: TreeGridRowDirective, decorators: [{ type: Directive, args: [{ selector: '[uxTreeGridRow]', exportAs: 'uxTreeGridRow', host: { '[class.treegrid-row]': 'true' } }] }], propDecorators: { item: [{ type: Input, args: ['uxTreeGridRow'] }], canExpand: [{ type: Input }], expanded: [{ type: Input }, { type: HostBinding, args: ['class.treegrid-row-expanded'] }], expandedChange: [{ type: Output }], loading: [{ type: HostBinding, args: ['class.treegrid-row-loading'] }], collapse: [{ type: HostListener, args: ['keydown.ArrowLeft', ['$event']] }], expand: [{ type: HostListener, args: ['keydown.ArrowRight', ['$event']] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS1ncmlkLXJvdy5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvZGlyZWN0aXZlcy90cmVlLWdyaWQvdHJlZS1ncmlkLXJvdy5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDOUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0gsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDOztBQVN0RCxNQUFNLE9BQU8sb0JBQW9CO0lBUGpDO1FBUXFCLHFCQUFnQixHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQztRQXNCNUQsbUJBQWMsR0FBRyxJQUFJLFlBQVksRUFBVyxDQUFDO1FBRzdDLFlBQU8sR0FBWSxLQUFLLENBQUM7UUFFakIsY0FBUyxHQUFHLEtBQUssQ0FBQztRQUVULGVBQVUsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO0tBK0NyRDtJQXBFRyxJQUVJLFFBQVEsQ0FBQyxLQUFjO1FBQ3ZCLE1BQU0sUUFBUSxHQUFHLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzlDLElBQUksUUFBUSxLQUFLLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUM5QixJQUFJLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQztZQUMxQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDM0QsQ0FBQztJQUNMLENBQUM7SUFDRCxJQUFJLFFBQVE7UUFDUixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDMUIsQ0FBQztJQVlELFFBQVE7UUFFSixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDakMsTUFBTSxJQUFJLEtBQUssQ0FBQywrRUFBK0UsQ0FBQyxDQUFDO1FBQ3JHLENBQUM7UUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7YUFDcEQsU0FBUyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRUQsV0FBVztRQUNQLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBR0QsUUFBUSxDQUFDLEtBQWE7UUFFbEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7UUFDdEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFaEMsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUNSLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUMzQixDQUFDO0lBQ0wsQ0FBQztJQUdELE1BQU0sQ0FBQyxLQUFhO1FBRWhCLHlEQUF5RDtRQUN6RCxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2xCLE9BQU87UUFDWCxDQUFDO1FBRUQsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFDckIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFL0IsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUNSLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUMzQixDQUFDO0lBQ0wsQ0FBQztJQUVELE1BQU07UUFDRixJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUNwRCxDQUFDOytHQTVFUSxvQkFBb0I7bUdBQXBCLG9CQUFvQjs7NEZBQXBCLG9CQUFvQjtrQkFQaEMsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsaUJBQWlCO29CQUMzQixRQUFRLEVBQUUsZUFBZTtvQkFDekIsSUFBSSxFQUFFO3dCQUNGLHNCQUFzQixFQUFFLE1BQU07cUJBQ2pDO2lCQUNKOzhCQUtHLElBQUk7c0JBREgsS0FBSzt1QkFBQyxlQUFlO2dCQUl0QixTQUFTO3NCQURSLEtBQUs7Z0JBS0YsUUFBUTtzQkFGWCxLQUFLOztzQkFDTCxXQUFXO3VCQUFDLDZCQUE2QjtnQkFhMUMsY0FBYztzQkFEYixNQUFNO2dCQUlQLE9BQU87c0JBRE4sV0FBVzt1QkFBQyw0QkFBNEI7Z0JBdUJ6QyxRQUFRO3NCQURQLFlBQVk7dUJBQUMsbUJBQW1CLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBWTdDLE1BQU07c0JBREwsWUFBWTt1QkFBQyxvQkFBb0IsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5pbXBvcnQgeyBEaXJlY3RpdmUsIEV2ZW50RW1pdHRlciwgSG9zdEJpbmRpbmcsIEhvc3RMaXN0ZW5lciwgaW5qZWN0LCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgVHJlZUdyaWRJdGVtIH0gZnJvbSAnLi90cmVlLWdyaWQtaXRlbS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgVHJlZUdyaWRTZXJ2aWNlIH0gZnJvbSAnLi90cmVlLWdyaWQuc2VydmljZSc7XG5cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAnW3V4VHJlZUdyaWRSb3ddJyxcbiAgICBleHBvcnRBczogJ3V4VHJlZUdyaWRSb3cnLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgJ1tjbGFzcy50cmVlZ3JpZC1yb3ddJzogJ3RydWUnXG4gICAgfVxufSlcbmV4cG9ydCBjbGFzcyBUcmVlR3JpZFJvd0RpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF90cmVlR3JpZFNlcnZpY2UgPSBpbmplY3QoVHJlZUdyaWRTZXJ2aWNlKTtcblxuICAgIEBJbnB1dCgndXhUcmVlR3JpZFJvdycpXG4gICAgaXRlbTogVHJlZUdyaWRJdGVtO1xuXG4gICAgQElucHV0KClcbiAgICBjYW5FeHBhbmQ6IGJvb2xlYW47XG5cbiAgICBASW5wdXQoKVxuICAgIEBIb3N0QmluZGluZygnY2xhc3MudHJlZWdyaWQtcm93LWV4cGFuZGVkJylcbiAgICBzZXQgZXhwYW5kZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgY29uc3QgZXhwYW5kZWQgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICAgICAgICBpZiAoZXhwYW5kZWQgIT09IHRoaXMuX2V4cGFuZGVkKSB7XG4gICAgICAgICAgICB0aGlzLl9leHBhbmRlZCA9IGV4cGFuZGVkO1xuICAgICAgICAgICAgdGhpcy5fdHJlZUdyaWRTZXJ2aWNlLnNldEV4cGFuZGVkKHRoaXMuaXRlbSwgZXhwYW5kZWQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldCBleHBhbmRlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2V4cGFuZGVkO1xuICAgIH1cblxuICAgIEBPdXRwdXQoKVxuICAgIGV4cGFuZGVkQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy50cmVlZ3JpZC1yb3ctbG9hZGluZycpXG4gICAgbG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgcHJpdmF0ZSBfZXhwYW5kZWQgPSBmYWxzZTtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgX29uRGVzdHJveSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcblxuICAgICAgICBpZiAoIXRoaXMuaXRlbSB8fCAhdGhpcy5pdGVtLnN0YXRlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3V4VHJlZUdyaWRSb3cgc2hvdWxkIGJlIGNvbmZpZ3VyZWQgd2l0aCBhbiBvYmplY3QgZW1pdHRlZCBieSB1eFRyZWVHcmlkLnJvd3MuJyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLml0ZW0uc3RhdGUubG9hZGluZyQucGlwZSh0YWtlVW50aWwodGhpcy5fb25EZXN0cm95KSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUobG9hZGluZyA9PiB0aGlzLmxvYWRpbmcgPSBsb2FkaW5nKTtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fb25EZXN0cm95Lm5leHQoKTtcbiAgICAgICAgdGhpcy5fb25EZXN0cm95LmNvbXBsZXRlKCk7XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bi5BcnJvd0xlZnQnLCBbJyRldmVudCddKVxuICAgIGNvbGxhcHNlKGV2ZW50PzogRXZlbnQpOiB2b2lkIHtcblxuICAgICAgICB0aGlzLmV4cGFuZGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZXhwYW5kZWRDaGFuZ2UuZW1pdChmYWxzZSk7XG5cbiAgICAgICAgaWYgKGV2ZW50KSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bi5BcnJvd1JpZ2h0JywgWyckZXZlbnQnXSlcbiAgICBleHBhbmQoZXZlbnQ/OiBFdmVudCk6IHZvaWQge1xuXG4gICAgICAgIC8vIHRha2UgaW50byBhY2NvdW50IHdoZXRoZXIgb3Igbm90IHRoZSBpdGVtIGNhbiBleHBhbmRlZFxuICAgICAgICBpZiAoIXRoaXMuY2FuRXhwYW5kKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmV4cGFuZGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5leHBhbmRlZENoYW5nZS5lbWl0KHRydWUpO1xuXG4gICAgICAgIGlmIChldmVudCkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRvZ2dsZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5leHBhbmRlZCA/IHRoaXMuY29sbGFwc2UoKSA6IHRoaXMuZXhwYW5kKCk7XG4gICAgfVxufVxuIl19