@douglas-serena/ng-inputs
Version:
angular entry library
157 lines • 19.2 kB
JavaScript
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=