/* SPDX-FileCopyrightText: 2021 The HedgeDoc developers (see AUTHORS file) SPDX-License-Identifier: AGPL-3.0-only */ import { TocAst } from 'markdown-it-toc-done-right' import React, { RefObject, useRef, useState } from 'react' import { Dropdown } from 'react-bootstrap' import { useSelector } from 'react-redux' import useResizeObserver from 'use-resize-observer' import { ApplicationState } from '../../../redux' import { ForkAwesomeIcon } from '../../common/fork-awesome/fork-awesome-icon' import { ShowIf } from '../../common/show-if/show-if' import { FullMarkdownRenderer } from '../../markdown-renderer/full-markdown-renderer' import { LineMarkerPosition } from '../../markdown-renderer/types' import { TableOfContents } from '../table-of-contents/table-of-contents' import { YAMLMetaData } from '../yaml-metadata/yaml-metadata' import { useAdaptedLineMarkerCallback } from './use-adapted-line-markers-callback' import { YamlArrayDeprecationAlert } from './yaml-array-deprecation-alert' export interface DocumentRenderPaneProps { extraClasses?: string onFirstHeadingChange: (firstHeading: string | undefined) => void onLineMarkerPositionChanged?: (lineMarkerPosition: LineMarkerPosition[]) => void onMetadataChange: (metaData: YAMLMetaData | undefined) => void onMouseEnterRenderer?: () => void onScrollRenderer?: () => void onTaskCheckedChange: (lineInMarkdown: number, checked: boolean) => void documentRenderPaneRef?: RefObject wide?: boolean } export const DocumentRenderPane: React.FC = ({ extraClasses, onFirstHeadingChange, onLineMarkerPositionChanged, onMetadataChange, onMouseEnterRenderer, onScrollRenderer, onTaskCheckedChange, documentRenderPaneRef, wide }) => { const [tocAst, setTocAst] = useState() const { width } = useResizeObserver(documentRenderPaneRef ? { ref: documentRenderPaneRef } : undefined) const realWidth = width || 0 const rendererRef = useRef(null) const markdownContent = useSelector((state: ApplicationState) => state.documentContent.content) const yamlDeprecatedTags = useSelector((state: ApplicationState) => state.documentContent.metadata.deprecatedTagsSyntax) const changeLineMarker = useAdaptedLineMarkerCallback(documentRenderPaneRef, rendererRef, onLineMarkerPositionChanged) return (
setTocAst(tocAst)} wide={wide} />
= 1280 && !!tocAst}>
) }