mirror of
https://github.com/Stremio/stremio-web.git
synced 2026-03-28 12:58:48 +00:00
62 lines
2.2 KiB
JavaScript
62 lines
2.2 KiB
JavaScript
const React = require('react');
|
|
|
|
const navigateWithLoadRequest = (load_request) => {
|
|
const transportUrl = encodeURIComponent(load_request.base);
|
|
const catalogId = encodeURIComponent(load_request.path.id);
|
|
const type = encodeURIComponent(load_request.path.type_name);
|
|
window.location.replace(`#/addons/${transportUrl}/${catalogId}/${type}`);
|
|
};
|
|
|
|
const equalWithoutExtra = (request1, request2) => {
|
|
return request1.base === request2.base &&
|
|
request1.path.resource === request2.path.resource &&
|
|
request1.path.type_name === request2.path.type_name &&
|
|
request1.path.id === request2.path.id;
|
|
};
|
|
|
|
const mapSelectableInputs = (addons) => {
|
|
const catalogSelect = {
|
|
title: 'Select catalog',
|
|
options: addons.selectable.catalogs
|
|
.map(({ name, load_request }) => ({
|
|
value: JSON.stringify(load_request),
|
|
label: name
|
|
})),
|
|
selected: addons.selectable.catalogs
|
|
.filter(({ load_request: { path: { id } } }) => {
|
|
return addons.catalog_resource !== null &&
|
|
addons.catalog_resource.request.path.id === id;
|
|
})
|
|
.map(({ load_request }) => JSON.stringify(load_request)),
|
|
onSelect: (event) => {
|
|
navigateWithLoadRequest(JSON.parse(event.value));
|
|
}
|
|
};
|
|
const typeSelect = {
|
|
title: 'Select type',
|
|
options: addons.selectable.types
|
|
.map(({ name, load_request }) => ({
|
|
value: JSON.stringify(load_request),
|
|
label: name
|
|
})),
|
|
selected: addons.selectable.types
|
|
.filter(({ load_request }) => {
|
|
return addons.catalog_resource !== null &&
|
|
equalWithoutExtra(addons.catalog_resource.request, load_request);
|
|
})
|
|
.map(({ load_request }) => JSON.stringify(load_request)),
|
|
onSelect: (event) => {
|
|
navigateWithLoadRequest(JSON.parse(event.value));
|
|
}
|
|
};
|
|
return [catalogSelect, typeSelect];
|
|
};
|
|
|
|
const useSelectableInputs = (addons) => {
|
|
const selectableInputs = React.useMemo(() => {
|
|
return mapSelectableInputs(addons);
|
|
}, [addons]);
|
|
return selectableInputs;
|
|
};
|
|
|
|
module.exports = useSelectableInputs;
|