@@ -367,6 +367,12 @@ function DirectorScreenRender({
367367
368368 const overUnderClock = getPlaylistTimingDiff ( playlist , timingDurations ) ?? 0
369369
370+ // Show countdown if it is the first segment and the current part is untimed:
371+ const currentSegmentIsFirst = currentSegment ?. _rank === 0
372+ const isFirstPieceAndNoDuration =
373+ ( currentSegmentIsFirst && currentPartInstance ?. instance . part . untimed ) ||
374+ ( currentSegment === undefined && nextPartInstance ?. instance . part . untimed )
375+
370376 return (
371377 < div className = "director-screen" >
372378 < div className = "director-screen__top" >
@@ -405,91 +411,101 @@ function DirectorScreenRender({
405411 // Current Part:
406412 }
407413 < div className = "director-screen__body__part" >
408- < div
409- className = { ClassNames ( 'director-screen__body__segment-name' , {
410- live : currentSegment !== undefined ,
411- } ) }
412- >
413- < AdjustLabelFit
414- label = { currentSegment ?. name || '' }
415- width = { '80vw' }
416- fontFamily = "Roboto Flex"
417- fontSize = "0.9em"
418- minFontWidth = { 70 }
419- defaultWidth = { 100 }
420- defaultOpticalSize = { 100 }
421- useLetterSpacing = { false }
422- hardCutText = { true }
423- />
424- { playlist . currentPartInfo ?. partInstanceId ? (
425- < span className = "director-screen__body__segment__countdown" >
426- < CurrentPartOrSegmentRemaining
427- currentPartInstanceId = { playlist . currentPartInfo ?. partInstanceId || null }
428- heavyClassName = "overtime"
429- preferSegmentTime = { true }
430- />
431- </ span >
432- ) : null }
433- </ div >
434- { currentPartInstance && currentShowStyleBaseId ? (
414+ { ! isFirstPieceAndNoDuration ? (
435415 < >
436- < div className = "director-screen__body__part__piece-icon" >
437- < PieceIconContainer
438- partInstanceId = { currentPartInstance . instance . _id }
439- showStyleBaseId = { currentShowStyleBaseId }
440- rundownIds = { rundownIds }
441- playlistActivationId = { playlist ?. activationId }
416+ < div
417+ className = { ClassNames ( 'director-screen__body__segment-name' , {
418+ live : currentSegment !== undefined ,
419+ } ) }
420+ >
421+ < AdjustLabelFit
422+ label = { currentSegment ?. name || '' }
423+ width = { '80vw' }
424+ fontFamily = "Roboto Flex"
425+ fontSize = "0.9em"
426+ minFontWidth = { 70 }
427+ defaultWidth = { 100 }
428+ defaultOpticalSize = { 100 }
429+ useLetterSpacing = { false }
430+ hardCutText = { true }
442431 />
432+ { playlist . currentPartInfo ?. partInstanceId ? (
433+ < span className = "director-screen__body__segment__countdown" >
434+ < CurrentPartOrSegmentRemaining
435+ currentPartInstanceId = { playlist . currentPartInfo ?. partInstanceId || null }
436+ heavyClassName = "overtime"
437+ preferSegmentTime = { true }
438+ />
439+ </ span >
440+ ) : null }
443441 </ div >
444- < div className = "director-screen__body__part__piece-content" >
445- < div className = "director-screen__body__part__piece-name" >
446- < PieceNameContainer
447- partName = { currentPartInstance . instance . part . title }
448- partInstanceId = { currentPartInstance . instance . _id }
449- showStyleBaseId = { currentShowStyleBaseId }
450- rundownIds = { rundownIds }
451- playlistActivationId = { playlist ?. activationId }
452- autowidth = { {
453- label : '' ,
454- width : '90vw' ,
455- fontFamily : 'Roboto Flex' ,
456- fontSize : '1.5em' ,
457- minFontWidth : 55 ,
458- defaultWidth : 100 ,
459- useLetterSpacing : false ,
460- defaultOpticalSize : 100 ,
461- } }
462- />
463- </ div >
464- < div className = "director-screen__body__part__piece-countdown" >
465- < CurrentPartOrSegmentRemaining
466- currentPartInstanceId = { playlist . currentPartInfo ?. partInstanceId ?? null }
467- heavyClassName = "overtime"
468- />
469- < span className = "auto-next-status" >
470- < AutoNextStatus />
471- </ span > { ' ' }
472- < span className = "freeze-counter" >
473- < PieceFreezeContainer
442+
443+ { currentPartInstance && currentShowStyleBaseId && (
444+ < >
445+ < div className = "director-screen__body__part__piece-icon" >
446+ < PieceIconContainer
474447 partInstanceId = { currentPartInstance . instance . _id }
475448 showStyleBaseId = { currentShowStyleBaseId }
476449 rundownIds = { rundownIds }
477- partAutoNext = { currentPartInstance . instance . part . autoNext || false }
478- partExpectedDuration = { calculatePartInstanceExpectedDurationWithTransition (
479- currentPartInstance . instance
480- ) }
481- partStartedPlayback = { currentPartInstance . instance . timings ?. plannedStartedPlayback }
482450 playlistActivationId = { playlist ?. activationId }
483451 />
484- </ span >
452+ </ div >
453+ < div className = "director-screen__body__part__piece-content" >
454+ < div className = "director-screen__body__part__piece-name" >
455+ < PieceNameContainer
456+ partName = { currentPartInstance . instance . part . title }
457+ partInstanceId = { currentPartInstance . instance . _id }
458+ showStyleBaseId = { currentShowStyleBaseId }
459+ rundownIds = { rundownIds }
460+ playlistActivationId = { playlist ?. activationId }
461+ autowidth = { {
462+ label : '' ,
463+ width : '90vw' ,
464+ fontFamily : 'Roboto Flex' ,
465+ fontSize : '1.5em' ,
466+ minFontWidth : 55 ,
467+ defaultWidth : 100 ,
468+ useLetterSpacing : false ,
469+ defaultOpticalSize : 100 ,
470+ } }
471+ />
472+ </ div >
473+ < div className = "director-screen__body__part__piece-countdown" >
474+ < CurrentPartOrSegmentRemaining
475+ currentPartInstanceId = { playlist . currentPartInfo ?. partInstanceId ?? null }
476+ heavyClassName = "overtime"
477+ />
478+ < span className = "auto-next-status" >
479+ < AutoNextStatus />
480+ </ span > { ' ' }
481+ < span className = "freeze-counter" >
482+ < PieceFreezeContainer
483+ partInstanceId = { currentPartInstance . instance . _id }
484+ showStyleBaseId = { currentShowStyleBaseId }
485+ rundownIds = { rundownIds }
486+ partAutoNext = { currentPartInstance . instance . part . autoNext || false }
487+ partExpectedDuration = { calculatePartInstanceExpectedDurationWithTransition (
488+ currentPartInstance . instance
489+ ) }
490+ partStartedPlayback = { currentPartInstance . instance . timings ?. plannedStartedPlayback }
491+ playlistActivationId = { playlist ?. activationId }
492+ />
493+ </ span >
494+ </ div >
495+ </ div >
496+ </ >
497+ ) }
498+ </ >
499+ ) : (
500+ expectedStart && (
501+ < div className = "director-screen__body__part__timeto-content" >
502+ < div className = "director-screen__body__part__timeto-countdown" >
503+ < Timediff time = { expectedStart - getCurrentTime ( ) } />
485504 </ div >
505+ < div className = "director-screen__body__part__timeto-name" > Time to planned start</ div >
486506 </ div >
487- </ >
488- ) : expectedStart ? (
489- < div className = "director-screen__body__rundown-countdown" >
490- < Timediff time = { expectedStart - getCurrentTime ( ) } />
491- </ div >
492- ) : null }
507+ )
508+ ) }
493509 </ div >
494510 {
495511 // Next Part:
0 commit comments