UNPKG

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