52 lines
1.1 KiB
JavaScript
52 lines
1.1 KiB
JavaScript
import { useEffect, useState } from "reactn";
|
|
|
|
import algoliasearch from "algoliasearch/lite";
|
|
|
|
export default ({
|
|
query = "",
|
|
options = {},
|
|
algoliaObject: { index = null, projectID, publicKey },
|
|
documentID = "id",
|
|
}) => {
|
|
const [result, setResult] = useState([]);
|
|
const [indexAlgolia, setIndexAlgolia] = useState(null);
|
|
|
|
useEffect(() => {
|
|
if (!indexAlgolia) {
|
|
setIndexAlgolia(algoliasearch(projectID, publicKey).initIndex(index));
|
|
}
|
|
|
|
return () => {
|
|
setIndexAlgolia(null);
|
|
};
|
|
}, [index]);
|
|
|
|
useEffect(() => {
|
|
if (indexAlgolia) {
|
|
getSearchResult();
|
|
}
|
|
}, [query, indexAlgolia]);
|
|
|
|
const getSearchResult = async () => {
|
|
try {
|
|
if (query.length > 1) {
|
|
const { hits } = await indexAlgolia.search(query, options);
|
|
|
|
setResult(
|
|
hits.map((itemHit) => ({
|
|
...itemHit,
|
|
[documentID]: itemHit.objectID,
|
|
}))
|
|
);
|
|
} else {
|
|
setResult([]);
|
|
}
|
|
} catch (e) {
|
|
setResult([]);
|
|
console.log("ALGOLIA" + e);
|
|
}
|
|
};
|
|
|
|
return result;
|
|
};
|