Skip to content

Commit 4d4d12e

Browse files
committed
Clean up singleToArray
1 parent ee6af7a commit 4d4d12e

6 files changed

Lines changed: 29 additions & 29 deletions

File tree

packages/api/src/hooks/Composer.tsx

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -342,7 +342,7 @@ const ComposerCore = ({
342342
const cardActionContext = useMemo(
343343
() =>
344344
createCardActionContext({
345-
cardActionMiddleware: Object.freeze([...singleToArray(cardActionMiddleware ?? [])]),
345+
cardActionMiddleware: Object.freeze([...singleToArray(cardActionMiddleware)]),
346346
continuous: !!styleOptions.speechRecognitionContinuous,
347347
directLine,
348348
dispatch,
@@ -422,7 +422,7 @@ const ComposerCore = ({
422422
applyMiddlewareForRenderer(
423423
'activity status',
424424
{ strict: false },
425-
...singleToArray(activityStatusMiddleware ?? []),
425+
...singleToArray(activityStatusMiddleware),
426426
() => () => () => false
427427
)({}),
428428
[activityStatusMiddleware]
@@ -433,7 +433,7 @@ const ComposerCore = ({
433433
applyMiddlewareForRenderer(
434434
'attachment for screen reader',
435435
{ strict: true },
436-
...singleToArray(attachmentForScreenReaderMiddleware ?? []),
436+
...singleToArray(attachmentForScreenReaderMiddleware),
437437
() =>
438438
() =>
439439
({ attachment }) => {
@@ -457,7 +457,7 @@ const ComposerCore = ({
457457
() =>
458458
applyMiddlewareForLegacyRenderer(
459459
'attachment',
460-
...singleToArray(attachmentMiddleware ?? []),
460+
...singleToArray(attachmentMiddleware),
461461
() =>
462462
() =>
463463
({ attachment }) => {
@@ -472,12 +472,12 @@ const ComposerCore = ({
472472
);
473473

474474
const groupActivitiesMiddleware = useMemoIterable<readonly GroupActivitiesMiddleware[] | undefined>(
475-
() => Object.freeze(singleToArray(groupActivitiesMiddlewareFromProps ?? [])),
475+
() => Object.freeze(singleToArray(groupActivitiesMiddlewareFromProps)),
476476
[groupActivitiesMiddlewareFromProps]
477477
);
478478

479479
const avatarMiddleware = useMemoIterable<readonly AvatarMiddleware[]>(
480-
() => singleToArray(avatarMiddlewareFromProps ?? []),
480+
() => singleToArray(avatarMiddlewareFromProps),
481481
[avatarMiddlewareFromProps]
482482
);
483483

@@ -491,7 +491,7 @@ const ComposerCore = ({
491491
applyMiddlewareForRenderer(
492492
'toast',
493493
{ strict: false },
494-
...singleToArray(toastMiddleware ?? []),
494+
...singleToArray(toastMiddleware),
495495
() =>
496496
() =>
497497
({ notification }) => {
@@ -510,7 +510,7 @@ const ComposerCore = ({
510510
applyMiddlewareForRenderer(
511511
'typing indicator',
512512
{ strict: false },
513-
...singleToArray(typingIndicatorMiddleware ?? []),
513+
...singleToArray(typingIndicatorMiddleware),
514514
() => () => () => false
515515
)({}),
516516
[typingIndicatorMiddleware]
@@ -521,14 +521,14 @@ const ComposerCore = ({
521521
applyMiddlewareForRenderer(
522522
'scroll to end button',
523523
{ strict: true },
524-
...singleToArray(scrollToEndButtonMiddleware ?? []),
524+
...singleToArray(scrollToEndButtonMiddleware),
525525
() => () => () => false
526526
)() as any,
527527
[scrollToEndButtonMiddleware]
528528
);
529529

530530
const activityMiddleware = useMemoIterable<readonly LegacyActivityMiddleware[]>(
531-
() => singleToArray(activityMiddlewareFromProps ?? []),
531+
() => singleToArray(activityMiddlewareFromProps),
532532
[activityMiddlewareFromProps]
533533
);
534534

packages/api/src/providers/StyleOptions/private/rectifyStyleOptions.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
import { type StrictStyleOptions, type StyleOptions } from 'botframework-webchat-api';
2-
1+
import type { StrictStyleOptions, default as StyleOptions } from '../../../StyleOptions';
32
import normalizeStyleOptions from '../../../normalizeStyleOptions';
43
import patchStyleOptionsFromDeprecatedProps from '../../../patchStyleOptionsFromDeprecatedProps';
54

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
1-
/** @deprecated Will be removed on or after 2028-03-16. */
2-
export default function singleToArray<T>(singleOrArray: T | T[]): T[];
3-
/** @deprecated Will be removed on or after 2028-03-16. */
4-
export default function singleToArray<T>(singleOrArray: T | readonly T[]): readonly T[];
1+
const EMPTY_ARRAY: readonly any[] = Object.freeze([]);
2+
3+
export default function singleToArray(singleOrArray: undefined): readonly never[];
4+
export default function singleToArray<T>(singleOrArray: T | T[]): readonly T[];
55

66
/** @deprecated Will be removed on or after 2028-03-16. */
7-
export default function singleToArray<T>(singleOrArray: T | T[]): T[] {
8-
return singleOrArray ? (Array.isArray(singleOrArray) ? [...singleOrArray] : [singleOrArray]) : [];
7+
export default function singleToArray<T>(singleOrArray: T | T[]): readonly T[] {
8+
return typeof singleOrArray === 'undefined'
9+
? EMPTY_ARRAY
10+
: Object.freeze(Array.isArray(singleOrArray) ? [...singleOrArray] : [singleOrArray]);
911
}

packages/component/src/Composer.tsx

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -377,14 +377,14 @@ const Composer = ({
377377
const theme = useTheme();
378378

379379
const patchedActivityMiddleware = useMemoIterable<readonly LegacyActivityMiddleware[]>(
380-
() => Object.freeze([...singleToArray(activityMiddleware ?? []), ...theme.activityMiddleware]),
380+
() => Object.freeze([...singleToArray(activityMiddleware), ...theme.activityMiddleware]),
381381
[activityMiddleware, theme.activityMiddleware]
382382
);
383383

384384
const patchedActivityStatusMiddleware = useMemoIterable<readonly ActivityStatusMiddleware[]>(
385385
() =>
386386
Object.freeze([
387-
...singleToArray(activityStatusMiddleware ?? []),
387+
...singleToArray(activityStatusMiddleware),
388388
...theme.activityStatusMiddleware,
389389
...createDefaultActivityStatusMiddleware()
390390
]),
@@ -394,7 +394,7 @@ const Composer = ({
394394
const patchedAttachmentForScreenReaderMiddleware = useMemoIterable<readonly AttachmentForScreenReaderMiddleware[]>(
395395
() =>
396396
Object.freeze([
397-
...singleToArray(attachmentForScreenReaderMiddleware ?? []),
397+
...singleToArray(attachmentForScreenReaderMiddleware),
398398
...theme.attachmentForScreenReaderMiddleware,
399399
...createDefaultAttachmentForScreenReaderMiddleware()
400400
]),
@@ -404,22 +404,22 @@ const Composer = ({
404404
const patchedAttachmentMiddleware = useMemoIterable<readonly AttachmentMiddleware[]>(
405405
() =>
406406
Object.freeze([
407-
...singleToArray(attachmentMiddleware ?? []),
407+
...singleToArray(attachmentMiddleware),
408408
...theme.attachmentMiddleware,
409409
...createDefaultAttachmentMiddleware()
410410
]),
411411
[attachmentMiddleware, theme.attachmentMiddleware]
412412
);
413413

414414
const patchedAvatarMiddleware = useMemoIterable<readonly AvatarMiddleware[]>(
415-
() => Object.freeze([...singleToArray(avatarMiddleware ?? []), ...theme.avatarMiddleware]),
415+
() => Object.freeze([...singleToArray(avatarMiddleware), ...theme.avatarMiddleware]),
416416
[avatarMiddleware, theme.avatarMiddleware]
417417
);
418418

419419
const patchedCardActionMiddleware = useMemoIterable<readonly CardActionMiddleware[]>(
420420
() =>
421421
Object.freeze([
422-
...singleToArray(cardActionMiddleware ?? []),
422+
...singleToArray(cardActionMiddleware),
423423
...theme.cardActionMiddleware,
424424
...createDefaultCardActionMiddleware()
425425
]),
@@ -444,7 +444,7 @@ const Composer = ({
444444
const patchedToastMiddleware = useMemoIterable<readonly ToastMiddleware[]>(
445445
() =>
446446
Object.freeze([
447-
...singleToArray(toastMiddleware ?? []),
447+
...singleToArray(toastMiddleware),
448448
...theme.toastMiddleware,
449449
...createDefaultToastMiddleware()
450450
]),
@@ -454,7 +454,7 @@ const Composer = ({
454454
const patchedTypingIndicatorMiddleware = useMemoIterable<readonly TypingIndicatorMiddleware[]>(
455455
() =>
456456
Object.freeze([
457-
...singleToArray(typingIndicatorMiddleware ?? []),
457+
...singleToArray(typingIndicatorMiddleware),
458458
...theme.typingIndicatorMiddleware,
459459
...createDefaultTypingIndicatorMiddleware()
460460
]),
@@ -464,7 +464,7 @@ const Composer = ({
464464
const patchedScrollToEndButtonMiddleware = useMemoIterable<readonly ScrollToEndButtonMiddleware[]>(
465465
() =>
466466
Object.freeze([
467-
...singleToArray(scrollToEndButtonMiddleware ?? []),
467+
...singleToArray(scrollToEndButtonMiddleware),
468468
...theme.scrollToEndButtonMiddleware,
469469
...createDefaultScrollToEndButtonMiddleware()
470470
]),

packages/component/src/Middleware/Avatar/createDefaultAvatarPolymiddleware.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import type { StyleOptions } from 'botframework-webchat-api';
22
import {
33
avatarComponent,
44
createAvatarPolymiddleware,
5-
// For type portability.
5+
// Required but unused, for type portability.
66
type __INTERNAL_DO_NOT_USE__avatarPolymiddlewareRequestStyleOptionsSymbol
77
} from 'botframework-webchat-api/middleware';
88
import DefaultAvatar from './DefaultAvatar';

packages/component/src/Transcript/hooks/useRenderActivityProps.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import { hooks } from 'botframework-webchat-api';
2-
import { __INTERNAL_DO_NOT_USE__avatarPolymiddlewareRequestStyleOptionsSymbol } from 'botframework-webchat-api/internal';
32
import { useBuildRenderAvatarCallback } from 'botframework-webchat-api/middleware';
43
import { type WebChatActivity } from 'botframework-webchat-core';
54
import { useMemo, type ReactNode } from 'react';

0 commit comments

Comments
 (0)