createFuzzySearch.tsx 571 B

123456789101112131415161718192021
  1. import {DEFAULT_FUSE_OPTIONS} from 'app/constants';
  2. export function loadFuzzySearch() {
  3. return import(/* webpackChunkName: "Fuse" */ 'fuse.js');
  4. }
  5. export async function createFuzzySearch<
  6. T = string,
  7. Options extends Fuse.FuseOptions<T> = Fuse.FuseOptions<T>
  8. >(objects: any[], options: Options): Promise<Fuse<T, Options>> {
  9. if (!options.keys) {
  10. throw new Error('You need to define `options.keys`');
  11. }
  12. const {default: Fuse} = await loadFuzzySearch();
  13. const opts = {
  14. ...DEFAULT_FUSE_OPTIONS,
  15. ...options,
  16. };
  17. return new Fuse(objects, opts);
  18. }