UNPKG

@schoolbelle/common

Version:

156 lines (150 loc) 4.49 kB
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