UNPKG

@inaccess-fang/ui-components

Version:

The Inaccess UI Components Library for the Front-end projects

104 lines 17.5 kB
import { ChangeDetectorRef, ComponentFactoryResolver, Directive, ElementRef, Input, ViewContainerRef } from '@angular/core'; import { NgModel } from "@angular/forms"; // Rxjs import { fromEvent, combineLatest, ReplaySubject } from 'rxjs'; import { filter } from 'rxjs/operators'; // Components import { FangAutocompleteDropdownComponent } from "../fang-autocomplete-dropdown.component"; // Popper.js import Popper from 'popper.js'; export class FangAutocompleteInputDirective { constructor(element, factoryResolver, viewContainerRef, _changeDetectorRef, ngModel) { this.element = element; this.factoryResolver = factoryResolver; this.viewContainerRef = viewContainerRef; this._changeDetectorRef = _changeDetectorRef; this.ngModel = ngModel; this.dropdownElements$ = new ReplaySubject(1); this.popperConfig = { placement: 'bottom', positionFixed: true, modifiers: { preventOverflow: { enabled: true, boundariesElement: 'window' }, setWidth: { enabled: true, order: 840, fn(data) { data.offsets.popper.left = data.offsets.reference.left; data.offsets.popper.right = data.offsets.reference.right; data.offsets.popper.width = data.styles.width = Math.round(data.offsets.reference.width); return data; } } } }; } set dropdownElements(dropdownElements) { this.dropdownElements$.next(dropdownElements || []); } ; ngOnInit() { fromEvent(document, "click", { passive: true }).pipe(filter(() => !!this.componentRef && this.componentRef.location.nativeElement.style.display !== 'none')) .subscribe((e) => { if (!this.element.nativeElement.contains(e.target)) { this.componentRef.location.nativeElement.style.display = 'none'; } }); this._changeDetectorRef.detectChanges(); } ngAfterContentInit() { if (this.ngModel) { this.input = this.ngModel.control; this.autocompleteSubscription = combineLatest(this.dropdownElements$.asObservable(), fromEvent(this.element.nativeElement, "focus", { passive: true }), fromEvent(this.element.nativeElement, "keyup", { passive: true })) .subscribe(([arr, input, input2]) => { console.log(arr, input, input2); if (!this.componentRef) { const factory = this.factoryResolver.resolveComponentFactory(FangAutocompleteDropdownComponent); this.componentRef = this.viewContainerRef.createComponent(factory); this.componentRef.location.nativeElement.style.display = 'none'; this.dropdownPopper = new Popper(this.element.nativeElement, this.componentRef.location.nativeElement, this.popperConfig); this.inputChangesSubscription = this.componentRef.instance.onSelect.subscribe(v => { this.input.setValue(v); }); } const inputValue = input.target.value; const lowerCaseInput = inputValue && inputValue.toLocaleLowerCase(); const array = arr.slice().filter(e => e.toLowerCase().startsWith(lowerCaseInput)); const lowerCaseArray = arr.slice().map(a => a.toLowerCase()).filter(e => e.startsWith(lowerCaseInput)); if (inputValue && inputValue.length > 0 && (lowerCaseArray.length > 1 || !lowerCaseArray.includes(lowerCaseInput))) { this.componentRef.location.nativeElement.style.display = 'block'; this.componentRef.instance.dropdownElements = array; this.componentRef.changeDetectorRef.detectChanges(); this.dropdownPopper.scheduleUpdate(); } else { this.componentRef.location.nativeElement.style.display = 'none'; } }); } this._changeDetectorRef.detectChanges(); } ngOnDestroy() { this.dropdownPopper && this.dropdownPopper.destroy(); this.autocompleteSubscription && this.autocompleteSubscription.unsubscribe(); this.inputChangesSubscription && this.inputChangesSubscription.unsubscribe(); } } FangAutocompleteInputDirective.decorators = [ { type: Directive, args: [{ selector: '[autoComplete][ngModel]' },] } ]; FangAutocompleteInputDirective.ctorParameters = () => [ { type: ElementRef }, { type: ComponentFactoryResolver }, { type: ViewContainerRef }, { type: ChangeDetectorRef }, { type: NgModel } ]; FangAutocompleteInputDirective.propDecorators = { dropdownElements: [{ type: Input, args: ['autoComplete',] }] }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFuZy1hdXRvY29tcGxldGUtaW5wdXQuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6Ii9ob21lL2lhc29uYXMvRGVza3RvcC9jdXJyZW50L2ZhbmctdWktY29tcG9uZW50cy1saWJyYXJ5L3Byb2plY3RzL2ZhbmctdWktY29tcG9uZW50cy9zcmMvIiwic291cmNlcyI6WyJsaWIvY29tcG9uZW50cy9hdXRvY29tcGxldGUtd2l0aC1pbnB1dC9kaXJlY3RpdmVzL2ZhbmctYXV0b2NvbXBsZXRlLWlucHV0LmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRU4saUJBQWlCLEVBRWpCLHdCQUF3QixFQUV4QixTQUFTLEVBQ1QsVUFBVSxFQUNWLEtBQUssRUFHTCxnQkFBZ0IsRUFDaEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRXZDLE9BQU87QUFDUCxPQUFPLEVBQUMsU0FBUyxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQWUsTUFBTSxNQUFNLENBQUM7QUFDM0UsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRXRDLGFBQWE7QUFDYixPQUFPLEVBQUMsaUNBQWlDLEVBQUMsTUFBTSx5Q0FBeUMsQ0FBQztBQUUxRixZQUFZO0FBQ1osT0FBTyxNQUFNLE1BQU0sV0FBVyxDQUFDO0FBRy9CLE1BQU0sT0FBTyw4QkFBOEI7SUFvQzFDLFlBQW9CLE9BQW1CLEVBQzVCLGVBQXlDLEVBQ3pDLGdCQUFrQyxFQUNsQyxrQkFBcUMsRUFDckMsT0FBZ0I7UUFKUCxZQUFPLEdBQVAsT0FBTyxDQUFZO1FBQzVCLG9CQUFlLEdBQWYsZUFBZSxDQUEwQjtRQUN6QyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBbUI7UUFDckMsWUFBTyxHQUFQLE9BQU8sQ0FBUztRQWhDbkIsc0JBQWlCLEdBQUcsSUFBSSxh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OlsiaW1wb3J0IHtcblx0QWZ0ZXJDb250ZW50SW5pdCxcblx0Q2hhbmdlRGV0ZWN0b3JSZWYsXG5cdENvbXBvbmVudEZhY3RvcnksXG5cdENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcblx0Q29tcG9uZW50UmVmLFxuXHREaXJlY3RpdmUsXG5cdEVsZW1lbnRSZWYsXG5cdElucHV0LFxuXHRPbkRlc3Ryb3ksXG5cdE9uSW5pdCxcblx0Vmlld0NvbnRhaW5lclJlZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7TmdNb2RlbH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XG5cbi8vIFJ4anNcbmltcG9ydCB7ZnJvbUV2ZW50LCBjb21iaW5lTGF0ZXN0LCBSZXBsYXlTdWJqZWN0LCBTdWJzY3JpcHRpb259IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtmaWx0ZXJ9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuLy8gQ29tcG9uZW50c1xuaW1wb3J0IHtGYW5nQXV0b2NvbXBsZXRlRHJvcGRvd25Db21wb25lbnR9IGZyb20gXCIuLi9mYW5nLWF1dG9jb21wbGV0ZS1kcm9wZG93bi5jb21wb25lbnRcIjtcblxuLy8gUG9wcGVyLmpzXG5pbXBvcnQgUG9wcGVyIGZyb20gJ3BvcHBlci5qcyc7XG5cbkBEaXJlY3RpdmUoe3NlbGVjdG9yOiAnW2F1dG9Db21wbGV0ZV1bbmdNb2RlbF0nfSlcbmV4cG9ydCBjbGFzcyBGYW5nQXV0b2NvbXBsZXRlSW5wdXREaXJlY3RpdmUgaW1wbGVtZW50cyBBZnRlckNvbnRlbnRJbml0LCBPbkluaXQsIE9uRGVzdHJveSB7XG5cblx0QElucHV0KCdhdXRvQ29tcGxldGUnKVxuXHRzZXQgZHJvcGRvd25FbGVtZW50cyhkcm9wZG93bkVsZW1lbnRzOiBzdHJpbmdbXSkge1xuXHRcdHRoaXMuZHJvcGRvd25FbGVtZW50cyQubmV4dChkcm9wZG93bkVsZW1lbnRzIHx8IFtdKTtcblx0fTtcblxuXHRwcml2YXRlIGlucHV0OiBhbnk7XG5cdHByaXZhdGUgZHJvcGRvd25FbGVtZW50cyQgPSBuZXcgUmVwbGF5U3ViamVjdDxzdHJpbmdbXT4oMSk7XG5cdHByaXZhdGUgZHJvcGRvd25Qb3BwZXI6IGFueTtcblx0cHJpdmF0ZSBhdXRvY29tcGxldGVTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblx0cHJpdmF0ZSBpbnB1dENoYW5nZXNTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblx0cHJpdmF0ZSBjb21wb25lbnRSZWY6IENvbXBvbmVudFJlZjxhbnk+O1xuXG5cdHByaXZhdGUgcG9wcGVyQ29uZmlnID0ge1xuXHRcdHBsYWNlbWVudDogJ2JvdHRvbScsXG5cdFx0cG9zaXRpb25GaXhlZDogdHJ1ZSxcblx0XHRtb2RpZmllcnM6IHtcblx0XHRcdHByZXZlbnRPdmVyZmxvdzoge1xuXHRcdFx0XHRlbmFibGVkOiB0cnVlLFxuXHRcdFx0XHRib3VuZGFyaWVzRWxlbWVudDogJ3dpbmRvdydcblx0XHRcdH0sXG5cdFx0XHRzZXRXaWR0aDoge1xuXHRcdFx0XHRlbmFibGVkOiB0cnVlLFxuXHRcdFx0XHRvcmRlcjogODQwLFxuXHRcdFx0XHRmbihkYXRhKSB7XG5cdFx0XHRcdFx0ZGF0YS5vZmZzZXRzLnBvcHBlci5sZWZ0ID0gZGF0YS5vZmZzZXRzLnJlZmVyZW5jZS5sZWZ0O1xuXHRcdFx0XHRcdGRhdGEub2Zmc2V0cy5wb3BwZXIucmlnaHQgPSBkYXRhLm9mZnNldHMucmVmZXJlbmNlLnJpZ2h0O1xuXHRcdFx0XHRcdGRhdGEub2Zmc2V0cy5wb3BwZXIud2lkdGggPSBkYXRhLnN0eWxlcy53aWR0aCA9IE1hdGgucm91bmQoZGF0YS5vZmZzZXRzLnJlZmVyZW5jZS53aWR0aCk7XG5cdFx0XHRcdFx0cmV0dXJuIGRhdGE7XG5cdFx0XHRcdH1cblxuXHRcdFx0fVxuXHRcdH1cblx0fTtcblxuXHRjb25zdHJ1Y3Rvcihwcml2YXRlIGVsZW1lbnQ6IEVsZW1lbnRSZWYsXG5cdFx0XHRcdHByaXZhdGUgZmFjdG9yeVJlc29sdmVyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG5cdFx0XHRcdHByaXZhdGUgdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZixcblx0XHRcdFx0cHJpdmF0ZSBfY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuXHRcdFx0XHRwcml2YXRlIG5nTW9kZWw6IE5nTW9kZWwsXG5cdCkge1xuXHR9XG5cblx0bmdPbkluaXQoKSB7XG5cdFx0ZnJvbUV2ZW50KGRvY3VtZW50LCBcImNsaWNrXCIsIHtwYXNzaXZlOiB0cnVlfSkucGlwZShcblx0XHRcdGZpbHRlcigoKSA9PiAhIXRoaXMuY29tcG9uZW50UmVmICYmIHRoaXMuY29tcG9uZW50UmVmLmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQuc3R5bGUuZGlzcGxheSAhPT0gJ25vbmUnKVxuXHRcdClcblx0XHRcdC5zdWJzY3JpYmUoKGU6IE1vdXNlRXZlbnQpID0+IHtcblx0XHRcdFx0aWYgKCF0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC5jb250YWlucyhlLnRhcmdldCkpIHtcblx0XHRcdFx0XHR0aGlzLmNvbXBvbmVudFJlZi5sb2NhdGlvbi5uYXRpdmVFbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSdcblx0XHRcdFx0fVxuXHRcdFx0fSlcblxuXHRcdHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcblx0fVxuXG5cdG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcblx0XHRpZiAodGhpcy5uZ01vZGVsKSB7XG5cdFx0XHR0aGlzLmlucHV0ID0gdGhpcy5uZ01vZGVsLmNvbnRyb2xcblxuXHRcdFx0dGhpcy5hdXRvY29tcGxldGVTdWJzY3JpcHRpb24gPVxuXHRcdFx0XHRjb21iaW5lTGF0ZXN0KHRoaXMuZHJvcGRvd25FbGVtZW50cyQuYXNPYnNlcnZhYmxlKCksIGZyb21FdmVudCh0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCwgXCJmb2N1c1wiLCB7cGFzc2l2ZTogdHJ1ZX0pLCBmcm9tRXZlbnQodGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsIFwia2V5dXBcIiwge3Bhc3NpdmU6IHRydWV9KSlcblx0XHRcdFx0XHQuc3Vic2NyaWJlKChbYXJyLCBpbnB1dCwgaW5wdXQyXTogW3N0cmluZ1tdLCBhbnksIGFueV0pID0+IHtcblxuXHRcdFx0XHRcdFx0Y29uc29sZS5sb2coYXJyLGlucHV0LGlucHV0Milcblx0XHRcdFx0XHRcdGlmICghdGhpcy5jb21wb25lbnRSZWYpIHtcblx0XHRcdFx0XHRcdFx0Y29uc3QgZmFjdG9yeTogQ29tcG9uZW50RmFjdG9yeTxGYW5nQXV0b2NvbXBsZXRlRHJvcGRvd25Db21wb25lbnQ+ID0gdGhpcy5mYWN0b3J5UmVzb2x2ZXIucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoRmFuZ0F1dG9jb21wbGV0ZURyb3Bkb3duQ29tcG9uZW50KTtcblx0XHRcdFx0XHRcdFx0dGhpcy5jb21wb25lbnRSZWYgPSB0aGlzLnZpZXdDb250YWluZXJSZWYuY3JlYXRlQ29tcG9uZW50KGZhY3RvcnkpO1xuXHRcdFx0XHRcdFx0XHR0aGlzLmNvbXBvbmVudFJlZi5sb2NhdGlvbi5uYXRpdmVFbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG5cdFx0XHRcdFx0XHRcdHRoaXMuZHJvcGRvd25Qb3BwZXIgPSBuZXcgUG9wcGVyKHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LCB0aGlzLmNvbXBvbmVudFJlZi5sb2NhdGlvbi5uYXRpdmVFbGVtZW50LCB0aGlzLnBvcHBlckNvbmZpZyBhcyBQb3BwZXIuUG9wcGVyT3B0aW9ucyk7XG5cdFx0XHRcdFx0XHRcdHRoaXMuaW5wdXRDaGFuZ2VzU3Vic2NyaXB0aW9uID0gdGhpcy5jb21wb25lbnRSZWYuaW5zdGFuY2Uub25TZWxlY3Quc3Vic2NyaWJlKHYgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdHRoaXMuaW5wdXQuc2V0VmFsdWUodik7XG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRjb25zdCBpbnB1dFZhbHVlID0gaW5wdXQudGFyZ2V0LnZhbHVlO1xuXHRcdFx0XHRcdFx0Y29uc3QgbG93ZXJDYXNlSW5wdXQgPSBpbnB1dFZhbHVlICYmIGlucHV0VmFsdWUudG9Mb2NhbGVMb3dlckNhc2UoKTtcblx0XHRcdFx0XHRcdGNvbnN0IGFycmF5ID0gYXJyLnNsaWNlKCkuZmlsdGVyKGUgPT4gZS50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgobG93ZXJDYXNlSW5wdXQpKTtcblx0XHRcdFx0XHRcdGNvbnN0IGxvd2VyQ2FzZUFycmF5ID0gYXJyLnNsaWNlKCkubWFwKGEgPT4gYS50b0xvd2VyQ2FzZSgpKS5maWx0ZXIoZSA9PiBlLnN0YXJ0c1dpdGgobG93ZXJDYXNlSW5wdXQpKTtcblxuXHRcdFx0XHRcdFx0aWYgKGlucHV0VmFsdWUgJiYgaW5wdXRWYWx1ZS5sZW5ndGggPiAwICYmIChsb3dlckNhc2VBcnJheS5sZW5ndGggPiAxIHx8ICFsb3dlckNhc2VBcnJheS5pbmNsdWRlcyhsb3dlckNhc2VJbnB1dCkpKSB7XG5cdFx0XHRcdFx0XHRcdHRoaXMuY29tcG9uZW50UmVmLmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XG5cdFx0XHRcdFx0XHRcdHRoaXMuY29tcG9uZW50UmVmLmluc3RhbmNlLmRyb3Bkb3duRWxlbWVudHMgPSBhcnJheTtcblx0XHRcdFx0XHRcdFx0dGhpcy5jb21wb25lbnRSZWYuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuXHRcdFx0XHRcdFx0XHR0aGlzLmRyb3Bkb3duUG9wcGVyLnNjaGVkdWxlVXBkYXRlKCk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHR0aGlzLmNvbXBvbmVudFJlZi5sb2NhdGlvbi5uYXRpdmVFbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSlcblx0XHR9XG5cdFx0dGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuXHR9XG5cblx0bmdPbkRlc3Ryb3koKSB7XG5cdFx0dGhpcy5kcm9wZG93blBvcHBlciAmJiB0aGlzLmRyb3Bkb3duUG9wcGVyLmRlc3Ryb3koKTtcblx0XHR0aGlzLmF1dG9jb21wbGV0ZVN1YnNjcmlwdGlvbiAmJiB0aGlzLmF1dG9jb21wbGV0ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuXHRcdHRoaXMuaW5wdXRDaGFuZ2VzU3Vic2NyaXB0aW9uICYmIHRoaXMuaW5wdXRDaGFuZ2VzU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG5cdH1cbn1cblxuIl19