1- import { hooks , type ActivityComponentFactory } from 'botframework-webchat-api' ;
2- import { type WebChatActivity } from 'botframework-webchat-core' ;
1+ import { hooks } from 'botframework-webchat-api' ;
2+ import { bridgeComponentPropsSchema , type BridgeComponentProps } from 'botframework-webchat-middleware' ;
3+ import { validateProps } from 'botframework-webchat-react-valibot' ;
34import React , { memo , useCallback , useMemo } from 'react' ;
45
5- import useFirstActivityInSenderGroup from '../Middleware/ActivityGrouping/ui/SenderGrouping/useFirstActivity ' ;
6- import useLastActivityInSenderGroup from '../Middleware/ActivityGrouping/ui/SenderGrouping/useLastActivity ' ;
7- import useFirstActivityInStatusGroup from '../Middleware/ActivityGrouping/ui/StatusGrouping/useFirstActivity ' ;
8- import useLastActivityInStatusGroup from '../Middleware /ActivityGrouping/ui/StatusGrouping/useLastActivity ' ;
9- import useActivityElementMapRef from '../providers/ChatHistoryDOM/useActivityElementRef ' ;
10- import isZeroOrPositive from '../Utils/isZeroOrPositive ' ;
11- import ActivityRow from './ActivityRow ' ;
6+ import useActivityElementMapRef from '../../../providers/ChatHistoryDOM/useActivityElementRef ' ;
7+ import ActivityRow from '../../../Transcript/ActivityRow ' ;
8+ import isZeroOrPositive from '../../../Utils/isZeroOrPositive ' ;
9+ import useFirstActivityInSenderGroup from '../.. /ActivityGrouping/ui/SenderGrouping/useFirstActivity ' ;
10+ import useLastActivityInSenderGroup from '../../ActivityGrouping/ui/SenderGrouping/useLastActivity ' ;
11+ import useFirstActivityInStatusGroup from '../../ActivityGrouping/ui/StatusGrouping/useFirstActivity ' ;
12+ import useLastActivityInStatusGroup from '../../ActivityGrouping/ui/StatusGrouping/useLastActivity ' ;
1213
13- const { useCreateActivityStatusRenderer, useCreateAvatarRenderer, useGetKeyByActivity, useStyleOptions } = hooks ;
14+ const {
15+ useCreateActivityStatusRenderer,
16+ useCreateAvatarRenderer,
17+ useGetKeyByActivity,
18+ useRenderAttachment,
19+ useStyleOptions
20+ } = hooks ;
1421
15- type TranscriptActivityProps = Readonly < {
16- activity : WebChatActivity ;
17- renderActivity : Exclude < ReturnType < ActivityComponentFactory > , false > ;
18- } > ;
22+ function LegacyActivityBridge ( props : BridgeComponentProps ) {
23+ const { activity, render } = validateProps ( bridgeComponentPropsSchema , props ) ;
1924
20- const TranscriptActivity = ( { activity, renderActivity } : TranscriptActivityProps ) => {
2125 const [ { bubbleFromUserNubOffset, bubbleNubOffset, groupTimestamp, showAvatarInGroup } ] = useStyleOptions ( ) ;
2226 const [ firstActivityInSenderGroup ] = useFirstActivityInSenderGroup ( ) ;
2327 const [ firstActivityInStatusGroup ] = useFirstActivityInStatusGroup ( ) ;
@@ -26,9 +30,9 @@ const TranscriptActivity = ({ activity, renderActivity }: TranscriptActivityProp
2630 const activityElementMapRef = useActivityElementMapRef ( ) ;
2731 const createActivityStatusRenderer = useCreateActivityStatusRenderer ( ) ;
2832 const getKeyByActivity = useGetKeyByActivity ( ) ;
33+ const renderAttachment = useRenderAttachment ( ) ;
2934 const renderAvatar = useCreateAvatarRenderer ( ) ;
3035
31- const activityKey : string = useMemo ( ( ) => getKeyByActivity ( activity ) , [ activity , getKeyByActivity ] ) ;
3236 const hideAllTimestamps = groupTimestamp === false ;
3337 const isFirstInSenderGroup =
3438 firstActivityInSenderGroup === activity || typeof firstActivityInSenderGroup === 'undefined' ;
@@ -53,6 +57,7 @@ const TranscriptActivity = ({ activity, renderActivity }: TranscriptActivityProp
5357 [ activity , createActivityStatusRenderer ]
5458 ) ;
5559
60+ const activityKey : string = useMemo ( ( ) => getKeyByActivity ( activity ) , [ activity , getKeyByActivity ] ) ;
5661 const activityCallbackRef = useCallback (
5762 ( activityElement : HTMLElement ) => {
5863 activityElement
@@ -83,23 +88,22 @@ const TranscriptActivity = ({ activity, renderActivity }: TranscriptActivityProp
8388 showCallout = true ;
8489 }
8590
86- const children = useMemo (
91+ const node = useMemo (
8792 ( ) =>
88- renderActivity ( {
93+ render ( renderAttachment , {
8994 hideTimestamp,
9095 renderActivityStatus,
9196 renderAvatar : renderAvatarForSenderGroup ,
9297 showCallout
9398 } ) ,
94- [ hideTimestamp , renderActivity , renderActivityStatus , renderAvatarForSenderGroup , showCallout ]
99+ [ render , hideTimestamp , renderActivityStatus , renderAttachment , renderAvatarForSenderGroup , showCallout ]
95100 ) ;
96101
97102 return (
98103 < ActivityRow activity = { activity } ref = { activityCallbackRef } >
99- { children }
104+ { node }
100105 </ ActivityRow >
101106 ) ;
102- } ;
107+ }
103108
104- export default memo ( TranscriptActivity ) ;
105- export { type TranscriptActivityProps } ;
109+ export default memo ( LegacyActivityBridge ) ;
0 commit comments