版博士V2.0程序
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

36 lines
1.2 KiB

  1. 'use strict';
  2. var Fuse = require('fuse.js');
  3. var vueDemi = require('vue-demi');
  4. var shared = require('@vueuse/shared');
  5. function useFuse(search, data, options) {
  6. const createFuse = () => {
  7. var _a, _b;
  8. return new Fuse((_a = shared.resolveUnref(data)) != null ? _a : [], (_b = shared.resolveUnref(options)) == null ? void 0 : _b.fuseOptions);
  9. };
  10. const fuse = vueDemi.ref(createFuse());
  11. vueDemi.watch(() => {
  12. var _a;
  13. return (_a = shared.resolveUnref(options)) == null ? void 0 : _a.fuseOptions;
  14. }, () => {
  15. fuse.value = createFuse();
  16. }, { deep: true });
  17. vueDemi.watch(() => shared.resolveUnref(data), (newData) => {
  18. fuse.value.setCollection(newData);
  19. }, { deep: true });
  20. const results = vueDemi.computed(() => {
  21. const resolved = shared.resolveUnref(options);
  22. if ((resolved == null ? void 0 : resolved.matchAllWhenSearchEmpty) && !vueDemi.unref(search))
  23. return shared.resolveUnref(data).map((item, index) => ({ item, refIndex: index }));
  24. const limit = resolved == null ? void 0 : resolved.resultLimit;
  25. return fuse.value.search(shared.resolveUnref(search), limit ? { limit } : void 0);
  26. });
  27. return {
  28. fuse,
  29. results
  30. };
  31. }
  32. exports.useFuse = useFuse;