stremio-web/src/routes/Search/useSearch.js

67 lines
2.2 KiB
JavaScript

// Copyright (C) 2017-2023 Smart code 203358507
const React = require('react');
const { useModelState } = require('stremio/common');
const { useServices } = require('stremio/services');
const useSearch = (queryParams) => {
const { core } = useServices();
// TODO: refactor this to be in stremio-core-web
// React.useEffect(() => {
// let timerId = setTimeout(emitSearchEvent, 500);
// function emitSearchEvent() {
// timerId = null;
// const state = core.transport.getState('search');
// if (state.selected !== null) {
// const [, query] = state.selected.extra.find(([name]) => name === 'search');
// const responses = state.catalogs.filter((catalog) => catalog.content?.type === 'Ready');
// core.transport.analytics({
// event: 'Search',
// args: {
// query,
// responsesCount: responses.length
// }
// });
// }
// }
// return () => {
// if (timerId !== null) {
// clearTimeout(timerId);
// emitSearchEvent();
// }
// };
// }, [queryParams.get('search')]);
const action = React.useMemo(() => {
const query = queryParams.get('search') ?? queryParams.get('query');
if (query?.length > 0) {
return {
action: 'Load',
args: {
model: 'CatalogsWithExtra',
args: {
extra: [
['search', query]
]
}
}
};
} else {
return {
action: 'Unload'
};
}
}, [queryParams]);
const loadRange = React.useCallback((range) => {
core.transport.dispatch({
action: 'CatalogsWithExtra',
args: {
action: 'LoadRange',
args: range
}
}, 'search');
}, []);
const search = useModelState({ model: 'search', action });
return [search, loadRange];
};
module.exports = useSearch;