UNPKG

@junte/ui

Version:

Quality Angular UI components kit

187 lines 18.7 kB
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); } var Config = /** @class */ (function () { function Config(defs) { if (defs === void 0) { defs = null; } if (!!defs) { Object.assign(this, defs); } } return Config; }()); var SELECTABLE_SIGNALS = new InjectionToken('selectable_signals'); var hub = new EventEmitter(); export function eventEmitterFactory() { return hub; } var SelectableDirective = /** @class */ (function () { function SelectableDirective(signals, logger) { var _this = this; 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 = function () { return _this.logger.error('value accessor is not registered'); }; this.onTouched = function () { return _this.logger.error('value accessor is not registered'); }; this.registerOnChange = function (fn) { return _this.onChange = fn; }; this.registerOnTouched = function (fn) { return _this.onTouched = fn; }; this.onBlur = function () { return _this.onTouched(); }; } SelectableDirective_1 = SelectableDirective; Object.defineProperty(SelectableDirective.prototype, "selected", { get: function () { var value = this.config.value; return this.state.findIndex(function (e) { return isEqual(e, value); }) !== -1; }, enumerable: true, configurable: true }); Object.defineProperty(SelectableDirective.prototype, "configure", { set: function (config) { Object.assign(this.config, config); }, enumerable: true, configurable: true }); SelectableDirective.prototype.ngOnInit = function () { var _this = this; this.signals.subscribe(function (state) { return _this.state = state; }); }; SelectableDirective.prototype.writeValue = function (value) { this.state = !!value ? Array.isArray(value) ? value : [value] : []; }; SelectableDirective.prototype.setDisabledState = function (disabled) { this.disabled = disabled; }; SelectableDirective.prototype.select = function () { var _a = this.config, mode = _a.mode, value = _a.value, enabled = _a.enabled, features = _a.features; if (!enabled) { return; } switch (mode) { case SelectMode.single: var current = this.state.length > 0 ? this.state[0] : null; if (!!current) { var 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: var index = this.state.findIndex(function (e) { return 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); }; var SelectableDirective_1; SelectableDirective.ctorParameters = function () { return [ { 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(function () { return SelectableDirective_1; }), multi: true }, { provide: SELECTABLE_SIGNALS, useFactory: eventEmitterFactory } ] }), __param(0, Inject(SELECTABLE_SIGNALS)), __metadata("design:paramtypes", [EventEmitter, NGXLogger]) ], SelectableDirective); return SelectableDirective; }()); export { SelectableDirective }; var SelectableModule = /** @class */ (function () { function SelectableModule() { } SelectableModule = __decorate([ NgModule({ declarations: [ SelectableDirective ], imports: [ CommonModule ], exports: [ SelectableDirective ] }) ], SelectableModule); return SelectableModule; }()); export { SelectableModule }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0YWJsZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BqdW50ZS91aS8iLCJzb3VyY2VzIjpbImxpYi9jb3JlL2RpcmVjdGl2ZXMvc2VsZWN0YWJsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFDTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLFVBQVUsRUFDVixXQUFXLEVBQ1gsWUFBWSxFQUNaLE1BQU0sRUFDTixjQUFjLEVBQ2QsS0FBSyxFQUNMLFFBQVEsRUFDUixNQUFNLEVBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDdkMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRWhELE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFakMsSUFBSyxVQUdKO0FBSEQsV0FBSyxVQUFVO0lBQ2IsK0JBQWlCLENBQUE7SUFDakIsbUNBQXFCLENBQUE7QUFDdkIsQ0FBQyxFQUhJLFVBQVUsS0FBVixVQUFVLFFBR2Q7QUFFRCxTQUFTLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUNuQixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqRCxDQUFDO0FBRUQ7SUFNRSxnQkFBWSxJQUFnQjtRQUFoQixxQkFBQSxFQUFBLFdBQWdCO1FBQzFCLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRTtZQUNWLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQzNCO0lBQ0gsQ0FBQztJQUNILGFBQUM7QUFBRCxDQUFDLEFBWEQsSUFXQztBQUVELElBQU0sa0JBQWtC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O1lBQ1IsWUFBWSxFQUFFO2dCQUNaLG1CQUFtQjthQUNwQjtZQUNELE9BQU8sRUFBRTtnQkFDUCxZQUFZO2FBQ2I7WUFDRCxPQUFPLEVBQUU7Z0JBQ1AsbUJBQW1CO2FBQ3BCO1NBQ0YsQ0FBQztPQUNXLGdCQUFnQixDQUM1QjtJQUFELHVCQUFDO0NBQUEsQUFERCxJQUNDO1NBRFksZ0JBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIERpcmVjdGl2ZSxcbiAgRXZlbnRFbWl0dGVyLFxuICBmb3J3YXJkUmVmLFxuICBIb3N0QmluZGluZyxcbiAgSG9zdExpc3RlbmVyLFxuICBJbmplY3QsXG4gIEluamVjdGlvblRva2VuLFxuICBJbnB1dCxcbiAgTmdNb2R1bGUsXG4gIE9uSW5pdFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE5HWExvZ2dlciB9IGZyb20gJ25neC1sb2dnZXInO1xuaW1wb3J0IHsgUHJvcGVydHlBcGkgfSBmcm9tICcuLi9kZWNvcmF0b3JzL2FwaSc7XG5pbXBvcnQgeyBGZWF0dXJlIH0gZnJvbSAnLi4vZW51bXMvZmVhdHVyZSc7XG5pbXBvcnQgeyBVSSB9IGZyb20gJy4uL2VudW1zL3VpJztcblxuZW51bSBTZWxlY3RNb2RlIHtcbiAgc2luZ2xlID0gJ3NpbmdsZScsXG4gIG11bHRpcGxlID0gJ211bHRpcGxlJ1xufVxuXG5mdW5jdGlvbiBpc0VxdWFsKGEsIGIpIHtcbiAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGEpID09PSBKU09OLnN0cmluZ2lmeShiKTtcbn1cblxuY2xhc3MgQ29uZmlnIHtcbiAgbW9kZTogU2VsZWN0TW9kZTtcbiAgdmFsdWU6IGFueTtcbiAgZW5hYmxlZDogdHJ1ZTtcbiAgZmVhdHVyZXM6IEZlYXR1cmVbXTtcblxuICBjb25zdHJ1Y3RvcihkZWZzOiBhbnkgPSBudWxsKSB7XG4gICAgaWYgKCEhZGVmcykge1xuICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBkZWZzKTtcbiAgICB9XG4gIH1cbn1cblxuY29uc3QgU0VMRUNUQUJMRV9TSUdOQUxTID0gbmV3IEluamVjdGlvblRva2VuKCdzZWxlY3RhYmxlX3NpZ25hbHMnKTtcblxuY29uc3QgaHViID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG5leHBvcnQgZnVuY3Rpb24gZXZlbnRFbWl0dGVyRmFjdG9yeSgpIHtcbiAgcmV0dXJuIGh1Yjtcbn1cblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2pudFNlbGVjdGFibGVdJyxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBTZWxlY3RhYmxlRGlyZWN0aXZlKSxcbiAgICAgIG11bHRpOiB0cnVlXG4gICAgfSxcbiAgICB7XG4gICAgICBwcm92aWRlOiBTRUxFQ1RBQkxFX1NJR05BTFMsXG4gICAgICB1c2VGYWN0b3J5OiBldmVudEVtaXR0ZXJGYWN0b3J5XG4gICAgfV1cbn0pXG5leHBvcnQgY2xhc3MgU2VsZWN0YWJsZURpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCwgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuXG4gIGNvbmZpZzogQ29uZmlnID0gbmV3IENvbmZpZyh7XG4gICAgbW9kZTogU2VsZWN0TW9kZS5zaW5nbGUsXG4gICAgZW5hYmxlZDogdHJ1ZSxcbiAgICBmZWF0dXJlczogW11cbiAgfSk7XG5cbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmRhdGEtZGlzYWJsZWQnKVxuICBkaXNhYmxlZCA9IGZhbHNlO1xuXG4gIEBIb3N0QmluZGluZygnYXR0ci5kYXRhLXNlbGVjdGVkJylcbiAgZ2V0IHNlbGVjdGVkKCkge1xuICAgIGNvbnN0IHt2YWx1ZX0gPSB0aGlzLmNvbmZpZztcbiAgICByZXR1cm4gdGhpcy5zdGF0ZS5maW5kSW5kZXgoZSA9PiBpc0VxdWFsKGUsIHZhbHVlKSkgIT09IC0xO1xuICB9XG5cbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmRhdGEtbW9kZScpXG4gIF9tb2RlOiBTZWxlY3RNb2RlID0gU2VsZWN0TW9kZS5zaW5nbGU7XG5cbiAgQFByb3BlcnR5QXBpKHtcbiAgICBkZXNjcmlwdGlvbjogJ1NlbGVjdGFibGUgY29uZmlndXJhdGlvbicsXG4gICAgdHlwZTogJ3ttb2RlPzogU2VsZWN0TW9kZSwgdmFsdWU6IGFueSwgZW5hYmxlZD86IGJvb2xlYW4sIGZlYXR1cmVzPzogRmVhdHVyZVtdfScsXG4gICAgZGVmYXVsdDogJ3t9J1xuICB9KVxuICBASW5wdXQoJ2pudFNlbGVjdGFibGUnKVxuICBzZXQgY29uZmlndXJlKGNvbmZpZzoge1xuICAgIG1vZGU/OiBTZWxlY3RNb2RlLFxuICAgIHZhbHVlOiBhbnksXG4gICAgZW5hYmxlZD86IGJvb2xlYW4sXG4gICAgZmVhdHVyZXM/OiBGZWF0dXJlW11cbiAgfSkge1xuICAgIE9iamVjdC5hc3NpZ24odGhpcy5jb25maWcsIGNvbmZpZyk7XG4gIH1cblxuICBzdGF0ZTogYW55W107XG5cbiAgb25DaGFuZ2U6ICh2YWx1ZTogYW55KSA9PiB2b2lkID0gKCkgPT4gdGhpcy5sb2dnZXIuZXJyb3IoJ3ZhbHVlIGFjY2Vzc29yIGlzIG5vdCByZWdpc3RlcmVkJyk7XG4gIG9uVG91Y2hlZDogKCkgPT4gdm9pZCA9ICgpID0+IHRoaXMubG9nZ2VyLmVycm9yKCd2YWx1ZSBhY2Nlc3NvciBpcyBub3QgcmVnaXN0ZXJlZCcpO1xuICByZWdpc3Rlck9uQ2hhbmdlID0gZm4gPT4gdGhpcy5vbkNoYW5nZSA9IGZuO1xuICByZWdpc3Rlck9uVG91Y2hlZCA9IGZuID0+IHRoaXMub25Ub3VjaGVkID0gZm47XG4gIEBIb3N0TGlzdGVuZXIoJ2JsdXInKSBvbkJsdXIgPSAoKSA9PiB0aGlzLm9uVG91Y2hlZCgpO1xuXG4gIGNvbnN0cnVjdG9yKEBJbmplY3QoU0VMRUNUQUJMRV9TSUdOQUxTKSBwcml2YXRlIHNpZ25hbHM6IEV2ZW50RW1pdHRlcjxhbnk+LFxuICAgICAgICAgICAgICBwcml2YXRlIGxvZ2dlcjogTkdYTG9nZ2VyKSB7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnNpZ25hbHMuc3Vic2NyaWJlKHN0YXRlID0+IHRoaXMuc3RhdGUgPSBzdGF0ZSk7XG4gIH1cblxuICB3cml0ZVZhbHVlKHZhbHVlOiBhbnkgfCBhbnlbXSkge1xuICAgIHRoaXMuc3RhdGUgPSAhIXZhbHVlID8gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZSA6IFt2YWx1ZV0gOiBbXTtcbiAgfVxuXG4gIHNldERpc2FibGVkU3RhdGUoZGlzYWJsZWQ6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmRpc2FibGVkID0gZGlzYWJsZWQ7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdjbGljaycpXG4gIHNlbGVjdCgpIHtcbiAgICBjb25zdCB7bW9kZSwgdmFsdWUsIGVuYWJsZWQsIGZlYXR1cmVzfSA9IHRoaXMuY29uZmlnO1xuICAgIGlmICghZW5hYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHN3aXRjaCAobW9kZSkge1xuICAgICAgY2FzZSBTZWxlY3RNb2RlLnNpbmdsZTpcbiAgICAgICAgY29uc3QgY3VycmVudCA9IHRoaXMuc3RhdGUubGVuZ3RoID4gMCA/IHRoaXMuc3RhdGVbMF0gOiBudWxsO1xuICAgICAgICBpZiAoISFjdXJyZW50KSB7XG4gICAgICAgICAgY29uc3Qgc2FtZSA9IGlzRXF1YWwoY3VycmVudCwgdmFsdWUpO1xuICAgICAgICAgIGlmIChzYW1lICYmICFmZWF0dXJlcy5pbmNsdWRlcyhVSS5mZWF0dXJlLmFsbG93RW1wdHkpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuc3RhdGUgPSBzYW1lID8gW10gOiBbdmFsdWVdO1xuICAgICAgICAgIHRoaXMub25DaGFuZ2Uoc2FtZSA/IG51bGwgOiB2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zdGF0ZSA9IFt2YWx1ZV07XG4gICAgICAgICAgdGhpcy5vbkNoYW5nZSh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFNlbGVjdE1vZGUubXVsdGlwbGU6XG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5zdGF0ZS5maW5kSW5kZXgoZSA9PiBpc0VxdWFsKGUsIHZhbHVlKSk7XG4gICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICB0aGlzLnN0YXRlLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zdGF0ZS5wdXNoKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9uQ2hhbmdlKHRoaXMuc3RhdGUpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgdGhpcy5zaWduYWxzLmVtaXQodGhpcy5zdGF0ZSk7XG4gIH1cblxufVxuXG5ATmdNb2R1bGUoe1xuICBkZWNsYXJhdGlvbnM6IFtcbiAgICBTZWxlY3RhYmxlRGlyZWN0aXZlXG4gIF0sXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGVcbiAgXSxcbiAgZXhwb3J0czogW1xuICAgIFNlbGVjdGFibGVEaXJlY3RpdmVcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBTZWxlY3RhYmxlTW9kdWxlIHtcbn1cbiJdfQ==