UNPKG

@atlaskit/editor-common

Version:

A package that contains common classes and components for editor and renderer

58 lines (57 loc) 3.27 kB
import React from 'react'; import type { Node as PMNode } from '@atlaskit/editor-prosemirror/model'; import type { Decoration, DecorationSource, EditorView, NodeView } from '@atlaskit/editor-prosemirror/view'; import type { EventDispatcher } from '../event-dispatcher'; import type { PortalProviderAPI } from '../portal'; import type { ForwardRef, getPosHandler, ProsemirrorGetPosHandler, ReactComponentProps, shouldUpdate } from './types'; export type { getPosHandler, ReactComponentProps, shouldUpdate, ProsemirrorGetPosHandler, ForwardRef, }; export type { InlineNodeViewComponentProps } from './getInlineNodeViewProducer'; export { getInlineNodeViewProducer, inlineNodeViewClassname } from './getInlineNodeViewProducer'; export { NodeViewContentHole } from './NodeViewContentHole'; export default class ReactNodeView<P = ReactComponentProps> implements NodeView { private domRef?; private contentDOMWrapper?; private reactComponent?; private portalProviderAPI; private _viewShouldUpdate?; protected eventDispatcher?: EventDispatcher; protected decorations: ReadonlyArray<Decoration>; reactComponentProps: P; view: EditorView; getPos: getPosHandler; contentDOM: HTMLElement | null | undefined; node: PMNode; key: string; shouldRenderImmediatelyInPortal: boolean; constructor(node: PMNode, view: EditorView, getPos: getPosHandler, portalProviderAPI: PortalProviderAPI, eventDispatcher: EventDispatcher, reactComponentProps?: P, reactComponent?: React.ComponentType<React.PropsWithChildren<any>>, viewShouldUpdate?: shouldUpdate, shouldRenderImmediatelyInPortal?: boolean); /** * This method exists to move initialization logic out of the constructor, * so object can be initialized properly before calling render first time. * * Example: * Instance properties get added to an object only after super call in * constructor, which leads to some methods being undefined during the * first render. */ init(shouldSkipInitRender?: boolean): this; private renderReactComponent; createDomRef(): HTMLElement; getContentDOM(): { contentDOM?: HTMLElement | null | undefined; dom: HTMLElement; } | undefined; handleRef: (node: Element | null) => void; private _handleRef; render(props: P, forwardRef?: ForwardRef): React.ReactElement<any> | null; update(node: PMNode, decorations: ReadonlyArray<Decoration>, _innerDecorations?: DecorationSource, validUpdate?: (currentNode: PMNode, newNode: PMNode) => boolean): boolean; viewShouldUpdate(nextNode: PMNode, _decorations?: Array<Decoration>): boolean; /** * Copies the attributes from a ProseMirror Node to a DOM node. * @param node The Prosemirror Node from which to source the attributes */ setDomAttrs(node: PMNode, element: HTMLElement): void; get dom(): HTMLElement; destroy(): void; private dispatchAnalyticsEvent; static fromComponent(component: React.ComponentType<React.PropsWithChildren<any>>, portalProviderAPI: PortalProviderAPI, eventDispatcher: EventDispatcher, props?: ReactComponentProps, viewShouldUpdate?: (nextNode: PMNode) => boolean): (node: PMNode, view: EditorView, getPos: getPosHandler) => ReactNodeView; }