ng4x-auto-complete
Version:
Remote autocomple for andular 4, 5, 6. Setup the url and field names of database which value will show in list, Multiple fiels can be set by comma separator. The data format of return value of remote url should be JSON. After start typing i
163 lines (155 loc) • 17.2 kB
JavaScript
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/core'), require('@angular/common/http'), require('@angular/common')) :
typeof define === 'function' && define.amd ? define('ng4x-auto-complete', ['exports', '@angular/core', '@angular/common/http', '@angular/common'], factory) :
(factory((global['ng4x-auto-complete'] = {}),global.ng.core,global.ng.common.http,global.ng.common));
}(this, (function (exports,core,http,common) { 'use strict';
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
var Ng4xAutoCompleteComponent = (function () {
function Ng4xAutoCompleteComponent(http$$1, renderer) {
this.http = http$$1;
this.renderer = renderer;
this.all_list_child = [];
this.selected_row = "";
this._loading = "hidden";
}
/**
* @param {?} setting_obj
* @return {?}
*/
Ng4xAutoCompleteComponent.prototype.setting = /**
* @param {?} setting_obj
* @return {?}
*/
function (setting_obj) {
this.data_url = setting_obj.data_url;
this.db_fields = setting_obj.db_fields;
//console.log(this.data_url)
};
/**
* @return {?}
*/
Ng4xAutoCompleteComponent.prototype.clickout = /**
* @return {?}
*/
function () {
this._clearList();
};
/**
* @param {?} event
* @return {?}
*/
Ng4xAutoCompleteComponent.prototype.getData = /**
* @param {?} event
* @return {?}
*/
function (event) {
var _this = this;
var /** @type {?} */ input_val = event.target.value;
if (input_val.length == 0) {
this._clearList();
return;
}
var /** @type {?} */ final_url = this.data_url + '?q=' + input_val;
this._loading = "visible";
this.http.get(final_url).subscribe(function (todo) {
_this._clearList();
for (var /** @type {?} */ k in todo) {
var /** @type {?} */ new_div = _this.renderer.createElement('div');
var /** @type {?} */ field_array = _this.db_fields.split(",");
var /** @type {?} */ display_text = "";
for (var /** @type {?} */ i = 0; i < field_array.length; i++) {
display_text += todo[k][field_array[i]] + " ";
}
display_text = display_text.trim();
_this.renderer.appendChild(new_div, _this.renderer.createText(display_text));
_this.all_list_child.push(new_div);
_this.renderer.listen(new_div, 'click', function (event) {
_this.text_fld.nativeElement.value = event.target.innerHTML;
var /** @type {?} */ tindex = Array.from(event.target.parentNode.children).indexOf(event.target);
_this.selected_row = todo[tindex];
});
_this.renderer.appendChild(_this.list.nativeElement, new_div);
var /** @type {?} */ theight = _this.text_fld.nativeElement.offsetHeight;
_this.renderer.setStyle(_this.list.nativeElement, "top", theight + "px");
_this.renderer.setStyle(_this.list.nativeElement, "display", "block");
_this.renderer.addClass(new_div, "ngxautocomp_list_el");
}
_this._loading = "hidden";
});
};
/**
* @return {?}
*/
Ng4xAutoCompleteComponent.prototype._clearList = /**
* @return {?}
*/
function () {
for (var /** @type {?} */ i = 0; i < this.all_list_child.length; i++)
this.renderer.removeChild(this.list.nativeElement, this.all_list_child[i]);
this.all_list_child = [];
this.renderer.setStyle(this.list.nativeElement, "display", "none");
};
/**
* @return {?}
*/
Ng4xAutoCompleteComponent.prototype.getSelectedRow = /**
* @return {?}
*/
function () {
return this.selected_row;
};
Ng4xAutoCompleteComponent.decorators = [
{ type: core.Component, args: [{
selector: 'ng4x-auto-complete',
template: "<div class=\"ngxautocomplete\">\n <input type=\"text\" value=\"\" name=\"ngx-autocomplete_field\" (keyup)=\"getData($event)\" #_ng_autocomp_txt>\n <div #_ng_autocom_list class=\"ngx-auto-list\"></div>\n <i class=\"fa fa-cog fa-spin\" [style.visibility]=\"_loading\" ></i>\n</div>\n",
styles: [":focus{outline:0}.ngxautocomplete{position:relative;width:100%;border:1px solid #ccc}.ngxautocomplete input{border:0;width:90%}.ngx-auto-list{display:none;position:absolute;width:100%;min-height:300px;overflow-y:scroll;border-left:1px solid #ccc;border-right:1px solid #ccc;border-bottom:1px solid #ccc;top:0;z-index:9;background:#fff}.ngxautocomp_list_el{text-align:left;cursor:pointer;padding:5px}.ngxautocomp_list_el:hover{background-color:#ccc}"]
},] },
];
/** @nocollapse */
Ng4xAutoCompleteComponent.ctorParameters = function () {
return [
{ type: http.HttpClient },
{ type: core.Renderer2 }
];
};
Ng4xAutoCompleteComponent.propDecorators = {
list: [{ type: core.ViewChild, args: ['_ng_autocom_list',] }],
text_fld: [{ type: core.ViewChild, args: ['_ng_autocomp_txt',] }],
clickout: [{ type: core.HostListener, args: ['document:click',] }]
};
return Ng4xAutoCompleteComponent;
}());
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
var Ng4xAutoCompleteModule = (function () {
function Ng4xAutoCompleteModule() {
}
Ng4xAutoCompleteModule.decorators = [
{ type: core.NgModule, args: [{
imports: [
common.CommonModule
],
declarations: [Ng4xAutoCompleteComponent],
exports: [Ng4xAutoCompleteComponent]
},] },
];
return Ng4xAutoCompleteModule;
}());
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
exports.Ng4xAutoCompleteModule = Ng4xAutoCompleteModule;
exports.ɵa = Ng4xAutoCompleteComponent;
Object.defineProperty(exports, '__esModule', { value: true });
})));
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmc0eC1hdXRvLWNvbXBsZXRlLnVtZC5qcy5tYXAiLCJzb3VyY2VzIjpbIm5nOi8vbmc0eC1hdXRvLWNvbXBsZXRlL3NyYy9hcHAvbW9kdWxlcy9uZzR4LWF1dG8tY29tcGxldGUvbmc0eC1hdXRvLWNvbXBsZXRlL25nNHgtYXV0by1jb21wbGV0ZS5jb21wb25lbnQudHMiLCJuZzovL25nNHgtYXV0by1jb21wbGV0ZS9zcmMvYXBwL21vZHVsZXMvbmc0eC1hdXRvLWNvbXBsZXRlL25nNHgtYXV0by1jb21wbGV0ZS5tb2R1bGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBSZW5kZXJlcjIsIEVsZW1lbnRSZWYsIFZpZXdDaGlsZCwgSG9zdExpc3RlbmVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0h0dHBDbGllbnR9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbmc0eC1hdXRvLWNvbXBsZXRlJyxcbiAgdGVtcGxhdGU6IGA8ZGl2IGNsYXNzPVwibmd4YXV0b2NvbXBsZXRlXCI+XG4gIDxpbnB1dCB0eXBlPVwidGV4dFwiIHZhbHVlPVwiXCIgbmFtZT1cIm5neC1hdXRvY29tcGxldGVfZmllbGRcIiAoa2V5dXApPVwiZ2V0RGF0YSgkZXZlbnQpXCIgI19uZ19hdXRvY29tcF90eHQ+XG4gIDxkaXYgI19uZ19hdXRvY29tX2xpc3QgY2xhc3M9XCJuZ3gtYXV0by1saXN0XCI+PC9kaXY+XG4gIDxpIGNsYXNzPVwiZmEgZmEtY29nIGZhLXNwaW5cIiBbc3R5bGUudmlzaWJpbGl0eV09XCJfbG9hZGluZ1wiID48L2k+XG48L2Rpdj5cbmAsXG4gIHN0eWxlczogW2A6Zm9jdXN7b3V0bGluZTowfS5uZ3hhdXRvY29tcGxldGV7cG9zaXRpb246cmVsYXRpdmU7d2lkdGg6MTAwJTtib3JkZXI6MXB4IHNvbGlkICNjY2N9Lm5neGF1dG9jb21wbGV0ZSBpbnB1dHtib3JkZXI6MDt3aWR0aDo5MCV9Lm5neC1hdXRvLWxpc3R7ZGlzcGxheTpub25lO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjEwMCU7bWluLWhlaWdodDozMDBweDtvdmVyZmxvdy15OnNjcm9sbDtib3JkZXItbGVmdDoxcHggc29saWQgI2NjYztib3JkZXItcmlnaHQ6MXB4IHNvbGlkICNjY2M7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2NjYzt0b3A6MDt6LWluZGV4Ojk7YmFja2dyb3VuZDojZmZmfS5uZ3hhdXRvY29tcF9saXN0X2Vse3RleHQtYWxpZ246bGVmdDtjdXJzb3I6cG9pbnRlcjtwYWRkaW5nOjVweH0ubmd4YXV0b2NvbXBfbGlzdF9lbDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNjY2N9YF1cbn0pXG5leHBvcnQgY2xhc3MgTmc0eEF1dG9Db21wbGV0ZUNvbXBvbmVudCB7XG4gIFxuICBkYXRhX3VybDphbnk7XG4gIGRiX2ZpZWxkczphbnk7XG4gIGFsbF9saXN0X2NoaWxkPVtdO1xuICBzZWxlY3RlZF9yb3c6c3RyaW5nPVwiXCJcbiAgX2xvYWRpbmc6c3RyaW5nPVwiaGlkZGVuXCI7XG4gIEBWaWV3Q2hpbGQoJ19uZ19hdXRvY29tX2xpc3QnKSBsaXN0OkVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ19uZ19hdXRvY29tcF90eHQnKSB0ZXh0X2ZsZDpFbGVtZW50UmVmO1xuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgaHR0cDpIdHRwQ2xpZW50LHByb3RlY3RlZCByZW5kZXJlcjpSZW5kZXJlcjIpIHsgfVxuICBzZXR0aW5nKHNldHRpbmdfb2JqKXtcbiAgICB0aGlzLmRhdGFfdXJsPXNldHRpbmdfb2JqLmRhdGFfdXJsO1xuICAgIHRoaXMuZGJfZmllbGRzPSBzZXR0aW5nX29iai5kYl9maWVsZHM7XG4gICAgLy9jb25zb2xlLmxvZyh0aGlzLmRhdGFfdXJsKVxuICB9XG4gIFxuXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmNsaWNrJylcbiAgY2xpY2tvdXQoKSB7XG4gICAgXG4gICAgIHRoaXMuX2NsZWFyTGlzdCgpXG4gIH1cbiAgZ2V0RGF0YShldmVudCl7XG4gICAgICAgIGxldCBpbnB1dF92YWw9IGV2ZW50LnRhcmdldC52YWx1ZVxuICAgICAgICAgICAgICBcbiAgICAgICAgaWYoaW5wdXRfdmFsLmxlbmd0aD09MCl7XG4gICAgICAgICAgdGhpcy5fY2xlYXJMaXN0KCk7XG4gICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIGxldCBmaW5hbF91cmw9dGhpcy5kYXRhX3VybCsnP3E9JytpbnB1dF92YWxcbiAgICAgICAgdGhpcy5fbG9hZGluZz1cInZpc2libGVcIlxuICAgICAgICB0aGlzLmh0dHAuZ2V0KGZpbmFsX3VybCkuc3Vic2NyaWJlKHRvZG89PntcbiAgICAgICAgICAgICAgdGhpcy5fY2xlYXJMaXN0KClcbiAgICAgICAgICAgICAgZm9yKGxldCBrIGluIHRvZG8pe1xuICAgICAgICAgICAgICAgIGxldCBuZXdfZGl2PXRoaXMucmVuZGVyZXIuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICAgICAgbGV0IGZpZWxkX2FycmF5PXRoaXMuZGJfZmllbGRzLnNwbGl0KFwiLFwiKVxuICAgICAgICAgICAgICAgIGxldCBkaXNwbGF5X3RleHQ9XCJcIlxuICAgICAgICAgICAgICAgIGZvcih2YXIgaT0wO2k8ZmllbGRfYXJyYXkubGVuZ3RoO2krKyl7XG4gICAgICAgICAgICAgICAgICBkaXNwbGF5X3RleHQrPXRvZG9ba11bZmllbGRfYXJyYXlbaV1dK1wiIFwiO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkaXNwbGF5X3RleHQ9ZGlzcGxheV90ZXh0LnRyaW0oKTtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmFwcGVuZENoaWxkKG5ld19kaXYsdGhpcy5yZW5kZXJlci5jcmVhdGVUZXh0KGRpc3BsYXlfdGV4dCkpO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIHRoaXMuYWxsX2xpc3RfY2hpbGQucHVzaChuZXdfZGl2KVxuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIubGlzdGVuKG5ld19kaXYsJ2NsaWNrJywoZXZlbnQpPT57XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGV4dF9mbGQubmF0aXZlRWxlbWVudC52YWx1ZT1ldmVudC50YXJnZXQuaW5uZXJIVE1MXG4gICAgICAgICAgICAgICAgICBsZXQgdGluZGV4PUFycmF5LmZyb20oZXZlbnQudGFyZ2V0LnBhcmVudE5vZGUuY2hpbGRyZW4pLmluZGV4T2YoZXZlbnQudGFyZ2V0KVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkX3Jvdz10b2RvW3RpbmRleF1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQodGhpcy5saXN0Lm5hdGl2ZUVsZW1lbnQsbmV3X2RpdilcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICB2YXIgdGhlaWdodD10aGlzLnRleHRfZmxkLm5hdGl2ZUVsZW1lbnQub2Zmc2V0SGVpZ2h0XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmxpc3QubmF0aXZlRWxlbWVudCxcInRvcFwiLHRoZWlnaHQrXCJweFwiKVxuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5saXN0Lm5hdGl2ZUVsZW1lbnQsXCJkaXNwbGF5XCIsXCJibG9ja1wiKVxuICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhuZXdfZGl2LFwibmd4YXV0b2NvbXBfbGlzdF9lbFwiKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHRoaXMuX2xvYWRpbmc9XCJoaWRkZW5cIlxuICAgICAgICB9KVxuXG4gIH0gXG5cbiAgcHJpdmF0ZSBfY2xlYXJMaXN0KCl7XG4gICAgZm9yKGxldCBpPTA7aTx0aGlzLmFsbF9saXN0X2NoaWxkLmxlbmd0aDtpKyspXG4gICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2hpbGQodGhpcy5saXN0Lm5hdGl2ZUVsZW1lbnQsdGhpcy5hbGxfbGlzdF9jaGlsZFtpXSlcbiAgICB0aGlzLmFsbF9saXN0X2NoaWxkPVtdOyAgICAgXG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmxpc3QubmF0aXZlRWxlbWVudCxcImRpc3BsYXlcIixcIm5vbmVcIilcbiAgfVxuXG4gIGdldFNlbGVjdGVkUm93KCk6c3RyaW5ne1xuICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZF9yb3c7XG4gIH1cblxuIFxuXG59XG4iLCJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IE5nNHhBdXRvQ29tcGxldGVDb21wb25lbnQgfSBmcm9tICcuL25nNHgtYXV0by1jb21wbGV0ZS9uZzR4LWF1dG8tY29tcGxldGUuY29tcG9uZW50JztcblxuQE5nTW9kdWxlKHtcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZVxuICBdLFxuICBkZWNsYXJhdGlvbnM6IFtOZzR4QXV0b0NvbXBsZXRlQ29tcG9uZW50XSxcbiAgZXhwb3J0czpbTmc0eEF1dG9Db21wbGV0ZUNvbXBvbmVudF1cbn0pXG5leHBvcnQgY2xhc3MgTmc0eEF1dG9Db21wbGV0ZU1vZHVsZSB7IH1cbiJdLCJuYW1lcyI6WyJodHRwIiwiQ29tcG9uZW50IiwiSHR0cENsaWVudCIsIlJlbmRlcmVyMiIsIlZpZXdDaGlsZCIsIkhvc3RMaXN0ZW5lciIsIk5nTW9kdWxlIiwiQ29tbW9uTW9kdWxlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQUE7UUFzQkUsbUNBQXNCQSxPQUFlLEVBQVcsUUFBa0I7WUFBNUMs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