From cc976f27e77e5514d97aff5f03dbaafe0b8a857e Mon Sep 17 00:00:00 2001 From: Tim Date: Wed, 26 Apr 2023 09:07:01 +0200 Subject: [PATCH] feat: add configure button for addons --- .../AddonDetailsModal/AddonDetailsModal.js | 23 +++++++++++- src/routes/Addons/Addon/Addon.js | 35 ++++++++++++++++--- src/routes/Addons/Addon/styles.less | 33 +++++++++++++---- src/routes/Addons/Addons.js | 7 ++++ 4 files changed, 87 insertions(+), 11 deletions(-) diff --git a/src/common/AddonDetailsModal/AddonDetailsModal.js b/src/common/AddonDetailsModal/AddonDetailsModal.js index 2c417a142..d3143fb86 100644 --- a/src/common/AddonDetailsModal/AddonDetailsModal.js +++ b/src/common/AddonDetailsModal/AddonDetailsModal.js @@ -59,6 +59,27 @@ const AddonDetailsModal = ({ transportUrl, onCloseRequest }) => { } } }; + const configureButton = addonDetails.remoteAddon !== null && + addonDetails.remoteAddon.content.type === 'Ready' && + addonDetails.remoteAddon.content.content.manifest.behaviorHints.configurable ? + { + className: styles['configure-button'], + label: 'Configure', + props: { + onClick: (event) => { + window.open(transportUrl.replace('manifest.json', 'configure')); + if (typeof onCloseRequest === 'function') { + onCloseRequest({ + type: 'configure', + reactEvent: event, + nativeEvent: event.nativeEvent + }); + } + } + } + } + : + null; const toggleButton = addonDetails.localAddon !== null ? { className: styles['uninstall-button'], @@ -109,7 +130,7 @@ const AddonDetailsModal = ({ transportUrl, onCloseRequest }) => { } : null; - return toggleButton !== null ? [cancelButton, toggleButton] : [cancelButton]; + return toggleButton !== null ? configureButton ? [cancelButton, configureButton, toggleButton] : [cancelButton, toggleButton] : [cancelButton]; }, [addonDetails, onCloseRequest]); return ( diff --git a/src/routes/Addons/Addon/Addon.js b/src/routes/Addons/Addon/Addon.js index fed54fcfb..e984d97d8 100644 --- a/src/routes/Addons/Addon/Addon.js +++ b/src/routes/Addons/Addon/Addon.js @@ -8,7 +8,7 @@ const Icon = require('@stremio/stremio-icons/dom'); const { Button, Image } = require('stremio/common'); const styles = require('./styles'); -const Addon = ({ className, id, name, version, logo, description, types, installed, onToggle, onShare, dataset }) => { +const Addon = ({ className, id, name, version, logo, description, types, behaviorHints, installed, onToggle, onConfigure, onShare, dataset }) => { const { t } = useTranslation(); const toggleButtonOnClick = React.useCallback((event) => { if (typeof onToggle === 'function') { @@ -20,6 +20,16 @@ const Addon = ({ className, id, name, version, logo, description, types, install }); } }, [onToggle, dataset]); + const configureButtonOnClick = React.useCallback((event) => { + if (typeof onConfigure === 'function') { + onConfigure({ + type: 'configure', + nativeEvent: event.nativeEvent, + reactEvent: event, + dataset: dataset + }); + } + }, [onConfigure, dataset]); const shareButtonOnClick = React.useCallback((event) => { if (typeof onShare === 'function') { onShare({ @@ -84,9 +94,19 @@ const Addon = ({ className, id, name, version, logo, description, types, install }
- +
+ { + !behaviorHints.configurationRequired && behaviorHints.configurable ? + + : + null + } + +