diff --git a/src/components/HTMLEngineProvider/BaseHTMLEngineProvider.js b/src/components/HTMLEngineProvider/BaseHTMLEngineProvider.js index 86ddf0a52bb3..d663275a405c 100755 --- a/src/components/HTMLEngineProvider/BaseHTMLEngineProvider.js +++ b/src/components/HTMLEngineProvider/BaseHTMLEngineProvider.js @@ -64,6 +64,7 @@ function BaseHTMLEngineProvider(props) { tagName: 'next-steps', mixedUAStyles: {...styles.textLabelSupporting}, }), + 'next-steps-email': defaultHTMLElementModels.span.extend({tagName: 'next-steps-email'}), }), [styles.colorMuted, styles.formError, styles.mb0, styles.textLabelSupporting], ); diff --git a/src/components/HTMLEngineProvider/HTMLRenderers/NextStepsEmailRenderer.tsx b/src/components/HTMLEngineProvider/HTMLRenderers/NextStepsEmailRenderer.tsx new file mode 100644 index 000000000000..c5d3a15a30e2 --- /dev/null +++ b/src/components/HTMLEngineProvider/HTMLRenderers/NextStepsEmailRenderer.tsx @@ -0,0 +1,19 @@ +import React from 'react'; +import Text from '@components/Text'; +import useThemeStyles from '@hooks/useThemeStyles'; + +type NextStepsEmailRendererProps = { + tnode: { + data: string; + }; +}; + +function NextStepsEmailRenderer({tnode}: NextStepsEmailRendererProps) { + const styles = useThemeStyles(); + + return {tnode.data}; +} + +NextStepsEmailRenderer.displayName = 'NextStepsEmailRenderer'; + +export default NextStepsEmailRenderer; diff --git a/src/components/HTMLEngineProvider/HTMLRenderers/index.js b/src/components/HTMLEngineProvider/HTMLRenderers/index.js index 69f8eeac798e..45a9ce893d9f 100644 --- a/src/components/HTMLEngineProvider/HTMLRenderers/index.js +++ b/src/components/HTMLEngineProvider/HTMLRenderers/index.js @@ -4,6 +4,7 @@ import EditedRenderer from './EditedRenderer'; import ImageRenderer from './ImageRenderer'; import MentionHereRenderer from './MentionHereRenderer'; import MentionUserRenderer from './MentionUserRenderer'; +import NextStepsEmailRenderer from './NextStepsEmailRenderer'; import PreRenderer from './PreRenderer'; /** @@ -20,4 +21,5 @@ export default { pre: PreRenderer, 'mention-user': MentionUserRenderer, 'mention-here': MentionHereRenderer, + 'next-steps-email': NextStepsEmailRenderer, }; diff --git a/src/libs/NextStepUtils.ts b/src/libs/NextStepUtils.ts index b58f2af1eeac..ebad204a29a3 100644 --- a/src/libs/NextStepUtils.ts +++ b/src/libs/NextStepUtils.ts @@ -1,4 +1,5 @@ import Str from 'expensify-common/lib/str'; +import EmailUtils from './EmailUtils'; type Message = { text: string; @@ -9,9 +10,17 @@ function parseMessage(messages: Message[] | undefined) { let nextStepHTML = ''; messages?.forEach((part) => { + const isEmail = Str.isValidEmail(part.text); // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing - const tagType = part.type || 'span'; - nextStepHTML += `<${tagType}>${Str.safeEscape(part.text)}`; + let tagType = part.type ?? 'span'; + let content = Str.safeEscape(part.text); + + if (isEmail) { + tagType = 'next-steps-email'; + content = EmailUtils.prefixMailSeparatorsWithBreakOpportunities(content); + } + + nextStepHTML += `<${tagType}>${content}`; }); const formattedHtml = nextStepHTML