UNPKG

@schoolbelle/common

Version:

150 lines 10.5 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { NG_VALUE_ACCESSOR } from '@angular/forms'; import { forwardRef, Directive, Renderer2, ElementRef, Input } from '@angular/core'; import { fromEvent, merge, timer } from 'rxjs'; import { map, debounce } from 'rxjs/operators'; /** @type {?} */ export const DEFAULT_VALUE_ACCESSOR = { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef((/** * @return {?} */ () => NgModelOptionsDirective)), multi: true }; export 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 }] }; if (false) { /** * @type {?} * @private */ NgModelOptionsDirective.prototype._controlOptions; /** @type {?} */ NgModelOptionsDirective.prototype.onChange; /** @type {?} */ NgModelOptionsDirective.prototype.onTouched; /** @type {?} */ NgModelOptionsDirective.prototype.events; /** * @type {?} * @private */ NgModelOptionsDirective.prototype.renderer; /** * @type {?} * @private */ NgModelOptionsDirective.prototype.element; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctbW9kZWwtb3B0aW9ucy5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac2Nob29sYmVsbGUvY29tbW9uL25nLW1vZGVsLW9wdGlvbnMvIiwic291cmNlcyI6WyJsaWIvbmctbW9kZWwtb3B0aW9ucy5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBd0IsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RSxPQUFPLEVBQ0wsVUFBVSxFQUNWLFNBQVMsRUFDVCxTQUFTLEVBQ1QsVUFBVSxFQUNWLEtBQUssRUFDTixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0MsT0FBTyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7QUFFL0MsTUFBTSxPQUFPLHNCQUFzQixHQUFRO0lBQ3pDLE9BQU8sRUFBRSxpQkFBaUI7SUFDMUIsV0FBVyxFQUFFLFVBQVU7OztJQUFDLEdBQUcsRUFBRSxDQUFDLHVCQUF1QixFQUFDO0lBQ3RELEtBQUssRUFBRSxJQUFJO0NBQ1o7QUFPRCxNQUFNLE9BQU8sdUJBQXVCOzs7OztJQW9CbEMsWUFBb0IsUUFBbUIsRUFBVSxPQUFtQjtRQUFoRCxhQUFRLEdBQVIsUUFBUSxDQUFXO1FBQVUsWUFBTyxHQUFQLE9BQU8sQ0FBWTtRQW5CNUQsb0JBQWUsR0FBRztZQUN4QixRQUFRLEVBQUUsT0FBTztZQUNqQixRQUFRLEVBQUUsSUFBSTtTQUNmLENBQUM7SUFnQnFFLENBQUM7Ozs7O0lBZnhFLElBQ0ksY0FBYyxDQUFDLEdBQUc7UUFDcEIsSUFBSSxDQUFDLGVBQWUscUJBQVEsSUFBSSxDQUFDLGVBQWUsRUFBSyxHQUFHLENBQUUsQ0FBQztJQUM3RCxDQUFDOzs7OztJQUlELGdCQUFnQixDQUFDLEVBQU87UUFDdEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7SUFDckIsQ0FBQzs7Ozs7SUFFRCxpQkFBaUIsQ0FBQyxFQUFPO1FBQ3ZCLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO0lBQ3RCLENBQUM7Ozs7SUFLRCxRQUFROztjQUNBLE1BQU0sR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVE7YUFDekMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLG9CQUFvQjthQUMvQixHQUFHOzs7O1FBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsS0FBSyxDQUFDLEVBQUM7UUFFN0QsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxvQkFBb0I7YUFDaEQsSUFBSSxDQUNILEdBQUc7Ozs7UUFBQyxDQUFDLEtBQVksRUFBRSxFQUFFO1lBQ25CLE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQzVELENBQUMsRUFBQyxFQUNGLFFBQVE7Ozs7UUFBQyxLQUFLLENBQUMsRUFBRTs7a0JBQ1QsYUFBYSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUTs7Z0JBQy9DLElBQUksR0FBRyxDQUFDO1lBQ1osSUFBSSxPQUFPLGFBQWEsS0FBSyxRQUFRLEVBQUU7Z0JBQ3JDLElBQUksR0FBRyxhQUFhLENBQUM7YUFDdEI7aUJBQU0sSUFBSSxPQUFPLGFBQWEsS0FBSyxRQUFRLEVBQUU7Z0JBQzVDLElBQUksR0FBRyxhQUFhLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDbEU7WUFDRCxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNyQixDQUFDLEVBQUMsQ0FDSDthQUNBLFNBQVM7Ozs7UUFBQyxLQUFLLENBQUMsRUFBRTtZQUNqQixJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM3QixDQUFDLEVBQUMsQ0FBQztJQUNQLENBQUM7Ozs7O0lBRUQsVUFBVSxDQUFDLEtBQVU7O2NBQ2IsZUFBZSxHQUFHLEtBQUssSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSztRQUNsRCxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FDdkIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQzFCLE9BQU8sRUFDUCxlQUFlLENBQ2hCLENBQUM7SUFDSixDQUFDOzs7OztJQUVELGdCQUFnQixDQUFDLFVBQW1CO1FBQ2xDLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUN2QixJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFDMUIsVUFBVSxFQUNWLFVBQVUsQ0FDWCxDQUFDO0lBQ0osQ0FBQzs7O1lBckVGLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQ04sMkZBQTJGO2dCQUM3RixTQUFTLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQzthQUNwQzs7OztZQWpCQyxTQUFTO1lBQ1QsVUFBVTs7OzZCQXNCVCxLQUFLOzs7Ozs7O0lBSk4sa0RBR0U7O0lBS0YsMkNBQVM7O0lBQ1QsNENBQVU7O0lBWVYseUNBQU87Ozs7O0lBRkssMkNBQTJCOzs7OztJQUFFLDBDQUEyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7XG4gIGZvcndhcmRSZWYsXG4gIERpcmVjdGl2ZSxcbiAgUmVuZGVyZXIyLFxuICBFbGVtZW50UmVmLFxuICBJbnB1dFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGZyb21FdmVudCwgbWVyZ2UsIHRpbWVyIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAsIGRlYm91bmNlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9WQUxVRV9BQ0NFU1NPUjogYW55ID0ge1xuICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gTmdNb2RlbE9wdGlvbnNEaXJlY3RpdmUpLFxuICBtdWx0aTogdHJ1ZVxufTtcblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOlxuICAgICdbZm9ybUNvbnRyb2xOYW1lXVtuZ01vZGVsT3B0aW9uc10sW2Zvcm1Db250cm9sXVtuZ01vZGVsT3B0aW9uc10sW25nTW9kZWxdW25nTW9kZWxPcHRpb25zXScsXG4gIHByb3ZpZGVyczogW0RFRkFVTFRfVkFMVUVfQUNDRVNTT1JdXG59KVxuZXhwb3J0IGNsYXNzIE5nTW9kZWxPcHRpb25zRGlyZWN0aXZlIGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuICBwcml2YXRlIF9jb250cm9sT3B0aW9ucyA9IHtcbiAgICB1cGRhdGVPbjogJ2lucHV0JyxcbiAgICBkZWJvdW5jZTogbnVsbFxuICB9O1xuICBASW5wdXQoKVxuICBzZXQgbmdNb2RlbE9wdGlvbnModmFsKSB7XG4gICAgdGhpcy5fY29udHJvbE9wdGlvbnMgPSB7IC4uLnRoaXMuX2NvbnRyb2xPcHRpb25zLCAuLi52YWwgfTtcbiAgfVxuICBvbkNoYW5nZTtcbiAgb25Ub3VjaGVkO1xuXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xuICB9XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLCBwcml2YXRlIGVsZW1lbnQ6IEVsZW1lbnRSZWYpIHt9XG5cbiAgZXZlbnRzO1xuICBuZ09uSW5pdCgpIHtcbiAgICBjb25zdCBldmVudHMgPSB0aGlzLl9jb250cm9sT3B0aW9ucy51cGRhdGVPblxuICAgICAgLnNwbGl0KCcgJykgLy8gWydpbnB1dCcsICdibHVyJ11cbiAgICAgIC5tYXAoZXZlbnQgPT4gZnJvbUV2ZW50KHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LCBldmVudCkpO1xuXG4gICAgdGhpcy5ldmVudHMgPSBtZXJnZSguLi5ldmVudHMpIC8vIHNwcmVhZCB0aGUgZXZlbnRzXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChldmVudDogRXZlbnQpID0+IHtcbiAgICAgICAgICByZXR1cm4geyB0eXBlOiBldmVudC50eXBlLCB2YWx1ZTogZXZlbnQudGFyZ2V0Wyd2YWx1ZSddIH07XG4gICAgICAgIH0pLFxuICAgICAgICBkZWJvdW5jZShldmVudCA9PiB7XG4gICAgICAgICAgY29uc3QgZGVib3VuY2VWYWx1ZSA9IHRoaXMuX2NvbnRyb2xPcHRpb25zLmRlYm91bmNlO1xuICAgICAgICAgIGxldCB0aW1lID0gMDtcbiAgICAgICAgICBpZiAodHlwZW9mIGRlYm91bmNlVmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICB0aW1lID0gZGVib3VuY2VWYWx1ZTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBkZWJvdW5jZVZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgdGltZSA9IGRlYm91bmNlVmFsdWVbZXZlbnQudHlwZV0gPyBkZWJvdW5jZVZhbHVlW2V2ZW50LnR5cGVdIDogMDtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRpbWVyKHRpbWUpO1xuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZShldmVudCA9PiB7XG4gICAgICAgIHRoaXMub25DaGFuZ2UoZXZlbnQudmFsdWUpO1xuICAgICAgfSk7XG4gIH1cblxuICB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCBub3JtYWxpemVkVmFsdWUgPSB2YWx1ZSA9PSBudWxsID8gJycgOiB2YWx1ZTtcbiAgICB0aGlzLnJlbmRlcmVyLnNldFByb3BlcnR5KFxuICAgICAgdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsXG4gICAgICAndmFsdWUnLFxuICAgICAgbm9ybWFsaXplZFZhbHVlXG4gICAgKTtcbiAgfVxuXG4gIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMucmVuZGVyZXIuc2V0UHJvcGVydHkoXG4gICAgICB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCxcbiAgICAgICdkaXNhYmxlZCcsXG4gICAgICBpc0Rpc2FibGVkXG4gICAgKTtcbiAgfVxufVxuIl19