@vuex-orm/plugin-search
Version:
Vuex ORM plugin for adding fuzzy search feature through model entities.
42 lines • 1.51 kB
JavaScript
import { __assign } from "tslib";
import Fuse from 'fuse.js';
export default function Query(query, options) {
/**
* The search terms.
*/
query.prototype.searchTerms = null;
/**
* The search options.
*/
query.prototype.searchOptions = options;
/**
* Add search configurations.
*/
query.prototype.search = function (terms, options) {
if (options === void 0) { options = {}; }
// If `terms` is single string, convert it to an array so we can use it
// consistently afterward.
this.searchTerms = Array.isArray(terms) ? terms : [terms];
// If a user didn't provide `keys` option, set all model fields as default.
if (this.searchOptions.keys.length === 0) {
this.searchOptions.keys = Object.keys(this.model.cachedFields[this.model.entity]);
}
// Finally, merge default options with users options.
this.searchOptions = __assign(__assign({}, this.searchOptions), options);
return this;
};
/**
* Filter the given record with fuzzy search by Fuse.js.
*/
query.prototype.filterSearch = function (collection) {
if (this.searchTerms === null) {
return collection;
}
var fuse = new Fuse(collection, this.searchOptions);
return this.searchTerms.reduce(function (carry, term) {
carry.push.apply(carry, fuse.search(term));
return carry;
}, []);
};
}
//# sourceMappingURL=Query.js.map