UNPKG

@ngx-performance-ui/ui

Version:
217 lines 16 kB
/** * @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=