Skip to content

Commit 373b237

Browse files
anteeekJulusian
authored andcommitted
SOFIE-283 | enable properties editor for invalid parts
1 parent 464b8f5 commit 373b237

File tree

2 files changed

+113
-119
lines changed

2 files changed

+113
-119
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1567,7 +1567,7 @@ svg.icon {
15671567
bottom: 0;
15681568
right: 1px;
15691569
z-index: 10;
1570-
pointer-events: all;
1570+
pointer-events: none;
15711571
background-image: repeating-linear-gradient(
15721572
45deg,
15731573
var(--invalid-reason-color-transparent) 0%,

packages/webui/src/client/ui/SegmentTimeline/SegmentContextMenu.tsx

Lines changed: 112 additions & 118 deletions
Original file line numberDiff line numberDiff line change
@@ -175,144 +175,138 @@ export function SegmentContextMenu({
175175
<hr />
176176
</>
177177
)}
178-
{part &&
179-
isPartNext !== undefined &&
180-
isPartOrphaned !== undefined &&
181-
!part.instance.part.invalid &&
182-
timecode !== null && (
183-
<>
184-
<MenuItem
185-
onClick={(e) => onSetNext(part.instance.part, e)}
186-
disabled={!!part.instance.orphaned || !canSetAsNext}
187-
>
188-
<span
189-
dangerouslySetInnerHTML={{
190-
__html: t(`Set part as <strong>Next</strong>`),
191-
}}
192-
></span>
193-
</MenuItem>
194-
{startsAt !== undefined && part && enablePlayFromAnywhere ? (
195-
<>
178+
{part && isPartNext !== undefined && isPartOrphaned !== undefined && timecode !== null && (
179+
<>
180+
<MenuItem
181+
onClick={(e) => onSetNext(part.instance.part, e)}
182+
disabled={!!part.instance.orphaned || !canSetAsNext}
183+
>
184+
<span
185+
dangerouslySetInnerHTML={{
186+
__html: t(`Set part as <strong>Next</strong>`),
187+
}}
188+
></span>
189+
</MenuItem>
190+
{startsAt !== undefined && part && enablePlayFromAnywhere ? (
191+
<>
192+
<MenuItem
193+
onClick={(e) =>
194+
onSetAsNextFromHere(
195+
part.instance,
196+
playlist?.nextPartInfo?.partInstanceId ?? null,
197+
playlist?.currentPartInfo?.partInstanceId ?? null,
198+
e
199+
)
200+
}
201+
disabled={getIsPlayFromHereDisabled()}
202+
>
203+
<span
204+
dangerouslySetInnerHTML={{
205+
__html: t(
206+
`Set part from ${RundownUtils.formatTimeToShortTime(Math.floor(timecode / 1000) * 1000)} as <strong>Next</strong>`
207+
),
208+
}}
209+
></span>
210+
</MenuItem>
211+
<MenuItem
212+
onClick={(e) =>
213+
onSetAsNextFromHere(
214+
part.instance,
215+
playlist?.nextPartInfo?.partInstanceId ?? null,
216+
playlist?.currentPartInfo?.partInstanceId ?? null,
217+
e,
218+
true
219+
)
220+
}
221+
disabled={getIsPlayFromHereDisabled(true)}
222+
>
223+
<span>
224+
{t(`Play part from ${RundownUtils.formatTimeToShortTime(Math.floor(timecode / 1000) * 1000)}`)}
225+
</span>
226+
</MenuItem>
227+
</>
228+
) : null}
229+
{enableQuickLoop && !RundownResolver.isLoopLocked(playlist) && (
230+
<>
231+
{RundownResolver.isQuickLoopStart(part.partId, playlist) ? (
232+
<MenuItem onClick={(e) => onSetQuickLoopStart(null, e)}>
233+
<span>{t('Clear QuickLoop Start')}</span>
234+
</MenuItem>
235+
) : (
196236
<MenuItem
197237
onClick={(e) =>
198-
onSetAsNextFromHere(
199-
part.instance,
200-
playlist?.nextPartInfo?.partInstanceId ?? null,
201-
playlist?.currentPartInfo?.partInstanceId ?? null,
202-
e
203-
)
238+
onSetQuickLoopStart({ type: QuickLoopMarkerType.PART, id: part.instance.part._id }, e)
204239
}
205-
disabled={getIsPlayFromHereDisabled()}
240+
disabled={!!part.instance.orphaned || !canSetAsNext}
206241
>
207-
<span
208-
dangerouslySetInnerHTML={{
209-
__html: t(
210-
`Set part from ${RundownUtils.formatTimeToShortTime(Math.floor(timecode / 1000) * 1000)} as <strong>Next</strong>`
211-
),
212-
}}
213-
></span>
242+
<span>{t('Set as QuickLoop Start')}</span>
214243
</MenuItem>
244+
)}
245+
{RundownResolver.isQuickLoopEnd(part.partId, playlist) ? (
246+
<MenuItem onClick={(e) => onSetQuickLoopEnd(null, e)}>
247+
<span>{t('Clear QuickLoop End')}</span>
248+
</MenuItem>
249+
) : (
215250
<MenuItem
216251
onClick={(e) =>
217-
onSetAsNextFromHere(
218-
part.instance,
219-
playlist?.nextPartInfo?.partInstanceId ?? null,
220-
playlist?.currentPartInfo?.partInstanceId ?? null,
221-
e,
222-
true
223-
)
252+
onSetQuickLoopEnd({ type: QuickLoopMarkerType.PART, id: part.instance.part._id }, e)
224253
}
225-
disabled={getIsPlayFromHereDisabled(true)}
254+
disabled={!!part.instance.orphaned || !canSetAsNext}
226255
>
227-
<span>
228-
{t(`Play part from ${RundownUtils.formatTimeToShortTime(Math.floor(timecode / 1000) * 1000)}`)}
229-
</span>
256+
<span>{t('Set as QuickLoop End')}</span>
230257
</MenuItem>
231-
</>
232-
) : null}
233-
{enableQuickLoop && !RundownResolver.isLoopLocked(playlist) && (
234-
<>
235-
{RundownResolver.isQuickLoopStart(part.partId, playlist) ? (
236-
<MenuItem onClick={(e) => onSetQuickLoopStart(null, e)}>
237-
<span>{t('Clear QuickLoop Start')}</span>
238-
</MenuItem>
239-
) : (
240-
<MenuItem
241-
onClick={(e) =>
242-
onSetQuickLoopStart({ type: QuickLoopMarkerType.PART, id: part.instance.part._id }, e)
243-
}
244-
disabled={!!part.instance.orphaned || !canSetAsNext}
245-
>
246-
<span>{t('Set as QuickLoop Start')}</span>
247-
</MenuItem>
248-
)}
249-
{RundownResolver.isQuickLoopEnd(part.partId, playlist) ? (
250-
<MenuItem onClick={(e) => onSetQuickLoopEnd(null, e)}>
251-
<span>{t('Clear QuickLoop End')}</span>
252-
</MenuItem>
253-
) : (
254-
<MenuItem
255-
onClick={(e) =>
256-
onSetQuickLoopEnd({ type: QuickLoopMarkerType.PART, id: part.instance.part._id }, e)
257-
}
258-
disabled={!!part.instance.orphaned || !canSetAsNext}
259-
>
260-
<span>{t('Set as QuickLoop End')}</span>
261-
</MenuItem>
262-
)}
263-
</>
264-
)}
258+
)}
259+
</>
260+
)}
261+
262+
<UserEditOperationMenuItems
263+
rundownId={part.instance.rundownId}
264+
targetName={part.instance.part.title}
265+
operationTarget={{
266+
segmentExternalId: segment?.externalId,
267+
partExternalId: part.instance.part.externalId,
268+
pieceExternalId: undefined,
269+
}}
270+
userEditOperations={part.instance.part.userEditOperations}
271+
isFormEditable={isPartEditAble}
272+
/>
265273

274+
{piece && piece.instance.piece.userEditOperations && (
266275
<UserEditOperationMenuItems
267276
rundownId={part.instance.rundownId}
268-
targetName={part.instance.part.title}
277+
targetName={piece.instance.piece.name}
269278
operationTarget={{
270279
segmentExternalId: segment?.externalId,
271280
partExternalId: part.instance.part.externalId,
272-
pieceExternalId: undefined,
281+
pieceExternalId: piece.instance.piece.externalId,
273282
}}
274-
userEditOperations={part.instance.part.userEditOperations}
283+
userEditOperations={piece.instance.piece.userEditOperations as CoreUserEditingDefinition[] | undefined}
275284
isFormEditable={isPartEditAble}
276285
/>
286+
)}
277287

278-
{piece && piece.instance.piece.userEditOperations && (
279-
<UserEditOperationMenuItems
280-
rundownId={part.instance.rundownId}
281-
targetName={piece.instance.piece.name}
282-
operationTarget={{
283-
segmentExternalId: segment?.externalId,
284-
partExternalId: part.instance.part.externalId,
285-
pieceExternalId: piece.instance.piece.externalId,
286-
}}
287-
userEditOperations={
288-
piece.instance.piece.userEditOperations as CoreUserEditingDefinition[] | undefined
289-
}
290-
isFormEditable={isPartEditAble}
291-
/>
292-
)}
293-
294-
{enableUserEdits && (segmentHasEditableContent || partHasEditableContent || pieceHasEditableContent) && (
295-
<>
296-
<hr />
297-
{segmentHasEditableContent && (
298-
<MenuItem onClick={() => onEditProps({ type: 'segment', elementId: part.instance.segmentId })}>
299-
<span>{t('Edit Segment Properties')}</span>
300-
</MenuItem>
301-
)}
302-
{partHasEditableContent && (
303-
<MenuItem onClick={() => onEditProps({ type: 'part', elementId: part.instance.part._id })}>
304-
<span>{t('Edit Part Properties')}</span>
305-
</MenuItem>
306-
)}
307-
{pieceHasEditableContent && piece && (
308-
<MenuItem onClick={() => onEditProps({ type: 'piece', elementId: piece.instance.piece._id })}>
309-
<span>{t('Edit Piece Properties')}</span>
310-
</MenuItem>
311-
)}
312-
</>
313-
)}
314-
</>
315-
)}
288+
{enableUserEdits && (segmentHasEditableContent || partHasEditableContent || pieceHasEditableContent) && (
289+
<>
290+
<hr />
291+
{segmentHasEditableContent && (
292+
<MenuItem onClick={() => onEditProps({ type: 'segment', elementId: part.instance.segmentId })}>
293+
<span>{t('Edit Segment Properties')}</span>
294+
</MenuItem>
295+
)}
296+
{partHasEditableContent && (
297+
<MenuItem onClick={() => onEditProps({ type: 'part', elementId: part.instance.part._id })}>
298+
<span>{t('Edit Part Properties')}</span>
299+
</MenuItem>
300+
)}
301+
{pieceHasEditableContent && piece && (
302+
<MenuItem onClick={() => onEditProps({ type: 'piece', elementId: piece.instance.piece._id })}>
303+
<span>{t('Edit Piece Properties')}</span>
304+
</MenuItem>
305+
)}
306+
</>
307+
)}
308+
</>
309+
)}
316310
</ContextMenu>
317311
</Escape>
318312
) : null

0 commit comments

Comments
 (0)