import { Scrollbars, ScrollValues } from 'rc-scrollbars'; import React, { MutableRefObject, CSSProperties, useMemo, memo, forwardRef, ReactNode, ReactElement } from 'react'; const styleDefault = { width: '100%', height: '100%', flexGrow: 1, willChange: 'transform', overflowY: 'hidden', }; export type CustomScrollbarsProps = { overflowX?: boolean; style?: CSSProperties; children?: ReactNode; onScroll?: (values: ScrollValues) => void; renderView?: typeof Scrollbars.defaultProps.renderView; renderTrackHorizontal?: typeof Scrollbars.defaultProps.renderTrackHorizontal; }; const ScrollableContentWrapper = forwardRef(function WrappedComponent( { children, style, onScroll, overflowX, renderView }, ref, ) { const scrollbarsStyle = useMemo(() => ({ ...style, ...styleDefault }), [style]) as CSSProperties; return (
} renderThumbVertical={({ style, ...props }): JSX.Element => (
)} children={children} ref={(sRef): void => { if (ref && sRef) { if (typeof ref === 'function') { ref(sRef.view ?? null); return; } (ref as MutableRefObject).current = sRef.view; } }} /> ); }); export default memo(ScrollableContentWrapper);