chi-app-lib
Version:
This is a custom component (input dropdown grid textarea map captcha) published to npm.
339 lines • 20.3 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { Component, forwardRef, Input, Output, EventEmitter, ChangeDetectorRef, ChangeDetectionStrategy } from '@angular/core';
import { FormControl, NG_VALUE_ACCESSOR } from '@angular/forms';
/** @type {?} */
var noop = (/**
* @return {?}
*/
function () {
});
var ɵ0 = noop;
/**
* Error when invalid control is dirty or touched
*/
var /**
* Error when invalid control is dirty or touched
*/
DropdownErrorStateMatcher = /** @class */ (function () {
function DropdownErrorStateMatcher() {
}
/**
* @param {?} control
* @param {?} form
* @return {?}
*/
DropdownErrorStateMatcher.prototype.isErrorState = /**
* @param {?} control
* @param {?} form
* @return {?}
*/
function (control, form) {
return !!(control && control.invalid && (control.dirty || control.touched));
};
return DropdownErrorStateMatcher;
}());
/**
* Error when invalid control is dirty or touched
*/
export { DropdownErrorStateMatcher };
/** @type {?} */
export var DROPDOWN_COMPONENT_CONTROL_VALUE_ACCESSOR = {
provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef((/**
* @return {?}
*/
function () { return DropdownComponent; })),
multi: true
};
var DropdownComponent = /** @class */ (function () {
function DropdownComponent(ref) {
this.ref = ref;
this.options = [];
this.direction = 'rtl';
this.floatLabel = 'auto'; // never
// never
this.pattern = '';
this.showValidatorMessage = true;
this.isValid = new EventEmitter();
this.valueChanged = new EventEmitter();
this.matcher = new DropdownErrorStateMatcher();
this.id = 'chi-input' + this.idGenerator();
this.element = new FormControl('');
// The internal data model
this.innerValue = '';
// Placeholders for the callbacks which are later provided
// by the Control Value Accessor
this.onTouchedCallback = noop;
this.onChangeCallback = noop;
}
Object.defineProperty(DropdownComponent.prototype, "value", {
//
// get accessor
get:
//
// get accessor
/**
* @return {?}
*/
function () {
return this.innerValue;
},
// set accessor including call the onchange callback
set:
// set accessor including call the onchange callback
/**
* @param {?} v
* @return {?}
*/
function (v) {
var _this = this;
if (v !== this.innerValue) {
this.innerValue = v;
this.onChangeCallback(v);
setTimeout((/**
* @param {?} _
* @return {?}
*/
function (_) {
_this.isValid.emit(_this.element.valid);
}), 100);
}
},
enumerable: true,
configurable: true
});
// Set touched on blur
// Set touched on blur
/**
* @param {?} validate
* @return {?}
*/
DropdownComponent.prototype.onBlur =
// Set touched on blur
/**
* @param {?} validate
* @return {?}
*/
function (validate) {
this.onTouchedCallback();
this.isValid.emit(this.element.valid);
};
// From ControlValueAccessor interface
// From ControlValueAccessor interface
/**
* @param {?} value
* @return {?}
*/
DropdownComponent.prototype.writeValue =
// From ControlValueAccessor interface
/**
* @param {?} value
* @return {?}
*/
function (value) {
var _this = this;
if (value !== this.innerValue) {
this.innerValue = value;
setTimeout((/**
* @param {?} _
* @return {?}
*/
function (_) {
_this.isValid.emit(_this.element.valid);
}), 100);
}
};
// From ControlValueAccessor interface
// From ControlValueAccessor interface
/**
* @param {?} fn
* @return {?}
*/
DropdownComponent.prototype.registerOnChange =
// From ControlValueAccessor interface
/**
* @param {?} fn
* @return {?}
*/
function (fn) {
this.onChangeCallback = fn;
};
// From ControlValueAccessor interface
// From ControlValueAccessor interface
/**
* @param {?} fn
* @return {?}
*/
DropdownComponent.prototype.registerOnTouched =
// From ControlValueAccessor interface
/**
* @param {?} fn
* @return {?}
*/
function (fn) {
this.onTouchedCallback = fn;
};
/**
* @param {?} event
* @param {?} validate
* @return {?}
*/
DropdownComponent.prototype.changedInput = /**
* @param {?} event
* @param {?} validate
* @return {?}
*/
function (event, validate) {
var _this = this;
setTimeout((/**
* @param {?} _
* @return {?}
*/
function (_) {
_this.isValid.emit(_this.element.valid);
_this.valueChanged.emit(_this.value);
}), 100);
};
/**
* @param {?} validate
* @return {?}
*/
DropdownComponent.prototype.onFocused = /**
* @param {?} validate
* @return {?}
*/
function (validate) {
this.isValid.emit(this.element.valid);
};
/**
* @return {?}
*/
DropdownComponent.prototype.ngOnInit = /**
* @return {?}
*/
function () {
};
/**
* @param {?} changes
* @return {?}
*/
DropdownComponent.prototype.ngOnChanges = /**
* @param {?} changes
* @return {?}
*/
function (changes) {
/** @type {?} */
var name = changes.isDirty;
if ((name || {})['currentValue']) {
this.ref.markForCheck();
this.element.markAsDirty({ onlySelf: true });
}
};
/**
* @return {?}
*/
DropdownComponent.prototype.getErrorMessage = /**
* @return {?}
*/
function () {
return this.element.hasError('required') ? ' لا يمكن أن يكون هذا الحقل فارغًا!' : '';
};
/**
* @return {?}
*/
DropdownComponent.prototype.idGenerator = /**
* @return {?}
*/
function () {
/** @type {?} */
var number = Math.random();
number.toString(36);
return number.toString(36).substr(2, 9);
};
DropdownComponent.decorators = [
{ type: Component, args: [{
selector: 'lib-dropdown',
template: "<div class=\"element-container\" [ngClass]=\"className\" dir=\"{{direction}}\">\n <mat-form-field [hideRequiredMarker]=\"true\" floatLabel=\"{{floatLabel}}\" >\n <mat-label>{{placeHolder}}</mat-label>\n <mat-select [(ngModel)]=\"value\"\n [formControl]=\"element\"\n [errorStateMatcher]=\"matcher\"\n [disableOptionCentering]=\"true\"\n #itemSelect\n required=\"{{required}}\"\n [disabled]=\"readonly\"\n (valueChange)=\"changedInput($event,element.valid)\">\n <mat-option *ngFor=\"let item of options\" [value]=\"item.value\">\n {{item.viewValue}}\n </mat-option>\n </mat-select>\n <mat-error *ngIf=\"element.invalid&&showValidatorMessage\">{{getErrorMessage()}}</mat-error>\n </mat-form-field>\n</div>\n",
providers: [DROPDOWN_COMPONENT_CONTROL_VALUE_ACCESSOR],
changeDetection: ChangeDetectionStrategy.OnPush,
styles: [".element-container{display:flex;flex-direction:column}.element-container>*{width:100%}"]
}] }
];
/** @nocollapse */
DropdownComponent.ctorParameters = function () { return [
{ type: ChangeDetectorRef }
]; };
DropdownComponent.propDecorators = {
options: [{ type: Input }],
direction: [{ type: Input }],
floatLabel: [{ type: Input }],
pattern: [{ type: Input }],
className: [{ type: Input }],
readonly: [{ type: Input }],
required: [{ type: Input }],
placeHolder: [{ type: Input }],
showValidatorMessage: [{ type: Input }],
isDirty: [{ type: Input }],
isValid: [{ type: Output }],
valueChanged: [{ type: Output }]
};
return DropdownComponent;
}());
export { DropdownComponent };
if (false) {
/** @type {?} */
DropdownComponent.prototype.options;
/** @type {?} */
DropdownComponent.prototype.direction;
/** @type {?} */
DropdownComponent.prototype.floatLabel;
/** @type {?} */
DropdownComponent.prototype.pattern;
/** @type {?} */
DropdownComponent.prototype.className;
/** @type {?} */
DropdownComponent.prototype.readonly;
/** @type {?} */
DropdownComponent.prototype.required;
/** @type {?} */
DropdownComponent.prototype.placeHolder;
/** @type {?} */
DropdownComponent.prototype.showValidatorMessage;
/** @type {?} */
DropdownComponent.prototype.isDirty;
/** @type {?} */
DropdownComponent.prototype.isValid;
/** @type {?} */
DropdownComponent.prototype.valueChanged;
/** @type {?} */
DropdownComponent.prototype.matcher;
/** @type {?} */
DropdownComponent.prototype.id;
/** @type {?} */
DropdownComponent.prototype.element;
/**
* @type {?}
* @private
*/
DropdownComponent.prototype.innerValue;
/**
* @type {?}
* @private
*/
DropdownComponent.prototype.onTouchedCallback;
/**
* @type {?}
* @private
*/
DropdownComponent.prototype.onChangeCallback;
/**
* @type {?}
* @private
*/
DropdownComponent.prototype.ref;
}
export { ɵ0 };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vY2hpLWFwcC1saWIvIiwic291cmNlcyI6WyJsaWIvZHJvcGRvd24vZHJvcGRvd24uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLFlBQVksRUFDL0MsaUJBQWlCLEVBQUUsdUJBQXVCLEVBQ3RELE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxXQUFXLEVBQXNCLGlCQUFpQixFQUE4QixNQUFNLGdCQUFnQixDQUFDOztJQUl6RyxJQUFJOzs7QUFBRztBQUNiLENBQUMsQ0FBQTs7Ozs7QUFHRDs7OztJQUFBO0lBSUEsQ0FBQzs7Ozs7O0lBSEMsZ0RBQVk7Ozs7O0lBQVosVUFBYSxPQUEyQixFQUFFLElBQXdDO1FBQ2hGLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUUsQ0FBQyxDQUFDO0lBQy9FLENBQUM7SUFDSCxnQ0FBQztBQUFELENBQUMsQUFKRCxJQUlDOzs7Ozs7QUFFRCxNQUFNLEtBQU8seUNBQXlDLEdBQVE7SUFDNUQsT0FBTyxFQUFFLGlCQUFpQjtJQUMxQixXQUFXLEVBQUUsVUFBVTs7O0lBQUMsY0FBTSxPQUFBLGlCQUFpQixFQUFqQixDQUFpQixFQUFDO0lBQ2hELEtBQUssRUFBRSxJQUFJO0NBQ1o7QUFFRDtJQXNGRSwyQkFBb0IsR0FBc0I7UUFBdEIsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUE3RWpDLFlBQU8sR0FBRyxFQUFFLENBQUM7UUFDYixjQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ2xCLGVBQVUsR0FBRyxNQUFNLENBQUMsQ0FBQyxRQUFROztRQUM3QixZQUFPLEdBQUcsRUFBRSxDQUFDO1FBS2IseUJBQW9CLEdB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LHNDQUEyQjs7SUFDM0IsdUNBQTZCOztJQUM3QixvQ0FBc0I7O0lBQ3RCLHNDQUFtQjs7SUFDbkIscUNBQWtCOztJQUNsQixxQ0FBa0I7O0lBQ2xCLHdDQUFxQjs7SUFDckIsaURBQXFDOztJQUNyQyxvQ0FBaUI7O0lBQ2pCLG9DQUFnRDs7SUFDaEQseUNBQWlEOztJQUNqRCxvQ0FBMEM7O0lBQzFDLCtCQUFzQzs7SUFDdEMsb0NBQThCOzs7OztJQUc5Qix1Q0FBNkI7Ozs7O0lBSTdCLDhDQUE2Qzs7Ozs7SUFDN0MsNkNBQWtEOzs7OztJQXVEdEMsZ0NBQThCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LCBmb3J3YXJkUmVmLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgU2ltcGxlQ2hhbmdlcywgU2ltcGxlQ2hhbmdlLFxuICBPbkNoYW5nZXMsIENoYW5nZURldGVjdG9yUmVmLCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneVxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Rm9ybUNvbnRyb2wsIEZvcm1Hcm91cERpcmVjdGl2ZSwgTkdfVkFMVUVfQUNDRVNTT1IsIE5nRm9ybSwgUmVhY3RpdmVGb3Jtc01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQge0Vycm9yU3RhdGVNYXRjaGVyfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbCc7XG5cbmNvbnN0IG5vb3AgPSAoKSA9PiB7XG59O1xuXG4vKiogRXJyb3Igd2hlbiBpbnZhbGlkIGNvbnRyb2wgaXMgZGlydHkgb3IgdG91Y2hlZCovXG5leHBvcnQgY2xhc3MgRHJvcGRvd25FcnJvclN0YXRlTWF0Y2hlciBpbXBsZW1lbnRzIEVycm9yU3RhdGVNYXRjaGVyIHtcbiAgaXNFcnJvclN0YXRlKGNvbnRyb2w6IEZvcm1Db250cm9sIHwgbnVsbCwgZm9ybTogRm9ybUdyb3VwRGlyZWN0aXZlIHwgTmdGb3JtIHwgbnVsbCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIShjb250cm9sICYmIGNvbnRyb2wuaW52YWxpZCAmJiAoY29udHJvbC5kaXJ0eSB8fCBjb250cm9sLnRvdWNoZWQgKSk7XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IERST1BET1dOX0NPTVBPTkVOVF9DT05UUk9MX1ZBTFVFX0FDQ0VTU09SOiBhbnkgPSB7XG4gIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBEcm9wZG93bkNvbXBvbmVudCksXG4gIG11bHRpOiB0cnVlXG59O1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsaWItZHJvcGRvd24nLFxuICB0ZW1wbGF0ZVVybDogJy4vZHJvcGRvd24uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9kcm9wZG93bi5jb21wb25lbnQuc2NzcyddLFxuICBwcm92aWRlcnM6IFtEUk9QRE9XTl9DT01QT05FTlRfQ09OVFJPTF9WQUxVRV9BQ0NFU1NPUl0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBEcm9wZG93bkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcblxuICBASW5wdXQoKSBvcHRpb25zID0gW107XG4gIEBJbnB1dCgpIGRpcmVjdGlvbiA9ICdydGwnO1xuICBASW5wdXQoKSBmbG9hdExhYmVsID0gJ2F1dG8nOyAvLyBuZXZlclxuICBASW5wdXQoKSBwYXR0ZXJuID0gJyc7XG4gIEBJbnB1dCgpIGNsYXNzTmFtZTtcbiAgQElucHV0KCkgcmVhZG9ubHk7XG4gIEBJbnB1dCgpIHJlcXVpcmVkO1xuICBASW5wdXQoKSBwbGFjZUhvbGRlcjtcbiAgQElucHV0KCkgc2hvd1ZhbGlkYXRvck1lc3NhZ2UgPSB0cnVlO1xuICBASW5wdXQoKSBpc0RpcnR5O1xuICBAT3V0cHV0KCkgaXNWYWxpZCA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcbiAgQE91dHB1dCgpIHZhbHVlQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBtYXRjaGVyID0gbmV3IERyb3Bkb3duRXJyb3JTdGF0ZU1hdGNoZXIoKTtcbiAgaWQgPSAnY2hpLWlucHV0JyArIHRoaXMuaWRHZW5lcmF0b3IoKTtcbiAgZWxlbWVudCA9IG5ldyBGb3JtQ29udHJvbCgnJyk7XG5cbiAgLy8gVGhlIGludGVybmFsIGRhdGEgbW9kZWxcbiAgcHJpdmF0ZSBpbm5lclZhbHVlOiBhbnkgPSAnJztcblxuICAvLyBQbGFjZWhvbGRlcnMgZm9yIHRoZSBjYWxsYmFja3Mgd2hpY2ggYXJlIGxhdGVyIHByb3ZpZGVkXG4gIC8vIGJ5IHRoZSBDb250cm9sIFZhbHVlIEFjY2Vzc29yXG4gIHByaXZhdGUgb25Ub3VjaGVkQ2FsbGJhY2s6ICgpID0+IHZvaWQgPSBub29wO1xuICBwcml2YXRlIG9uQ2hhbmdlQ2FsbGJhY2s6IChfOiBhbnkpID0+IHZvaWQgPSBub29wO1xuICAvL1xuICAvLyBnZXQgYWNjZXNzb3JcbiAgZ2V0IHZhbHVlKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuaW5uZXJWYWx1ZTtcbiAgfVxuXG4gIC8vIHNldCBhY2Nlc3NvciBpbmNsdWRpbmcgY2FsbCB0aGUgb25jaGFuZ2UgY2FsbGJhY2tcbiAgc2V0IHZhbHVlKHY6IGFueSkge1xuICAgIGlmICh2ICE9PSB0aGlzLmlubmVyVmFsdWUpIHtcbiAgICAgIHRoaXMuaW5uZXJWYWx1ZSA9IHY7XG4gICAgICB0aGlzLm9uQ2hhbmdlQ2FsbGJhY2sodik7XG4gICAgICBzZXRUaW1lb3V0KF8gPT4ge1xuICAgICAgICB0aGlzLmlzVmFsaWQuZW1pdCh0aGlzLmVsZW1lbnQudmFsaWQpO1xuICAgICAgfSwgMTAwKTtcbiAgICB9XG4gIH1cblxuICAvLyBTZXQgdG91Y2hlZCBvbiBibHVyXG4gIG9uQmx1cih2YWxpZGF0ZSkge1xuICAgIHRoaXMub25Ub3VjaGVkQ2FsbGJhY2soKTtcbiAgICB0aGlzLmlzVmFsaWQuZW1pdCh0aGlzLmVsZW1lbnQudmFsaWQpO1xuICB9XG5cbiAgLy8gRnJvbSBDb250cm9sVmFsdWVBY2Nlc3NvciBpbnRlcmZhY2VcbiAgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KSB7XG4gICAgaWYgKHZhbHVlICE9PSB0aGlzLmlubmVyVmFsdWUpIHtcbiAgICAgIHRoaXMuaW5uZXJWYWx1ZSA9IHZhbHVlO1xuICAgICAgc2V0VGltZW91dChfID0+IHtcbiAgICAgICAgdGhpcy5pc1ZhbGlkLmVtaXQodGhpcy5lbGVtZW50LnZhbGlkKTtcbiAgICAgIH0sIDEwMCk7XG4gICAgfVxuICB9XG5cbiAgLy8gRnJvbSBDb250cm9sVmFsdWVBY2Nlc3NvciBpbnRlcmZhY2VcbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KSB7XG4gICAgdGhpcy5vbkNoYW5nZUNhbGxiYWNrID0gZm47XG4gIH1cblxuICAvLyBGcm9tIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGludGVyZmFjZVxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KSB7XG4gICAgdGhpcy5vblRvdWNoZWRDYWxsYmFjayA9IGZuO1xuICB9XG5cbiAgY2hhbmdlZElucHV0KGV2ZW50LCB2YWxpZGF0ZSkge1xuICAgIHNldFRpbWVvdXQoXyA9PiB7XG4gICAgICB0aGlzLmlzVmFsaWQuZW1pdCh0aGlzLmVsZW1lbnQudmFsaWQpO1xuICAgICAgdGhpcy52YWx1ZUNoYW5nZWQuZW1pdCh0aGlzLnZhbHVlKTtcbiAgICB9LCAxMDApO1xuICB9XG5cbiAgb25Gb2N1c2VkKHZhbGlkYXRlKSB7XG4gICAgdGhpcy5pc1ZhbGlkLmVtaXQodGhpcy5lbGVtZW50LnZhbGlkKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVmOiBDaGFuZ2VEZXRlY3RvclJlZikge1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgY29uc3QgbmFtZTogU2ltcGxlQ2hhbmdlID0gY2hhbmdlcy5pc0RpcnR5O1xuICAgIGlmICgobmFtZSB8fCB7fSlbJ2N1cnJlbnRWYWx1ZSddKSB7XG4gICAgICB0aGlzLnJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIHRoaXMuZWxlbWVudC5tYXJrQXNEaXJ0eSh7IG9ubHlTZWxmOiB0cnVlIH0pO1xuICAgIH1cbiAgfVxuXG4gIGdldEVycm9yTWVzc2FnZSgpIHtcbiAgICByZXR1cm4gdGhpcy5lbGVtZW50Lmhhc0Vycm9yKCdyZXF1aXJlZCcpID8gJyDZhNinINmK2YXZg9mGINij2YYg2YrZg9mI2YYg2YfYsNinINin2YTYrdmC2YQg2YHYp9ix2LrZi9inIScgOiAnJztcbiAgfVxuXG4gIGlkR2VuZXJhdG9yKCkge1xuICAgIGNvbnN0IG51bWJlciA9IE1hdGgucmFuZG9tKCk7XG4gICAgbnVtYmVyLnRvU3RyaW5nKDM2KTtcbiAgICByZXR1cm4gbnVtYmVyLnRvU3RyaW5nKDM2KS5zdWJzdHIoMiwgOSk7XG4gIH1cbn1cbiJdfQ==