madiator.com/ui/effects/use-lighthouse.js
2021-08-16 12:11:25 +02:00

40 lines
1.1 KiB
JavaScript

// @flow
import React from 'react';
import { lighthouse } from 'redux/actions/search';
import { getSearchQueryString } from 'util/query-params';
import { isURIValid } from 'lbry-redux';
import useThrottle from './use-throttle';
export default function useLighthouse(query: string, showMature?: boolean, size?: number = 5) {
const [results, setResults] = React.useState();
const [loading, setLoading] = React.useState();
const queryString = query ? getSearchQueryString(query, { nsfw: showMature, size }) : '';
const throttledQuery = useThrottle(queryString, 500);
React.useEffect(() => {
if (throttledQuery) {
setLoading(true);
setResults(null);
let isSubscribed = true;
lighthouse
.search(throttledQuery)
.then(results => {
if (isSubscribed) {
setResults(results.map(result => `lbry://${result.name}#${result.claimId}`).filter(uri => isURIValid(uri)));
setLoading(false);
}
})
.catch(() => {
setLoading(false);
});
return () => {
isSubscribed = false;
};
}
}, [throttledQuery]);
return { results, loading };
}