lbry-desktop/ui/effects/use-lighthouse.js

48 lines
1.3 KiB
JavaScript
Raw Normal View History

2020-12-03 18:29:47 +01:00
// @flow
import React from 'react';
import { lighthouse } from 'redux/actions/search';
import { getSearchQueryString } from 'util/query-params';
import { isURIValid } from 'util/lbryURI';
2020-12-03 18:29:47 +01:00
import useThrottle from './use-throttle';
2021-06-03 04:59:01 +02:00
export default function useLighthouse(
query: string,
showMature: boolean,
size: number = 5,
additionalOptions: any = {},
throttleMs: number = 500
2021-06-03 04:59:01 +02:00
) {
2020-12-03 18:29:47 +01:00
const [results, setResults] = React.useState();
const [loading, setLoading] = React.useState();
2021-06-03 04:59:01 +02:00
const queryString = query ? getSearchQueryString(query, { nsfw: showMature, size, ...additionalOptions }) : '';
const throttledQuery = useThrottle(queryString, throttleMs);
2020-12-03 18:29:47 +01:00
React.useEffect(() => {
if (throttledQuery) {
setLoading(true);
setResults(null);
let isSubscribed = true;
2020-12-03 18:29:47 +01:00
lighthouse
.search(throttledQuery)
.then(({ body: results }) => {
if (isSubscribed) {
2021-06-03 04:59:01 +02:00
setResults(
results.map((result) => `lbry://${result.name}#${result.claimId}`).filter((uri) => isURIValid(uri))
);
setLoading(false);
}
2020-12-03 18:29:47 +01:00
})
.catch(() => {
setLoading(false);
});
return () => {
isSubscribed = false;
};
2020-12-03 18:29:47 +01:00
}
}, [throttledQuery]);
return { results, loading };
}