ngx-form-control
Version:
Form controls for angular 6
216 lines (215 loc) • 16.6 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
import { BaseControlComponent } from './base-control.component';
import { Input } from '@angular/core';
/**
* @abstract
*/
export class BaseListControlComponent extends BaseControlComponent {
constructor() {
super(...arguments);
this._options = [];
this._selectOptions = [];
this._selectedIndexes = [];
}
/**
* @param {?} value
* @return {?}
*/
set textKey(value) {
this._textKey = value;
this.initOptions();
}
/**
* @param {?} value
* @return {?}
*/
set valueKey(value) {
this._valueKey = value;
this.initOptions();
}
/**
* @param {?} value
* @return {?}
*/
set comparedKey(value) {
this._comparedKey = value;
this.initOptions();
}
/**
* @param {?} options
* @return {?}
*/
set options(options) {
this._options = options;
this.initOptions();
}
/**
* @return {?}
*/
get selectOptions() {
return this._selectOptions;
}
/**
* @return {?}
*/
get selectedIndexes() {
return this._selectedIndexes;
}
/**
* @param {?} indexes
* @return {?}
*/
set selectedIndexes(indexes) {
/** @type {?} */
const oldSelectedIndexes = JSON.stringify(this._selectedIndexes);
this._selectedIndexes = indexes && indexes.length ? indexes.reduce((arr, value) => {
value = +value;
if (value > -1) {
arr.push(value);
}
return arr;
}, []) : [];
/** @type {?} */
const newSelectedIndexes = JSON.stringify(this._selectedIndexes);
if (newSelectedIndexes !== oldSelectedIndexes) {
this.triggerChange();
}
}
/**
* @param {?} value
* @return {?}
*/
findIndex(value) {
/** @type {?} */
const comparedValue = this.getComparedValue(value);
return this._selectOptions.findIndex((option) => {
return comparedValue === option.comparedValue;
});
}
/**
* @param {?} arrValue
* @return {?}
*/
findIndexes(arrValue) {
if (!arrValue || !arrValue.length) {
return [];
}
return arrValue.reduce((arr, value) => {
/** @type {?} */
const index = this.findIndex(value);
if (index > -1) {
arr.push(index);
}
return arr;
}, []);
}
/**
* @return {?}
*/
initOptions() {
this.beforeInitOptions();
/** @type {?} */
const oldValue = this.value;
this._selectOptions = [];
if (this._options && this._options.length) {
this._options.map((option, index) => {
/** @type {?} */
let text;
/** @type {?} */
let value;
if ('string' === typeof option || 'number' === typeof option) {
text = option;
value = option;
}
else {
text = option[this._textKey || 'text'];
value = this._valueKey ? option[this._valueKey] : option;
}
this._selectOptions.push({
id: index,
text: text,
value: value,
comparedValue: this.getComparedValue(option),
});
});
}
this.afterInitOptions();
this.writeValue(oldValue);
/** @type {?} */
const newValue = this.value;
if (JSON.stringify(oldValue) !== JSON.stringify(newValue)) {
this.triggerChange();
}
}
/**
* @return {?}
*/
beforeInitOptions() {
}
/**
* @return {?}
*/
afterInitOptions() {
}
/**
* @param {?} option
* @return {?}
*/
getComparedValue(option) {
if (!option) {
return '';
}
if ('string' === typeof option || 'number' === typeof option) {
return option;
}
/** @type {?} */
let value;
if (this._comparedKey) {
value = option[this._comparedKey];
}
else {
value = this._valueKey ? option[this._valueKey] : option;
}
if ('string' === typeof value || 'number' === typeof value) {
return value;
}
return JSON.stringify(value);
}
}
BaseListControlComponent.propDecorators = {
textKey: [{ type: Input }],
valueKey: [{ type: Input }],
comparedKey: [{ type: Input }],
options: [{ type: Input }]
};
if (false) {
/** @type {?} */
BaseListControlComponent.prototype._multiple;
/** @type {?} */
BaseListControlComponent.prototype._textKey;
/** @type {?} */
BaseListControlComponent.prototype._valueKey;
/** @type {?} */
BaseListControlComponent.prototype._comparedKey;
/** @type {?} */
BaseListControlComponent.prototype._options;
/** @type {?} */
BaseListControlComponent.prototype._selectOptions;
/** @type {?} */
BaseListControlComponent.prototype._selectedIndexes;
/**
* @abstract
* @return {?}
*/
BaseListControlComponent.prototype.value = function () { };
/**
* @abstract
* @param {?} value
* @return {?}
*/
BaseListControlComponent.prototype.writeValue = function (value) { };
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1saXN0LWNvbnRyb2wuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmd4LWZvcm0tY29udHJvbC8iLCJzb3VyY2VzIjpbInV0aWxzL2Jhc2UtbGlzdC1jb250cm9sLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDaEUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQzs7OztBQUV0QyxNQUFNLCtCQUF5QyxTQUFRLG9CQUFvQjs7O3dCQXdCeEMsRUFBRTs4QkFPbUMsRUFBRTtnQ0FPM0MsRUFBRTs7Ozs7O0lBakMvQixJQUFhLE9BQU8sQ0FBQyxLQUFhO1FBQ2hDLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ3RCLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztLQUNwQjs7Ozs7SUFJRCxJQUFhLFFBQVEsQ0FBQyxLQUFhO1FBQ2pDLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztLQUNwQjs7Ozs7SUFJRCxJQUFhLFdBQVcsQ0FBQyxLQUFhO1FBQ3BDLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1FBQzFCLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztLQUNwQjs7Ozs7SUFJRCxJQUFhLE9BQU8sQ0FBQyxPQUFtQjtRQUN0QyxJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQztRQUN4QixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7S0FDcEI7Ozs7UUFLVSxhQUFhO1FBQ3RCLE1BQU0sQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDOzs7OztRQUtsQixlQUFlO1FBQ3hCLE1BQU0sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7Ozs7OztRQUdwQixlQUFlLENBQUMsT0FBc0I7O1FBQy9DLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFD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SSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7U0FDMUQ7UUFFRCxFQUFFLENBQUMsQ0FBQyxRQUFRLEtBQUssT0FBTyxLQUFLLElBQUksUUFBUSxLQUFLLE9BQU8sS0FBSyxDQUFDLENBQUMsQ0FBQztZQUMzRCxNQUFNLENBQUMsS0FBSyxDQUFDO1NBQ2Q7UUFFRCxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztLQUM5Qjs7O3NCQXJKQSxLQUFLO3VCQU9MLEtBQUs7MEJBT0wsS0FBSztzQkFPTCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQmFzZUNvbnRyb2xDb21wb25lbnQgfSBmcm9tICcuL2Jhc2UtY29udHJvbC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJhc2VMaXN0Q29udHJvbENvbXBvbmVudCBleHRlbmRzIEJhc2VDb250cm9sQ29tcG9uZW50IHtcclxuXHJcbiAgcHJvdGVjdGVkIF9tdWx0aXBsZTtcclxuICBwcm90ZWN0ZWQgX3RleHRLZXk7XHJcblxyXG4gIEBJbnB1dCgpIHNldCB0ZXh0S2V5KHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX3RleHRLZXkgPSB2YWx1ZTtcclxuICAgIHRoaXMuaW5pdE9wdGlvbnMoKTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBfdmFsdWVLZXk7XHJcblxyXG4gIEBJbnB1dCgpIHNldCB2YWx1ZUtleSh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl92YWx1ZUtleSA9IHZhbHVlO1xyXG4gICAgdGhpcy5pbml0T3B0aW9ucygpO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIF9jb21wYXJlZEtleTtcclxuXHJcbiAgQElucHV0KCkgc2V0IGNvbXBhcmVkS2V5KHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX2NvbXBhcmVkS2V5ID0gdmFsdWU7XHJcbiAgICB0aGlzLmluaXRPcHRpb25zKCk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgX29wdGlvbnM6IEFycmF5PGFueT4gPSBbXTtcclxuXHJcbiAgQElucHV0KCkgc2V0IG9wdGlvbnMob3B0aW9uczogQXJyYXk8YW55Pikge1xyXG4gICAgdGhpcy5fb3B0aW9ucyA9IG9wdGlvbnM7XHJcbiAgICB0aGlzLmluaXRPcHRpb25zKCk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgX3NlbGVjdE9wdGlvbnM6IEFycmF5PHsgaWQsIHRleHQsIHZhbHVlLCBjb21wYXJlZFZhbHVlIH0+ID0gW107XHJcblxyXG4gIC8vIG5vaW5zcGVjdGlvbiBKU1VudXNlZEdsb2JhbFN5bWJvbHNcclxuICBwdWJsaWMgZ2V0IHNlbGVjdE9wdGlvbnMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0T3B0aW9ucztcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBfc2VsZWN0ZWRJbmRleGVzID0gW107XHJcblxyXG4gIHB1YmxpYyBnZXQgc2VsZWN0ZWRJbmRleGVzKCk6IEFycmF5PG51bWJlcj4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkSW5kZXhlcztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgc2VsZWN0ZWRJbmRleGVzKGluZGV4ZXM6IEFycmF5PG51bWJlcj4pIHtcclxuICAgIGNvbnN0IG9sZFNlbGVjdGVkSW5kZXhlcyA9IEpTT04uc3RyaW5naWZ5KHRoaXMuX3NlbGVjdGVkSW5kZXhlcyk7XHJcblxyXG4gICAgdGhpcy5fc2VsZWN0ZWRJbmRleGVzID0gaW5kZXhlcyAmJiBpbmRleGVzLmxlbmd0aCA/IGluZGV4ZXMucmVkdWNlKChhcnIsIHZhbHVlKSA9PiB7XHJcbiAgICAgIHZhbHVlID0gK3ZhbHVlO1xyXG5cclxuICAgICAgaWYgKHZhbHVlID4gLTEpIHtcclxuICAgICAgICBhcnIucHVzaCh2YWx1ZSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBhcnI7XHJcbiAgICB9LCBbXSkgOiBbXTtcclxuXHJcbiAgICBjb25zdCBuZXdTZWxlY3RlZEluZGV4ZXMgPSBKU09OLnN0cmluZ2lmeSh0aGlzLl9zZWxlY3RlZEluZGV4ZXMpO1xyXG5cclxuICAgIGlmIChuZXdTZWxlY3RlZEluZGV4ZXMgIT09IG9sZFNlbGVjdGVkSW5kZXhlcykge1xyXG4gICAgICB0aGlzLnRyaWdnZXJDaGFuZ2UoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBmaW5kSW5kZXgodmFsdWUpOiBudW1iZXIge1xyXG4gICAgY29uc3QgY29tcGFyZWRWYWx1ZSA9IHRoaXMuZ2V0Q29tcGFyZWRWYWx1ZSh2YWx1ZSk7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdE9wdGlvbnMuZmluZEluZGV4KChvcHRpb246IHsgaWQsIHRleHQsIHZhbHVlLCBjb21wYXJlZFZhbHVlIH0pID0+IHtcclxuICAgICAgcmV0dXJuIGNvbXBhcmVkVmFsdWUgPT09IG9wdGlvbi5jb21wYXJlZFZhbHVlO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgZmluZEluZGV4ZXMoYXJyVmFsdWU6IEFycmF5PGFueT4pOiBBcnJheTxudW1iZXI+IHtcclxuICAgIGlmICghYXJyVmFsdWUgfHwgIWFyclZhbHVlLmxlbmd0aCkge1xyXG4gICAgICByZXR1cm4gW107XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGFyclZhbHVlLnJlZHVjZSgoYXJyLCB2YWx1ZSkgPT4ge1xyXG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMuZmluZEluZGV4KHZhbHVlKTtcclxuXHJcbiAgICAgIGlmIChpbmRleCA+IC0xKSB7XHJcbiAgICAgICAgYXJyLnB1c2goaW5kZXgpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gYXJyO1xyXG4gICAgfSwgW10pO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGluaXRPcHRpb25zKCkge1xyXG4gICAgdGhpcy5iZWZvcmVJbml0T3B0aW9ucygpO1xyXG5cclxuICAgIGNvbnN0IG9sZFZhbHVlID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICB0aGlzLl9zZWxlY3RPcHRpb25zID0gW107XHJcbiAgICBpZiAodGhpcy5fb3B0aW9ucyAmJiB0aGlzLl9vcHRpb25zLmxlbmd0aCkge1xyXG4gICAgICB0aGlzLl9vcHRpb25zLm1hcCgob3B0aW9uLCBpbmRleCkgPT4ge1xyXG4gICAgICAgIGxldCB0ZXh0LCB2YWx1ZTtcclxuXHJcbiAgICAgICAgaWYgKCdzdHJpbmcnID09PSB0eXBlb2Ygb3B0aW9uIHx8ICdudW1iZXInID09PSB0eXBlb2Ygb3B0aW9uKSB7XHJcbiAgICAgICAgICB0ZXh0ID0gb3B0aW9uO1xyXG4gICAgICAgICAgdmFsdWUgPSBvcHRpb247XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRleHQgPSBvcHRpb25bdGhpcy5fdGV4dEtleSB8fCAndGV4dCddO1xyXG4gICAgICAgICAgdmFsdWUgPSB0aGlzLl92YWx1ZUtleSA/IG9wdGlvblt0aGlzLl92YWx1ZUtleV0gOiBvcHRpb247XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9zZWxlY3RPcHRpb25zLnB1c2goe1xyXG4gICAgICAgICAgaWQ6IGluZGV4LFxyXG4gICAgICAgICAgdGV4dDogdGV4dCxcclxuICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcclxuICAgICAgICAgIGNvbXBhcmVkVmFsdWU6IHRoaXMuZ2V0Q29tcGFyZWRWYWx1ZShvcHRpb24pLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmFmdGVySW5pdE9wdGlvbnMoKTtcclxuXHJcbiAgICB0aGlzLndyaXRlVmFsdWUob2xkVmFsdWUpO1xyXG5cclxuICAgIGNvbnN0IG5ld1ZhbHVlID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICBpZiAoSlNPTi5zdHJpbmdpZnkob2xkVmFsdWUpICE9PSBKU09OLnN0cmluZ2lmeShuZXdWYWx1ZSkpIHtcclxuICAgICAgdGhpcy50cmlnZ2VyQ2hhbmdlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgYmVmb3JlSW5pdE9wdGlvbnMoKSB7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgYWZ0ZXJJbml0T3B0aW9ucygpIHtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBnZXRDb21wYXJlZFZhbHVlKG9wdGlvbikge1xyXG4gICAgaWYgKCFvcHRpb24pIHtcclxuICAgICAgcmV0dXJuICcnO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICgnc3RyaW5nJyA9PT0gdHlwZW9mIG9wdGlvbiB8fCAnbnVtYmVyJyA9PT0gdHlwZW9mIG9wdGlvbikge1xyXG4gICAgICByZXR1cm4gb3B0aW9uO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCB2YWx1ZTtcclxuXHJcbiAgICBpZiAodGhpcy5fY29tcGFyZWRLZXkpIHtcclxuICAgICAgdmFsdWUgPSBvcHRpb25bdGhpcy5fY29tcGFyZWRLZXldO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdmFsdWUgPSB0aGlzLl92YWx1ZUtleSA/IG9wdGlvblt0aGlzLl92YWx1ZUtleV0gOiBvcHRpb247XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCdzdHJpbmcnID09PSB0eXBlb2YgdmFsdWUgfHwgJ251bWJlcicgPT09IHR5cGVvZiB2YWx1ZSkge1xyXG4gICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcclxuICB9XHJcblxyXG4gIGFic3RyYWN0IGdldCB2YWx1ZSgpO1xyXG5cclxuICBhYnN0cmFjdCB3cml0ZVZhbHVlKHZhbHVlOiBhbnkgfCBBcnJheTxhbnk+KTtcclxuXHJcbn1cclxuIl19