@@ -117,11 +117,19 @@ const ObjectPage = forwardRef<ObjectPageDomRef, ObjectPagePropTypes>((props, ref
117117 setCurrentTabModeSection ( currentSection ) ;
118118 } , [ mode , children , internalSelectedSectionId ] ) ;
119119
120- const fireOnSelectedChangedEvent = ( targetEvent , index , id , section ) => {
121- if ( typeof onSelectedSectionChange === 'function' && targetEvent && prevInternalSelectedSectionId . current !== id ) {
122- onSelectedSectionChange (
120+ const onSelectedSectionChangeRef = useRef ( onSelectedSectionChange ) ;
121+ // Keep ref in sync with prop to avoid stale closure in debounced function
122+ onSelectedSectionChangeRef . current = onSelectedSectionChange ;
123+
124+ const fireOnSelectedChangedEvent = ( targetEvent , index : number | string , id : string , section ) => {
125+ if (
126+ typeof onSelectedSectionChangeRef . current === 'function' &&
127+ targetEvent &&
128+ prevInternalSelectedSectionId . current !== id
129+ ) {
130+ onSelectedSectionChangeRef . current (
123131 enrichEventWithDetails ( targetEvent , {
124- selectedSectionIndex : parseInt ( index , 10 ) ,
132+ selectedSectionIndex : typeof index === 'number' ? index : parseInt ( index , 10 ) ,
125133 selectedSectionId : id ,
126134 section,
127135 } ) ,
@@ -151,6 +159,27 @@ const ObjectPage = forwardRef<ObjectPageDomRef, ObjectPagePropTypes>((props, ref
151159 ) ;
152160 const scrollPaddingBlock = `${ Math . ceil ( 12 + topHeaderHeight + TAB_CONTAINER_HEADER_HEIGHT + ( ! headerCollapsed && headerPinned ? headerContentHeight : 0 ) ) } px ${ footerArea ? 'calc(var(--_ui5wcr-BarHeight) + 1.25rem)' : 0 } ` ;
153161
162+ const onToggleHeaderContentVisibility = ( e ) => {
163+ isToggledRef . current = true ;
164+ scrollTimeout . current = performance . now ( ) + 500 ;
165+ setToggledCollapsedHeaderWasVisible ( false ) ;
166+ if ( ! e . detail . visible ) {
167+ if ( objectPageRef . current . scrollTop <= headerContentHeight ) {
168+ setToggledCollapsedHeaderWasVisible ( true ) ;
169+ if ( firstSectionId === internalSelectedSectionId || mode === ObjectPageMode . IconTabBar ) {
170+ objectPageRef . current . scrollTop = 0 ;
171+ }
172+ }
173+ setHeaderCollapsedInternal ( true ) ;
174+ setScrolledHeaderExpanded ( false ) ;
175+ } else {
176+ setHeaderCollapsedInternal ( false ) ;
177+ if ( objectPageRef . current . scrollTop >= headerContentHeight && objectPageRef . current . scrollTop > 0 ) {
178+ setScrolledHeaderExpanded ( true ) ;
179+ }
180+ }
181+ } ;
182+
154183 useEffect ( ( ) => {
155184 if ( typeof onToggleHeaderArea === 'function' && isToggledRef . current ) {
156185 onToggleHeaderArea ( headerCollapsed !== true ) ;
@@ -301,7 +330,7 @@ const ObjectPage = forwardRef<ObjectPageDomRef, ObjectPagePropTypes>((props, ref
301330 scrollToSectionById ( selectedSubSectionId , true ) ;
302331 isProgrammaticallyScrolled . current = false ;
303332 }
304- } , [ selectedSubSectionId , isProgrammaticallyScrolled . current , sectionSpacer ] ) ;
333+ } , [ selectedSubSectionId , sectionSpacer ] ) ;
305334
306335 useEffect ( ( ) => {
307336 if ( headerPinnedProp !== undefined ) {
@@ -427,27 +456,6 @@ const ObjectPage = forwardRef<ObjectPageDomRef, ObjectPagePropTypes>((props, ref
427456 } ;
428457 } , [ topHeaderHeight , headerContentHeight , currentTabModeSection , children , mode , isHeaderPinnedAndExpanded ] ) ;
429458
430- const onToggleHeaderContentVisibility = ( e ) => {
431- isToggledRef . current = true ;
432- scrollTimeout . current = performance . now ( ) + 500 ;
433- setToggledCollapsedHeaderWasVisible ( false ) ;
434- if ( ! e . detail . visible ) {
435- if ( objectPageRef . current . scrollTop <= headerContentHeight ) {
436- setToggledCollapsedHeaderWasVisible ( true ) ;
437- if ( firstSectionId === internalSelectedSectionId || mode === ObjectPageMode . IconTabBar ) {
438- objectPageRef . current . scrollTop = 0 ;
439- }
440- }
441- setHeaderCollapsedInternal ( true ) ;
442- setScrolledHeaderExpanded ( false ) ;
443- } else {
444- setHeaderCollapsedInternal ( false ) ;
445- if ( objectPageRef . current . scrollTop >= headerContentHeight && objectPageRef . current . scrollTop > 0 ) {
446- setScrolledHeaderExpanded ( true ) ;
447- }
448- }
449- } ;
450-
451459 const { onScroll : _0 , selectedSubSectionId : _1 , ...propsWithoutOmitted } = rest ;
452460
453461 const visibleSectionIds = useRef < Set < string > > ( new Set ( ) ) ;
0 commit comments