UNPKG

@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
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=