Skip to content

Commit 3482091

Browse files
committed
Merge branch 'fix-memory-leaks' into bbc-main-autonext
2 parents 182a043 + ee05a53 commit 3482091

3 files changed

Lines changed: 25 additions & 8 deletions

File tree

packages/webui/src/client/ui/PreviewPopUp/PreviewPopUpContext.tsx

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -460,7 +460,7 @@ export function PreviewPopUpContextProvider({ children }: React.PropsWithChildre
460460
closeSession()
461461
setPreviewSessionKey((prev) => prev + 1)
462462

463-
if (opts?.time) {
463+
if (opts?.time !== undefined) {
464464
setTime(opts.time)
465465
} else {
466466
setTime(null)
@@ -476,7 +476,10 @@ export function PreviewPopUpContextProvider({ children }: React.PropsWithChildre
476476
setPreviewContent(content)
477477

478478
const handle: IPreviewPopUpSession = {
479-
close: closeSession,
479+
close: () => {
480+
if (currentHandle.current !== handle) return
481+
closeSession()
482+
},
480483
update: (contents) => {
481484
if (currentHandle.current !== handle) return
482485
if (isDetachedHTMLElement(anchor)) {

packages/webui/src/client/ui/SegmentTimeline/Parts/SegmentTimelinePart.tsx

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,6 @@ interface IProps {
6969
studio: UIStudio
7070
part: PartUi
7171
timeToPixelRatio: number
72-
onCollapseOutputToggle?: (layer: IOutputLayerUi, event: any) => void
7372
collapsedOutputs: {
7473
[key: string]: boolean
7574
}

packages/webui/src/client/ui/SegmentTimeline/SegmentTimeline.tsx

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)