UNPKG

right-angled

Version:

Lightweight and easy to use angular data grids. Integrates with your markup and styles rather than generating its own.

103 lines 14 kB
import { Directive, EventEmitter, HostListener, Input, Optional, Output, SkipSelf } from '@angular/core'; import * as i0 from "@angular/core"; import * as i1 from "./selection-area.directive"; import * as i2 from "./providers/selection-events-helper"; export class SelectableDirective { static { this.settings = { selectedClassName: 'rt-selected' }; } constructor(selectionArea, selectionEventsHelper, renderer, el) { this.selectionArea = selectionArea; this.selectionEventsHelper = selectionEventsHelper; this.renderer = renderer; this.el = el; this.index = null; this.item = null; this.selectedChange = new EventEmitter(); this.itemSelected = new EventEmitter(); this.itemDeselected = new EventEmitter(); this.selectionChanged = new EventEmitter(); this.selectedInternal = false; } get selected() { return this.selectedInternal; } set selected(selected) { if (selected) { this.selectionEventsHelper.selectionService.selectIndex(this.index, this.selectionEventsHelper.multiple); } else { this.selectionEventsHelper.selectionService.deselectIndex(this.index); } } ngAfterViewInit() { this.selectionArea?.registerSelectable(this, this.el); } ngOnDestroy() { this.selectionArea?.unregisterSelectable(this); } mouseUpHandler(ctrlKeyPressed, shiftKeyPressed, mouseButton, preventDefaultFn, stopPropagationFn, executionContext) { if (this.selectionEventsHelper.mouseHandler(ctrlKeyPressed, shiftKeyPressed, mouseButton, this.index)) { this.clearWindowSelection(); if (this.selectionEventsHelper.preventEventsDefaults && preventDefaultFn) { preventDefaultFn.call(executionContext); } if (this.selectionEventsHelper.stopEventsPropagation && stopPropagationFn) { stopPropagationFn.call(executionContext); } } } postProcessSelection(selected) { if (selected === this.selected) { return; } this.selectedInternal = selected; this.selectedChange.emit(this.selectedInternal); if (SelectableDirective.settings.selectedClassName) { if (this.selected) { this.renderer.addClass(this.el.nativeElement, SelectableDirective.settings.selectedClassName); } else { this.renderer.removeClass(this.el.nativeElement, SelectableDirective.settings.selectedClassName); } } } clearWindowSelection() { try { window.getSelection().removeAllRanges(); } catch (e) { // do nothing } } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SelectableDirective, deps: [{ token: i1.SelectionAreaDirective, optional: true }, { token: i2.RTSelectionEventsHelper, skipSelf: true }, { token: i0.Renderer2 }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); } static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: SelectableDirective, selector: "[rtSelectable]", inputs: { item: ["rtSelectable", "item"], selected: "selected" }, outputs: { selectedChange: "selectedChange", itemSelected: "itemSelected", itemDeselected: "itemDeselected", selectionChanged: "selectionChanged" }, host: { listeners: { "mouseup": "mouseUpHandler($event.ctrlKey,$event.shiftKey,$event.which,$event.preventDefault,$event.stopPropagation,$event)" } }, exportAs: ["rtSelectable"], ngImport: i0 }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SelectableDirective, decorators: [{ type: Directive, args: [{ exportAs: 'rtSelectable', selector: '[rtSelectable]' }] }], ctorParameters: function () { return [{ type: i1.SelectionAreaDirective, decorators: [{ type: Optional }] }, { type: i2.RTSelectionEventsHelper, decorators: [{ type: SkipSelf }] }, { type: i0.Renderer2 }, { type: i0.ElementRef }]; }, propDecorators: { item: [{ type: Input, args: ['rtSelectable'] }], selectedChange: [{ type: Output }], itemSelected: [{ type: Output }], itemDeselected: [{ type: Output }], selectionChanged: [{ type: Output }], selected: [{ type: Input }], mouseUpHandler: [{ type: HostListener, args: ['mouseup', ['$event.ctrlKey', '$event.shiftKey', '$event.which', '$event.preventDefault', '$event.stopPropagation', '$event']] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0YWJsZS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yaWdodC1hbmdsZWQvc3JjL2xpYi9zZWxlY3Rpb24vc2VsZWN0YWJsZS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixTQUFTLEVBQWMsWUFBWSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQWEsUUFBUSxFQUFFLE1BQU0sRUFBYSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7QUFTMUosTUFBTSxPQUFPLG1CQUFtQjthQUNkLGFBQVEsR0FBa0M7UUFDcEQsaUJBQWlCLEVBQUUsYUFBYTtLQUNuQyxBQUZxQixDQUVwQjtJQVFGLFlBQ3dCLGFBQXFDLEVBRWxELHFCQUE4QyxFQUM3QyxRQUFtQixFQUNuQixFQUFjO1FBSkYsa0JBQWEsR0FBYixhQUFhLENBQXdCO1FBRWxELDBCQUFxQixHQUFyQixxQkFBcUIsQ0FBeUI7UUFDN0MsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQUNuQixPQUFFLEdBQUYsRUFBRSxDQUFZO1FBWm5CLFVBQUssR0FBVyxJQUFJLENBQUM7UUFDRSxTQUFJLEdBQVEsSUFBSSxDQUFDO1FBQ3JCLG1CQUFjLEdBQTBCLElBQUksWUFBWSxFQUFXLENBQUM7UUFDcEUsaUJBQVksR0FBbUMsSUFBSSxZQUFZLEVBQW9CLENBQUM7UUFDcEYsbUJBQWMsR0FBbUMsSUFBSSxZQUFZLEVBQW9CLENBQUM7UUFDdEYscUJBQWdCLEdBQW1DLElBQUksWUFBWSxFQUFvQixDQUFDO1FBQzFHLHFCQUFnQixHQUFHLEtBQUssQ0FBQztJQU85QixDQUFDO0lBRUosSUFDVyxRQUFRO1FBQ2YsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7SUFDakMsQ0FBQztJQUNELElBQVcsUUFBUSxDQUFDLFFBQWlCO1FBQ2pDLElBQUksUUFBUSxFQUFFO1lBQ1YsSUFBSSxDQUFDLHFCQUFxQixD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d0JBQXdCLEVBQUUsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIEhvc3RMaXN0ZW5lciwgSW5wdXQsIE9uRGVzdHJveSwgT3B0aW9uYWwsIE91dHB1dCwgUmVuZGVyZXIyLCBTa2lwU2VsZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBSVFNlbGVjdGlvbkV2ZW50c0hlbHBlciB9IGZyb20gJy4vcHJvdmlkZXJzL3NlbGVjdGlvbi1ldmVudHMtaGVscGVyJztcclxuaW1wb3J0IHsgUlRTZWxlY3Rpb25FdmVudCwgU2VsZWN0aW9uRWxlbWVudEV2ZW50c0VtaXR0ZXIgfSBmcm9tICcuL3Byb3ZpZGVycy9zZWxlY3Rpb24tZXZlbnRzLWVtaXR0ZXInO1xyXG5pbXBvcnQgeyBTZWxlY3Rpb25BcmVhRGlyZWN0aXZlIH0gZnJvbSAnLi9zZWxlY3Rpb24tYXJlYS5kaXJlY3RpdmUnO1xyXG5cclxuQERpcmVjdGl2ZSh7XHJcbiAgICBleHBvcnRBczogJ3J0U2VsZWN0YWJsZScsXHJcbiAgICBzZWxlY3RvcjogJ1tydFNlbGVjdGFibGVdJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgU2VsZWN0YWJsZURpcmVjdGl2ZSBpbXBsZW1lbnRzIFNlbGVjdGlvbkVsZW1lbnRFdmVudHNFbWl0dGVyLCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xyXG4gICAgcHVibGljIHN0YXRpYyBzZXR0aW5nczogeyBzZWxlY3RlZENsYXNzTmFtZTogc3RyaW5nIH0gPSB7XHJcbiAgICAgICAgc2VsZWN0ZWRDbGFzc05hbWU6ICdydC1zZWxlY3RlZCdcclxuICAgIH07XHJcbiAgICBwdWJsaWMgaW5kZXg6IG51bWJlciA9IG51bGw7XHJcbiAgICBASW5wdXQoJ3J0U2VsZWN0YWJsZScpIHB1YmxpYyBpdGVtOiBhbnkgPSBudWxsO1xyXG4gICAgQE91dHB1dCgpIHB1YmxpYyByZWFkb25seSBzZWxlY3RlZENoYW5nZTogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xyXG4gICAgQE91dHB1dCgpIHB1YmxpYyByZWFkb25seSBpdGVtU2VsZWN0ZWQ6IEV2ZW50RW1pdHRlcjxSVFNlbGVjdGlvbkV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8UlRTZWxlY3Rpb25FdmVudD4oKTtcclxuICAgIEBPdXRwdXQoKSBwdWJsaWMgcmVhZG9ubHkgaXRlbURlc2VsZWN0ZWQ6IEV2ZW50RW1pdHRlcjxSVFNlbGVjdGlvbkV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8UlRTZWxlY3Rpb25FdmVudD4oKTtcclxuICAgIEBPdXRwdXQoKSBwdWJsaWMgcmVhZG9ubHkgc2VsZWN0aW9uQ2hhbmdlZDogRXZlbnRFbWl0dGVyPFJUU2VsZWN0aW9uRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxSVFNlbGVjdGlvbkV2ZW50PigpO1xyXG4gICAgcHJpdmF0ZSBzZWxlY3RlZEludGVybmFsID0gZmFsc2U7XHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBAT3B0aW9uYWwoKSBwcml2YXRlIHNlbGVjdGlvbkFyZWE6IFNlbGVjdGlvbkFyZWFEaXJlY3RpdmUsXHJcbiAgICAgICAgQFNraXBTZWxmKClcclxuICAgICAgICBwdWJsaWMgc2VsZWN0aW9uRXZlbnRzSGVscGVyOiBSVFNlbGVjdGlvbkV2ZW50c0hlbHBlcixcclxuICAgICAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXHJcbiAgICAgICAgcHJpdmF0ZSBlbDogRWxlbWVudFJlZlxyXG4gICAgKSB7fVxyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgZ2V0IHNlbGVjdGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGVkSW50ZXJuYWw7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc2V0IHNlbGVjdGVkKHNlbGVjdGVkOiBib29sZWFuKSB7XHJcbiAgICAgICAgaWYgKHNlbGVjdGVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uRXZlbnRzSGVscGVyLnNlbGVjdGlvblNlcnZpY2Uuc2VsZWN0SW5kZXgodGhpcy5pbmRleCwgdGhpcy5zZWxlY3Rpb25FdmVudHNIZWxwZXIubXVsdGlwbGUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uRXZlbnRzSGVscGVyLnNlbGVjdGlvblNlcnZpY2UuZGVzZWxlY3RJbmRleCh0aGlzLmluZGV4KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0aW9uQXJlYT8ucmVnaXN0ZXJTZWxlY3RhYmxlKHRoaXMsIHRoaXMuZWwpO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25EZXN0cm95KCkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0aW9uQXJlYT8udW5yZWdpc3RlclNlbGVjdGFibGUodGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgQEhvc3RMaXN0ZW5lcignbW91c2V1cCcsIFsnJGV2ZW50LmN0cmxLZXknLCAnJGV2ZW50LnNoaWZ0S2V5JywgJyRldmVudC53aGljaCcsICckZXZlbnQucHJldmVudERlZmF1bHQnLCAnJGV2ZW50LnN0b3BQcm9wYWdhdGlvbicsICckZXZlbnQnXSlcclxuICAgIHB1YmxpYyBtb3VzZVVwSGFuZGxlcihcclxuICAgICAgICBjdHJsS2V5UHJlc3NlZDogYm9vbGVhbixcclxuICAgICAgICBzaGlmdEtleVByZXNzZWQ6IGJvb2xlYW4sXHJcbiAgICAgICAgbW91c2VCdXR0b246IG51bWJlcixcclxuICAgICAgICBwcmV2ZW50RGVmYXVsdEZuOiAoKSA9PiB2b2lkLFxyXG4gICAgICAgIHN0b3BQcm9wYWdhdGlvbkZuOiAoKSA9PiB2b2lkLFxyXG4gICAgICAgIGV4ZWN1dGlvbkNvbnRleHQ6IGFueVxyXG4gICAgKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uRXZlbnRzSGVscGVyLm1vdXNlSGFuZGxlcihjdHJsS2V5UHJlc3NlZCwgc2hpZnRLZXlQcmVzc2VkLCBtb3VzZUJ1dHRvbiwgdGhpcy5pbmRleCkpIHtcclxuICAgICAgICAgICAgdGhpcy5jbGVhcldpbmRvd1NlbGVjdGlvbigpO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25FdmVudHNIZWxwZXIucHJldmVudEV2ZW50c0RlZmF1bHRzICYmIHByZXZlbnREZWZhdWx0Rm4pIHtcclxuICAgICAgICAgICAgICAgIHByZXZlbnREZWZhdWx0Rm4uY2FsbChleGVjdXRpb25Db250ZXh0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25FdmVudHNIZWxwZXIuc3RvcEV2ZW50c1Byb3BhZ2F0aW9uICYmIHN0b3BQcm9wYWdhdGlvbkZuKSB7XHJcbiAgICAgICAgICAgICAgICBzdG9wUHJvcGFnYXRpb25Gbi5jYWxsKGV4ZWN1dGlvbkNvbnRleHQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHVibGljIHBvc3RQcm9jZXNzU2VsZWN0aW9uKHNlbGVjdGVkOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHNlbGVjdGVkID09PSB0aGlzLnNlbGVjdGVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEludGVybmFsID0gc2VsZWN0ZWQ7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZENoYW5nZS5lbWl0KHRoaXMuc2VsZWN0ZWRJbnRlcm5hbCk7XHJcbiAgICAgICAgaWYgKFNlbGVjdGFibGVEaXJlY3RpdmUuc2V0dGluZ3Muc2VsZWN0ZWRDbGFzc05hbWUpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LCBTZWxlY3RhYmxlRGlyZWN0aXZlLnNldHRpbmdzLnNlbGVjdGVkQ2xhc3NOYW1lKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LCBTZWxlY3RhYmxlRGlyZWN0aXZlLnNldHRpbmdzLnNlbGVjdGVkQ2xhc3NOYW1lKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHB1YmxpYyBjbGVhcldpbmRvd1NlbGVjdGlvbigpOiB2b2lkIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkucmVtb3ZlQWxsUmFuZ2VzKCk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAvLyBkbyBub3RoaW5nXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiJdfQ==