@@ -67,14 +67,12 @@ export class PlayoutRundownModelImpl implements PlayoutRundownModel {
6767 const existingSegment = this . segments . find ( ( s ) => s . segment . orphaned === SegmentOrphanedReason . SCRATCHPAD )
6868 if ( existingSegment ) throw UserError . create ( UserErrorMessage . ScratchpadAlreadyActive )
6969
70- const minSegmentRank = Math . min ( 0 , ...this . segments . map ( ( s ) => s . segment . _rank ) )
71-
7270 const segmentId : SegmentId = getRandomId ( )
7371 this . #segments. unshift (
7472 new PlayoutSegmentModelImpl (
7573 {
7674 _id : segmentId ,
77- _rank : minSegmentRank - 1 ,
75+ _rank : calculateRankForScratchpadSegment ( this . #segments ) ,
7876 externalId : '__scratchpad__' ,
7977 externalModified : getCurrentTime ( ) ,
8078 rundownId : this . rundown . _id ,
@@ -105,13 +103,24 @@ export class PlayoutRundownModelImpl implements PlayoutRundownModel {
105103 return this . #segments. find ( ( s ) => s . segment . orphaned === SegmentOrphanedReason . SCRATCHPAD )
106104 }
107105
108- setScratchpadSegmentRank ( rank : number ) : void {
106+ updateScratchpadSegmentRank ( ) : void {
109107 const segment = this . #segments. find ( ( s ) => s . segment . orphaned === SegmentOrphanedReason . SCRATCHPAD )
110- if ( ! segment ) throw new Error ( 'Scratchpad segment does not exist!' )
108+ if ( ! segment ) return
111109
112- segment . setScratchpadRank ( rank )
110+ segment . setScratchpadRank ( calculateRankForScratchpadSegment ( this . #segments ) )
113111 this . #segments. sort ( ( a , b ) => a . segment . _rank - b . segment . _rank )
114112
115113 this . #scratchPadSegmentHasChanged = true
116114 }
117115}
116+
117+ function calculateRankForScratchpadSegment ( segments : readonly PlayoutSegmentModel [ ] ) {
118+ // Ensure the _rank is just before the real content
119+
120+ return (
121+ Math . min (
122+ 0 ,
123+ ...segments . map ( ( s ) => ( s . segment . orphaned === SegmentOrphanedReason . SCRATCHPAD ? 0 : s . segment . _rank ) )
124+ ) - 1
125+ )
126+ }
0 commit comments