diff --git a/src/routes/MetaDetails/StreamsList/StreamsList.js b/src/routes/MetaDetails/StreamsList/StreamsList.js index c748feae7..e6297e8cc 100644 --- a/src/routes/MetaDetails/StreamsList/StreamsList.js +++ b/src/routes/MetaDetails/StreamsList/StreamsList.js @@ -16,6 +16,9 @@ const StreamsList = ({ className, video, ...props }) => { const { t } = useTranslation(); const { core } = useServices(); const [selectedAddon, setSelectedAddon] = React.useState(ALL_ADDONS_KEY); + const streamsContainerRef = React.useRef(null); + const [isScrollable, setIsScrollable] = React.useState(false); + const [showBackToTop, setShowBackToTop] = React.useState(false); const onAddonSelected = React.useCallback((event) => { setSelectedAddon(event.value); }, []); @@ -76,10 +79,33 @@ const StreamsList = ({ className, video, ...props }) => { onSelect: onAddonSelected }; }, [streamsByAddon, selectedAddon]); - const streamsContainerRef = React.useRef(null); + const handleScroll = () => { + if (streamsContainerRef.current) { + const { scrollTop, scrollHeight, clientHeight } = streamsContainerRef.current; + const isScrollable = scrollHeight - clientHeight > 0; + setShowBackToTop(scrollTop > 50); + setIsScrollable(isScrollable); + } + }; + React.useEffect(() => { + const container = streamsContainerRef.current; + handleScroll(); + if (container) { + container.addEventListener('scroll', handleScroll); + } + return () => { + if (container) { + container.removeEventListener('scroll', handleScroll); + } + }; + }, [streamsByAddon, selectedAddon]); + const scrollToTop = () => { - if (streamsContainerRef?.current) { - streamsContainerRef.current.scrollTo(0, 0); + if (streamsContainerRef.current) { + streamsContainerRef.current.scroll({ + top: 0, + behavior: 'smooth' + }); } }; return ( @@ -128,6 +154,10 @@ const StreamsList = ({ className, video, ...props }) => { null } +
+ +
Back to Top
+
{filteredStreams.map((stream, index) => ( { /> ))} { - streamsContainerRef?.current?.scrollHeight > streamsContainerRef?.current?.clientHeight ? + isScrollable && countLoadingAddons === 0 ? -
- -
Back to Top
-
+