ngx-form-control
Version:
Form controls for angular 6
268 lines (267 loc) • 18.8 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
import * as tslib_1 from "tslib";
import { BaseControlComponent } from './base-control.component';
import { Input } from '@angular/core';
/**
* @abstract
*/
var BaseListControlComponent = /** @class */ (function (_super) {
tslib_1.__extends(BaseListControlComponent, _super);
function BaseListControlComponent() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this._options = [];
_this._selectOptions = [];
_this._selectedIndexes = [];
return _this;
}
Object.defineProperty(BaseListControlComponent.prototype, "textKey", {
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
this._textKey = value;
this.initOptions();
},
enumerable: true,
configurable: true
});
Object.defineProperty(BaseListControlComponent.prototype, "valueKey", {
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
this._valueKey = value;
this.initOptions();
},
enumerable: true,
configurable: true
});
Object.defineProperty(BaseListControlComponent.prototype, "comparedKey", {
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
this._comparedKey = value;
this.initOptions();
},
enumerable: true,
configurable: true
});
Object.defineProperty(BaseListControlComponent.prototype, "options", {
set: /**
* @param {?} options
* @return {?}
*/
function (options) {
this._options = options;
this.initOptions();
},
enumerable: true,
configurable: true
});
Object.defineProperty(BaseListControlComponent.prototype, "selectOptions", {
get: /**
* @return {?}
*/
function () {
return this._selectOptions;
},
enumerable: true,
configurable: true
});
Object.defineProperty(BaseListControlComponent.prototype, "selectedIndexes", {
get: /**
* @return {?}
*/
function () {
return this._selectedIndexes;
},
set: /**
* @param {?} indexes
* @return {?}
*/
function (indexes) {
/** @type {?} */
var oldSelectedIndexes = JSON.stringify(this._selectedIndexes);
this._selectedIndexes = indexes && indexes.length ? indexes.reduce(function (arr, value) {
value = +value;
if (value > -1) {
arr.push(value);
}
return arr;
}, []) : [];
/** @type {?} */
var newSelectedIndexes = JSON.stringify(this._selectedIndexes);
if (newSelectedIndexes !== oldSelectedIndexes) {
this.triggerChange();
}
},
enumerable: true,
configurable: true
});
/**
* @param {?} value
* @return {?}
*/
BaseListControlComponent.prototype.findIndex = /**
* @param {?} value
* @return {?}
*/
function (value) {
/** @type {?} */
var comparedValue = this.getComparedValue(value);
return this._selectOptions.findIndex(function (option) {
return comparedValue === option.comparedValue;
});
};
/**
* @param {?} arrValue
* @return {?}
*/
BaseListControlComponent.prototype.findIndexes = /**
* @param {?} arrValue
* @return {?}
*/
function (arrValue) {
var _this = this;
if (!arrValue || !arrValue.length) {
return [];
}
return arrValue.reduce(function (arr, value) {
/** @type {?} */
var index = _this.findIndex(value);
if (index > -1) {
arr.push(index);
}
return arr;
}, []);
};
/**
* @return {?}
*/
BaseListControlComponent.prototype.initOptions = /**
* @return {?}
*/
function () {
var _this = this;
this.beforeInitOptions();
/** @type {?} */
var oldValue = this.value;
this._selectOptions = [];
if (this._options && this._options.length) {
this._options.map(function (option, index) {
/** @type {?} */
var text;
/** @type {?} */
var 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 {?} */
var newValue = this.value;
if (JSON.stringify(oldValue) !== JSON.stringify(newValue)) {
this.triggerChange();
}
};
/**
* @return {?}
*/
BaseListControlComponent.prototype.beforeInitOptions = /**
* @return {?}
*/
function () {
};
/**
* @return {?}
*/
BaseListControlComponent.prototype.afterInitOptions = /**
* @return {?}
*/
function () {
};
/**
* @param {?} option
* @return {?}
*/
BaseListControlComponent.prototype.getComparedValue = /**
* @param {?} option
* @return {?}
*/
function (option) {
if (!option) {
return '';
}
if ('string' === typeof option || 'number' === typeof option) {
return option;
}
/** @type {?} */
var 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 }]
};
return BaseListControlComponent;
}(BaseControlComponent));
export { BaseListControlComponent };
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1saXN0LWNvbnRyb2wuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmd4LWZvcm0tY29udHJvbC8iLCJzb3VyY2VzIjpbInV0aWxzL2Jhc2UtbGlzdC1jb250cm9sLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7O0lBRWlCLG9EQUFvQjs7O3lCQXdCeEMsRUFBRTsrQkFPbUMsRUFBRTtpQ0FPM0MsRUFBRTs7O0lBakMvQixzQkFBYSw2Q0FBTzs7Ozs7UUFBcEIsVUFBcUIsS0FBYTtZQUNoQyxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztZQUN0QixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDcEI7OztPQUFBO0lBSUQsc0JBQWEsOENBQVE7Ozs7O1FBQXJCLFVBQXNCLEtBQWE7WUFDakMsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7WUFDdkIsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1NBQ3BCOzs7T0FBQTtJQUlELHNCQUFhLGlEQUFXOzs7OztRQUF4QixVQUF5QixLQUFhO1lBQ3BDLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1lBQzFCLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztTQUNwQjs7O09BQUE7SUFJRCxzQkFBYSw2Q0FBTzs7Ozs7UUFBcEIsVUFBcUIsT0FBbUI7WUFDdEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUM7WUFDeEIsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1NBQ3BCOzs7T0FBQTswQkFLVSxtREFBYTs7Ozs7WUFDdEIsTUFBTSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUM7Ozs7OzBCQUtsQixxREFBZTs7Ozs7WUFDeEIsTUFBTSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQzs7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LENBQUMsQ0FBQztTQUNuQztRQUFDLElBQUksQ0FBQyxDQUFDO1lBQ04sS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztTQUMxRDtRQUVELEVBQUUsQ0FBQyxDQUFDLFFBQVEsS0FBSyxPQUFPLEtBQUssSUFBSSxRQUFRLEtBQUssT0FBTyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQzNELE1BQU0sQ0FBQyxLQUFLLENBQUM7U0FDZDtRQUVELE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO0tBQzlCOzswQkFySkEsS0FBSzsyQkFPTCxLQUFLOzhCQU9MLEtBQUs7MEJBT0wsS0FBSzs7bUNBN0JSO0VBR3VELG9CQUFvQjtTQUFyRCx3QkFBd0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCYXNlQ29udHJvbENvbXBvbmVudCB9IGZyb20gJy4vYmFzZS1jb250cm9sLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQmFzZUxpc3RDb250cm9sQ29tcG9uZW50IGV4dGVuZHMgQmFzZUNvbnRyb2xDb21wb25lbnQge1xyXG5cclxuICBwcm90ZWN0ZWQgX211bHRpcGxlO1xyXG4gIHByb3RlY3RlZCBfdGV4dEtleTtcclxuXHJcbiAgQElucHV0KCkgc2V0IHRleHRLZXkodmFsdWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5fdGV4dEtleSA9IHZhbHVlO1xyXG4gICAgdGhpcy5pbml0T3B0aW9ucygpO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIF92YWx1ZUtleTtcclxuXHJcbiAgQElucHV0KCkgc2V0IHZhbHVlS2V5KHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX3ZhbHVlS2V5ID0gdmFsdWU7XHJcbiAgICB0aGlzLmluaXRPcHRpb25zKCk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgX2NvbXBhcmVkS2V5O1xyXG5cclxuICBASW5wdXQoKSBzZXQgY29tcGFyZWRLZXkodmFsdWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5fY29tcGFyZWRLZXkgPSB2YWx1ZTtcclxuICAgIHRoaXMuaW5pdE9wdGlvbnMoKTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBfb3B0aW9uczogQXJyYXk8YW55PiA9IFtdO1xyXG5cclxuICBASW5wdXQoKSBzZXQgb3B0aW9ucyhvcHRpb25zOiBBcnJheTxhbnk+KSB7XHJcbiAgICB0aGlzLl9vcHRpb25zID0gb3B0aW9ucztcclxuICAgIHRoaXMuaW5pdE9wdGlvbnMoKTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBfc2VsZWN0T3B0aW9uczogQXJyYXk8eyBpZCwgdGV4dCwgdmFsdWUsIGNvbXBhcmVkVmFsdWUgfT4gPSBbXTtcclxuXHJcbiAgLy8gbm9pbnNwZWN0aW9uIEpTVW51c2VkR2xvYmFsU3ltYm9sc1xyXG4gIHB1YmxpYyBnZXQgc2VsZWN0T3B0aW9ucygpIHtcclxuICAgIHJldHVybiB0aGlzLl9zZWxlY3RPcHRpb25zO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIF9zZWxlY3RlZEluZGV4ZXMgPSBbXTtcclxuXHJcbiAgcHVibGljIGdldCBzZWxlY3RlZEluZGV4ZXMoKTogQXJyYXk8bnVtYmVyPiB7XHJcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWRJbmRleGVzO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBzZWxlY3RlZEluZGV4ZXMoaW5kZXhlczogQXJyYXk8bnVtYmVyPikge1xyXG4gICAgY29uc3Qgb2xkU2VsZWN0ZWRJbmRleGVzID0gSlNPTi5zdHJpbmdpZnkodGhpcy5fc2VsZWN0ZWRJbmRleGVzKTtcclxuXHJcbiAgICB0aGlzLl9zZWxlY3RlZEluZGV4ZXMgPSBpbmRleGVzICYmIGluZGV4ZXMubGVuZ3RoID8gaW5kZXhlcy5yZWR1Y2UoKGFyciwgdmFsdWUpID0+IHtcclxuICAgICAgdmFsdWUgPSArdmFsdWU7XHJcblxyXG4gICAgICBpZiAodmFsdWUgPiAtMSkge1xyXG4gICAgICAgIGFyci5wdXNoKHZhbHVlKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIGFycjtcclxuICAgIH0sIFtdKSA6IFtdO1xyXG5cclxuICAgIGNvbnN0IG5ld1NlbGVjdGVkSW5kZXhlcyA9IEpTT04uc3RyaW5naWZ5KHRoaXMuX3NlbGVjdGVkSW5kZXhlcyk7XHJcblxyXG4gICAgaWYgKG5ld1NlbGVjdGVkSW5kZXhlcyAhPT0gb2xkU2VsZWN0ZWRJbmRleGVzKSB7XHJcbiAgICAgIHRoaXMudHJpZ2dlckNoYW5nZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGZpbmRJbmRleCh2YWx1ZSk6IG51bWJlciB7XHJcbiAgICBjb25zdCBjb21wYXJlZFZhbHVlID0gdGhpcy5nZXRDb21wYXJlZFZhbHVlKHZhbHVlKTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0T3B0aW9ucy5maW5kSW5kZXgoKG9wdGlvbjogeyBpZCwgdGV4dCwgdmFsdWUsIGNvbXBhcmVkVmFsdWUgfSkgPT4ge1xyXG4gICAgICByZXR1cm4gY29tcGFyZWRWYWx1ZSA9PT0gb3B0aW9uLmNvbXBhcmVkVmFsdWU7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBmaW5kSW5kZXhlcyhhcnJWYWx1ZTogQXJyYXk8YW55Pik6IEFycmF5PG51bWJlcj4ge1xyXG4gICAgaWYgKCFhcnJWYWx1ZSB8fCAhYXJyVmFsdWUubGVuZ3RoKSB7XHJcbiAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gYXJyVmFsdWUucmVkdWNlKChhcnIsIHZhbHVlKSA9PiB7XHJcbiAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5maW5kSW5kZXgodmFsdWUpO1xyXG5cclxuICAgICAgaWYgKGluZGV4ID4gLTEpIHtcclxuICAgICAgICBhcnIucHVzaChpbmRleCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBhcnI7XHJcbiAgICB9LCBbXSk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgaW5pdE9wdGlvbnMoKSB7XHJcbiAgICB0aGlzLmJlZm9yZUluaXRPcHRpb25zKCk7XHJcblxyXG4gICAgY29uc3Qgb2xkVmFsdWUgPSB0aGlzLnZhbHVlO1xyXG5cclxuICAgIHRoaXMuX3NlbGVjdE9wdGlvbnMgPSBbXTtcclxuICAgIGlmICh0aGlzLl9vcHRpb25zICYmIHRoaXMuX29wdGlvbnMubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMuX29wdGlvbnMubWFwKChvcHRpb24sIGluZGV4KSA9PiB7XHJcbiAgICAgICAgbGV0IHRleHQsIHZhbHVlO1xyXG5cclxuICAgICAgICBpZiAoJ3N0cmluZycgPT09IHR5cGVvZiBvcHRpb24gfHwgJ251bWJlcicgPT09IHR5cGVvZiBvcHRpb24pIHtcclxuICAgICAgICAgIHRleHQgPSBvcHRpb247XHJcbiAgICAgICAgICB2YWx1ZSA9IG9wdGlvbjtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGV4dCA9IG9wdGlvblt0aGlzLl90ZXh0S2V5IHx8ICd0ZXh0J107XHJcbiAgICAgICAgICB2YWx1ZSA9IHRoaXMuX3ZhbHVlS2V5ID8gb3B0aW9uW3RoaXMuX3ZhbHVlS2V5XSA6IG9wdGlvbjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX3NlbGVjdE9wdGlvbnMucHVzaCh7XHJcbiAgICAgICAgICBpZDogaW5kZXgsXHJcbiAgICAgICAgICB0ZXh0OiB0ZXh0LFxyXG4gICAgICAgICAgdmFsdWU6IHZhbHVlLFxyXG4gICAgICAgICAgY29tcGFyZWRWYWx1ZTogdGhpcy5nZXRDb21wYXJlZFZhbHVlKG9wdGlvbiksXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuYWZ0ZXJJbml0T3B0aW9ucygpO1xyXG5cclxuICAgIHRoaXMud3JpdGVWYWx1ZShvbGRWYWx1ZSk7XHJcblxyXG4gICAgY29uc3QgbmV3VmFsdWUgPSB0aGlzLnZhbHVlO1xyXG5cclxuICAgIGlmIChKU09OLnN0cmluZ2lmeShvbGRWYWx1ZSkgIT09IEpTT04uc3RyaW5naWZ5KG5ld1ZhbHVlKSkge1xyXG4gICAgICB0aGlzLnRyaWdnZXJDaGFuZ2UoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBiZWZvcmVJbml0T3B0aW9ucygpIHtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBhZnRlckluaXRPcHRpb25zKCkge1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGdldENvbXBhcmVkVmFsdWUob3B0aW9uKSB7XHJcbiAgICBpZiAoIW9wdGlvbikge1xyXG4gICAgICByZXR1cm4gJyc7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCdzdHJpbmcnID09PSB0eXBlb2Ygb3B0aW9uIHx8ICdudW1iZXInID09PSB0eXBlb2Ygb3B0aW9uKSB7XHJcbiAgICAgIHJldHVybiBvcHRpb247XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHZhbHVlO1xyXG5cclxuICAgIGlmICh0aGlzLl9jb21wYXJlZEtleSkge1xyXG4gICAgICB2YWx1ZSA9IG9wdGlvblt0aGlzLl9jb21wYXJlZEtleV07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB2YWx1ZSA9IHRoaXMuX3ZhbHVlS2V5ID8gb3B0aW9uW3RoaXMuX3ZhbHVlS2V5XSA6IG9wdGlvbjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoJ3N0cmluZycgPT09IHR5cGVvZiB2YWx1ZSB8fCAnbnVtYmVyJyA9PT0gdHlwZW9mIHZhbHVlKSB7XHJcbiAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgYWJzdHJhY3QgZ2V0IHZhbHVlKCk7XHJcblxyXG4gIGFic3RyYWN0IHdyaXRlVmFsdWUodmFsdWU6IGFueSB8IEFycmF5PGFueT4pO1xyXG5cclxufVxyXG4iXX0=