/* * SPDX-FileCopyrightText: 2021 The HedgeDoc developers (see AUTHORS file) * * SPDX-License-Identifier: AGPL-3.0-only */ import { useSendToRenderer } from '../../../render-page/window-post-message-communicator/hooks/use-send-to-renderer' import { useMemo, useRef } from 'react' import { CommunicationMessageType } from '../../../render-page/window-post-message-communicator/rendering-message' import { useApplicationState } from '../../../../hooks/common/use-application-state' import equal from 'fast-deep-equal' import type { RendererFrontmatterInfo } from '../../../../redux/note-details/types/note-details' /** * Extracts the {@link RendererFrontmatterInfo frontmatter data} * from the global application state and sends it to the renderer. */ export const useSendFrontmatterInfoFromReduxToRenderer = (): void => { const frontmatterInfo = useApplicationState((state) => state.noteDetails.frontmatterRendererInfo) const lastFrontmatter = useRef(undefined) const cachedFrontmatterInfo = useMemo(() => { if (lastFrontmatter.current !== undefined && equal(lastFrontmatter.current, frontmatterInfo)) { return lastFrontmatter.current } else { lastFrontmatter.current = frontmatterInfo return frontmatterInfo } }, [frontmatterInfo]) return useSendToRenderer( useMemo( () => ({ type: CommunicationMessageType.SET_FRONTMATTER_INFO, frontmatterInfo: cachedFrontmatterInfo }), [cachedFrontmatterInfo] ) ) }