Skip to content

Commit 95037fc

Browse files
committed
chore: move css class specific functions back into RundownUtils
1 parent 11494c5 commit 95037fc

24 files changed

Lines changed: 84 additions & 101 deletions

File tree

packages/corelib/src/playout/stateCacheResolver.ts

Lines changed: 2 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import _ from 'underscore'
22

33
import {
4-
SourceLayerType,
54
PieceLifespan,
65
IBlueprintActionManifestDisplay,
76
IBlueprintActionManifestDisplayContent,
@@ -10,11 +9,11 @@ import {
109
} from '@sofie-automation/blueprints-integration'
1110
import { SegmentId, RundownId, PartId, PieceId, RundownPlaylistActivationId } from '../dataModel/Ids.js'
1211
import { DBPart, PartExtended } from '../dataModel/Part.js'
13-
import { Piece, PieceExtended, PieceStatusCode } from '../dataModel/Piece.js'
12+
import { Piece, PieceExtended } from '../dataModel/Piece.js'
1413
import { PieceInstance, PieceInstancePiece } from '../dataModel/PieceInstance.js'
1514
import { DBRundownPlaylist, QuickLoopMarkerType } from '../dataModel/RundownPlaylist.js'
1615
import { DBSegment, SegmentExtended, SegmentOrphanedReason } from '../dataModel/Segment.js'
17-
import { assertNever, literal, groupByToMap, Complete } from '../lib.js'
16+
import { literal, groupByToMap, Complete } from '../lib.js'
1817
import { FindOptions, mongoWhereFilter } from '../mongo.js'
1918
import { protectString } from '@sofie-automation/shared-lib/dist/lib/protectedString'
2019
import {
@@ -45,36 +44,6 @@ import {
4544
ResolvedSegmentResult,
4645
} from './stateCacheResolverTypes.js'
4746

48-
export function getSourceLayerClassName(sourceLayerType: SourceLayerType): string {
49-
// CAMERA_MOVEMENT -> "camera-movement"
50-
return ((SourceLayerType[sourceLayerType] || 'unknown-sourceLayer-' + sourceLayerType) + '')
51-
.toLowerCase()
52-
.replace(/_/g, '-')
53-
}
54-
55-
export function getPieceStatusClassName(status: PieceStatusCode | undefined): string | undefined {
56-
switch (status) {
57-
case PieceStatusCode.OK:
58-
case PieceStatusCode.SOURCE_HAS_ISSUES:
59-
case PieceStatusCode.SOURCE_NOT_SET:
60-
return
61-
case PieceStatusCode.SOURCE_BROKEN:
62-
return 'source-broken'
63-
case PieceStatusCode.SOURCE_MISSING:
64-
return 'source-missing'
65-
case PieceStatusCode.SOURCE_UNKNOWN_STATE:
66-
return 'source-unknown-state'
67-
case PieceStatusCode.SOURCE_NOT_READY:
68-
return 'source-not-ready'
69-
case undefined:
70-
case PieceStatusCode.UNKNOWN:
71-
return 'unknown-state'
72-
default:
73-
assertNever(status)
74-
return 'source-unknown-state'
75-
}
76-
}
77-
7847
/** Resolve segment parts/pieces into timeline-friendly UI data. */
7948
export function getResolvedSegment({
8049
showStyleBase: showStyleBaseProp,

packages/webui/src/client/lib/SplitPreviewBox.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import classNames from 'classnames'
22
import React from 'react'
33
import { SplitRole, SplitSubItem } from './ui/splitPreview.js'
4-
import { getSourceLayerClassName } from '@sofie-automation/corelib/src/playout/stateCacheResolver.js'
4+
import { RundownUtils } from './rundown.js'
55

66
export const RenderSplitPreview = React.memo(function RenderSplitPreview({
77
subItems,
@@ -20,7 +20,7 @@ export const RenderSplitPreview = React.memo(function RenderSplitPreview({
2020
<div
2121
className={classNames(
2222
'video-preview',
23-
getSourceLayerClassName(item.type),
23+
RundownUtils.getSourceLayerClassName(item.type),
2424
{
2525
background: item.role === SplitRole.ART,
2626
box: item.role === SplitRole.BOX,

packages/webui/src/client/lib/rundown.ts

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ import { calculatePartInstanceExpectedDurationWithTransition } from '@sofie-auto
2525
import { AdLibPieceUi } from './shelf.js'
2626
import { PieceId, PieceInstanceId, SegmentId } from '@sofie-automation/corelib/dist/dataModel/Ids'
2727
import { PieceInstances, Pieces, Segments } from '../collections/index.js'
28-
import { Piece, PieceUi } from '@sofie-automation/corelib/dist/dataModel/Piece'
28+
import { Piece, PieceStatusCode, PieceUi } from '@sofie-automation/corelib/dist/dataModel/Piece'
2929
import { assertNever } from '@sofie-automation/shared-lib/dist/lib/lib'
3030
import { FindOneOptions, MongoQuery } from '@sofie-automation/corelib/dist/mongo'
3131
import { DBPart } from '@sofie-automation/corelib/dist/dataModel/Part'
@@ -299,6 +299,36 @@ export namespace RundownUtils {
299299
return true
300300
}
301301

302+
export function getSourceLayerClassName(sourceLayerType: SourceLayerType): string {
303+
// CAMERA_MOVEMENT -> "camera-movement"
304+
return ((SourceLayerType[sourceLayerType] || 'unknown-sourceLayer-' + sourceLayerType) + '')
305+
.toLowerCase()
306+
.replace(/_/g, '-')
307+
}
308+
309+
export function getPieceStatusClassName(status: PieceStatusCode | undefined): string | undefined {
310+
switch (status) {
311+
case PieceStatusCode.OK:
312+
case PieceStatusCode.SOURCE_HAS_ISSUES:
313+
case PieceStatusCode.SOURCE_NOT_SET:
314+
return
315+
case PieceStatusCode.SOURCE_BROKEN:
316+
return 'source-broken'
317+
case PieceStatusCode.SOURCE_MISSING:
318+
return 'source-missing'
319+
case PieceStatusCode.SOURCE_UNKNOWN_STATE:
320+
return 'source-unknown-state'
321+
case PieceStatusCode.SOURCE_NOT_READY:
322+
return 'source-not-ready'
323+
case undefined:
324+
case PieceStatusCode.UNKNOWN:
325+
return 'unknown-state'
326+
default:
327+
assertNever(status)
328+
return 'source-unknown-state'
329+
}
330+
}
331+
302332
/** UI wrapper around `corelib.getResolvedSegment` with client-side defaults. */
303333
export function getResolvedSegment(
304334
segmentContext: ResolvedSegmentContext,

packages/webui/src/client/lib/ui/pieceUiClassNames.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import { PieceStatusCode, PieceUi } from '@sofie-automation/corelib/dist/dataMod
44
import classNames from 'classnames'
55
import { ReadonlyDeep } from 'type-fest'
66
import { PieceContentStatusObj } from '@sofie-automation/corelib/dist/dataModel/PieceContentStatus'
7-
import { getSourceLayerClassName } from '@sofie-automation/corelib/src/playout/stateCacheResolver.js'
7+
import { RundownUtils } from '../rundown'
88

99
export function pieceUiClassNames(
1010
pieceInstance: PieceUi,
@@ -21,7 +21,7 @@ export function pieceUiClassNames(
2121
},
2222
draggable?: boolean
2323
): string {
24-
const typeClass = layerType ? getSourceLayerClassName(layerType) : ''
24+
const typeClass = layerType ? RundownUtils.getSourceLayerClassName(layerType) : ''
2525

2626
const innerPiece = pieceInstance.instance.piece
2727

packages/webui/src/client/ui/ClockView/ClockViewPieceIcons/ClockViewRenderers/SplitInputIcon.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import * as React from 'react'
22
import { PieceGeneric } from '@sofie-automation/corelib/dist/dataModel/Piece'
33
import { SplitsContent, SourceLayerType } from '@sofie-automation/blueprints-integration'
44
import { ReadonlyDeep } from 'type-fest'
5-
import { getSourceLayerClassName } from '@sofie-automation/corelib/src/playout/stateCacheResolver.js'
5+
import { RundownUtils } from '../../../../lib/rundown'
66

77
type SplitIconPieceType = ReadonlyDeep<Omit<PieceGeneric, 'timelineObjectsString'>>
88

@@ -34,7 +34,7 @@ export default function SplitInputIcon({ abbreviation, piece, hideLabel }: Reado
3434
if (piece && piece.content) {
3535
const c = piece.content as SplitsContent
3636
const left = (c.boxSourceConfiguration && c.boxSourceConfiguration[0])?.type || SourceLayerType.CAMERA
37-
return getSourceLayerClassName(left)
37+
return RundownUtils.getSourceLayerClassName(left)
3838
}
3939
return 'camera'
4040
}
@@ -43,7 +43,7 @@ export default function SplitInputIcon({ abbreviation, piece, hideLabel }: Reado
4343
if (piece && piece.content) {
4444
const c = piece.content as SplitsContent
4545
const right = (c.boxSourceConfiguration && c.boxSourceConfiguration[1])?.type || SourceLayerType.REMOTE
46-
const sourceType = getSourceLayerClassName(right)
46+
const sourceType = RundownUtils.getSourceLayerClassName(right)
4747
return sourceType + (getLeftSourceType() === sourceType ? ' second' : '')
4848
}
4949
return 'remote'

packages/webui/src/client/ui/PieceIcons/Renderers/SplitInputIcon.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { PieceGeneric } from '@sofie-automation/corelib/dist/dataModel/Piece'
33
import { SplitsContent, SourceLayerType } from '@sofie-automation/blueprints-integration'
44
import classNames from 'classnames'
55
import { ReadonlyDeep } from 'type-fest'
6-
import { getSourceLayerClassName } from '@sofie-automation/corelib/src/playout/stateCacheResolver.js'
6+
import { RundownUtils } from '../../../lib/rundown'
77

88
type SplitIconPieceType = ReadonlyDeep<Omit<PieceGeneric, 'timelineObjectsString'>>
99

@@ -36,7 +36,7 @@ export default class SplitInputIcon extends React.Component<{
3636
if (piece && piece.content) {
3737
const c = piece.content as SplitsContent
3838
const left = (c.boxSourceConfiguration && c.boxSourceConfiguration[0])?.type || SourceLayerType.CAMERA
39-
return getSourceLayerClassName(left)
39+
return RundownUtils.getSourceLayerClassName(left)
4040
}
4141
return 'camera'
4242
}
@@ -45,7 +45,7 @@ export default class SplitInputIcon extends React.Component<{
4545
if (piece && piece.content) {
4646
const c = piece.content as SplitsContent
4747
const right = (c.boxSourceConfiguration && c.boxSourceConfiguration[1])?.type || SourceLayerType.REMOTE
48-
const sourceType = getSourceLayerClassName(right)
48+
const sourceType = RundownUtils.getSourceLayerClassName(right)
4949
return sourceType + (this.getLeftSourceType(piece) === sourceType ? ' second' : '')
5050
}
5151
return 'remote'

packages/webui/src/client/ui/PreviewPopUp/Previews/BoxLayoutPreview.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import classNames from 'classnames'
33
import { useMemo } from 'react'
44
import { getSplitPreview, SplitRole } from '../../../lib/ui/splitPreview.js'
55
import { ReadonlyDeep } from 'type-fest'
6-
import { getSourceLayerClassName } from '@sofie-automation/corelib/src/playout/stateCacheResolver.js'
6+
import { RundownUtils } from '../../../lib/rundown.js'
77

88
interface BoxLayoutPreviewProps {
99
content: {
@@ -31,7 +31,7 @@ export function BoxLayoutPreview({ content }: BoxLayoutPreviewProps): React.Reac
3131
<div
3232
className={classNames(
3333
'video-preview',
34-
getSourceLayerClassName(item.type),
34+
RundownUtils.getSourceLayerClassName(item.type),
3535
{
3636
background: item.role === SplitRole.ART,
3737
box: item.role === SplitRole.BOX,

packages/webui/src/client/ui/PreviewPopUp/Previews/LayerInfoPreview.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,13 @@ import { PreviewContent } from '@sofie-automation/blueprints-integration'
22
import { RundownUtils } from '../../../lib/rundown'
33
import { useTranslation } from 'react-i18next'
44
import classNames from 'classnames'
5-
import { getSourceLayerClassName } from '@sofie-automation/corelib/src/playout/stateCacheResolver'
65

76
type layerInfoContent = Extract<PreviewContent, { type: 'layerInfo' }>
87

98
export function LayerInfoPreview(content: layerInfoContent): React.ReactElement {
109
const { t } = useTranslation()
11-
const sourceLayerClassName = content.layerType !== undefined ? getSourceLayerClassName(content.layerType) : undefined
10+
const sourceLayerClassName =
11+
content.layerType !== undefined ? RundownUtils.getSourceLayerClassName(content.layerType) : undefined
1212

1313
return (
1414
<div className="preview-popUp__element-with-time-info">

packages/webui/src/client/ui/RundownView/MediaStatusPopUp/MediaStatusPopUpItem.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ import classNames from 'classnames'
99
import { MediaStatusIndicator } from '../../MediaStatus/MediaStatusIndicator.js'
1010
import { scrollToPart, scrollToSegment } from '../../../lib/viewPort.js'
1111
import { logger } from '../../../lib/logging.js'
12-
import { getSourceLayerClassName } from '@sofie-automation/corelib/src/playout/stateCacheResolver.js'
1312

1413
interface IMediaStatusPopUpItemProps {
1514
partId: PartId | undefined
@@ -51,7 +50,8 @@ export function MediaStatusPopUpItem({
5150
const timingId = unprotectString(partInstanceId ?? partId)
5251
const thisPartCountdown = timingId ? timingDurations.partCountdown?.[timingId] : undefined
5352

54-
const sourceLayerClassName = sourceLayerType !== undefined ? getSourceLayerClassName(sourceLayerType) : undefined
53+
const sourceLayerClassName =
54+
sourceLayerType !== undefined ? RundownUtils.getSourceLayerClassName(sourceLayerType) : undefined
5555

5656
const onPartIdentifierClick = useCallback(() => {
5757
if (!segmentId || !partId) return

packages/webui/src/client/ui/SegmentContainer/getSplitItems.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import classNames from 'classnames'
22
import { SplitsContent } from '@sofie-automation/blueprints-integration'
33
import { getSplitPreview, SplitRole } from '../../lib/ui/splitPreview.js'
44
import { PieceUi } from '@sofie-automation/corelib/src/dataModel/Piece.js'
5-
import { getSourceLayerClassName } from '@sofie-automation/corelib/src/playout/stateCacheResolver.js'
5+
import { RundownUtils } from '../../lib/rundown.js'
66

77
export function getSplitItems(pieceInstance: PieceUi, baseClassName: string): JSX.Element[] {
88
const splitsContent = pieceInstance.instance.piece.content as SplitsContent
@@ -15,7 +15,7 @@ export function getSplitItems(pieceInstance: PieceUi, baseClassName: string): JS
1515
return (
1616
<div
1717
key={'item-' + item._id}
18-
className={classNames(baseClassName, getSourceLayerClassName(item.type), {
18+
className={classNames(baseClassName, RundownUtils.getSourceLayerClassName(item.type), {
1919
second: array.length > 1 && index > 0 && item.type === array[index - 1].type,
2020
})}
2121
></div>

0 commit comments

Comments
 (0)