@nuxtjs/algolia
Version:
Algolia module for Nuxt
29 lines (28 loc) • 1.13 kB
JavaScript
import { computed, onUnmounted } from "vue";
import { useAlgoliaInitIndex } from "./useAlgoliaInitIndex.mjs";
import { useState, useRuntimeConfig, useNuxtApp } from "#imports";
export function useAlgoliaSearch(indexName) {
const config = useRuntimeConfig();
const index = indexName || config.public.algolia.globalIndex;
if (!index) {
throw new Error("`[@nuxtjs/algolia]` Cannot search in Algolia without `globalIndex` or `indexName` passed as a parameter");
}
const algoliaIndex = useAlgoliaInitIndex(index);
const result = useState(`${index}-search-result`, () => null);
const search = async ({ query, requestOptions }) => {
if (import.meta.server) {
const nuxtApp = useNuxtApp();
nuxtApp.$algolia.transporter.requester = (await import("@algolia/requester-fetch").then((lib) => lib.default || lib)).createFetchRequester();
}
const searchResult = await algoliaIndex.search(query, requestOptions);
result.value = searchResult;
return searchResult;
};
onUnmounted(() => {
result.value = null;
});
return {
result: computed(() => result.value),
search
};
}