Skip to content

Commit 26d4f9e

Browse files
Claudecompulim
andcommitted
Fix legacy sendBox bridge types and build errors
Co-authored-by: compulim <1622400+compulim@users.noreply.github.com>
1 parent 4794f65 commit 26d4f9e

2 files changed

Lines changed: 14 additions & 13 deletions

File tree

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,20 @@
11
import { validateProps } from '@msinternal/botframework-webchat-react-valibot';
2-
import React, { Fragment, memo } from 'react';
2+
import React, { Fragment, memo, useMemo } from 'react';
33

44
import { legacySendBoxBridgeComponentPropsSchema, type LegacySendBoxBridgeComponentProps } from './createSendBoxPolymiddlewareFromLegacy';
55

66
/**
77
* This component is solely for `createSendBoxPolymiddlewareFromLegacy`.
88
*
99
* @param props Legacy sendBox middleware props, includes `className` and `render`.
10-
* @returns A sendBox node rendered using the `props.render` component.
10+
* @returns A sendBox node rendered using the `props.render` function.
1111
*/
1212
function LegacySendBoxBridge(props: LegacySendBoxBridgeComponentProps) {
13-
const { className, render: RenderComponent } = validateProps(legacySendBoxBridgeComponentPropsSchema, props);
13+
const { className, render } = validateProps(legacySendBoxBridgeComponentPropsSchema, props);
1414

15-
return (
16-
<Fragment>
17-
<RenderComponent className={className} />
18-
</Fragment>
19-
);
15+
const children = useMemo(() => render({ className }), [className, render]);
16+
17+
return <Fragment>{children}</Fragment>;
2018
}
2119

2220
export default memo(LegacySendBoxBridge);

packages/api/src/legacy/createSendBoxPolymiddlewareFromLegacy.tsx

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,14 @@ import {
44
type SendBoxPolymiddleware
55
} from '@msinternal/botframework-webchat-api-middleware';
66
import { type LegacySendBoxMiddleware } from '@msinternal/botframework-webchat-api-middleware/legacy';
7-
import { composeEnhancer } from 'handler-chain';
8-
import { type ComponentType } from 'react';
7+
import { composeEnhancer, type Enhancer } from 'handler-chain';
8+
import { type ReactNode } from 'react';
99
import { custom, function_, never, object, optional, pipe, readonly, safeParse, string, type InferInput } from 'valibot';
1010

1111
import LegacySendBoxBridge from './LegacySendBoxBridge';
1212

13-
type LegacySendBoxRenderFunction = ComponentType<{ readonly className?: string | undefined }>;
13+
type LegacySendBoxRenderFunction = (props: { readonly className?: string | undefined }) => ReactNode;
14+
type LegacySendBoxComponent = ReactNode;
1415

1516
const legacySendBoxBridgeComponentPropsSchema = pipe(
1617
object({
@@ -35,7 +36,9 @@ type LegacySendBoxBridgeComponentProps = Readonly<
3536
function createSendBoxPolymiddlewareFromLegacy(
3637
...middleware: readonly LegacySendBoxMiddleware[]
3738
): SendBoxPolymiddleware {
38-
const legacyEnhancer = composeEnhancer(...middleware.map(middleware => middleware()));
39+
const legacyEnhancer: Enhancer<LegacySendBoxComponent, void> = composeEnhancer<LegacySendBoxComponent, void>(
40+
...(middleware.map(middleware => middleware()) as Enhancer<LegacySendBoxComponent, void>[])
41+
);
3942

4043
return createSendBoxPolymiddleware(next => {
4144
const legacyHandler = legacyEnhancer(() => {
@@ -47,7 +50,7 @@ function createSendBoxPolymiddlewareFromLegacy(
4750
return () => {
4851
const legacyResult = legacyHandler();
4952

50-
return legacyResult ? sendBoxComponent(LegacySendBoxBridge, { render: legacyResult() }) : undefined;
53+
return legacyResult ? sendBoxComponent(LegacySendBoxBridge, { render: () => legacyResult }) : undefined;
5154
};
5255
});
5356
}

0 commit comments

Comments
 (0)