@@ -9,21 +9,31 @@ import {
99 SegmentId ,
1010} from '@sofie-automation/corelib/dist/dataModel/Ids'
1111import { ReadonlyDeep } from 'type-fest'
12- import { diffAndReturnLatestObjects , DocumentChanges , getDocumentChanges , setValuesAndTrackChanges } from './utils'
12+ import {
13+ diffAndReturnLatestObjects ,
14+ DocumentChanges ,
15+ getDocumentChanges ,
16+ setValuesAndTrackChanges ,
17+ setValuesAndTrackChangesFunc ,
18+ } from './utils'
1319import type { IngestExpectedPackage } from '../IngestExpectedPackage'
20+ import { ExpectedPackageDBType } from '@sofie-automation/corelib/dist/dataModel/ExpectedPackages'
1421
15- function mutateExpectedPackage ( oldObj : IngestExpectedPackage , newObj : IngestExpectedPackage ) : IngestExpectedPackage {
22+ function mutateExpectedPackage < TPackageSource extends { fromPieceType : ExpectedPackageDBType } > (
23+ oldObj : IngestExpectedPackage < TPackageSource > ,
24+ newObj : IngestExpectedPackage < TPackageSource >
25+ ) : IngestExpectedPackage < TPackageSource > {
1626 return {
1727 ...newObj ,
1828 // Retain the created property
1929 created : oldObj . created ,
2030 }
2131}
2232
23- export class ExpectedPackagesStore {
33+ export class ExpectedPackagesStore < TPackageSource extends { fromPieceType : ExpectedPackageDBType } > {
2434 #expectedMediaItems: ExpectedMediaItemRundown [ ]
2535 #expectedPlayoutItems: ExpectedPlayoutItemRundown [ ]
26- #expectedPackages: IngestExpectedPackage [ ]
36+ #expectedPackages: IngestExpectedPackage < TPackageSource > [ ]
2737
2838 #expectedMediaItemsWithChanges = new Set < ExpectedMediaItemId > ( )
2939 #expectedPlayoutItemsWithChanges = new Set < ExpectedPlayoutItemId > ( )
@@ -35,8 +45,9 @@ export class ExpectedPackagesStore {
3545 get expectedPlayoutItems ( ) : ReadonlyDeep < ExpectedPlayoutItemRundown [ ] > {
3646 return this . #expectedPlayoutItems
3747 }
38- get expectedPackages ( ) : ReadonlyDeep < IngestExpectedPackage [ ] > {
39- return this . #expectedPackages
48+ get expectedPackages ( ) : ReadonlyDeep < IngestExpectedPackage < TPackageSource > [ ] > {
49+ // Typescript is not happy because of the generic
50+ return this . #expectedPackages as any
4051 }
4152
4253 get hasChanges ( ) : boolean {
@@ -53,7 +64,7 @@ export class ExpectedPackagesStore {
5364 get expectedPlayoutItemsChanges ( ) : DocumentChanges < ExpectedPlayoutItemRundown > {
5465 return getDocumentChanges ( this . #expectedPlayoutItemsWithChanges, this . #expectedPlayoutItems)
5566 }
56- get expectedPackagesChanges ( ) : DocumentChanges < IngestExpectedPackage > {
67+ get expectedPackagesChanges ( ) : DocumentChanges < IngestExpectedPackage < TPackageSource > > {
5768 return getDocumentChanges ( this . #expectedPackagesWithChanges, this . #expectedPackages)
5869 }
5970
@@ -74,7 +85,7 @@ export class ExpectedPackagesStore {
7485 partId : PartId | undefined ,
7586 expectedMediaItems : ExpectedMediaItemRundown [ ] ,
7687 expectedPlayoutItems : ExpectedPlayoutItemRundown [ ] ,
77- expectedPackages : IngestExpectedPackage [ ]
88+ expectedPackages : IngestExpectedPackage < TPackageSource > [ ]
7889 ) {
7990 this . #rundownId = rundownId
8091 this . #segmentId = segmentId
@@ -98,7 +109,12 @@ export class ExpectedPackagesStore {
98109 }
99110 }
100111
101- setOwnerIds ( rundownId : RundownId , segmentId : SegmentId | undefined , partId : PartId | undefined ) : void {
112+ setOwnerIds (
113+ rundownId : RundownId ,
114+ segmentId : SegmentId | undefined ,
115+ partId : PartId | undefined ,
116+ updatePackageSource : ( source : TPackageSource ) => boolean
117+ ) : void {
102118 this . #rundownId = rundownId
103119 this . #segmentId = segmentId
104120 this . #partId = partId
@@ -111,16 +127,19 @@ export class ExpectedPackagesStore {
111127 rundownId,
112128 partId,
113129 } )
114- // nocommit - reimplement
115- // setValuesAndTrackChanges(this.#expectedPackagesWithChanges, this.#expectedPackages, {
116- // rundownId,
117- // // @ts -expect-error Not all ExpectedPackage types have this property
118- // segmentId,
119- // partId,
120- // })
130+ setValuesAndTrackChangesFunc ( this . #expectedPackagesWithChanges, this . #expectedPackages, ( pkg ) => {
131+ let changed = false
132+
133+ for ( const source of pkg . ingestSources ) {
134+ const sourceChanged = updatePackageSource ( source )
135+ changed = changed || sourceChanged
136+ }
137+
138+ return changed
139+ } )
121140 }
122141
123- compareToPreviousData ( oldStore : ExpectedPackagesStore ) : void {
142+ compareToPreviousData ( oldStore : ExpectedPackagesStore < TPackageSource > ) : void {
124143 // Diff the objects, but don't update the stored copies
125144 diffAndReturnLatestObjects (
126145 this . #expectedPlayoutItemsWithChanges,
@@ -166,19 +185,12 @@ export class ExpectedPackagesStore {
166185 newExpectedMediaItems
167186 )
168187 }
169- setExpectedPackages ( expectedPackages : IngestExpectedPackage [ ] ) : void {
170- // nocommit - the whole packages flow needs reimplementing
171- // const newExpectedPackages: IngestExpectedPackage[] = expectedPackages.map((pkg) => ({
172- // ...pkg,
173- // partId: this.#partId,
174- // segmentId: this.#segmentId,
175- // rundownId: this.#rundownId,
176- // }))
177- // this.#expectedPackages = diffAndReturnLatestObjects(
178- // this.#expectedPackagesWithChanges,
179- // this.#expectedPackages,
180- // newExpectedPackages,
181- // mutateExpectedPackage
182- // )
188+ setExpectedPackages ( expectedPackages : IngestExpectedPackage < TPackageSource > [ ] ) : void {
189+ this . #expectedPackages = diffAndReturnLatestObjects (
190+ this . #expectedPackagesWithChanges,
191+ this . #expectedPackages,
192+ expectedPackages ,
193+ mutateExpectedPackage
194+ )
183195 }
184196}
0 commit comments