UNPKG

@junte/ui

Version:

Quality Angular UI components kit

170 lines 17.2 kB
var SelectableDirective_1; import { __decorate, __metadata, __param } from "tslib"; import { CommonModule } from '@angular/common'; import { Directive, EventEmitter, forwardRef, HostBinding, HostListener, Inject, InjectionToken, Input, NgModule, OnInit } from '@angular/core'; import { NG_VALUE_ACCESSOR } from '@angular/forms'; import { NGXLogger } from 'ngx-logger'; import { PropertyApi } from '../decorators/api'; import { UI } from '../enums/ui'; var SelectMode; (function (SelectMode) { SelectMode["single"] = "single"; SelectMode["multiple"] = "multiple"; })(SelectMode || (SelectMode = {})); function isEqual(a, b) { return JSON.stringify(a) === JSON.stringify(b); } class Config { constructor(defs = null) { if (!!defs) { Object.assign(this, defs); } } } const SELECTABLE_SIGNALS = new InjectionToken('selectable_signals'); const hub = new EventEmitter(); export function eventEmitterFactory() { return hub; } let SelectableDirective = SelectableDirective_1 = class SelectableDirective { constructor(signals, logger) { this.signals = signals; this.logger = logger; this.config = new Config({ mode: SelectMode.single, enabled: true, features: [] }); this.disabled = false; this._mode = SelectMode.single; this.onChange = () => this.logger.error('value accessor is not registered'); this.onTouched = () => this.logger.error('value accessor is not registered'); this.registerOnChange = fn => this.onChange = fn; this.registerOnTouched = fn => this.onTouched = fn; this.onBlur = () => this.onTouched(); } get selected() { const { value } = this.config; return this.state.findIndex(e => isEqual(e, value)) !== -1; } set configure(config) { Object.assign(this.config, config); } ngOnInit() { this.signals.subscribe(state => this.state = state); } writeValue(value) { this.state = !!value ? Array.isArray(value) ? value : [value] : []; } setDisabledState(disabled) { this.disabled = disabled; } select() { const { mode, value, enabled, features } = this.config; if (!enabled) { return; } switch (mode) { case SelectMode.single: const current = this.state.length > 0 ? this.state[0] : null; if (!!current) { const same = isEqual(current, value); if (same && !features.includes(UI.feature.allowEmpty)) { return; } this.state = same ? [] : [value]; this.onChange(same ? null : value); } else { this.state = [value]; this.onChange(value); } break; case SelectMode.multiple: const index = this.state.findIndex(e => isEqual(e, value)); if (index !== -1) { this.state.splice(index, 1); } else { this.state.push(value); } this.onChange(this.state); break; } this.signals.emit(this.state); } }; SelectableDirective.ctorParameters = () => [ { type: EventEmitter, decorators: [{ type: Inject, args: [SELECTABLE_SIGNALS,] }] }, { type: NGXLogger } ]; __decorate([ HostBinding('attr.data-disabled'), __metadata("design:type", Object) ], SelectableDirective.prototype, "disabled", void 0); __decorate([ HostBinding('attr.data-selected'), __metadata("design:type", Object), __metadata("design:paramtypes", []) ], SelectableDirective.prototype, "selected", null); __decorate([ HostBinding('attr.data-mode'), __metadata("design:type", String) ], SelectableDirective.prototype, "_mode", void 0); __decorate([ PropertyApi({ description: 'Selectable configuration', type: '{mode?: SelectMode, value: any, enabled?: boolean, features?: Feature[]}', default: '{}' }), Input('jntSelectable'), __metadata("design:type", Object), __metadata("design:paramtypes", [Object]) ], SelectableDirective.prototype, "configure", null); __decorate([ HostListener('blur'), __metadata("design:type", Object) ], SelectableDirective.prototype, "onBlur", void 0); __decorate([ HostListener('click'), __metadata("design:type", Function), __metadata("design:paramtypes", []), __metadata("design:returntype", void 0) ], SelectableDirective.prototype, "select", null); SelectableDirective = SelectableDirective_1 = __decorate([ Directive({ selector: '[jntSelectable]', providers: [ { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => SelectableDirective_1), multi: true }, { provide: SELECTABLE_SIGNALS, useFactory: eventEmitterFactory } ] }), __param(0, Inject(SELECTABLE_SIGNALS)), __metadata("design:paramtypes", [EventEmitter, NGXLogger]) ], SelectableDirective); export { SelectableDirective }; let SelectableModule = class SelectableModule { }; SelectableModule = __decorate([ NgModule({ declarations: [ SelectableDirective ], imports: [ CommonModule ], exports: [ SelectableDirective ] }) ], SelectableModule); export { SelectableModule }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0YWJsZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BqdW50ZS91aS8iLCJzb3VyY2VzIjpbImxpYi9jb3JlL2RpcmVjdGl2ZXMvc2VsZWN0YWJsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFDWixVQUFVLEVBQ1YsV0FBVyxFQUNYLFlBQVksRUFDWixNQUFNLEVBQ04sY0FBYyxFQUNkLEtBQUssRUFDTCxRQUFRLEVBQ1IsTUFBTSxFQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBd0IsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUVoRCxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRWpDLElBQUssVUFHSjtBQUhELFdBQUssVUFBVTtJQUNiLCtCQUFpQixDQUFBO0lBQ2pCLG1DQUFxQixDQUFBO0FBQ3ZCLENBQUMsRUFISSxVQUFVLEtBQVYsVUFBVSxRQUdkO0FBRUQsU0FBUyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDbkIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakQsQ0FBQztBQUVELE1BQU0sTUFBTTtJQU1WLFlBQVksT0FBWSxJQUFJO1FBQzFCLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRTtZQUNWLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQzNCO0lBQ0gsQ0FBQztDQUNGO0FBRUQsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLGNBQWMsQ0FBQyxvQkFBb0IsQ0FBQyxD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b3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgRGlyZWN0aXZlLFxuICBFdmVudEVtaXR0ZXIsXG4gIGZvcndhcmRSZWYsXG4gIEhvc3RCaW5kaW5nLFxuICBIb3N0TGlzdGVuZXIsXG4gIEluamVjdCxcbiAgSW5qZWN0aW9uVG9rZW4sXG4gIElucHV0LFxuICBOZ01vZHVsZSxcbiAgT25Jbml0XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTkdYTG9nZ2VyIH0gZnJvbSAnbmd4LWxvZ2dlcic7XG5pbXBvcnQgeyBQcm9wZXJ0eUFwaSB9IGZyb20gJy4uL2RlY29yYXRvcnMvYXBpJztcbmltcG9ydCB7IEZlYXR1cmUgfSBmcm9tICcuLi9lbnVtcy9mZWF0dXJlJztcbmltcG9ydCB7IFVJIH0gZnJvbSAnLi4vZW51bXMvdWknO1xuXG5lbnVtIFNlbGVjdE1vZGUge1xuICBzaW5nbGUgPSAnc2luZ2xlJyxcbiAgbXVsdGlwbGUgPSAnbXVsdGlwbGUnXG59XG5cbmZ1bmN0aW9uIGlzRXF1YWwoYSwgYikge1xuICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoYSkgPT09IEpTT04uc3RyaW5naWZ5KGIpO1xufVxuXG5jbGFzcyBDb25maWcge1xuICBtb2RlOiBTZWxlY3RNb2RlO1xuICB2YWx1ZTogYW55O1xuICBlbmFibGVkOiB0cnVlO1xuICBmZWF0dXJlczogRmVhdHVyZVtdO1xuXG4gIGNvbnN0cnVjdG9yKGRlZnM6IGFueSA9IG51bGwpIHtcbiAgICBpZiAoISFkZWZzKSB7XG4gICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGRlZnMpO1xuICAgIH1cbiAgfVxufVxuXG5jb25zdCBTRUxFQ1RBQkxFX1NJR05BTFMgPSBuZXcgSW5qZWN0aW9uVG9rZW4oJ3NlbGVjdGFibGVfc2lnbmFscycpO1xuXG5jb25zdCBodWIgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbmV4cG9ydCBmdW5jdGlvbiBldmVudEVtaXR0ZXJGYWN0b3J5KCkge1xuICByZXR1cm4gaHViO1xufVxuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbam50U2VsZWN0YWJsZV0nLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFNlbGVjdGFibGVEaXJlY3RpdmUpLFxuICAgICAgbXVsdGk6IHRydWVcbiAgICB9LFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IFNFTEVDVEFCTEVfU0lHTkFMUyxcbiAgICAgIHVzZUZhY3Rvcnk6IGV2ZW50RW1pdHRlckZhY3RvcnlcbiAgICB9XVxufSlcbmV4cG9ydCBjbGFzcyBTZWxlY3RhYmxlRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG5cbiAgY29uZmlnOiBDb25maWcgPSBuZXcgQ29uZmlnKHtcbiAgICBtb2RlOiBTZWxlY3RNb2RlLnNpbmdsZSxcbiAgICBlbmFibGVkOiB0cnVlLFxuICAgIGZlYXR1cmVzOiBbXVxuICB9KTtcblxuICBASG9zdEJpbmRpbmcoJ2F0dHIuZGF0YS1kaXNhYmxlZCcpXG4gIGRpc2FibGVkID0gZmFsc2U7XG5cbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmRhdGEtc2VsZWN0ZWQnKVxuICBnZXQgc2VsZWN0ZWQoKSB7XG4gICAgY29uc3Qge3ZhbHVlfSA9IHRoaXMuY29uZmlnO1xuICAgIHJldHVybiB0aGlzLnN0YXRlLmZpbmRJbmRleChlID0+IGlzRXF1YWwoZSwgdmFsdWUpKSAhPT0gLTE7XG4gIH1cblxuICBASG9zdEJpbmRpbmcoJ2F0dHIuZGF0YS1tb2RlJylcbiAgX21vZGU6IFNlbGVjdE1vZGUgPSBTZWxlY3RNb2RlLnNpbmdsZTtcblxuICBAUHJvcGVydHlBcGkoe1xuICAgIGRlc2NyaXB0aW9uOiAnU2VsZWN0YWJsZSBjb25maWd1cmF0aW9uJyxcbiAgICB0eXBlOiAne21vZGU/OiBTZWxlY3RNb2RlLCB2YWx1ZTogYW55LCBlbmFibGVkPzogYm9vbGVhbiwgZmVhdHVyZXM/OiBGZWF0dXJlW119JyxcbiAgICBkZWZhdWx0OiAne30nXG4gIH0pXG4gIEBJbnB1dCgnam50U2VsZWN0YWJsZScpXG4gIHNldCBjb25maWd1cmUoY29uZmlnOiB7XG4gICAgbW9kZT86IFNlbGVjdE1vZGUsXG4gICAgdmFsdWU6IGFueSxcbiAgICBlbmFibGVkPzogYm9vbGVhbixcbiAgICBmZWF0dXJlcz86IEZlYXR1cmVbXVxuICB9KSB7XG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLmNvbmZpZywgY29uZmlnKTtcbiAgfVxuXG4gIHN0YXRlOiBhbnlbXTtcblxuICBvbkNoYW5nZTogKHZhbHVlOiBhbnkpID0+IHZvaWQgPSAoKSA9PiB0aGlzLmxvZ2dlci5lcnJvcigndmFsdWUgYWNjZXNzb3IgaXMgbm90IHJlZ2lzdGVyZWQnKTtcbiAgb25Ub3VjaGVkOiAoKSA9PiB2b2lkID0gKCkgPT4gdGhpcy5sb2dnZXIuZXJyb3IoJ3ZhbHVlIGFjY2Vzc29yIGlzIG5vdCByZWdpc3RlcmVkJyk7XG4gIHJlZ2lzdGVyT25DaGFuZ2UgPSBmbiA9PiB0aGlzLm9uQ2hhbmdlID0gZm47XG4gIHJlZ2lzdGVyT25Ub3VjaGVkID0gZm4gPT4gdGhpcy5vblRvdWNoZWQgPSBmbjtcbiAgQEhvc3RMaXN0ZW5lcignYmx1cicpIG9uQmx1ciA9ICgpID0+IHRoaXMub25Ub3VjaGVkKCk7XG5cbiAgY29uc3RydWN0b3IoQEluamVjdChTRUxFQ1RBQkxFX1NJR05BTFMpIHByaXZhdGUgc2lnbmFsczogRXZlbnRFbWl0dGVyPGFueT4sXG4gICAgICAgICAgICAgIHByaXZhdGUgbG9nZ2VyOiBOR1hMb2dnZXIpIHtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuc2lnbmFscy5zdWJzY3JpYmUoc3RhdGUgPT4gdGhpcy5zdGF0ZSA9IHN0YXRlKTtcbiAgfVxuXG4gIHdyaXRlVmFsdWUodmFsdWU6IGFueSB8IGFueVtdKSB7XG4gICAgdGhpcy5zdGF0ZSA9ICEhdmFsdWUgPyBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlIDogW3ZhbHVlXSA6IFtdO1xuICB9XG5cbiAgc2V0RGlzYWJsZWRTdGF0ZShkaXNhYmxlZDogYm9vbGVhbikge1xuICAgIHRoaXMuZGlzYWJsZWQgPSBkaXNhYmxlZDtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2NsaWNrJylcbiAgc2VsZWN0KCkge1xuICAgIGNvbnN0IHttb2RlLCB2YWx1ZSwgZW5hYmxlZCwgZmVhdHVyZXN9ID0gdGhpcy5jb25maWc7XG4gICAgaWYgKCFlbmFibGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc3dpdGNoIChtb2RlKSB7XG4gICAgICBjYXNlIFNlbGVjdE1vZGUuc2luZ2xlOlxuICAgICAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5zdGF0ZS5sZW5ndGggPiAwID8gdGhpcy5zdGF0ZVswXSA6IG51bGw7XG4gICAgICAgIGlmICghIWN1cnJlbnQpIHtcbiAgICAgICAgICBjb25zdCBzYW1lID0gaXNFcXVhbChjdXJyZW50LCB2YWx1ZSk7XG4gICAgICAgICAgaWYgKHNhbWUgJiYgIWZlYXR1cmVzLmluY2x1ZGVzKFVJLmZlYXR1cmUuYWxsb3dFbXB0eSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5zdGF0ZSA9IHNhbWUgPyBbXSA6IFt2YWx1ZV07XG4gICAgICAgICAgdGhpcy5vbkNoYW5nZShzYW1lID8gbnVsbCA6IHZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnN0YXRlID0gW3ZhbHVlXTtcbiAgICAgICAgICB0aGlzLm9uQ2hhbmdlKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgU2VsZWN0TW9kZS5tdWx0aXBsZTpcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnN0YXRlLmZpbmRJbmRleChlID0+IGlzRXF1YWwoZSwgdmFsdWUpKTtcbiAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICAgIHRoaXMuc3RhdGUuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnN0YXRlLnB1c2godmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMub25DaGFuZ2UodGhpcy5zdGF0ZSk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB0aGlzLnNpZ25hbHMuZW1pdCh0aGlzLnN0YXRlKTtcbiAgfVxuXG59XG5cbkBOZ01vZHVsZSh7XG4gIGRlY2xhcmF0aW9uczogW1xuICAgIFNlbGVjdGFibGVEaXJlY3RpdmVcbiAgXSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZVxuICBdLFxuICBleHBvcnRzOiBbXG4gICAgU2VsZWN0YWJsZURpcmVjdGl2ZVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIFNlbGVjdGFibGVNb2R1bGUge1xufVxuIl19