diff --git a/src/routes/Player/Player.js b/src/routes/Player/Player.js
index 3f1e9170e..8ee614aaf 100644
--- a/src/routes/Player/Player.js
+++ b/src/routes/Player/Player.js
@@ -57,8 +57,6 @@ const Player = ({ urlParams, queryParams }) => {
const [videosMenuOpen, , closeVideosMenu, toggleVideosMenu] = useBinaryState(false);
const [statisticsMenuOpen, , closeStatisticsMenu, toggleStatisticsMenu] = useBinaryState(false);
const [nextVideoPopupOpen, openNextVideoPopup, closeNextVideoPopup] = useBinaryState(false);
- const [volumeChangeIndicatorOpen, openVolumeChangeIndicator, closeVolumeChangeIndicator] = useBinaryState(false);
- const volumeChangeTimeout = React.useRef(null);
const menusOpen = React.useMemo(() => {
return optionsMenuOpen || subtitlesMenuOpen || infoMenuOpen || speedMenuOpen || videosMenuOpen || statisticsMenuOpen;
@@ -157,13 +155,7 @@ const Player = ({ urlParams, queryParams }) => {
const onVolumeChangeRequested = React.useCallback((volume) => {
video.setProp('volume', volume);
- if (immersed && !menusOpen) {
- openVolumeChangeIndicator();
- }
-
- if (volumeChangeTimeout.current) clearTimeout(volumeChangeTimeout.current);
- volumeChangeTimeout.current = setTimeout(closeVolumeChangeIndicator, 1500);
- }, [immersed, menusOpen]);
+ }, []);
const onSeekRequested = React.useCallback((time) => {
video.setProp('time', time);
@@ -432,12 +424,6 @@ const Player = ({ urlParams, queryParams }) => {
}
}, [video.state.playbackSpeed]);
- React.useEffect(() => {
- return () => {
- if (volumeChangeTimeout.current) clearTimeout(volumeChangeTimeout.current);
- };
- }, []);
-
React.useEffect(() => {
const toastFilter = (item) => item?.dataset?.type === 'CoreEvent';
toast.addFilter(toastFilter);
@@ -646,11 +632,13 @@ const Player = ({ urlParams, queryParams }) => {
null
}
{
- volumeChangeIndicatorOpen ?
+ immersed ?
:
null
diff --git a/src/routes/Player/VolumeChangeIndicator/VolumeChangeIndicator.js b/src/routes/Player/VolumeChangeIndicator/VolumeChangeIndicator.js
index a3858e59f..66c47fc0e 100644
--- a/src/routes/Player/VolumeChangeIndicator/VolumeChangeIndicator.js
+++ b/src/routes/Player/VolumeChangeIndicator/VolumeChangeIndicator.js
@@ -6,26 +6,57 @@ const { default: Icon } = require('@stremio/stremio-icons/react');
const { default: classNames } = require('classnames');
const PropTypes = require('prop-types');
const styles = require('./styles');
+const { useBinaryState } = require('stremio/common');
+
+const VolumeChangeIndicator = React.memo(({ muted, onVolumeChangeRequested, volume, menusOpen, immersed }) => {
+
+ const [volumeIndicatorOpen, openVolumeIndicator, closeVolumeIndicator] = useBinaryState(false);
+ const volumeChangeTimeout = React.useRef(null);
+
+ React.useEffect(() => {
+ if (immersed && !menusOpen) openVolumeIndicator();
+
+ if (volumeChangeTimeout.current) clearTimeout(volumeChangeTimeout.current);
+ volumeChangeTimeout.current = setTimeout(closeVolumeIndicator, 1500);
+ }, [volume, menusOpen, immersed]);
+
+ React.useEffect(() => {
+ return () => {
+ if (volumeChangeTimeout.current) clearTimeout(volumeChangeTimeout.current);
+ };
+ }, [volume]);
-const VolumeChangeIndicator = ({ muted, onVolumeChangeRequested, volume }) => {
return (
-
-
-
-
+
+ {
+ volumeIndicatorOpen ?
+
+
+
+
+ :
+ null
+ }
+
);
-};
+});
+
+VolumeChangeIndicator.displayName = 'VolumeChangeIndicator';
module.exports = VolumeChangeIndicator;
VolumeChangeIndicator.propTypes = {
muted: PropTypes.bool,
onVolumeChangeRequested: PropTypes.func,
- volume: PropTypes.number
+ volume: PropTypes.number,
+ menusOpen: PropTypes.bool,
+ immersed: PropTypes.bool,
+ openVolumeIndicator: PropTypes.func,
+ closeVolumeIndicator: PropTypes.func
};
diff --git a/src/routes/Player/VolumeChangeIndicator/styles.less b/src/routes/Player/VolumeChangeIndicator/styles.less
index 2487297a4..38d651b7b 100644
--- a/src/routes/Player/VolumeChangeIndicator/styles.less
+++ b/src/routes/Player/VolumeChangeIndicator/styles.less
@@ -10,7 +10,6 @@
flex-direction: column;
align-items: center;
justify-content: center;
- z-index: 99999;
transform: translate(-50%, -50%);
background-color: var(--overlay-color);
border-radius: var(--border-radius);
@@ -21,12 +20,10 @@
width: 6.5rem;
height: 6.5rem;
color: var(--primary-foreground-color);
- opacity: 0.5;
}
.volume-slider {
border-radius: var(--border-radius);
- opacity: 0.5;
max-height: 1rem;
width: 6.5rem;
max-height: 1rem;