MermaidViewer.tsx 643 B

12345678910111213141516171819202122232425262728
  1. import React, { useRef, useEffect, ReactNode } from 'react';
  2. import mermaid from 'mermaid';
  3. type MermaidViewerProps = {
  4. children: ReactNode,
  5. }
  6. export const MermaidViewer = React.memo((props: MermaidViewerProps): JSX.Element => {
  7. const { children } = props;
  8. const ref = useRef<HTMLDivElement>(null);
  9. useEffect(() => {
  10. if (ref.current != null && children != null) {
  11. mermaid.init({}, ref.current);
  12. }
  13. }, [children]);
  14. return (
  15. children
  16. ? <div ref={ref} key={children as string}>
  17. {children}
  18. </div>
  19. : <div key={children as string} />
  20. );
  21. });
  22. MermaidViewer.displayName = 'MermaidViewer';