@ngx-performance-ui/ui
Version:
Ngx Performance UI - UI
217 lines • 16 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { ChangeDetectionStrategy, Component, ElementRef, EventEmitter, forwardRef, Injector, Input, Output, ViewChild, ViewEncapsulation, } from '@angular/core';
import { NG_VALUE_ACCESSOR } from '@angular/forms';
import { timer } from 'rxjs';
import { takeUntilDestroy } from '@ngx-performance-ui/core';
import { AbstractInputComponent } from '../../abstracts';
/**
* @record
*/
export function AutocompleteItem() { }
if (false) {
/** @type {?} */
AutocompleteItem.prototype.text;
/** @type {?} */
AutocompleteItem.prototype.value;
}
export class AutocompleteComponent extends AbstractInputComponent {
/**
* @param {?} injector
*/
constructor(injector) {
super(injector);
this.injector = injector;
this.items = [];
this.containerClasses = '';
this.delay = 200;
this.select = new EventEmitter();
this.placeholder = 'Type in here';
this.autocomplete = 'nop';
this.showList = false;
this.inputValue = '';
this.valueFn = (/**
* @param {?} value
* @return {?}
*/
value => {
if (!value)
return value;
this.inputValue = value.text;
return value;
});
this.trackByFn = (/**
* @param {?} _
* @param {?} value
* @return {?}
*/
(_, value) => value.text);
}
/**
* @return {?}
*/
ngOnDestroy() { }
/**
* @param {?} event
* @return {?}
*/
onBlur(event) {
timer(this.delay)
.pipe(takeUntilDestroy(this))
.subscribe((/**
* @return {?}
*/
() => {
this.showList = false;
this.inputValue = (this.value || { text: '' }).text;
this.cdRef.detectChanges();
}));
this.blur.emit(event);
}
/**
* @param {?} event
* @return {?}
*/
onFocus(event) {
timer(this.delay)
.pipe(takeUntilDestroy(this))
.subscribe((/**
* @return {?}
*/
() => {
this.showList = true;
this.cdRef.detectChanges();
}));
this.focus.emit(event);
}
/**
* @param {?} item
* @return {?}
*/
onSelect(item) {
this.value = item;
this.select.emit(item);
}
/**
* @param {?} value
* @return {?}
*/
onChangeInputValue(value) {
/** @type {?} */
const found = this.items.find((/**
* @param {?} item
* @return {?}
*/
item => item.text.toLocaleLowerCase() === value.toLocaleLowerCase()));
if (found) {
this.value = found;
this.inputValue = found.text;
return;
}
if (!value || value === '')
this.value = undefined;
}
/**
* @return {?}
*/
clear() {
this.value = undefined;
this.inputValue = '';
this.showList = false;
}
}
AutocompleteComponent.decorators = [
{ type: Component, args: [{
selector: 'p-autocomplete',
template: `
<div class="autocomplete-container {{ containerClasses }}">
<label *ngIf="labelText" class="{{ labelClasses }}" [attr.for]="id" [innerHTML]="labelText"></label>
<p-input
[(ngModel)]="inputValue"
(ngModelChange)="onChangeInputValue($event)"
class="w-100 {{ classes }}"
[id]="id"
[attr.type]="type"
[attr.placeholder]="placeholder"
[hidden]="hidden"
[name]="name"
[disabled]="disabled"
[attr.tabindex]="tabindex"
[required]="required"
[autofocus]="autofocus"
[autofocusDelay]="autofocusDelay"
autocomplete="nop"
(focus)="onFocus($event)"
(blur)="onBlur($event)"
(click)="click.emit($event)"
></p-input>
<fa-icon *ngIf="value" [icon]="['fas', 'times']" class="text-secondary" (click)="clear()"></fa-icon>
<div *ngIf="showList" class="list-group">
<a
[pHighlight]="inputValue"
[pHighlightHide]="true"
*ngFor="let item of items; trackBy: trackByFn"
class="list-group-item list-group-item-action"
[class.list-group-item-secondary]="value?.text === item.text"
(click)="onSelect(item)"
>
{{ item.text }}
</a>
</div>
</div>
`,
changeDetection: ChangeDetectionStrategy.OnPush,
encapsulation: ViewEncapsulation.None,
providers: [
{
provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef((/**
* @return {?}
*/
() => AutocompleteComponent)),
multi: true,
},
]
}] }
];
/** @nocollapse */
AutocompleteComponent.ctorParameters = () => [
{ type: Injector }
];
AutocompleteComponent.propDecorators = {
items: [{ type: Input }],
containerClasses: [{ type: Input }],
delay: [{ type: Input }],
select: [{ type: Output }],
placeholder: [{ type: Input }],
input: [{ type: ViewChild, args: ['input', { read: ElementRef },] }]
};
if (false) {
/** @type {?} */
AutocompleteComponent.prototype.items;
/** @type {?} */
AutocompleteComponent.prototype.containerClasses;
/** @type {?} */
AutocompleteComponent.prototype.delay;
/** @type {?} */
AutocompleteComponent.prototype.select;
/** @type {?} */
AutocompleteComponent.prototype.placeholder;
/** @type {?} */
AutocompleteComponent.prototype.input;
/** @type {?} */
AutocompleteComponent.prototype.autocomplete;
/** @type {?} */
AutocompleteComponent.prototype.showList;
/** @type {?} */
AutocompleteComponent.prototype.inputValue;
/** @type {?} */
AutocompleteComponent.prototype.valueFn;
/** @type {?} */
AutocompleteComponent.prototype.trackByFn;
/** @type {?} */
AutocompleteComponent.prototype.injector;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0b2NvbXBsZXRlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BuZ3gtcGVyZm9ybWFuY2UtdWkvdWkvIiwic291cmNlcyI6WyJsaWIvY29tcG9uZW50cy9hdXRvY29tcGxldGUvYXV0b2NvbXBsZXRlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixVQUFVLEVBQ1YsUUFBUSxFQUNSLEtBQUssRUFDTCxNQUFNLEVBRU4sU0FBUyxFQUNULGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzdCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzVELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7O0FBRXpELHNDQUdDOzs7SUFGQyxnQ0FBYTs7SUFDYixpQ0FBVzs7QUFvRGIsTUFBTSxPQUFPLHFCQUFzQixTQUFRLHNCQUF3Qzs7OztJQTRCakYsWUFBbUIsUUFBa0I7UUFDbkMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBREMsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQTNCNUIsVUFBSyxHQUF1QixFQUFFLENBQUM7UUFFL0IscUJBQWdCLEdBQVcsRUFBRSxDQUFDO1FBRTlCLFVBQUssR0FBVyxHQUFHLENBQUM7UUFFbkIsV0FBTSxHQUFHLElBQUksWUFBWSxFQUFvQixDQUFDO1FBRS9DLGdCQUFXLEdBQVcsY0FBYyxDQUFDO1FBSTlDLGlCQUFZLEdBQVcsS0FBSyxDQUFDO1FBRTdCLGFBQVEsR0FBWSxLQUFLLENBQUM7UUFFMUIsZUFBVSxHQUFXLEVBQUUsQ0FBQztRQUV4QixZQUFPOzs7O1FBQW9GLEtB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cUIsRUFBQzt3QkFDcEQsS0FBSyxFQUFFLElBQUk7cUJBQ1o7aUJBQ0Y7YUFDRjs7OztZQWpFQyxRQUFROzs7b0JBbUVQLEtBQUs7K0JBRUwsS0FBSztvQkFFTCxLQUFLO3FCQUVMLE1BQU07MEJBRU4sS0FBSztvQkFFTCxTQUFTLFNBQUMsT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTs7OztJQVZ4QyxzQ0FBd0M7O0lBRXhDLGlEQUF1Qzs7SUFFdkMsc0NBQTZCOztJQUU3Qix1Q0FBd0Q7O0lBRXhELDRDQUE4Qzs7SUFFOUMsc0NBQTREOztJQUU1RCw2Q0FBNkI7O0lBRTdCLHlDQUEwQjs7SUFFMUIsMkNBQXdCOztJQUV4Qix3Q0FLRTs7SUFFRiwwQ0FBd0U7O0lBRTVELHlDQUF5QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgZm9yd2FyZFJlZixcbiAgSW5qZWN0b3IsXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIFRyYWNrQnlGdW5jdGlvbixcbiAgVmlld0NoaWxkLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IHRpbWVyIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95IH0gZnJvbSAnQG5neC1wZXJmb3JtYW5jZS11aS9jb3JlJztcbmltcG9ydCB7IEFic3RyYWN0SW5wdXRDb21wb25lbnQgfSBmcm9tICcuLi8uLi9hYnN0cmFjdHMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEF1dG9jb21wbGV0ZUl0ZW0ge1xuICB0ZXh0OiBzdHJpbmc7XG4gIHZhbHVlOiBhbnk7XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3AtYXV0b2NvbXBsZXRlJyxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IGNsYXNzPVwiYXV0b2NvbXBsZXRlLWNvbnRhaW5lciB7eyBjb250YWluZXJDbGFzc2VzIH19XCI+XG4gICAgICA8bGFiZWwgKm5nSWY9XCJsYWJlbFRleHRcIiBjbGFzcz1cInt7IGxhYmVsQ2xhc3NlcyB9fVwiIFthdHRyLmZvcl09XCJpZFwiIFtpbm5lckhUTUxdPVwibGFiZWxUZXh0XCI+PC9sYWJlbD5cbiAgICAgIDxwLWlucHV0XG4gICAgICAgIFsobmdNb2RlbCldPVwiaW5wdXRWYWx1ZVwiXG4gICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uQ2hhbmdlSW5wdXRWYWx1ZSgkZXZlbnQpXCJcbiAgICAgICAgY2xhc3M9XCJ3LTEwMCB7eyBjbGFzc2VzIH19XCJcbiAgICAgICAgW2lkXT1cImlkXCJcbiAgICAgICAgW2F0dHIudHlwZV09XCJ0eXBlXCJcbiAgICAgICAgW2F0dHIucGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIlxuICAgICAgICBbaGlkZGVuXT1cImhpZGRlblwiXG4gICAgICAgIFtuYW1lXT1cIm5hbWVcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICBbYXR0ci50YWJpbmRleF09XCJ0YWJpbmRleFwiXG4gICAgICAgIFtyZXF1aXJlZF09XCJyZXF1aXJlZFwiXG4gICAgICAgIFthdXRvZm9jdXNdPVwiYXV0b2ZvY3VzXCJcbiAgICAgICAgW2F1dG9mb2N1c0RlbGF5XT1cImF1dG9mb2N1c0RlbGF5XCJcbiAgICAgICAgYXV0b2NvbXBsZXRlPVwibm9wXCJcbiAgICAgICAgKGZvY3VzKT1cIm9uRm9jdXMoJGV2ZW50KVwiXG4gICAgICAgIChibHVyKT1cIm9uQmx1cigkZXZlbnQpXCJcbiAgICAgICAgKGNsaWNrKT1cImNsaWNrLmVtaXQoJGV2ZW50KVwiXG4gICAgICA+PC9wLWlucHV0PlxuICAgICAgPGZhLWljb24gKm5nSWY9XCJ2YWx1ZVwiIFtpY29uXT1cIlsnZmFzJywgJ3RpbWVzJ11cIiBjbGFzcz1cInRleHQtc2Vjb25kYXJ5XCIgKGNsaWNrKT1cImNsZWFyKClcIj48L2ZhLWljb24+XG4gICAgICA8ZGl2ICpuZ0lmPVwic2hvd0xpc3RcIiBjbGFzcz1cImxpc3QtZ3JvdXBcIj5cbiAgICAgICAgPGFcbiAgICAgICAgICBbcEhpZ2hsaWdodF09XCJpbnB1dFZhbHVlXCJcbiAgICAgICAgICBbcEhpZ2hsaWdodEhpZGVdPVwidHJ1ZVwiXG4gICAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgaXRlbXM7IHRyYWNrQnk6IHRyYWNrQnlGblwiXG4gICAgICAgICAgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW0gbGlzdC1ncm91cC1pdGVtLWFjdGlvblwiXG4gICAgICAgICAgW2NsYXNzLmxpc3QtZ3JvdXAtaXRlbS1zZWNvbmRhcnldPVwidmFsdWU/LnRleHQgPT09IGl0ZW0udGV4dFwiXG4gICAgICAgICAgKGNsaWNrKT1cIm9uU2VsZWN0KGl0ZW0pXCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7IGl0ZW0udGV4dCB9fVxuICAgICAgICA8L2E+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgYCxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gQXV0b2NvbXBsZXRlQ29tcG9uZW50KSxcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgIH0sXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIEF1dG9jb21wbGV0ZUNvbXBvbmVudCBleHRlbmRzIEFic3RyYWN0SW5wdXRDb21wb25lbnQ8QXV0b2NvbXBsZXRlSXRlbT4ge1xuICBASW5wdXQoKSBpdGVtczogQXV0b2NvbXBsZXRlSXRlbVtdID0gW107XG5cbiAgQElucHV0KCkgY29udGFpbmVyQ2xhc3Nlczogc3RyaW5nID0gJyc7XG5cbiAgQElucHV0KCkgZGVsYXk6IG51bWJlciA9IDIwMDtcblxuICBAT3V0cHV0KCkgc2VsZWN0ID0gbmV3IEV2ZW50RW1pdHRlcjxBdXRvY29tcGxldGVJdGVtPigpO1xuXG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyOiBzdHJpbmcgPSAnVHlwZSBpbiBoZXJlJztcblxuICBAVmlld0NoaWxkKCdpbnB1dCcsIHsgcmVhZDogRWxlbWVudFJlZiB9KSBpbnB1dDogRWxlbWVudFJlZjtcblxuICBhdXRvY29tcGxldGU6IHN0cmluZyA9ICdub3AnO1xuXG4gIHNob3dMaXN0OiBib29sZWFuID0gZmFsc2U7XG5cbiAgaW5wdXRWYWx1ZTogc3RyaW5nID0gJyc7XG5cbiAgdmFsdWVGbjogKHZhbHVlOiBBdXRvY29tcGxldGVJdGVtLCBwcmV2aW91c1ZhbHVlPzogQXV0b2NvbXBsZXRlSXRlbSkgPT4gQXV0b2NvbXBsZXRlSXRlbSA9IHZhbHVlID0+IHtcbiAgICBpZiAoIXZhbHVlKSByZXR1cm4gdmFsdWU7XG5cbiAgICB0aGlzLmlucHV0VmFsdWUgPSB2YWx1ZS50ZXh0O1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfTtcblxuICB0cmFja0J5Rm46IFRyYWNrQnlGdW5jdGlvbjxBdXRvY29tcGxldGVJdGVtPiA9IChfLCB2YWx1ZSkgPT4gdmFsdWUudGV4dDtcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgaW5qZWN0b3I6IEluamVjdG9yKSB7XG4gICAgc3VwZXIoaW5qZWN0b3IpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7fVxuXG4gIG9uQmx1cihldmVudDogRm9jdXNFdmVudCkge1xuICAgIHRpbWVyKHRoaXMuZGVsYXkpXG4gICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95KHRoaXMpKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuc2hvd0xpc3QgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5pbnB1dFZhbHVlID0gKHRoaXMudmFsdWUgfHwgeyB0ZXh0OiAnJyB9KS50ZXh0O1xuICAgICAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH0pO1xuICAgIHRoaXMuYmx1ci5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIG9uRm9jdXMoZXZlbnQ6IEZvY3VzRXZlbnQpIHtcbiAgICB0aW1lcih0aGlzLmRlbGF5KVxuICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveSh0aGlzKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLnNob3dMaXN0ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB9KTtcbiAgICB0aGlzLmZvY3VzLmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgb25TZWxlY3QoaXRlbTogQXV0b2NvbXBsZXRlSXRlbSkge1xuICAgIHRoaXMudmFsdWUgPSBpdGVtO1xuICAgIHRoaXMuc2VsZWN0LmVtaXQoaXRlbSk7XG4gIH1cblxuICBvbkNoYW5nZUlucHV0VmFsdWUodmFsdWU6IHN0cmluZykge1xuICAgIGNvbnN0IGZvdW5kID0gdGhpcy5pdGVtcy5maW5kKGl0ZW0gPT4gaXRlbS50ZXh0LnRvTG9jYWxlTG93ZXJDYXNlKCkgPT09IHZhbHVlLnRvTG9jYWxlTG93ZXJDYXNlKCkpO1xuICAgIGlmIChmb3VuZCkge1xuICAgICAgdGhpcy52YWx1ZSA9IGZvdW5kO1xuICAgICAgdGhpcy5pbnB1dFZhbHVlID0gZm91bmQudGV4dDtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXZhbHVlIHx8IHZhbHVlID09PSAnJykgdGhpcy52YWx1ZSA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNsZWFyKCkge1xuICAgIHRoaXMudmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5pbnB1dFZhbHVlID0gJyc7XG4gICAgdGhpcy5zaG93TGlzdCA9IGZhbHNlO1xuICB9XG59XG4iXX0=