@scayle/storefront-nuxt
Version:
Nuxt integration for the SCAYLE Commerce Engine and Storefront API
53 lines (52 loc) • 1.27 kB
JavaScript
import { useState } from "nuxt/app";
import { useRpcCall } from "../core/useRpcCall.js";
export function useStorefrontSearch(searchQuery, { params } = {}, key = "search") {
const data = useState(
`${key}-data`,
() => void 0
);
const getSearchSuggestionsRpc = useRpcCall("getSearchSuggestions");
const resolveSearchRpc = useRpcCall("resolveSearch");
const error = useState(
`${key}-error`,
() => void 0
);
const status = useState(`${key}-error`, () => "idle");
const getSearchSuggestions = async () => {
status.value = "pending";
if (!searchQuery.value) {
return;
}
try {
data.value = await getSearchSuggestionsRpc({
term: String(searchQuery.value),
...params
});
} catch (e) {
error.value = e;
} finally {
status.value = error.value ? "error" : "success";
}
};
const resolveSearch = async () => {
if (!searchQuery.value) {
return;
}
return await resolveSearchRpc({
term: searchQuery.value,
...params
});
};
const resetSearch = () => {
searchQuery.value = "";
data.value = { suggestions: [] };
};
return {
data,
status,
error,
resetSearch,
getSearchSuggestions,
resolveSearch
};
}