UNPKG

@neocomplexx/ngx-neo-completer-mat

Version:
136 lines 16 kB
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcGxldGVyLWJhc2UtZGF0YS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BuZW9jb21wbGV4eC9uZ3gtbmVvLWNvbXBsZXRlci1tYXQvIiwic291cmNlcyI6WyJsaWIvc2VydmljZXMvY29tcGxldGVyLWJhc2UtZGF0YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUkvQixPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRW5DO0lBQWdELHFDQUErQjtJQVEzRTtlQUNJLGlCQUFPO0lBQ1gsQ0FBQztJQUlNLGtDQUFNLEdBQWI7UUFDSSxPQUFPO0lBQ1gsQ0FBQztJQUVNLHdDQUFZLEdBQW5CLFVBQW9CLFlBQTJCO1FBQzNDLElBQUksQ0FBQyxhQUFhLEdBQUcsWUFBWSxDQUFDO1FBQ2xDLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFTSxzQ0FBVSxHQUFqQixVQUFrQixVQUF5QjtRQUN2QyxJQUFJLENBQUMsV0FBVyxHQUFHLFVBQVUsQ0FBQztRQUM5QixPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRU0sNENBQWdCLEdBQXZCLFVBQXdCLGdCQUF3QjtRQUM1QyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsZ0JBQWdCLENBQUM7UUFDMUMsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVNLHNDQUFVLEdBQWpCLFVBQWtCLFVBQWtCO1FBQ2hDLElBQUksQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDO1FBQzlCLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFTSx5Q0FBYSxHQUFwQixVQUFxQixJQUFTO1FBQzFCLElBQUksS0FBSyxHQUFrQixJQUFJLENBQUM7UUFDaEMsSUFBSSxhQUFxQixDQUFDO1FBQzFCLElBQUksYUFBYSxHQUFrQixJQUFJLENBQUM7UUFFeEMsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ2xCLGFBQWEsR0FBRyxJQUFJLENB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QUNMLHdCQUFDO0FBQUQsQ0FBQyxBQTlJRCxDQUFnRCxPQUFPLEdBOEl0RCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuXHJcbmltcG9ydCB7IENvbXBsZXRlckl0ZW0gfSBmcm9tICcuLi9jb21wb25lbnRzL2NvbXBsZXRlci1pdGVtJztcclxuaW1wb3J0IHsgQ29tcGxldGVyRGF0YSB9IGZyb20gJy4vY29tcGxldGVyLWRhdGEnO1xyXG5pbXBvcnQgeyBpc05pbCB9IGZyb20gJy4uL2dsb2JhbHMnO1xyXG5cclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIENvbXBsZXRlckJhc2VEYXRhIGV4dGVuZHMgU3ViamVjdDxDb21wbGV0ZXJJdGVtW10gfCBudWxsPiBpbXBsZW1lbnRzIENvbXBsZXRlckRhdGEge1xyXG5cclxuXHJcbiAgICBwcm90ZWN0ZWQgX3NlYXJjaEZpZWxkczogc3RyaW5nIHwgbnVsbDtcclxuICAgIHByb3RlY3RlZCBfdGl0bGVGaWVsZDogc3RyaW5nIHwgbnVsbDtcclxuICAgIHByb3RlY3RlZCBfZGVzY3JpcHRpb25GaWVsZDogc3RyaW5nO1xyXG4gICAgcHJvdGVjdGVkIF9pbWFnZUZpZWxkOiBzdHJpbmc7XHJcblxyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYWJzdHJhY3Qgc2VhcmNoKHRlcm06IHN0cmluZyk6IHZvaWQ7XHJcblxyXG4gICAgcHVibGljIGNhbmNlbCgpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNlYXJjaEZpZWxkcyhzZWFyY2hGaWVsZHM6IHN0cmluZyB8IG51bGwpIHtcclxuICAgICAgICB0aGlzLl9zZWFyY2hGaWVsZHMgPSBzZWFyY2hGaWVsZHM7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHRpdGxlRmllbGQodGl0bGVGaWVsZDogc3RyaW5nIHwgbnVsbCkge1xyXG4gICAgICAgIHRoaXMuX3RpdGxlRmllbGQgPSB0aXRsZUZpZWxkO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBkZXNjcmlwdGlvbkZpZWxkKGRlc2NyaXB0aW9uRmllbGQ6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMuX2Rlc2NyaXB0aW9uRmllbGQgPSBkZXNjcmlwdGlvbkZpZWxkO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpbWFnZUZpZWxkKGltYWdlRmllbGQ6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMuX2ltYWdlRmllbGQgPSBpbWFnZUZpZWxkO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjb252ZXJ0VG9JdGVtKGRhdGE6IGFueSkge1xyXG4gICAgICAgIGxldCBpbWFnZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcbiAgICAgICAgbGV0IGZvcm1hdHRlZFRleHQ6IHN0cmluZztcclxuICAgICAgICBsZXQgZm9ybWF0dGVkRGVzYzogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl90aXRsZUZpZWxkKSB7XHJcbiAgICAgICAgICAgIGZvcm1hdHRlZFRleHQgPSB0aGlzLmV4dHJhY3RUaXRsZShkYXRhKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBmb3JtYXR0ZWRUZXh0ID0gZGF0YTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2YgZm9ybWF0dGVkVGV4dCAhPT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgZm9ybWF0dGVkVGV4dCA9IEpTT04uc3RyaW5naWZ5KGZvcm1hdHRlZFRleHQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX2Rlc2NyaXB0aW9uRmllbGQpIHtcclxuICAgICAgICAgICAgZm9ybWF0dGVkRGVzYyA9IHRoaXMuZXh0cmFjdFZhbHVlKGRhdGEsIHRoaXMuX2Rlc2NyaXB0aW9uRmllbGQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX2ltYWdlRmllbGQpIHtcclxuICAgICAgICAgICAgaW1hZ2UgPSB0aGlzLmV4dHJhY3RWYWx1ZShkYXRhLCB0aGlzLl9pbWFnZUZpZWxkKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChpc05pbChmb3JtYXR0ZWRUZXh0KSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBmb3JtYXR0ZWREZXNjLFxyXG4gICAgICAgICAgICBpbWFnZSxcclxuICAgICAgICAgICAgb3JpZ2luYWxPYmplY3Q6IGRhdGEsXHJcbiAgICAgICAgICAgIHRpdGxlOiBmb3JtYXR0ZWRUZXh0XHJcbiAgICAgICAgfSBhcyBDb21wbGV0ZXJJdGVtO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgZXh0cmFjdE1hdGNoZXMoZGF0YTogYW55W10sIHRlcm06IHN0cmluZykge1xyXG4gICAgICAgIGxldCBtYXRjaGVzOiBhbnlbXSA9IFtdO1xyXG4gICAgICAgIGNvbnN0IHNlYXJjaEZpZWxkcyA9IHRoaXMuX3NlYXJjaEZpZWxkcyA/IHRoaXMuX3NlYXJjaEZpZWxkcy5zcGxpdCgnLCcpIDogbnVsbDtcclxuICAgICAgICBpZiAodGhpcy5fc2VhcmNoRmllbGRzICE9PSBudWxsICYmIHRoaXMuX3NlYXJjaEZpZWxkcyAhPT0gdW5kZWZpbmVkICYmIHRlcm0gIT09ICcnKSB7XHJcbiAgICAgICAgICAgIG1hdGNoZXMgPSBkYXRhLmZpbHRlcigoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWVzOiBhbnlbXSA9IHNlYXJjaEZpZWxkcyA/IHRoaXMuZXh0cmFjdEJ5U2VhcmNoRmllbGRzKHNlYXJjaEZpZWxkcywgaXRlbSkgOiBbaXRlbV07XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWVzLnNvbWUoKHZhbHVlKSA9PiB2YWx1ZVxyXG4gICAgICAgICAgICAgICAgICAgIC50b1N0cmluZygpXHJcbiAgICAgICAgICAgICAgICAgICAgLnRvTG93ZXJDYXNlKClcclxuICAgICAgICAgICAgICAgICAgICAuaW5kZXhPZih0ZXJtLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSkgPj0gMFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgbWF0Y2hlcyA9IGRhdGE7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbWF0Y2hlcztcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgZXh0cmFjdFRpdGxlKGl0ZW06IGFueSkge1xyXG4gICAgICAgIC8vIHNwbGl0IHRpdGxlIGZpZWxkcyBhbmQgcnVuIGV4dHJhY3RWYWx1ZSBmb3IgZWFjaCBhbmQgam9pbiB3aXRoICcgJ1xyXG4gICAgICAgIGlmICghdGhpcy5fdGl0bGVGaWVsZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gJyc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5fdGl0bGVGaWVsZC5zcGxpdCgnLCcpXHJcbiAgICAgICAgICAgIC5tYXAoKGZpZWxkKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5leHRyYWN0VmFsdWUoaXRlbSwgZmllbGQpO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAucmVkdWNlKChhY2MsIHRpdGxlUGFydCkgPT4gYWNjID8gYCR7YWNjfSAke3RpdGxlUGFydH1gIDogdGl0bGVQYXJ0KTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgZXh0cmFjdFZhbHVlKG9iajogYW55LCBrZXk6IHN0cmluZyB8IG51bGwpIHtcclxuICAgICAgICBsZXQga2V5czogc3RyaW5nW107XHJcbiAgICAgICAgbGV0IHJlc3VsdDogYW55O1xyXG4gICAgICAgIGlmIChrZXkpIHtcclxuICAgICAgICAgICAga2V5cyA9IGtleS5zcGxpdCgnLicpO1xyXG4gICAgICAgICAgICByZXN1bHQgPSBvYmo7XHJcbiAgICAgICAgICAgIGZvciAoa2V5IG9mIGtleXMpIHtcclxuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHRba2V5XTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJlc3VsdCA9IG9iajtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgcHJvY2Vzc1Jlc3VsdHMobWF0Y2hlczogc3RyaW5nW10pOiBDb21wbGV0ZXJJdGVtW10ge1xyXG4gICAgICAgIGxldCBpOiBudW1iZXI7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0czogQ29tcGxldGVySXRlbVtdID0gW107XHJcblxyXG4gICAgICAgIGlmIChtYXRjaGVzICYmIG1hdGNoZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbWF0Y2hlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMuY29udmVydFRvSXRlbShtYXRjaGVzW2ldKTtcclxuICAgICAgICAgICAgICAgIGlmIChpdGVtKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKGl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHRzO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZXh0cmFjdEJ5U2VhcmNoRmllbGRzKHNlYXJjaEZpZWxkczogc3RyaW5nW10sIGl0ZW06IGFueSkge1xyXG4gICAgICAgIHJldHVybiBzZWFyY2hGaWVsZHNcclxuICAgICAgICAgICAgLm1hcCgoc2VhcmNoRmllbGQpID0+IHRoaXMuZXh0cmFjdFZhbHVlKGl0ZW0sIHNlYXJjaEZpZWxkKSkuZmlsdGVyKCh2YWx1ZSkgPT4gISF2YWx1ZSk7XHJcbiAgICB9XHJcbn1cclxuIl19