From d5dc5a9cfc1af0bf9176bd411f1285b9c4739eeb Mon Sep 17 00:00:00 2001 From: Tim Date: Thu, 12 Jan 2023 21:37:30 +0100 Subject: [PATCH] refactor(OptionMenu): improve code structure --- .../Player/OptionsMenu/Option/Option.js | 32 +++++++++++ src/routes/Player/OptionsMenu/Option/index.js | 5 ++ .../Player/OptionsMenu/Option/styles.less | 33 ++++++++++++ src/routes/Player/OptionsMenu/OptionsMenu.js | 54 +++++++------------ src/routes/Player/OptionsMenu/styles.less | 34 ------------ 5 files changed, 89 insertions(+), 69 deletions(-) create mode 100644 src/routes/Player/OptionsMenu/Option/Option.js create mode 100644 src/routes/Player/OptionsMenu/Option/index.js create mode 100644 src/routes/Player/OptionsMenu/Option/styles.less diff --git a/src/routes/Player/OptionsMenu/Option/Option.js b/src/routes/Player/OptionsMenu/Option/Option.js new file mode 100644 index 000000000..f0e6b04a8 --- /dev/null +++ b/src/routes/Player/OptionsMenu/Option/Option.js @@ -0,0 +1,32 @@ +// Copyright (C) 2017-2022 Smart code 203358507 + +const React = require('react'); +const PropTypes = require('prop-types'); +const classnames = require('classnames'); +const Icon = require('@stremio/stremio-icons/dom'); +const { Button } = require('stremio/common'); +const styles = require('./styles'); + +const Option = ({ icon, label, playerId, disabled, onClick }) => { + const onButtonClick = React.useCallback(() => { + if (typeof onClick === 'function') { + onClick(playerId); + } + }, [onClick, playerId]); + return ( + + ); +}; + +Option.propTypes = { + icon: PropTypes.string, + label: PropTypes.string, + playerId: PropTypes.string, + disabled: PropTypes.bool, + onClick: PropTypes.func, +}; + +module.exports = Option; diff --git a/src/routes/Player/OptionsMenu/Option/index.js b/src/routes/Player/OptionsMenu/Option/index.js new file mode 100644 index 000000000..2bf2d108d --- /dev/null +++ b/src/routes/Player/OptionsMenu/Option/index.js @@ -0,0 +1,5 @@ +// Copyright (C) 2017-2022 Smart code 203358507 + +const Option = require('./Option'); + +module.exports = Option; diff --git a/src/routes/Player/OptionsMenu/Option/styles.less b/src/routes/Player/OptionsMenu/Option/styles.less new file mode 100644 index 000000000..a3f54650d --- /dev/null +++ b/src/routes/Player/OptionsMenu/Option/styles.less @@ -0,0 +1,33 @@ +// Copyright (C) 2017-2022 Smart code 203358507 + +@import (reference) '~@stremio/stremio-colors/less/stremio-colors.less'; + +.option-container { + display: flex; + flex-direction: row; + align-items: center; + height: 4rem; + + .icon { + flex: none; + width: 1.4rem; + height: 1.4rem; + margin: 1.3rem; + fill: @color-surface-light5-90; + } + + .label { + flex: 1; + max-height: 2.4em; + font-weight: 400; + color: @color-surface-light5-90; + } + + &:hover { + background-color: @color-background-light2; + } + + &:global(.disabled) { + opacity: 0.5; + } +} \ No newline at end of file diff --git a/src/routes/Player/OptionsMenu/OptionsMenu.js b/src/routes/Player/OptionsMenu/OptionsMenu.js index 16b51a1e2..ba3d1f955 100644 --- a/src/routes/Player/OptionsMenu/OptionsMenu.js +++ b/src/routes/Player/OptionsMenu/OptionsMenu.js @@ -3,9 +3,9 @@ const React = require('react'); const PropTypes = require('prop-types'); const classnames = require('classnames'); -const Icon = require('@stremio/stremio-icons/dom'); -const { Button, useToast } = require('stremio/common'); +const { useToast } = require('stremio/common'); const { useServices } = require('stremio/services'); +const Option = require('./Option'); const styles = require('./styles'); const OptionsMenu = ({ className, stream, playbackDevices }) => { @@ -71,22 +71,27 @@ const OptionsMenu = ({ className, stream, playbackDevices }) => { }, []); return (
- - +