@neocomplexx/ngx-neo-completer-mat
Version:
118 lines • 14.5 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcGxldGVyLWJhc2UtZGF0YS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BuZW9jb21wbGV4eC9uZ3gtbmVvLWNvbXBsZXRlci1tYXQvIiwic291cmNlcyI6WyJsaWIvc2VydmljZXMvY29tcGxldGVyLWJhc2UtZGF0YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBSS9CLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFbkMsTUFBTSxPQUFnQixpQkFBa0IsU0FBUSxPQUErQjtJQVEzRTtRQUNJLEtBQUssRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUlNLE1BQU07UUFDVCxPQUFPO0lBQ1gsQ0FBQztJQUVNLFlBQVksQ0FBQyxZQUEyQjtRQUMzQyxJQUFJLENBQUMsYUFBYSxHQUFHLFlBQVksQ0FBQztRQUNsQyxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRU0sVUFBVSxDQUFDLFVBQXlCO1FBQ3ZDLElBQUksQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDO1FBQzlCLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFTSxnQkFBZ0IsQ0FBQyxnQkFBd0I7UUFDNUMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLGdCQUFnQixDQUFDO1FBQzFDLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFTSxVQUFVLENBQUMsVUFBa0I7UUFDaEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUM7UUFDOUIsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVNLGFBQWEsQ0FBQyxJQUFTO1FBQzFCLElBQUksS0FBSyxHQUFrQixJQUFJLENBQUM7UUFDaEMsSUFBSSxhQUFxQixDQUFDO1FBQzFCLElBQUksYUFBYSxHQUFrQixJQUFJLENBQUM7UUFFeEMsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ2xCLGFBQWEsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FB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QUcsSUFBSSxJQUFJLEVBQUU7Z0JBQ2QsSUFBSSxNQUFNLEVBQUU7b0JBQ1IsTUFBTSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztpQkFDeEI7YUFDSjtTQUNKO2FBQU07WUFDSCxNQUFNLEdBQUcsR0FBRyxDQUFDO1NBQ2hCO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDbEIsQ0FBQztJQUVTLGNBQWMsQ0FBQyxPQUFpQjtRQUN0QyxJQUFJLENBQVMsQ0FBQztRQUNkLE1BQU0sT0FBTyxHQUFvQixFQUFFLENBQUM7UUFFcEMsSUFBSSxPQUFPLElBQUksT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDL0IsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUNqQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUM1QyxJQUFJLElBQUksRUFBRTtvQkFDTixPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2lCQUN0QjthQUNKO1NBQ0o7UUFDRCxPQUFPLE9BQU8sQ0FBQztJQUNuQixDQUFDO0lBRU8scUJBQXFCLENBQUMsWUFBc0IsRUFBRSxJQUFTO1FBQzNELE9BQU8sWUFBWTthQUNkLEdBQUcsQ0FBQyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMvRixDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcblxyXG5pbXBvcnQgeyBDb21wbGV0ZXJJdGVtIH0gZnJvbSAnLi4vY29tcG9uZW50cy9jb21wbGV0ZXItaXRlbSc7XHJcbmltcG9ydCB7IENvbXBsZXRlckRhdGEgfSBmcm9tICcuL2NvbXBsZXRlci1kYXRhJztcclxuaW1wb3J0IHsgaXNOaWwgfSBmcm9tICcuLi9nbG9iYWxzJztcclxuXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBDb21wbGV0ZXJCYXNlRGF0YSBleHRlbmRzIFN1YmplY3Q8Q29tcGxldGVySXRlbVtdIHwgbnVsbD4gaW1wbGVtZW50cyBDb21wbGV0ZXJEYXRhIHtcclxuXHJcblxyXG4gICAgcHJvdGVjdGVkIF9zZWFyY2hGaWVsZHM6IHN0cmluZyB8IG51bGw7XHJcbiAgICBwcm90ZWN0ZWQgX3RpdGxlRmllbGQ6IHN0cmluZyB8IG51bGw7XHJcbiAgICBwcm90ZWN0ZWQgX2Rlc2NyaXB0aW9uRmllbGQ6IHN0cmluZztcclxuICAgIHByb3RlY3RlZCBfaW1hZ2VGaWVsZDogc3RyaW5nO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFic3RyYWN0IHNlYXJjaCh0ZXJtOiBzdHJpbmcpOiB2b2lkO1xyXG5cclxuICAgIHB1YmxpYyBjYW5jZWwoKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZWFyY2hGaWVsZHMoc2VhcmNoRmllbGRzOiBzdHJpbmcgfCBudWxsKSB7XHJcbiAgICAgICAgdGhpcy5fc2VhcmNoRmllbGRzID0gc2VhcmNoRmllbGRzO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB0aXRsZUZpZWxkKHRpdGxlRmllbGQ6IHN0cmluZyB8IG51bGwpIHtcclxuICAgICAgICB0aGlzLl90aXRsZUZpZWxkID0gdGl0bGVGaWVsZDtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZGVzY3JpcHRpb25GaWVsZChkZXNjcmlwdGlvbkZpZWxkOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLl9kZXNjcmlwdGlvbkZpZWxkID0gZGVzY3JpcHRpb25GaWVsZDtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaW1hZ2VGaWVsZChpbWFnZUZpZWxkOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLl9pbWFnZUZpZWxkID0gaW1hZ2VGaWVsZDtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY29udmVydFRvSXRlbShkYXRhOiBhbnkpIHtcclxuICAgICAgICBsZXQgaW1hZ2U6IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG4gICAgICAgIGxldCBmb3JtYXR0ZWRUZXh0OiBzdHJpbmc7XHJcbiAgICAgICAgbGV0IGZvcm1hdHRlZERlc2M6IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5fdGl0bGVGaWVsZCkge1xyXG4gICAgICAgICAgICBmb3JtYXR0ZWRUZXh0ID0gdGhpcy5leHRyYWN0VGl0bGUoZGF0YSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZm9ybWF0dGVkVGV4dCA9IGRhdGE7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodHlwZW9mIGZvcm1hdHRlZFRleHQgIT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIGZvcm1hdHRlZFRleHQgPSBKU09OLnN0cmluZ2lmeShmb3JtYXR0ZWRUZXh0KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl9kZXNjcmlwdGlvbkZpZWxkKSB7XHJcbiAgICAgICAgICAgIGZvcm1hdHRlZERlc2MgPSB0aGlzLmV4dHJhY3RWYWx1ZShkYXRhLCB0aGlzLl9kZXNjcmlwdGlvbkZpZWxkKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl9pbWFnZUZpZWxkKSB7XHJcbiAgICAgICAgICAgIGltYWdlID0gdGhpcy5leHRyYWN0VmFsdWUoZGF0YSwgdGhpcy5faW1hZ2VGaWVsZCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoaXNOaWwoZm9ybWF0dGVkVGV4dCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogZm9ybWF0dGVkRGVzYyxcclxuICAgICAgICAgICAgaW1hZ2UsXHJcbiAgICAgICAgICAgIG9yaWdpbmFsT2JqZWN0OiBkYXRhLFxyXG4gICAgICAgICAgICB0aXRsZTogZm9ybWF0dGVkVGV4dFxyXG4gICAgICAgIH0gYXMgQ29tcGxldGVySXRlbTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGV4dHJhY3RNYXRjaGVzKGRhdGE6IGFueVtdLCB0ZXJtOiBzdHJpbmcpIHtcclxuICAgICAgICBsZXQgbWF0Y2hlczogYW55W10gPSBbXTtcclxuICAgICAgICBjb25zdCBzZWFyY2hGaWVsZHMgPSB0aGlzLl9zZWFyY2hGaWVsZHMgPyB0aGlzLl9zZWFyY2hGaWVsZHMuc3BsaXQoJywnKSA6IG51bGw7XHJcbiAgICAgICAgaWYgKHRoaXMuX3NlYXJjaEZpZWxkcyAhPT0gbnVsbCAmJiB0aGlzLl9zZWFyY2hGaWVsZHMgIT09IHVuZGVmaW5lZCAmJiB0ZXJtICE9PSAnJykge1xyXG4gICAgICAgICAgICBtYXRjaGVzID0gZGF0YS5maWx0ZXIoKGl0ZW0pID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlczogYW55W10gPSBzZWFyY2hGaWVsZHMgPyB0aGlzLmV4dHJhY3RCeVNlYXJjaEZpZWxkcyhzZWFyY2hGaWVsZHMsIGl0ZW0pIDogW2l0ZW1dO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlcy5zb21lKCh2YWx1ZSkgPT4gdmFsdWVcclxuICAgICAgICAgICAgICAgICAgICAudG9TdHJpbmcoKVxyXG4gICAgICAgICAgICAgICAgICAgIC50b0xvd2VyQ2FzZSgpXHJcbiAgICAgICAgICAgICAgICAgICAgLmluZGV4T2YodGVybS50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkpID49IDBcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIG1hdGNoZXMgPSBkYXRhO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG1hdGNoZXM7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGV4dHJhY3RUaXRsZShpdGVtOiBhbnkpIHtcclxuICAgICAgICAvLyBzcGxpdCB0aXRsZSBmaWVsZHMgYW5kIHJ1biBleHRyYWN0VmFsdWUgZm9yIGVhY2ggYW5kIGpvaW4gd2l0aCAnICdcclxuICAgICAgICBpZiAoIXRoaXMuX3RpdGxlRmllbGQpIHtcclxuICAgICAgICAgICAgcmV0dXJuICcnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RpdGxlRmllbGQuc3BsaXQoJywnKVxyXG4gICAgICAgICAgICAubWFwKChmaWVsZCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXh0cmFjdFZhbHVlKGl0ZW0sIGZpZWxkKTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLnJlZHVjZSgoYWNjLCB0aXRsZVBhcnQpID0+IGFjYyA/IGAke2FjY30gJHt0aXRsZVBhcnR9YCA6IHRpdGxlUGFydCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGV4dHJhY3RWYWx1ZShvYmo6IGFueSwga2V5OiBzdHJpbmcgfCBudWxsKSB7XHJcbiAgICAgICAgbGV0IGtleXM6IHN0cmluZ1tdO1xyXG4gICAgICAgIGxldCByZXN1bHQ6IGFueTtcclxuICAgICAgICBpZiAoa2V5KSB7XHJcbiAgICAgICAgICAgIGtleXMgPSBrZXkuc3BsaXQoJy4nKTtcclxuICAgICAgICAgICAgcmVzdWx0ID0gb2JqO1xyXG4gICAgICAgICAgICBmb3IgKGtleSBvZiBrZXlzKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0W2tleV07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXN1bHQgPSBvYmo7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIHByb2Nlc3NSZXN1bHRzKG1hdGNoZXM6IHN0cmluZ1tdKTogQ29tcGxldGVySXRlbVtdIHtcclxuICAgICAgICBsZXQgaTogbnVtYmVyO1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdHM6IENvbXBsZXRlckl0ZW1bXSA9IFtdO1xyXG5cclxuICAgICAgICBpZiAobWF0Y2hlcyAmJiBtYXRjaGVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IG1hdGNoZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLmNvbnZlcnRUb0l0ZW0obWF0Y2hlc1tpXSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXRlbSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaChpdGVtKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0cztcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGV4dHJhY3RCeVNlYXJjaEZpZWxkcyhzZWFyY2hGaWVsZHM6IHN0cmluZ1tdLCBpdGVtOiBhbnkpIHtcclxuICAgICAgICByZXR1cm4gc2VhcmNoRmllbGRzXHJcbiAgICAgICAgICAgIC5tYXAoKHNlYXJjaEZpZWxkKSA9PiB0aGlzLmV4dHJhY3RWYWx1ZShpdGVtLCBzZWFyY2hGaWVsZCkpLmZpbHRlcigodmFsdWUpID0+ICEhdmFsdWUpO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==