Skip to content

Commit a67ee14

Browse files
committed
chore: replace various uses of withTiming with useTiming
1 parent 7216154 commit a67ee14

28 files changed

+284
-363
lines changed
Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,17 @@
11
import React, { PropsWithChildren, useMemo } from 'react'
22
import { PartId } from '@sofie-automation/corelib/dist/dataModel/Ids'
3-
import { TimingDataResolution, TimingTickResolution, withTiming } from '../../RundownView/RundownTiming/withTiming.js'
3+
import { TimingDataResolution, TimingTickResolution, useTiming } from '../../RundownView/RundownTiming/withTiming.js'
44
import { protectStringArray } from '@sofie-automation/corelib/dist/protectedString'
55

66
export const OrderedPartsContext = React.createContext<PartId[]>([])
77

8-
export const OrderedPartsProvider = withTiming<PropsWithChildren<{}>, {}>({
9-
dataResolution: TimingDataResolution.Synced,
10-
tickResolution: TimingTickResolution.Low,
11-
})(function OrderedPartsProvider({ timingDurations, children }) {
8+
export function OrderedPartsProvider({ children }: PropsWithChildren): JSX.Element {
9+
const timingDurations = useTiming(TimingTickResolution.Low, TimingDataResolution.Synced)
10+
1211
const orderedPartIds = useMemo(
1312
() => protectStringArray<PartId>(timingDurations.partCountdown ? Object.keys(timingDurations.partCountdown) : []),
1413
[Object.keys(timingDurations.partCountdown ?? {}).join(',')]
1514
)
1615

1716
return <OrderedPartsContext.Provider value={orderedPartIds}>{children}</OrderedPartsContext.Provider>
18-
})
17+
}

packages/webui/src/client/ui/ClockView/CameraScreen/Part.tsx

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import { AutoNextStatus } from '../../RundownView/RundownTiming/AutoNextStatus.j
1010
import { CurrentPartOrSegmentRemaining } from '../../RundownView/RundownTiming/CurrentPartOrSegmentRemaining.js'
1111
import { PartCountdown } from '../../RundownView/RundownTiming/PartCountdown.js'
1212
import { PartDisplayDuration } from '../../RundownView/RundownTiming/PartDuration.js'
13-
import { TimingDataResolution, TimingTickResolution, withTiming } from '../../RundownView/RundownTiming/withTiming.js'
13+
import { TimingDataResolution, TimingTickResolution, useTiming } from '../../RundownView/RundownTiming/withTiming.js'
1414
import { PartUi } from '../../SegmentContainer/withResolvedSegment.js'
1515
import { Piece } from './Piece.js'
1616

@@ -22,12 +22,11 @@ interface IProps {
2222
isNext: boolean
2323
}
2424

25-
export const Part = withTiming<IProps, {}>({
26-
tickResolution: TimingTickResolution.High,
27-
dataResolution: TimingDataResolution.High,
28-
})(function Part({ playlist, part, piece, timingDurations, isLive, isNext }): JSX.Element | null {
25+
export function Part({ playlist, part, piece, isLive, isNext }: IProps): JSX.Element | null {
2926
const areaZoom = useContext(AreaZoom)
3027

28+
const timingDurations = useTiming(TimingTickResolution.High, TimingDataResolution.High)
29+
3130
let left =
3231
(timingDurations.partCountdown?.[unprotectString(part.partId)] ?? 0) -
3332
(getPartInstanceTimingValue(timingDurations.partPlayed, part.instance) || 0)
@@ -82,4 +81,4 @@ export const Part = withTiming<IProps, {}>({
8281
</div>
8382
</div>
8483
)
85-
})
84+
}

packages/webui/src/client/ui/ClockView/DirectorScreen.tsx

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { DBSegment } from '@sofie-automation/corelib/dist/dataModel/Segment'
33
import { PartUi } from '../SegmentTimeline/SegmentTimelineContainer.js'
44
import { DBRundownPlaylist } from '@sofie-automation/corelib/dist/dataModel/RundownPlaylist'
55
import { Rundown } from '@sofie-automation/corelib/dist/dataModel/Rundown'
6-
import { withTiming, WithTiming } from '../RundownView/RundownTiming/withTiming.js'
6+
import { useTiming } from '../RundownView/RundownTiming/withTiming.js'
77
import {
88
useSubscription,
99
useSubscriptions,
@@ -331,9 +331,7 @@ function useDirectorScreenSubscriptions(props: DirectorScreenProps): void {
331331
])
332332
}
333333

334-
function DirectorScreenWithSubscription(
335-
props: WithTiming<DirectorScreenProps & DirectorScreenTrackedProps>
336-
): JSX.Element {
334+
function DirectorScreenWithSubscription(props: DirectorScreenProps & DirectorScreenTrackedProps): JSX.Element {
337335
useDirectorScreenSubscriptions(props)
338336

339337
return <DirectorScreenRender {...props} />
@@ -347,14 +345,15 @@ function DirectorScreenRender({
347345
playlistId,
348346
currentPartInstance,
349347
currentSegment,
350-
timingDurations,
351348
nextPartInstance,
352349
nextSegment,
353350
rundownIds,
354-
}: Readonly<WithTiming<DirectorScreenProps & DirectorScreenTrackedProps>>) {
351+
}: Readonly<DirectorScreenProps & DirectorScreenTrackedProps>) {
355352
useSetDocumentClass('dark', 'xdark')
356353
const { t } = useTranslation()
357354

355+
const timingDurations = useTiming()
356+
358357
if (playlist && playlistId && segments) {
359358
const expectedStart = PlaylistTiming.getExpectedStart(playlist.timing) || 0
360359
const expectedEnd = PlaylistTiming.getExpectedEnd(playlist.timing)
@@ -580,4 +579,4 @@ function DirectorScreenRender({
580579
*/
581580
export const DirectorScreen = withTracker<DirectorScreenProps, {}, DirectorScreenTrackedProps>(
582581
getDirectorScreenReactive
583-
)(withTiming<DirectorScreenProps & DirectorScreenTrackedProps, {}>()(DirectorScreenWithSubscription))
582+
)(DirectorScreenWithSubscription)

packages/webui/src/client/ui/Prompter/OverUnderTimer.tsx

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import * as React from 'react'
2-
import { withTiming, WithTiming } from '../RundownView/RundownTiming/withTiming.js'
2+
import { useTiming } from '../RundownView/RundownTiming/withTiming.js'
33
import { DBRundownPlaylist } from '@sofie-automation/corelib/dist/dataModel/RundownPlaylist'
44
import { RundownUtils } from '../../lib/rundown.js'
55
import ClassNames from 'classnames'
@@ -13,11 +13,9 @@ interface IProps {
1313
/**
1414
* Shows an over/under timer for the rundownPlaylist. Requires a RundownTimingContext from the RundownTimingProvider
1515
*/
16-
export const OverUnderTimer = withTiming<IProps, {}>()(function OverUnderTimer({
17-
rundownPlaylist,
18-
style,
19-
timingDurations,
20-
}: WithTiming<IProps>) {
16+
export function OverUnderTimer({ rundownPlaylist, style }: IProps): JSX.Element {
17+
const timingDurations = useTiming()
18+
2119
const overUnderClock = getPlaylistTimingDiff(rundownPlaylist, timingDurations) ?? 0
2220

2321
return (
@@ -31,4 +29,4 @@ export const OverUnderTimer = withTiming<IProps, {}>()(function OverUnderTimer({
3129
{RundownUtils.formatDiffToTimecode(overUnderClock, true, false, true, true, true, undefined, true, true)}
3230
</span>
3331
)
34-
})
32+
}

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

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ import { StudioRouteSet } from '@sofie-automation/corelib/dist/dataModel/Studio'
3131
import { DBPart } from '@sofie-automation/corelib/dist/dataModel/Part'
3232
import { ContextMenu, MenuItem, ContextMenuTrigger } from '@jstarpl/react-contextmenu'
3333
import { RundownTimingProvider } from './RundownView/RundownTiming/RundownTimingProvider.js'
34-
import { withTiming, WithTiming } from './RundownView/RundownTiming/withTiming.js'
34+
import { useTiming } from './RundownView/RundownTiming/withTiming.js'
3535
import { CurrentPartOrSegmentRemaining } from './RundownView/RundownTiming/CurrentPartOrSegmentRemaining.js'
3636
import { AutoNextStatus } from './RundownView/RundownTiming/AutoNextStatus.js'
3737
import { SegmentTimelineContainer, PieceUi, PartUi, SegmentUi } from './SegmentTimeline/SegmentTimelineContainer.js'
@@ -185,15 +185,16 @@ interface ITimingDisplayProps {
185185
layout: RundownLayoutRundownHeader | undefined
186186
}
187187

188-
const TimingDisplay = withTiming<ITimingDisplayProps, {}>()(function TimingDisplay({
188+
function TimingDisplay({
189189
rundownPlaylist,
190190
currentRundown,
191191
rundownCount,
192192
layout,
193-
timingDurations,
194-
}: WithTiming<ITimingDisplayProps>): JSX.Element | null {
193+
}: ITimingDisplayProps): JSX.Element | null {
195194
const { t } = useTranslation()
196195

196+
const timingDurations = useTiming()
197+
197198
if (!rundownPlaylist) return null
198199

199200
const expectedStart = PlaylistTiming.getExpectedStart(rundownPlaylist.timing)
@@ -257,7 +258,7 @@ const TimingDisplay = withTiming<ITimingDisplayProps, {}>()(function TimingDispl
257258
</div>
258259
</div>
259260
)
260-
})
261+
}
261262

262263
interface IRundownHeaderProps {
263264
playlist: DBRundownPlaylist

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

Lines changed: 24 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -3,36 +3,32 @@ import { PartId, PartInstanceId, SegmentId } from '@sofie-automation/corelib/dis
33
import { SourceLayerType } from '@sofie-automation/blueprints-integration'
44
import { PieceStatusCode } from '@sofie-automation/corelib/dist/dataModel/Piece'
55
import { unprotectString } from '@sofie-automation/corelib/dist/protectedString'
6-
import { TimingDataResolution, TimingTickResolution, withTiming } from '../RundownTiming/withTiming.js'
6+
import { TimingDataResolution, TimingTickResolution, useTiming } from '../RundownTiming/withTiming.js'
77
import { RundownUtils } from '../../../lib/rundown.js'
88
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'
1212

13-
export const MediaStatusPopUpItem = withTiming<
14-
{
15-
partId: PartId | undefined
16-
segmentId: SegmentId | undefined
17-
partInstanceId: PartInstanceId | undefined
18-
status: PieceStatusCode
19-
isWorkingOn: boolean
20-
statusOverlay?: string | undefined
21-
sourceLayerType?: SourceLayerType | undefined
22-
sourceLayerName?: string | undefined
23-
segmentIdentifier?: string | undefined
24-
partIdentifier?: string | undefined
25-
invalid?: boolean | undefined
26-
label: string
27-
isAdLib: boolean
28-
isLive: boolean
29-
isNext: boolean
30-
},
31-
{}
32-
>({
33-
dataResolution: TimingDataResolution.Synced,
34-
tickResolution: TimingTickResolution.Low,
35-
})(function MediaStatusPopUpItem({
13+
interface IMediaStatusPopUpItemProps {
14+
partId: PartId | undefined
15+
segmentId: SegmentId | undefined
16+
partInstanceId: PartInstanceId | undefined
17+
status: PieceStatusCode
18+
isWorkingOn: boolean
19+
statusOverlay?: string | undefined
20+
sourceLayerType?: SourceLayerType | undefined
21+
sourceLayerName?: string | undefined
22+
segmentIdentifier?: string | undefined
23+
partIdentifier?: string | undefined
24+
invalid?: boolean | undefined
25+
label: string
26+
isAdLib: boolean
27+
isLive: boolean
28+
isNext: boolean
29+
}
30+
31+
export function MediaStatusPopUpItem({
3632
partId,
3733
partInstanceId,
3834
segmentId,
@@ -45,11 +41,12 @@ export const MediaStatusPopUpItem = withTiming<
4541
partIdentifier,
4642
invalid,
4743
label,
48-
timingDurations,
4944
isAdLib,
5045
isLive,
5146
isNext,
52-
}): JSX.Element {
47+
}: IMediaStatusPopUpItemProps): JSX.Element {
48+
const timingDurations = useTiming(TimingTickResolution.Low, TimingDataResolution.Synced)
49+
5350
const timingId = unprotectString(partInstanceId ?? partId)
5451
const thisPartCountdown = timingId ? timingDurations.partCountdown?.[timingId] : undefined
5552

@@ -109,4 +106,4 @@ export const MediaStatusPopUpItem = withTiming<
109106
<td className="media-status-popup-item__label">{label}</td>
110107
</tr>
111108
)
112-
})
109+
}

packages/webui/src/client/ui/RundownView/PlaylistLoopingHeader.tsx

Lines changed: 20 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,43 +1,31 @@
1-
import React from 'react'
21
import classNames from 'classnames'
32
import { useTranslation } from 'react-i18next'
43
import Moment from 'react-moment'
54
import { LoopingIcon } from '../../lib/ui/icons/looping.js'
6-
import { WithTiming, withTiming } from './RundownTiming/withTiming.js'
5+
import { useTiming } from './RundownTiming/withTiming.js'
76
import { RundownUtils } from '../../lib/rundown.js'
87

9-
const NextLoopClock = withTiming<{ useWallClock?: boolean }, {}>()(
10-
class NextLoopClock extends React.Component<
11-
WithTiming<{
12-
useWallClock?: boolean
13-
}>
14-
> {
15-
render(): JSX.Element | null {
16-
const { timingDurations, useWallClock } = this.props
8+
function NextLoopClock({ useWallClock }: { useWallClock?: boolean }) {
9+
const timingDurations = useTiming()
1710

18-
if (!timingDurations?.partCountdown) return null
19-
const thisPartCountdown = timingDurations.partCountdown[
20-
Object.keys(timingDurations.partCountdown)[0] // use the countdown to first part of rundown
21-
] as number | undefined
11+
if (!timingDurations?.partCountdown) return null
12+
const thisPartCountdown = timingDurations.partCountdown[
13+
Object.keys(timingDurations.partCountdown)[0] // use the countdown to first part of rundown
14+
] as number | undefined
15+
16+
return (
17+
<span>
18+
{useWallClock ? (
19+
<Moment interval={0} format="HH:mm:ss" date={(timingDurations.currentTime || 0) + (thisPartCountdown || 0)} />
20+
) : (
21+
RundownUtils.formatTimeToShortTime(
22+
thisPartCountdown! // shouldShow will be false if thisPartCountdown is undefined
23+
)
24+
)}
25+
</span>
26+
)
27+
}
2228

23-
return (
24-
<span>
25-
{useWallClock ? (
26-
<Moment
27-
interval={0}
28-
format="HH:mm:ss"
29-
date={(timingDurations.currentTime || 0) + (thisPartCountdown || 0)}
30-
/>
31-
) : (
32-
RundownUtils.formatTimeToShortTime(
33-
thisPartCountdown! // shouldShow will be false if thisPartCountdown is undefined
34-
)
35-
)}
36-
</span>
37-
)
38-
}
39-
}
40-
)
4129
interface ILoopingHeaderProps {
4230
position: 'start' | 'end'
4331
multiRundown?: boolean

packages/webui/src/client/ui/RundownView/RundownDividerHeader.tsx

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { Rundown } from '@sofie-automation/corelib/dist/dataModel/Rundown'
22
import Moment from 'react-moment'
3-
import { TimingDataResolution, TimingTickResolution, withTiming, WithTiming } from './RundownTiming/withTiming.js'
3+
import { TimingDataResolution, TimingTickResolution, useTiming } from './RundownTiming/withTiming.js'
44
import { RundownUtils } from '../../lib/rundown.js'
55
import { useTranslation } from 'react-i18next'
66
import { DBRundownPlaylist } from '@sofie-automation/corelib/dist/dataModel/RundownPlaylist'
@@ -22,16 +22,14 @@ interface MarkerCountdownProps {
2222
* This is a countdown to the rundown's Expected Start or Expected End time. It shows nothing if the expectedStart is undefined
2323
* or the time to Expected Start/End from now is larger than 6 hours.
2424
*/
25-
const MarkerCountdownText = withTiming<MarkerCountdownProps, {}>({
26-
filter: 'currentTime',
27-
tickResolution: TimingTickResolution.Low,
28-
dataResolution: TimingDataResolution.Synced,
29-
})(function MarkerCountdown(props: WithTiming<MarkerCountdownProps>) {
25+
function MarkerCountdownText(props: MarkerCountdownProps) {
3026
const { t } = useTranslation()
3127

28+
const timingDurations = useTiming(TimingTickResolution.Low, TimingDataResolution.Synced, 'currentTime')
29+
3230
if (props.markerTimestamp === undefined) return null
3331

34-
const time = props.markerTimestamp - (props.timingDurations.currentTime || 0)
32+
const time = props.markerTimestamp - (timingDurations.currentTime || 0)
3533

3634
if (time < QUATER_DAY) {
3735
return (
@@ -47,7 +45,7 @@ const MarkerCountdownText = withTiming<MarkerCountdownProps, {}>({
4745
)
4846
}
4947
return null
50-
})
48+
}
5149

5250
/**
5351
* This is a component for showing the title of the rundown, it's expectedStart and expectedDuration and
Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,12 @@
11
import { useTranslation } from 'react-i18next'
2-
import { TimingDataResolution, TimingTickResolution, withTiming, WithTiming } from './withTiming.js'
2+
import { TimingDataResolution, TimingTickResolution, useTiming } from './withTiming.js'
33

4-
export const AutoNextStatus = withTiming<{}, {}>({
5-
filter: 'currentPartWillAutoNext',
6-
dataResolution: TimingDataResolution.High,
7-
tickResolution: TimingTickResolution.High,
8-
})(function AutoNextStatus({ timingDurations }: WithTiming<{}>) {
4+
export function AutoNextStatus(): JSX.Element | null {
95
const { t } = useTranslation()
106

7+
const timingDurations = useTiming(TimingTickResolution.High, TimingDataResolution.High, 'currentPartWillAutoNext')
8+
119
return timingDurations.currentPartWillAutoNext ? (
1210
<div className="rundown-view__part__icon rundown-view__part__icon--auto-next">{t('Auto')}</div>
1311
) : null
14-
})
12+
}

0 commit comments

Comments
 (0)