UNPKG

ngx-form-control

Version:
268 lines (267 loc) 18.8 kB
/** * @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=