stremio-web/src/routes/Addons/useSelectableInputs.js
svetlagasheva 498cd7fae7 typo fixed
2020-01-30 14:25:35 +02:00

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;