@inaccess-fang/ui-components
Version:
The Inaccess UI Components Library for the Front-end projects
104 lines • 17.5 kB
JavaScript
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