mirror of
https://github.com/Stremio/stremio-web.git
synced 2026-05-13 10:11:35 +00:00
75 lines
2.5 KiB
JavaScript
75 lines
2.5 KiB
JavaScript
// Copyright (C) 2017-2023 Smart code 203358507
|
|
|
|
const React = require('react');
|
|
const UrlUtils = require('url');
|
|
const { useServices } = require('stremio/services');
|
|
const { useModelState } = require('stremio/common');
|
|
|
|
const map = (discover) => ({
|
|
...discover,
|
|
catalog: discover.catalog !== null && discover.catalog.content.type === 'Ready' ?
|
|
{
|
|
...discover.catalog,
|
|
content: {
|
|
...discover.catalog.content,
|
|
content: discover.catalog.content.content.map((metaItem) => ({
|
|
...metaItem,
|
|
released: new Date(typeof metaItem.released === 'string' ? metaItem.released : NaN),
|
|
}))
|
|
}
|
|
}
|
|
:
|
|
discover.catalog
|
|
});
|
|
|
|
const useDiscover = (urlParams, queryParams) => {
|
|
const { core } = useServices();
|
|
const loadNextPage = React.useCallback(() => {
|
|
core.transport.dispatch({
|
|
action: 'CatalogWithFilters',
|
|
args: {
|
|
action: 'LoadNextPage'
|
|
}
|
|
}, 'discover');
|
|
}, []);
|
|
const action = React.useMemo(() => {
|
|
if (typeof urlParams.transportUrl === 'string' && typeof urlParams.type === 'string' && typeof urlParams.catalogId === 'string') {
|
|
const { hostname } = UrlUtils.parse(urlParams.transportUrl);
|
|
if (typeof hostname === 'string' && hostname.length > 0) {
|
|
return {
|
|
action: 'Load',
|
|
args: {
|
|
model: 'CatalogWithFilters',
|
|
args: {
|
|
request: {
|
|
base: urlParams.transportUrl,
|
|
path: {
|
|
resource: 'catalog',
|
|
type: urlParams.type,
|
|
id: urlParams.catalogId,
|
|
extra: Array.from(queryParams.entries())
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
}
|
|
} else {
|
|
return {
|
|
action: 'Load',
|
|
args: {
|
|
model: 'CatalogWithFilters',
|
|
args: null
|
|
}
|
|
};
|
|
}
|
|
|
|
return {
|
|
action: 'Unload'
|
|
};
|
|
}, [urlParams, queryParams]);
|
|
const discover = useModelState({ model: 'discover', action, map, deps: ['ctx'] });
|
|
return [discover, loadNextPage];
|
|
};
|
|
|
|
module.exports = useDiscover;
|