forked from microsoft/BotFramework-WebChat
-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathuseCreateActivityStatusRenderer.tsx
More file actions
59 lines (47 loc) · 2.13 KB
/
useCreateActivityStatusRenderer.tsx
File metadata and controls
59 lines (47 loc) · 2.13 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
/* eslint react/prop-types: "off" */
/* eslint react/require-default-props: "off" */
import { type WebChatActivity } from 'botframework-webchat-core';
import React, { memo, useMemo, type ReactNode } from 'react';
import useGetKeyByActivity from '../hooks/useGetKeyByActivity';
import useSendStatusByActivityKey from '../hooks/useSendStatusByActivityKey';
import { type RenderActivityStatus } from '../types/ActivityStatusMiddleware';
import { type SendStatus } from '../types/SendStatus';
import useWebChatAPIContext from './internal/useWebChatAPIContext';
type ActivityStatusContainerCoreProps = Readonly<{
activity: WebChatActivity;
hideTimestamp: boolean;
sendStatus: SendStatus;
}>;
const ActivityStatusContainerCore = memo(
({ activity, hideTimestamp, sendStatus }: ActivityStatusContainerCoreProps) => {
const { activityStatusRenderer: createActivityStatusRenderer }: { activityStatusRenderer: RenderActivityStatus } =
useWebChatAPIContext();
return createActivityStatusRenderer({
activity,
hideTimestamp,
sendState: sendStatus === 'send failed' || sendStatus === 'sent' ? sendStatus : 'sending'
});
}
);
type ActivityStatusContainerProps = Readonly<{
activity: WebChatActivity;
hideTimestamp: boolean;
}>;
const ActivityStatusContainer = memo(({ activity, hideTimestamp }: ActivityStatusContainerProps) => {
const [sendStatusByActivityKey] = useSendStatusByActivityKey();
const getKeyByActivity = useGetKeyByActivity();
const key = getKeyByActivity(activity);
const sendStatus = (typeof key === 'string' && sendStatusByActivityKey.get(key)) || 'sent';
return <ActivityStatusContainerCore activity={activity} hideTimestamp={hideTimestamp} sendStatus={sendStatus} />;
});
export type ActivityStatusRenderer = (renderOptions: {
activity: WebChatActivity;
}) => (props?: { hideTimestamp?: boolean }) => ReactNode;
export default function useCreateActivityStatusRenderer(): ActivityStatusRenderer {
return useMemo<ActivityStatusRenderer>(
() =>
({ activity }) =>
({ hideTimestamp } = {}) => <ActivityStatusContainer activity={activity} hideTimestamp={hideTimestamp} />,
[]
);
}