@schoolbelle/common
Version:
156 lines (150 loc) • 4.49 kB
JavaScript
import { CommonModule } from '@angular/common';
import { NG_VALUE_ACCESSOR } from '@angular/forms';
import { forwardRef, Directive, Renderer2, ElementRef, Input, NgModule } from '@angular/core';
import { fromEvent, merge, timer } from 'rxjs';
import { map, debounce } from 'rxjs/operators';
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
/** @type {?} */
const DEFAULT_VALUE_ACCESSOR = {
provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef((/**
* @return {?}
*/
() => NgModelOptionsDirective)),
multi: true
};
class NgModelOptionsDirective {
/**
* @param {?} renderer
* @param {?} element
*/
constructor(renderer, element) {
this.renderer = renderer;
this.element = element;
this._controlOptions = {
updateOn: 'input',
debounce: null
};
}
/**
* @param {?} val
* @return {?}
*/
set ngModelOptions(val) {
this._controlOptions = Object.assign({}, this._controlOptions, val);
}
/**
* @param {?} fn
* @return {?}
*/
registerOnChange(fn) {
this.onChange = fn;
}
/**
* @param {?} fn
* @return {?}
*/
registerOnTouched(fn) {
this.onTouched = fn;
}
/**
* @return {?}
*/
ngOnInit() {
/** @type {?} */
const events = this._controlOptions.updateOn
.split(' ') // ['input', 'blur']
.map((/**
* @param {?} event
* @return {?}
*/
event => fromEvent(this.element.nativeElement, event)));
this.events = merge(...events) // spread the events
.pipe(map((/**
* @param {?} event
* @return {?}
*/
(event) => {
return { type: event.type, value: event.target['value'] };
})), debounce((/**
* @param {?} event
* @return {?}
*/
event => {
/** @type {?} */
const debounceValue = this._controlOptions.debounce;
/** @type {?} */
let time = 0;
if (typeof debounceValue === 'number') {
time = debounceValue;
}
else if (typeof debounceValue === 'object') {
time = debounceValue[event.type] ? debounceValue[event.type] : 0;
}
return timer(time);
})))
.subscribe((/**
* @param {?} event
* @return {?}
*/
event => {
this.onChange(event.value);
}));
}
/**
* @param {?} value
* @return {?}
*/
writeValue(value) {
/** @type {?} */
const normalizedValue = value == null ? '' : value;
this.renderer.setProperty(this.element.nativeElement, 'value', normalizedValue);
}
/**
* @param {?} isDisabled
* @return {?}
*/
setDisabledState(isDisabled) {
this.renderer.setProperty(this.element.nativeElement, 'disabled', isDisabled);
}
}
NgModelOptionsDirective.decorators = [
{ type: Directive, args: [{
selector: '[formControlName][ngModelOptions],[formControl][ngModelOptions],[ngModel][ngModelOptions]',
providers: [DEFAULT_VALUE_ACCESSOR]
},] }
];
/** @nocollapse */
NgModelOptionsDirective.ctorParameters = () => [
{ type: Renderer2 },
{ type: ElementRef }
];
NgModelOptionsDirective.propDecorators = {
ngModelOptions: [{ type: Input }]
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
class NgModelOptionsModule {
}
NgModelOptionsModule.decorators = [
{ type: NgModule, args: [{
declarations: [NgModelOptionsDirective],
imports: [CommonModule],
exports: [NgModelOptionsDirective]
},] }
];
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
export { NgModelOptionsModule, DEFAULT_VALUE_ACCESSOR, NgModelOptionsDirective };
//# sourceMappingURL=schoolbelle-common-ng-model-options.js.map