air-lib
Version:
This is Air's angular component library
1,115 lines • 114 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import * as tslib_1 from "tslib";
import { Component, Input, Output, EventEmitter, ElementRef, forwardRef } from '@angular/core';
import { DomSanitizer } from '@angular/platform-browser';
import { SelectItem } from './select-item';
import { stripTags } from './select-pipes';
import { escapeRegexp } from './common';
import { NG_VALUE_ACCESSOR } from '@angular/forms';
// Customization: NEW STRING:
import { MessageEvent } from '../../../services/Broadcaster/message-event';
import { AutocompleteCountSettings } from '../../../entities/auto-complete-count-settings';
/** @type {?} */
var styles = "\n .ui-select-toggle {\n position: relative;\n }\n\n /* Fix Bootstrap dropdown position when inside a input-group */\n .input-group > .dropdown {\n /* Instead of relative */\n position: static;\n }\n\n .ui-select-match > .btn {\n /* Instead of center because of .btn */\n text-align: left !important;\n }\n\n .ui-select-match > .caret {\n position: absolute;\n top: 45%;\n right: 15px;\n }\n\n .ui-disabled {\n background-color: transparent;\n border-radius: 0;\n position: absolute;\n width: 100%;\n height: 100%;\n z-index: 5;\n opacity: 0;\n top: 0;\n left: 0;\n cursor: not-allowed;\n }\n\n .ui-select-choices {\n width: 100%;\n height: auto;\n max-height: 200px;\n overflow-x: hidden;\n margin-top: 0;\n }\n\n .ui-select-multiple .ui-select-choices {\n margin-top: 1px;\n }\n .ui-select-choices-row>a {\n display: block;\n padding: 3px 20px;\n clear: both;\n font-weight: 400;\n line-height: 1.42857143;\n color: #333;\n white-space: nowrap;\n }\n .ui-select-choices-row.active>a {\n color: #000;\n text-decoration: none;\n outline: 0;\n background-color: #f5f5f5;\n }\n\n .ui-select-multiple {\n height: auto;\n padding:3px 3px 0 3px;\n }\n\n .ui-select-multiple input.ui-select-search {\n background-color: transparent !important; /* To prevent double background when disabled */\n border: none;\n outline: none;\n box-shadow: none;\n height: 1.6666em;\n padding: 0;\n margin-bottom: 3px;\n\n }\n .ui-select-match .close {\n font-size: 1.6em;\n line-height: 0.75;\n }\n\n .ui-select-multiple .ui-select-match-item {\n outline: 0;\n margin: 0 3px 3px 0;\n }\n .ui-select-toggle > .caret {\n position: absolute;\n height: 10px;\n top: 50%;\n right: 10px;\n margin-top: -2px;\n }\n.autocomplete-count{\n font-weight: 400;\n}\n.ui-select-choices-row:hover {\n background-color: #f5f5f5;\n}\n.text-muted{\n color: #cccccc;\n}\n";
var SelectComponent = /** @class */ (function () {
// Customization: NEW STRINGS:
function SelectComponent(element, sanitizer, messageEvent) {
this.sanitizer = sanitizer;
this.messageEvent = messageEvent;
this.editInputData = true;
this.allowClear = false;
this.placeholder = '';
this.idField = 'id';
this.textField = 'text';
this.multiple = false;
this.isSearch = false;
this.allowSearchIcons = false;
this.hasError = false;
this.searchPrepared = new EventEmitter();
// Customization: NEW STRINGS:
this.componentId = '';
this.enterKeySuppress = false;
this.opened = new EventEmitter();
this.closed = new EventEmitter();
this.inputText = new EventEmitter();
this.data = new EventEmitter();
this.selected = new EventEmitter();
this.removed = new EventEmitter();
this.typed = new EventEmitter();
this.options = [];
this.itemObjects = [];
this.inputMode = false;
this.optionsOpened = false;
this.inputValue = '';
this._items = [];
this._disabled = false;
this._active = [];
this.propagateChange = function (_) { };
// Customization: COMMENTED STRINGS:
// public constructor(element: ElementRef, private sanitizer: DomSanitizer) {
this.element = element;
this.clickedOutside = this.clickedOutside.bind(this);
}
Object.defineProperty(SelectComponent.prototype, "items", {
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
if (!value) {
this._items = this.itemObjects = [];
}
else {
this._items = value.filter(function (item) {
// if ((typeof item === 'string' && item) || (typeof item === 'object' && item && item.text && item.id)) {
if ((typeof item === 'string') || (typeof item === 'object' && item.text)) {
return item;
}
});
this.itemObjects = this._items.map(function (item) { return new SelectItem(item); });
// Customization: NEW STRING:
this.options = this.itemObjects;
}
},
enumerable: true,
configurable: true
});
Object.defineProperty(SelectComponent.prototype, "disabled", {
get: /**
* @return {?}
*/
function () {
return this._disabled;
},
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
this._disabled = value;
if (this._disabled === true) {
this.hideOptions();
}
},
enumerable: true,
configurable: true
});
Object.defineProperty(SelectComponent.prototype, "active", {
get: /**
* @return {?}
*/
function () {
return this._active;
},
set: /**
* @param {?} selectedItems
* @return {?}
*/
function (selectedItems) {
var _this = this;
// Customization: NEW STRINGS:
if (this.activeOption) {
this.activeOption.id = '';
this.activeOption.text = '';
}
if (!selectedItems || selectedItems.length === 0) {
this._active = [];
}
else {
/** @type {?} */
var areItemsStrings_1 = typeof selectedItems[0] === 'string';
this._active = selectedItems.map(function (item) {
/** @type {?} */
var data = areItemsStrings_1
? item
: { id: item[_this.idField], text: item[_this.textField] };
return new SelectItem(data);
});
}
},
enumerable: true,
configurable: true
});
Object.defineProperty(SelectComponent.prototype, "title", {
get: /**
* @return {?}
*/
function () {
return this._title;
},
set: /**
* @param {?} searchTitle
* @return {?}
*/
function (searchTitle) {
if (searchTitle) {
this._title = searchTitle;
}
},
enumerable: true,
configurable: true
});
Object.defineProperty(SelectComponent.prototype, "autocompleteCountSettings", {
set: /**
* @param {?} autocompleteCountSettings
* @return {?}
*/
function (autocompleteCountSettings) {
if (autocompleteCountSettings) {
this.optionsAutocomplete = autocompleteCountSettings;
}
},
enumerable: true,
configurable: true
});
Object.defineProperty(SelectComponent.prototype, "searchString", {
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
if (value) {
this.inputValue = value;
}
},
enumerable: true,
configurable: true
});
Object.defineProperty(SelectComponent.prototype, "firstItemHasChildren", {
get: /**
* @return {?}
*/
function () {
return this.itemObjects[0] && this.itemObjects[0].hasChildren();
},
enumerable: true,
configurable: true
});
/**
* @param {?} obj
* @return {?}
*/
SelectComponent.prototype.writeValue = /**
* @param {?} obj
* @return {?}
*/
function (obj) {
this.active = obj;
};
/**
* @param {?} fn
* @return {?}
*/
SelectComponent.prototype.registerOnChange = /**
* @param {?} fn
* @return {?}
*/
function (fn) {
this.propagateChange = fn;
};
/**
* @param {?} fn
* @return {?}
*/
SelectComponent.prototype.registerOnTouched = /**
* @param {?} fn
* @return {?}
*/
function (fn) {
// throw new Error("Method not implemented.");
};
/**
* @param {?} isDisabled
* @return {?}
*/
SelectComponent.prototype.setDisabledState = /**
* @param {?} isDisabled
* @return {?}
*/
function (isDisabled) {
// throw new Error("Method not implemented.");
};
/**
* @param {?} value
* @param {?=} e
* @return {?}
*/
SelectComponent.prototype.selectMatch = /**
* @param {?} value
* @param {?=} e
* @return {?}
*/
function (value, e) {
if (e === void 0) { e = null; }
if (value.id.indexOf('noclick') > -1) {
return;
}
if (e) {
e.stopPropagation();
e.preventDefault();
}
if (this.options.length <= 0) {
return;
}
if (this.multiple === true) {
this.active.push(value);
this.data.next(this.active);
}
if (this.multiple === false) {
this.active[0] = value;
this.data.next(this.active[0]);
}
this.doEvent('selected', value);
this.hideOptions();
if (this.multiple === true) {
this.focusToInput('');
}
else {
this.focusToInput(stripTags(value.text));
this.element.nativeElement.querySelector('.ui-select-container').focus();
}
};
/**
* @param {?} html
* @return {?}
*/
SelectComponent.prototype.sanitize = /**
* @param {?} html
* @return {?}
*/
function (html) {
return this.sanitizer.bypassSecurityTrustHtml(html);
};
/**
* @param {?} e
* @param {?=} isUpMode
* @return {?}
*/
SelectComponent.prototype.inputEvent = /**
* @param {?} e
* @param {?=} isUpMode
* @return {?}
*/
function (e, isUpMode) {
if (isUpMode === void 0) { isUpMode = false; }
// Customization: NEW STRING:
if (e.type === 'keyup') {
/** @type {?} */
var inputText = document.getElementById(this.componentId + '-input-text');
if (this.inputText && inputText) {
this.inputText.emit(inputText.value);
this.searchText = inputText.value;
}
}
// tab
if (e.keyCode === 9) {
return;
}
if (!this.isSearch && isUpMode && (e.keyCode === 37 || e.keyCode === 39 || e.keyCode === 38 ||
e.keyCode === 40)) {
e.preventDefault();
return;
}
// backspace
if (!isUpMode && e.keyCode === 8) {
/** @type {?} */
var el = this.element.nativeElement
.querySelector('div.ui-select-container > input');
if (!el.value || el.value.length <= 0) {
if (this.active.length > 0) {
this.remove(this.active[this.active.length - 1]);
}
e.preventDefault();
}
}
// esc
if (!isUpMode && e.keyCode === 27) {
this.hideOptions();
this.element.nativeElement.children[0].focus();
e.preventDefault();
return;
}
// del
if (!isUpMode && e.keyCode === 46) {
if (this.active.length > 0) {
this.remove(this.active[this.active.length - 1]);
}
e.preventDefault();
}
// left
if (!isUpMode && e.keyCode === 37 && this._items.length > 0) {
this.behavior.first();
e.preventDefault();
return;
}
// right
if (!isUpMode && e.keyCode === 39 && this._items.length > 0) {
this.behavior.last();
e.preventDefault();
return;
}
// up
if (!isUpMode && e.keyCode === 38) {
this.behavior.prev();
e.preventDefault();
return;
}
// down
if (!isUpMode && e.keyCode === 40) {
this.behavior.next();
e.preventDefault();
return;
}
// enter
if (e.keyCode === 13) {
// Customization: NEW STRINGS:
if (this.isSearch) {
this.selectionPrepared(e.target.value);
}
else {
if (this.active.indexOf(this.activeOption) === -1) {
this.selectActiveMatch();
this.behavior.next();
}
e.preventDefault();
return;
}
}
/** @type {?} */
var target = e.target || e.srcElement;
if (target && target.value) {
this.inputValue = target.value;
this.behavior.filter(new RegExp(escapeRegexp(this.inputValue), 'ig'));
this.doEvent('typed', this.inputValue);
}
};
/**
* @return {?}
*/
SelectComponent.prototype.ngOnInit = /**
* @return {?}
*/
function () {
this.behavior = (this.firstItemHasChildren) ?
new ChildrenBehavior(this) : new GenericBehavior(this);
// Customization: NEW STRING:
this.registerBroadcastEvent();
};
/**
* @param {?} item
* @return {?}
*/
SelectComponent.prototype.remove = /**
* @param {?} item
* @return {?}
*/
function (item) {
if (this._disabled === true) {
return;
}
if (this.multiple === true && this.active) {
/** @type {?} */
var index = this.active.indexOf(item);
this.active.splice(index, 1);
this.data.next(this.active);
this.doEvent('removed', item);
}
if (this.multiple === false) {
this.active = [];
this.data.next(this.active);
this.removed.emit(this.active);
}
};
/**
* @param {?} type
* @param {?} value
* @return {?}
*/
SelectComponent.prototype.doEvent = /**
* @param {?} type
* @param {?} value
* @return {?}
*/
function (type, value) {
if (((/** @type {?} */ (this)))[type] && value) {
((/** @type {?} */ (this)))[type].next(value);
}
if (type === 'selected') {
this.propagateChange(value);
}
};
/**
* @return {?}
*/
SelectComponent.prototype.clickedOutside = /**
* @return {?}
*/
function () {
this.inputMode = false;
this.optionsOpened = false;
// Customization: NEW STRING:
this.closed.emit();
};
/**
* @param {?} e
* @return {?}
*/
SelectComponent.prototype.matchClick = /**
* @param {?} e
* @return {?}
*/
function (e) {
if (this._disabled === true) {
return;
}
this.inputMode = !this.inputMode;
if (this.inputMode === true && ((this.multiple === true && e) || this.multiple === false)) {
/** @type {?} */
var editableValue_1 = '';
if (e.target.textContent && this.editInputData) {
editableValue_1 = e.target.textContent;
// @ts-ignore
this.searchSettings.presetList.forEach(function (item) {
if (item.text === editableValue_1) {
editableValue_1 = '';
}
});
// @ts-ignore
if (editableValue_1 === this.searchSettings.placeholder) {
editableValue_1 = '';
}
}
else {
editableValue_1 = '';
}
this.focusToInput(editableValue_1);
this.open();
}
};
/**
* @param {?} event
* @return {?}
*/
SelectComponent.prototype.mainClick = /**
* @param {?} event
* @return {?}
*/
function (event) {
if (this.inputMode === true || this._disabled === true) {
return;
}
if (event.keyCode === 46) {
event.preventDefault();
this.inputEvent(event);
return;
}
if (event.keyCode === 8) {
event.preventDefault();
this.inputEvent(event, true);
return;
}
if (event.keyCode === 9 || event.keyCode === 13 ||
event.keyCode === 27 || (event.keyCode >= 37 && event.keyCode <= 40)) {
event.preventDefault();
return;
}
this.inputMode = true;
/** @type {?} */
var value = String
.fromCharCode(96 <= event.keyCode && event.keyCode <= 105 ? event.keyCode - 48 : event.keyCode)
.toLowerCase();
this.focusToInput(value);
this.open();
/** @type {?} */
var target = event.target || event.srcElement;
target.value = value;
this.inputEvent(event);
};
/**
* @param {?} value
* @return {?}
*/
SelectComponent.prototype.selectActive = /**
* @param {?} value
* @return {?}
*/
function (value) {
this.activeOption = value;
};
/**
* @param {?} value
* @return {?}
*/
SelectComponent.prototype.isActive = /**
* @param {?} value
* @return {?}
*/
function (value) {
return this.activeOption && (this.activeOption.text === value.text);
};
/**
* @param {?=} value
* @return {?}
*/
SelectComponent.prototype.focusToInput = /**
* @param {?=} value
* @return {?}
*/
function (value) {
var _this = this;
if (value === void 0) { value = ''; }
setTimeout(function () {
/** @type {?} */
var el = _this.element.nativeElement.querySelector('div.ui-select-container > input');
if (el) {
el.focus();
el.value = value;
}
}, 0);
};
/**
* @private
* @return {?}
*/
SelectComponent.prototype.open = /**
* @private
* @return {?}
*/
function () {
var _this = this;
this.options = this.itemObjects
.filter(function (option) { return (_this.multiple === false ||
_this.multiple === true && !_this.active.find(function (o) { return option.text === o.text; })); });
if (this.options.length > 0) {
this.behavior.first();
}
this.optionsOpened = true;
// Customization: NEW STRINGS:
this.emitBroadcastEvent();
this.opened.emit();
};
/**
* @private
* @return {?}
*/
SelectComponent.prototype.hideOptions = /**
* @private
* @return {?}
*/
function () {
this.inputMode = false;
this.optionsOpened = false;
};
/**
* @private
* @return {?}
*/
SelectComponent.prototype.selectActiveMatch = /**
* @private
* @return {?}
*/
function () {
this.selectMatch(this.activeOption);
};
// Customization: NEW STRINGS:
// Customization: NEW STRINGS:
/**
* @private
* @return {?}
*/
SelectComponent.prototype.registerBroadcastEvent =
// Customization: NEW STRINGS:
/**
* @private
* @return {?}
*/
function () {
var _this = this;
this.messageEvent.on()
.subscribe(function (message) {
if (message !== _this.componentId) {
_this.clickedOutside();
}
});
};
/**
* @private
* @return {?}
*/
SelectComponent.prototype.emitBroadcastEvent = /**
* @private
* @return {?}
*/
function () {
this.messageEvent.fire(this.componentId);
};
/**
* @param {?} value
* @return {?}
*/
SelectComponent.prototype.selectionPrepared = /**
* @param {?} value
* @return {?}
*/
function (value) {
this.searchPrepared.emit(value);
this.hideOptions();
};
SelectComponent.decorators = [
{ type: Component, args: [{
// tslint:disable-next-line:component-selector
selector: 'ng-select',
// Customization: NEW STRING:
providers: [MessageEvent,
{
provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef(function () { return SelectComponent; }),
multi: true
}
],
template: "\n\n <div tabindex=\"0\"\n *ngIf=\"multiple === false\"\n (keyup)=\"mainClick($event)\"\n [offClick]=\"clickedOutside\"\n class=\"ui-select-container dropdown open\" [ngClass]=\"{'ui-select-focusud':inputMode, 'has-error': hasError}\">\n <div [ngClass]=\"{'ui-disabled': disabled}\"></div>\n <div *ngIf=\"title\" class='title-input'>{{title}}</div>\n <div class=\"ui-select-match\"\n *ngIf=\"!inputMode\">\n <span tabindex=\"-1\"\n class=\"btn btn-default btn-secondary form-control ui-select-toggle\"\n (click)=\"matchClick($event)\"\n style=\"outline: 0;\">\n <span *ngIf=\"active.length <= 0 || active[0].id ==''\" class=\"ui-select-placeholder text-muted\">{{placeholder}}</span>\n <span *ngIf=\"active.length > 0\" class=\"ui-select-match-text\"\n [ngClass]=\"{'ui-select-allow-clear': allowClear && active.length > 0}\"\n [innerHTML]=\"sanitize(active[0].text)\"></span>\n <i class=\"dropdown-toggle pull-right\"></i>\n <i *ngIf=\"!isSearch\" class=\"caret pull-right\"></i>\n </span>\n </div>\n <div class='ui-block-icons'>\n <a *ngIf=\"allowClear && active.length>0\" class=\"icons rotate45\" (click)=\"remove(activeOption)\">\n <i class=\"ui-close\">+</i>\n </a>\n <a *ngIf=\"allowSearchIcons && active.length > 0\" class=\"icons\" (click)=\"selectionPrepared(searchText)\">\n <i class=\"fa fa-search\" aria-hidden=\"true\"></i>\n </a>\n </div>\n <input #search type=\"text\" autocomplete=\"false\" tabindex=\"-1\" id=\"{{componentId}}-input-text\"\n (keyup)=\"inputEvent($event, true)\"\n [disabled]=\"disabled\"\n class=\"form-control ui-select-search\"\n *ngIf=\"inputMode\"\n placeholder=\"{{active.length <= 0 ? placeholder : ''}}\">\n <!-- options template -->\n <ul *ngIf=\"optionsOpened && options && options.length > 0 && !firstItemHasChildren\"\n class=\"ui-select-choices dropdown-menu\" role=\"menu\">\n <li *ngFor=\"let o of options\" role=\"menuitem\">\n <div class=\"ui-select-choices-row\"\n (click)=\"selectMatch(o, $event)\" [ngClass]=\"{'active': o.text == active[0]?.text}\">\n <a href=\"javascript:void(0)\" class=\"dropdown-item\">\n <div [innerHtml]=\"sanitize(o.text | highlight:inputValue)\"></div>\n </a>\n </div>\n </li>\n <li *ngIf=\"optionsAutocomplete?.hasAutocompleteCount\">\n <div class=\"autocomplete-count color-link p-l-30\"><i [innerHTML]=\"optionsAutocomplete?.autocompleteCountString\"></i></div>\n </li>\n </ul>\n\n <ul *ngIf=\"optionsOpened && options && options.length > 0 && firstItemHasChildren\"\n class=\"ui-select-choices dropdown-menu\" role=\"menu\">\n <li *ngFor=\"let c of options; let index=index\" role=\"menuitem\">\n <div class=\"divider dropdown-divider\" *ngIf=\"index > 0\"></div>\n <div class=\"dropdown-header\">{{c.text}}</div>\n\n <div *ngFor=\"let o of c.children\"\n class=\"ui-select-choices-row\"\n [class.active]=\"isActive(o)\"\n (mouseenter)=\"selectActive(o)\"\n (click)=\"selectMatch(o, $event)\"\n [ngClass]=\"{'active': isActive(o)}\">\n <a href=\"javascript:void(0)\" class=\"dropdown-item\">\n <div [innerHtml]=\"sanitize(o.text | highlight:inputValue)\"></div>\n </a>\n </div>\n </li>\n </ul>\n </div>\n\n <div tabindex=\"0\"\n *ngIf=\"multiple === true\"\n (keyup)=\"mainClick($event)\"\n (focus)=\"focusToInput('')\"\n [offClick]=\"clickedOutside\"\n class=\"ui-select-container ui-select-multiple dropdown form-control open\">\n <div [ngClass]=\"{'ui-disabled': disabled}\"></div>\n <span class=\"ui-select-match\">\n <span *ngFor=\"let a of active\">\n <span class=\"ui-select-match-item btn btn-default btn-secondary btn-xs\"\n tabindex=\"-1\"\n type=\"button\"\n [ngClass]=\"{'btn-default': true}\">\n <a class=\"close\"\n style=\"margin-left: 5px; padding: 0;\"\n (click)=\"remove(a)\">×</a>\n <span>{{a.text}}</span>\n </span>\n </span>\n </span>\n <input type=\"text\"\n (keydown)=\"inputEvent($event)\"\n (keyup)=\"inputEvent($event, true)\"\n (click)=\"matchClick($event)\"\n [disabled]=\"disabled\"\n id=\"{{componentId}}-input-text\"\n autocomplete=\"false\"\n autocorrect=\"off\"\n autocapitalize=\"off\"\n spellcheck=\"false\"\n class=\"form-control ui-select-search\"\n placeholder=\"{{active.length <= 0 ? placeholder : ''}}\"\n role=\"combobox\">\n <!-- options template -->\n <ul *ngIf=\"optionsOpened && options && options.length > 0 && !firstItemHasChildren\"\n class=\"ui-select-choices dropdown-menu\" role=\"menu\">\n <li *ngFor=\"let o of options\" role=\"menuitem\">\n <div class=\"ui-select-choices-row\"\n [class.active]=\"isActive(o)\"\n (mouseenter)=\"selectActive(o)\"\n (click)=\"selectMatch(o, $event)\">\n <a href=\"javascript:void(0)\" class=\"dropdown-item\">\n <div [innerHtml]=\"sanitize(o.text | highlight:inputValue)\"></div>\n </a>\n </div>\n </li>\n </ul>\n\n <ul *ngIf=\"optionsOpened && options && options.length > 0 && firstItemHasChildren\"\n class=\"ui-select-choices dropdown-menu\" role=\"menu\">\n <li *ngFor=\"let c of options; let index=index\" role=\"menuitem\">\n <div class=\"divider dropdown-divider\" *ngIf=\"index > 0\"></div>\n <div class=\"dropdown-header\">{{c.text}}</div>\n\n <div *ngFor=\"let o of c.children\"\n class=\"ui-select-choices-row\"\n [class.active]=\"isActive(o)\"\n (mouseenter)=\"selectActive(o)\"\n (click)=\"selectMatch(o, $event)\"\n [ngClass]=\"{'active': isActive(o)}\">\n <a href=\"javascript:void(0)\" class=\"dropdown-item\">\n <div [innerHtml]=\"sanitize(o.text | highlight:inputValue)\"></div>\n </a>\n </div>\n </li>\n </ul>\n </div>\n ",
styles: [styles]
}] }
];
SelectComponent.ctorParameters = function () { return [
{ type: ElementRef },
{ type: DomSanitizer },
{ type: MessageEvent }
]; };
SelectComponent.propDecorators = {
items: [{ type: Input }],
disabled: [{ type: Input }],
active: [{ type: Input }],
title: [{ type: Input }],
autocompleteCountSettings: [{ type: Input }],
searchString: [{ type: Input }],
editInputData: [{ type: Input }],
searchSettings: [{ type: Input }],
allowClear: [{ type: Input }],
placeholder: [{ type: Input }],
idField: [{ type: Input }],
textField: [{ type: Input }],
multiple: [{ type: Input }],
isSearch: [{ type: Input }],
allowSearchIcons: [{ type: Input }],
hasError: [{ type: Input }],
searchPrepared: [{ type: Output }],
componentId: [{ type: Input }],
enterKeySuppress: [{ type: Input }],
opened: [{ type: Output }],
closed: [{ type: Output }],
inputText: [{ type: Output }],
data: [{ type: Output }],
selected: [{ type: Output }],
removed: [{ type: Output }],
typed: [{ type: Output }]
};
return SelectComponent;
}());
export { SelectComponent };
if (false) {
/** @type {?} */
SelectComponent.prototype.editInputData;
/** @type {?} */
SelectComponent.prototype.searchSettings;
/** @type {?} */
SelectComponent.prototype.allowClear;
/** @type {?} */
SelectComponent.prototype.placeholder;
/** @type {?} */
SelectComponent.prototype.idField;
/** @type {?} */
SelectComponent.prototype.textField;
/** @type {?} */
SelectComponent.prototype.multiple;
/** @type {?} */
SelectComponent.prototype.isSearch;
/**
* @type {?}
* @private
*/
SelectComponent.prototype._title;
/** @type {?} */
SelectComponent.prototype.allowSearchIcons;
/** @type {?} */
SelectComponent.prototype.hasError;
/** @type {?} */
SelectComponent.prototype.searchPrepared;
/** @type {?} */
SelectComponent.prototype.searchText;
/** @type {?} */
SelectComponent.prototype.optionsAutocomplete;
/** @type {?} */
SelectComponent.prototype.componentId;
/** @type {?} */
SelectComponent.prototype.enterKeySuppress;
/** @type {?} */
SelectComponent.prototype.opened;
/** @type {?} */
SelectComponent.prototype.closed;
/** @type {?} */
SelectComponent.prototype.inputText;
/** @type {?} */
SelectComponent.prototype.data;
/** @type {?} */
SelectComponent.prototype.selected;
/** @type {?} */
SelectComponent.prototype.removed;
/** @type {?} */
SelectComponent.prototype.typed;
/** @type {?} */
SelectComponent.prototype.options;
/** @type {?} */
SelectComponent.prototype.itemObjects;
/** @type {?} */
SelectComponent.prototype.activeOption;
/** @type {?} */
SelectComponent.prototype.element;
/** @type {?} */
SelectComponent.prototype.inputMode;
/** @type {?} */
SelectComponent.prototype.optionsOpened;
/**
* @type {?}
* @private
*/
SelectComponent.prototype.behavior;
/** @type {?} */
SelectComponent.prototype.inputValue;
/**
* @type {?}
* @private
*/
SelectComponent.prototype._items;
/**
* @type {?}
* @private
*/
SelectComponent.prototype._disabled;
/**
* @type {?}
* @private
*/
SelectComponent.prototype._active;
/** @type {?} */
SelectComponent.prototype.propagateChange;
/**
* @type {?}
* @private
*/
SelectComponent.prototype.sanitizer;
/**
* @type {?}
* @private
*/
SelectComponent.prototype.messageEvent;
}
var Behavior = /** @class */ (function () {
function Behavior(actor) {
this.optionsMap = new Map();
this.actor = actor;
}
/**
* @return {?}
*/
Behavior.prototype.fillOptionsMap = /**
* @return {?}
*/
function () {
var _this = this;
this.optionsMap.clear();
/** @type {?} */
var startPos = 0;
this.actor.itemObjects
.map(function (item) {
startPos = item.fillChildrenHash(_this.optionsMap, startPos);
});
};
/**
* @param {?=} optionsMap
* @return {?}
*/
Behavior.prototype.ensureHighlightVisible = /**
* @param {?=} optionsMap
* @return {?}
*/
function (optionsMap) {
if (optionsMap === void 0) { optionsMap = null; }
/** @type {?} */
var container = this.actor.element.nativeElement.querySelector('.ui-select-choices-content');
if (!container) {
return;
}
/** @type {?} */
var choices = container.querySelectorAll('.ui-select-choices-row');
if (choices.length < 1) {
return;
}
/** @type {?} */
var activeIndex = this.getActiveIndex(optionsMap);
if (activeIndex < 0) {
return;
}
/** @type {?} */
var highlighted = choices[activeIndex];
if (!highlighted) {
return;
}
/** @type {?} */
var posY = highlighted.offsetTop + highlighted.clientHeight - container.scrollTop;
/** @type {?} */
var height = container.offsetHeight;
if (posY > height) {
container.scrollTop += posY - height;
}
else if (posY < highlighted.clientHeight) {
container.scrollTop -= highlighted.clientHeight - posY;
}
};
/**
* @private
* @param {?=} optionsMap
* @return {?}
*/
Behavior.prototype.getActiveIndex = /**
* @private
* @param {?=} optionsMap
* @return {?}
*/
function (optionsMap) {
if (optionsMap === void 0) { optionsMap = null; }
/** @type {?} */
var ai = this.actor.options.indexOf(this.actor.activeOption);
if (ai < 0 && optionsMap !== null) {
/** @type {?} */
var a = optionsMap.get(this.actor.activeOption.id);
if (a) {
ai = a;
}
else {
ai = 0;
}
}
return ai;
};
return Behavior;
}());
export { Behavior };
if (false) {
/** @type {?} */
Behavior.prototype.optionsMap;
/** @type {?} */
Behavior.prototype.actor;
}
var GenericBehavior = /** @class */ (function (_super) {
tslib_1.__extends(GenericBehavior, _super);
function GenericBehavior(actor) {
return _super.call(this, actor) || this;
}
/**
* @return {?}
*/
GenericBehavior.prototype.first = /**
* @return {?}
*/
function () {
this.actor.activeOption = this.actor.options[0];
_super.prototype.ensureHighlightVisible.call(this);
};
/**
* @return {?}
*/
GenericBehavior.prototype.last = /**
* @return {?}
*/
function () {
this.actor.activeOption = this.actor.options[this.actor.options.length - 1];
_super.prototype.ensureHighlightVisible.call(this);
};
/**
* @return {?}
*/
GenericBehavior.prototype.prev = /**
* @return {?}
*/
function () {
/** @type {?} */
var index = this.actor.options.indexOf(this.actor.activeOption);
this.actor.activeOption = this.actor
.options[index - 1 < 0 ? this.actor.options.length - 1 : index - 1];
_super.prototype.ensureHighlightVisible.call(this);
};
/**
* @return {?}
*/
GenericBehavior.prototype.next = /**
* @return {?}
*/
function () {
/** @type {?} */
var index = this.actor.options.indexOf(this.actor.activeOption);
this.actor.activeOption = this.actor
.options[index + 1 > this.actor.options.length - 1 ? 0 : index + 1];
_super.prototype.ensureHighlightVisible.call(this);
};
/**
* @param {?} query
* @return {?}
*/
GenericBehavior.prototype.filter = /**
* @param {?} query
* @return {?}
*/
function (query) {
var _this = this;
/** @type {?} */
var options = this.actor.itemObjects
.filter(function (option) {
return stripTags(option.text).match(query) &&
(_this.actor.multiple === false ||
(_this.actor.multiple === true && _this.actor.active.map(function (item) { return item.id; }).indexOf(option.id) < 0));
});
this.actor.options = options;
if (this.actor.options.length > 0) {
this.actor.activeOption = this.actor.options[0];
_super.prototype.ensureHighlightVisible.call(this);
}
};
return GenericBehavior;
}(Behavior));
export { GenericBehavior };
var ChildrenBehavior = /** @class */ (function (_super) {
tslib_1.__extends(ChildrenBehavior, _super);
function ChildrenBehavior(actor) {
return _super.call(this, actor) || this;
}
/**
* @return {?}
*/
ChildrenBehavior.prototype.first = /**
* @return {?}
*/
function () {
this.actor.activeOption = this.actor.options[0].children[0];
this.fillOptionsMap();
this.ensureHighlightVisible(this.optionsMap);
};
/**
* @return {?}
*/
ChildrenBehavior.prototype.last = /**
* @return {?}
*/
function () {
this.actor.activeOption =
this.actor
.options[this.actor.options.length - 1]
.children[this.actor.options[this.actor.options.length - 1].children.length - 1];
this.fillOptionsMap();
this.ensureHighlightVisible(this.optionsMap);
};
/**
* @return {?}
*/
ChildrenBehavior.prototype.prev = /**
* @return {?}
*/
function () {
var _this = this;
/** @type {?} */
var indexParent = this.actor.options
.findIndex(function (option) { return _this.actor.activeOption.parent && _this.actor.activeOption.parent.id === option.id; });
/** @type {?} */
var index = this.actor.options[indexParent].children
.findIndex(function (option) { return _this.actor.activeOption && _this.actor.activeOption.id === option.id; });
this.actor.activeOption = this.actor.options[indexParent].children[index - 1];
if (!this.actor.activeOption) {
if (this.actor.options[indexParent - 1]) {
this.actor.activeOption = this.actor
.options[indexParent - 1]
.children[this.actor.options[indexParent - 1].children.length - 1];
}
}
if (!this.actor.activeOption) {
this.last();
}
this.fillOptionsMap();
this.ensureHighlightVisible(this.optionsMap);
};
/**
* @return {?}
*/
ChildrenBehavior.prototype.next = /**
* @return {?}
*/
function () {
var _this = this;
/** @type {?} */
var indexParent = this.actor.options
.findIndex(function (option) { return _this.actor.activeOption.parent && _this.actor.activeOption.parent.id === option.id; });
/** @type {?} */
var index = this.actor.options[indexParent].children
.findIndex(function (option) { return _this.actor.activeOption && _this.actor.activeOption.id === option.id; });
this.actor.activeOption = this.actor.options[indexParent].children[index + 1];
if (!this.actor.activeOption) {
if (this.actor.options[indexParent + 1]) {
this.actor.activeOption = this.actor.options[indexParent + 1].children[0];
}
}
if (!this.actor.activeOption) {
this.first();
}
this.fillOptionsMap();
this.ensureHighlightVisible(this.optionsMap);
};
/**
* @param {?} query
* @return {?}
*/
ChildrenBehavior.prototype.filter = /**
* @param {?} query
* @return {?}
*/
function (query) {
var e_1, _a;
/** @type {?} */
var options = [];
/** @type {?} */
var optionsMap = new Map();
/** @type {?} */
var startPos = 0;
try {
// tslint:disable-next-line:prefer-const
for (var _b = tslib_1.__values(this.actor.itemObjects), _c = _b.next(); !_c.done; _c = _b.next()) {
var si = _c.value;
/** @type {?} */
var children = si.children.filter(function (option) { return query.test(option.text); });
startPos = si.fillChildrenHash(optionsMap, startPos);
if (children.length > 0) {
/** @type {?} */
var newSi = si.getSimilar();
newSi.children = children;
options.push(newSi);
}
}
}
catch (e_1_1) { e_1 = { error: e_1_1 }; }
finally {
try {
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
}
finally { if (e_1) throw e_1.error; }
}
this.actor.options = options;
if (this.actor.options.length > 0) {
this.actor.activeOption = this.actor.options[0].children[0];
_super.prototype.ensureHighlightVisible.call(this, optionsMap);
}
};
return ChildrenBehavior;
}(Behavior));
export { ChildrenBehavior };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LmpzIiwic291cmNlUm9vdCI6Im5nOi8vYWlyLWxpYi8iLCJzb3VyY2VzIjpbImxpYi9jb21wb25lbnRzL25nMi1zZWxlY3QtY3VzdG9tL3NlbGVjdC9zZWxlY3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBVSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkcsT0FBTyxFQUFFLFlBQVksRUFBWSxNQUFNLDJCQUEyQixDQUFDO0FBQ25FLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTNDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDeEMsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDOztBQUd6RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDM0UsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sZ0RBQWdELENBQUM7O0lBRXJGLE1BQU0sR0FBRyw4Z0VBc0dkO0FBRUQ7SUE4T0ksOEJBQThCO0lBQzlCLHlCQUFtQixPQUFtQixFQUFVLFNBQXVCLEVBQzNELFlBQTBCO1FBRFUsY0FBUyxHQUFULFNBQVMsQ0FBYztRQUMzRCxpQkFBWSxHQUFaLFlBQVksQ0FBYztRQVl0QixrQkFBYSxHQUFHLElBQUksQ0FBQztRQUVyQixlQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ25CLGdCQUFXLEdBQUcsRUFBRSxDQUFDO1FBQ2pCLFlBQU8sR0FBRyxJQUFJLENBQUM7UUFDZixjQUFTLEdBQUcsTUFBTSxDQUFDO1FBQ25CLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFDeEIsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUVWLHFCQUFnQixHQUFHLEtBQUssQ0FBQztRQUNoQyxh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