@neocomplexx/ngx-neo-completer
Version:
This project was generated with [Angular CLI](https://github.com/angular/angular-cli) version 7.0.5.
118 lines • 13.9 kB
JavaScript
import { Subject } from 'rxjs';
import { isNil } from '../globals';
export class CompleterBaseData extends Subject {
constructor() {
super();
}
cancel() {
return;
}
searchFields(searchFields) {
this._searchFields = searchFields;
return this;
}
titleField(titleField) {
this._titleField = titleField;
return this;
}
descriptionField(descriptionField) {
this._descriptionField = descriptionField;
return this;
}
imageField(imageField) {
this._imageField = imageField;
return this;
}
convertToItem(data) {
let image = null;
let formattedText;
let 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,
originalObject: data,
title: formattedText
};
}
extractMatches(data, term) {
let matches = [];
const searchFields = this._searchFields ? this._searchFields.split(',') : null;
if (this._searchFields !== null && this._searchFields !== undefined && term !== '') {
matches = data.filter((item) => {
const values = searchFields ? this.extractBySearchFields(searchFields, item) : [item];
return values.some((value) => value
.toString()
.toLowerCase()
.indexOf(term.toString().toLowerCase()) >= 0);
});
}
else {
matches = data;
}
return matches;
}
extractTitle(item) {
// split title fields and run extractValue for each and join with ' '
if (!this._titleField) {
return '';
}
return this._titleField.split(',')
.map((field) => {
return this.extractValue(item, field);
})
.reduce((acc, titlePart) => acc ? `${acc} ${titlePart}` : titlePart);
}
extractValue(obj, key) {
let keys;
let result;
if (key) {
keys = key.split('.');
result = obj;
for (key of keys) {
if (result) {
result = result[key];
}
}
}
else {
result = obj;
}
return result;
}
processResults(matches) {
let i;
const results = [];
if (matches && matches.length > 0) {
for (i = 0; i < matches.length; i++) {
const item = this.convertToItem(matches[i]);
if (item) {
results.push(item);
}
}
}
return results;
}
extractBySearchFields(searchFields, item) {
return searchFields
.map((searchField) => this.extractValue(item, searchField)).filter((value) => !!value);
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcGxldGVyLWJhc2UtZGF0YS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BuZW9jb21wbGV4eC9uZ3gtbmVvLWNvbXBsZXRlci8iLCJzb3VyY2VzIjpbImxpYi9zZXJ2aWNlcy9jb21wbGV0ZXItYmFzZS1kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFJL0IsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLFlBQVksQ0FBQztBQUVuQyxNQUFNLE9BQWdCLGlCQUFrQixTQUFRLE9BQStCO0lBUTNFO1FBQ0ksS0FBSyxFQUFFLENBQUM7SUFDWixDQUFDO0lBSU0sTUFBTTtRQUNULE9BQU87SUFDWCxDQUFDO0lBRU0sWUFBWSxDQUFDLFlBQTJCO1FBQzNDLElBQUksQ0FBQyxhQUFhLEdBQUcsWUFBWSxDQUFDO1FBQ2xDLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFTSxVQUFVLENBQUMsVUFBeUI7UUFDdkMsSUFBSSxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUM7UUFDOUIsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVNLGdCQUFnQixDQUFDLGdCQUF3QjtRQUM1QyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsZ0JBQWdCLENBQUM7UUFDMUMsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVNLFVBQVUsQ0FBQyxVQUFrQjtRQUNoQyxJQUFJLENBQUMsV0FBVyxHQUFHLFVBQVUsQ0FBQztRQUM5QixPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRU0sYUFBYSxDQUFDLElBQVM7UUFDMUIsSUFBSSxLQUFLLEdBQWtCLElBQUksQ0FBQztRQUNoQyxJQUFJLGFBQXFCLENBQUM7UUFDMUIsSUFBSSxhQUFhLEdBQWtCLElBQUksQ0FBQztRQUV4QyxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDbEIsYUFBYSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENB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QUFJLElBQUksRUFBRTtnQkFDZCxJQUFJLE1BQU0sRUFBRTtvQkFDUixNQUFNLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2lCQUN4QjthQUNKO1NBQ0o7YUFBTTtZQUNILE1BQU0sR0FBRyxHQUFHLENBQUM7U0FDaEI7UUFDRCxPQUFPLE1BQU0sQ0FBQztJQUNsQixDQUFDO0lBRVMsY0FBYyxDQUFDLE9BQWlCO1FBQ3RDLElBQUksQ0FBUyxDQUFDO1FBQ2QsTUFBTSxPQUFPLEdBQW9CLEVBQUUsQ0FBQztRQUVwQyxJQUFJLE9BQU8sSUFBSSxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUMvQixLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ2pDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzVDLElBQUksSUFBSSxFQUFFO29CQUNOLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7aUJBQ3RCO2FBQ0o7U0FDSjtRQUNELE9BQU8sT0FBTyxDQUFDO0lBQ25CLENBQUM7SUFFTyxxQkFBcUIsQ0FBQyxZQUFzQixFQUFFLElBQVM7UUFDM0QsT0FBTyxZQUFZO2FBQ2QsR0FBRyxDQUFDLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQy9GLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgQ29tcGxldGVySXRlbSB9IGZyb20gJy4uL2NvbXBvbmVudHMvY29tcGxldGVyLWl0ZW0nO1xuaW1wb3J0IHsgQ29tcGxldGVyRGF0YSB9IGZyb20gJy4vY29tcGxldGVyLWRhdGEnO1xuaW1wb3J0IHsgaXNOaWwgfSBmcm9tICcuLi9nbG9iYWxzJztcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIENvbXBsZXRlckJhc2VEYXRhIGV4dGVuZHMgU3ViamVjdDxDb21wbGV0ZXJJdGVtW10gfCBudWxsPiBpbXBsZW1lbnRzIENvbXBsZXRlckRhdGEge1xuXG5cbiAgICBwcm90ZWN0ZWQgX3NlYXJjaEZpZWxkczogc3RyaW5nIHwgbnVsbDtcbiAgICBwcm90ZWN0ZWQgX3RpdGxlRmllbGQ6IHN0cmluZyB8IG51bGw7XG4gICAgcHJvdGVjdGVkIF9kZXNjcmlwdGlvbkZpZWxkOiBzdHJpbmc7XG4gICAgcHJvdGVjdGVkIF9pbWFnZUZpZWxkOiBzdHJpbmc7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWJzdHJhY3Qgc2VhcmNoKHRlcm06IHN0cmluZyk6IHZvaWQ7XG5cbiAgICBwdWJsaWMgY2FuY2VsKCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcHVibGljIHNlYXJjaEZpZWxkcyhzZWFyY2hGaWVsZHM6IHN0cmluZyB8IG51bGwpIHtcbiAgICAgICAgdGhpcy5fc2VhcmNoRmllbGRzID0gc2VhcmNoRmllbGRzO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgdGl0bGVGaWVsZCh0aXRsZUZpZWxkOiBzdHJpbmcgfCBudWxsKSB7XG4gICAgICAgIHRoaXMuX3RpdGxlRmllbGQgPSB0aXRsZUZpZWxkO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgZGVzY3JpcHRpb25GaWVsZChkZXNjcmlwdGlvbkZpZWxkOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fZGVzY3JpcHRpb25GaWVsZCA9IGRlc2NyaXB0aW9uRmllbGQ7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBpbWFnZUZpZWxkKGltYWdlRmllbGQ6IHN0cmluZykge1xuICAgICAgICB0aGlzLl9pbWFnZUZpZWxkID0gaW1hZ2VGaWVsZDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIGNvbnZlcnRUb0l0ZW0oZGF0YTogYW55KSB7XG4gICAgICAgIGxldCBpbWFnZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gICAgICAgIGxldCBmb3JtYXR0ZWRUZXh0OiBzdHJpbmc7XG4gICAgICAgIGxldCBmb3JtYXR0ZWREZXNjOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICAgICAgICBpZiAodGhpcy5fdGl0bGVGaWVsZCkge1xuICAgICAgICAgICAgZm9ybWF0dGVkVGV4dCA9IHRoaXMuZXh0cmFjdFRpdGxlKGRhdGEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm9ybWF0dGVkVGV4dCA9IGRhdGE7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIGZvcm1hdHRlZFRleHQgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBmb3JtYXR0ZWRUZXh0ID0gSlNPTi5zdHJpbmdpZnkoZm9ybWF0dGVkVGV4dCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fZGVzY3JpcHRpb25GaWVsZCkge1xuICAgICAgICAgICAgZm9ybWF0dGVkRGVzYyA9IHRoaXMuZXh0cmFjdFZhbHVlKGRhdGEsIHRoaXMuX2Rlc2NyaXB0aW9uRmllbGQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX2ltYWdlRmllbGQpIHtcbiAgICAgICAgICAgIGltYWdlID0gdGhpcy5leHRyYWN0VmFsdWUoZGF0YSwgdGhpcy5faW1hZ2VGaWVsZCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNOaWwoZm9ybWF0dGVkVGV4dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBmb3JtYXR0ZWREZXNjLFxuICAgICAgICAgICAgaW1hZ2UsXG4gICAgICAgICAgICBvcmlnaW5hbE9iamVjdDogZGF0YSxcbiAgICAgICAgICAgIHRpdGxlOiBmb3JtYXR0ZWRUZXh0XG4gICAgICAgIH0gYXMgQ29tcGxldGVySXRlbTtcblxuICAgIH1cblxuICAgIHByb3RlY3RlZCBleHRyYWN0TWF0Y2hlcyhkYXRhOiBhbnlbXSwgdGVybTogc3RyaW5nKSB7XG4gICAgICAgIGxldCBtYXRjaGVzOiBhbnlbXSA9IFtdO1xuICAgICAgICBjb25zdCBzZWFyY2hGaWVsZHMgPSB0aGlzLl9zZWFyY2hGaWVsZHMgPyB0aGlzLl9zZWFyY2hGaWVsZHMuc3BsaXQoJywnKSA6IG51bGw7XG4gICAgICAgIGlmICh0aGlzLl9zZWFyY2hGaWVsZHMgIT09IG51bGwgJiYgdGhpcy5fc2VhcmNoRmllbGRzICE9PSB1bmRlZmluZWQgJiYgdGVybSAhPT0gJycpIHtcbiAgICAgICAgICAgIG1hdGNoZXMgPSBkYXRhLmZpbHRlcigoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlczogYW55W10gPSBzZWFyY2hGaWVsZHMgPyB0aGlzLmV4dHJhY3RCeVNlYXJjaEZpZWxkcyhzZWFyY2hGaWVsZHMsIGl0ZW0pIDogW2l0ZW1dO1xuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZXMuc29tZSgodmFsdWUpID0+IHZhbHVlXG4gICAgICAgICAgICAgICAgICAgIC50b1N0cmluZygpXG4gICAgICAgICAgICAgICAgICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICAgICAgICAgIC5pbmRleE9mKHRlcm0udG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpKSA+PSAwXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbWF0Y2hlcyA9IGRhdGE7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbWF0Y2hlcztcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZXh0cmFjdFRpdGxlKGl0ZW06IGFueSkge1xuICAgICAgICAvLyBzcGxpdCB0aXRsZSBmaWVsZHMgYW5kIHJ1biBleHRyYWN0VmFsdWUgZm9yIGVhY2ggYW5kIGpvaW4gd2l0aCAnICdcbiAgICAgICAgaWYgKCF0aGlzLl90aXRsZUZpZWxkKSB7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5fdGl0bGVGaWVsZC5zcGxpdCgnLCcpXG4gICAgICAgICAgICAubWFwKChmaWVsZCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmV4dHJhY3RWYWx1ZShpdGVtLCBmaWVsZCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnJlZHVjZSgoYWNjLCB0aXRsZVBhcnQpID0+IGFjYyA/IGAke2FjY30gJHt0aXRsZVBhcnR9YCA6IHRpdGxlUGFydCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGV4dHJhY3RWYWx1ZShvYmo6IGFueSwga2V5OiBzdHJpbmcgfCBudWxsKSB7XG4gICAgICAgIGxldCBrZXlzOiBzdHJpbmdbXTtcbiAgICAgICAgbGV0IHJlc3VsdDogYW55O1xuICAgICAgICBpZiAoa2V5KSB7XG4gICAgICAgICAgICBrZXlzID0ga2V5LnNwbGl0KCcuJyk7XG4gICAgICAgICAgICByZXN1bHQgPSBvYmo7XG4gICAgICAgICAgICBmb3IgKGtleSBvZiBrZXlzKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHRba2V5XTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXN1bHQgPSBvYmo7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgcHJvY2Vzc1Jlc3VsdHMobWF0Y2hlczogc3RyaW5nW10pOiBDb21wbGV0ZXJJdGVtW10ge1xuICAgICAgICBsZXQgaTogbnVtYmVyO1xuICAgICAgICBjb25zdCByZXN1bHRzOiBDb21wbGV0ZXJJdGVtW10gPSBbXTtcblxuICAgICAgICBpZiAobWF0Y2hlcyAmJiBtYXRjaGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBtYXRjaGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMuY29udmVydFRvSXRlbShtYXRjaGVzW2ldKTtcbiAgICAgICAgICAgICAgICBpZiAoaXRlbSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRzLnB1c2goaXRlbSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgIH1cblxuICAgIHByaXZhdGUgZXh0cmFjdEJ5U2VhcmNoRmllbGRzKHNlYXJjaEZpZWxkczogc3RyaW5nW10sIGl0ZW06IGFueSkge1xuICAgICAgICByZXR1cm4gc2VhcmNoRmllbGRzXG4gICAgICAgICAgICAubWFwKChzZWFyY2hGaWVsZCkgPT4gdGhpcy5leHRyYWN0VmFsdWUoaXRlbSwgc2VhcmNoRmllbGQpKS5maWx0ZXIoKHZhbHVlKSA9PiAhIXZhbHVlKTtcbiAgICB9XG59XG4iXX0=