UNPKG

@douglas-serena/ng-inputs

Version:
157 lines 19.2 kB
import { ChangeDetectorRef } from '@angular/core'; import { Component, ElementRef, EventEmitter, HostBinding, Input, Output, Renderer2, ViewChild, } from '@angular/core'; import { ControlContainer, FormControlDirective, SelectControlValueAccessor, } from '@angular/forms'; import { NgInputConfigService } from '../core/ng-input-config.service'; export class SelectCustomControlValueAccessor extends SelectControlValueAccessor { constructor(_controlContainer, elementRef, renderer, _configService, _changeDetectorRef) { super(renderer, elementRef); this._controlContainer = _controlContainer; this.elementRef = elementRef; this.renderer = renderer; this._configService = _configService; this._changeDetectorRef = _changeDetectorRef; this.formControlName = ''; this.disabled = false; this.change = new EventEmitter(); this.blur = new EventEmitter(); this.focus = new EventEmitter(); this.placeholder = ''; this.label = ''; this._cols = { default: 12, sm: 12, }; this._field = null; this.readonly = false; this.errors = {}; this.time = 0; this.readonly = false; } get _placeholder() { return this.field === 'floating' && !!this.label && this.placeholder.length === 0 ? false : this.placeholder; } set cols(cols) { this._cols = Object.assign(Object.assign({}, this._cols), cols); } set field(value) { this._field = value; } get field() { return this._field ? this._field : this._configService.field.type; } get control() { var _a, _b; return (this.formControl || ((_b = (_a = this._controlContainer) === null || _a === void 0 ? void 0 : _a.control) === null || _b === void 0 ? void 0 : _b.get(this.formControlName))); } get classCols() { let className = this._configService.theme === 'bootstrap' ? `col-${this._cols.default}` : `col`; if (this._cols.lg) className += this._configService.theme === 'bootstrap' ? ` col-lg-${this._cols.lg}` : ` l${this._cols.lg}`; if (this._cols.md) className += this._configService.theme === 'bootstrap' ? ` col-md-${this._cols.md}` : ` m${this._cols.md}`; if (this._cols.sm) className += this._configService.theme === 'bootstrap' ? ` col-sm-${this._cols.sm}` : ` s${this._cols.sm}`; return className; } ngOnInit() { this.ngOnInitSuper(); if (this.disabled) this.control.disable(); else this.control.enable(); } ngOnInitSuper() { if (this.name === undefined) this.name = this.formControlName; this.validRequired(); } getMultiLabels(labels, label) { const lastLabel = label.concat([]); const rest = label.splice(1, label.length - 1); return lastLabel.length === 1 ? labels === null || labels === void 0 ? void 0 : labels[lastLabel[0]] : this.getMultiLabels(labels === null || labels === void 0 ? void 0 : labels[lastLabel[0]], rest); } getKeys(errors) { return Object.keys(errors); } getError(key) { var _a, _b, _c; return ((_b = (_a = this.control) === null || _a === void 0 ? void 0 : _a.errors) === null || _b === void 0 ? void 0 : _b[key]) && ((_c = this.control) === null || _c === void 0 ? void 0 : _c.touched); } validRequired() { var _a, _b, _c; const value = this.control.value; (_a = this === null || this === void 0 ? void 0 : this.onWrite) === null || _a === void 0 ? void 0 : _a.call(this, null); this._changeDetectorRef.detectChanges(); if (this.required === undefined) { this.required = (_b = this.control.errors) === null || _b === void 0 ? void 0 : _b.required; } (_c = this === null || this === void 0 ? void 0 : this.onWrite) === null || _c === void 0 ? void 0 : _c.call(this, value); this._changeDetectorRef.detectChanges(); } registerOnTouched(fn) { var _a; (_a = this.formControlDirective.valueAccessor) === null || _a === void 0 ? void 0 : _a.registerOnTouched(fn); } registerOnChange(fn) { this.onWrite = fn; } writeValue(obj) { clearTimeout(this.time); this.time = setTimeout(() => { this.onWrite(obj); }); } setDisabledState(isDisabled) { this.disabled = isDisabled; } } SelectCustomControlValueAccessor.decorators = [ { type: Component, args: [{ selector: '', template: '' },] } ]; SelectCustomControlValueAccessor.ctorParameters = () => [ { type: ControlContainer }, { type: ElementRef }, { type: Renderer2 }, { type: NgInputConfigService }, { type: ChangeDetectorRef } ]; SelectCustomControlValueAccessor.propDecorators = { formControlDirective: [{ type: ViewChild, args: [FormControlDirective, { static: true },] }], formControl: [{ type: Input }], formControlName: [{ type: Input }], name: [{ type: Input }], disabled: [{ type: Input }], help: [{ type: Input }], change: [{ type: Output }], blur: [{ type: Output }], focus: [{ type: Output }], placeholder: [{ type: Input }], label: [{ type: Input }], cols: [{ type: Input }], field: [{ type: Input }], readonly: [{ type: Input }], required: [{ type: Input }], errors: [{ type: Input }], classCols: [{ type: HostBinding, args: ['class',] }] }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LWN1c3RvbS1jb250cm9sLXZhbHVlLWFjY2Vzc29yLmRvbWFpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWlucHV0cy9zcmMvbGliL25nLXNlbGVjdC9zZWxlY3QtY3VzdG9tLWNvbnRyb2wtdmFsdWUtYWNjZXNzb3IuZG9tYWluLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNsRCxPQUFPLEVBRUwsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osV0FBVyxFQUNYLEtBQUssRUFFTCxNQUFNLEVBQ04sU0FBUyxFQUNULFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0wsZ0JBQWdCLEVBRWhCLG9CQUFvQixFQUNwQiwwQkFBMEIsR0FDM0IsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQVd2RSxNQUFNLE9BQU8sZ0NBQ1gsU0FBUSwwQkFBMEI7SUFrRmxDLFlBQ1ksaUJBQW1DLEVBQ25DLFVBQXNCLEVBQ3RCLFFBQW1CLEVBQ3JCLGNBQW9DLEVBQ3BDLGtCQUFxQztRQUU3QyxLQUFLLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBTmxCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBa0I7UUFDbkMsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN0QixhQUFRLEdBQVIsUUFBUSxDQUFXO1FBQ3JCLG1CQUFjLEdBQWQsY0FBYyxDQUFzQjtRQUNwQyx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW1CO1FBakZ0QyxvQkFBZSxHQUFXLEVBQUUsQ0FBQztRQUU3QixhQUFRLEdBQUcsS0FBSyxDQUFDO1FBR1QsV0FBTSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDNUIsU0FBSSxHQUFHLElBQUksWUFBWSxFQUFFLENB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QUFTO1lBU0Ysb0JBQW9CO1lBbkJwQixpQkFBaUI7OzttQ0FrQ3ZCLFNBQVMsU0FBQyxvQkFBb0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7MEJBRWhELEtBQUs7OEJBQ0wsS0FBSzttQkFDTCxLQUFLO3VCQUNMLEtBQUs7bUJBQ0wsS0FBSztxQkFFTCxNQUFNO21CQUNOLE1BQU07b0JBQ04sTUFBTTswQkFTTixLQUFLO29CQUNMLEtBQUs7bUJBS0wsS0FBSztvQkFVTCxLQUFLO3VCQVNMLEtBQUs7dUJBQ0wsS0FBSztxQkFFTCxLQUFLO3dCQVNMLFdBQVcsU0FBQyxPQUFPIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtcclxuICBBZnRlclZpZXdJbml0LFxyXG4gIENvbXBvbmVudCxcclxuICBFbGVtZW50UmVmLFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBIb3N0QmluZGluZyxcclxuICBJbnB1dCxcclxuICBPbkluaXQsXHJcbiAgT3V0cHV0LFxyXG4gIFJlbmRlcmVyMixcclxuICBWaWV3Q2hpbGQsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7XHJcbiAgQ29udHJvbENvbnRhaW5lcixcclxuICBGb3JtQ29udHJvbCxcclxuICBGb3JtQ29udHJvbERpcmVjdGl2ZSxcclxuICBTZWxlY3RDb250cm9sVmFsdWVBY2Nlc3NvcixcclxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IE5nSW5wdXRDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi4vY29yZS9uZy1pbnB1dC1jb25maWcuc2VydmljZSc7XHJcblxyXG5pbnRlcmZhY2UgSU9iamVjdCB7XHJcbiAgW2tleTogc3RyaW5nXTogc3RyaW5nO1xyXG59XHJcblxyXG5pbnRlcmZhY2UgSU9uV3JpdGUge1xyXG4gICh2YWx1ZTogYW55KTogdm9pZDtcclxufVxyXG5cclxuQENvbXBvbmVudCh7IHNlbGVjdG9yOiAnJywgdGVtcGxhdGU6ICcnIH0pXHJcbmV4cG9ydCBjbGFzcyBTZWxlY3RDdXN0b21Db250cm9sVmFsdWVBY2Nlc3NvclxyXG4gIGV4dGVuZHMgU2VsZWN0Q29udHJvbFZhbHVlQWNjZXNzb3JcclxuICBpbXBsZW1lbnRzIE9uSW5pdFxyXG57XHJcbiAgQFZpZXdDaGlsZChGb3JtQ29udHJvbERpcmVjdGl2ZSwgeyBzdGF0aWM6IHRydWUgfSlcclxuICBmb3JtQ29udHJvbERpcmVjdGl2ZTogRm9ybUNvbnRyb2xEaXJlY3RpdmU7XHJcbiAgQElucHV0KCkgZm9ybUNvbnRyb2w6IEZvcm1Db250cm9sO1xyXG4gIEBJbnB1dCgpIGZvcm1Db250cm9sTmFtZTogc3RyaW5nID0gJyc7XHJcbiAgQElucHV0KCkgbmFtZT86IHN0cmluZztcclxuICBASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGhlbHA/OiBzdHJpbmc7XHJcblxyXG4gIEBPdXRwdXQoKSBwdWJsaWMgY2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBwdWJsaWMgYmx1ciA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgcHVibGljIGZvY3VzID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICBnZXQgX3BsYWNlaG9sZGVyKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuZmllbGQgPT09ICdmbG9hdGluZycgJiZcclxuICAgICAgISF0aGlzLmxhYmVsICYmXHJcbiAgICAgIHRoaXMucGxhY2Vob2xkZXIubGVuZ3RoID09PSAwXHJcbiAgICAgID8gZmFsc2VcclxuICAgICAgOiB0aGlzLnBsYWNlaG9sZGVyO1xyXG4gIH1cclxuICBASW5wdXQoKSBwbGFjZWhvbGRlcjogc3RyaW5nID0gJyc7XHJcbiAgQElucHV0KCkgbGFiZWw6IHN0cmluZyA9ICcnO1xyXG4gIF9jb2xzOiB7IGRlZmF1bHQ6IG51bWJlcjsgbGc/OiBudW1iZXI7IG1kPzogbnVtYmVyOyBzbT86IG51bWJlciB9ID0ge1xyXG4gICAgZGVmYXVsdDogMTIsXHJcbiAgICBzbTogMTIsXHJcbiAgfTtcclxuICBASW5wdXQoKSBzZXQgY29scyhjb2xzOiB7XHJcbiAgICBkZWZhdWx0PzogbnVtYmVyO1xyXG4gICAgbGc/OiBudW1iZXI7XHJcbiAgICBtZD86IG51bWJlcjtcclxuICAgIHNtPzogbnVtYmVyO1xyXG4gIH0pIHtcclxuICAgIHRoaXMuX2NvbHMgPSB7IC4uLnRoaXMuX2NvbHMsIC4uLmNvbHMgfTtcclxuICB9XHJcblxyXG4gIF9maWVsZDogbnVsbCB8ICdncm91cCcgfCAnZmxvYXRpbmcnID0gbnVsbDtcclxuICBASW5wdXQoKSBzZXQgZmllbGQodmFsdWU6ICdncm91cCcgfCAnZmxvYXRpbmcnKSB7XHJcbiAgICB0aGlzLl9maWVsZCA9IHZhbHVlO1xyXG4gIH1cclxuICBnZXQgZmllbGQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fZmllbGRcclxuICAgICAgPyB0aGlzLl9maWVsZFxyXG4gICAgICA6ICh0aGlzLl9jb25maWdTZXJ2aWNlLmZpZWxkLnR5cGUgYXMgJ2dyb3VwJyB8ICdmbG9hdGluZycpO1xyXG4gIH1cclxuXHJcbiAgQElucHV0KCkgcmVhZG9ubHk6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSByZXF1aXJlZD86IGJvb2xlYW47XHJcblxyXG4gIEBJbnB1dCgpIGVycm9yczogSU9iamVjdCA9IHt9O1xyXG5cclxuICBnZXQgY29udHJvbCgpOiBGb3JtQ29udHJvbCB7XHJcbiAgICByZXR1cm4gKHRoaXMuZm9ybUNvbnRyb2wgfHxcclxuICAgICAgdGhpcy5fY29udHJvbENvbnRhaW5lcj8uY29udHJvbD8uZ2V0KFxyXG4gICAgICAgIHRoaXMuZm9ybUNvbnRyb2xOYW1lXHJcbiAgICAgICkpIGFzIEZvcm1Db250cm9sO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcycpIGdldCBjbGFzc0NvbHMoKSB7XHJcbiAgICBsZXQgY2xhc3NOYW1lID1cclxuICAgICAgdGhpcy5fY29uZmlnU2VydmljZS50aGVtZSA9PT0gJ2Jvb3RzdHJhcCdcclxuICAgICAgICA/IGBjb2wtJHt0aGlzLl9jb2xzLmRlZmF1bHR9YFxyXG4gICAgICAgIDogYGNvbGA7XHJcbiAgICBpZiAodGhpcy5fY29scy5sZylcclxuICAgICAgY2xhc3NOYW1lICs9XHJcbiAgICAgICAgdGhpcy5fY29uZmlnU2VydmljZS50aGVtZSA9PT0gJ2Jvb3RzdHJhcCdcclxuICAgICAgICAgID8gYCBjb2wtbGctJHt0aGlzLl9jb2xzLmxnfWBcclxuICAgICAgICAgIDogYCBsJHt0aGlzLl9jb2xzLmxnfWA7XHJcbiAgICBpZiAodGhpcy5fY29scy5tZClcclxuICAgICAgY2xhc3NOYW1lICs9XHJcbiAgICAgICAgdGhpcy5fY29uZmlnU2VydmljZS50aGVtZSA9PT0gJ2Jvb3RzdHJhcCdcclxuICAgICAgICAgID8gYCBjb2wtbWQtJHt0aGlzLl9jb2xzLm1kfWBcclxuICAgICAgICAgIDogYCBtJHt0aGlzLl9jb2xzLm1kfWA7XHJcbiAgICBpZiAodGhpcy5fY29scy5zbSlcclxuICAgICAgY2xhc3NOYW1lICs9XHJcbiAgICAgICAgdGhpcy5fY29uZmlnU2VydmljZS50aGVtZSA9PT0gJ2Jvb3RzdHJhcCdcclxuICAgICAgICAgID8gYCBjb2wtc20tJHt0aGlzLl9jb2xzLnNtfWBcclxuICAgICAgICAgIDogYCBzJHt0aGlzLl9jb2xzLnNtfWA7XHJcbiAgICByZXR1cm4gY2xhc3NOYW1lO1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcm90ZWN0ZWQgX2NvbnRyb2xDb250YWluZXI6IENvbnRyb2xDb250YWluZXIsXHJcbiAgICBwcm90ZWN0ZWQgZWxlbWVudFJlZjogRWxlbWVudFJlZixcclxuICAgIHByb3RlY3RlZCByZW5kZXJlcjogUmVuZGVyZXIyLFxyXG4gICAgcHJpdmF0ZSBfY29uZmlnU2VydmljZTogTmdJbnB1dENvbmZpZ1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9jaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWZcclxuICApIHtcclxuICAgIHN1cGVyKHJlbmRlcmVyLCBlbGVtZW50UmVmKTtcclxuICAgIHRoaXMucmVhZG9ubHkgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5uZ09uSW5pdFN1cGVyKCk7XHJcblxyXG4gICAgaWYgKHRoaXMuZGlzYWJsZWQpIHRoaXMuY29udHJvbC5kaXNhYmxlKCk7XHJcbiAgICBlbHNlIHRoaXMuY29udHJvbC5lbmFibGUoKTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0U3VwZXIoKSB7XHJcbiAgICBpZiAodGhpcy5uYW1lID09PSB1bmRlZmluZWQpIHRoaXMubmFtZSA9IHRoaXMuZm9ybUNvbnRyb2xOYW1lO1xyXG5cclxuICAgIHRoaXMudmFsaWRSZXF1aXJlZCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0TXVsdGlMYWJlbHMobGFiZWxzOiBhbnksIGxhYmVsOiBzdHJpbmdbXSk6IGFueSB7XHJcbiAgICBjb25zdCBsYXN0TGFiZWwgPSBsYWJlbC5jb25jYXQoW10pO1xyXG4gICAgY29uc3QgcmVzdCA9IGxhYmVsLnNwbGljZSgxLCBsYWJlbC5sZW5ndGggLSAxKTtcclxuXHJcbiAgICByZXR1cm4gbGFzdExhYmVsLmxlbmd0aCA9PT0gMVxyXG4gICAgICA/IGxhYmVscz8uW2xhc3RMYWJlbFswXV1cclxuICAgICAgOiB0aGlzLmdldE11bHRpTGFiZWxzKGxhYmVscz8uW2xhc3RMYWJlbFswXV0sIHJlc3QpO1xyXG4gIH1cclxuXHJcbiAgZ2V0S2V5cyhlcnJvcnM6IElPYmplY3QpIHtcclxuICAgIHJldHVybiBPYmplY3Qua2V5cyhlcnJvcnMpO1xyXG4gIH1cclxuXHJcbiAgZ2V0RXJyb3Ioa2V5OiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLmNvbnRyb2w/LmVycm9ycz8uW2tleV0gJiYgdGhpcy5jb250cm9sPy50b3VjaGVkO1xyXG4gIH1cclxuXHJcbiAgdmFsaWRSZXF1aXJlZCgpIHtcclxuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5jb250cm9sLnZhbHVlO1xyXG4gICAgdGhpcz8ub25Xcml0ZT8uKG51bGwpO1xyXG4gICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgaWYgKHRoaXMucmVxdWlyZWQgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aGlzLnJlcXVpcmVkID0gdGhpcy5jb250cm9sLmVycm9ycz8ucmVxdWlyZWQ7XHJcbiAgICB9XHJcbiAgICB0aGlzPy5vbldyaXRlPy4odmFsdWUpO1xyXG4gICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5mb3JtQ29udHJvbERpcmVjdGl2ZS52YWx1ZUFjY2Vzc29yPy5yZWdpc3Rlck9uVG91Y2hlZChmbik7XHJcbiAgfVxyXG5cclxuICBvbldyaXRlOiBJT25Xcml0ZTtcclxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBJT25Xcml0ZSk6IHZvaWQge1xyXG4gICAgdGhpcy5vbldyaXRlID0gZm47XHJcbiAgfVxyXG5cclxuICB0aW1lOiBhbnkgPSAwO1xyXG4gIHdyaXRlVmFsdWUob2JqOiBhbnkpOiB2b2lkIHtcclxuICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWUpO1xyXG4gICAgdGhpcy50aW1lID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMub25Xcml0ZShvYmopO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xyXG4gIH1cclxufVxyXG4iXX0=