mirror of
https://github.com/overleaf/overleaf.git
synced 2024-11-07 20:31:06 -05:00
f6fc3d468c
PDF Detach Updates GitOrigin-RevId: c09c4fe37a922b041cfa1376e110a264a88177c8
52 lines
1.2 KiB
JavaScript
52 lines
1.2 KiB
JavaScript
import { useEffect, useState, useCallback } from 'react'
|
|
import { useDetachContext } from '../context/detach-context'
|
|
import getMeta from '../../utils/meta'
|
|
|
|
const debugPdfDetach = getMeta('ol-debugPdfDetach')
|
|
|
|
export default function useDetachState(
|
|
key,
|
|
defaultValue,
|
|
senderRole,
|
|
targetRole
|
|
) {
|
|
const [value, setValue] = useState(defaultValue)
|
|
|
|
const {
|
|
role,
|
|
broadcastEvent,
|
|
addEventHandler,
|
|
deleteEventHandler,
|
|
} = useDetachContext()
|
|
|
|
const eventName = `state-${key}`
|
|
|
|
useEffect(() => {
|
|
if (role === senderRole) {
|
|
broadcastEvent(eventName, { value })
|
|
}
|
|
}, [role, senderRole, eventName, value, broadcastEvent])
|
|
|
|
const handleStateEvent = useCallback(
|
|
message => {
|
|
if (message.event !== eventName) {
|
|
return
|
|
}
|
|
if (role !== targetRole) {
|
|
return
|
|
}
|
|
if (debugPdfDetach) {
|
|
console.log(`Set ${message.data.value} for ${eventName}`)
|
|
}
|
|
setValue(message.data.value)
|
|
},
|
|
[role, targetRole, eventName, setValue]
|
|
)
|
|
|
|
useEffect(() => {
|
|
addEventHandler(handleStateEvent)
|
|
return () => deleteEventHandler(handleStateEvent)
|
|
}, [addEventHandler, deleteEventHandler, handleStateEvent])
|
|
|
|
return [value, setValue]
|
|
}
|