UNPKG

@vuex-orm/plugin-search

Version:

Vuex ORM plugin for adding fuzzy search feature through model entities.

42 lines 1.51 kB
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