it-tools/src/composable/fuzzySearch.ts
Corentin THOMASSET dfa1ba8554
feat(ui): added c-select in the ui lib (#550)
* feat(ui): added c-select in the ui lib

* refactor(ui): switched n-select to c-select
2023-08-07 15:30:00 +00:00

30 lines
651 B
TypeScript

import { type MaybeRef, get } from '@vueuse/core';
import Fuse from 'fuse.js';
import { computed } from 'vue';
export { useFuzzySearch };
function useFuzzySearch<Data>({
search,
data,
options = {},
}: {
search: MaybeRef<string>
data: Data[]
options?: Fuse.IFuseOptions<Data> & { filterEmpty?: boolean }
}) {
const fuse = new Fuse(data, options);
const filterEmpty = options.filterEmpty ?? true;
const searchResult = computed<Data[]>(() => {
const query = get(search);
if (!filterEmpty && query === '') {
return data;
}
return fuse.search(query).map(({ item }) => item);
});
return { searchResult };
}