Skip to content

Commit 54349f7

Browse files
author
Mint de Wit
committed
chore: update list view with new previews
1 parent daa657d commit 54349f7

File tree

3 files changed

+84
-7
lines changed

3 files changed

+84
-7
lines changed

packages/webui/src/client/ui/SegmentList/LinePartMainPiece/LinePartMainPiece.tsx

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { EvsContent, SourceLayerType } from '@sofie-automation/blueprints-integration'
2-
import React, { useMemo, useRef, useState } from 'react'
2+
import React, { useContext, useMemo, useRef, useState } from 'react'
33
import { PieceExtended } from '../../../lib/RundownResolver'
44
// TODO: Move to a shared lib file
55
import { PartId, PartInstanceId } from '@sofie-automation/corelib/dist/dataModel/Ids'
@@ -15,6 +15,12 @@ import { PieceElement } from '../../SegmentContainer/PieceElement'
1515
import { getPieceSteps, PieceMultistepChevron } from '../../SegmentContainer/PieceMultistepChevron'
1616
import { useContentStatusForPieceInstance } from '../../SegmentTimeline/withMediaObjectStatus'
1717
import { PieceHoverInspector } from '../PieceHoverInspector'
18+
import {
19+
convertPreviewToContents,
20+
convertSourceLayerItemToPreview,
21+
IPreviewPopUpSession,
22+
PreviewPopUpContext,
23+
} from '../../PreviewPopUp/PreviewPopUpContext'
1824

1925
interface IProps {
2026
partId: PartId
@@ -128,11 +134,25 @@ export function LinePartMainPiece({
128134
[contentStatus?.blacks, contentStatus?.freezes, contentStatus?.scenes]
129135
)
130136

137+
const previewContext = useContext(PreviewPopUpContext)
138+
const previewSession = useRef<IPreviewPopUpSession | null>(null)
139+
const previewContents = piece.instance.piece.content.popUpPreview
140+
? convertPreviewToContents(piece.instance.piece.content.popUpPreview, contentStatus)
141+
: piece.sourceLayer
142+
? convertSourceLayerItemToPreview(piece.sourceLayer?.type, piece, contentStatus)
143+
: []
144+
131145
const onPointerEnter = (e: React.PointerEvent<HTMLDivElement>) => {
132146
if (e.pointerType !== 'mouse') {
133147
return
134148
}
135-
setHover(true)
149+
// setHover(true)
150+
151+
if (previewContents.length > 0)
152+
previewSession.current = previewContext.requestPreview(e.target as any, previewContents, {
153+
time: mousePosition * (piece.instance.piece.content.sourceDuration || 0),
154+
startCoordinate: e.screenX,
155+
})
136156

137157
const newOffset = pieceEl.current && getElementDocumentOffset(pieceEl.current)
138158
if (newOffset !== null) {
@@ -149,6 +169,10 @@ export function LinePartMainPiece({
149169
return
150170
}
151171
setHover(false)
172+
if (previewSession.current) {
173+
previewSession.current.close()
174+
previewSession.current = null
175+
}
152176
}
153177

154178
const onPointerMove = (e: React.PointerEvent<HTMLDivElement>) => {
@@ -158,6 +182,10 @@ export function LinePartMainPiece({
158182
const newMousePosition = Math.max(0, Math.min(1, (e.pageX - origin.left - 5) / (width - 10)))
159183
setMouseTimePosition(newMousePosition)
160184
setMousePosition(e.pageX - origin.left)
185+
186+
previewSession.current?.setPointerTime(
187+
newMousePosition * (piece.instance.piece.content.sourceDuration ?? contentStatus?.contentDuration ?? 0)
188+
)
161189
}
162190

163191
const noticeLevel = getNoticeLevelForPieceStatus(contentStatus?.status)

packages/webui/src/client/ui/SegmentList/LinePartPieceIndicator/LinePartScriptPiece.tsx

Lines changed: 29 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,15 @@
11
import { ScriptContent, SourceLayerType } from '@sofie-automation/blueprints-integration'
2-
import { useLayoutEffect, useMemo, useRef, useState } from 'react'
2+
import { useContext, useLayoutEffect, useMemo, useRef, useState } from 'react'
33
import { PieceExtended } from '../../../lib/RundownResolver'
44
import { IFloatingInspectorPosition } from '../../FloatingInspectors/IFloatingInspectorPosition'
55
import { MicFloatingInspector } from '../../FloatingInspectors/MicFloatingInspector'
6+
import {
7+
PreviewPopUpContext,
8+
IPreviewPopUpSession,
9+
convertPreviewToContents,
10+
convertSourceLayerItemToPreview,
11+
} from '../../PreviewPopUp/PreviewPopUpContext'
12+
import { useContentStatusForPieceInstance } from '../../SegmentTimeline/withMediaObjectStatus'
613

714
interface IProps {
815
pieces: PieceExtended[]
@@ -40,12 +47,31 @@ export function LinePartScriptPiece({ pieces }: IProps): JSX.Element {
4047
})
4148
}, [])
4249

43-
function onMouseEnter() {
44-
setHover(true)
50+
const previewContext = useContext(PreviewPopUpContext)
51+
const previewSession = useRef<IPreviewPopUpSession | null>(null)
52+
const contentStatus = thisPieces[0] && useContentStatusForPieceInstance(thisPieces[0].instance)
53+
const previewContents =
54+
thisPieces[0] &&
55+
(thisPieces[0].instance.piece.content.popUpPreview
56+
? convertPreviewToContents(thisPieces[0].instance.piece.content.popUpPreview, contentStatus)
57+
: thisPieces[0].sourceLayer
58+
? convertSourceLayerItemToPreview(thisPieces[0].sourceLayer?.type, thisPieces[0], contentStatus)
59+
: [])
60+
61+
function onMouseEnter(e: React.PointerEvent<HTMLDivElement>) {
62+
// setHover(true)
63+
if (previewContents && previewContents.length > 0)
64+
previewSession.current = previewContext.requestPreview(e.target as any, previewContents, {
65+
startCoordinate: e.screenX,
66+
})
4567
}
4668

4769
function onMouseLeave() {
4870
setHover(false)
71+
if (previewSession.current) {
72+
previewSession.current.close()
73+
previewSession.current = null
74+
}
4975
}
5076

5177
const hasPiece = thisPieces[0]

packages/webui/src/client/ui/SegmentList/LinePartSecondaryPiece/LinePartSecondaryPiece.tsx

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,18 @@
11
import classNames from 'classnames'
2-
import React, { CSSProperties, useCallback, useMemo, useRef, useState } from 'react'
2+
import React, { CSSProperties, useCallback, useContext, useMemo, useRef, useState } from 'react'
33
import { PieceExtended } from '../../../lib/RundownResolver'
44
import { RundownUtils } from '../../../lib/rundown'
55
import { PieceHoverInspector } from '../PieceHoverInspector'
66
import { getElementDocumentOffset, OffsetPosition } from '../../../utils/positions'
77
import { PieceUi } from '../../SegmentContainer/withResolvedSegment'
88
import StudioContext from '../../RundownView/StudioContext'
99
import { useContentStatusForPieceInstance } from '../../SegmentTimeline/withMediaObjectStatus'
10+
import {
11+
PreviewPopUpContext,
12+
IPreviewPopUpSession,
13+
convertPreviewToContents,
14+
convertSourceLayerItemToPreview,
15+
} from '../../PreviewPopUp/PreviewPopUpContext'
1016

1117
interface IProps {
1218
piece: PieceExtended
@@ -47,11 +53,24 @@ export const LinePartSecondaryPiece: React.FC<IProps> = React.memo(function Line
4753
}
4854
}, [piece, partDuration, timelineBase])
4955

56+
const previewContext = useContext(PreviewPopUpContext)
57+
const previewSession = useRef<IPreviewPopUpSession | null>(null)
58+
const previewContents = piece.instance.piece.content.popUpPreview
59+
? convertPreviewToContents(piece.instance.piece.content.popUpPreview, contentStatus)
60+
: piece.sourceLayer
61+
? convertSourceLayerItemToPreview(piece.sourceLayer?.type, piece, contentStatus)
62+
: []
63+
5064
const onPointerEnter = (e: React.PointerEvent<HTMLDivElement>) => {
5165
if (e.pointerType !== 'mouse') {
5266
return
5367
}
54-
setHover(true)
68+
// setHover(true)
69+
70+
if (previewContents.length > 0)
71+
previewSession.current = previewContext.requestPreview(e.target as any, previewContents, {
72+
startCoordinate: e.screenX,
73+
})
5574

5675
const newOffset = pieceEl.current && getElementDocumentOffset(pieceEl.current)
5776
if (newOffset !== null) {
@@ -64,6 +83,10 @@ export const LinePartSecondaryPiece: React.FC<IProps> = React.memo(function Line
6483
return
6584
}
6685
setHover(false)
86+
if (previewSession.current) {
87+
previewSession.current.close()
88+
previewSession.current = null
89+
}
6790
}
6891

6992
const onPointerMove = (e: React.PointerEvent<HTMLDivElement>) => {

0 commit comments

Comments
 (0)