Skip to content

Commit 6eae109

Browse files
committed
Refactor internalRenderMarkdownInline
1 parent fbfa88b commit 6eae109

7 files changed

Lines changed: 26 additions & 41 deletions

File tree

packages/component/src/BasicToast.js

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,13 @@ import classNames from 'classnames';
66
import PropTypes from 'prop-types';
77
import React, { useCallback, useMemo } from 'react';
88

9+
import ScreenReaderText from './ScreenReaderText';
910
import DismissIcon from './Toast/DismissIcon';
1011
import NotificationIcon from './Toast/NotificationIcon';
1112
import randomId from './Utils/randomId';
12-
import ScreenReaderText from './ScreenReaderText';
13-
import useInternalRenderMarkdownInline from './hooks/internal/useInternalRenderMarkdownInline';
14-
import useStyleSet from './hooks/useStyleSet';
1513
import { useStyleToEmotionObject } from './hooks/internal/styleToEmotionObject';
14+
import useStyleSet from './hooks/useStyleSet';
15+
import renderMarkdownInline from './private/renderMarkdownInline';
1616

1717
const { useDismissNotification, useLocalizer } = hooks;
1818

@@ -29,11 +29,10 @@ const BasicToast = ({ notification: { alt, id, level, message = '' } }) => {
2929
const contentId = useMemo(() => `webchat__toast__${randomId()}`, []);
3030
const localize = useLocalizer();
3131
const dismissNotification = useDismissNotification();
32-
const renderMarkdownInline = useInternalRenderMarkdownInline();
3332
const rootClassName = useStyleToEmotionObject()(ROOT_STYLE) + '';
3433

3534
const handleDismiss = useCallback(() => dismissNotification(id), [dismissNotification, id]);
36-
const html = useMemo(() => ({ __html: renderMarkdownInline(message) }), [message, renderMarkdownInline]);
35+
const html = useMemo(() => ({ __html: renderMarkdownInline(message) }), [message]);
3736

3837
return (
3938
<div

packages/component/src/BasicToaster.js

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,9 @@ import CollapseIcon from './Toast/CollapseIcon';
99
import ExpandIcon from './Toast/ExpandIcon';
1010
import NotificationIcon from './Toast/NotificationIcon';
1111
import randomId from './Utils/randomId';
12-
import useInternalRenderMarkdownInline from './hooks/internal/useInternalRenderMarkdownInline';
1312
import { useStyleToEmotionObject } from './hooks/internal/styleToEmotionObject';
1413
import useStyleSet from './hooks/useStyleSet';
14+
import renderMarkdownInline from './private/renderMarkdownInline';
1515
import { useLiveRegion } from './providers/LiveRegionTwin';
1616

1717
const { useDebouncedNotifications, useLocalizer, useRenderToast } = hooks;
@@ -77,7 +77,6 @@ const BasicToaster = ({ className }) => {
7777
const [expanded, setExpanded] = useState(false);
7878
const localizeWithPlural = useLocalizer({ plural: true });
7979
const renderToast = useRenderToast();
80-
const renderMarkdownInline = useInternalRenderMarkdownInline();
8180
const rootClassName = useStyleToEmotionObject()(ROOT_STYLE) + '';
8281

8382
const handleToggleExpand = useCallback(() => setExpanded(!expanded), [expanded, setExpanded]);
@@ -142,7 +141,7 @@ const BasicToaster = ({ className }) => {
142141
}
143142

144143
return toAnnounce.length > 0 && <Fragment>{toAnnounce}</Fragment>;
145-
}, [renderMarkdownInline, sortedNotifications]);
144+
}, [sortedNotifications]);
146145

147146
return (
148147
<div

packages/component/src/Composer.tsx

Lines changed: 0 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,6 @@
11
/* eslint-disable react/require-default-props */
22

33
import { singleToArray } from '@msinternal/botframework-webchat-base/utils';
4-
import {
5-
parseDocumentFragmentFromString,
6-
serializeDocumentFragmentIntoString,
7-
stripParagraphContainer
8-
} from '@msinternal/botframework-webchat-component-better-link';
94
import { useMemoIterable } from '@msinternal/botframework-webchat-react-hooks';
105
import {
116
Composer as APIComposer,
@@ -29,7 +24,6 @@ import { DecoratorComposer, type DecoratorMiddleware } from 'botframework-webcha
2924
import { type LegacyActivityMiddleware, type Polymiddleware } from 'botframework-webchat-api/middleware.js';
3025
import { StoreDebugAPIRegistry, type StoreDebugAPI } from 'botframework-webchat-core/internal.js';
3126
import classNames from 'classnames';
32-
import { micromark } from 'micromark';
3327
import PropTypes from 'prop-types';
3428
import React, { memo, useCallback, useEffect, useMemo, useRef, useState, type ReactNode } from 'react';
3529
import { Composer as SayComposer } from 'react-say';
@@ -70,7 +64,6 @@ import CSSCustomPropertiesContainer from './Styles/CSSCustomPropertiesContainer'
7064
import ComponentStylesheet from './stylesheet/ComponentStylesheet';
7165
import { type ContextOf } from './types/ContextOf';
7266
import { type FocusTranscriptInit } from './types/internal/FocusTranscriptInit';
73-
import addTargetBlankToHyperlinks from './Utils/addTargetBlankToHyperlinks';
7467
import downscaleImageToDataURL from './Utils/downscaleImageToDataURL';
7568
import mapMap from './Utils/mapMap';
7669

@@ -196,19 +189,6 @@ const ComposerCore = ({
196189
const scrollToCallbacksRef = useRef([]);
197190
const scrollToEndCallbacksRef = useRef([]);
198191

199-
const internalRenderMarkdownInline = useMemo(
200-
() => markdown => {
201-
const documentFragment = parseDocumentFragmentFromString(micromark(markdown));
202-
203-
addTargetBlankToHyperlinks(documentFragment);
204-
205-
const html = serializeDocumentFragmentIntoString(documentFragment);
206-
207-
return stripParagraphContainer(html);
208-
},
209-
[]
210-
);
211-
212192
const styleToEmotionObject = useStyleToEmotionObject();
213193

214194
const patchedStyleSet = useMemo(
@@ -293,7 +273,6 @@ const ComposerCore = ({
293273
dispatchScrollPosition,
294274
dispatchTranscriptFocusByActivityKey,
295275
focusTranscriptCallbacksRef,
296-
internalRenderMarkdownInline,
297276
nonce,
298277
numTranscriptFocusObservers,
299278
observeScrollPosition,
@@ -311,7 +290,6 @@ const ComposerCore = ({
311290
dispatchScrollPosition,
312291
dispatchTranscriptFocusByActivityKey,
313292
focusTranscriptCallbacksRef,
314-
internalRenderMarkdownInline,
315293
nonce,
316294
numTranscriptFocusObservers,
317295
observeScrollPosition,

packages/component/src/Utils/InlineMarkdown.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ const InlineMarkdown = (props: InlineMarkdownProps) => {
7878
}
7979
});
8080

81-
// TODO: [P*] Instead of <button value="">, it need to be <button data-markdown-href=""> to trigger the CSS.
81+
// TODO: [P*] Instead of <button value="">, it need to be <button data-markdown-href="a1b2c"> to trigger the CSS.
8282
// TODO: [P*] Remove trailing <p></p>.
8383

8484
return { __html: stripParagraphContainer(serializeDocumentFragmentIntoString(documentFragment)) };

packages/component/src/hooks/internal/WebChatUIContext.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ export type ContextType = {
1010
dictateAbortable: any;
1111
dispatchScrollPosition: any;
1212
dispatchTranscriptFocusByActivityKey: any;
13-
internalRenderMarkdownInline: any;
1413
numTranscriptFocusObservers: any;
1514
observeScrollPosition: any;
1615
observeTranscriptFocus: any;

packages/component/src/hooks/internal/useInternalRenderMarkdownInline.js

Lines changed: 0 additions & 9 deletions
This file was deleted.
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import {
2+
parseDocumentFragmentFromString,
3+
serializeDocumentFragmentIntoString,
4+
stripParagraphContainer
5+
} from '@msinternal/botframework-webchat-component-better-link';
6+
import { micromark } from 'micromark';
7+
import addTargetBlankToHyperlinks from '../Utils/addTargetBlankToHyperlinks';
8+
9+
function renderMarkdownInline(markdown: string): string {
10+
const documentFragment = parseDocumentFragmentFromString(micromark(markdown));
11+
12+
addTargetBlankToHyperlinks(documentFragment);
13+
14+
const html = serializeDocumentFragmentIntoString(documentFragment);
15+
16+
return stripParagraphContainer(html);
17+
}
18+
19+
export default renderMarkdownInline;

0 commit comments

Comments
 (0)