-
Notifications
You must be signed in to change notification settings - Fork 1.6k
Expand file tree
/
Copy pathuseComposerProps.ts
More file actions
81 lines (73 loc) · 3.41 KB
/
useComposerProps.ts
File metadata and controls
81 lines (73 loc) · 3.41 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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
import { AttachmentForScreenReaderMiddleware, AttachmentMiddleware, Polymiddleware } from 'botframework-webchat-api';
import { type HTMLContentTransformMiddleware } from 'botframework-webchat-component';
import { useMemo } from 'react';
import createAdaptiveCardsAttachmentForScreenReaderMiddleware from './adaptiveCards/createAdaptiveCardsAttachmentForScreenReaderMiddleware';
import createAdaptiveCardsAttachmentMiddleware from './adaptiveCards/createAdaptiveCardsAttachmentMiddleware';
import createAdaptiveCardsStyleSet from './adaptiveCards/Styles/createAdaptiveCardsStyleSet';
import createDefaultHeroCardPolymiddleware from './heroCard/createDefaultHeroCardPolymiddleware';
import createHTMLContentTransformMiddleware from './markdown/createHTMLContentTransformMiddleware';
import defaultRenderMarkdown from './markdown/renderMarkdown';
export default function useComposerProps({
attachmentForScreenReaderMiddleware,
attachmentMiddleware,
htmlContentTransformMiddleware,
renderMarkdown,
styleOptions,
styleSet
}: Readonly<{
attachmentForScreenReaderMiddleware: readonly AttachmentForScreenReaderMiddleware[] | undefined;
attachmentMiddleware: readonly AttachmentMiddleware[] | undefined;
htmlContentTransformMiddleware: readonly HTMLContentTransformMiddleware[];
renderMarkdown?: (
markdown: string,
newLineOptions: { markdownRespectCRLF: boolean },
linkOptions: { externalLinkAlt: string }
) => string;
styleOptions: any;
styleSet: any;
}>): Readonly<{
attachmentForScreenReaderMiddleware: AttachmentForScreenReaderMiddleware[];
attachmentMiddleware: AttachmentMiddleware[];
extraStyleSet: any;
htmlContentTransformMiddleware: readonly HTMLContentTransformMiddleware[];
polymiddleware: readonly Polymiddleware[];
renderMarkdown: (
markdown: string,
newLineOptions: { markdownRespectCRLF: boolean },
linkOptions: { externalLinkAlt: string }
) => string;
}> {
const patchedAttachmentMiddleware = useMemo(
() => [...(attachmentMiddleware ?? []), createAdaptiveCardsAttachmentMiddleware()],
[attachmentMiddleware]
);
const patchedAttachmentForScreenReaderMiddleware = useMemo(
() => [...(attachmentForScreenReaderMiddleware ?? []), createAdaptiveCardsAttachmentForScreenReaderMiddleware()],
[attachmentForScreenReaderMiddleware]
);
// When styleSet is not specified, the styleOptions will be used to create Adaptive Cards styleSet and merged into useStyleSet.
const extraStyleSet = useMemo(
() => (styleSet ? undefined : createAdaptiveCardsStyleSet(styleOptions)),
[styleOptions, styleSet]
);
const patchedRenderMarkdown = useMemo(
() => (typeof renderMarkdown === 'undefined' ? defaultRenderMarkdown : renderMarkdown),
[renderMarkdown]
);
const patchedHTMLContentTransformMiddleware = useMemo<readonly HTMLContentTransformMiddleware[]>(
() => Object.freeze([...(htmlContentTransformMiddleware || []), ...createHTMLContentTransformMiddleware()]),
[htmlContentTransformMiddleware]
);
const polymiddleware = useMemo<readonly Polymiddleware[]>(
() => Object.freeze([createDefaultHeroCardPolymiddleware()]),
[]
);
return Object.freeze({
attachmentForScreenReaderMiddleware: patchedAttachmentForScreenReaderMiddleware,
attachmentMiddleware: patchedAttachmentMiddleware,
extraStyleSet,
htmlContentTransformMiddleware: patchedHTMLContentTransformMiddleware,
polymiddleware,
renderMarkdown: patchedRenderMarkdown
});
}