diff --git a/components/Current/Aside/Puffs/Puff/renderOptions.tsx b/components/Current/Aside/Puffs/Puff/renderOptions.tsx index d2147568b..488a17eac 100644 --- a/components/Current/Aside/Puffs/Puff/renderOptions.tsx +++ b/components/Current/Aside/Puffs/Puff/renderOptions.tsx @@ -8,6 +8,10 @@ import type { RenderOptions } from "@/types/rte/option" export const renderOptions: RenderOptions = { [RTETypeEnum.p]: (node: RTEDefaultNode, embeds: EmbedByUid, next: RTENext, fullRenderOptions: RenderOptions) => { - return

{next(node.children, embeds, fullRenderOptions)}

+ return ( +

+ {next(node.children, embeds, fullRenderOptions)} +

+ ) }, } diff --git a/components/Current/Preamble/renderOptions.tsx b/components/Current/Preamble/renderOptions.tsx index 6212a3604..eec1bbf51 100644 --- a/components/Current/Preamble/renderOptions.tsx +++ b/components/Current/Preamble/renderOptions.tsx @@ -8,6 +8,10 @@ import type { RenderOptions } from "@/types/rte/option" export const renderOptions: RenderOptions = { [RTETypeEnum.p]: (node: RTEDefaultNode, embeds: EmbedByUid, next: RTENext, fullRenderOptions: RenderOptions) => { - return

{next(node.children, embeds, fullRenderOptions)}

+ return ( +

+ {next(node.children, embeds, fullRenderOptions)} +

+ ) }, } diff --git a/components/JsonToHtml/renderOptions.tsx b/components/JsonToHtml/renderOptions.tsx index 0eb2a2fcc..815a0f46f 100644 --- a/components/JsonToHtml/renderOptions.tsx +++ b/components/JsonToHtml/renderOptions.tsx @@ -38,6 +38,7 @@ export const renderOptions: RenderOptions = { {...props} href={node.attrs.url} target={node.attrs.target ?? "_blank"} + key={node.uid} > {next(node.children, embeds, fullRenderOptions)} @@ -48,12 +49,20 @@ export const renderOptions: RenderOptions = { [RTETypeEnum.blockquote]: (node: RTEDefaultNode, embeds: EmbedByUid, next: RTENext, fullRenderOptions: RenderOptions) => { const props = extractPossibleAttributes(node.attrs) - return
{next(node.children, embeds, fullRenderOptions)}
+ return ( +
+ {next(node.children, embeds, fullRenderOptions)} +
+ ) }, [RTETypeEnum.code]: (node: RTEDefaultNode, embeds: EmbedByUid, next: RTENext, fullRenderOptions: RenderOptions) => { const props = extractPossibleAttributes(node.attrs) - return {next(node.children, embeds, fullRenderOptions)} + return ( + + {next(node.children, embeds, fullRenderOptions)} + + ) }, [RTETypeEnum.embed]: (node: RTEDefaultNode, embeds: EmbedByUid, next: RTENext, fullRenderOptions: RenderOptions) => { @@ -68,7 +77,7 @@ export const renderOptions: RenderOptions = { return null } return ( - ) @@ -76,32 +85,56 @@ export const renderOptions: RenderOptions = { [RTETypeEnum.h1]: (node: RTEDefaultNode, embeds: EmbedByUid, next: RTENext, fullRenderOptions: RenderOptions) => { const props = extractPossibleAttributes(node.attrs) - return

{next(node.children, embeds, fullRenderOptions)}

+ return ( +

+ {next(node.children, embeds, fullRenderOptions)} +

+ ) }, [RTETypeEnum.h2]: (node: RTEDefaultNode, embeds: EmbedByUid, next: RTENext, fullRenderOptions: RenderOptions) => { const props = extractPossibleAttributes(node.attrs) - return

{next(node.children, embeds, fullRenderOptions)}

+ return ( +

+ {next(node.children, embeds, fullRenderOptions)} +

+ ) }, [RTETypeEnum.h3]: (node: RTEDefaultNode, embeds: EmbedByUid, next: RTENext, fullRenderOptions: RenderOptions) => { const props = extractPossibleAttributes(node.attrs) - return

{next(node.children, embeds, fullRenderOptions)}

+ return ( +

+ {next(node.children, embeds, fullRenderOptions)} +

+ ) }, [RTETypeEnum.h4]: (node: RTEDefaultNode, embeds: EmbedByUid, next: RTENext, fullRenderOptions: RenderOptions) => { const props = extractPossibleAttributes(node.attrs) - return

{next(node.children, embeds, fullRenderOptions)}

+ return ( +

+ {next(node.children, embeds, fullRenderOptions)} +

+ ) }, [RTETypeEnum.h5]: (node: RTEDefaultNode, embeds: EmbedByUid, next: RTENext, fullRenderOptions: RenderOptions) => { const props = extractPossibleAttributes(node.attrs) - return
{next(node.children, embeds, fullRenderOptions)}
+ return ( +
+ {next(node.children, embeds, fullRenderOptions)} +
+ ) }, [RTETypeEnum.h6]: (node: RTEDefaultNode, embeds: EmbedByUid, next: RTENext, fullRenderOptions: RenderOptions) => { const props = extractPossibleAttributes(node.attrs) - return
{next(node.children, embeds, fullRenderOptions)}
+ return ( +
+ {next(node.children, embeds, fullRenderOptions)} +
+ ) }, [RTETypeEnum.hr]: () => { @@ -110,17 +143,29 @@ export const renderOptions: RenderOptions = { [RTETypeEnum.li]: (node: RTEDefaultNode, embeds: EmbedByUid, next: RTENext, fullRenderOptions: RenderOptions) => { const props = extractPossibleAttributes(node.attrs) - return
  • {next(node.children, embeds, fullRenderOptions)}
  • + return ( +
  • + {next(node.children, embeds, fullRenderOptions)} +
  • + ) }, [RTETypeEnum.ol]: (node: RTEDefaultNode, embeds: EmbedByUid, next: RTENext, fullRenderOptions: RenderOptions) => { const props = extractPossibleAttributes(node.attrs) - return
      {next(node.children, embeds, fullRenderOptions)}
    + return ( +
      + {next(node.children, embeds, fullRenderOptions)} +
    + ) }, [RTETypeEnum.p]: (node: RTEDefaultNode, embeds: EmbedByUid, next: RTENext, fullRenderOptions: RenderOptions) => { const props = extractPossibleAttributes(node.attrs) - return

    {next(node.children, embeds, fullRenderOptions)}

    + return ( +

    + {next(node.children, embeds, fullRenderOptions)} +

    + ) }, [RTETypeEnum.reference]: (node: RTENode, embeds: EmbedByUid, next: RTENext, fullRenderOptions: RenderOptions) => { @@ -132,6 +177,7 @@ export const renderOptions: RenderOptions = { const alt = image?.node?.title ?? node.attrs.alt return ( {alt} + {next(node.children, embeds, fullRenderOptions)} ) @@ -155,42 +201,74 @@ export const renderOptions: RenderOptions = { [RTETypeEnum.table]: (node: RTEDefaultNode, embeds: EmbedByUid, next: RTENext, fullRenderOptions: RenderOptions) => { const props = extractPossibleAttributes(node.attrs) - return {next(node.children, embeds, fullRenderOptions)}
    + return ( + + {next(node.children, embeds, fullRenderOptions)} +
    + ) }, [RTETypeEnum.thead]: (node: RTEDefaultNode, embeds: EmbedByUid, next: RTENext, fullRenderOptions: RenderOptions) => { const props = extractPossibleAttributes(node.attrs) - return {next(node.children, embeds, fullRenderOptions)} + return ( + + {next(node.children, embeds, fullRenderOptions)} + + ) }, [RTETypeEnum.tbody]: (node: RTEDefaultNode, embeds: EmbedByUid, next: RTENext, fullRenderOptions: RenderOptions) => { const props = extractPossibleAttributes(node.attrs) - return {next(node.children, embeds, fullRenderOptions)} + return ( + + {next(node.children, embeds, fullRenderOptions)} + + ) }, [RTETypeEnum.tfoot]: (node: RTEDefaultNode, embeds: EmbedByUid, next: RTENext, fullRenderOptions: RenderOptions) => { const props = extractPossibleAttributes(node.attrs) - return {next(node.children, embeds, fullRenderOptions)} + return ( + + {next(node.children, embeds, fullRenderOptions)} + + ) }, [RTETypeEnum.tr]: (node: RTEDefaultNode, embeds: EmbedByUid, next: RTENext, fullRenderOptions: RenderOptions) => { const props = extractPossibleAttributes(node.attrs) - return {next(node.children, embeds, fullRenderOptions)} + return ( + + {next(node.children, embeds, fullRenderOptions)} + + ) }, [RTETypeEnum.th]: (node: RTEDefaultNode, embeds: EmbedByUid, next: RTENext, fullRenderOptions: RenderOptions) => { const props = extractPossibleAttributes(node.attrs) - return {next(node.children, embeds, fullRenderOptions)} + return ( + + {next(node.children, embeds, fullRenderOptions)} + + ) }, [RTETypeEnum.td]: (node: RTEDefaultNode, embeds: EmbedByUid, next: RTENext, fullRenderOptions: RenderOptions) => { const props = extractPossibleAttributes(node.attrs) - return {next(node.children, embeds, fullRenderOptions)} + return ( + + {next(node.children, embeds, fullRenderOptions)} + + ) }, [RTETypeEnum.ul]: (node: RTEDefaultNode, embeds: EmbedByUid, next: RTENext, fullRenderOptions: RenderOptions) => { const props = extractPossibleAttributes(node.attrs) - return + return ( + + ) }, /** TextNode wrappers */ @@ -242,7 +320,11 @@ export const renderOptions: RenderOptions = { if (!id) { delete props.id } - return {children} + return ( + + {children} + + ) }, /** diff --git a/components/JsonToHtml/utils.tsx b/components/JsonToHtml/utils.tsx index 290dad829..be686b508 100644 --- a/components/JsonToHtml/utils.tsx +++ b/components/JsonToHtml/utils.tsx @@ -21,65 +21,100 @@ export function groupEmbedsByUid(embedsArray: Node[]) { return embedsByUid } -export function nodeChildrenToHtml(nodes: RTENode[], embeds: EmbedByUid, fullRenderOptions: RenderOptions): any { - return nodes.map(node => nodeToHtml(node, embeds, fullRenderOptions)) + +export function nodeChildrenToHtml( + nodes: RTENode[], + embeds: EmbedByUid, + fullRenderOptions: RenderOptions +): any { + return nodes.map((node, i) => { + // This function either returns a JSX element or null + return { + ...nodeToHtml(node, embeds, fullRenderOptions), + key: `child-rte-${i}`, + } + }) } -export function textNodeToHtml(node: RTETextNode, fullRenderOptions: RenderOptions) { - let text = <>{node.text}; +export function textNodeToHtml( + node: RTETextNode, + fullRenderOptions: RenderOptions +) { + let text = <>{node.text} if (node.classname || node.id) { - text = (fullRenderOptions[RTEMarkType.classnameOrId] as RTERenderMark)(text, node.classname, node.id); + text = (fullRenderOptions[RTEMarkType.classnameOrId] as RTERenderMark)( + text, + node.classname, + node.id + ) } if (node.break) { - text = (fullRenderOptions[RTEMarkType.break] as RTERenderMark)(text); + text = (fullRenderOptions[RTEMarkType.break] as RTERenderMark)(text) } if (node.superscript) { - text = (fullRenderOptions[RTEMarkType.superscript] as RTERenderMark)(text); + text = (fullRenderOptions[RTEMarkType.superscript] as RTERenderMark)(text) } if (node.subscript) { - text = (fullRenderOptions[RTEMarkType.subscript] as RTERenderMark)(text); + text = (fullRenderOptions[RTEMarkType.subscript] as RTERenderMark)(text) } if (node.inlineCode) { - text = (fullRenderOptions[RTEMarkType.inlineCode] as RTERenderMark)(text); + text = (fullRenderOptions[RTEMarkType.inlineCode] as RTERenderMark)(text) } if (node.strikethrough) { - text = (fullRenderOptions[RTEMarkType.strikethrough] as RTERenderMark)(text); + text = (fullRenderOptions[RTEMarkType.strikethrough] as RTERenderMark)(text) } if (node.underline) { - text = (fullRenderOptions[RTEMarkType.underline] as RTERenderMark)(text); + text = (fullRenderOptions[RTEMarkType.underline] as RTERenderMark)(text) } if (node.italic) { - text = (fullRenderOptions[RTEMarkType.italic] as RTERenderMark)(text); + text = (fullRenderOptions[RTEMarkType.italic] as RTERenderMark)(text) } if (node.bold) { - text = (fullRenderOptions[RTEMarkType.bold] as RTERenderMark)(text); + text = (fullRenderOptions[RTEMarkType.bold] as RTERenderMark)(text) } - return text; + return text } -function next(nodes: RTENode[], embeds: EmbedByUid, fullRenderOptions: RenderOptions) { +function next( + nodes: RTENode[], + embeds: EmbedByUid, + fullRenderOptions: RenderOptions +) { return nodeChildrenToHtml(nodes, embeds, fullRenderOptions) } -export function nodeToHtml(node: RTENode, embeds: EmbedByUid, fullRenderOptions: RenderOptions) { +export function nodeToHtml( + node: RTENode, + embeds: EmbedByUid, + fullRenderOptions: RenderOptions +) { if ("type" in node === false) { - return textNodeToHtml(node, fullRenderOptions); + return textNodeToHtml(node, fullRenderOptions) } else { if (fullRenderOptions[node.type] !== undefined) { if (node.type === RTETypeEnum.doc) { return null } - return (fullRenderOptions[node.type] as RTERenderOptionComponent)(node, embeds, next, fullRenderOptions); + return (fullRenderOptions[node.type] as RTERenderOptionComponent)( + node, + embeds, + next, + fullRenderOptions + ) } else { - return next(node.children, embeds, fullRenderOptions); + return next(node.children, embeds, fullRenderOptions) } } } -export function nodesToHtml(nodes: RTENode[], embedsArray: Node[], overrideRenderOptions: RenderOptions) { +export function nodesToHtml( + nodes: RTENode[], + embedsArray: Node[], + overrideRenderOptions: RenderOptions +) { const embeds = groupEmbedsByUid(embedsArray) const fullRenderOptions = { ...renderOptions, ...overrideRenderOptions } - return nodes.map(node => nodeToHtml(node, embeds, fullRenderOptions)) + return nodes.map((node) => nodeToHtml(node, embeds, fullRenderOptions)) }