Warp/node_modules/@vueuse/integrations/useFuse.cjs
2024-01-05 19:14:38 +07:00

46 lines
1.2 KiB
JavaScript

'use strict';
var Fuse = require('fuse.js');
var vueDemi = require('vue-demi');
var shared = require('@vueuse/shared');
function useFuse(search, data, options) {
const createFuse = () => {
var _a, _b;
return new Fuse(
(_a = shared.toValue(data)) != null ? _a : [],
(_b = shared.toValue(options)) == null ? void 0 : _b.fuseOptions
);
};
const fuse = vueDemi.ref(createFuse());
vueDemi.watch(
() => {
var _a;
return (_a = shared.toValue(options)) == null ? void 0 : _a.fuseOptions;
},
() => {
fuse.value = createFuse();
},
{ deep: true }
);
vueDemi.watch(
() => shared.toValue(data),
(newData) => {
fuse.value.setCollection(newData);
},
{ deep: true }
);
const results = vueDemi.computed(() => {
const resolved = shared.toValue(options);
if ((resolved == null ? void 0 : resolved.matchAllWhenSearchEmpty) && !shared.toValue(search))
return shared.toValue(data).map((item, index) => ({ item, refIndex: index }));
const limit = resolved == null ? void 0 : resolved.resultLimit;
return fuse.value.search(shared.toValue(search), limit ? { limit } : void 0);
});
return {
fuse,
results
};
}
exports.useFuse = useFuse;