mirror of
https://github.com/hedgedoc/hedgedoc.git
synced 2025-05-25 12:34:45 -04:00
Restructure Communicator (#1510)
Signed-off-by: Tilman Vatteroth <git@tilmanvatteroth.de>
This commit is contained in:
parent
e6830598d5
commit
f1e91b4574
31 changed files with 680 additions and 569 deletions
|
@ -0,0 +1,30 @@
|
|||
/*
|
||||
* SPDX-FileCopyrightText: 2021 The HedgeDoc developers (see AUTHORS file)
|
||||
*
|
||||
* SPDX-License-Identifier: AGPL-3.0-only
|
||||
*/
|
||||
|
||||
import { useCallback, useRef } from 'react'
|
||||
import { ScrollState } from '../../synced-scroll/scroll-props'
|
||||
import { CommunicationMessageType } from '../../../render-page/window-post-message-communicator/rendering-message'
|
||||
import { useEffectOnRendererReady } from '../../../render-page/window-post-message-communicator/hooks/use-effect-on-renderer-ready'
|
||||
import equal from 'fast-deep-equal'
|
||||
import { useEditorToRendererCommunicator } from '../../render-context/editor-to-renderer-communicator-context-provider'
|
||||
|
||||
/**
|
||||
* Sends the given {@link ScrollState scroll state} to the renderer if the content changed.
|
||||
* @param scrollState The scroll state to send
|
||||
*/
|
||||
export const useSendScrollState = (scrollState: ScrollState | undefined): void => {
|
||||
const iframeCommunicator = useEditorToRendererCommunicator()
|
||||
const oldScrollState = useRef<ScrollState | undefined>(undefined)
|
||||
|
||||
useEffectOnRendererReady(
|
||||
useCallback(() => {
|
||||
if (scrollState && !equal(scrollState, oldScrollState.current)) {
|
||||
oldScrollState.current = scrollState
|
||||
iframeCommunicator.sendMessageToOtherSide({ type: CommunicationMessageType.SET_SCROLL_STATE, scrollState })
|
||||
}
|
||||
}, [iframeCommunicator, scrollState])
|
||||
)
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue