2019-12-08 14:16:09 +00:00
|
|
|
import { SearchService } from "./SearchService";
|
|
|
|
// import * as Fuse from 'fuse.js';
|
|
|
|
import Fuse = require('fuse.js');
|
|
|
|
|
|
|
|
export class FuseSearchService<T> implements SearchService<T> {
|
2019-12-11 07:32:49 +00:00
|
|
|
private readonly _fuse: Fuse<T, Object>;
|
2019-12-08 14:16:09 +00:00
|
|
|
private readonly _params: Fuse.FuseOptions<T>;
|
|
|
|
|
|
|
|
constructor(keys: string[], params: Fuse.FuseOptions<T> = {
|
|
|
|
shouldSort: true,
|
|
|
|
threshold: 0.01,
|
|
|
|
location: 0,
|
|
|
|
distance: 100,
|
|
|
|
maxPatternLength: 32,
|
|
|
|
minMatchCharLength: 1,
|
|
|
|
// keys: [
|
|
|
|
// "userName",
|
|
|
|
// ]
|
|
|
|
}) {
|
|
|
|
this._params = params;
|
|
|
|
this._params.keys = keys;
|
2019-12-11 07:32:49 +00:00
|
|
|
this._fuse = new Fuse([], this._params);
|
2019-12-08 14:16:09 +00:00
|
|
|
}
|
|
|
|
|
2019-12-11 07:32:49 +00:00
|
|
|
search(list: T[], searchTerm: string): T[] {
|
|
|
|
// const fuse = new Fuse<T, Fuse.FuseOptions<any>>(list, this._params);
|
|
|
|
this._fuse.setCollection(list);
|
2019-12-08 14:16:09 +00:00
|
|
|
// fuse.search(searchTerm);
|
2020-01-09 07:24:45 +00:00
|
|
|
return this._fuse.search(searchTerm);
|
2019-12-08 14:16:09 +00:00
|
|
|
}
|
|
|
|
|
2019-12-11 18:04:42 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
*
|
|
|
|
*
|
|
|
|
* @static
|
|
|
|
* @param keys
|
|
|
|
* The keys that must be searched for in the given list
|
|
|
|
* @template G
|
|
|
|
* @returns {SearchService<G>}
|
|
|
|
* @memberof FuseSearchService
|
|
|
|
*/
|
|
|
|
static getInstance<G>(keys: string[]): SearchService<G> {
|
|
|
|
return new FuseSearchService<G>(keys);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2019-12-08 14:16:09 +00:00
|
|
|
}
|