From dd64f5bb08d0fcd4c471377c993b7f92a58a20fb Mon Sep 17 00:00:00 2001 From: Maciek Antek Papiewski <41971218+anteeek@users.noreply.github.com> Date: Wed, 7 Jan 2026 04:42:52 +0100 Subject: [PATCH 1/2] SOFIE-282 | fix scroll issues in properties editor --- packages/webui/src/client/ui/RundownView.tsx | 1 + .../ui/RundownView/SelectedElementsContext.tsx | 13 +++++++++++-- .../client/ui/SegmentTimeline/SourceLayerItem.tsx | 11 +++++------ 3 files changed, 17 insertions(+), 8 deletions(-) diff --git a/packages/webui/src/client/ui/RundownView.tsx b/packages/webui/src/client/ui/RundownView.tsx index 3ed1ecc8f7..80478363a5 100644 --- a/packages/webui/src/client/ui/RundownView.tsx +++ b/packages/webui/src/client/ui/RundownView.tsx @@ -1378,6 +1378,7 @@ const RundownViewContent = translateWithTracker {(selectionContext) => { const isPropertiesPanelOpen = selectionContext.listSelectedElements().length > 0 + return (
(undefined) const rundownId = piece ? piece.startRundownId : part ? part.rundownId : segment?.rundownId + const lastValidPiece = useRef(undefined) + useEffect(() => { clearPendingChange() // element id changed so any pending change is for an old element const computation = Tracker.nonreactive(() => Tracker.autorun(() => { - const piece = Pieces.findOne(selectedElement?.elementId) + let piece = Pieces.findOne(selectedElement?.elementId) + + if (!piece && lastValidPiece.current && lastValidPiece.current._id === selectedElement?.elementId) { + piece = lastValidPiece.current + } else if (piece) { + lastValidPiece.current = piece + } + const part = UIParts.findOne({ _id: piece ? piece.startPartId : selectedElement?.elementId }) const segment = Segments.findOne({ _id: part ? part.segmentId : selectedElement?.elementId }) diff --git a/packages/webui/src/client/ui/SegmentTimeline/SourceLayerItem.tsx b/packages/webui/src/client/ui/SegmentTimeline/SourceLayerItem.tsx index 56cc78ce37..e16501b4c0 100644 --- a/packages/webui/src/client/ui/SegmentTimeline/SourceLayerItem.tsx +++ b/packages/webui/src/client/ui/SegmentTimeline/SourceLayerItem.tsx @@ -176,15 +176,14 @@ export const SourceLayerItem = (props: Readonly): JSX.Ele innerPiece.userEditProperties?.globalProperties || innerPiece.userEditProperties?.operations?.length ) + if (!hasEditableContent) return const pieceId = innerPiece._id - if (!selectElementContext.isSelected(pieceId)) { - RundownViewEventBus.emit(RundownViewEvents.CLOSE_NOTIFICATIONS) - selectElementContext.clearAndSetSelection({ type: 'piece', elementId: pieceId }) - } else { - selectElementContext.clearSelections() - } + + RundownViewEventBus.emit(RundownViewEvents.CLOSE_NOTIFICATIONS) + selectElementContext.clearAndSetSelection({ type: 'piece', elementId: pieceId }) + // Until a proper data structure, the only reference is a part. // const partId = this.props.part.instance.part._id // if (!selectElementContext.isSelected(partId)) { From e9f1d141865a3847735263cf2f5ca6f1c334beef Mon Sep 17 00:00:00 2001 From: Maciek Antek Papiewski <41971218+anteeek@users.noreply.github.com> Date: Wed, 7 Jan 2026 05:41:03 +0100 Subject: [PATCH 2/2] SOFIE-283 | enable properties editor for invalid parts --- packages/webui/src/client/styles/rundownView.scss | 2 +- .../webui/src/client/ui/SegmentTimeline/SegmentContextMenu.tsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/webui/src/client/styles/rundownView.scss b/packages/webui/src/client/styles/rundownView.scss index 5fac7716f9..d1f2f6840d 100644 --- a/packages/webui/src/client/styles/rundownView.scss +++ b/packages/webui/src/client/styles/rundownView.scss @@ -1568,7 +1568,7 @@ svg.icon { bottom: 0; right: 1px; z-index: 10; - pointer-events: all; + pointer-events: none; background-image: repeating-linear-gradient( 45deg, var(--invalid-reason-color-transparent) 0%, diff --git a/packages/webui/src/client/ui/SegmentTimeline/SegmentContextMenu.tsx b/packages/webui/src/client/ui/SegmentTimeline/SegmentContextMenu.tsx index b3966b5946..267a0d8fc7 100644 --- a/packages/webui/src/client/ui/SegmentTimeline/SegmentContextMenu.tsx +++ b/packages/webui/src/client/ui/SegmentTimeline/SegmentContextMenu.tsx @@ -139,7 +139,7 @@ export const SegmentContextMenu = withTranslation()( )} )} - {part && !part.instance.part.invalid && timecode !== null && ( + {part && timecode !== null && ( <> this.props.onSetNext(part.instance.part, e)}