1- import type { CSSProperties , RefObject } from 'react' ;
2- import { Fragment , useCallback , useEffect , useMemo , useRef , useState } from 'react' ;
1+ import {
2+ Fragment ,
3+ useCallback ,
4+ useEffect ,
5+ useLayoutEffect ,
6+ useMemo ,
7+ useRef ,
8+ useState ,
9+ type CSSProperties ,
10+ type RefObject ,
11+ } from 'react' ;
312import styled from '@emotion/styled' ;
413import * as Sentry from '@sentry/react' ;
514import type { Virtualizer } from '@tanstack/react-virtual' ;
@@ -49,7 +58,7 @@ import {
4958 LogTableRow ,
5059} from 'sentry/views/explore/logs/styles' ;
5160import { LogRowContent } from 'sentry/views/explore/logs/tables/logsTableRow' ;
52- import { useExpandoButton } from 'sentry/views/explore/logs/tables/useExpandoButton' ;
61+ import type { ExpansionState } from 'sentry/views/explore/logs/tables/useExpandoButton' ;
5362import {
5463 OurLogKnownFieldKey ,
5564 type OurLogsResponseItem ,
@@ -91,6 +100,7 @@ type LogsTableProps = {
91100 showVerticalScrollbar ?: boolean ;
92101 } ;
93102 emptyRenderer ?: ( ) => React . ReactNode ;
103+ expansion ?: ExpansionState ;
94104 localOnlyItemFilters ?: {
95105 filterText : string ;
96106 filteredItems : OurLogsResponseItem [ ] ;
@@ -107,6 +117,7 @@ export function LogsInfiniteTable({
107117 embedded = false ,
108118 localOnlyItemFilters,
109119 emptyRenderer,
120+ expansion,
110121 numberAttributes,
111122 stringAttributes,
112123 booleanAttributes,
@@ -252,18 +263,18 @@ export function LogsInfiniteTable({
252263 return terms ;
253264 } , [ search , localOnlyItemFilters ?. filterText ] ) ;
254265
255- const { expanded, expando} = useExpandoButton ( ( ) => {
256- virtualizer . measure ( ) ;
257- } ) ;
258-
259266 const virtualizer = useVirtualizer < HTMLElement , Element > ( {
260267 count : data ?. length ?? 0 ,
261268 estimateSize,
262- overscan : expanded ? 25 : 10 ,
269+ overscan : expansion ?. expanded === false ? 10 : 25 ,
263270 getScrollElement : ( ) => tableBodyRef ?. current ,
264271 getItemKey : ( index : number ) => data ?. [ index ] ?. [ OurLogKnownFieldKey . ID ] ?? index ,
265272 } ) ;
266273
274+ useLayoutEffect ( ( ) => {
275+ virtualizer . measure ( ) ;
276+ } , [ expansion ?. expanded , virtualizer ] ) ;
277+
267278 const virtualItems = virtualizer . getVirtualItems ( ) ;
268279
269280 const firstItem = virtualItems [ 0 ] ?. start ;
@@ -386,13 +397,19 @@ export function LogsInfiniteTable({
386397 }
387398 } , [ hasReplay , firstItemIndex , lastItemIndex , onRowsRendered ] ) ;
388399
389- const handleExpand = useCallback ( ( logItemId : string ) => {
390- setExpandedLogRows ( prev => {
391- const newSet = new Set ( prev ) ;
392- newSet . add ( logItemId ) ;
393- return newSet ;
394- } ) ;
395- } , [ ] ) ;
400+ const handleExpand = useCallback (
401+ ( logItemId : string ) => {
402+ setExpandedLogRows ( prev => {
403+ const newSet = new Set ( prev ) ;
404+ newSet . add ( logItemId ) ;
405+ return newSet ;
406+ } ) ;
407+ if ( expansion ?. expanded === false ) {
408+ expansion . toggle ( ) ;
409+ }
410+ } ,
411+ [ expansion ]
412+ ) ;
396413 const handleExpandHeight = useCallback ( ( logItemId : string , estimatedHeight : number ) => {
397414 setExpandedLogRowsHeights ( prev => ( { ...prev , [ logItemId ] : estimatedHeight } ) ) ;
398415 } , [ ] ) ;
@@ -441,7 +458,6 @@ export function LogsInfiniteTable({
441458
442459 return (
443460 < Fragment >
444- { expando }
445461 < Table
446462 ref = { tableRef }
447463 style = { initialTableStyles }
@@ -463,7 +479,7 @@ export function LogsInfiniteTable({
463479 showHeader = { ! embedded }
464480 ref = { tableBodyRef }
465481 disableBodyPadding = { embeddedStyling ?. disableBodyPadding }
466- expanded = { expanded }
482+ expanded = { expansion ?. expanded !== false }
467483 >
468484 { paddingTop > 0 && (
469485 < TableRow >
@@ -530,7 +546,7 @@ export function LogsInfiniteTable({
530546 ) }
531547 </ LogTableBody >
532548 </ Table >
533- { expanded && (
549+ { expansion ?. expanded !== false && (
534550 < FloatingBackToTopContainer
535551 inReplay = { ! ! embeddedOptions ?. replay }
536552 tableLeft = { tableRef . current ?. getBoundingClientRect ( ) . left ?? 0 }
0 commit comments