mirror of
https://github.com/mealie-recipes/mealie.git
synced 2025-05-24 01:12:54 -04:00
* add vitest * initialize lib w/ tests * move to dev dep * run tests in CI * update file names * move api folder to lib * move api and api types to same folder * update generator outpath * rm husky * i guess i _did_ need those types * reorg types * extract validators into testable components * (WIP) start composable testing * fix import type * fix linter complaint * simplify icon type def * fix linter errors (maybe?) * rename client file for sorting
48 lines
1.2 KiB
TypeScript
48 lines
1.2 KiB
TypeScript
import { computed, reactive, ref, Ref } from "@nuxtjs/composition-api";
|
|
import Fuse from "fuse.js";
|
|
import { Recipe } from "~/lib/api/types/recipe";
|
|
|
|
export const useRecipeSearch = (recipes: Ref<Recipe[] | null>) => {
|
|
const localState = reactive({
|
|
options: {
|
|
ignoreLocation: true,
|
|
shouldSort: true,
|
|
threshold: 0.6,
|
|
location: 0,
|
|
distance: 100,
|
|
findAllMatches: true,
|
|
maxPatternLength: 32,
|
|
minMatchCharLength: 2,
|
|
keys: ["name", "description", "recipeIngredient.note", "recipeIngredient.food.name"],
|
|
},
|
|
});
|
|
|
|
const search = ref("");
|
|
|
|
const fuse = computed(() => {
|
|
return new Fuse(recipes.value || [], localState.options);
|
|
});
|
|
|
|
const fuzzyRecipes = computed(() => {
|
|
if (search.value.trim() === "") {
|
|
return recipes.value;
|
|
}
|
|
const result = fuse.value.search(search.value.trim());
|
|
return result.map((x) => x.item);
|
|
});
|
|
|
|
const results = computed(() => {
|
|
if (!fuzzyRecipes.value) {
|
|
return [];
|
|
}
|
|
|
|
if (fuzzyRecipes.value.length > 0 && search.value.length != null && search.value.length >= 1) {
|
|
return fuzzyRecipes.value;
|
|
} else {
|
|
return recipes.value;
|
|
}
|
|
});
|
|
|
|
return { results, search };
|
|
};
|