You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
session-desktop/ts/components/basic/SessionHTMLRenderer.tsx

38 lines
1.1 KiB
TypeScript

import DOMPurify from 'dompurify';
import { createElement } from 'react';
import { supportedFormattingTags } from './Localizer';
import { LocalizerHtmlTag } from '../../localization/localeTools';
type ReceivedProps = {
html: string;
tag?: LocalizerHtmlTag;
key?: any;
className?: string;
};
/**
* Renders HTML as a string, sanitizing it first.
*
* @param props - The props to use for rendering.
* @param props.html - The HTML to render.
* @param props.tag - The tag to render the HTML as. Defaults to a div.
* @param props.key - The key to use for the rendered element.
* @param props.className - The className to use for the rendered element.
*
* For a list of supported tags, see {@link supportedFormattingTags}.
*
* @returns The rendered HTML as a string.
*/
export const SessionHtmlRenderer = ({ tag = 'div', key, html, className }: ReceivedProps) => {
const clean = DOMPurify.sanitize(html, {
USE_PROFILES: { html: true },
ALLOWED_TAGS: supportedFormattingTags,
});
return createElement(tag, {
key,
className,
dangerouslySetInnerHTML: { __html: clean },
});
};