@@ -11,45 +11,65 @@ interface FillerProps {
1111 /** Set offset of visible items. Should be the top of start item position */
1212 offset ?: number ;
1313
14+ horizontalScroll ?: boolean ;
15+
1416 children : React . ReactNode ;
1517
18+ fillerOuterRef : React . MutableRefObject < HTMLDivElement > ;
19+
1620 onInnerResize ?: ( ) => void ;
1721
1822 innerProps ?: InnerProps ;
23+
24+ onWidthChange : ( width : number ) => void ;
25+
26+ onScrollWidthChange : ( scrollWidth : number ) => void ;
1927}
2028
2129/**
2230 * Fill component to provided the scroll content real height.
2331 */
2432const Filler = React . forwardRef (
2533 (
26- { height, offset, children, prefixCls, onInnerResize, innerProps } : FillerProps ,
34+ {
35+ height,
36+ offset,
37+ children,
38+ prefixCls,
39+ horizontalScroll,
40+ fillerOuterRef,
41+ onInnerResize,
42+ innerProps,
43+ onWidthChange,
44+ onScrollWidthChange,
45+ } : FillerProps ,
2746 ref : React . Ref < HTMLDivElement > ,
2847 ) => {
2948 let outerStyle : React . CSSProperties = { } ;
3049
3150 let innerStyle : React . CSSProperties = {
32- display : 'flex' ,
51+ display : horizontalScroll ? 'inline-flex' : 'flex' ,
3352 flexDirection : 'column' ,
3453 } ;
3554
3655 if ( offset !== undefined ) {
37- outerStyle = { height, position : 'relative' , overflow : 'hidden' } ;
56+ outerStyle = {
57+ height,
58+ position : 'relative' ,
59+ overflow : 'hidden' ,
60+ } ;
3861
3962 innerStyle = {
4063 ...innerStyle ,
4164 transform : `translateY(${ offset } px)` ,
42- position : 'absolute' ,
43- left : 0 ,
44- right : 0 ,
45- top : 0 ,
4665 } ;
4766 }
4867
49- return (
50- < div style = { outerStyle } >
68+ const outerContainer = (
69+ < div ref = { fillerOuterRef } style = { outerStyle } >
5170 < ResizeObserver
52- onResize = { ( { offsetHeight } ) => {
71+ onResize = { ( { offsetWidth, offsetHeight } ) => {
72+ onScrollWidthChange ( offsetWidth ) ;
5373 if ( offsetHeight && onInnerResize ) {
5474 onInnerResize ( ) ;
5575 }
@@ -68,6 +88,18 @@ const Filler = React.forwardRef(
6888 </ ResizeObserver >
6989 </ div >
7090 ) ;
91+
92+ return horizontalScroll ? (
93+ < ResizeObserver
94+ onResize = { ( { offsetWidth } ) => {
95+ onWidthChange ( offsetWidth ) ;
96+ } }
97+ >
98+ { outerContainer }
99+ </ ResizeObserver >
100+ ) : (
101+ outerContainer
102+ ) ;
71103 } ,
72104) ;
73105
0 commit comments