@neocomplexx/ngx-neo-completer
Version:
This project was generated with [Angular CLI](https://github.com/angular/angular-cli) version 7.0.5.
136 lines • 15.5 kB
JavaScript
import { __extends, __values } from "tslib";
import { Subject } from 'rxjs';
import { isNil } from '../globals';
var CompleterBaseData = /** @class */ (function (_super) {
__extends(CompleterBaseData, _super);
function CompleterBaseData() {
return _super.call(this) || this;
}
CompleterBaseData.prototype.cancel = function () {
return;
};
CompleterBaseData.prototype.searchFields = function (searchFields) {
this._searchFields = searchFields;
return this;
};
CompleterBaseData.prototype.titleField = function (titleField) {
this._titleField = titleField;
return this;
};
CompleterBaseData.prototype.descriptionField = function (descriptionField) {
this._descriptionField = descriptionField;
return this;
};
CompleterBaseData.prototype.imageField = function (imageField) {
this._imageField = imageField;
return this;
};
CompleterBaseData.prototype.convertToItem = function (data) {
var image = null;
var formattedText;
var formattedDesc = null;
if (this._titleField) {
formattedText = this.extractTitle(data);
}
else {
formattedText = data;
}
if (typeof formattedText !== 'string') {
formattedText = JSON.stringify(formattedText);
}
if (this._descriptionField) {
formattedDesc = this.extractValue(data, this._descriptionField);
}
if (this._imageField) {
image = this.extractValue(data, this._imageField);
}
if (isNil(formattedText)) {
return null;
}
return {
description: formattedDesc,
image: image,
originalObject: data,
title: formattedText
};
};
CompleterBaseData.prototype.extractMatches = function (data, term) {
var _this = this;
var matches = [];
var searchFields = this._searchFields ? this._searchFields.split(',') : null;
if (this._searchFields !== null && this._searchFields !== undefined && term !== '') {
matches = data.filter(function (item) {
var values = searchFields ? _this.extractBySearchFields(searchFields, item) : [item];
return values.some(function (value) { return value
.toString()
.toLowerCase()
.indexOf(term.toString().toLowerCase()) >= 0; });
});
}
else {
matches = data;
}
return matches;
};
CompleterBaseData.prototype.extractTitle = function (item) {
var _this = this;
// split title fields and run extractValue for each and join with ' '
if (!this._titleField) {
return '';
}
return this._titleField.split(',')
.map(function (field) {
return _this.extractValue(item, field);
})
.reduce(function (acc, titlePart) { return acc ? acc + " " + titlePart : titlePart; });
};
CompleterBaseData.prototype.extractValue = function (obj, key) {
var e_1, _a;
var keys;
var result;
if (key) {
keys = key.split('.');
result = obj;
try {
for (var keys_1 = __values(keys), keys_1_1 = keys_1.next(); !keys_1_1.done; keys_1_1 = keys_1.next()) {
key = keys_1_1.value;
if (result) {
result = result[key];
}
}
}
catch (e_1_1) { e_1 = { error: e_1_1 }; }
finally {
try {
if (keys_1_1 && !keys_1_1.done && (_a = keys_1.return)) _a.call(keys_1);
}
finally { if (e_1) throw e_1.error; }
}
}
else {
result = obj;
}
return result;
};
CompleterBaseData.prototype.processResults = function (matches) {
var i;
var results = [];
if (matches && matches.length > 0) {
for (i = 0; i < matches.length; i++) {
var item = this.convertToItem(matches[i]);
if (item) {
results.push(item);
}
}
}
return results;
};
CompleterBaseData.prototype.extractBySearchFields = function (searchFields, item) {
var _this = this;
return searchFields
.map(function (searchField) { return _this.extractValue(item, searchField); }).filter(function (value) { return !!value; });
};
return CompleterBaseData;
}(Subject));
export { CompleterBaseData };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcGxldGVyLWJhc2UtZGF0YS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BuZW9jb21wbGV4eC9uZ3gtbmVvLWNvbXBsZXRlci8iLCJzb3VyY2VzIjpbImxpYi9zZXJ2aWNlcy9jb21wbGV0ZXItYmFzZS1kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBSS9CLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFbkM7SUFBZ0QscUNBQStCO0lBUTNFO2VBQ0ksaUJBQU87SUFDWCxDQUFDO0lBSU0sa0NBQU0sR0FBYjtRQUNJLE9BQU87SUFDWCxDQUFDO0lBRU0sd0NBQVksR0FBbkIsVUFBb0IsWUFBMkI7UUFDM0MsSUFBSSxDQUFDLGFBQWEsR0FBRyxZQUFZLENBQUM7UUFDbEMsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVNLHNDQUFVLEdBQWpCLFVBQWtCLFVBQXlCO1FBQ3ZDLElBQUksQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDO1FBQzlCLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFTSw0Q0FBZ0IsR0FBdkIsVUFBd0IsZ0JBQXdCO1FBQzVDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxnQkFBZ0IsQ0FBQztRQUMxQyxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRU0sc0NBQVUsR0FBakIsVUFBa0IsVUFBa0I7UUFDaEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUM7UUFDOUIsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVNLHlDQUFhLEdBQXBCLFVBQXFCLElBQVM7UUFDMUIsSUFBSSxLQUFLLEdBQWtCLElBQUksQ0FBQztRQUNoQyxJQUFJLGFBQXFCLENBQUM7UUFDMUIsSUFBSSxhQUFhLEdBQWtCLElBQUksQ0FBQztRQUV4QyxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDbEIsYUFBYSxHQUFHLElBQUksQ0FBQyxZ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d0JBQUM7QUFBRCxDQUFDLEFBOUlELENBQWdELE9BQU8sR0E4SXREIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBDb21wbGV0ZXJJdGVtIH0gZnJvbSAnLi4vY29tcG9uZW50cy9jb21wbGV0ZXItaXRlbSc7XG5pbXBvcnQgeyBDb21wbGV0ZXJEYXRhIH0gZnJvbSAnLi9jb21wbGV0ZXItZGF0YSc7XG5pbXBvcnQgeyBpc05pbCB9IGZyb20gJy4uL2dsb2JhbHMnO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQ29tcGxldGVyQmFzZURhdGEgZXh0ZW5kcyBTdWJqZWN0PENvbXBsZXRlckl0ZW1bXSB8IG51bGw+IGltcGxlbWVudHMgQ29tcGxldGVyRGF0YSB7XG5cblxuICAgIHByb3RlY3RlZCBfc2VhcmNoRmllbGRzOiBzdHJpbmcgfCBudWxsO1xuICAgIHByb3RlY3RlZCBfdGl0bGVGaWVsZDogc3RyaW5nIHwgbnVsbDtcbiAgICBwcm90ZWN0ZWQgX2Rlc2NyaXB0aW9uRmllbGQ6IHN0cmluZztcbiAgICBwcm90ZWN0ZWQgX2ltYWdlRmllbGQ6IHN0cmluZztcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhYnN0cmFjdCBzZWFyY2godGVybTogc3RyaW5nKTogdm9pZDtcblxuICAgIHB1YmxpYyBjYW5jZWwoKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2VhcmNoRmllbGRzKHNlYXJjaEZpZWxkczogc3RyaW5nIHwgbnVsbCkge1xuICAgICAgICB0aGlzLl9zZWFyY2hGaWVsZHMgPSBzZWFyY2hGaWVsZHM7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB0aXRsZUZpZWxkKHRpdGxlRmllbGQ6IHN0cmluZyB8IG51bGwpIHtcbiAgICAgICAgdGhpcy5fdGl0bGVGaWVsZCA9IHRpdGxlRmllbGQ7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBkZXNjcmlwdGlvbkZpZWxkKGRlc2NyaXB0aW9uRmllbGQ6IHN0cmluZykge1xuICAgICAgICB0aGlzLl9kZXNjcmlwdGlvbkZpZWxkID0gZGVzY3JpcHRpb25GaWVsZDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIGltYWdlRmllbGQoaW1hZ2VGaWVsZDogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuX2ltYWdlRmllbGQgPSBpbWFnZUZpZWxkO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgY29udmVydFRvSXRlbShkYXRhOiBhbnkpIHtcbiAgICAgICAgbGV0IGltYWdlOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgICAgICAgbGV0IGZvcm1hdHRlZFRleHQ6IHN0cmluZztcbiAgICAgICAgbGV0IGZvcm1hdHRlZERlc2M6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gICAgICAgIGlmICh0aGlzLl90aXRsZUZpZWxkKSB7XG4gICAgICAgICAgICBmb3JtYXR0ZWRUZXh0ID0gdGhpcy5leHRyYWN0VGl0bGUoZGF0YSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmb3JtYXR0ZWRUZXh0ID0gZGF0YTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgZm9ybWF0dGVkVGV4dCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGZvcm1hdHRlZFRleHQgPSBKU09OLnN0cmluZ2lmeShmb3JtYXR0ZWRUZXh0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9kZXNjcmlwdGlvbkZpZWxkKSB7XG4gICAgICAgICAgICBmb3JtYXR0ZWREZXNjID0gdGhpcy5leHRyYWN0VmFsdWUoZGF0YSwgdGhpcy5fZGVzY3JpcHRpb25GaWVsZCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5faW1hZ2VGaWVsZCkge1xuICAgICAgICAgICAgaW1hZ2UgPSB0aGlzLmV4dHJhY3RWYWx1ZShkYXRhLCB0aGlzLl9pbWFnZUZpZWxkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc05pbChmb3JtYXR0ZWRUZXh0KSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZGVzY3JpcHRpb246IGZvcm1hdHRlZERlc2MsXG4gICAgICAgICAgICBpbWFnZSxcbiAgICAgICAgICAgIG9yaWdpbmFsT2JqZWN0OiBkYXRhLFxuICAgICAgICAgICAgdGl0bGU6IGZvcm1hdHRlZFRleHRcbiAgICAgICAgfSBhcyBDb21wbGV0ZXJJdGVtO1xuXG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGV4dHJhY3RNYXRjaGVzKGRhdGE6IGFueVtdLCB0ZXJtOiBzdHJpbmcpIHtcbiAgICAgICAgbGV0IG1hdGNoZXM6IGFueVtdID0gW107XG4gICAgICAgIGNvbnN0IHNlYXJjaEZpZWxkcyA9IHRoaXMuX3NlYXJjaEZpZWxkcyA/IHRoaXMuX3NlYXJjaEZpZWxkcy5zcGxpdCgnLCcpIDogbnVsbDtcbiAgICAgICAgaWYgKHRoaXMuX3NlYXJjaEZpZWxkcyAhPT0gbnVsbCAmJiB0aGlzLl9zZWFyY2hGaWVsZHMgIT09IHVuZGVmaW5lZCAmJiB0ZXJtICE9PSAnJykge1xuICAgICAgICAgICAgbWF0Y2hlcyA9IGRhdGEuZmlsdGVyKChpdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWVzOiBhbnlbXSA9IHNlYXJjaEZpZWxkcyA/IHRoaXMuZXh0cmFjdEJ5U2VhcmNoRmllbGRzKHNlYXJjaEZpZWxkcywgaXRlbSkgOiBbaXRlbV07XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlcy5zb21lKCh2YWx1ZSkgPT4gdmFsdWVcbiAgICAgICAgICAgICAgICAgICAgLnRvU3RyaW5nKClcbiAgICAgICAgICAgICAgICAgICAgLnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAgICAgICAgICAgLmluZGV4T2YodGVybS50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkpID49IDBcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBtYXRjaGVzID0gZGF0YTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBtYXRjaGVzO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBleHRyYWN0VGl0bGUoaXRlbTogYW55KSB7XG4gICAgICAgIC8vIHNwbGl0IHRpdGxlIGZpZWxkcyBhbmQgcnVuIGV4dHJhY3RWYWx1ZSBmb3IgZWFjaCBhbmQgam9pbiB3aXRoICcgJ1xuICAgICAgICBpZiAoIXRoaXMuX3RpdGxlRmllbGQpIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLl90aXRsZUZpZWxkLnNwbGl0KCcsJylcbiAgICAgICAgICAgIC5tYXAoKGZpZWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXh0cmFjdFZhbHVlKGl0ZW0sIGZpZWxkKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAucmVkdWNlKChhY2MsIHRpdGxlUGFydCkgPT4gYWNjID8gYCR7YWNjfSAke3RpdGxlUGFydH1gIDogdGl0bGVQYXJ0KTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZXh0cmFjdFZhbHVlKG9iajogYW55LCBrZXk6IHN0cmluZyB8IG51bGwpIHtcbiAgICAgICAgbGV0IGtleXM6IHN0cmluZ1tdO1xuICAgICAgICBsZXQgcmVzdWx0OiBhbnk7XG4gICAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgICAgIGtleXMgPSBrZXkuc3BsaXQoJy4nKTtcbiAgICAgICAgICAgIHJlc3VsdCA9IG9iajtcbiAgICAgICAgICAgIGZvciAoa2V5IG9mIGtleXMpIHtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdFtrZXldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IG9iajtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBwcm9jZXNzUmVzdWx0cyhtYXRjaGVzOiBzdHJpbmdbXSk6IENvbXBsZXRlckl0ZW1bXSB7XG4gICAgICAgIGxldCBpOiBudW1iZXI7XG4gICAgICAgIGNvbnN0IHJlc3VsdHM6IENvbXBsZXRlckl0ZW1bXSA9IFtdO1xuXG4gICAgICAgIGlmIChtYXRjaGVzICYmIG1hdGNoZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IG1hdGNoZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5jb252ZXJ0VG9JdGVtKG1hdGNoZXNbaV0pO1xuICAgICAgICAgICAgICAgIGlmIChpdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaChpdGVtKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBleHRyYWN0QnlTZWFyY2hGaWVsZHMoc2VhcmNoRmllbGRzOiBzdHJpbmdbXSwgaXRlbTogYW55KSB7XG4gICAgICAgIHJldHVybiBzZWFyY2hGaWVsZHNcbiAgICAgICAgICAgIC5tYXAoKHNlYXJjaEZpZWxkKSA9PiB0aGlzLmV4dHJhY3RWYWx1ZShpdGVtLCBzZWFyY2hGaWVsZCkpLmZpbHRlcigodmFsdWUpID0+ICEhdmFsdWUpO1xuICAgIH1cbn1cbiJdfQ==