Skip to content

Commit 7080d60

Browse files
authored
Merge pull request Sofie-Automation#1412 from nrkno/fix/sofie-3433/sorted-storyboard-sourcelayers
fix(Segment Storyboard): sorted storyboard sourcelayers (SOFIE-3433)
2 parents 1c6e4d8 + d9d4d4c commit 7080d60

File tree

3 files changed

+45
-49
lines changed

3 files changed

+45
-49
lines changed

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

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,10 @@ import { Meteor } from 'meteor/meteor'
2727
import { hidePointerLockCursor, showPointerLockCursor } from '../../lib/PointerLockCursor'
2828
import { SegmentScrollbar } from './SegmentScrollbar'
2929
import { OptionalVelocityComponent } from '../../lib/utilComponents'
30-
import { filterSecondarySourceLayers } from './StoryboardPartSecondaryPieces/StoryboardPartSecondaryPieces'
30+
import {
31+
filterSecondaryOutputLayers,
32+
filterSecondarySourceLayers,
33+
} from './StoryboardPartSecondaryPieces/StoryboardPartSecondaryPieces'
3134
import { SegmentViewMode } from '../SegmentContainer/SegmentViewModes'
3235
import { ErrorBoundary } from '../../lib/ErrorBoundary'
3336
import { SwitchViewModeButton } from '../SegmentContainer/SwitchViewModeButton'
@@ -658,19 +661,17 @@ export const SegmentStoryboard = React.memo(
658661

659662
<div className="segment-timeline__mos-id">{props.segment.externalId}</div>
660663
<div className="segment-timeline__source-layers" role="tree" aria-label={t('Sources')}>
661-
{Object.values<IOutputLayerUi>(props.segment.outputLayers)
662-
.filter((outputGroup) => outputGroup.used)
663-
.map((outputGroup) => (
664-
<div className="segment-timeline__output-group" key={outputGroup._id}>
665-
{filterSecondarySourceLayers(outputGroup.sourceLayers).map((sourceLayer) =>
666-
sourceLayer.pieces.length > 0 ? (
667-
<div className="segment-timeline__source-layer" key={sourceLayer._id} role="treeitem">
668-
{sourceLayer.name}
669-
</div>
670-
) : null
671-
)}
672-
</div>
673-
))}
664+
{filterSecondaryOutputLayers(Object.values<IOutputLayerUi>(props.segment.outputLayers)).map((outputGroup) => (
665+
<div className="segment-timeline__output-group" key={outputGroup._id}>
666+
{filterSecondarySourceLayers(outputGroup.sourceLayers).map((sourceLayer) =>
667+
sourceLayer.pieces.length > 0 ? (
668+
<div className="segment-timeline__source-layer" key={sourceLayer._id} role="treeitem">
669+
{sourceLayer.name}
670+
</div>
671+
) : null
672+
)}
673+
</div>
674+
))}
674675
</div>
675676
<ErrorBoundary>
676677
<SwitchViewModeButton currentMode={SegmentViewMode.Storyboard} onSwitchViewMode={props.onSwitchViewMode} />

packages/webui/src/client/ui/SegmentStoryboard/StoryboardPartSecondaryPieces/StoryboardPartSecondaryPieces.tsx

Lines changed: 29 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,19 @@ interface IProps {
1212

1313
const showHiddenSourceLayers = getShowHiddenSourceLayers()
1414

15+
export function filterSecondaryOutputLayers(outputLayers: IOutputLayerUi[]): IOutputLayerUi[] {
16+
return outputLayers.filter((outputLayer) => outputLayer.used).sort((a, b) => a._rank - b._rank)
17+
}
18+
1519
export function filterSecondarySourceLayers(sourceLayers: ISourceLayerExtended[]): ISourceLayerExtended[] {
16-
return sourceLayers.filter(
17-
(sourceLayer) =>
18-
(showHiddenSourceLayers || !sourceLayer.isHidden) &&
19-
!sourceLayer.onPresenterScreen &&
20-
sourceLayer.type !== SourceLayerType.TRANSITION
21-
)
20+
return sourceLayers
21+
.filter(
22+
(sourceLayer) =>
23+
(showHiddenSourceLayers || !sourceLayer.isHidden) &&
24+
!sourceLayer.onPresenterScreen &&
25+
sourceLayer.type !== SourceLayerType.TRANSITION
26+
)
27+
.sort((a, b) => a._rank - b._rank)
2228
}
2329

2430
export const StoryboardPartSecondaryPieces = React.memo(function StoryboardPartSecondaryPieces({
@@ -27,34 +33,25 @@ export const StoryboardPartSecondaryPieces = React.memo(function StoryboardPartS
2733
}: IProps) {
2834
return (
2935
<div className="segment-storyboard__part__secondary-pieces">
30-
{Object.values<IOutputLayerUi>(outputLayers)
31-
.filter((outputLayer) => outputLayer.used)
32-
.map((outputLayer) => {
33-
const sourceLayers = filterSecondarySourceLayers(
34-
Object.values<ISourceLayerExtended>(outputLayer.sourceLayers)
35-
)
36+
{filterSecondaryOutputLayers(Object.values<IOutputLayerUi>(outputLayers)).map((outputLayer) => {
37+
const sourceLayers = filterSecondarySourceLayers(Object.values<ISourceLayerExtended>(outputLayer.sourceLayers))
3638

37-
if (sourceLayers.length === 0) return null
39+
if (sourceLayers.length === 0) return null
3840

39-
return (
40-
<div
41-
key={outputLayer._id}
42-
className="segment-storyboard__part__output-group"
43-
data-obj-id={outputLayer._id}
44-
role="log"
45-
aria-live="assertive"
46-
>
47-
{sourceLayers.map((sourceLayer) => (
48-
<StoryboardSourceLayer
49-
key={sourceLayer._id}
50-
sourceLayer={sourceLayer}
51-
pieces={part.pieces}
52-
part={part}
53-
/>
54-
))}
55-
</div>
56-
)
57-
})}
41+
return (
42+
<div
43+
key={outputLayer._id}
44+
className="segment-storyboard__part__output-group"
45+
data-obj-id={outputLayer._id}
46+
role="log"
47+
aria-live="assertive"
48+
>
49+
{sourceLayers.map((sourceLayer) => (
50+
<StoryboardSourceLayer key={sourceLayer._id} sourceLayer={sourceLayer} pieces={part.pieces} part={part} />
51+
))}
52+
</div>
53+
)
54+
})}
5855
</div>
5956
)
6057
})

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

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -882,10 +882,8 @@ export class SegmentTimelineClass extends React.Component<Translated<WithTiming<
882882
if (this.props.segment.outputLayers === undefined) return []
883883

884884
return Object.values<IOutputLayerUi>(this.props.segment.outputLayers)
885-
.sort((a, b) => {
886-
return a._rank - b._rank
887-
})
888885
.filter((group) => group.used)
886+
.sort((a, b) => a._rank - b._rank)
889887
}
890888

891889
private renderOutputLayerControls(outputGroups: IOutputLayerUi[]) {

0 commit comments

Comments
 (0)