@@ -285,6 +285,10 @@ export class SegmentTimelineClass extends React.Component<Translated<WithTiming<
285285 RundownViewEventBus . off ( RundownViewEvents . HIGHLIGHT , this . onHighlight )
286286 RundownViewEventBus . off ( RundownViewEvents . SEGMENT_ZOOM_ON , this . onRundownEventSegmentZoomOn )
287287 RundownViewEventBus . off ( RundownViewEvents . SEGMENT_ZOOM_OFF , this . onRundownEventSegmentZoomOff )
288+
289+ // Break any remaining references to detached DOM elements.
290+ this . timeline = null
291+ this . segmentBlock = null
288292 }
289293
290294 private highlightTimeout : NodeJS . Timeout | undefined
@@ -766,7 +770,6 @@ export class SegmentTimelineClass extends React.Component<Translated<WithTiming<
766770 liveLineHistorySize = { this . props . liveLineHistorySize }
767771 livePosition = { this . props . livePosition }
768772 onScroll = { this . props . onScroll }
769- onCollapseOutputToggle = { this . props . onCollapseOutputToggle }
770773 onFollowLiveLine = { this . props . onFollowLiveLine }
771774 onContextMenu = { this . props . onContextMenu }
772775 onPieceClick = { this . props . onPieceClick }
@@ -842,7 +845,6 @@ export class SegmentTimelineClass extends React.Component<Translated<WithTiming<
842845 liveLineHistorySize = { this . props . liveLineHistorySize }
843846 livePosition = { this . props . livePosition }
844847 onScroll = { this . props . onScroll }
845- onCollapseOutputToggle = { this . props . onCollapseOutputToggle }
846848 onFollowLiveLine = { this . props . onFollowLiveLine }
847849 onContextMenu = { this . props . onContextMenu }
848850 onPieceClick = { this . props . onPieceClick }
@@ -873,6 +875,20 @@ export class SegmentTimelineClass extends React.Component<Translated<WithTiming<
873875 . sort ( ( a , b ) => a . _rank - b . _rank )
874876 }
875877
878+ private isOutputLayerCollapsible ( outputLayer : IOutputLayerUi ) : boolean {
879+ return outputLayer . sourceLayers !== undefined && outputLayer . sourceLayers . length > 1 && ! outputLayer . isFlattened
880+ }
881+
882+ private onOutputLayerLabelClick = ( e : React . MouseEvent < HTMLDivElement > ) => {
883+ const outputLayerId = e . currentTarget . dataset . outputId
884+ if ( ! outputLayerId ) return
885+
886+ const outputLayer = this . props . segment . outputLayers ?. [ outputLayerId ]
887+ if ( ! outputLayer || ! this . isOutputLayerCollapsible ( outputLayer ) ) return
888+
889+ this . props . onCollapseOutputToggle ?.( outputLayer , e )
890+ }
891+
876892 private renderOutputLayerControls ( outputGroups : IOutputLayerUi [ ] ) {
877893 const showHiddenSourceLayers = getShowHiddenSourceLayers ( )
878894
@@ -881,8 +897,7 @@ export class SegmentTimelineClass extends React.Component<Translated<WithTiming<
881897 return null
882898 }
883899
884- const isCollapsible =
885- outputLayer . sourceLayers !== undefined && outputLayer . sourceLayers . length > 1 && ! outputLayer . isFlattened
900+ const isCollapsible = this . isOutputLayerCollapsible ( outputLayer )
886901 return (
887902 < div
888903 key = { outputLayer . _id }
@@ -898,7 +913,7 @@ export class SegmentTimelineClass extends React.Component<Translated<WithTiming<
898913 className = "segment-timeline__output-layer-control__label"
899914 data-output-id = { outputLayer . _id }
900915 tabIndex = { 0 }
901- onClick = { ( e ) => isCollapsible && this . props . onCollapseOutputToggle ?. ( outputLayer , e ) }
916+ onClick = { this . onOutputLayerLabelClick }
902917 role = "presentation"
903918 >
904919 { outputLayer . name }
0 commit comments