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