mirror of
https://github.com/hedgedoc/hedgedoc.git
synced 2025-05-23 19:47:03 -04:00
Reorganize redux and hooks (1/4) (#985)
Signed-off-by: Tilman Vatteroth <tilman.vatteroth@tu-dortmund.de>
This commit is contained in:
parent
bdf8110676
commit
1b7abf9f27
61 changed files with 898 additions and 986 deletions
|
@ -4,8 +4,8 @@
|
|||
* SPDX-License-Identifier: AGPL-3.0-only
|
||||
*/
|
||||
|
||||
import { NoteFrontmatter } from "../editor/note-frontmatter/note-frontmatter"
|
||||
import { ScrollState } from "../editor/scroll/scroll-props"
|
||||
import { YAMLMetaData } from "../editor/yaml-metadata/yaml-metadata"
|
||||
import { IframeCommunicator } from "./iframe-communicator"
|
||||
import {
|
||||
EditorToRendererIframeMessage,
|
||||
|
@ -18,36 +18,13 @@ export class IframeEditorToRendererCommunicator extends IframeCommunicator<Edito
|
|||
private onSetScrollSourceToRendererHandler?: () => void
|
||||
private onTaskCheckboxChangeHandler?: (lineInMarkdown: number, checked: boolean) => void
|
||||
private onFirstHeadingChangeHandler?: (heading?: string) => void
|
||||
private onMetaDataChangeHandler?: (metaData?: YAMLMetaData) => void
|
||||
private onFrontmatterChangeHandler?: (metaData?: NoteFrontmatter) => void
|
||||
private onSetScrollStateHandler?: (scrollState: ScrollState) => void
|
||||
private onRendererReadyHandler?: () => void
|
||||
private onImageClickedHandler?: (details: ImageDetails) => void
|
||||
|
||||
protected handleEvent (event: MessageEvent<RendererToEditorIframeMessage>): boolean | undefined {
|
||||
const renderMessage = event.data
|
||||
switch (renderMessage.type) {
|
||||
case RenderIframeMessageType.RENDERER_READY:
|
||||
this.onRendererReadyHandler?.()
|
||||
return false
|
||||
case RenderIframeMessageType.SET_SCROLL_SOURCE_TO_RENDERER:
|
||||
this.onSetScrollSourceToRendererHandler?.()
|
||||
return false
|
||||
case RenderIframeMessageType.SET_SCROLL_STATE:
|
||||
this.onSetScrollStateHandler?.(renderMessage.scrollState)
|
||||
return false
|
||||
case RenderIframeMessageType.ON_FIRST_HEADING_CHANGE:
|
||||
this.onFirstHeadingChangeHandler?.(renderMessage.firstHeading)
|
||||
return false
|
||||
case RenderIframeMessageType.ON_TASK_CHECKBOX_CHANGE:
|
||||
this.onTaskCheckboxChangeHandler?.(renderMessage.lineInMarkdown, renderMessage.checked)
|
||||
return false
|
||||
case RenderIframeMessageType.ON_SET_META_DATA:
|
||||
this.onMetaDataChangeHandler?.(renderMessage.metaData)
|
||||
return false
|
||||
case RenderIframeMessageType.IMAGE_CLICKED:
|
||||
this.onImageClickedHandler?.(renderMessage.details)
|
||||
return false
|
||||
}
|
||||
public onFrontmatterChange (handler?: (frontmatter?: NoteFrontmatter) => void): void {
|
||||
this.onFrontmatterChangeHandler = handler
|
||||
}
|
||||
|
||||
public onImageClicked (handler?: (details: ImageDetails) => void): void {
|
||||
|
@ -70,8 +47,31 @@ export class IframeEditorToRendererCommunicator extends IframeCommunicator<Edito
|
|||
this.onFirstHeadingChangeHandler = handler
|
||||
}
|
||||
|
||||
public onMetaDataChange (handler?: (metaData?: YAMLMetaData) => void): void {
|
||||
this.onMetaDataChangeHandler = handler
|
||||
protected handleEvent (event: MessageEvent<RendererToEditorIframeMessage>): boolean | undefined {
|
||||
const renderMessage = event.data
|
||||
switch (renderMessage.type) {
|
||||
case RenderIframeMessageType.RENDERER_READY:
|
||||
this.onRendererReadyHandler?.()
|
||||
return false
|
||||
case RenderIframeMessageType.SET_SCROLL_SOURCE_TO_RENDERER:
|
||||
this.onSetScrollSourceToRendererHandler?.()
|
||||
return false
|
||||
case RenderIframeMessageType.SET_SCROLL_STATE:
|
||||
this.onSetScrollStateHandler?.(renderMessage.scrollState)
|
||||
return false
|
||||
case RenderIframeMessageType.ON_FIRST_HEADING_CHANGE:
|
||||
this.onFirstHeadingChangeHandler?.(renderMessage.firstHeading)
|
||||
return false
|
||||
case RenderIframeMessageType.ON_TASK_CHECKBOX_CHANGE:
|
||||
this.onTaskCheckboxChangeHandler?.(renderMessage.lineInMarkdown, renderMessage.checked)
|
||||
return false
|
||||
case RenderIframeMessageType.ON_SET_FRONTMATTER:
|
||||
this.onFrontmatterChangeHandler?.(renderMessage.frontmatter)
|
||||
return false
|
||||
case RenderIframeMessageType.IMAGE_CLICKED:
|
||||
this.onImageClickedHandler?.(renderMessage.details)
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
public onSetScrollState (handler?: (scrollState: ScrollState) => void): void {
|
||||
|
|
|
@ -4,8 +4,8 @@
|
|||
* SPDX-License-Identifier: AGPL-3.0-only
|
||||
*/
|
||||
|
||||
import { NoteFrontmatter } from "../editor/note-frontmatter/note-frontmatter"
|
||||
import { ScrollState } from "../editor/scroll/scroll-props"
|
||||
import { YAMLMetaData } from "../editor/yaml-metadata/yaml-metadata"
|
||||
import { IframeCommunicator } from "./iframe-communicator"
|
||||
import {
|
||||
EditorToRendererIframeMessage,
|
||||
|
@ -68,10 +68,10 @@ export class IframeRendererToEditorCommunicator extends IframeCommunicator<Rende
|
|||
})
|
||||
}
|
||||
|
||||
public sendSetMetaData (metaData: YAMLMetaData | undefined): void {
|
||||
public sendSetFrontmatter (frontmatter: NoteFrontmatter | undefined): void {
|
||||
this.sendMessageToOtherSide({
|
||||
type: RenderIframeMessageType.ON_SET_META_DATA,
|
||||
metaData
|
||||
type: RenderIframeMessageType.ON_SET_FRONTMATTER,
|
||||
frontmatter: frontmatter
|
||||
})
|
||||
}
|
||||
|
||||
|
|
|
@ -3,16 +3,15 @@
|
|||
*
|
||||
* SPDX-License-Identifier: AGPL-3.0-only
|
||||
*/
|
||||
import equal from "fast-deep-equal"
|
||||
import React, { useCallback, useEffect, useMemo, useState } from 'react'
|
||||
import { useSelector } from 'react-redux'
|
||||
import { useApplyDarkMode } from '../../hooks/common/use-apply-dark-mode'
|
||||
import { ApplicationState } from '../../redux'
|
||||
import { setDarkMode } from '../../redux/dark-mode/methods'
|
||||
import { setDocumentMetadata } from '../../redux/document-content/methods'
|
||||
import { ScrollingDocumentRenderPane } from '../editor/document-renderer-pane/scrolling-document-render-pane'
|
||||
import { setNoteFrontmatter } from '../../redux/note-details/methods'
|
||||
import { DocumentRenderPane } from '../editor/document-renderer-pane/document-render-pane'
|
||||
import { NoteFrontmatter } from '../editor/note-frontmatter/note-frontmatter'
|
||||
import { ScrollState } from '../editor/scroll/scroll-props'
|
||||
import { YAMLMetaData } from '../editor/yaml-metadata/yaml-metadata'
|
||||
import { ImageClickHandler } from '../markdown-renderer/replace-components/image/image-replacer'
|
||||
import { IframeRendererToEditorCommunicator } from './iframe-renderer-to-editor-communicator'
|
||||
|
||||
|
@ -41,11 +40,7 @@ export const RenderPage: React.FC = () => {
|
|||
useEffect(() => iframeCommunicator.onSetMarkdownContent(setMarkdownContent), [iframeCommunicator])
|
||||
useEffect(() => iframeCommunicator.onSetDarkMode(setDarkMode), [iframeCommunicator])
|
||||
useEffect(() => iframeCommunicator.onSetWide(setWide), [iframeCommunicator])
|
||||
useEffect(() => iframeCommunicator.onSetScrollState((newScrollState) => {
|
||||
if (!equal(scrollState, newScrollState)) {
|
||||
setScrollState(newScrollState)
|
||||
}
|
||||
}), [iframeCommunicator, scrollState])
|
||||
useEffect(() => iframeCommunicator.onSetScrollState(setScrollState), [iframeCommunicator, scrollState])
|
||||
|
||||
const onTaskCheckedChange = useCallback((lineInMarkdown: number, checked: boolean) => {
|
||||
iframeCommunicator.sendTaskCheckBoxChange(lineInMarkdown, checked)
|
||||
|
@ -59,9 +54,9 @@ export const RenderPage: React.FC = () => {
|
|||
iframeCommunicator.sendSetScrollSourceToRenderer()
|
||||
}, [iframeCommunicator])
|
||||
|
||||
const onMetaDataChange = useCallback((metaData?: YAMLMetaData) => {
|
||||
setDocumentMetadata(metaData)
|
||||
iframeCommunicator.sendSetMetaData(metaData)
|
||||
const onFrontmatterChange = useCallback((frontmatter?: NoteFrontmatter) => {
|
||||
setNoteFrontmatter(frontmatter)
|
||||
iframeCommunicator.sendSetFrontmatter(frontmatter)
|
||||
}, [iframeCommunicator])
|
||||
|
||||
const onScroll = useCallback((scrollState: ScrollState) => {
|
||||
|
@ -86,14 +81,14 @@ export const RenderPage: React.FC = () => {
|
|||
|
||||
return (
|
||||
<div className={"vh-100 w-100"}>
|
||||
<ScrollingDocumentRenderPane
|
||||
<DocumentRenderPane
|
||||
extraClasses={'w-100'}
|
||||
markdownContent={markdownContent}
|
||||
wide={isWide}
|
||||
onTaskCheckedChange={onTaskCheckedChange}
|
||||
onFirstHeadingChange={onFirstHeadingChange}
|
||||
onMakeScrollSource={onMakeScrollSource}
|
||||
onMetadataChange={onMetaDataChange}
|
||||
onFrontmatterChange={onFrontmatterChange}
|
||||
scrollState={scrollState}
|
||||
onScroll={onScroll}
|
||||
baseUrl={baseUrl}
|
||||
|
|
|
@ -3,8 +3,8 @@
|
|||
*
|
||||
* SPDX-License-Identifier: AGPL-3.0-only
|
||||
*/
|
||||
import { NoteFrontmatter } from '../editor/note-frontmatter/note-frontmatter'
|
||||
import { ScrollState } from '../editor/scroll/scroll-props'
|
||||
import { YAMLMetaData } from '../editor/yaml-metadata/yaml-metadata'
|
||||
|
||||
export enum RenderIframeMessageType {
|
||||
SET_MARKDOWN_CONTENT = 'SET_MARKDOWN_CONTENT',
|
||||
|
@ -15,7 +15,7 @@ export enum RenderIframeMessageType {
|
|||
ON_FIRST_HEADING_CHANGE = 'ON_FIRST_HEADING_CHANGE',
|
||||
SET_SCROLL_SOURCE_TO_RENDERER = 'SET_SCROLL_SOURCE_TO_RENDERER',
|
||||
SET_SCROLL_STATE = 'SET_SCROLL_STATE',
|
||||
ON_SET_META_DATA = 'ON_SET_META_DATA',
|
||||
ON_SET_FRONTMATTER = 'ON_SET_FRONTMATTER',
|
||||
IMAGE_CLICKED = 'IMAGE_CLICKED',
|
||||
SET_BASE_URL = 'SET_BASE_URL'
|
||||
}
|
||||
|
@ -71,9 +71,9 @@ export interface OnFirstHeadingChangeMessage {
|
|||
firstHeading: string | undefined
|
||||
}
|
||||
|
||||
export interface OnMetadataChangeMessage {
|
||||
type: RenderIframeMessageType.ON_SET_META_DATA,
|
||||
metaData: YAMLMetaData | undefined
|
||||
export interface OnFrontmatterChangeMessage {
|
||||
type: RenderIframeMessageType.ON_SET_FRONTMATTER,
|
||||
frontmatter: NoteFrontmatter | undefined
|
||||
}
|
||||
|
||||
export type EditorToRendererIframeMessage =
|
||||
|
@ -87,6 +87,6 @@ export type RendererToEditorIframeMessage =
|
|||
RendererToEditorSimpleMessage |
|
||||
OnFirstHeadingChangeMessage |
|
||||
OnTaskCheckboxChangeMessage |
|
||||
OnMetadataChangeMessage |
|
||||
OnFrontmatterChangeMessage |
|
||||
SetScrollStateMessage |
|
||||
ImageClickedMessage
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue