@@ -50,47 +50,41 @@ const SplitterElement = forwardRef<HTMLDivElement, SplitterElementPropTypes>((pr
5050 const { vertical, reset } = useContext ( SplitterLayoutContext ) ;
5151 const safariStyles = Device . isSafari ( ) ? { width : 'min-content' , flex : '1 1 auto' } : { } ;
5252 const _size = typeof size === 'number' ? `${ size } px` : size ;
53- const defaultFlexStyles = _size !== 'auto' ? { flex : `0 1 ${ _size } ` } : { flex : '1 0 min-content' , ...safariStyles } ;
54- const [ flexStyles , setFlexStyles ] = useState ( defaultFlexStyles ) ;
5553 const [ flexBasisApplied , setFlexBasisApplied ] = useState ( false ) ;
54+ const [ observedFlex , setObservedFlex ] = useState < CSSProperties | null > ( null ) ;
55+ const flexStyles =
56+ _size !== 'auto' ? { flex : `0 1 ${ _size } ` } : ( observedFlex ?? { flex : '1 0 min-content' , ...safariStyles } ) ;
5657
5758 useStylesheet ( styleData , SplitterElement . displayName ) ;
58-
5959 useEffect ( ( ) => {
60+ if ( _size !== 'auto' ) return ;
61+
6062 const elementObserver = new ResizeObserver ( ( [ element ] ) => {
6163 if ( element . target . getBoundingClientRect ( ) . width !== 0 && ! flexBasisApplied ) {
6264 const resetSafariStyles = Device . isSafari ( ) ? { width : 'unset' } : { } ;
63- setFlexStyles ( {
65+ setObservedFlex ( {
6466 flex : `0 0 ${ element . target . getBoundingClientRect ( ) [ vertical ? 'height' : 'width' ] } px` ,
6567 ...resetSafariStyles ,
6668 } ) ;
6769 setFlexBasisApplied ( true ) ;
6870 }
6971 } ) ;
7072
71- if ( _size === 'auto' && splitterElementRef . current ) {
73+ if ( splitterElementRef . current ) {
7274 elementObserver . observe ( splitterElementRef . current ) ;
73- } else {
74- setFlexStyles ( { flex : `0 1 ${ _size } ` } ) ;
7575 }
7676
7777 return ( ) => {
7878 elementObserver . disconnect ( ) ;
7979 } ;
80- } , [ _size , flexBasisApplied , vertical ] ) ;
80+ } , [ _size , flexBasisApplied , splitterElementRef , vertical ] ) ;
8181
8282 useIsomorphicLayoutEffect ( ( ) => {
8383 if ( reset ) {
84- setFlexStyles ( undefined ) ;
84+ setObservedFlex ( null ) ;
8585 setFlexBasisApplied ( false ) ;
8686 }
87- } , [ reset , _size ] ) ;
88-
89- useIsomorphicLayoutEffect ( ( ) => {
90- if ( flexStyles === undefined ) {
91- setFlexStyles ( defaultFlexStyles ) ;
92- }
93- } , [ flexStyles ] ) ;
87+ } , [ reset ] ) ;
9488
9589 return (
9690 < div
0 commit comments