| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- import React from 'react';
- import { ErrorBoundary, FallbackProps } from 'react-error-boundary';
- import ReactMarkdown from 'react-markdown-customkeyprop';
- import type { RendererOptions } from '~/interfaces/renderer-options';
- import loggerFactory from '~/utils/logger';
- import 'katex/dist/katex.min.css';
- const logger = loggerFactory('components:Page:RevisionRenderer');
- type Props = {
- rendererOptions: RendererOptions,
- markdown: string,
- additionalClassName?: string,
- }
- const ErrorFallback: React.FC<FallbackProps> = React.memo(({ error, resetErrorBoundary }) => {
- return (
- <div role="alert">
- <p>Something went wrong:</p>
- <pre>{error.message}</pre>
- <button className='btn btn-primary' onClick={resetErrorBoundary}>Reload</button>
- </div>
- );
- });
- ErrorFallback.displayName = 'ErrorFallback';
- const RevisionRenderer = React.memo((props: Props): JSX.Element => {
- const {
- rendererOptions, markdown, additionalClassName,
- } = props;
- return (
- <ErrorBoundary FallbackComponent={ErrorFallback}>
- <ReactMarkdown
- {...rendererOptions}
- className={`wiki ${additionalClassName ?? ''}`}
- >
- {markdown}
- </ReactMarkdown>
- </ErrorBoundary>
- );
- });
- RevisionRenderer.displayName = 'RevisionRenderer';
- export default RevisionRenderer;
|