From b04b5cc3e1d058992071163104a01fddd0aed5d5 Mon Sep 17 00:00:00 2001 From: Tilman Vatteroth Date: Tue, 6 Jun 2023 22:36:04 +0200 Subject: [PATCH] feat: add doAfterRendering method to markdown renderer extension Signed-off-by: Tilman Vatteroth --- .../_base-classes/markdown-renderer-extension.ts | 4 ++++ .../markdown-to-react/markdown-to-react.spec.tsx | 5 ++++- .../markdown-to-react/markdown-to-react.tsx | 6 +++++- .../test-utils/test-markdown-renderer-extension.ts | 8 ++++++++ 4 files changed, 21 insertions(+), 2 deletions(-) diff --git a/frontend/src/components/markdown-renderer/extensions/_base-classes/markdown-renderer-extension.ts b/frontend/src/components/markdown-renderer/extensions/_base-classes/markdown-renderer-extension.ts index d60f8117a..91ad62197 100644 --- a/frontend/src/components/markdown-renderer/extensions/_base-classes/markdown-renderer-extension.ts +++ b/frontend/src/components/markdown-renderer/extensions/_base-classes/markdown-renderer-extension.ts @@ -32,4 +32,8 @@ export abstract class MarkdownRendererExtension { public buildTagNameAllowList(): string[] { return [] } + + public doAfterRendering(): void { + return + } } diff --git a/frontend/src/components/markdown-renderer/markdown-to-react/markdown-to-react.spec.tsx b/frontend/src/components/markdown-renderer/markdown-to-react/markdown-to-react.spec.tsx index 508a07d65..2b00e8c90 100644 --- a/frontend/src/components/markdown-renderer/markdown-to-react/markdown-to-react.spec.tsx +++ b/frontend/src/components/markdown-renderer/markdown-to-react/markdown-to-react.spec.tsx @@ -55,14 +55,17 @@ describe('markdown to react', () => { }) it('will use markdown render extensions', () => { + const doAfterCallback = jest.fn() + const view = render( test']} - markdownRenderExtensions={[new TestMarkdownRendererExtension()]} + markdownRenderExtensions={[new TestMarkdownRendererExtension(doAfterCallback)]} newlinesAreBreaks={true} allowHtml={false} /> ) expect(view.container).toMatchSnapshot() + expect(doAfterCallback).toBeCalled() }) }) diff --git a/frontend/src/components/markdown-renderer/markdown-to-react/markdown-to-react.tsx b/frontend/src/components/markdown-renderer/markdown-to-react/markdown-to-react.tsx index 0c251dfa1..0dc523247 100644 --- a/frontend/src/components/markdown-renderer/markdown-to-react/markdown-to-react.tsx +++ b/frontend/src/components/markdown-renderer/markdown-to-react/markdown-to-react.tsx @@ -11,7 +11,7 @@ import { LineContentToLineIdMapper } from './utils/line-content-to-line-id-mappe import { NodeToReactTransformer } from './utils/node-to-react-transformer' import type { ParserOptions } from '@hedgedoc/html-to-react' import type DOMPurify from 'dompurify' -import React, { useMemo } from 'react' +import React, { useEffect, useMemo } from 'react' export interface MarkdownToReactProps { markdownContentLines: string[] @@ -68,5 +68,9 @@ export const MarkdownToReact: React.FC = ({ [markdownRenderExtensions] ) + useEffect(() => { + markdownRenderExtensions.forEach((extension) => extension.doAfterRendering()) + }, [html, markdownRenderExtensions]) + return } diff --git a/frontend/src/components/markdown-renderer/markdown-to-react/test-utils/test-markdown-renderer-extension.ts b/frontend/src/components/markdown-renderer/markdown-to-react/test-utils/test-markdown-renderer-extension.ts index 147498a94..54c8cc9c1 100644 --- a/frontend/src/components/markdown-renderer/markdown-to-react/test-utils/test-markdown-renderer-extension.ts +++ b/frontend/src/components/markdown-renderer/markdown-to-react/test-utils/test-markdown-renderer-extension.ts @@ -12,6 +12,10 @@ import type MarkdownIt from 'markdown-it' import Token from 'markdown-it/lib/token' export class TestMarkdownRendererExtension extends MarkdownRendererExtension { + constructor(private doAfterCallback: () => void) { + super() + } + buildNodeProcessors(): NodeProcessor[] { return [new TestNodeProcessor()] } @@ -37,4 +41,8 @@ export class TestMarkdownRendererExtension extends MarkdownRendererExtension { markdownIt.renderer.rules.post = () => 'post' }) } + + doAfterRendering() { + this.doAfterCallback() + } }