@@ -287,6 +287,10 @@ export class SegmentTimelineClass extends React.Component<Translated<WithTiming<
287287 RundownViewEventBus . off ( RundownViewEvents . HIGHLIGHT , this . onHighlight )
288288 RundownViewEventBus . off ( RundownViewEvents . SEGMENT_ZOOM_ON , this . onRundownEventSegmentZoomOn )
289289 RundownViewEventBus . off ( RundownViewEvents . SEGMENT_ZOOM_OFF , this . onRundownEventSegmentZoomOff )
290+
291+ // Break any remaining references to detached DOM elements.
292+ this . timeline = null
293+ this . segmentBlock = null
290294 }
291295
292296 private highlightTimeout : NodeJS . Timeout | undefined
@@ -768,7 +772,6 @@ export class SegmentTimelineClass extends React.Component<Translated<WithTiming<
768772 liveLineHistorySize = { this . props . liveLineHistorySize }
769773 livePosition = { this . props . livePosition }
770774 onScroll = { this . props . onScroll }
771- onCollapseOutputToggle = { this . props . onCollapseOutputToggle }
772775 onFollowLiveLine = { this . props . onFollowLiveLine }
773776 onContextMenu = { this . props . onContextMenu }
774777 onPieceClick = { this . props . onPieceClick }
@@ -844,7 +847,6 @@ export class SegmentTimelineClass extends React.Component<Translated<WithTiming<
844847 liveLineHistorySize = { this . props . liveLineHistorySize }
845848 livePosition = { this . props . livePosition }
846849 onScroll = { this . props . onScroll }
847- onCollapseOutputToggle = { this . props . onCollapseOutputToggle }
848850 onFollowLiveLine = { this . props . onFollowLiveLine }
849851 onContextMenu = { this . props . onContextMenu }
850852 onPieceClick = { this . props . onPieceClick }
@@ -875,6 +877,20 @@ export class SegmentTimelineClass extends React.Component<Translated<WithTiming<
875877 . sort ( ( a , b ) => a . _rank - b . _rank )
876878 }
877879
880+ private isOutputLayerCollapsible ( outputLayer : IOutputLayerUi ) : boolean {
881+ return outputLayer . sourceLayers !== undefined && outputLayer . sourceLayers . length > 1 && ! outputLayer . isFlattened
882+ }
883+
884+ private onOutputLayerLabelClick = ( e : React . MouseEvent < HTMLDivElement > ) => {
885+ const outputLayerId = e . currentTarget . dataset . outputId
886+ if ( ! outputLayerId ) return
887+
888+ const outputLayer = this . props . segment . outputLayers ?. [ outputLayerId ]
889+ if ( ! outputLayer || ! this . isOutputLayerCollapsible ( outputLayer ) ) return
890+
891+ this . props . onCollapseOutputToggle ?.( outputLayer , e )
892+ }
893+
878894 private renderOutputLayerControls ( outputGroups : IOutputLayerUi [ ] ) {
879895 const showHiddenSourceLayers = getShowHiddenSourceLayers ( )
880896
@@ -883,8 +899,7 @@ export class SegmentTimelineClass extends React.Component<Translated<WithTiming<
883899 return null
884900 }
885901
886- const isCollapsible =
887- outputLayer . sourceLayers !== undefined && outputLayer . sourceLayers . length > 1 && ! outputLayer . isFlattened
902+ const isCollapsible = this . isOutputLayerCollapsible ( outputLayer )
888903 return (
889904 < div
890905 key = { outputLayer . _id }
@@ -900,7 +915,7 @@ export class SegmentTimelineClass extends React.Component<Translated<WithTiming<
900915 className = "segment-timeline__output-layer-control__label"
901916 data-output-id = { outputLayer . _id }
902917 tabIndex = { 0 }
903- onClick = { ( e ) => isCollapsible && this . props . onCollapseOutputToggle ?. ( outputLayer , e ) }
918+ onClick = { this . onOutputLayerLabelClick }
904919 role = "presentation"
905920 >
906921 { outputLayer . name }
0 commit comments