版博士V2.0程序
Nie możesz wybrać więcej, niż 25 tematów Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.

useFuse.mjs 1.1 KiB

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