Skip to content

Commit 86d6d43

Browse files
committed
Clean up useMemoIterable
1 parent 7315971 commit 86d6d43

3 files changed

Lines changed: 67 additions & 57 deletions

File tree

packages/api/src/hooks/Composer.tsx

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,7 @@ import useStyleOptions from './useStyleOptions';
100100
import ErrorBoundary from './utils/ErrorBoundary';
101101
import observableToPromise from './utils/observableToPromise';
102102
import { parseUIState } from './validation/uiState';
103+
import type { ActivityMiddleware } from '../../dist/botframework-webchat-api.mjs';
103104

104105
// List of Redux actions factory we are hoisting as Web Chat functions
105106
const DISPATCHERS = {
@@ -272,11 +273,11 @@ type ComposerCoreProps = Readonly<{
272273
}>;
273274

274275
const ComposerCore = ({
275-
activityMiddleware,
276+
activityMiddleware: activityMiddlewareFromProps,
276277
activityStatusMiddleware,
277278
attachmentForScreenReaderMiddleware,
278279
attachmentMiddleware,
279-
avatarMiddleware,
280+
avatarMiddleware: avatarMiddlewareFromProps,
280281
cardActionMiddleware,
281282
children,
282283
dir,
@@ -472,16 +473,17 @@ const ComposerCore = ({
472473
);
473474

474475
const groupActivitiesMiddleware = useMemoIterable<readonly GroupActivitiesMiddleware[] | undefined>(
475-
() =>
476-
groupActivitiesMiddlewareFromProps
477-
? Object.freeze(singleToArray(groupActivitiesMiddlewareFromProps ?? []))
478-
: undefined,
476+
() => Object.freeze(singleToArray(groupActivitiesMiddlewareFromProps ?? [])),
479477
[groupActivitiesMiddlewareFromProps]
480478
);
481479

480+
const avatarMiddleware = useMemoIterable<readonly AvatarMiddleware[]>(
481+
() => singleToArray(avatarMiddlewareFromProps ?? []),
482+
[avatarMiddlewareFromProps]
483+
);
484+
482485
const polymiddlewareForLegacyAvatarMiddleware = useMemo<Polymiddleware | undefined>(
483-
() =>
484-
avatarMiddleware ? createAvatarPolymiddlewareFromLegacy(...singleToArray(avatarMiddleware ?? [])) : undefined,
486+
() => createAvatarPolymiddlewareFromLegacy(...avatarMiddleware),
485487
[avatarMiddleware]
486488
);
487489

@@ -526,11 +528,13 @@ const ComposerCore = ({
526528
[scrollToEndButtonMiddleware]
527529
);
528530

531+
const activityMiddleware = useMemoIterable<readonly ActivityMiddleware[]>(
532+
() => singleToArray(activityMiddlewareFromProps ?? []),
533+
[activityMiddlewareFromProps]
534+
);
535+
529536
const polymiddlewareForLegacyActivityMiddleware = useMemo<Polymiddleware | undefined>(
530-
() =>
531-
activityMiddleware
532-
? createActivityPolymiddlewareFromLegacy(...singleToArray(activityMiddleware ?? []))
533-
: undefined,
537+
() => createActivityPolymiddlewareFromLegacy(...activityMiddleware),
534538
[activityMiddleware]
535539
);
536540

packages/bundle/src/AddFullBundle.tsx

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -57,19 +57,15 @@ function AddFullBundle({
5757
}: AddFullBundleProps) {
5858
adaptiveCardHostConfig && adaptiveCardHostConfigDeprecation();
5959

60-
const attachmentForScreenReaderMiddleware = useMemoIterable<
61-
readonly AttachmentForScreenReaderMiddleware[] | undefined
62-
>(() => {
63-
const middleware = singleToArray(attachmentForScreenReaderMiddlewareFromProps);
64-
65-
return middleware.length ? middleware : undefined;
66-
}, [attachmentForScreenReaderMiddlewareFromProps]);
67-
68-
const attachmentMiddleware = useMemoIterable<readonly AttachmentMiddleware[] | undefined>(() => {
69-
const middleware = singleToArray(attachmentMiddlewareFromProps);
60+
const attachmentForScreenReaderMiddleware = useMemoIterable<readonly AttachmentForScreenReaderMiddleware[]>(
61+
() => singleToArray(attachmentForScreenReaderMiddlewareFromProps),
62+
[attachmentForScreenReaderMiddlewareFromProps]
63+
);
7064

71-
return middleware.length ? middleware : undefined;
72-
}, [attachmentMiddlewareFromProps]);
65+
const attachmentMiddleware = useMemoIterable<readonly AttachmentMiddleware[]>(
66+
() => singleToArray(attachmentMiddlewareFromProps),
67+
[attachmentMiddlewareFromProps]
68+
);
7369

7470
const patchedProps = useComposerProps({
7571
attachmentForScreenReaderMiddleware,

packages/component/src/Composer.tsx

Lines changed: 43 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,21 @@ import { singleToArray } from '@msinternal/botframework-webchat-base/utils';
44
import { useMemoIterable } from '@msinternal/botframework-webchat-react-hooks';
55
import {
66
Composer as APIComposer,
7+
AttachmentForScreenReaderMiddleware,
78
extractSendBoxMiddleware,
89
extractSendBoxToolbarMiddleware,
910
hooks,
1011
WebSpeechPonyfillFactory,
12+
type ActivityStatusMiddleware,
1113
type ComposerProps as APIComposerProps,
14+
type AttachmentMiddleware,
1215
type AvatarMiddleware,
16+
type CardActionMiddleware,
17+
type ScrollToEndButtonMiddleware,
1318
type SendBoxMiddleware,
14-
type SendBoxToolbarMiddleware
19+
type SendBoxToolbarMiddleware,
20+
type ToastMiddleware,
21+
type TypingIndicatorMiddleware
1522
} from 'botframework-webchat-api';
1623
import { DecoratorComposer, type DecoratorMiddleware } from 'botframework-webchat-api/decorator';
1724
import { type LegacyActivityMiddleware, type Polymiddleware } from 'botframework-webchat-api/middleware';
@@ -369,13 +376,12 @@ const Composer = ({
369376
const { nonce, onTelemetry } = composerProps;
370377
const theme = useTheme();
371378

372-
const patchedActivityMiddleware = useMemo<readonly LegacyActivityMiddleware[] | undefined>(() => {
373-
const middleware = Object.freeze([...singleToArray(activityMiddleware ?? []), ...theme.activityMiddleware]);
374-
375-
return middleware.length ? middleware : undefined;
376-
}, [activityMiddleware, theme.activityMiddleware]);
379+
const patchedActivityMiddleware = useMemo<readonly LegacyActivityMiddleware[]>(
380+
() => Object.freeze([...singleToArray(activityMiddleware ?? []), ...theme.activityMiddleware]),
381+
[activityMiddleware, theme.activityMiddleware]
382+
);
377383

378-
const patchedActivityStatusMiddleware = useMemo(
384+
const patchedActivityStatusMiddleware = useMemoIterable<readonly ActivityStatusMiddleware[]>(
379385
() =>
380386
Object.freeze([
381387
...singleToArray(activityStatusMiddleware ?? []),
@@ -385,7 +391,7 @@ const Composer = ({
385391
[activityStatusMiddleware, theme.activityStatusMiddleware]
386392
);
387393

388-
const patchedAttachmentForScreenReaderMiddleware = useMemo(
394+
const patchedAttachmentForScreenReaderMiddleware = useMemoIterable<readonly AttachmentForScreenReaderMiddleware[]>(
389395
() =>
390396
Object.freeze([
391397
...singleToArray(attachmentForScreenReaderMiddleware ?? []),
@@ -395,7 +401,7 @@ const Composer = ({
395401
[attachmentForScreenReaderMiddleware, theme.attachmentForScreenReaderMiddleware]
396402
);
397403

398-
const patchedAttachmentMiddleware = useMemo(
404+
const patchedAttachmentMiddleware = useMemoIterable<readonly AttachmentMiddleware[]>(
399405
() =>
400406
Object.freeze([
401407
...singleToArray(attachmentMiddleware ?? []),
@@ -405,13 +411,12 @@ const Composer = ({
405411
[attachmentMiddleware, theme.attachmentMiddleware]
406412
);
407413

408-
const patchedAvatarMiddleware = useMemo<readonly AvatarMiddleware[] | undefined>(() => {
409-
const middleware = Object.freeze([...singleToArray(avatarMiddleware ?? []), ...theme.avatarMiddleware]);
410-
411-
return middleware.length ? middleware : undefined;
412-
}, [avatarMiddleware, theme.avatarMiddleware]);
414+
const patchedAvatarMiddleware = useMemoIterable<readonly AvatarMiddleware[]>(
415+
() => Object.freeze([...singleToArray(avatarMiddleware ?? []), ...theme.avatarMiddleware]),
416+
[avatarMiddleware, theme.avatarMiddleware]
417+
);
413418

414-
const patchedCardActionMiddleware = useMemo(
419+
const patchedCardActionMiddleware = useMemoIterable<readonly CardActionMiddleware[]>(
415420
() =>
416421
Object.freeze([
417422
...singleToArray(cardActionMiddleware ?? []),
@@ -434,32 +439,37 @@ const Composer = ({
434439
[polymiddleware, theme.polymiddleware]
435440
);
436441

437-
const patchedToastMiddleware = useMemo(
438-
() => [...singleToArray(toastMiddleware ?? []), ...theme.toastMiddleware, ...createDefaultToastMiddleware()],
442+
const patchedToastMiddleware = useMemoIterable<readonly ToastMiddleware[]>(
443+
() =>
444+
Object.freeze([
445+
...singleToArray(toastMiddleware ?? []),
446+
...theme.toastMiddleware,
447+
...createDefaultToastMiddleware()
448+
]),
439449
[toastMiddleware, theme.toastMiddleware]
440450
);
441451

442-
const patchedTypingIndicatorMiddleware = useMemo(
443-
() => [
444-
...singleToArray(typingIndicatorMiddleware ?? []),
445-
...theme.typingIndicatorMiddleware,
446-
...createDefaultTypingIndicatorMiddleware()
447-
],
452+
const patchedTypingIndicatorMiddleware = useMemoIterable<readonly TypingIndicatorMiddleware[]>(
453+
() =>
454+
Object.freeze([
455+
...singleToArray(typingIndicatorMiddleware ?? []),
456+
...theme.typingIndicatorMiddleware,
457+
...createDefaultTypingIndicatorMiddleware()
458+
]),
448459
[typingIndicatorMiddleware, theme.typingIndicatorMiddleware]
449460
);
450461

451-
const defaultScrollToEndButtonMiddleware = useMemo(() => createDefaultScrollToEndButtonMiddleware(), []);
452-
453-
const patchedScrollToEndButtonMiddleware = useMemo(
454-
() => [
455-
...singleToArray(scrollToEndButtonMiddleware ?? []),
456-
...theme.scrollToEndButtonMiddleware,
457-
...defaultScrollToEndButtonMiddleware
458-
],
459-
[defaultScrollToEndButtonMiddleware, scrollToEndButtonMiddleware, theme.scrollToEndButtonMiddleware]
462+
const patchedScrollToEndButtonMiddleware = useMemoIterable<readonly ScrollToEndButtonMiddleware[]>(
463+
() =>
464+
Object.freeze([
465+
...singleToArray(scrollToEndButtonMiddleware ?? []),
466+
...theme.scrollToEndButtonMiddleware,
467+
...createDefaultScrollToEndButtonMiddleware()
468+
]),
469+
[scrollToEndButtonMiddleware, theme.scrollToEndButtonMiddleware]
460470
);
461471

462-
const sendBoxMiddleware = useMemo<readonly SendBoxMiddleware[]>(
472+
const sendBoxMiddleware = useMemoIterable<readonly SendBoxMiddleware[]>(
463473
() =>
464474
Object.freeze([
465475
...extractSendBoxMiddleware(sendBoxMiddlewareFromProps),

0 commit comments

Comments
 (0)