import React, { FC, useCallback, useEffect, useRef, useState } from 'react'; import scrollerFactory from '../../libraries/scroller'; import globalize from '../../scripts/globalize'; import IconButton from '../emby-button/IconButton'; import './emby-scrollbuttons.scss'; import { ScrollDirection, scrollerItemSlideIntoView } from '../../utils/scroller'; interface ScrollButtonsProps { scrollerFactoryRef: React.MutableRefObject; scrollState: { scrollSize: number; scrollPos: number; scrollWidth: number; } } const ScrollButtons: FC = ({ scrollerFactoryRef, scrollState }) => { const [localeScrollPos, setLocaleScrollPos] = useState(0); const scrollButtonsRef = useRef(null); const onScrollButtonClick = useCallback((direction: ScrollDirection) => { scrollerItemSlideIntoView({ direction, scroller: scrollerFactoryRef.current, scrollState }); }, [scrollState, scrollerFactoryRef]); const triggerScrollLeft = useCallback(() => onScrollButtonClick(ScrollDirection.LEFT), [ onScrollButtonClick ]); const triggerScrollRight = useCallback(() => onScrollButtonClick(ScrollDirection.RIGHT), [ onScrollButtonClick ]); useEffect(() => { const parent = scrollButtonsRef.current?.parentNode as HTMLDivElement; parent.classList.add('emby-scroller-container'); let localeAwarePos = scrollState.scrollPos; if (globalize.getIsElementRTL(scrollButtonsRef.current)) { localeAwarePos *= -1; } setLocaleScrollPos(localeAwarePos); }, [scrollState.scrollPos]); return (
0 ? false : true} /> 0 && localeScrollPos + scrollState.scrollSize >= scrollState.scrollWidth ? true : false} />
); }; export default ScrollButtons;