@schoolbelle/common
Version:
150 lines • 10.5 kB
JavaScript
/**
* @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