Skip to content

Commit d43cf78

Browse files
committed
chore: refactor out util
1 parent 3ef6cad commit d43cf78

File tree

4 files changed

+30
-31
lines changed

4 files changed

+30
-31
lines changed

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

Lines changed: 5 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import { CoreUserEditingDefinition } from '@sofie-automation/corelib/dist/dataMo
1717
import * as RundownResolver from '../../lib/RundownResolver.js'
1818
import { SelectedElement } from '../RundownView/SelectedElementsContext.js'
1919
import { DBPartInstance } from '@sofie-automation/corelib/dist/dataModel/PartInstance.js'
20+
import { hasUserEditableContent } from '../UserEditOperations/PropertiesPanel.js'
2021

2122
interface IProps {
2223
onSetNext: (partInstance: DBPartInstance | DBPart | undefined, e: any, offset?: number, take?: boolean) => void
@@ -120,24 +121,9 @@ export function SegmentContextMenu({
120121
part?.instance._id !== playlist.nextPartInfo?.partInstanceId &&
121122
part?.instance._id !== playlist.previousPartInfo?.partInstanceId
122123

123-
const segmentHasEditableContent = !!(
124-
segment?.userEditOperations?.length ||
125-
segment?.userEditProperties?.pieceTypeProperties ||
126-
segment?.userEditProperties?.globalProperties ||
127-
segment?.userEditProperties?.operations?.length
128-
)
129-
const partHasEditableContent = !!(
130-
part?.instance.part.userEditOperations?.length ||
131-
part?.instance.part.userEditProperties?.pieceTypeProperties ||
132-
part?.instance.part.userEditProperties?.globalProperties ||
133-
part?.instance.part.userEditProperties?.operations?.length
134-
)
135-
const pieceHasEditableContent = !!(
136-
piece?.instance.piece.userEditOperations?.length ||
137-
piece?.instance.piece.userEditProperties?.pieceTypeProperties ||
138-
piece?.instance.piece.userEditProperties?.globalProperties ||
139-
piece?.instance.piece.userEditProperties?.operations?.length
140-
)
124+
const segmentHasEditableContent = hasUserEditableContent(segment)
125+
const partHasEditableContent = hasUserEditableContent(part?.instance.part)
126+
const pieceHasEditableContent = hasUserEditableContent(piece?.instance.piece)
141127

142128
const isPartOrphaned: boolean | undefined = part ? part.instance.orphaned !== undefined : undefined
143129

@@ -318,7 +304,7 @@ export function SegmentContextMenu({
318304
<span>{t('Edit Part Properties')}</span>
319305
</MenuItem>
320306
)}
321-
{pieceHasEditableContent && (
307+
{pieceHasEditableContent && piece && (
322308
<MenuItem onClick={() => onEditProps({ type: 'piece', elementId: piece.instance.piece._id })}>
323309
<span>{t('Edit Piece Properties')}</span>
324310
</MenuItem>

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

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ import * as RundownResolver from '../../lib/RundownResolver.js'
5858
import { DBSegment } from '@sofie-automation/corelib/dist/dataModel/Segment'
5959
import { SelectedElementsContext } from '../RundownView/SelectedElementsContext.js'
6060
import { BlueprintAssetIcon } from '../../lib/Components/BlueprintAssetIcon.js'
61+
import { hasUserEditableContent } from '../UserEditOperations/PropertiesPanel.js'
6162

6263
interface IProps {
6364
id: string
@@ -1017,12 +1018,7 @@ export class SegmentTimelineClass extends React.Component<Translated<WithTiming<
10171018
if (this.props.studio.settings.enableUserEdits) {
10181019
const segment = this.props.segment
10191020

1020-
const hasEditableContent = !!(
1021-
segment.userEditOperations?.length ||
1022-
segment.userEditProperties?.pieceTypeProperties ||
1023-
segment.userEditProperties?.globalProperties ||
1024-
segment.userEditProperties?.operations?.length
1025-
)
1021+
const hasEditableContent = hasUserEditableContent(segment)
10261022
if (!hasEditableContent) return
10271023

10281024
if (!selectElementContext.isSelected(segment._id)) {

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

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ import {
3636
PreviewPopUpContext,
3737
} from '../PreviewPopUp/PreviewPopUpContext.js'
3838
import { useRundownViewEventBusListener } from '../../lib/lib.js'
39+
import { hasUserEditableContent } from '../UserEditOperations/PropertiesPanel.js'
3940
const LEFT_RIGHT_ANCHOR_SPACER = 15
4041
const MARGINAL_ANCHORED_WIDTH = 5
4142

@@ -185,12 +186,7 @@ export const SourceLayerItem = (props: Readonly<ISourceLayerItemProps>): JSX.Ele
185186
if (studio?.settings.enableUserEdits && !studio?.settings.allowPieceDirectPlay) {
186187
const innerPiece = piece.instance.piece
187188

188-
const hasEditableContent = !!(
189-
innerPiece.userEditOperations?.length ||
190-
innerPiece.userEditProperties?.pieceTypeProperties ||
191-
innerPiece.userEditProperties?.globalProperties ||
192-
innerPiece.userEditProperties?.operations?.length
193-
)
189+
const hasEditableContent = hasUserEditableContent(innerPiece)
194190
if (!hasEditableContent) return
195191

196192
const pieceId = innerPiece._id

packages/webui/src/client/ui/UserEditOperations/PropertiesPanel.tsx

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,11 @@ import { useCallback, useEffect, useMemo, useState } from 'react'
2222
import { SchemaFormWithState } from '../../lib/forms/SchemaFormWithState.js'
2323
import { translateMessage } from '@sofie-automation/corelib/dist/TranslatableMessage'
2424
import { BlueprintAssetIcon } from '../../lib/Components/BlueprintAssetIcon.js'
25+
import { ReadonlyDeep } from 'type-fest'
26+
import {
27+
CoreUserEditingDefinition,
28+
CoreUserEditingProperties,
29+
} from '@sofie-automation/corelib/src/dataModel/UserEditingDefinitions.js'
2530

2631
type PendingChange = DefaultUserOperationEditProperties['payload']
2732

@@ -385,3 +390,19 @@ function ActionList({
385390
</div>
386391
)
387392
}
393+
394+
export function hasUserEditableContent(
395+
obj:
396+
| ReadonlyDeep<{
397+
userEditOperations?: CoreUserEditingDefinition[]
398+
userEditProperties?: CoreUserEditingProperties
399+
}>
400+
| undefined
401+
): boolean {
402+
return !!(
403+
obj?.userEditOperations?.length ||
404+
obj?.userEditProperties?.pieceTypeProperties ||
405+
obj?.userEditProperties?.globalProperties ||
406+
obj?.userEditProperties?.operations?.length
407+
)
408+
}

0 commit comments

Comments
 (0)