@azure/communication-react 1.4.3-alpha-202301060015.0 → 1.4.3-alpha-202301080014.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/communication-react.d.ts +59 -9
- package/dist/dist-cjs/communication-react/index.js +57 -65
- package/dist/dist-cjs/communication-react/index.js.map +1 -1
- package/dist/dist-esm/acs-ui-common/src/identifier.js +3 -47
- package/dist/dist-esm/acs-ui-common/src/identifier.js.map +1 -1
- package/dist/dist-esm/acs-ui-common/src/telemetryVersion.js +1 -1
- package/dist/dist-esm/acs-ui-common/src/telemetryVersion.js.map +1 -1
- package/dist/dist-esm/calling-stateful-client/src/CallClientState.d.ts +2 -1
- package/dist/dist-esm/calling-stateful-client/src/CallClientState.js.map +1 -1
- package/dist/dist-esm/calling-stateful-client/src/Converter.js +1 -1
- package/dist/dist-esm/calling-stateful-client/src/Converter.js.map +1 -1
- package/dist/dist-esm/communication-react/src/index.d.ts +1 -0
- package/dist/dist-esm/communication-react/src/index.js.map +1 -1
- package/dist/dist-esm/react-components/src/components/ParticipantItem.js +4 -2
- package/dist/dist-esm/react-components/src/components/ParticipantItem.js.map +1 -1
- package/dist/dist-esm/react-components/src/components/VideoGallery.d.ts +44 -8
- package/dist/dist-esm/react-components/src/components/VideoGallery.js +27 -10
- package/dist/dist-esm/react-components/src/components/VideoGallery.js.map +1 -1
- package/dist/dist-esm/react-components/src/components/VideoTile.js +1 -1
- package/dist/dist-esm/react-components/src/components/VideoTile.js.map +1 -1
- package/dist/dist-esm/react-components/src/components/index.d.ts +1 -0
- package/dist/dist-esm/react-components/src/components/index.js.map +1 -1
- package/dist/dist-esm/react-composites/src/composites/CallComposite/CallComposite.d.ts +17 -0
- package/dist/dist-esm/react-composites/src/composites/CallComposite/CallComposite.js.map +1 -1
- package/dist/dist-esm/react-composites/src/composites/CallComposite/components/MediaGallery.d.ts +2 -0
- package/dist/dist-esm/react-composites/src/composites/CallComposite/components/MediaGallery.js +18 -2
- package/dist/dist-esm/react-composites/src/composites/CallComposite/components/MediaGallery.js.map +1 -1
- package/dist/dist-esm/react-composites/src/composites/CallComposite/index.d.ts +1 -0
- package/dist/dist-esm/react-composites/src/composites/CallComposite/index.js.map +1 -1
- package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/CallPage.js +3 -1
- package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/CallPage.js.map +1 -1
- package/dist/dist-esm/react-composites/src/composites/CallComposite/utils/MediaGalleryUtils.js +1 -1
- package/dist/dist-esm/react-composites/src/composites/CallComposite/utils/MediaGalleryUtils.js.map +1 -1
- package/package.json +9 -9
package/dist/dist-esm/react-composites/src/composites/CallComposite/components/MediaGallery.js
CHANGED
@@ -29,6 +29,7 @@ const remoteVideoViewOptions = {
|
|
29
29
|
* @private
|
30
30
|
*/
|
31
31
|
export const MediaGallery = (props) => {
|
32
|
+
var _a;
|
32
33
|
const videoGalleryProps = usePropsFor(VideoGallery);
|
33
34
|
const cameraSwitcherCameras = useSelector(localVideoCameraCycleButtonSelector);
|
34
35
|
const cameraSwitcherCallback = useHandlers(LocalVideoCameraCycleButton);
|
@@ -42,11 +43,26 @@ export const MediaGallery = (props) => {
|
|
42
43
|
React.createElement(AvatarPersona, Object.assign({ userId: userId }, options, { dataProvider: props.onFetchAvatarPersonaData })))));
|
43
44
|
}, [props.onFetchAvatarPersonaData]);
|
44
45
|
useLocalVideoStartTrigger(!!props.isVideoStreamOn);
|
46
|
+
/* @conditional-compile-remove(pinned-participants) */
|
47
|
+
const remoteVideoTileMenuOptions = useMemo(() => {
|
48
|
+
var _a;
|
49
|
+
return ((_a = props.remoteVideoTileMenuOptions) === null || _a === void 0 ? void 0 : _a.isHidden)
|
50
|
+
? false
|
51
|
+
: props.isMobile
|
52
|
+
? { kind: 'drawer', hostId: props.drawerMenuHostId }
|
53
|
+
: { kind: 'contextual' };
|
54
|
+
}, [(_a = props.remoteVideoTileMenuOptions) === null || _a === void 0 ? void 0 : _a.isHidden, props.isMobile, props.drawerMenuHostId]);
|
45
55
|
const VideoGalleryMemoized = useMemo(() => {
|
46
56
|
return (React.createElement(VideoGallery, Object.assign({}, videoGalleryProps, { localVideoViewOptions: localVideoViewOptions, remoteVideoViewOptions: remoteVideoViewOptions, styles: VideoGalleryStyles, layout: "floatingLocalVideo", showCameraSwitcherInLocalPreview: props.isMobile, localVideoCameraCycleButtonProps: cameraSwitcherProps, onRenderAvatar: onRenderAvatar,
|
47
57
|
/* @conditional-compile-remove(pinned-participants) */
|
48
|
-
|
49
|
-
}, [
|
58
|
+
remoteVideoTileMenuOptions: remoteVideoTileMenuOptions })));
|
59
|
+
}, [
|
60
|
+
videoGalleryProps,
|
61
|
+
props.isMobile,
|
62
|
+
onRenderAvatar,
|
63
|
+
cameraSwitcherProps,
|
64
|
+
/* @conditional-compile-remove(pinned-participants) */ remoteVideoTileMenuOptions
|
65
|
+
]);
|
50
66
|
return (React.createElement(React.Fragment, null,
|
51
67
|
React.createElement(Announcer, { announcementString: announcerString, ariaLive: 'polite' }),
|
52
68
|
VideoGalleryMemoized));
|
package/dist/dist-esm/react-composites/src/composites/CallComposite/components/MediaGallery.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"MediaGallery.js","sourceRoot":"","sources":["../../../../../../../../react-composites/src/composites/CallComposite/components/MediaGallery.tsx"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,OAAO,KAAK,EAAE,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACzE,OAAO,EACL,YAAY,EAIZ,SAAS,EACV,4CAAmC;
|
1
|
+
{"version":3,"file":"MediaGallery.js","sourceRoot":"","sources":["../../../../../../../../react-composites/src/composites/CallComposite/components/MediaGallery.tsx"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport {\n VideoGallery,\n VideoStreamOptions,\n OnRenderAvatarCallback,\n CustomAvatarOptions,\n Announcer\n} from '@internal/react-components';\n/* @conditional-compile-remove(pinned-participants) */\nimport { VideoTileContextualMenuProps, VideoTileDrawerMenuProps } from '@internal/react-components';\nimport { usePropsFor } from '../hooks/usePropsFor';\nimport { AvatarPersona, AvatarPersonaDataCallback } from '../../common/AvatarPersona';\nimport { mergeStyles, Stack } from '@fluentui/react';\nimport { getIsPreviewCameraOn } from '../selectors/baseSelectors';\nimport { useHandlers } from '../hooks/useHandlers';\nimport { useSelector } from '../hooks/useSelector';\nimport { localVideoCameraCycleButtonSelector } from '../selectors/LocalVideoTileSelector';\nimport { LocalVideoCameraCycleButton } from '@internal/react-components';\nimport { _formatString } from '@internal/acs-ui-common';\nimport { useParticipantChangedAnnouncement } from '../utils/MediaGalleryUtils';\n/* @conditional-compile-remove(pinned-participants) */\nimport { RemoteVideoTileMenuOptions } from '../CallComposite';\n\nconst VideoGalleryStyles = {\n root: {\n height: '100%',\n minHeight: '10rem', // space affordance to ensure media gallery is never collapsed\n minWidth: '6rem'\n }\n};\n\nconst localVideoViewOptions = {\n scalingMode: 'Crop',\n isMirrored: true\n} as VideoStreamOptions;\n\nconst remoteVideoViewOptions = {\n scalingMode: 'Crop'\n} as VideoStreamOptions;\n\n/**\n * @private\n */\nexport interface MediaGalleryProps {\n isVideoStreamOn?: boolean;\n isMicrophoneChecked?: boolean;\n onStartLocalVideo: () => Promise<void>;\n onRenderAvatar?: OnRenderAvatarCallback;\n onFetchAvatarPersonaData?: AvatarPersonaDataCallback;\n isMobile?: boolean;\n drawerMenuHostId?: string;\n /* @conditional-compile-remove(pinned-participants) */\n remoteVideoTileMenuOptions?: RemoteVideoTileMenuOptions;\n}\n\n/**\n * @private\n */\nexport const MediaGallery = (props: MediaGalleryProps): JSX.Element => {\n const videoGalleryProps = usePropsFor(VideoGallery);\n const cameraSwitcherCameras = useSelector(localVideoCameraCycleButtonSelector);\n const cameraSwitcherCallback = useHandlers(LocalVideoCameraCycleButton);\n const announcerString = useParticipantChangedAnnouncement();\n\n const cameraSwitcherProps = useMemo(() => {\n return {\n ...cameraSwitcherCallback,\n ...cameraSwitcherCameras\n };\n }, [cameraSwitcherCallback, cameraSwitcherCameras]);\n\n const onRenderAvatar = useCallback(\n (userId?: string, options?: CustomAvatarOptions) => {\n return (\n <Stack className={mergeStyles({ position: 'absolute', height: '100%', width: '100%' })}>\n <Stack styles={{ root: { margin: 'auto', maxHeight: '100%' } }}>\n <AvatarPersona userId={userId} {...options} dataProvider={props.onFetchAvatarPersonaData} />\n </Stack>\n </Stack>\n );\n },\n [props.onFetchAvatarPersonaData]\n );\n\n useLocalVideoStartTrigger(!!props.isVideoStreamOn);\n\n /* @conditional-compile-remove(pinned-participants) */\n const remoteVideoTileMenuOptions: false | VideoTileContextualMenuProps | VideoTileDrawerMenuProps = useMemo(() => {\n return props.remoteVideoTileMenuOptions?.isHidden\n ? false\n : props.isMobile\n ? { kind: 'drawer', hostId: props.drawerMenuHostId }\n : { kind: 'contextual' };\n }, [props.remoteVideoTileMenuOptions?.isHidden, props.isMobile, props.drawerMenuHostId]);\n\n const VideoGalleryMemoized = useMemo(() => {\n return (\n <VideoGallery\n {...videoGalleryProps}\n localVideoViewOptions={localVideoViewOptions}\n remoteVideoViewOptions={remoteVideoViewOptions}\n styles={VideoGalleryStyles}\n layout=\"floatingLocalVideo\"\n showCameraSwitcherInLocalPreview={props.isMobile}\n localVideoCameraCycleButtonProps={cameraSwitcherProps}\n onRenderAvatar={onRenderAvatar}\n /* @conditional-compile-remove(pinned-participants) */\n remoteVideoTileMenuOptions={remoteVideoTileMenuOptions}\n />\n );\n }, [\n videoGalleryProps,\n props.isMobile,\n onRenderAvatar,\n cameraSwitcherProps,\n /* @conditional-compile-remove(pinned-participants) */ remoteVideoTileMenuOptions\n ]);\n\n return (\n <>\n <Announcer announcementString={announcerString} ariaLive={'polite'} />\n {VideoGalleryMemoized}\n </>\n );\n};\n\n/**\n * @private\n *\n * `shouldTransition` is an extra predicate that controls whether this hooks actually transitions the call.\n * The rule of hooks disallows calling the hook conditionally, so this predicate can be used to make the decision.\n */\nexport const useLocalVideoStartTrigger = (isLocalVideoAvailable: boolean, shouldTransition?: boolean): void => {\n // Once a call is joined, we need to transition the local preview camera setting into the call.\n // This logic is needed on any screen that we might join a call from:\n // - The Media gallery\n // - The lobby page\n // - The networkReconnect interstitial that may show at the start of a call.\n //\n // @TODO: Can we simply have the callHandlers handle this transition logic.\n const [isButtonStatusSynced, setIsButtonStatusSynced] = useState(false);\n const isPreviewCameraOn = useSelector(getIsPreviewCameraOn);\n const mediaGalleryHandlers = useHandlers(MediaGallery);\n useEffect(() => {\n if (shouldTransition !== false) {\n if (isPreviewCameraOn && !isLocalVideoAvailable && !isButtonStatusSynced) {\n mediaGalleryHandlers.onStartLocalVideo();\n }\n setIsButtonStatusSynced(true);\n }\n }, [shouldTransition, isButtonStatusSynced, isPreviewCameraOn, isLocalVideoAvailable, mediaGalleryHandlers]);\n};\n\"../../../../../react-components/src\"\"../../../../../acs-ui-common/src\""]}
|
@@ -1,6 +1,7 @@
|
|
1
1
|
export { CallComposite } from './CallComposite';
|
2
2
|
export type { CallCompositeOptions, CallCompositeProps } from './CallComposite';
|
3
3
|
export type { DeviceCheckOptions } from './CallComposite';
|
4
|
+
export type { RemoteVideoTileMenuOptions } from './CallComposite';
|
4
5
|
export type { CallControlDisplayType, CallControlOptions } from './types/CallControlOptions';
|
5
6
|
export type { CustomCallControlButtonPlacement, CustomCallControlButtonCallback, CustomCallControlButtonCallbackArgs, CustomCallControlButtonProps, CustomControlButtonProps } from './types/CallControlOptions';
|
6
7
|
export * from './Strings';
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../react-composites/src/composites/CallComposite/index.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../react-composites/src/composites/CallComposite/index.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAgBhD,cAAc,WAAW,CAAC;AAE1B,OAAO,EACL,mCAAmC,EACnC,6CAA6C,EAC7C,gCAAgC,EACjC,MAAM,WAAW,CAAC;AAEnB,yDAAyD;AACzD,OAAO,EAAE,sBAAsB,EAAE,gCAAgC,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nexport { CallComposite } from './CallComposite';\nexport type { CallCompositeOptions, CallCompositeProps } from './CallComposite';\n/* @conditional-compile-remove(call-readiness) */\nexport type { DeviceCheckOptions } from './CallComposite';\n/* @conditional-compile-remove(pinned-participants) */\nexport type { RemoteVideoTileMenuOptions } from './CallComposite';\nexport type { CallControlDisplayType, CallControlOptions } from './types/CallControlOptions';\n/* @conditional-compile-remove(control-bar-button-injection) */\nexport type {\n CustomCallControlButtonPlacement,\n CustomCallControlButtonCallback,\n CustomCallControlButtonCallbackArgs,\n CustomCallControlButtonProps,\n CustomControlButtonProps\n} from './types/CallControlOptions';\n\nexport * from './Strings';\n\nexport {\n createAzureCommunicationCallAdapter,\n createAzureCommunicationCallAdapterFromClient,\n useAzureCommunicationCallAdapter\n} from './adapter';\n\n/* @conditional-compile-remove(teams-identity-support) */\nexport { createTeamsCallAdapter, createTeamsCallAdapterFromClient, useTeamsCallAdapter } from './adapter';\n\n/* @conditional-compile-remove(teams-identity-support) */\nexport type { TeamsCallAdapter, TeamsCallAdapterArgs } from './adapter';\n\nexport type {\n AzureCommunicationCallAdapterArgs,\n CallAdapterLocator,\n CommonCallAdapter,\n CallAdapterCallOperations\n} from './adapter';\n\n/* @conditional-compile-remove(rooms) */\nexport type { AzureCommunicationCallAdapterOptions } from './adapter';\n\n/* @conditional-compile-remove(teams-adhoc-call) */\nexport type { CallParticipantsLocator } from './adapter';\n\nexport type {\n CallAdapter,\n CallAdapterCallEndedEvent,\n CallAdapterCallManagement,\n CallAdapterClientState,\n CallAdapterDeviceManagement,\n CallAdapterState,\n CallAdapterSubscribers,\n CallAdapterUiState,\n CallCompositePage,\n CallEndedListener,\n CallIdChangedListener,\n DiagnosticChangedEventListner,\n DisplayNameChangedListener,\n IsLocalScreenSharingActiveChangedListener,\n IsMutedChangedListener,\n IsSpeakingChangedListener,\n MediaDiagnosticChangedEvent,\n NetworkDiagnosticChangedEvent,\n ParticipantsJoinedListener,\n ParticipantsLeftListener\n} from './adapter';\n"]}
|
@@ -47,7 +47,9 @@ export const CallPage = (props) => {
|
|
47
47
|
/* @conditional-compile-remove(one-to-n-calling) */
|
48
48
|
onFetchAvatarPersonaData: onFetchAvatarPersonaData, mobileView: mobileView,
|
49
49
|
/* @conditional-compile-remove(one-to-n-calling) */
|
50
|
-
modalLayerHostId: props.modalLayerHostId, onRenderGalleryContent: () => _isInCall(callStatus) ? (isNetworkHealthy(networkReconnectTileProps.networkReconnectValue) ? (React.createElement(MediaGallery, Object.assign({ isMobile: mobileView }, mediaGalleryProps, mediaGalleryHandlers, { onRenderAvatar: onRenderAvatar, onFetchAvatarPersonaData: onFetchAvatarPersonaData,
|
50
|
+
modalLayerHostId: props.modalLayerHostId, onRenderGalleryContent: () => _isInCall(callStatus) ? (isNetworkHealthy(networkReconnectTileProps.networkReconnectValue) ? (React.createElement(MediaGallery, Object.assign({ isMobile: mobileView }, mediaGalleryProps, mediaGalleryHandlers, { onRenderAvatar: onRenderAvatar, onFetchAvatarPersonaData: onFetchAvatarPersonaData,
|
51
|
+
/* @conditional-compile-remove(pinned-participants) */
|
52
|
+
remoteVideoTileMenuOptions: options === null || options === void 0 ? void 0 : options.remoteVideoTileMenu, drawerMenuHostId: drawerMenuHostId }))) : (React.createElement(NetworkReconnectTile, Object.assign({}, networkReconnectTileProps)))) : (React.createElement(React.Fragment, null)), dataUiId: 'call-page' }));
|
51
53
|
};
|
52
54
|
/**
|
53
55
|
* @private
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"CallPage.js","sourceRoot":"","sources":["../../../../../../../../react-composites/src/composites/CallComposite/pages/CallPage.tsx"],"names":[],"mappings":"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
|
1
|
+
{"version":3,"file":"CallPage.js","sourceRoot":"","sources":["../../../../../../../../react-composites/src/composites/CallComposite/pages/CallPage.tsx"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport { DiagnosticQuality } from '@azure/communication-calling';\nimport { useId } from '@fluentui/react-hooks';\nimport { _isInCall } from '@internal/calling-component-bindings';\nimport { ErrorBar, OnRenderAvatarCallback, ParticipantMenuItemsCallback } from '@internal/react-components';\nimport React from 'react';\nimport { AvatarPersonaDataCallback } from '../../common/AvatarPersona';\nimport { useLocale } from '../../localization';\nimport { CallCompositeOptions } from '../CallComposite';\nimport { CallArrangement } from '../components/CallArrangement';\nimport { MediaGallery } from '../components/MediaGallery';\nimport { NetworkReconnectTile } from '../components/NetworkReconnectTile';\nimport { useHandlers } from '../hooks/useHandlers';\nimport { usePropsFor } from '../hooks/usePropsFor';\nimport { useSelector } from '../hooks/useSelector';\nimport { callStatusSelector } from '../selectors/callStatusSelector';\nimport { complianceBannerSelector } from '../selectors/complianceBannerSelector';\nimport { mediaGallerySelector } from '../selectors/mediaGallerySelector';\nimport { mutedNotificationSelector } from '../selectors/mutedNotificationSelector';\nimport { networkReconnectTileSelector } from '../selectors/networkReconnectTileSelector';\nimport { reduceCallControlsForMobile } from '../utils';\n\n/**\n * @private\n */\nexport interface CallPageProps {\n mobileView: boolean;\n /* @conditional-compile-remove(one-to-n-calling) */\n modalLayerHostId: string;\n callInvitationURL?: string;\n onRenderAvatar?: OnRenderAvatarCallback;\n onFetchAvatarPersonaData?: AvatarPersonaDataCallback;\n onFetchParticipantMenuItems?: ParticipantMenuItemsCallback;\n options?: CallCompositeOptions;\n}\n\n/**\n * @private\n */\nexport const CallPage = (props: CallPageProps): JSX.Element => {\n const {\n callInvitationURL,\n onRenderAvatar,\n onFetchAvatarPersonaData,\n onFetchParticipantMenuItems,\n options,\n mobileView\n } = props;\n\n // To use useProps to get these states, we need to create another file wrapping Call,\n // It seems unnecessary in this case, so we get the updated states using this approach.\n const { callStatus } = useSelector(callStatusSelector);\n const mediaGalleryProps = useSelector(mediaGallerySelector);\n const mediaGalleryHandlers = useHandlers(MediaGallery);\n const complianceBannerProps = useSelector(complianceBannerSelector);\n const errorBarProps = usePropsFor(ErrorBar);\n const mutedNotificationProps = useSelector(mutedNotificationSelector);\n const networkReconnectTileProps = useSelector(networkReconnectTileSelector);\n\n const strings = useLocale().strings.call;\n\n // Reduce the controls shown when mobile view is enabled.\n const callControlOptions = mobileView ? reduceCallControlsForMobile(options?.callControls) : options?.callControls;\n\n const drawerMenuHostId = useId('drawerMenuHost');\n\n return (\n <CallArrangement\n id={drawerMenuHostId}\n complianceBannerProps={{ ...complianceBannerProps, strings }}\n // Ignore errors from before current call. This avoids old errors from showing up when a user re-joins a call.\n errorBarProps={options?.errorBar !== false && { ...errorBarProps, ignorePremountErrors: true }}\n mutedNotificationProps={mutedNotificationProps}\n callControlProps={{\n callInvitationURL: callInvitationURL,\n onFetchParticipantMenuItems: onFetchParticipantMenuItems,\n options: callControlOptions,\n increaseFlyoutItemSize: mobileView\n }}\n /* @conditional-compile-remove(one-to-n-calling) */\n onFetchAvatarPersonaData={onFetchAvatarPersonaData}\n mobileView={mobileView}\n /* @conditional-compile-remove(one-to-n-calling) */\n modalLayerHostId={props.modalLayerHostId}\n onRenderGalleryContent={() =>\n _isInCall(callStatus) ? (\n isNetworkHealthy(networkReconnectTileProps.networkReconnectValue) ? (\n <MediaGallery\n isMobile={mobileView}\n {...mediaGalleryProps}\n {...mediaGalleryHandlers}\n onRenderAvatar={onRenderAvatar}\n onFetchAvatarPersonaData={onFetchAvatarPersonaData}\n /* @conditional-compile-remove(pinned-participants) */\n remoteVideoTileMenuOptions={options?.remoteVideoTileMenu}\n drawerMenuHostId={drawerMenuHostId}\n />\n ) : (\n <NetworkReconnectTile {...networkReconnectTileProps} />\n )\n ) : (\n <></>\n )\n }\n dataUiId={'call-page'}\n />\n );\n};\n\n/**\n * @private\n */\nexport const isNetworkHealthy = (value: DiagnosticQuality | boolean | undefined): boolean => {\n // We know that the value is actually of type DiagnosticQuality for this diagnostic.\n // We ignore any boolen values, considering the network to still be healthy.\n // Thus, only DiagnosticQuality.Poor or .Bad indicate network problems.\n return value === true || value === false || value === undefined || value === DiagnosticQuality.Good;\n};\n\"../../../../../calling-component-bindings/src\"\"../../../../../react-components/src\""]}
|
package/dist/dist-esm/react-composites/src/composites/CallComposite/utils/MediaGalleryUtils.js
CHANGED
@@ -73,7 +73,7 @@ export const createAnnouncmentString = (direction, participants, strings) => {
|
|
73
73
|
* Filter participants into two arrays to put all the unnamed participants at the back of the
|
74
74
|
* names being announced.
|
75
75
|
*/
|
76
|
-
const unnamedParticipants = participants.filter((p) => p.displayName
|
76
|
+
const unnamedParticipants = participants.filter((p) => !p.displayName);
|
77
77
|
const namedParicipants = participants.filter((p) => p.displayName);
|
78
78
|
const sortedParticipants = namedParicipants.concat(unnamedParticipants);
|
79
79
|
/**
|
package/dist/dist-esm/react-composites/src/composites/CallComposite/utils/MediaGalleryUtils.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"MediaGalleryUtils.js","sourceRoot":"","sources":["../../../../../../../../react-composites/src/composites/CallComposite/utils/MediaGalleryUtils.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport { toFlatCommunicationIdentifier, _formatString } from '@internal/acs-ui-common';\nimport { RemoteParticipantState } from '@internal/calling-stateful-client';\nimport { useMemo, useRef, useState } from 'react';\nimport { useLocale } from '../../localization';\nimport { useSelector } from '../hooks/useSelector';\nimport { getRemoteParticipantsConnectedSelector } from '../selectors/mediaGallerySelector';\n\ntype ParticipantChangedAnnouncmentStrings = {\n participantJoinedNoticeString: string;\n twoParticipantJoinedNoticeString: string;\n threeParticipantJoinedNoticeString: string;\n participantLeftNoticeString: string;\n twoParticipantLeftNoticeString: string;\n threeParticipantLeftNoticeString: string;\n unnamedParticipantString: string;\n manyParticipantsJoined: string;\n manyParticipantsLeft: string;\n manyUnnamedParticipantsJoined: string;\n manyUnnamedParticipantsLeft: string;\n};\n\n/**\n * sets the announcement string whenever a Participant comes or goes from a call to be\n * used by the system narrator.\n *\n * @returns string to be used by the narrator and Announcer component\n *\n * @internal\n */\nexport const useParticipantChangedAnnouncement = (): string => {\n const locale = useLocale().strings.call;\n const strings = useMemo(() => {\n return {\n participantJoinedNoticeString: locale.participantJoinedNoticeString,\n twoParticipantJoinedNoticeString: locale.twoParticipantJoinedNoticeString,\n threeParticipantJoinedNoticeString: locale.threeParticipantJoinedNoticeString,\n participantLeftNoticeString: locale.participantLeftNoticeString,\n twoParticipantLeftNoticeString: locale.twoParticipantLeftNoticeString,\n threeParticipantLeftNoticeString: locale.threeParticipantLeftNoticeString,\n unnamedParticipantString: locale.unnamedParticipantString,\n manyParticipantsJoined: locale.manyParticipantsJoined,\n manyParticipantsLeft: locale.manyParticipantsLeft,\n manyUnnamedParticipantsJoined: locale.manyUnnamedParticipantsJoined,\n manyUnnamedParticipantsLeft: locale.manyUnnamedParticipantsLeft\n };\n }, [locale]);\n const [announcerString, setAnnouncerString] = useState<string>('');\n const currentParticipants = useSelector(getRemoteParticipantsConnectedSelector);\n /**\n * We want to use a useRef here since we want to not fire this hook based on the previous participants\n * this allows this value to be used in the hook without being in the dependency array.\n *\n * Note: By definition if this hook is used in another component it is not pure anymore.\n */\n const previousParticipants = useRef<RemoteParticipantState[]>(currentParticipants);\n\n const resetAnnoucement = (string: string): void => {\n setAnnouncerString(string);\n };\n\n useMemo(() => {\n const currentIds = currentParticipants.map((p) => toFlatCommunicationIdentifier(p.identifier));\n const previousIds = previousParticipants.current.map((p) => toFlatCommunicationIdentifier(p.identifier));\n const whoJoined = currentParticipants.filter(\n (p) => !previousIds.includes(toFlatCommunicationIdentifier(p.identifier))\n );\n const whoLeft = previousParticipants.current.filter(\n (p) => !currentIds.includes(toFlatCommunicationIdentifier(p.identifier))\n );\n if (whoJoined.length > 0) {\n resetAnnoucement(createAnnouncmentString('joined', whoJoined, strings));\n }\n if (whoLeft.length > 0) {\n resetAnnoucement(createAnnouncmentString('left', whoLeft, strings));\n }\n // Update cached value at the end.\n previousParticipants.current = currentParticipants;\n }, [currentParticipants, strings]);\n return announcerString;\n};\n\n/**\n * Generates the announcement string for when a participant joins or leaves a call.\n */\nexport const createAnnouncmentString = (\n direction: 'joined' | 'left',\n participants: RemoteParticipantState[],\n strings: ParticipantChangedAnnouncmentStrings\n): string => {\n /**\n * If there are no participants return empty string.\n */\n if (participants.length === 0) {\n return '';\n }\n /**\n * Filter participants into two arrays to put all the unnamed participants at the back of the\n * names being announced.\n */\n const unnamedParticipants = participants.filter((p) => p.displayName === undefined);\n const namedParicipants = participants.filter((p) => p.displayName);\n const sortedParticipants = namedParicipants.concat(unnamedParticipants);\n\n /**\n * if there are only unnamed participants present in the array announce a special unnamed participants\n * only string.\n */\n if (sortedParticipants.filter((p) => p.displayName).length === 0 && sortedParticipants.length > 1) {\n return _formatString(\n direction === 'joined' ? strings.manyUnnamedParticipantsJoined : strings.manyUnnamedParticipantsLeft,\n {\n numOfParticipants: (sortedParticipants.length - 1).toString()\n }\n );\n }\n const participantNames = sortedParticipants.map((p) => p.displayName ?? strings.unnamedParticipantString);\n\n switch (sortedParticipants.length) {\n case 1:\n return _formatString(\n direction === 'joined' ? strings.participantJoinedNoticeString : strings.participantLeftNoticeString,\n { displayName: participantNames[0] }\n );\n case 2:\n return _formatString(\n direction === 'joined' ? strings.twoParticipantJoinedNoticeString : strings.twoParticipantLeftNoticeString,\n {\n displayName1: participantNames[0],\n displayName2: participantNames[1]\n }\n );\n case 3:\n return _formatString(\n direction === 'joined' ? strings.threeParticipantJoinedNoticeString : strings.threeParticipantLeftNoticeString,\n {\n displayName1: participantNames[0],\n displayName2: participantNames[1],\n displayName3: participantNames[2]\n }\n );\n }\n\n /**\n * If we have more than 3 participants joining we need to do something more to announce them\n * appropriately.\n *\n * We don't want to announce every name when more than 3 participants join at once so\n * we parse out the first 3 names we have and announce those with the number of others.\n */\n\n const numberOfExtraParticipants = sortedParticipants.length - 3;\n\n return _formatString(direction === 'joined' ? strings.manyParticipantsJoined : strings.manyParticipantsLeft, {\n displayName1: sortedParticipants[0].displayName ?? strings.unnamedParticipantString,\n displayName2: sortedParticipants[1].displayName ?? strings.unnamedParticipantString,\n displayName3: sortedParticipants[2].displayName ?? strings.unnamedParticipantString,\n numOfParticipants: numberOfExtraParticipants.toString()\n });\n};\n\"../../../../../acs-ui-common/src\"\"../../../../../calling-stateful-client/src\""]}
|
1
|
+
{"version":3,"file":"MediaGalleryUtils.js","sourceRoot":"","sources":["../../../../../../../../react-composites/src/composites/CallComposite/utils/MediaGalleryUtils.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,OAAO,EAAE,6BAA6B,EAAE,aAAa,EAAE,yCAAgC;AAEvF,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,sCAAsC,EAAE,MAAM,mCAAmC,CAAC;AAgB3F;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,iCAAiC,GAAG,GAAW,EAAE;IAC5D,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IACxC,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,EAAE;QAC3B,OAAO;YACL,6BAA6B,EAAE,MAAM,CAAC,6BAA6B;YACnE,gCAAgC,EAAE,MAAM,CAAC,gCAAgC;YACzE,kCAAkC,EAAE,MAAM,CAAC,kCAAkC;YAC7E,2BAA2B,EAAE,MAAM,CAAC,2BAA2B;YAC/D,8BAA8B,EAAE,MAAM,CAAC,8BAA8B;YACrE,gCAAgC,EAAE,MAAM,CAAC,gCAAgC;YACzE,wBAAwB,EAAE,MAAM,CAAC,wBAAwB;YACzD,sBAAsB,EAAE,MAAM,CAAC,sBAAsB;YACrD,oBAAoB,EAAE,MAAM,CAAC,oBAAoB;YACjD,6BAA6B,EAAE,MAAM,CAAC,6BAA6B;YACnE,2BAA2B,EAAE,MAAM,CAAC,2BAA2B;SAChE,CAAC;IACJ,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IACb,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,QAAQ,CAAS,EAAE,CAAC,CAAC;IACnE,MAAM,mBAAmB,GAAG,WAAW,CAAC,sCAAsC,CAAC,CAAC;IAChF;;;;;OAKG;IACH,MAAM,oBAAoB,GAAG,MAAM,CAA2B,mBAAmB,CAAC,CAAC;IAEnF,MAAM,gBAAgB,GAAG,CAAC,MAAc,EAAQ,EAAE;QAChD,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAC7B,CAAC,CAAC;IAEF,OAAO,CAAC,GAAG,EAAE;QACX,MAAM,UAAU,GAAG,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,6BAA6B,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;QAC/F,MAAM,WAAW,GAAG,oBAAoB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,6BAA6B,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;QACzG,MAAM,SAAS,GAAG,mBAAmB,CAAC,MAAM,CAC1C,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,6BAA6B,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAC1E,CAAC;QACF,MAAM,OAAO,GAAG,oBAAoB,CAAC,OAAO,CAAC,MAAM,CACjD,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,6BAA6B,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CACzE,CAAC;QACF,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;YACxB,gBAAgB,CAAC,uBAAuB,CAAC,QAAQ,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC;SACzE;QACD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;YACtB,gBAAgB,CAAC,uBAAuB,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;SACrE;QACD,kCAAkC;QAClC,oBAAoB,CAAC,OAAO,GAAG,mBAAmB,CAAC;IACrD,CAAC,EAAE,CAAC,mBAAmB,EAAE,OAAO,CAAC,CAAC,CAAC;IACnC,OAAO,eAAe,CAAC;AACzB,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CACrC,SAA4B,EAC5B,YAAsC,EACtC,OAA6C,EACrC,EAAE;;IACV;;OAEG;IACH,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE;QAC7B,OAAO,EAAE,CAAC;KACX;IACD;;;OAGG;IACH,MAAM,mBAAmB,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;IACvE,MAAM,gBAAgB,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;IACnE,MAAM,kBAAkB,GAAG,gBAAgB,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;IAExE;;;OAGG;IACH,IAAI,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,kBAAkB,CAAC,MAAM,GAAG,CAAC,EAAE;QACjG,OAAO,aAAa,CAClB,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,6BAA6B,CAAC,CAAC,CAAC,OAAO,CAAC,2BAA2B,EACpG;YACE,iBAAiB,EAAE,CAAC,kBAAkB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE;SAC9D,CACF,CAAC;KACH;IACD,MAAM,gBAAgB,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,WAAC,OAAA,MAAA,CAAC,CAAC,WAAW,mCAAI,OAAO,CAAC,wBAAwB,CAAA,EAAA,CAAC,CAAC;IAE1G,QAAQ,kBAAkB,CAAC,MAAM,EAAE;QACjC,KAAK,CAAC;YACJ,OAAO,aAAa,CAClB,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,6BAA6B,CAAC,CAAC,CAAC,OAAO,CAAC,2BAA2B,EACpG,EAAE,WAAW,EAAE,gBAAgB,CAAC,CAAC,CAAC,EAAE,CACrC,CAAC;QACJ,KAAK,CAAC;YACJ,OAAO,aAAa,CAClB,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,gCAAgC,CAAC,CAAC,CAAC,OAAO,CAAC,8BAA8B,EAC1G;gBACE,YAAY,EAAE,gBAAgB,CAAC,CAAC,CAAC;gBACjC,YAAY,EAAE,gBAAgB,CAAC,CAAC,CAAC;aAClC,CACF,CAAC;QACJ,KAAK,CAAC;YACJ,OAAO,aAAa,CAClB,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,kCAAkC,CAAC,CAAC,CAAC,OAAO,CAAC,gCAAgC,EAC9G;gBACE,YAAY,EAAE,gBAAgB,CAAC,CAAC,CAAC;gBACjC,YAAY,EAAE,gBAAgB,CAAC,CAAC,CAAC;gBACjC,YAAY,EAAE,gBAAgB,CAAC,CAAC,CAAC;aAClC,CACF,CAAC;KACL;IAED;;;;;;OAMG;IAEH,MAAM,yBAAyB,GAAG,kBAAkB,CAAC,MAAM,GAAG,CAAC,CAAC;IAEhE,OAAO,aAAa,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC,CAAC,OAAO,CAAC,oBAAoB,EAAE;QAC3G,YAAY,EAAE,MAAA,kBAAkB,CAAC,CAAC,CAAC,CAAC,WAAW,mCAAI,OAAO,CAAC,wBAAwB;QACnF,YAAY,EAAE,MAAA,kBAAkB,CAAC,CAAC,CAAC,CAAC,WAAW,mCAAI,OAAO,CAAC,wBAAwB;QACnF,YAAY,EAAE,MAAA,kBAAkB,CAAC,CAAC,CAAC,CAAC,WAAW,mCAAI,OAAO,CAAC,wBAAwB;QACnF,iBAAiB,EAAE,yBAAyB,CAAC,QAAQ,EAAE;KACxD,CAAC,CAAC;AACL,CAAC,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport { toFlatCommunicationIdentifier, _formatString } from '@internal/acs-ui-common';\nimport { RemoteParticipantState } from '@internal/calling-stateful-client';\nimport { useMemo, useRef, useState } from 'react';\nimport { useLocale } from '../../localization';\nimport { useSelector } from '../hooks/useSelector';\nimport { getRemoteParticipantsConnectedSelector } from '../selectors/mediaGallerySelector';\n\ntype ParticipantChangedAnnouncmentStrings = {\n participantJoinedNoticeString: string;\n twoParticipantJoinedNoticeString: string;\n threeParticipantJoinedNoticeString: string;\n participantLeftNoticeString: string;\n twoParticipantLeftNoticeString: string;\n threeParticipantLeftNoticeString: string;\n unnamedParticipantString: string;\n manyParticipantsJoined: string;\n manyParticipantsLeft: string;\n manyUnnamedParticipantsJoined: string;\n manyUnnamedParticipantsLeft: string;\n};\n\n/**\n * sets the announcement string whenever a Participant comes or goes from a call to be\n * used by the system narrator.\n *\n * @returns string to be used by the narrator and Announcer component\n *\n * @internal\n */\nexport const useParticipantChangedAnnouncement = (): string => {\n const locale = useLocale().strings.call;\n const strings = useMemo(() => {\n return {\n participantJoinedNoticeString: locale.participantJoinedNoticeString,\n twoParticipantJoinedNoticeString: locale.twoParticipantJoinedNoticeString,\n threeParticipantJoinedNoticeString: locale.threeParticipantJoinedNoticeString,\n participantLeftNoticeString: locale.participantLeftNoticeString,\n twoParticipantLeftNoticeString: locale.twoParticipantLeftNoticeString,\n threeParticipantLeftNoticeString: locale.threeParticipantLeftNoticeString,\n unnamedParticipantString: locale.unnamedParticipantString,\n manyParticipantsJoined: locale.manyParticipantsJoined,\n manyParticipantsLeft: locale.manyParticipantsLeft,\n manyUnnamedParticipantsJoined: locale.manyUnnamedParticipantsJoined,\n manyUnnamedParticipantsLeft: locale.manyUnnamedParticipantsLeft\n };\n }, [locale]);\n const [announcerString, setAnnouncerString] = useState<string>('');\n const currentParticipants = useSelector(getRemoteParticipantsConnectedSelector);\n /**\n * We want to use a useRef here since we want to not fire this hook based on the previous participants\n * this allows this value to be used in the hook without being in the dependency array.\n *\n * Note: By definition if this hook is used in another component it is not pure anymore.\n */\n const previousParticipants = useRef<RemoteParticipantState[]>(currentParticipants);\n\n const resetAnnoucement = (string: string): void => {\n setAnnouncerString(string);\n };\n\n useMemo(() => {\n const currentIds = currentParticipants.map((p) => toFlatCommunicationIdentifier(p.identifier));\n const previousIds = previousParticipants.current.map((p) => toFlatCommunicationIdentifier(p.identifier));\n const whoJoined = currentParticipants.filter(\n (p) => !previousIds.includes(toFlatCommunicationIdentifier(p.identifier))\n );\n const whoLeft = previousParticipants.current.filter(\n (p) => !currentIds.includes(toFlatCommunicationIdentifier(p.identifier))\n );\n if (whoJoined.length > 0) {\n resetAnnoucement(createAnnouncmentString('joined', whoJoined, strings));\n }\n if (whoLeft.length > 0) {\n resetAnnoucement(createAnnouncmentString('left', whoLeft, strings));\n }\n // Update cached value at the end.\n previousParticipants.current = currentParticipants;\n }, [currentParticipants, strings]);\n return announcerString;\n};\n\n/**\n * Generates the announcement string for when a participant joins or leaves a call.\n */\nexport const createAnnouncmentString = (\n direction: 'joined' | 'left',\n participants: RemoteParticipantState[],\n strings: ParticipantChangedAnnouncmentStrings\n): string => {\n /**\n * If there are no participants return empty string.\n */\n if (participants.length === 0) {\n return '';\n }\n /**\n * Filter participants into two arrays to put all the unnamed participants at the back of the\n * names being announced.\n */\n const unnamedParticipants = participants.filter((p) => !p.displayName);\n const namedParicipants = participants.filter((p) => p.displayName);\n const sortedParticipants = namedParicipants.concat(unnamedParticipants);\n\n /**\n * if there are only unnamed participants present in the array announce a special unnamed participants\n * only string.\n */\n if (sortedParticipants.filter((p) => p.displayName).length === 0 && sortedParticipants.length > 1) {\n return _formatString(\n direction === 'joined' ? strings.manyUnnamedParticipantsJoined : strings.manyUnnamedParticipantsLeft,\n {\n numOfParticipants: (sortedParticipants.length - 1).toString()\n }\n );\n }\n const participantNames = sortedParticipants.map((p) => p.displayName ?? strings.unnamedParticipantString);\n\n switch (sortedParticipants.length) {\n case 1:\n return _formatString(\n direction === 'joined' ? strings.participantJoinedNoticeString : strings.participantLeftNoticeString,\n { displayName: participantNames[0] }\n );\n case 2:\n return _formatString(\n direction === 'joined' ? strings.twoParticipantJoinedNoticeString : strings.twoParticipantLeftNoticeString,\n {\n displayName1: participantNames[0],\n displayName2: participantNames[1]\n }\n );\n case 3:\n return _formatString(\n direction === 'joined' ? strings.threeParticipantJoinedNoticeString : strings.threeParticipantLeftNoticeString,\n {\n displayName1: participantNames[0],\n displayName2: participantNames[1],\n displayName3: participantNames[2]\n }\n );\n }\n\n /**\n * If we have more than 3 participants joining we need to do something more to announce them\n * appropriately.\n *\n * We don't want to announce every name when more than 3 participants join at once so\n * we parse out the first 3 names we have and announce those with the number of others.\n */\n\n const numberOfExtraParticipants = sortedParticipants.length - 3;\n\n return _formatString(direction === 'joined' ? strings.manyParticipantsJoined : strings.manyParticipantsLeft, {\n displayName1: sortedParticipants[0].displayName ?? strings.unnamedParticipantString,\n displayName2: sortedParticipants[1].displayName ?? strings.unnamedParticipantString,\n displayName3: sortedParticipants[2].displayName ?? strings.unnamedParticipantString,\n numOfParticipants: numberOfExtraParticipants.toString()\n });\n};\n\"../../../../../acs-ui-common/src\"\"../../../../../calling-stateful-client/src\""]}
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@azure/communication-react",
|
3
|
-
"version": "1.4.3-alpha-
|
3
|
+
"version": "1.4.3-alpha-202301080014.0",
|
4
4
|
"sideEffects": false,
|
5
5
|
"description": "React library for building modern communication user experiences utilizing Azure Communication Services",
|
6
6
|
"keywords": [
|
@@ -23,7 +23,7 @@
|
|
23
23
|
},
|
24
24
|
"types": "dist/communication-react.d.ts",
|
25
25
|
"dependencies": {
|
26
|
-
"@azure/communication-common": "2.
|
26
|
+
"@azure/communication-common": "2.2.0",
|
27
27
|
"@azure/core-client": "1.3.0",
|
28
28
|
"@azure/core-paging": "~1.1.3",
|
29
29
|
"@azure/logger": "1.0.3",
|
@@ -86,13 +86,13 @@
|
|
86
86
|
"@azure/core-auth": "1.3.2",
|
87
87
|
"@babel/cli": "~7.16.0",
|
88
88
|
"@babel/core": "~7.16.0",
|
89
|
-
"@internal/calling-component-bindings": "1.4.3-alpha-
|
90
|
-
"@internal/calling-stateful-client": "1.4.3-alpha-
|
91
|
-
"@internal/chat-component-bindings": "1.4.3-alpha-
|
92
|
-
"@internal/chat-stateful-client": "1.4.3-alpha-
|
93
|
-
"@internal/fake-backends": "1.4.3-alpha-
|
94
|
-
"@internal/react-components": "1.4.3-alpha-
|
95
|
-
"@internal/react-composites": "1.4.3-alpha-
|
89
|
+
"@internal/calling-component-bindings": "1.4.3-alpha-202301080014.0",
|
90
|
+
"@internal/calling-stateful-client": "1.4.3-alpha-202301080014.0",
|
91
|
+
"@internal/chat-component-bindings": "1.4.3-alpha-202301080014.0",
|
92
|
+
"@internal/chat-stateful-client": "1.4.3-alpha-202301080014.0",
|
93
|
+
"@internal/fake-backends": "1.4.3-alpha-202301080014.0",
|
94
|
+
"@internal/react-components": "1.4.3-alpha-202301080014.0",
|
95
|
+
"@internal/react-composites": "1.4.3-alpha-202301080014.0",
|
96
96
|
"@microsoft/api-documenter": "~7.12.11",
|
97
97
|
"@microsoft/api-extractor": "~7.18.0",
|
98
98
|
"@rollup/plugin-json": "~4.1.0",
|