Skip to content

Commit 5f5e5c5

Browse files
authored
Merge pull request #58 from bbc/bbc/ui-piece-retiming
feat: UI piece retiming (BBC release53)
2 parents d5488fb + 449b0d5 commit 5f5e5c5

File tree

16 files changed

+600
-234
lines changed

16 files changed

+600
-234
lines changed

meteor/server/publications/partInstancesUI/reactiveContentCache.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import { MongoFieldSpecifierOnesStrict, MongoFieldSpecifierZeroes } from '@sofie
55
import { DBRundownPlaylist } from '@sofie-automation/corelib/dist/dataModel/RundownPlaylist'
66
import { DBStudio, IStudioSettings } from '@sofie-automation/corelib/dist/dataModel/Studio'
77
import { DBPartInstance } from '@sofie-automation/corelib/dist/dataModel/PartInstance'
8-
import { DBPart } from '@sofie-automation/corelib/dist/dataModel/Part'
98
import { StudioId } from '@sofie-automation/corelib/dist/dataModel/Ids'
109
import { DBPart } from '@sofie-automation/corelib/dist/dataModel/Part'
1110

packages/blueprints-integration/src/ingest.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,7 @@ export enum DefaultUserOperationsTypes {
130130
REVERT_RUNDOWN = '__sofie-revert-rundown',
131131
UPDATE_PROPS = '__sofie-update-props',
132132
IMPORT_MOS_ITEM = '__sofie-import-mos',
133+
RETIME_PIECE = '__sofie-retime-piece',
133134
}
134135

135136
export interface DefaultUserOperationRevertRundown {
@@ -161,12 +162,24 @@ export type DefaultUserOperationImportMOSItem = {
161162
payload: any
162163
}
163164

165+
export type DefaultUserOperationRetimePiece = {
166+
id: DefaultUserOperationsTypes.RETIME_PIECE
167+
payload: {
168+
segmentExternalId: string
169+
partExternalId: string
170+
171+
inPoint: number
172+
// note - at some point this could also include an updated duration
173+
}
174+
}
175+
164176
export type DefaultUserOperations =
165177
| DefaultUserOperationRevertRundown
166178
| DefaultUserOperationRevertSegment
167179
| DefaultUserOperationRevertPart
168180
| DefaultUserOperationEditProperties
169181
| DefaultUserOperationImportMOSItem
182+
| DefaultUserOperationRetimePiece
170183

171184
export interface UserOperationChange<TCustomBlueprintOperations extends { id: string } = never> {
172185
/** Indicate that this change is from user operations */

packages/blueprints-integration/src/triggers.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -272,6 +272,12 @@ export interface IShelfAction extends ITriggeredActionBase {
272272
filterChain: IGUIContextFilterLink[]
273273
}
274274

275+
export interface IEditModeAction extends ITriggeredActionBase {
276+
action: ClientActions.editMode
277+
state: true | false | 'toggle'
278+
filterChain: IGUIContextFilterLink[]
279+
}
280+
275281
export interface IGoToOnAirLineAction extends ITriggeredActionBase {
276282
action: ClientActions.goToOnAirLine
277283
filterChain: IGUIContextFilterLink[]
@@ -325,6 +331,7 @@ export type SomeAction =
325331
| IRundownPlaylistResetAction
326332
| IRundownPlaylistResyncAction
327333
| IShelfAction
334+
| IEditModeAction
328335
| IGoToOnAirLineAction
329336
| IRewindSegmentsAction
330337
| IShowEntireCurrentSegmentAction

packages/corelib/src/dataModel/UserEditingDefinitions.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,12 @@ export interface CoreUserEditingDefinitionForm {
4747
translationNamespaces: string[]
4848
}
4949

50+
export interface CoreUserEditingDefinitionSofie {
51+
type: UserEditingType.SOFIE
52+
/** Id of this operation */
53+
id: DefaultUserOperationsTypes
54+
}
55+
5056
export interface CoreUserEditingProperties {
5157
/**
5258
* These properties are dependent on the (primary) piece type, the user will get the option

packages/job-worker/src/blueprints/context/lib.ts

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -551,27 +551,27 @@ function translateUserEditsToBlueprint(
551551
userEdits.map((userEdit) => {
552552
switch (userEdit.type) {
553553
case UserEditingType.ACTION:
554-
return {
554+
return literal<UserEditingDefinitionAction>({
555555
type: UserEditingType.ACTION,
556556
id: userEdit.id,
557557
label: omit(userEdit.label, 'namespaces'),
558558
icon: userEdit.icon,
559559
iconInactive: userEdit.iconInactive,
560560
isActive: userEdit.isActive,
561-
} satisfies Complete<UserEditingDefinitionAction>
561+
})
562562
case UserEditingType.FORM:
563-
return {
563+
return literal<UserEditingDefinitionForm>({
564564
type: UserEditingType.FORM,
565565
id: userEdit.id,
566566
label: omit(userEdit.label, 'namespaces'),
567567
schema: clone(userEdit.schema),
568568
currentValues: clone(userEdit.currentValues),
569-
} satisfies Complete<UserEditingDefinitionForm>
569+
})
570570
case UserEditingType.SOFIE:
571-
return {
571+
return literal<UserEditingDefinitionSofieDefault>({
572572
type: UserEditingType.SOFIE,
573573
id: userEdit.id,
574-
} satisfies Complete<UserEditingDefinitionSofieDefault>
574+
})
575575
default:
576576
assertNever(userEdit)
577577
return undefined
@@ -613,28 +613,28 @@ export function translateUserEditsFromBlueprint(
613613
userEdits.map((userEdit) => {
614614
switch (userEdit.type) {
615615
case UserEditingType.ACTION:
616-
return {
616+
return literal<CoreUserEditingDefinitionAction>({
617617
type: UserEditingType.ACTION,
618618
id: userEdit.id,
619619
label: wrapTranslatableMessageFromBlueprints(userEdit.label, blueprintIds),
620620
icon: userEdit.icon,
621621
iconInactive: userEdit.iconInactive,
622622
isActive: userEdit.isActive,
623-
} satisfies Complete<CoreUserEditingDefinitionAction>
623+
})
624624
case UserEditingType.FORM:
625-
return {
625+
return literal<CoreUserEditingDefinitionForm>({
626626
type: UserEditingType.FORM,
627627
id: userEdit.id,
628628
label: wrapTranslatableMessageFromBlueprints(userEdit.label, blueprintIds),
629629
schema: clone(userEdit.schema),
630630
currentValues: clone(userEdit.currentValues),
631631
translationNamespaces: unprotectStringArray(blueprintIds),
632-
} satisfies Complete<CoreUserEditingDefinitionForm>
632+
})
633633
case UserEditingType.SOFIE:
634-
return {
634+
return literal<CoreUserEditingDefinitionSofie>({
635635
type: UserEditingType.SOFIE,
636636
id: userEdit.id,
637-
} satisfies Complete<CoreUserEditingDefinitionSofie>
637+
})
638638
default:
639639
assertNever(userEdit)
640640
return undefined

packages/meteor-lib/src/triggers/RundownViewEventBus.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ export enum RundownViewEvents {
2929
REVEAL_IN_SHELF = 'revealInShelf',
3030
SWITCH_SHELF_TAB = 'switchShelfTab',
3131
SHELF_STATE = 'shelfState',
32+
EDIT_MODE = 'editMode',
3233
MINI_SHELF_QUEUE_ADLIB = 'miniShelfQueueAdLib',
3334
GO_TO_PART = 'goToPart',
3435
GO_TO_PART_INSTANCE = 'goToPartInstance',
@@ -74,6 +75,10 @@ export interface ShelfStateEvent extends IEventContext {
7475
state: boolean | 'toggle'
7576
}
7677

78+
export interface EditModeEvent extends IEventContext {
79+
state: boolean | 'toggle'
80+
}
81+
7782
export interface MiniShelfQueueAdLibEvent extends IEventContext {
7883
forward: boolean
7984
}
@@ -139,6 +144,7 @@ export interface RundownViewEventBusEvents {
139144
[RundownViewEvents.SEGMENT_ZOOM_ON]: []
140145
[RundownViewEvents.SEGMENT_ZOOM_OFF]: []
141146
[RundownViewEvents.SHELF_STATE]: [e: ShelfStateEvent]
147+
[RundownViewEvents.EDIT_MODE]: [e: EditModeEvent]
142148
[RundownViewEvents.REVEAL_IN_SHELF]: [e: RevealInShelfEvent]
143149
[RundownViewEvents.SWITCH_SHELF_TAB]: [e: SwitchToShelfTabEvent]
144150
[RundownViewEvents.MINI_SHELF_QUEUE_ADLIB]: [e: MiniShelfQueueAdLibEvent]

packages/meteor-lib/src/triggers/actionFactory.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -286,6 +286,17 @@ function createShelfAction(_filterChain: IGUIContextFilterLink[], state: boolean
286286
}
287287
}
288288

289+
function createEditModeAction(_filterChain: IGUIContextFilterLink[], state: boolean | 'toggle'): ExecutableAction {
290+
return {
291+
action: ClientActions.editMode,
292+
execute: () => {
293+
RundownViewEventBus.emit(RundownViewEvents.EDIT_MODE, {
294+
state,
295+
})
296+
},
297+
}
298+
}
299+
289300
function createMiniShelfQueueAdLibAction(_filterChain: IGUIContextFilterLink[], forward: boolean): ExecutableAction {
290301
return {
291302
action: ClientActions.miniShelfQueueAdLib,
@@ -442,6 +453,8 @@ export function createAction(
442453
switch (action.action) {
443454
case ClientActions.shelf:
444455
return createShelfAction(action.filterChain, action.state)
456+
case ClientActions.editMode:
457+
return createEditModeAction(action.filterChain, action.state)
445458
case ClientActions.goToOnAirLine:
446459
return createGoToOnAirLineAction(action.filterChain)
447460
case ClientActions.rewindSegments:

packages/shared-lib/src/core/model/ShowStyle.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,7 @@ export enum ClientActions {
107107
'rewindSegments' = 'rewindSegments',
108108
'showEntireCurrentSegment' = 'showEntireCurrentSegment',
109109
'miniShelfQueueAdLib' = 'miniShelfQueueAdLib',
110+
'editMode' = 'editMode',
110111
}
111112

112113
export enum DeviceActions {

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

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,8 @@ export function pieceUiClassNames(
1919
uiState?: {
2020
leftAnchoredWidth: number
2121
rightAnchoredWidth: number
22-
}
22+
},
23+
draggable?: boolean
2324
): string {
2425
const typeClass = layerType ? RundownUtils.getSourceLayerClassName(layerType) : ''
2526

@@ -59,5 +60,7 @@ export function pieceUiClassNames(
5960
'invert-flash': highlight,
6061

6162
'element-selected': selected,
63+
64+
'draggable-element': draggable,
6265
})
6366
}

packages/webui/src/client/styles/elementSelected.scss

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,3 +18,7 @@ $glow-color: rgba(255, 255, 255, 0.58);
1818
}
1919
}
2020
}
21+
22+
.draggable-element {
23+
border: dotted white 1px;
24+
}

0 commit comments

Comments
 (0)