1
- import React , { useCallback , useEffect , useMemo , useRef } from 'react'
1
+ import React , { useCallback , useEffect , useMemo , useRef , useState } from 'react'
2
2
import { observer } from 'mobx-react-lite'
3
3
import { RootAppStore } from 'src/stores/RootAppStore.ts'
4
4
@@ -9,41 +9,38 @@ import { getCurrentTime } from 'src/lib/getCurrentTime'
9
9
import { useQueryParam } from 'src/lib/useQueryParam'
10
10
11
11
import classes from './Output.module.scss'
12
+ import { useControllerMessages } from 'src/hooks/useControllerMessages'
12
13
13
14
const Output = observer ( function Output ( ) : React . ReactElement {
14
15
const rootEl = useRef < HTMLDivElement > ( null )
15
- const speed = useRef ( 0 )
16
+ const [ size , setSize ] = useState ( { height : window . innerHeight , width : window . innerWidth } )
16
17
17
18
const isPrimary = useQueryParam ( 'primary' ) !== null
18
19
19
20
// On startup
20
21
useEffect ( ( ) => {
21
22
RootAppStore . outputSettingsStore . initialize ( ) // load and subscribe
23
+ } )
22
24
23
- RootAppStore . connection . controller . on ( 'message' , ( message ) => {
24
- console . log ( 'received message' , message )
25
-
26
- speed . current = message . speed
27
- } )
28
- RootAppStore . connection . controller . subscribeToMessages ( ) . catch ( console . error )
25
+ const outputSettings = RootAppStore . outputSettingsStore . outputSettings
29
26
30
- // don't do this, it's just for testing:
31
- const interval = setInterval ( ( ) => {
32
- rootEl . current ?. scrollBy ( 0 , speed . current )
33
- } , 1000 / 60 )
27
+ const fontSize = outputSettings . fontSize
28
+ const scaleVertical = outputSettings . mirrorVertically ? '-1' : '1'
29
+ const scaleHorizontal = outputSettings . mirrorHorizontally ? '-1' : '1'
34
30
35
- return ( ) => {
36
- RootAppStore . connection . controller . off ( 'message' )
37
- clearInterval ( interval )
38
- }
39
- } , [ ] )
31
+ useControllerMessages ( rootEl , size . height , ( fontSize * size . width ) / 100 )
40
32
41
33
const onViewPortSizeChanged = useCallback ( ( ) => {
34
+ const width = window . innerWidth
35
+ const height = window . innerHeight
36
+ const aspectRatio = width / height
37
+ setSize ( { width, height } )
38
+
42
39
if ( ! isPrimary ) return
43
40
44
41
RootAppStore . connection . viewPort . update ( null , {
45
42
_id : '' ,
46
- aspectRatio : window . innerWidth / window . innerHeight ,
43
+ aspectRatio,
47
44
// TODO: This should return the actual lastKnownState
48
45
lastKnownState : {
49
46
timestamp : getCurrentTime ( ) ,
@@ -65,8 +62,6 @@ const Output = observer(function Output(): React.ReactElement {
65
62
}
66
63
} , [ onViewPortSizeChanged ] )
67
64
68
- const outputSettings = RootAppStore . outputSettingsStore . outputSettings
69
-
70
65
const activeRundownPlaylistId = outputSettings ?. activeRundownPlaylistId
71
66
72
67
useEffect ( ( ) => {
@@ -142,10 +137,6 @@ const Output = observer(function Output(): React.ReactElement {
142
137
143
138
*/
144
139
145
- const fontSize = outputSettings . fontSize
146
- const scaleVertical = outputSettings . mirrorVertically ? '-1' : '1'
147
- const scaleHorizontal = outputSettings . mirrorHorizontally ? '-1' : '1'
148
-
149
140
const styleVariables = useMemo (
150
141
( ) =>
151
142
( {
0 commit comments