@azure/communication-react 1.27.0-alpha-202504300018 → 1.27.0-alpha-202505020018

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.
Files changed (29) hide show
  1. package/dist/dist-cjs/communication-react/{ChatMessageComponentAsRichTextEditBox-HFRe57yx.js → ChatMessageComponentAsRichTextEditBox-DyHF5QfQ.js} +2 -2
  2. package/dist/dist-cjs/communication-react/{ChatMessageComponentAsRichTextEditBox-HFRe57yx.js.map → ChatMessageComponentAsRichTextEditBox-DyHF5QfQ.js.map} +1 -1
  3. package/dist/dist-cjs/communication-react/{RichTextSendBoxWrapper-CVdXTrw2.js → RichTextSendBoxWrapper-t0MCYpN6.js} +2 -2
  4. package/dist/dist-cjs/communication-react/{RichTextSendBoxWrapper-CVdXTrw2.js.map → RichTextSendBoxWrapper-t0MCYpN6.js.map} +1 -1
  5. package/dist/dist-cjs/communication-react/{index-BRTAjDJR.js → index-Drn3Krix.js} +70 -27
  6. package/dist/dist-cjs/communication-react/index-Drn3Krix.js.map +1 -0
  7. package/dist/dist-cjs/communication-react/index.js +1 -1
  8. package/dist/dist-esm/acs-ui-common/src/telemetryVersion.js +1 -1
  9. package/dist/dist-esm/acs-ui-common/src/telemetryVersion.js.map +1 -1
  10. package/dist/dist-esm/calling-component-bindings/src/baseSelectors.d.ts +6 -0
  11. package/dist/dist-esm/calling-component-bindings/src/baseSelectors.js +7 -0
  12. package/dist/dist-esm/calling-component-bindings/src/baseSelectors.js.map +1 -1
  13. package/dist/dist-esm/calling-component-bindings/src/captionsSelector.js +11 -15
  14. package/dist/dist-esm/calling-component-bindings/src/captionsSelector.js.map +1 -1
  15. package/dist/dist-esm/calling-component-bindings/src/utils/callUtils.d.ts +11 -0
  16. package/dist/dist-esm/calling-component-bindings/src/utils/callUtils.js +22 -0
  17. package/dist/dist-esm/calling-component-bindings/src/utils/callUtils.js.map +1 -1
  18. package/dist/dist-esm/react-components/src/components/CaptionsBanner.js +1 -1
  19. package/dist/dist-esm/react-components/src/components/CaptionsBanner.js.map +1 -1
  20. package/dist/dist-esm/react-components/src/components/RichTextEditor/RichTextSendBox.js +8 -0
  21. package/dist/dist-esm/react-components/src/components/RichTextEditor/RichTextSendBox.js.map +1 -1
  22. package/dist/dist-esm/react-composites/src/composites/CallComposite/adapter/CallingSoundSubscriber.js +1 -5
  23. package/dist/dist-esm/react-composites/src/composites/CallComposite/adapter/CallingSoundSubscriber.js.map +1 -1
  24. package/dist/dist-esm/react-composites/src/composites/CallComposite/styles/CallConfiguration.styles.js +3 -1
  25. package/dist/dist-esm/react-composites/src/composites/CallComposite/styles/CallConfiguration.styles.js.map +1 -1
  26. package/dist/dist-esm/react-composites/src/composites/CallComposite/styles/LocalPreview.styles.js +15 -1
  27. package/dist/dist-esm/react-composites/src/composites/CallComposite/styles/LocalPreview.styles.js.map +1 -1
  28. package/package.json +1 -1
  29. package/dist/dist-cjs/communication-react/index-BRTAjDJR.js.map +0 -1
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var index = require('./index-BRTAjDJR.js');
3
+ var index = require('./index-Drn3Krix.js');
4
4
  require('react');
5
5
  require('@fluentui/react');
6
6
  require('@fluentui/react-components');
@@ -2,5 +2,5 @@
2
2
  // Copyright (c) Microsoft Corporation.
3
3
  // Licensed under the MIT License.
4
4
  // GENERATED FILE. DO NOT EDIT MANUALLY.
5
- module.exports = '1.27.0-alpha-202504300018';
5
+ module.exports = '1.27.0-alpha-202505020018';
6
6
  //# sourceMappingURL=telemetryVersion.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"telemetryVersion.js","sourceRoot":"","sources":["../../../../../acs-ui-common/src/telemetryVersion.js"],"names":[],"mappings":";AAAA,uCAAuC;AACvC,kCAAkC;AAElC,wCAAwC;AAExC,MAAM,CAAC,OAAO,GAAG,2BAA2B,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n// GENERATED FILE. DO NOT EDIT MANUALLY.\n\nmodule.exports = '1.27.0-alpha-202504300018';\n"]}
1
+ {"version":3,"file":"telemetryVersion.js","sourceRoot":"","sources":["../../../../../acs-ui-common/src/telemetryVersion.js"],"names":[],"mappings":";AAAA,uCAAuC;AACvC,kCAAkC;AAElC,wCAAwC;AAExC,MAAM,CAAC,OAAO,GAAG,2BAA2B,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n// GENERATED FILE. DO NOT EDIT MANUALLY.\n\nmodule.exports = '1.27.0-alpha-202505020018';\n"]}
@@ -54,6 +54,12 @@ export declare const getDominantSpeakers: (state: CallClientState, props: Callin
54
54
  export declare const getRemoteParticipants: (state: CallClientState, props: CallingBaseSelectorProps) => {
55
55
  [keys: string]: RemoteParticipantState;
56
56
  } | undefined;
57
+ /**
58
+ * @private
59
+ */
60
+ export declare const getRemoteParticipantsEnded: (state: CallClientState, props: CallingBaseSelectorProps) => {
61
+ [keys: string]: RemoteParticipantState;
62
+ } | undefined;
57
63
  /**
58
64
  * @private
59
65
  */
@@ -43,6 +43,13 @@ export const getRemoteParticipants = (state, props) => {
43
43
  var _a;
44
44
  return (_a = state.calls[props.callId]) === null || _a === void 0 ? void 0 : _a.remoteParticipants;
45
45
  };
46
+ /**
47
+ * @private
48
+ */
49
+ export const getRemoteParticipantsEnded = (state, props) => {
50
+ var _a;
51
+ return (_a = state.calls[props.callId]) === null || _a === void 0 ? void 0 : _a.remoteParticipantsEnded;
52
+ };
46
53
  /**
47
54
  * @private
48
55
  */
@@ -1 +1 @@
1
- {"version":3,"file":"baseSelectors.js","sourceRoot":"","sources":["../../../../../calling-component-bindings/src/baseSelectors.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\nimport { CallState, DominantSpeakersInfo, EnvironmentInfo } from '@azure/communication-calling';\nimport { BreakoutRoom } from '@azure/communication-calling';\nimport { ParticipantCapabilities } from '@azure/communication-calling';\nimport { ParticipantRole } from '@azure/communication-calling';\nimport { toFlatCommunicationIdentifier } from '@internal/acs-ui-common';\nimport {\n CallClientState,\n DeviceManagerState,\n RemoteParticipantState,\n LocalVideoStreamState,\n CallErrors,\n DiagnosticsCallFeatureState,\n SpotlightCallFeatureState,\n IncomingCallState\n} from '@internal/calling-stateful-client';\nimport { TeamsIncomingCallState } from '@internal/calling-stateful-client';\nimport { ReactionState } from '@internal/calling-stateful-client';\nimport { CaptionsInfo } from '@internal/calling-stateful-client';\nimport { CaptionsKind, CapabilitiesChangeInfo } from '@azure/communication-calling';\n/* @conditional-compile-remove(rtt) */\nimport { RealTimeTextInfo } from '@internal/calling-stateful-client';\nimport { RaisedHandState } from '@internal/calling-stateful-client';\nimport { SupportedCaptionLanguage, SupportedSpokenLanguage } from '@internal/react-components';\nimport { ConferencePhoneInfo, CallNotifications } from '@internal/calling-stateful-client';\n/* @conditional-compile-remove(together-mode) */\nimport { TogetherModeCallFeatureState } from '@internal/calling-stateful-client';\n/**\n * Common props used to reference calling declarative client state.\n *\n * @public\n */\nexport type CallingBaseSelectorProps = {\n callId: string;\n};\n\n/**\n * @private\n */\nexport const getDeviceManager = (state: CallClientState): DeviceManagerState => state.deviceManager;\n\n/**\n * @private\n */\nexport const getRole = (state: CallClientState, props: CallingBaseSelectorProps): ParticipantRole | undefined => {\n return state.calls[props.callId]?.role;\n};\n\n/**\n * @private\n */\nexport const isHideAttendeeNamesEnabled = (state: CallClientState, props: CallingBaseSelectorProps): boolean => {\n return state.calls[props.callId]?.hideAttendeeNames ?? false;\n};\n\n/**\n * @private\n */\nexport const getCapabilities = (\n state: CallClientState,\n props: CallingBaseSelectorProps\n): ParticipantCapabilities | undefined => state.calls[props.callId]?.capabilitiesFeature?.capabilities;\n\n/**\n * @private\n */\nexport const getLatestCapabilitiesChangedInfo = (\n state: CallClientState,\n props: CallingBaseSelectorProps\n): CapabilitiesChangeInfo | undefined => {\n return state.calls[props.callId]?.capabilitiesFeature?.latestCapabilitiesChangeInfo;\n};\n\n/**\n * @private\n */\nexport const getCallExists = (state: CallClientState, props: CallingBaseSelectorProps): boolean =>\n !!state.calls[props.callId];\n\n/**\n * @private\n */\nexport const getDominantSpeakers = (\n state: CallClientState,\n props: CallingBaseSelectorProps\n): undefined | DominantSpeakersInfo => state.calls[props.callId]?.dominantSpeakers;\n\n/**\n * @private\n */\nexport const getRemoteParticipants = (\n state: CallClientState,\n props: CallingBaseSelectorProps\n):\n | {\n [keys: string]: RemoteParticipantState;\n }\n | undefined => {\n return state.calls[props.callId]?.remoteParticipants;\n};\n\n/**\n * @private\n */\nexport const getLocalParticipantRaisedHand = (\n state: CallClientState,\n props: CallingBaseSelectorProps\n): RaisedHandState | undefined => {\n return state.calls[props.callId]?.raiseHand?.localParticipantRaisedHand;\n};\n\n/**\n * @private\n */\nexport const getSpotlightCallFeature = (\n state: CallClientState,\n props: CallingBaseSelectorProps\n): SpotlightCallFeatureState | undefined => {\n return state.calls[props.callId]?.spotlight;\n};\n\n/**\n * @private\n */\nexport const getLocalParticipantReactionState = (\n state: CallClientState,\n props: CallingBaseSelectorProps\n): ReactionState | undefined => {\n return state.calls[props.callId]?.localParticipantReaction;\n};\n\n/**\n * @private\n */\nexport const getIsScreenSharingOn = (state: CallClientState, props: CallingBaseSelectorProps): boolean | undefined =>\n state.calls[props.callId]?.isScreenSharingOn;\n\n/**\n * @private\n */\nexport const getIsMuted = (state: CallClientState, props: CallingBaseSelectorProps): boolean | undefined =>\n state.calls[props.callId]?.isMuted;\n\n/**\n * @private\n */\nexport const getOptimalVideoCount = (state: CallClientState, props: CallingBaseSelectorProps): number | undefined =>\n state.calls[props.callId]?.optimalVideoCount.maxRemoteVideoStreams;\n\n/**\n * @private\n */\nexport const getLocalVideoStreams = (\n state: CallClientState,\n props: CallingBaseSelectorProps\n): LocalVideoStreamState[] | undefined => state.calls[props.callId]?.localVideoStreams;\n\n/**\n * @private\n */\nexport const getScreenShareRemoteParticipant = (\n state: CallClientState,\n props: CallingBaseSelectorProps\n): string | undefined => state.calls[props.callId]?.screenShareRemoteParticipant;\n\n/**\n * @private\n */\nexport const getDisplayName = (state: CallClientState): string | undefined => state.callAgent?.displayName;\n\n/**\n * @private\n */\nexport const getIdentifier = (state: CallClientState): string => toFlatCommunicationIdentifier(state.userId);\n\n/**\n * @private\n */\nexport const getLatestErrors = (state: CallClientState): CallErrors => state.latestErrors;\n\n/**\n * @private\n */\nexport const getLatestNotifications = (state: CallClientState): CallNotifications => state.latestNotifications;\n\n/**\n * @private\n */\nexport const getDiagnostics = (\n state: CallClientState,\n props: CallingBaseSelectorProps\n): DiagnosticsCallFeatureState | undefined => state.calls[props.callId]?.diagnostics;\n\n/**\n * @private\n */\nexport const getCallState = (state: CallClientState, props: CallingBaseSelectorProps): CallState | undefined =>\n state.calls[props.callId]?.state;\n\n/**\n * @private\n */\nexport const getEnvironmentInfo = (state: CallClientState): undefined | EnvironmentInfo => {\n return state.environmentInfo;\n};\n\n/** @private */\nexport const getParticipantCount = (state: CallClientState, props: CallingBaseSelectorProps): number | undefined => {\n /* @conditional-compile-remove(total-participant-count) */\n return state.calls[props.callId]?.totalParticipantCount;\n return undefined;\n};\n\n/** @private */\nexport const getCaptionsKind = (state: CallClientState, props: CallingBaseSelectorProps): CaptionsKind | undefined => {\n return state.calls[props.callId]?.captionsFeature.captionsKind;\n};\n\n/** @private */\nexport const getCaptions = (state: CallClientState, props: CallingBaseSelectorProps): CaptionsInfo[] | undefined => {\n return state.calls[props.callId]?.captionsFeature.captions;\n};\n\n/** @private */\nexport const getCaptionsStatus = (state: CallClientState, props: CallingBaseSelectorProps): boolean | undefined => {\n return state.calls[props.callId]?.captionsFeature.isCaptionsFeatureActive;\n};\n\n/** @private */\nexport const getStartCaptionsInProgress = (\n state: CallClientState,\n props: CallingBaseSelectorProps\n): boolean | undefined => {\n return state.calls[props.callId]?.captionsFeature.startCaptionsInProgress;\n};\n\n/** @private */\nexport const getCurrentCaptionLanguage = (\n state: CallClientState,\n props: CallingBaseSelectorProps\n): SupportedCaptionLanguage | undefined => {\n // we default to 'en' if the currentCaptionLanguage is not set\n if (state.calls[props.callId]?.captionsFeature.currentCaptionLanguage === '') {\n return 'en';\n }\n return state.calls[props.callId]?.captionsFeature.currentCaptionLanguage as SupportedCaptionLanguage;\n};\n\n/** @private */\nexport const getCurrentSpokenLanguage = (\n state: CallClientState,\n props: CallingBaseSelectorProps\n): SupportedSpokenLanguage | undefined => {\n // when currentSpokenLanguage is '', it means the spoken language is not set.\n // In this case we suggest showing the captions modal to set the spoken language when starting captions\n return state.calls[props.callId]?.captionsFeature.currentSpokenLanguage as SupportedSpokenLanguage;\n};\n\n/** @private */\nexport const getSupportedCaptionLanguages = (\n state: CallClientState,\n props: CallingBaseSelectorProps\n): SupportedCaptionLanguage[] | undefined => {\n return state.calls[props.callId]?.captionsFeature.supportedCaptionLanguages as SupportedCaptionLanguage[];\n};\n\n/** @private */\nexport const getSupportedSpokenLanguages = (\n state: CallClientState,\n props: CallingBaseSelectorProps\n): SupportedSpokenLanguage[] | undefined => {\n return state.calls[props.callId]?.captionsFeature.supportedSpokenLanguages as SupportedSpokenLanguage[];\n};\n\n/** @private */\nexport const getMeetingConferencePhones = (\n state: CallClientState,\n props: CallingBaseSelectorProps\n): ConferencePhoneInfo[] | undefined => {\n return state.calls[props.callId]?.meetingConference?.conferencePhones;\n};\n\n/**\n * selector for retrieving the incoming calls from state\n * @returns the incoming calls in the call client state\n * @private\n */\nexport const getIncomingCalls = (state: CallClientState): IncomingCallState[] | TeamsIncomingCallState[] => {\n return Object.values(state.incomingCalls);\n};\n\n/**\n * selector for retrieving the incoming calls that have been removed from state\n * @returns the incoming calls that have been removed\n * @private\n */\nexport const getRemovedIncomingCalls = (state: CallClientState): IncomingCallState[] | TeamsIncomingCallState[] => {\n return Object.values(state.incomingCallsEnded);\n};\n\n/** @private */\nexport const getAssignedBreakoutRoom = (\n state: CallClientState,\n props: CallingBaseSelectorProps\n): BreakoutRoom | undefined => {\n return state.calls[props.callId]?.breakoutRooms?.assignedBreakoutRoom;\n};\n\n/* @conditional-compile-remove(rtt) */\n/** @private */\nexport const getRealTimeTextStatus = (state: CallClientState, props: CallingBaseSelectorProps): boolean | undefined => {\n return state.calls[props.callId]?.realTimeTextFeature.isRealTimeTextFeatureActive;\n};\n\n/* @conditional-compile-remove(rtt) */\n/** @private */\nexport const getRealTimeText = (\n state: CallClientState,\n props: CallingBaseSelectorProps\n):\n | {\n completedMessages?: RealTimeTextInfo[];\n currentInProgress?: RealTimeTextInfo[];\n myInProgress?: RealTimeTextInfo;\n }\n | undefined => {\n return state.calls[props.callId]?.realTimeTextFeature.realTimeTexts;\n};\n\n/* @conditional-compile-remove(together-mode) */\n/**\n * @private\n */\nexport const getTogetherModeCallFeature = (\n state: CallClientState,\n props: CallingBaseSelectorProps\n): TogetherModeCallFeatureState | undefined => state.calls[props.callId]?.togetherMode;\n"]}
1
+ {"version":3,"file":"baseSelectors.js","sourceRoot":"","sources":["../../../../../calling-component-bindings/src/baseSelectors.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,6BAA6B,EAAE,gCAAgC;AA+BxE;;GAEG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,KAAsB,EAAsB,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC;AAEpG;;GAEG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,KAAsB,EAAE,KAA+B,EAA+B,EAAE;;IAC9G,OAAO,MAAA,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,0CAAE,IAAI,CAAC;AACzC,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,KAAsB,EAAE,KAA+B,EAAW,EAAE;;IAC7G,OAAO,MAAA,MAAA,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,0CAAE,iBAAiB,mCAAI,KAAK,CAAC;AAC/D,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAC7B,KAAsB,EACtB,KAA+B,EACM,EAAE,eAAC,OAAA,MAAA,MAAA,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,0CAAE,mBAAmB,0CAAE,YAAY,CAAA,EAAA,CAAC;AAEvG;;GAEG;AACH,MAAM,CAAC,MAAM,gCAAgC,GAAG,CAC9C,KAAsB,EACtB,KAA+B,EACK,EAAE;;IACtC,OAAO,MAAA,MAAA,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,0CAAE,mBAAmB,0CAAE,4BAA4B,CAAC;AACtF,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,KAAsB,EAAE,KAA+B,EAAW,EAAE,CAChG,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AAE9B;;GAEG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CACjC,KAAsB,EACtB,KAA+B,EACG,EAAE,WAAC,OAAA,MAAA,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,0CAAE,gBAAgB,CAAA,EAAA,CAAC;AAEnF;;GAEG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CACnC,KAAsB,EACtB,KAA+B,EAKnB,EAAE;;IACd,OAAO,MAAA,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,0CAAE,kBAAkB,CAAC;AACvD,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,CACxC,KAAsB,EACtB,KAA+B,EAKnB,EAAE;;IACd,OAAO,MAAA,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,0CAAE,uBAAuB,CAAC;AAC5D,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAC3C,KAAsB,EACtB,KAA+B,EACF,EAAE;;IAC/B,OAAO,MAAA,MAAA,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,0CAAE,SAAS,0CAAE,0BAA0B,CAAC;AAC1E,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CACrC,KAAsB,EACtB,KAA+B,EACQ,EAAE;;IACzC,OAAO,MAAA,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,0CAAE,SAAS,CAAC;AAC9C,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,gCAAgC,GAAG,CAC9C,KAAsB,EACtB,KAA+B,EACJ,EAAE;;IAC7B,OAAO,MAAA,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,0CAAE,wBAAwB,CAAC;AAC7D,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,KAAsB,EAAE,KAA+B,EAAuB,EAAE,WACnH,OAAA,MAAA,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,0CAAE,iBAAiB,CAAA,EAAA,CAAC;AAE/C;;GAEG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,KAAsB,EAAE,KAA+B,EAAuB,EAAE,WACzG,OAAA,MAAA,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,0CAAE,OAAO,CAAA,EAAA,CAAC;AAErC;;GAEG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,KAAsB,EAAE,KAA+B,EAAsB,EAAE,WAClH,OAAA,MAAA,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,0CAAE,iBAAiB,CAAC,qBAAqB,CAAA,EAAA,CAAC;AAErE;;GAEG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAClC,KAAsB,EACtB,KAA+B,EACM,EAAE,WAAC,OAAA,MAAA,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,0CAAE,iBAAiB,CAAA,EAAA,CAAC;AAEvF;;GAEG;AACH,MAAM,CAAC,MAAM,+BAA+B,GAAG,CAC7C,KAAsB,EACtB,KAA+B,EACX,EAAE,WAAC,OAAA,MAAA,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,0CAAE,4BAA4B,CAAA,EAAA,CAAC;AAEjF;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,KAAsB,EAAsB,EAAE,WAAC,OAAA,MAAA,KAAK,CAAC,SAAS,0CAAE,WAAW,CAAA,EAAA,CAAC;AAE3G;;GAEG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,KAAsB,EAAU,EAAE,CAAC,6BAA6B,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AAE7G;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,KAAsB,EAAc,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC;AAE1F;;GAEG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,KAAsB,EAAqB,EAAE,CAAC,KAAK,CAAC,mBAAmB,CAAC;AAE/G;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAC5B,KAAsB,EACtB,KAA+B,EACU,EAAE,WAAC,OAAA,MAAA,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,0CAAE,WAAW,CAAA,EAAA,CAAC;AAErF;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,KAAsB,EAAE,KAA+B,EAAyB,EAAE,WAC7G,OAAA,MAAA,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,0CAAE,KAAK,CAAA,EAAA,CAAC;AAEnC;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,KAAsB,EAA+B,EAAE;IACxF,OAAO,KAAK,CAAC,eAAe,CAAC;AAC/B,CAAC,CAAC;AAEF,eAAe;AACf,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,KAAsB,EAAE,KAA+B,EAAsB,EAAE;;IACjH,0DAA0D;IAC1D,OAAO,MAAA,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,0CAAE,qBAAqB,CAAC;IACxD,OAAO,SAAS,CAAC;AACnB,CAAC,CAAC;AAEF,eAAe;AACf,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,KAAsB,EAAE,KAA+B,EAA4B,EAAE;;IACnH,OAAO,MAAA,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,0CAAE,eAAe,CAAC,YAAY,CAAC;AACjE,CAAC,CAAC;AAEF,eAAe;AACf,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,KAAsB,EAAE,KAA+B,EAA8B,EAAE;;IACjH,OAAO,MAAA,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,0CAAE,eAAe,CAAC,QAAQ,CAAC;AAC7D,CAAC,CAAC;AAEF,eAAe;AACf,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,KAAsB,EAAE,KAA+B,EAAuB,EAAE;;IAChH,OAAO,MAAA,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,0CAAE,eAAe,CAAC,uBAAuB,CAAC;AAC5E,CAAC,CAAC;AAEF,eAAe;AACf,MAAM,CAAC,MAAM,0BAA0B,GAAG,CACxC,KAAsB,EACtB,KAA+B,EACV,EAAE;;IACvB,OAAO,MAAA,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,0CAAE,eAAe,CAAC,uBAAuB,CAAC;AAC5E,CAAC,CAAC;AAEF,eAAe;AACf,MAAM,CAAC,MAAM,yBAAyB,GAAG,CACvC,KAAsB,EACtB,KAA+B,EACO,EAAE;;IACxC,8DAA8D;IAC9D,IAAI,CAAA,MAAA,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,0CAAE,eAAe,CAAC,sBAAsB,MAAK,EAAE,EAAE,CAAC;QAC7E,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,MAAA,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,0CAAE,eAAe,CAAC,sBAAkD,CAAC;AACvG,CAAC,CAAC;AAEF,eAAe;AACf,MAAM,CAAC,MAAM,wBAAwB,GAAG,CACtC,KAAsB,EACtB,KAA+B,EACM,EAAE;;IACvC,6EAA6E;IAC7E,uGAAuG;IACvG,OAAO,MAAA,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,0CAAE,eAAe,CAAC,qBAAgD,CAAC;AACrG,CAAC,CAAC;AAEF,eAAe;AACf,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAC1C,KAAsB,EACtB,KAA+B,EACS,EAAE;;IAC1C,OAAO,MAAA,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,0CAAE,eAAe,CAAC,yBAAuD,CAAC;AAC5G,CAAC,CAAC;AAEF,eAAe;AACf,MAAM,CAAC,MAAM,2BAA2B,GAAG,CACzC,KAAsB,EACtB,KAA+B,EACQ,EAAE;;IACzC,OAAO,MAAA,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,0CAAE,eAAe,CAAC,wBAAqD,CAAC;AAC1G,CAAC,CAAC;AAEF,eAAe;AACf,MAAM,CAAC,MAAM,0BAA0B,GAAG,CACxC,KAAsB,EACtB,KAA+B,EACI,EAAE;;IACrC,OAAO,MAAA,MAAA,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,0CAAE,iBAAiB,0CAAE,gBAAgB,CAAC;AACxE,CAAC,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,KAAsB,EAAkD,EAAE;IACzG,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;AAC5C,CAAC,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,KAAsB,EAAkD,EAAE;IAChH,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;AACjD,CAAC,CAAC;AAEF,eAAe;AACf,MAAM,CAAC,MAAM,uBAAuB,GAAG,CACrC,KAAsB,EACtB,KAA+B,EACL,EAAE;;IAC5B,OAAO,MAAA,MAAA,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,0CAAE,aAAa,0CAAE,oBAAoB,CAAC;AACxE,CAAC,CAAC;AAEF,sCAAsC;AACtC,eAAe;AACf,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,KAAsB,EAAE,KAA+B,EAAuB,EAAE;;IACpH,OAAO,MAAA,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,0CAAE,mBAAmB,CAAC,2BAA2B,CAAC;AACpF,CAAC,CAAC;AAEF,sCAAsC;AACtC,eAAe;AACf,MAAM,CAAC,MAAM,eAAe,GAAG,CAC7B,KAAsB,EACtB,KAA+B,EAOnB,EAAE;;IACd,OAAO,MAAA,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,0CAAE,mBAAmB,CAAC,aAAa,CAAC;AACtE,CAAC,CAAC;AAEF,gDAAgD;AAChD;;GAEG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,CACxC,KAAsB,EACtB,KAA+B,EACW,EAAE,WAAC,OAAA,MAAA,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,0CAAE,YAAY,CAAA,EAAA,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\nimport { CallState, DominantSpeakersInfo, EnvironmentInfo } from '@azure/communication-calling';\nimport { BreakoutRoom } from '@azure/communication-calling';\nimport { ParticipantCapabilities } from '@azure/communication-calling';\nimport { ParticipantRole } from '@azure/communication-calling';\nimport { toFlatCommunicationIdentifier } from '@internal/acs-ui-common';\nimport {\n CallClientState,\n DeviceManagerState,\n RemoteParticipantState,\n LocalVideoStreamState,\n CallErrors,\n DiagnosticsCallFeatureState,\n SpotlightCallFeatureState,\n IncomingCallState\n} from '@internal/calling-stateful-client';\nimport { TeamsIncomingCallState } from '@internal/calling-stateful-client';\nimport { ReactionState } from '@internal/calling-stateful-client';\nimport { CaptionsInfo } from '@internal/calling-stateful-client';\nimport { CaptionsKind, CapabilitiesChangeInfo } from '@azure/communication-calling';\n/* @conditional-compile-remove(rtt) */\nimport { RealTimeTextInfo } from '@internal/calling-stateful-client';\nimport { RaisedHandState } from '@internal/calling-stateful-client';\nimport { SupportedCaptionLanguage, SupportedSpokenLanguage } from '@internal/react-components';\nimport { ConferencePhoneInfo, CallNotifications } from '@internal/calling-stateful-client';\n/* @conditional-compile-remove(together-mode) */\nimport { TogetherModeCallFeatureState } from '@internal/calling-stateful-client';\n/**\n * Common props used to reference calling declarative client state.\n *\n * @public\n */\nexport type CallingBaseSelectorProps = {\n callId: string;\n};\n\n/**\n * @private\n */\nexport const getDeviceManager = (state: CallClientState): DeviceManagerState => state.deviceManager;\n\n/**\n * @private\n */\nexport const getRole = (state: CallClientState, props: CallingBaseSelectorProps): ParticipantRole | undefined => {\n return state.calls[props.callId]?.role;\n};\n\n/**\n * @private\n */\nexport const isHideAttendeeNamesEnabled = (state: CallClientState, props: CallingBaseSelectorProps): boolean => {\n return state.calls[props.callId]?.hideAttendeeNames ?? false;\n};\n\n/**\n * @private\n */\nexport const getCapabilities = (\n state: CallClientState,\n props: CallingBaseSelectorProps\n): ParticipantCapabilities | undefined => state.calls[props.callId]?.capabilitiesFeature?.capabilities;\n\n/**\n * @private\n */\nexport const getLatestCapabilitiesChangedInfo = (\n state: CallClientState,\n props: CallingBaseSelectorProps\n): CapabilitiesChangeInfo | undefined => {\n return state.calls[props.callId]?.capabilitiesFeature?.latestCapabilitiesChangeInfo;\n};\n\n/**\n * @private\n */\nexport const getCallExists = (state: CallClientState, props: CallingBaseSelectorProps): boolean =>\n !!state.calls[props.callId];\n\n/**\n * @private\n */\nexport const getDominantSpeakers = (\n state: CallClientState,\n props: CallingBaseSelectorProps\n): undefined | DominantSpeakersInfo => state.calls[props.callId]?.dominantSpeakers;\n\n/**\n * @private\n */\nexport const getRemoteParticipants = (\n state: CallClientState,\n props: CallingBaseSelectorProps\n):\n | {\n [keys: string]: RemoteParticipantState;\n }\n | undefined => {\n return state.calls[props.callId]?.remoteParticipants;\n};\n\n/**\n * @private\n */\nexport const getRemoteParticipantsEnded = (\n state: CallClientState,\n props: CallingBaseSelectorProps\n):\n | {\n [keys: string]: RemoteParticipantState;\n }\n | undefined => {\n return state.calls[props.callId]?.remoteParticipantsEnded;\n};\n\n/**\n * @private\n */\nexport const getLocalParticipantRaisedHand = (\n state: CallClientState,\n props: CallingBaseSelectorProps\n): RaisedHandState | undefined => {\n return state.calls[props.callId]?.raiseHand?.localParticipantRaisedHand;\n};\n\n/**\n * @private\n */\nexport const getSpotlightCallFeature = (\n state: CallClientState,\n props: CallingBaseSelectorProps\n): SpotlightCallFeatureState | undefined => {\n return state.calls[props.callId]?.spotlight;\n};\n\n/**\n * @private\n */\nexport const getLocalParticipantReactionState = (\n state: CallClientState,\n props: CallingBaseSelectorProps\n): ReactionState | undefined => {\n return state.calls[props.callId]?.localParticipantReaction;\n};\n\n/**\n * @private\n */\nexport const getIsScreenSharingOn = (state: CallClientState, props: CallingBaseSelectorProps): boolean | undefined =>\n state.calls[props.callId]?.isScreenSharingOn;\n\n/**\n * @private\n */\nexport const getIsMuted = (state: CallClientState, props: CallingBaseSelectorProps): boolean | undefined =>\n state.calls[props.callId]?.isMuted;\n\n/**\n * @private\n */\nexport const getOptimalVideoCount = (state: CallClientState, props: CallingBaseSelectorProps): number | undefined =>\n state.calls[props.callId]?.optimalVideoCount.maxRemoteVideoStreams;\n\n/**\n * @private\n */\nexport const getLocalVideoStreams = (\n state: CallClientState,\n props: CallingBaseSelectorProps\n): LocalVideoStreamState[] | undefined => state.calls[props.callId]?.localVideoStreams;\n\n/**\n * @private\n */\nexport const getScreenShareRemoteParticipant = (\n state: CallClientState,\n props: CallingBaseSelectorProps\n): string | undefined => state.calls[props.callId]?.screenShareRemoteParticipant;\n\n/**\n * @private\n */\nexport const getDisplayName = (state: CallClientState): string | undefined => state.callAgent?.displayName;\n\n/**\n * @private\n */\nexport const getIdentifier = (state: CallClientState): string => toFlatCommunicationIdentifier(state.userId);\n\n/**\n * @private\n */\nexport const getLatestErrors = (state: CallClientState): CallErrors => state.latestErrors;\n\n/**\n * @private\n */\nexport const getLatestNotifications = (state: CallClientState): CallNotifications => state.latestNotifications;\n\n/**\n * @private\n */\nexport const getDiagnostics = (\n state: CallClientState,\n props: CallingBaseSelectorProps\n): DiagnosticsCallFeatureState | undefined => state.calls[props.callId]?.diagnostics;\n\n/**\n * @private\n */\nexport const getCallState = (state: CallClientState, props: CallingBaseSelectorProps): CallState | undefined =>\n state.calls[props.callId]?.state;\n\n/**\n * @private\n */\nexport const getEnvironmentInfo = (state: CallClientState): undefined | EnvironmentInfo => {\n return state.environmentInfo;\n};\n\n/** @private */\nexport const getParticipantCount = (state: CallClientState, props: CallingBaseSelectorProps): number | undefined => {\n /* @conditional-compile-remove(total-participant-count) */\n return state.calls[props.callId]?.totalParticipantCount;\n return undefined;\n};\n\n/** @private */\nexport const getCaptionsKind = (state: CallClientState, props: CallingBaseSelectorProps): CaptionsKind | undefined => {\n return state.calls[props.callId]?.captionsFeature.captionsKind;\n};\n\n/** @private */\nexport const getCaptions = (state: CallClientState, props: CallingBaseSelectorProps): CaptionsInfo[] | undefined => {\n return state.calls[props.callId]?.captionsFeature.captions;\n};\n\n/** @private */\nexport const getCaptionsStatus = (state: CallClientState, props: CallingBaseSelectorProps): boolean | undefined => {\n return state.calls[props.callId]?.captionsFeature.isCaptionsFeatureActive;\n};\n\n/** @private */\nexport const getStartCaptionsInProgress = (\n state: CallClientState,\n props: CallingBaseSelectorProps\n): boolean | undefined => {\n return state.calls[props.callId]?.captionsFeature.startCaptionsInProgress;\n};\n\n/** @private */\nexport const getCurrentCaptionLanguage = (\n state: CallClientState,\n props: CallingBaseSelectorProps\n): SupportedCaptionLanguage | undefined => {\n // we default to 'en' if the currentCaptionLanguage is not set\n if (state.calls[props.callId]?.captionsFeature.currentCaptionLanguage === '') {\n return 'en';\n }\n return state.calls[props.callId]?.captionsFeature.currentCaptionLanguage as SupportedCaptionLanguage;\n};\n\n/** @private */\nexport const getCurrentSpokenLanguage = (\n state: CallClientState,\n props: CallingBaseSelectorProps\n): SupportedSpokenLanguage | undefined => {\n // when currentSpokenLanguage is '', it means the spoken language is not set.\n // In this case we suggest showing the captions modal to set the spoken language when starting captions\n return state.calls[props.callId]?.captionsFeature.currentSpokenLanguage as SupportedSpokenLanguage;\n};\n\n/** @private */\nexport const getSupportedCaptionLanguages = (\n state: CallClientState,\n props: CallingBaseSelectorProps\n): SupportedCaptionLanguage[] | undefined => {\n return state.calls[props.callId]?.captionsFeature.supportedCaptionLanguages as SupportedCaptionLanguage[];\n};\n\n/** @private */\nexport const getSupportedSpokenLanguages = (\n state: CallClientState,\n props: CallingBaseSelectorProps\n): SupportedSpokenLanguage[] | undefined => {\n return state.calls[props.callId]?.captionsFeature.supportedSpokenLanguages as SupportedSpokenLanguage[];\n};\n\n/** @private */\nexport const getMeetingConferencePhones = (\n state: CallClientState,\n props: CallingBaseSelectorProps\n): ConferencePhoneInfo[] | undefined => {\n return state.calls[props.callId]?.meetingConference?.conferencePhones;\n};\n\n/**\n * selector for retrieving the incoming calls from state\n * @returns the incoming calls in the call client state\n * @private\n */\nexport const getIncomingCalls = (state: CallClientState): IncomingCallState[] | TeamsIncomingCallState[] => {\n return Object.values(state.incomingCalls);\n};\n\n/**\n * selector for retrieving the incoming calls that have been removed from state\n * @returns the incoming calls that have been removed\n * @private\n */\nexport const getRemovedIncomingCalls = (state: CallClientState): IncomingCallState[] | TeamsIncomingCallState[] => {\n return Object.values(state.incomingCallsEnded);\n};\n\n/** @private */\nexport const getAssignedBreakoutRoom = (\n state: CallClientState,\n props: CallingBaseSelectorProps\n): BreakoutRoom | undefined => {\n return state.calls[props.callId]?.breakoutRooms?.assignedBreakoutRoom;\n};\n\n/* @conditional-compile-remove(rtt) */\n/** @private */\nexport const getRealTimeTextStatus = (state: CallClientState, props: CallingBaseSelectorProps): boolean | undefined => {\n return state.calls[props.callId]?.realTimeTextFeature.isRealTimeTextFeatureActive;\n};\n\n/* @conditional-compile-remove(rtt) */\n/** @private */\nexport const getRealTimeText = (\n state: CallClientState,\n props: CallingBaseSelectorProps\n):\n | {\n completedMessages?: RealTimeTextInfo[];\n currentInProgress?: RealTimeTextInfo[];\n myInProgress?: RealTimeTextInfo;\n }\n | undefined => {\n return state.calls[props.callId]?.realTimeTextFeature.realTimeTexts;\n};\n\n/* @conditional-compile-remove(together-mode) */\n/**\n * @private\n */\nexport const getTogetherModeCallFeature = (\n state: CallClientState,\n props: CallingBaseSelectorProps\n): TogetherModeCallFeatureState | undefined => state.calls[props.callId]?.togetherMode;\n"]}
@@ -1,11 +1,12 @@
1
1
  // Copyright (c) Microsoft Corporation.
2
2
  // Licensed under the MIT License.
3
- import { getDisplayName, getIdentifier, getRemoteParticipants, getStartCaptionsInProgress, getSupportedCaptionLanguages } from './baseSelectors';
3
+ import { getDisplayName, getIdentifier, getRemoteParticipants, getRemoteParticipantsEnded, getStartCaptionsInProgress, getSupportedCaptionLanguages } from './baseSelectors';
4
4
  /* @conditional-compile-remove(rtt) */
5
5
  import { getRealTimeTextStatus, getRealTimeText } from './baseSelectors';
6
6
  import { getCaptions, getCaptionsStatus, getCurrentCaptionLanguage, getCurrentSpokenLanguage, getSupportedSpokenLanguages } from './baseSelectors';
7
7
  import * as reselect from 'reselect';
8
8
  import { toFlatCommunicationIdentifier } from "../../acs-ui-common/src";
9
+ import { getRemoteParticipantDisplayName } from './utils/callUtils';
9
10
  /**
10
11
  * Selector for {@link StartCaptionsButton} component.
11
12
  *
@@ -52,13 +53,14 @@ export const captionsBannerSelector = reselect.createSelector([
52
53
  getRealTimeTextStatus,
53
54
  getStartCaptionsInProgress,
54
55
  getRemoteParticipants,
56
+ getRemoteParticipantsEnded,
55
57
  getDisplayName,
56
58
  getIdentifier
57
59
  ], (captions,
58
60
  /* @conditional-compile-remove(rtt) */
59
61
  realTimeTexts, isCaptionsFeatureActive,
60
62
  /* @conditional-compile-remove(rtt) */
61
- isRealTimeTextActive, startCaptionsInProgress, remoteParticipants, displayName, identifier) => {
63
+ isRealTimeTextActive, startCaptionsInProgress, remoteParticipants, remoteParticipantsEnded, displayName, identifier) => {
62
64
  var _a, _b;
63
65
  const captionsInfo = captions === null || captions === void 0 ? void 0 : captions.map((c, index) => {
64
66
  const userId = getCaptionsSpeakerIdentifier(c);
@@ -66,11 +68,8 @@ isRealTimeTextActive, startCaptionsInProgress, remoteParticipants, displayName,
66
68
  if (userId === identifier) {
67
69
  finalDisplayName = displayName;
68
70
  }
69
- else if (remoteParticipants) {
70
- const participant = remoteParticipants[userId];
71
- if (participant) {
72
- finalDisplayName = participant.displayName;
73
- }
71
+ else {
72
+ finalDisplayName = getRemoteParticipantDisplayName(userId, remoteParticipants, remoteParticipantsEnded);
74
73
  }
75
74
  return {
76
75
  id: (finalDisplayName !== null && finalDisplayName !== void 0 ? finalDisplayName : 'Unnamed Participant') + index,
@@ -85,7 +84,7 @@ isRealTimeTextActive, startCaptionsInProgress, remoteParticipants, displayName,
85
84
  const userId = getRealTimeTextSpeakerIdentifier(rtt);
86
85
  return {
87
86
  id: rtt.sequenceId,
88
- displayName: getRealTimeTextDisplayName(rtt, identifier, remoteParticipants, displayName, userId),
87
+ displayName: getRealTimeTextDisplayName(rtt, identifier, remoteParticipants, remoteParticipantsEnded, displayName, userId),
89
88
  message: rtt.message,
90
89
  userId,
91
90
  isTyping: rtt.resultType === 'Partial',
@@ -98,7 +97,7 @@ isRealTimeTextActive, startCaptionsInProgress, remoteParticipants, displayName,
98
97
  const userId = getRealTimeTextSpeakerIdentifier(rtt);
99
98
  return {
100
99
  id: rtt.sequenceId,
101
- displayName: getRealTimeTextDisplayName(rtt, identifier, remoteParticipants, displayName, userId),
100
+ displayName: getRealTimeTextDisplayName(rtt, identifier, remoteParticipants, remoteParticipantsEnded, displayName, userId),
102
101
  message: rtt.message,
103
102
  userId,
104
103
  isTyping: rtt.resultType === 'Partial',
@@ -155,16 +154,13 @@ const getRealTimeTextSpeakerIdentifier = (realTimeText) => {
155
154
  return realTimeText.sender.identifier ? toFlatCommunicationIdentifier(realTimeText.sender.identifier) : '';
156
155
  };
157
156
  /* @conditional-compile-remove(rtt) */
158
- const getRealTimeTextDisplayName = (realTimeText, identifier, remoteParticipants, displayName, userId) => {
157
+ const getRealTimeTextDisplayName = (realTimeText, identifier, remoteParticipants, remoteParticipantsEnded, displayName, userId) => {
159
158
  let finalDisplayName;
160
159
  if (userId === identifier) {
161
160
  finalDisplayName = displayName;
162
161
  }
163
- else if (remoteParticipants) {
164
- const participant = remoteParticipants[userId];
165
- if (participant) {
166
- finalDisplayName = participant.displayName;
167
- }
162
+ else {
163
+ finalDisplayName = getRemoteParticipantDisplayName(userId, remoteParticipants, remoteParticipantsEnded);
168
164
  }
169
165
  return finalDisplayName !== null && finalDisplayName !== void 0 ? finalDisplayName : 'Unnamed Participant';
170
166
  };
@@ -1 +1 @@
1
- {"version":3,"file":"captionsSelector.js","sourceRoot":"","sources":["../../../../../calling-component-bindings/src/captionsSelector.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { CallClientState, CaptionsInfo } from '@internal/calling-stateful-client';\n/* @conditional-compile-remove(rtt) */\nimport { RealTimeTextInfo, RemoteParticipantState } from '@internal/calling-stateful-client';\nimport {\n CallingBaseSelectorProps,\n getDisplayName,\n getIdentifier,\n getRemoteParticipants,\n getStartCaptionsInProgress,\n getSupportedCaptionLanguages\n} from './baseSelectors';\n/* @conditional-compile-remove(rtt) */\nimport { getRealTimeTextStatus, getRealTimeText } from './baseSelectors';\nimport {\n getCaptions,\n getCaptionsStatus,\n getCurrentCaptionLanguage,\n getCurrentSpokenLanguage,\n getSupportedSpokenLanguages\n} from './baseSelectors';\nimport * as reselect from 'reselect';\nimport { toFlatCommunicationIdentifier } from '@internal/acs-ui-common';\nimport { CaptionsInformation, SupportedCaptionLanguage, SupportedSpokenLanguage } from '@internal/react-components';\n/* @conditional-compile-remove(rtt) */\nimport { RealTimeTextInformation } from '@internal/react-components';\n\n/**\n * Selector type for the {@link StartCaptionsButton} component.\n * @public\n */\nexport type StartCaptionsButtonSelector = (\n state: CallClientState,\n props: CallingBaseSelectorProps\n) => {\n checked: boolean;\n currentCaptionLanguage: string;\n currentSpokenLanguage: string;\n};\n\n/**\n * Selector for {@link StartCaptionsButton} component.\n *\n * @public\n */\nexport const startCaptionsButtonSelector: StartCaptionsButtonSelector = reselect.createSelector(\n [getCaptionsStatus, getCurrentCaptionLanguage, getCurrentSpokenLanguage],\n (isCaptionsFeatureActive, currentCaptionLanguage, currentSpokenLanguage) => {\n return {\n checked: isCaptionsFeatureActive ?? false,\n currentCaptionLanguage: currentCaptionLanguage ?? '',\n currentSpokenLanguage: currentSpokenLanguage ?? 'en-us'\n };\n }\n);\n\n/**\n * Selector type for components for Changing caption language and spoken language\n * @public\n */\nexport type CaptionSettingsSelector = (\n state: CallClientState,\n props: CallingBaseSelectorProps\n) => {\n supportedCaptionLanguages: SupportedCaptionLanguage[];\n currentCaptionLanguage: SupportedCaptionLanguage;\n supportedSpokenLanguages: SupportedSpokenLanguage[];\n currentSpokenLanguage: SupportedSpokenLanguage;\n isCaptionsFeatureActive: boolean;\n};\n\n/**\n * Selector for Changing caption language and spoken language\n *\n * @public\n */\nexport const captionSettingsSelector: CaptionSettingsSelector = reselect.createSelector(\n [\n getSupportedCaptionLanguages,\n getCurrentCaptionLanguage,\n getSupportedSpokenLanguages,\n getCurrentSpokenLanguage,\n getCaptionsStatus\n ],\n (\n supportedCaptionLanguages,\n currentCaptionLanguage,\n supportedSpokenLanguages,\n currentSpokenLanguage,\n isCaptionsFeatureActive\n ) => {\n return {\n supportedCaptionLanguages: supportedCaptionLanguages ?? [],\n currentCaptionLanguage: currentCaptionLanguage ?? 'en',\n supportedSpokenLanguages: supportedSpokenLanguages ?? ['en-us'],\n currentSpokenLanguage: currentSpokenLanguage ?? 'en-us',\n isCaptionsFeatureActive: isCaptionsFeatureActive ?? false\n };\n }\n);\n/**\n * Selector type for the {@link CaptionsBanner} component.\n * @public\n */\nexport type CaptionsBannerSelector = (\n state: CallClientState,\n props: CallingBaseSelectorProps\n) => {\n captions: CaptionsInformation[];\n /* @conditional-compile-remove(rtt) */\n realTimeTexts: {\n completedMessages?: RealTimeTextInformation[];\n currentInProgress?: RealTimeTextInformation[];\n myInProgress?: RealTimeTextInformation;\n };\n isCaptionsOn: boolean;\n startCaptionsInProgress: boolean;\n /* @conditional-compile-remove(rtt) */\n isRealTimeTextOn: boolean;\n /* @conditional-compile-remove(rtt) */\n latestLocalRealTimeText: RealTimeTextInformation;\n};\n\n/**\n * Selector for {@link CaptionsBanner} component.\n *\n * @public\n */\nexport const captionsBannerSelector: CaptionsBannerSelector = reselect.createSelector(\n [\n getCaptions,\n /* @conditional-compile-remove(rtt) */\n getRealTimeText,\n getCaptionsStatus,\n /* @conditional-compile-remove(rtt) */\n getRealTimeTextStatus,\n getStartCaptionsInProgress,\n getRemoteParticipants,\n getDisplayName,\n getIdentifier\n ],\n (\n captions,\n /* @conditional-compile-remove(rtt) */\n realTimeTexts,\n isCaptionsFeatureActive,\n /* @conditional-compile-remove(rtt) */\n isRealTimeTextActive,\n startCaptionsInProgress,\n remoteParticipants,\n displayName,\n identifier\n ) => {\n const captionsInfo = captions?.map((c, index) => {\n const userId = getCaptionsSpeakerIdentifier(c);\n let finalDisplayName;\n if (userId === identifier) {\n finalDisplayName = displayName;\n } else if (remoteParticipants) {\n const participant = remoteParticipants[userId];\n if (participant) {\n finalDisplayName = participant.displayName;\n }\n }\n\n return {\n id: (finalDisplayName ?? 'Unnamed Participant') + index,\n displayName: finalDisplayName ?? 'Unnamed Participant',\n captionText: c.captionText,\n userId,\n createdTimeStamp: c.timestamp\n };\n });\n /* @conditional-compile-remove(rtt) */\n const completedRealTimeTexts = realTimeTexts?.completedMessages\n ?.filter((rtt) => rtt.message !== '')\n .map((rtt) => {\n const userId = getRealTimeTextSpeakerIdentifier(rtt);\n return {\n id: rtt.sequenceId,\n displayName: getRealTimeTextDisplayName(rtt, identifier, remoteParticipants, displayName, userId),\n message: rtt.message,\n userId,\n isTyping: rtt.resultType === 'Partial',\n isMe: rtt.isMe,\n finalizedTimeStamp: rtt.updatedTimestamp\n };\n });\n /* @conditional-compile-remove(rtt) */\n const inProgressRealTimeTexts = realTimeTexts?.currentInProgress\n ?.filter((rtt) => rtt.message !== '')\n .map((rtt) => {\n const userId = getRealTimeTextSpeakerIdentifier(rtt);\n return {\n id: rtt.sequenceId,\n displayName: getRealTimeTextDisplayName(rtt, identifier, remoteParticipants, displayName, userId),\n message: rtt.message,\n userId,\n isTyping: rtt.resultType === 'Partial',\n isMe: rtt.isMe,\n finalizedTimeStamp: rtt.updatedTimestamp\n };\n });\n /* @conditional-compile-remove(rtt) */\n const myInProgress =\n realTimeTexts?.myInProgress && realTimeTexts.myInProgress.message !== ''\n ? {\n id: realTimeTexts.myInProgress.sequenceId,\n displayName: displayName,\n message: realTimeTexts.myInProgress.message,\n userId: identifier,\n isTyping: realTimeTexts.myInProgress.resultType === 'Partial',\n isMe: true,\n finalizedTimeStamp: realTimeTexts.myInProgress.updatedTimestamp\n }\n : undefined;\n\n /* @conditional-compile-remove(rtt) */\n // find the last final local real time text caption if myInProgress is not available\n let latestLocalRealTimeText;\n /* @conditional-compile-remove(rtt) */\n if (!myInProgress) {\n latestLocalRealTimeText =\n realTimeTexts &&\n realTimeTexts.completedMessages &&\n realTimeTexts.completedMessages\n .slice()\n .reverse()\n .find((rtt) => rtt.isMe);\n }\n\n return {\n captions: captionsInfo ?? [],\n /* @conditional-compile-remove(rtt) */\n realTimeTexts: {\n completedMessages: completedRealTimeTexts as RealTimeTextInformation[],\n currentInProgress: inProgressRealTimeTexts as RealTimeTextInformation[],\n myInProgress: myInProgress as RealTimeTextInformation\n },\n isCaptionsOn: isCaptionsFeatureActive ?? false,\n startCaptionsInProgress: startCaptionsInProgress ?? false,\n /* @conditional-compile-remove(rtt) */\n isRealTimeTextOn: isRealTimeTextActive ?? false,\n /* @conditional-compile-remove(rtt) */\n latestLocalRealTimeText: (myInProgress ?? latestLocalRealTimeText) as RealTimeTextInformation\n };\n }\n);\n\nconst getCaptionsSpeakerIdentifier = (captions: CaptionsInfo): string => {\n return captions.speaker.identifier ? toFlatCommunicationIdentifier(captions.speaker.identifier) : '';\n};\n/* @conditional-compile-remove(rtt) */\nconst getRealTimeTextSpeakerIdentifier = (realTimeText: RealTimeTextInfo): string => {\n return realTimeText.sender.identifier ? toFlatCommunicationIdentifier(realTimeText.sender.identifier) : '';\n};\n\n/* @conditional-compile-remove(rtt) */\nconst getRealTimeTextDisplayName = (\n realTimeText: RealTimeTextInfo,\n identifier: string,\n remoteParticipants:\n | {\n [keys: string]: RemoteParticipantState;\n }\n | undefined,\n displayName: string | undefined,\n userId: string\n): string => {\n let finalDisplayName;\n if (userId === identifier) {\n finalDisplayName = displayName;\n } else if (remoteParticipants) {\n const participant = remoteParticipants[userId];\n if (participant) {\n finalDisplayName = participant.displayName;\n }\n }\n return finalDisplayName ?? 'Unnamed Participant';\n};\n"]}
1
+ {"version":3,"file":"captionsSelector.js","sourceRoot":"","sources":["../../../../../calling-component-bindings/src/captionsSelector.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { CallClientState, CaptionsInfo } from '@internal/calling-stateful-client';\n/* @conditional-compile-remove(rtt) */\nimport { RealTimeTextInfo, RemoteParticipantState } from '@internal/calling-stateful-client';\nimport {\n CallingBaseSelectorProps,\n getDisplayName,\n getIdentifier,\n getRemoteParticipants,\n getRemoteParticipantsEnded,\n getStartCaptionsInProgress,\n getSupportedCaptionLanguages\n} from './baseSelectors';\n/* @conditional-compile-remove(rtt) */\nimport { getRealTimeTextStatus, getRealTimeText } from './baseSelectors';\nimport {\n getCaptions,\n getCaptionsStatus,\n getCurrentCaptionLanguage,\n getCurrentSpokenLanguage,\n getSupportedSpokenLanguages\n} from './baseSelectors';\nimport * as reselect from 'reselect';\nimport { toFlatCommunicationIdentifier } from '@internal/acs-ui-common';\nimport { CaptionsInformation, SupportedCaptionLanguage, SupportedSpokenLanguage } from '@internal/react-components';\n/* @conditional-compile-remove(rtt) */\nimport { RealTimeTextInformation } from '@internal/react-components';\nimport { getRemoteParticipantDisplayName } from './utils/callUtils';\n\n/**\n * Selector type for the {@link StartCaptionsButton} component.\n * @public\n */\nexport type StartCaptionsButtonSelector = (\n state: CallClientState,\n props: CallingBaseSelectorProps\n) => {\n checked: boolean;\n currentCaptionLanguage: string;\n currentSpokenLanguage: string;\n};\n\n/**\n * Selector for {@link StartCaptionsButton} component.\n *\n * @public\n */\nexport const startCaptionsButtonSelector: StartCaptionsButtonSelector = reselect.createSelector(\n [getCaptionsStatus, getCurrentCaptionLanguage, getCurrentSpokenLanguage],\n (isCaptionsFeatureActive, currentCaptionLanguage, currentSpokenLanguage) => {\n return {\n checked: isCaptionsFeatureActive ?? false,\n currentCaptionLanguage: currentCaptionLanguage ?? '',\n currentSpokenLanguage: currentSpokenLanguage ?? 'en-us'\n };\n }\n);\n\n/**\n * Selector type for components for Changing caption language and spoken language\n * @public\n */\nexport type CaptionSettingsSelector = (\n state: CallClientState,\n props: CallingBaseSelectorProps\n) => {\n supportedCaptionLanguages: SupportedCaptionLanguage[];\n currentCaptionLanguage: SupportedCaptionLanguage;\n supportedSpokenLanguages: SupportedSpokenLanguage[];\n currentSpokenLanguage: SupportedSpokenLanguage;\n isCaptionsFeatureActive: boolean;\n};\n\n/**\n * Selector for Changing caption language and spoken language\n *\n * @public\n */\nexport const captionSettingsSelector: CaptionSettingsSelector = reselect.createSelector(\n [\n getSupportedCaptionLanguages,\n getCurrentCaptionLanguage,\n getSupportedSpokenLanguages,\n getCurrentSpokenLanguage,\n getCaptionsStatus\n ],\n (\n supportedCaptionLanguages,\n currentCaptionLanguage,\n supportedSpokenLanguages,\n currentSpokenLanguage,\n isCaptionsFeatureActive\n ) => {\n return {\n supportedCaptionLanguages: supportedCaptionLanguages ?? [],\n currentCaptionLanguage: currentCaptionLanguage ?? 'en',\n supportedSpokenLanguages: supportedSpokenLanguages ?? ['en-us'],\n currentSpokenLanguage: currentSpokenLanguage ?? 'en-us',\n isCaptionsFeatureActive: isCaptionsFeatureActive ?? false\n };\n }\n);\n/**\n * Selector type for the {@link CaptionsBanner} component.\n * @public\n */\nexport type CaptionsBannerSelector = (\n state: CallClientState,\n props: CallingBaseSelectorProps\n) => {\n captions: CaptionsInformation[];\n /* @conditional-compile-remove(rtt) */\n realTimeTexts: {\n completedMessages?: RealTimeTextInformation[];\n currentInProgress?: RealTimeTextInformation[];\n myInProgress?: RealTimeTextInformation;\n };\n isCaptionsOn: boolean;\n startCaptionsInProgress: boolean;\n /* @conditional-compile-remove(rtt) */\n isRealTimeTextOn: boolean;\n /* @conditional-compile-remove(rtt) */\n latestLocalRealTimeText: RealTimeTextInformation;\n};\n\n/**\n * Selector for {@link CaptionsBanner} component.\n *\n * @public\n */\nexport const captionsBannerSelector: CaptionsBannerSelector = reselect.createSelector(\n [\n getCaptions,\n /* @conditional-compile-remove(rtt) */\n getRealTimeText,\n getCaptionsStatus,\n /* @conditional-compile-remove(rtt) */\n getRealTimeTextStatus,\n getStartCaptionsInProgress,\n getRemoteParticipants,\n getRemoteParticipantsEnded,\n getDisplayName,\n getIdentifier\n ],\n (\n captions,\n /* @conditional-compile-remove(rtt) */\n realTimeTexts,\n isCaptionsFeatureActive,\n /* @conditional-compile-remove(rtt) */\n isRealTimeTextActive,\n startCaptionsInProgress,\n remoteParticipants,\n remoteParticipantsEnded,\n displayName,\n identifier\n ) => {\n const captionsInfo = captions?.map((c, index) => {\n const userId = getCaptionsSpeakerIdentifier(c);\n let finalDisplayName;\n if (userId === identifier) {\n finalDisplayName = displayName;\n } else {\n finalDisplayName = getRemoteParticipantDisplayName(userId, remoteParticipants, remoteParticipantsEnded);\n }\n\n return {\n id: (finalDisplayName ?? 'Unnamed Participant') + index,\n displayName: finalDisplayName ?? 'Unnamed Participant',\n captionText: c.captionText,\n userId,\n createdTimeStamp: c.timestamp\n };\n });\n /* @conditional-compile-remove(rtt) */\n const completedRealTimeTexts = realTimeTexts?.completedMessages\n ?.filter((rtt) => rtt.message !== '')\n .map((rtt) => {\n const userId = getRealTimeTextSpeakerIdentifier(rtt);\n return {\n id: rtt.sequenceId,\n displayName: getRealTimeTextDisplayName(\n rtt,\n identifier,\n remoteParticipants,\n remoteParticipantsEnded,\n displayName,\n userId\n ),\n message: rtt.message,\n userId,\n isTyping: rtt.resultType === 'Partial',\n isMe: rtt.isMe,\n finalizedTimeStamp: rtt.updatedTimestamp\n };\n });\n /* @conditional-compile-remove(rtt) */\n const inProgressRealTimeTexts = realTimeTexts?.currentInProgress\n ?.filter((rtt) => rtt.message !== '')\n .map((rtt) => {\n const userId = getRealTimeTextSpeakerIdentifier(rtt);\n return {\n id: rtt.sequenceId,\n displayName: getRealTimeTextDisplayName(\n rtt,\n identifier,\n remoteParticipants,\n remoteParticipantsEnded,\n displayName,\n userId\n ),\n message: rtt.message,\n userId,\n isTyping: rtt.resultType === 'Partial',\n isMe: rtt.isMe,\n finalizedTimeStamp: rtt.updatedTimestamp\n };\n });\n /* @conditional-compile-remove(rtt) */\n const myInProgress =\n realTimeTexts?.myInProgress && realTimeTexts.myInProgress.message !== ''\n ? {\n id: realTimeTexts.myInProgress.sequenceId,\n displayName: displayName,\n message: realTimeTexts.myInProgress.message,\n userId: identifier,\n isTyping: realTimeTexts.myInProgress.resultType === 'Partial',\n isMe: true,\n finalizedTimeStamp: realTimeTexts.myInProgress.updatedTimestamp\n }\n : undefined;\n\n /* @conditional-compile-remove(rtt) */\n // find the last final local real time text caption if myInProgress is not available\n let latestLocalRealTimeText;\n /* @conditional-compile-remove(rtt) */\n if (!myInProgress) {\n latestLocalRealTimeText =\n realTimeTexts &&\n realTimeTexts.completedMessages &&\n realTimeTexts.completedMessages\n .slice()\n .reverse()\n .find((rtt) => rtt.isMe);\n }\n\n return {\n captions: captionsInfo ?? [],\n /* @conditional-compile-remove(rtt) */\n realTimeTexts: {\n completedMessages: completedRealTimeTexts as RealTimeTextInformation[],\n currentInProgress: inProgressRealTimeTexts as RealTimeTextInformation[],\n myInProgress: myInProgress as RealTimeTextInformation\n },\n isCaptionsOn: isCaptionsFeatureActive ?? false,\n startCaptionsInProgress: startCaptionsInProgress ?? false,\n /* @conditional-compile-remove(rtt) */\n isRealTimeTextOn: isRealTimeTextActive ?? false,\n /* @conditional-compile-remove(rtt) */\n latestLocalRealTimeText: (myInProgress ?? latestLocalRealTimeText) as RealTimeTextInformation\n };\n }\n);\n\nconst getCaptionsSpeakerIdentifier = (captions: CaptionsInfo): string => {\n return captions.speaker.identifier ? toFlatCommunicationIdentifier(captions.speaker.identifier) : '';\n};\n/* @conditional-compile-remove(rtt) */\nconst getRealTimeTextSpeakerIdentifier = (realTimeText: RealTimeTextInfo): string => {\n return realTimeText.sender.identifier ? toFlatCommunicationIdentifier(realTimeText.sender.identifier) : '';\n};\n\n/* @conditional-compile-remove(rtt) */\nconst getRealTimeTextDisplayName = (\n realTimeText: RealTimeTextInfo,\n identifier: string,\n remoteParticipants:\n | {\n [keys: string]: RemoteParticipantState;\n }\n | undefined,\n remoteParticipantsEnded:\n | {\n [keys: string]: RemoteParticipantState;\n }\n | undefined,\n displayName: string | undefined,\n userId: string\n): string => {\n let finalDisplayName;\n if (userId === identifier) {\n finalDisplayName = displayName;\n } else {\n finalDisplayName = getRemoteParticipantDisplayName(userId, remoteParticipants, remoteParticipantsEnded);\n }\n return finalDisplayName ?? 'Unnamed Participant';\n};\n"]}
@@ -39,6 +39,17 @@ export declare const disposeAllLocalPreviewViews: (callClient: StatefulCallClien
39
39
  * @internal
40
40
  */
41
41
  export declare const _updateUserDisplayNames: (participants: RemoteParticipantState[]) => RemoteParticipantState[];
42
+ /**
43
+ * Get the display name of a participant for given userId
44
+ *
45
+ * @internal
46
+ *
47
+ */
48
+ export declare const getRemoteParticipantDisplayName: (participantUserId: string, remoteParticipants: {
49
+ [keys: string]: RemoteParticipantState;
50
+ } | undefined, remoteParticipantsEnded: {
51
+ [keys: string]: RemoteParticipantState;
52
+ } | undefined) => string | undefined;
42
53
  /**
43
54
  * Check whether the call is in a supported browser
44
55
  *
@@ -67,6 +67,28 @@ export const _updateUserDisplayNames = (participants) => {
67
67
  return [];
68
68
  }
69
69
  };
70
+ /**
71
+ * Get the display name of a participant for given userId
72
+ *
73
+ * @internal
74
+ *
75
+ */
76
+ export const getRemoteParticipantDisplayName = (participantUserId, remoteParticipants, remoteParticipantsEnded) => {
77
+ let displayName;
78
+ if (remoteParticipants) {
79
+ const participant = remoteParticipants[participantUserId];
80
+ if (participant) {
81
+ displayName = participant.displayName;
82
+ }
83
+ }
84
+ if (remoteParticipantsEnded && displayName === undefined) {
85
+ const participant = remoteParticipantsEnded[participantUserId];
86
+ if (participant) {
87
+ displayName = participant.displayName;
88
+ }
89
+ }
90
+ return displayName;
91
+ };
70
92
  const memoizedUpdateDisplayName = memoizeFnAll((participantId, participant) => {
71
93
  if (isPhoneNumberIdentifier(participant.identifier)) {
72
94
  return Object.assign(Object.assign({}, participant), { displayName: participant.identifier.phoneNumber });
@@ -1 +1 @@
1
- {"version":3,"file":"callUtils.js","sourceRoot":"","sources":["../../../../../../calling-component-bindings/src/utils/callUtils.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport {\n CallClientState,\n CallState,\n DeviceManagerState,\n RemoteParticipantState,\n StatefulCallClient\n} from '@internal/calling-stateful-client';\nimport {\n CallState as CallStatus,\n EnvironmentInfo,\n Features,\n LocalVideoStream,\n ParticipantRole\n} from '@azure/communication-calling';\nimport {\n CommunicationIdentifier,\n CommunicationUserIdentifier,\n isCommunicationUserIdentifier,\n isMicrosoftTeamsUserIdentifier,\n isPhoneNumberIdentifier,\n MicrosoftTeamsUserIdentifier,\n PhoneNumberIdentifier,\n UnknownIdentifier\n} from '@azure/communication-common';\nimport { memoizeFnAll, toFlatCommunicationIdentifier } from '@internal/acs-ui-common';\n\n/**\n * Type for connmection state\n *\n * @internal\n */\nexport type ParticipantConnectionState =\n | 'Idle'\n | 'Connecting'\n | 'Ringing'\n | 'Connected'\n | 'Hold'\n | 'InLobby'\n | 'EarlyMedia'\n | 'Disconnected'\n | 'Reconnecting';\n\n/**\n * Check if the call state represents being in the call\n *\n * @internal\n */\nexport const _isInCall = (callStatus?: CallStatus): boolean =>\n !!callStatus &&\n !['None', 'Disconnected', 'Connecting', 'Ringing', 'EarlyMedia', 'Disconnecting'].includes(callStatus);\n\n/**\n * Check if the call state represents being in the lobby or waiting to be admitted.\n *\n * @internal\n */\nexport const _isInLobbyOrConnecting = (callStatus: CallStatus | undefined): boolean =>\n !!callStatus && ['Connecting', 'Ringing', 'InLobby', 'EarlyMedia'].includes(callStatus);\n\n/**\n * Check if the device manager local video is on when not part of a call\n * i.e. do unparented views exist.\n *\n * @internal\n */\nexport const _isPreviewOn = (deviceManager: DeviceManagerState): boolean => {\n // TODO: we should take in a LocalVideoStream that developer wants to use as their 'Preview' view. We should also\n // handle cases where 'Preview' view is in progress and not necessary completed.\n return deviceManager.unparentedViews[0]?.view !== undefined;\n};\n\n/**\n * Dispose of all preview views\n * We assume all unparented views are local preview views.\n *\n * @private\n */\nexport const disposeAllLocalPreviewViews = async (callClient: StatefulCallClient): Promise<void> => {\n const unparentedViews = callClient.getState().deviceManager.unparentedViews;\n for (const view of unparentedViews) {\n await callClient.disposeView(undefined, undefined, view);\n }\n};\n\n/**\n * Update the users displayNames based on the type of user they are\n *\n * @internal\n */\nexport const _updateUserDisplayNames = (participants: RemoteParticipantState[]): RemoteParticipantState[] => {\n if (participants) {\n return memoizedUpdateDisplayName((memoizedFn) => {\n return Object.values(participants).map((p) => {\n const pid = toFlatCommunicationIdentifier(p.identifier);\n return memoizedFn(pid, p);\n });\n });\n } else {\n return [];\n }\n};\n\nconst memoizedUpdateDisplayName = memoizeFnAll((participantId: string, participant: RemoteParticipantState) => {\n if (isPhoneNumberIdentifier(participant.identifier)) {\n return {\n ...participant,\n displayName: participant.identifier.phoneNumber\n };\n } else {\n return participant;\n }\n});\n\n/**\n * Check whether the call is in a supported browser\n *\n * @internal\n */\nexport const _getEnvironmentInfo = async (callClient: StatefulCallClient): Promise<EnvironmentInfo> => {\n const environmentInfo = await callClient.feature(Features.DebugInfo).getEnvironmentInfo();\n return environmentInfo;\n};\n\n/**\n * @private\n * A type guard to ensure all participants are acceptable type for Teams call\n */\nexport const isTeamsCallParticipants = (\n participants: CommunicationIdentifier[]\n): participants is (PhoneNumberIdentifier | MicrosoftTeamsUserIdentifier | UnknownIdentifier)[] => {\n return participants.every((p) => !isCommunicationUserIdentifier(p));\n};\n\n/**\n * @private\n * A type guard to ensure all participants are acceptable type for ACS call\n */\nexport const isACSCallParticipants = (\n participants: CommunicationIdentifier[]\n): participants is (PhoneNumberIdentifier | CommunicationUserIdentifier | UnknownIdentifier)[] => {\n return participants.every((p) => !isMicrosoftTeamsUserIdentifier(p));\n};\n\n/**\n * @private\n * Checks whether the user is a 'Ringing' PSTN user or in a 'Connecting' state.\n */\nexport const _convertParticipantState = (participant: RemoteParticipantState): ParticipantConnectionState => {\n /* @conditional-compile-remove(remote-ufd) */\n if (\n participant.diagnostics &&\n participant.diagnostics['serverConnection'] &&\n participant.diagnostics['serverConnection']?.value === false\n ) {\n return 'Reconnecting';\n }\n return isPhoneNumberIdentifier(participant.identifier) && participant.state === 'Connecting'\n ? 'Ringing'\n : participant.state;\n};\n\n/**\n * @private\n * Changes the display name of the participant based on the local and remote user's role.\n */\nexport const maskDisplayNameWithRole = (\n displayName: string | undefined,\n localUserRole?: ParticipantRole,\n participantRole?: ParticipantRole,\n isHideAttendeeNamesEnabled?: boolean\n): string | undefined => {\n let maskedDisplayName = displayName;\n if (isHideAttendeeNamesEnabled && participantRole && participantRole === 'Attendee') {\n if (localUserRole && localUserRole === 'Attendee') {\n maskedDisplayName = '{AttendeeRole}';\n }\n if (\n localUserRole &&\n (localUserRole === 'Presenter' || localUserRole === 'Co-organizer' || localUserRole === 'Organizer')\n ) {\n maskedDisplayName = `{AttendeeRole}(${displayName})`;\n }\n }\n return maskedDisplayName;\n};\n\n/**\n * Helper to create a local video stream from the selected camera.\n * @private\n */\nexport const createLocalVideoStream = async (callClient: StatefulCallClient): Promise<LocalVideoStream | undefined> => {\n const camera = await callClient?.getState().deviceManager.selectedCamera;\n if (camera) {\n return new LocalVideoStream(camera);\n }\n return undefined;\n};\n\n/**\n * Get call state if existing, if not and the call not exists in ended record return undefined, if it never exists, throw an error.\n * @private\n */\nexport const getCallStateIfExist = (state: CallClientState, callId: string): CallState | undefined => {\n if (!state.calls[callId]) {\n // If call has ended, we don't need to throw an error.\n if (state.callsEnded[callId]) {\n return undefined;\n }\n throw new Error(`Call Not Found: ${callId}`);\n }\n return state.calls[callId];\n};\n"]}
1
+ {"version":3,"file":"callUtils.js","sourceRoot":"","sources":["../../../../../../calling-component-bindings/src/utils/callUtils.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport {\n CallClientState,\n CallState,\n DeviceManagerState,\n RemoteParticipantState,\n StatefulCallClient\n} from '@internal/calling-stateful-client';\nimport {\n CallState as CallStatus,\n EnvironmentInfo,\n Features,\n LocalVideoStream,\n ParticipantRole\n} from '@azure/communication-calling';\nimport {\n CommunicationIdentifier,\n CommunicationUserIdentifier,\n isCommunicationUserIdentifier,\n isMicrosoftTeamsUserIdentifier,\n isPhoneNumberIdentifier,\n MicrosoftTeamsUserIdentifier,\n PhoneNumberIdentifier,\n UnknownIdentifier\n} from '@azure/communication-common';\nimport { memoizeFnAll, toFlatCommunicationIdentifier } from '@internal/acs-ui-common';\n\n/**\n * Type for connmection state\n *\n * @internal\n */\nexport type ParticipantConnectionState =\n | 'Idle'\n | 'Connecting'\n | 'Ringing'\n | 'Connected'\n | 'Hold'\n | 'InLobby'\n | 'EarlyMedia'\n | 'Disconnected'\n | 'Reconnecting';\n\n/**\n * Check if the call state represents being in the call\n *\n * @internal\n */\nexport const _isInCall = (callStatus?: CallStatus): boolean =>\n !!callStatus &&\n !['None', 'Disconnected', 'Connecting', 'Ringing', 'EarlyMedia', 'Disconnecting'].includes(callStatus);\n\n/**\n * Check if the call state represents being in the lobby or waiting to be admitted.\n *\n * @internal\n */\nexport const _isInLobbyOrConnecting = (callStatus: CallStatus | undefined): boolean =>\n !!callStatus && ['Connecting', 'Ringing', 'InLobby', 'EarlyMedia'].includes(callStatus);\n\n/**\n * Check if the device manager local video is on when not part of a call\n * i.e. do unparented views exist.\n *\n * @internal\n */\nexport const _isPreviewOn = (deviceManager: DeviceManagerState): boolean => {\n // TODO: we should take in a LocalVideoStream that developer wants to use as their 'Preview' view. We should also\n // handle cases where 'Preview' view is in progress and not necessary completed.\n return deviceManager.unparentedViews[0]?.view !== undefined;\n};\n\n/**\n * Dispose of all preview views\n * We assume all unparented views are local preview views.\n *\n * @private\n */\nexport const disposeAllLocalPreviewViews = async (callClient: StatefulCallClient): Promise<void> => {\n const unparentedViews = callClient.getState().deviceManager.unparentedViews;\n for (const view of unparentedViews) {\n await callClient.disposeView(undefined, undefined, view);\n }\n};\n\n/**\n * Update the users displayNames based on the type of user they are\n *\n * @internal\n */\nexport const _updateUserDisplayNames = (participants: RemoteParticipantState[]): RemoteParticipantState[] => {\n if (participants) {\n return memoizedUpdateDisplayName((memoizedFn) => {\n return Object.values(participants).map((p) => {\n const pid = toFlatCommunicationIdentifier(p.identifier);\n return memoizedFn(pid, p);\n });\n });\n } else {\n return [];\n }\n};\n\n/**\n * Get the display name of a participant for given userId\n *\n * @internal\n *\n */\nexport const getRemoteParticipantDisplayName = (\n participantUserId: string,\n remoteParticipants:\n | {\n [keys: string]: RemoteParticipantState;\n }\n | undefined,\n remoteParticipantsEnded:\n | {\n [keys: string]: RemoteParticipantState;\n }\n | undefined\n): string | undefined => {\n let displayName;\n if (remoteParticipants) {\n const participant = remoteParticipants[participantUserId];\n if (participant) {\n displayName = participant.displayName;\n }\n }\n if (remoteParticipantsEnded && displayName === undefined) {\n const participant = remoteParticipantsEnded[participantUserId];\n if (participant) {\n displayName = participant.displayName;\n }\n }\n return displayName;\n};\n\nconst memoizedUpdateDisplayName = memoizeFnAll((participantId: string, participant: RemoteParticipantState) => {\n if (isPhoneNumberIdentifier(participant.identifier)) {\n return {\n ...participant,\n displayName: participant.identifier.phoneNumber\n };\n } else {\n return participant;\n }\n});\n\n/**\n * Check whether the call is in a supported browser\n *\n * @internal\n */\nexport const _getEnvironmentInfo = async (callClient: StatefulCallClient): Promise<EnvironmentInfo> => {\n const environmentInfo = await callClient.feature(Features.DebugInfo).getEnvironmentInfo();\n return environmentInfo;\n};\n\n/**\n * @private\n * A type guard to ensure all participants are acceptable type for Teams call\n */\nexport const isTeamsCallParticipants = (\n participants: CommunicationIdentifier[]\n): participants is (PhoneNumberIdentifier | MicrosoftTeamsUserIdentifier | UnknownIdentifier)[] => {\n return participants.every((p) => !isCommunicationUserIdentifier(p));\n};\n\n/**\n * @private\n * A type guard to ensure all participants are acceptable type for ACS call\n */\nexport const isACSCallParticipants = (\n participants: CommunicationIdentifier[]\n): participants is (PhoneNumberIdentifier | CommunicationUserIdentifier | UnknownIdentifier)[] => {\n return participants.every((p) => !isMicrosoftTeamsUserIdentifier(p));\n};\n\n/**\n * @private\n * Checks whether the user is a 'Ringing' PSTN user or in a 'Connecting' state.\n */\nexport const _convertParticipantState = (participant: RemoteParticipantState): ParticipantConnectionState => {\n /* @conditional-compile-remove(remote-ufd) */\n if (\n participant.diagnostics &&\n participant.diagnostics['serverConnection'] &&\n participant.diagnostics['serverConnection']?.value === false\n ) {\n return 'Reconnecting';\n }\n return isPhoneNumberIdentifier(participant.identifier) && participant.state === 'Connecting'\n ? 'Ringing'\n : participant.state;\n};\n\n/**\n * @private\n * Changes the display name of the participant based on the local and remote user's role.\n */\nexport const maskDisplayNameWithRole = (\n displayName: string | undefined,\n localUserRole?: ParticipantRole,\n participantRole?: ParticipantRole,\n isHideAttendeeNamesEnabled?: boolean\n): string | undefined => {\n let maskedDisplayName = displayName;\n if (isHideAttendeeNamesEnabled && participantRole && participantRole === 'Attendee') {\n if (localUserRole && localUserRole === 'Attendee') {\n maskedDisplayName = '{AttendeeRole}';\n }\n if (\n localUserRole &&\n (localUserRole === 'Presenter' || localUserRole === 'Co-organizer' || localUserRole === 'Organizer')\n ) {\n maskedDisplayName = `{AttendeeRole}(${displayName})`;\n }\n }\n return maskedDisplayName;\n};\n\n/**\n * Helper to create a local video stream from the selected camera.\n * @private\n */\nexport const createLocalVideoStream = async (callClient: StatefulCallClient): Promise<LocalVideoStream | undefined> => {\n const camera = await callClient?.getState().deviceManager.selectedCamera;\n if (camera) {\n return new LocalVideoStream(camera);\n }\n return undefined;\n};\n\n/**\n * Get call state if existing, if not and the call not exists in ended record return undefined, if it never exists, throw an error.\n * @private\n */\nexport const getCallStateIfExist = (state: CallClientState, callId: string): CallState | undefined => {\n if (!state.calls[callId]) {\n // If call has ended, we don't need to throw an error.\n if (state.callsEnded[callId]) {\n return undefined;\n }\n throw new Error(`Call Not Found: ${callId}`);\n }\n return state.calls[callId];\n};\n"]}
@@ -147,7 +147,7 @@ export const CaptionsBanner = (props) => {
147
147
  React.createElement(IconButton, { "data-ui-id": "captions-banner-expand-icon", iconProps: { iconName: expandBannerHeight ? 'MinimizeIcon' : 'ExpandIcon' }, ariaLabel: expandBannerHeight ? strings.minimizeButtonAriaLabel : strings.expandButtonAriaLabel, onClick: () => setExpandBannerHeight(!expandBannerHeight), styles: expandIconClassName(theme) }))),
148
148
  (isCaptionsOn || /* @conditional-compile-remove(rtt) */ isRealTimeTextOn) && (React.createElement("ul", { ref: captionsScrollDivRef, className: (captionsOptions === null || captionsOptions === void 0 ? void 0 : captionsOptions.height) === 'full'
149
149
  ? captionsBannerFullHeightClassName(theme)
150
- : captionsBannerClassName(formFactor, /* @conditional-compile-remove(rtt) */ expandBannerHeight), "data-ui-id": "captions-banner-inner" },
150
+ : captionsBannerClassName(formFactor, /* @conditional-compile-remove(rtt) */ expandBannerHeight), "data-ui-id": "captions-banner-inner", "data-is-focusable": true },
151
151
  /* @conditional-compile-remove(rtt) */ isRealTimeTextOn && (React.createElement("li", null,
152
152
  React.createElement(Stack, { className: rttDisclosureBannerClassName() },
153
153
  React.createElement(_RTTDisclosureBanner, { strings: realTimeTextDisclosureBannerStrings })))),
@@ -1 +1 @@
1
- {"version":3,"file":"CaptionsBanner.js","sourceRoot":"","sources":["../../../../../../react-components/src/components/CaptionsBanner.tsx"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\nimport { Stack, FocusZone, Spinner, useTheme } from '@fluentui/react';\n/* @conditional-compile-remove(rtt) */\nimport { TextField } from '@fluentui/react';\nimport React, { useEffect, useRef, useState, useCallback } from 'react';\n/* @conditional-compile-remove(rtt) */\nimport { useMemo } from 'react';\nimport { _Caption } from './Caption';\nimport {\n captionContainerClassName,\n captionsBannerClassName,\n captionsBannerFullHeightClassName,\n captionsContainerClassName,\n loadingBannerFullHeightStyles,\n loadingBannerStyles\n} from './styles/Captions.style';\n/* @conditional-compile-remove(rtt) */\nimport { rttDisclosureBannerClassName } from './styles/Captions.style';\nimport { OnRenderAvatarCallback } from '../types';\nimport { useLocale } from '../localization';\n/* @conditional-compile-remove(rtt) */\nimport { RealTimeText } from './RealTimeText';\n/* @conditional-compile-remove(rtt) */\nimport { _RTTDisclosureBanner } from './RTTDisclosureBanner';\n/* @conditional-compile-remove(rtt) */\nimport { sortCaptionsAndRealTimeTexts } from './utils/sortCaptionsAndRealTimeTexts';\n/* @conditional-compile-remove(rtt) */\nimport {\n expandIconClassName,\n bannerTitleContainerClassName,\n realTimeTextInputBoxStyles\n} from './styles/Captions.style';\n/* @conditional-compile-remove(rtt) */\nimport { titleClassName } from './styles/CaptionsSettingsModal.styles';\n/* @conditional-compile-remove(rtt) */\nimport { Text, IconButton } from '@fluentui/react';\n\n/**\n * @public\n * information required for each line of caption\n */\nexport type CaptionsInformation = {\n /**\n * unique id for each caption\n */\n id: string;\n /**\n * speaker's display name\n */\n displayName: string;\n /**\n * content of the caption\n */\n captionText: string;\n /**\n * id of the speaker\n */\n userId?: string;\n /* @conditional-compile-remove(rtt) */\n /**\n * timestamp when the caption was created\n * Please note that this value is essential for determining the order of captions and real time text messages\n * If you are using both captions and real time text, please ensure that the createdTimeStamp is populated\n */\n createdTimeStamp?: Date;\n};\n\n/* @conditional-compile-remove(rtt) */\n/**\n * @public\n * information required for each line of real time text\n */\nexport type RealTimeTextInformation = {\n /**\n * The id of the real time text.\n */\n id: number;\n /**\n * sender's display name\n */\n displayName: string;\n /**\n * id of the sender\n */\n userId?: string;\n /**\n * The real time text message.\n */\n message: string;\n /**\n * if the real time text received is partial\n */\n isTyping: boolean;\n /**\n * timestamp when the real time text was finalized\n */\n finalizedTimeStamp: Date;\n /**\n * If message originated from the local participant\n * default value is false\n */\n isMe?: boolean;\n};\n/**\n * @public\n * strings for captions banner\n */\nexport interface CaptionsBannerStrings {\n /**\n * Spinner text for captions banner\n */\n captionsBannerSpinnerText?: string;\n /* @conditional-compile-remove(rtt) */\n /**\n * Default text for RTT input text box\n */\n realTimeTextInputBoxDefaultText?: string;\n /* @conditional-compile-remove(rtt) */\n /**\n * Error message for RTT input text box when the size exceeds the limit 2000\n */\n realTimeTextInputErrorMessage?: string;\n /* @conditional-compile-remove(rtt) */\n /**\n * Real time text disclosure banner title\n */\n realTimeTextBannerTitle?: string;\n /* @conditional-compile-remove(rtt) */\n /**\n * Real time text disclosure banner content\n */\n realTimeTextBannerContent?: string;\n /* @conditional-compile-remove(rtt) */\n /**\n * Real time text disclosure banner link label\n */\n realTimeTextBannerLinkLabel?: string;\n /* @conditional-compile-remove(rtt) */\n /**\n * Title for the container when only captions is enabled\n */\n captionsOnlyContainerTitle?: string;\n /* @conditional-compile-remove(rtt) */\n /**\n * Title for the container when only real time text is enabled\n */\n realTimeTextOnlyContainerTitle?: string;\n /* @conditional-compile-remove(rtt) */\n /**\n * Title for the container when both captions and real time text is enabled\n */\n captionsAndRealTimeTextContainerTitle?: string;\n /* @conditional-compile-remove(rtt) */\n /**\n * Expand button aria label\n */\n expandButtonAriaLabel?: string;\n /* @conditional-compile-remove(rtt) */\n /**\n * Minimize button aria label\n */\n minimizeButtonAriaLabel?: string;\n}\n\n/**\n * @public\n * CaptionsBanner Component Props.\n */\nexport interface CaptionsBannerProps {\n /**\n * Array of captions to be displayed\n */\n captions: CaptionsInformation[];\n /* @conditional-compile-remove(rtt) */\n /**\n * Array of finalized and partial real time text messages\n */\n realTimeTexts?: {\n completedMessages?: RealTimeTextInformation[];\n currentInProgress?: RealTimeTextInformation[];\n myInProgress?: RealTimeTextInformation;\n };\n /**\n * Flag to indicate if captions are on\n */\n isCaptionsOn?: boolean;\n /* @conditional-compile-remove(rtt) */\n /**\n * Flag to indicate if real time text is on\n */\n isRealTimeTextOn?: boolean;\n /**\n * Flag to indicate if captions are being started\n * This is used to show spinner while captions are being started\n */\n startCaptionsInProgress?: boolean;\n /**\n * Optional callback to override render of the avatar.\n *\n * @param userId - user Id\n */\n onRenderAvatar?: OnRenderAvatarCallback;\n /**\n * Optional strings for the component\n */\n strings?: CaptionsBannerStrings;\n /**\n * Optional form factor for the component.\n * @defaultValue 'default'\n */\n formFactor?: 'default' | 'compact';\n /**\n * Optional options for the component.\n */\n captionsOptions?: {\n height: 'full' | 'default';\n };\n /* @conditional-compile-remove(rtt) */\n /**\n * Optional callback to send real time text.\n */\n onSendRealTimeText?: (text: string, isFinalized: boolean) => Promise<void>;\n /* @conditional-compile-remove(rtt) */\n /**\n * Latest local real time text\n */\n latestLocalRealTimeText?: RealTimeTextInformation;\n}\n\nconst SCROLL_OFFSET_ALLOWANCE = 20;\n\n/**\n * @public\n * A component for displaying a CaptionsBanner with user icon, displayName and captions text.\n */\nexport const CaptionsBanner = (props: CaptionsBannerProps): JSX.Element => {\n const {\n captions,\n /* @conditional-compile-remove(rtt) */\n realTimeTexts,\n isCaptionsOn,\n startCaptionsInProgress,\n onRenderAvatar,\n formFactor = 'default',\n captionsOptions,\n /* @conditional-compile-remove(rtt) */\n isRealTimeTextOn,\n /* @conditional-compile-remove(rtt) */\n onSendRealTimeText,\n /* @conditional-compile-remove(rtt) */\n latestLocalRealTimeText\n } = props;\n const localeStrings = useLocale().strings.captionsBanner;\n const strings = { ...localeStrings, ...props.strings };\n const captionsScrollDivRef = useRef<HTMLUListElement>(null);\n const [isAtBottomOfScroll, setIsAtBottomOfScroll] = useState<boolean>(true);\n const theme = useTheme();\n /* @conditional-compile-remove(rtt) */\n const [expandBannerHeight, setExpandBannerHeight] = useState<boolean>(false);\n /* @conditional-compile-remove(rtt) */\n const getTitle = (): string => {\n if (isCaptionsOn && isRealTimeTextOn) {\n return strings.captionsAndRealTimeTextContainerTitle ?? '';\n } else if (isCaptionsOn) {\n return strings.captionsOnlyContainerTitle ?? '';\n } else if (isRealTimeTextOn) {\n return strings.realTimeTextOnlyContainerTitle ?? '';\n }\n return '';\n };\n /* @conditional-compile-remove(rtt) */\n // merge realtimetexts and captions into one array based on timestamp\n // Combine captions and realTimeTexts into one list\n const combinedList: (CaptionsInformation | RealTimeTextInformation)[] = useMemo(() => {\n return sortCaptionsAndRealTimeTexts(captions, realTimeTexts?.completedMessages ?? []);\n }, [captions, realTimeTexts?.completedMessages]);\n\n /* @conditional-compile-remove(rtt) */\n const mergedCaptions: (CaptionsInformation | RealTimeTextInformation)[] = useMemo(() => {\n return [...combinedList, ...(realTimeTexts?.currentInProgress ?? []), realTimeTexts?.myInProgress].slice(-50) as (\n | CaptionsInformation\n | RealTimeTextInformation\n )[];\n }, [combinedList, realTimeTexts]);\n\n const scrollToBottom = (): void => {\n if (captionsScrollDivRef.current) {\n captionsScrollDivRef.current.scrollTop = captionsScrollDivRef.current.scrollHeight;\n }\n };\n\n const handleScrollToTheBottom = useCallback((): void => {\n if (!captionsScrollDivRef.current) {\n return;\n }\n const atBottom =\n Math.ceil(captionsScrollDivRef.current.scrollTop) >=\n captionsScrollDivRef.current.scrollHeight - captionsScrollDivRef.current.clientHeight - SCROLL_OFFSET_ALLOWANCE;\n\n setIsAtBottomOfScroll(atBottom);\n }, []);\n\n useEffect(() => {\n const captionsScrollDiv = captionsScrollDivRef.current;\n captionsScrollDiv?.addEventListener('scroll', handleScrollToTheBottom);\n\n return () => {\n captionsScrollDiv?.removeEventListener('scroll', handleScrollToTheBottom);\n };\n }, [handleScrollToTheBottom, isCaptionsOn, /* @conditional-compile-remove(rtt) */ isRealTimeTextOn]);\n\n useEffect(() => {\n // only auto scroll to bottom is already is at bottom of scroll before new caption comes in\n if (isAtBottomOfScroll) {\n scrollToBottom();\n }\n }, [captions, /* @conditional-compile-remove(rtt) */ realTimeTexts, isAtBottomOfScroll]);\n /* @conditional-compile-remove(rtt) */\n const [textFieldValue, setTextFieldValue] = useState<string>('');\n /* @conditional-compile-remove(rtt) */\n useEffect(() => {\n // if the latest real time text sent by myself is final, clear the text field\n if (latestLocalRealTimeText && !latestLocalRealTimeText.isTyping) {\n setTextFieldValue('');\n }\n }, [latestLocalRealTimeText]);\n\n /* @conditional-compile-remove(rtt) */\n const handleKeyDown = (event: React.KeyboardEvent<HTMLInputElement | HTMLTextAreaElement>): void => {\n if (event.key === 'Enter') {\n event.preventDefault();\n if (textFieldValue && onSendRealTimeText) {\n onSendRealTimeText(textFieldValue, true);\n setTextFieldValue('');\n }\n }\n };\n\n /* @conditional-compile-remove(rtt) */\n const realTimeTextDisclosureBannerStrings = {\n bannerTitle: strings.realTimeTextBannerTitle ?? '',\n bannerContent: strings.realTimeTextBannerContent ?? '',\n bannerLinkLabel: strings.realTimeTextBannerLinkLabel ?? ''\n };\n\n const captionsTrampoline = (): JSX.Element => {\n /* @conditional-compile-remove(rtt) */\n return (\n <>\n {mergedCaptions\n .filter((caption) => caption)\n .map((caption) => {\n if ('message' in caption) {\n return (\n <li key={`RealTimeText - ${caption.id}`} className={captionContainerClassName} data-is-focusable={true}>\n <RealTimeText {...(caption as RealTimeTextInformation)} />\n </li>\n );\n }\n return (\n <li key={`Captions - ${caption.id}`} className={captionContainerClassName} data-is-focusable={true}>\n <_Caption {...(caption as CaptionsInformation)} onRenderAvatar={onRenderAvatar} />\n </li>\n );\n return <></>;\n })}\n </>\n );\n\n return (\n <>\n {captions.map((caption) => {\n return (\n <li key={caption.id} className={captionContainerClassName} data-is-focusable={true}>\n <_Caption {...(caption as CaptionsInformation)} onRenderAvatar={onRenderAvatar} />\n </li>\n );\n })}\n </>\n );\n };\n\n return (\n <>\n {(startCaptionsInProgress || isCaptionsOn || /* @conditional-compile-remove(rtt) */ isRealTimeTextOn) && (\n <FocusZone shouldFocusOnMount className={captionsContainerClassName} data-ui-id=\"captions-banner\">\n {\n /* @conditional-compile-remove(rtt) */ (isCaptionsOn || isRealTimeTextOn) && formFactor === 'compact' && (\n <Stack\n horizontal\n horizontalAlign=\"space-between\"\n verticalAlign=\"center\"\n className={bannerTitleContainerClassName}\n >\n <Text className={titleClassName}>{getTitle()}</Text>\n <IconButton\n data-ui-id=\"captions-banner-expand-icon\"\n iconProps={{ iconName: expandBannerHeight ? 'MinimizeIcon' : 'ExpandIcon' }}\n ariaLabel={expandBannerHeight ? strings.minimizeButtonAriaLabel : strings.expandButtonAriaLabel}\n onClick={() => setExpandBannerHeight(!expandBannerHeight)}\n styles={expandIconClassName(theme)}\n />\n </Stack>\n )\n }\n {(isCaptionsOn || /* @conditional-compile-remove(rtt) */ isRealTimeTextOn) && (\n <ul\n ref={captionsScrollDivRef}\n className={\n captionsOptions?.height === 'full'\n ? captionsBannerFullHeightClassName(theme)\n : captionsBannerClassName(formFactor, /* @conditional-compile-remove(rtt) */ expandBannerHeight)\n }\n data-ui-id=\"captions-banner-inner\"\n >\n {\n /* @conditional-compile-remove(rtt) */ isRealTimeTextOn && (\n <li>\n <Stack className={rttDisclosureBannerClassName()}>\n <_RTTDisclosureBanner strings={realTimeTextDisclosureBannerStrings} />\n </Stack>\n </li>\n )\n }\n {captionsTrampoline()}\n </ul>\n )}\n {\n /* @conditional-compile-remove(rtt) */ isRealTimeTextOn && onSendRealTimeText && (\n <TextField\n styles={realTimeTextInputBoxStyles(theme)}\n placeholder={strings.realTimeTextInputBoxDefaultText}\n value={textFieldValue}\n onKeyDown={handleKeyDown}\n onChange={(_, newValue) => {\n setTextFieldValue(newValue || '');\n onSendRealTimeText(newValue || '', false);\n }}\n maxLength={2000}\n errorMessage={textFieldValue.length >= 2000 ? strings.realTimeTextInputErrorMessage : undefined}\n />\n )\n }\n {!isCaptionsOn && /* @conditional-compile-remove(rtt) */ !isRealTimeTextOn && (\n <Stack\n verticalAlign=\"center\"\n styles={\n captionsOptions?.height === 'full'\n ? loadingBannerFullHeightStyles(theme)\n : loadingBannerStyles(formFactor)\n }\n data-is-focusable={true}\n >\n <Spinner label={strings?.captionsBannerSpinnerText} ariaLive=\"assertive\" labelPosition=\"right\" />\n </Stack>\n )}\n </FocusZone>\n )}\n </>\n );\n};\n"]}
1
+ {"version":3,"file":"CaptionsBanner.js","sourceRoot":"","sources":["../../../../../../react-components/src/components/CaptionsBanner.tsx"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\nimport { Stack, FocusZone, Spinner, useTheme } from '@fluentui/react';\n/* @conditional-compile-remove(rtt) */\nimport { TextField } from '@fluentui/react';\nimport React, { useEffect, useRef, useState, useCallback } from 'react';\n/* @conditional-compile-remove(rtt) */\nimport { useMemo } from 'react';\nimport { _Caption } from './Caption';\nimport {\n captionContainerClassName,\n captionsBannerClassName,\n captionsBannerFullHeightClassName,\n captionsContainerClassName,\n loadingBannerFullHeightStyles,\n loadingBannerStyles\n} from './styles/Captions.style';\n/* @conditional-compile-remove(rtt) */\nimport { rttDisclosureBannerClassName } from './styles/Captions.style';\nimport { OnRenderAvatarCallback } from '../types';\nimport { useLocale } from '../localization';\n/* @conditional-compile-remove(rtt) */\nimport { RealTimeText } from './RealTimeText';\n/* @conditional-compile-remove(rtt) */\nimport { _RTTDisclosureBanner } from './RTTDisclosureBanner';\n/* @conditional-compile-remove(rtt) */\nimport { sortCaptionsAndRealTimeTexts } from './utils/sortCaptionsAndRealTimeTexts';\n/* @conditional-compile-remove(rtt) */\nimport {\n expandIconClassName,\n bannerTitleContainerClassName,\n realTimeTextInputBoxStyles\n} from './styles/Captions.style';\n/* @conditional-compile-remove(rtt) */\nimport { titleClassName } from './styles/CaptionsSettingsModal.styles';\n/* @conditional-compile-remove(rtt) */\nimport { Text, IconButton } from '@fluentui/react';\n\n/**\n * @public\n * information required for each line of caption\n */\nexport type CaptionsInformation = {\n /**\n * unique id for each caption\n */\n id: string;\n /**\n * speaker's display name\n */\n displayName: string;\n /**\n * content of the caption\n */\n captionText: string;\n /**\n * id of the speaker\n */\n userId?: string;\n /* @conditional-compile-remove(rtt) */\n /**\n * timestamp when the caption was created\n * Please note that this value is essential for determining the order of captions and real time text messages\n * If you are using both captions and real time text, please ensure that the createdTimeStamp is populated\n */\n createdTimeStamp?: Date;\n};\n\n/* @conditional-compile-remove(rtt) */\n/**\n * @public\n * information required for each line of real time text\n */\nexport type RealTimeTextInformation = {\n /**\n * The id of the real time text.\n */\n id: number;\n /**\n * sender's display name\n */\n displayName: string;\n /**\n * id of the sender\n */\n userId?: string;\n /**\n * The real time text message.\n */\n message: string;\n /**\n * if the real time text received is partial\n */\n isTyping: boolean;\n /**\n * timestamp when the real time text was finalized\n */\n finalizedTimeStamp: Date;\n /**\n * If message originated from the local participant\n * default value is false\n */\n isMe?: boolean;\n};\n/**\n * @public\n * strings for captions banner\n */\nexport interface CaptionsBannerStrings {\n /**\n * Spinner text for captions banner\n */\n captionsBannerSpinnerText?: string;\n /* @conditional-compile-remove(rtt) */\n /**\n * Default text for RTT input text box\n */\n realTimeTextInputBoxDefaultText?: string;\n /* @conditional-compile-remove(rtt) */\n /**\n * Error message for RTT input text box when the size exceeds the limit 2000\n */\n realTimeTextInputErrorMessage?: string;\n /* @conditional-compile-remove(rtt) */\n /**\n * Real time text disclosure banner title\n */\n realTimeTextBannerTitle?: string;\n /* @conditional-compile-remove(rtt) */\n /**\n * Real time text disclosure banner content\n */\n realTimeTextBannerContent?: string;\n /* @conditional-compile-remove(rtt) */\n /**\n * Real time text disclosure banner link label\n */\n realTimeTextBannerLinkLabel?: string;\n /* @conditional-compile-remove(rtt) */\n /**\n * Title for the container when only captions is enabled\n */\n captionsOnlyContainerTitle?: string;\n /* @conditional-compile-remove(rtt) */\n /**\n * Title for the container when only real time text is enabled\n */\n realTimeTextOnlyContainerTitle?: string;\n /* @conditional-compile-remove(rtt) */\n /**\n * Title for the container when both captions and real time text is enabled\n */\n captionsAndRealTimeTextContainerTitle?: string;\n /* @conditional-compile-remove(rtt) */\n /**\n * Expand button aria label\n */\n expandButtonAriaLabel?: string;\n /* @conditional-compile-remove(rtt) */\n /**\n * Minimize button aria label\n */\n minimizeButtonAriaLabel?: string;\n}\n\n/**\n * @public\n * CaptionsBanner Component Props.\n */\nexport interface CaptionsBannerProps {\n /**\n * Array of captions to be displayed\n */\n captions: CaptionsInformation[];\n /* @conditional-compile-remove(rtt) */\n /**\n * Array of finalized and partial real time text messages\n */\n realTimeTexts?: {\n completedMessages?: RealTimeTextInformation[];\n currentInProgress?: RealTimeTextInformation[];\n myInProgress?: RealTimeTextInformation;\n };\n /**\n * Flag to indicate if captions are on\n */\n isCaptionsOn?: boolean;\n /* @conditional-compile-remove(rtt) */\n /**\n * Flag to indicate if real time text is on\n */\n isRealTimeTextOn?: boolean;\n /**\n * Flag to indicate if captions are being started\n * This is used to show spinner while captions are being started\n */\n startCaptionsInProgress?: boolean;\n /**\n * Optional callback to override render of the avatar.\n *\n * @param userId - user Id\n */\n onRenderAvatar?: OnRenderAvatarCallback;\n /**\n * Optional strings for the component\n */\n strings?: CaptionsBannerStrings;\n /**\n * Optional form factor for the component.\n * @defaultValue 'default'\n */\n formFactor?: 'default' | 'compact';\n /**\n * Optional options for the component.\n */\n captionsOptions?: {\n height: 'full' | 'default';\n };\n /* @conditional-compile-remove(rtt) */\n /**\n * Optional callback to send real time text.\n */\n onSendRealTimeText?: (text: string, isFinalized: boolean) => Promise<void>;\n /* @conditional-compile-remove(rtt) */\n /**\n * Latest local real time text\n */\n latestLocalRealTimeText?: RealTimeTextInformation;\n}\n\nconst SCROLL_OFFSET_ALLOWANCE = 20;\n\n/**\n * @public\n * A component for displaying a CaptionsBanner with user icon, displayName and captions text.\n */\nexport const CaptionsBanner = (props: CaptionsBannerProps): JSX.Element => {\n const {\n captions,\n /* @conditional-compile-remove(rtt) */\n realTimeTexts,\n isCaptionsOn,\n startCaptionsInProgress,\n onRenderAvatar,\n formFactor = 'default',\n captionsOptions,\n /* @conditional-compile-remove(rtt) */\n isRealTimeTextOn,\n /* @conditional-compile-remove(rtt) */\n onSendRealTimeText,\n /* @conditional-compile-remove(rtt) */\n latestLocalRealTimeText\n } = props;\n const localeStrings = useLocale().strings.captionsBanner;\n const strings = { ...localeStrings, ...props.strings };\n const captionsScrollDivRef = useRef<HTMLUListElement>(null);\n const [isAtBottomOfScroll, setIsAtBottomOfScroll] = useState<boolean>(true);\n const theme = useTheme();\n /* @conditional-compile-remove(rtt) */\n const [expandBannerHeight, setExpandBannerHeight] = useState<boolean>(false);\n /* @conditional-compile-remove(rtt) */\n const getTitle = (): string => {\n if (isCaptionsOn && isRealTimeTextOn) {\n return strings.captionsAndRealTimeTextContainerTitle ?? '';\n } else if (isCaptionsOn) {\n return strings.captionsOnlyContainerTitle ?? '';\n } else if (isRealTimeTextOn) {\n return strings.realTimeTextOnlyContainerTitle ?? '';\n }\n return '';\n };\n /* @conditional-compile-remove(rtt) */\n // merge realtimetexts and captions into one array based on timestamp\n // Combine captions and realTimeTexts into one list\n const combinedList: (CaptionsInformation | RealTimeTextInformation)[] = useMemo(() => {\n return sortCaptionsAndRealTimeTexts(captions, realTimeTexts?.completedMessages ?? []);\n }, [captions, realTimeTexts?.completedMessages]);\n\n /* @conditional-compile-remove(rtt) */\n const mergedCaptions: (CaptionsInformation | RealTimeTextInformation)[] = useMemo(() => {\n return [...combinedList, ...(realTimeTexts?.currentInProgress ?? []), realTimeTexts?.myInProgress].slice(-50) as (\n | CaptionsInformation\n | RealTimeTextInformation\n )[];\n }, [combinedList, realTimeTexts]);\n\n const scrollToBottom = (): void => {\n if (captionsScrollDivRef.current) {\n captionsScrollDivRef.current.scrollTop = captionsScrollDivRef.current.scrollHeight;\n }\n };\n\n const handleScrollToTheBottom = useCallback((): void => {\n if (!captionsScrollDivRef.current) {\n return;\n }\n const atBottom =\n Math.ceil(captionsScrollDivRef.current.scrollTop) >=\n captionsScrollDivRef.current.scrollHeight - captionsScrollDivRef.current.clientHeight - SCROLL_OFFSET_ALLOWANCE;\n\n setIsAtBottomOfScroll(atBottom);\n }, []);\n\n useEffect(() => {\n const captionsScrollDiv = captionsScrollDivRef.current;\n captionsScrollDiv?.addEventListener('scroll', handleScrollToTheBottom);\n\n return () => {\n captionsScrollDiv?.removeEventListener('scroll', handleScrollToTheBottom);\n };\n }, [handleScrollToTheBottom, isCaptionsOn, /* @conditional-compile-remove(rtt) */ isRealTimeTextOn]);\n\n useEffect(() => {\n // only auto scroll to bottom is already is at bottom of scroll before new caption comes in\n if (isAtBottomOfScroll) {\n scrollToBottom();\n }\n }, [captions, /* @conditional-compile-remove(rtt) */ realTimeTexts, isAtBottomOfScroll]);\n /* @conditional-compile-remove(rtt) */\n const [textFieldValue, setTextFieldValue] = useState<string>('');\n /* @conditional-compile-remove(rtt) */\n useEffect(() => {\n // if the latest real time text sent by myself is final, clear the text field\n if (latestLocalRealTimeText && !latestLocalRealTimeText.isTyping) {\n setTextFieldValue('');\n }\n }, [latestLocalRealTimeText]);\n\n /* @conditional-compile-remove(rtt) */\n const handleKeyDown = (event: React.KeyboardEvent<HTMLInputElement | HTMLTextAreaElement>): void => {\n if (event.key === 'Enter') {\n event.preventDefault();\n if (textFieldValue && onSendRealTimeText) {\n onSendRealTimeText(textFieldValue, true);\n setTextFieldValue('');\n }\n }\n };\n\n /* @conditional-compile-remove(rtt) */\n const realTimeTextDisclosureBannerStrings = {\n bannerTitle: strings.realTimeTextBannerTitle ?? '',\n bannerContent: strings.realTimeTextBannerContent ?? '',\n bannerLinkLabel: strings.realTimeTextBannerLinkLabel ?? ''\n };\n\n const captionsTrampoline = (): JSX.Element => {\n /* @conditional-compile-remove(rtt) */\n return (\n <>\n {mergedCaptions\n .filter((caption) => caption)\n .map((caption) => {\n if ('message' in caption) {\n return (\n <li key={`RealTimeText - ${caption.id}`} className={captionContainerClassName} data-is-focusable={true}>\n <RealTimeText {...(caption as RealTimeTextInformation)} />\n </li>\n );\n }\n return (\n <li key={`Captions - ${caption.id}`} className={captionContainerClassName} data-is-focusable={true}>\n <_Caption {...(caption as CaptionsInformation)} onRenderAvatar={onRenderAvatar} />\n </li>\n );\n return <></>;\n })}\n </>\n );\n\n return (\n <>\n {captions.map((caption) => {\n return (\n <li key={caption.id} className={captionContainerClassName} data-is-focusable={true}>\n <_Caption {...(caption as CaptionsInformation)} onRenderAvatar={onRenderAvatar} />\n </li>\n );\n })}\n </>\n );\n };\n\n return (\n <>\n {(startCaptionsInProgress || isCaptionsOn || /* @conditional-compile-remove(rtt) */ isRealTimeTextOn) && (\n <FocusZone shouldFocusOnMount className={captionsContainerClassName} data-ui-id=\"captions-banner\">\n {\n /* @conditional-compile-remove(rtt) */ (isCaptionsOn || isRealTimeTextOn) && formFactor === 'compact' && (\n <Stack\n horizontal\n horizontalAlign=\"space-between\"\n verticalAlign=\"center\"\n className={bannerTitleContainerClassName}\n >\n <Text className={titleClassName}>{getTitle()}</Text>\n <IconButton\n data-ui-id=\"captions-banner-expand-icon\"\n iconProps={{ iconName: expandBannerHeight ? 'MinimizeIcon' : 'ExpandIcon' }}\n ariaLabel={expandBannerHeight ? strings.minimizeButtonAriaLabel : strings.expandButtonAriaLabel}\n onClick={() => setExpandBannerHeight(!expandBannerHeight)}\n styles={expandIconClassName(theme)}\n />\n </Stack>\n )\n }\n {(isCaptionsOn || /* @conditional-compile-remove(rtt) */ isRealTimeTextOn) && (\n <ul\n ref={captionsScrollDivRef}\n className={\n captionsOptions?.height === 'full'\n ? captionsBannerFullHeightClassName(theme)\n : captionsBannerClassName(formFactor, /* @conditional-compile-remove(rtt) */ expandBannerHeight)\n }\n data-ui-id=\"captions-banner-inner\"\n data-is-focusable={true}\n >\n {\n /* @conditional-compile-remove(rtt) */ isRealTimeTextOn && (\n <li>\n <Stack className={rttDisclosureBannerClassName()}>\n <_RTTDisclosureBanner strings={realTimeTextDisclosureBannerStrings} />\n </Stack>\n </li>\n )\n }\n {captionsTrampoline()}\n </ul>\n )}\n {\n /* @conditional-compile-remove(rtt) */ isRealTimeTextOn && onSendRealTimeText && (\n <TextField\n styles={realTimeTextInputBoxStyles(theme)}\n placeholder={strings.realTimeTextInputBoxDefaultText}\n value={textFieldValue}\n onKeyDown={handleKeyDown}\n onChange={(_, newValue) => {\n setTextFieldValue(newValue || '');\n onSendRealTimeText(newValue || '', false);\n }}\n maxLength={2000}\n errorMessage={textFieldValue.length >= 2000 ? strings.realTimeTextInputErrorMessage : undefined}\n />\n )\n }\n {!isCaptionsOn && /* @conditional-compile-remove(rtt) */ !isRealTimeTextOn && (\n <Stack\n verticalAlign=\"center\"\n styles={\n captionsOptions?.height === 'full'\n ? loadingBannerFullHeightStyles(theme)\n : loadingBannerStyles(formFactor)\n }\n data-is-focusable={true}\n >\n <Spinner label={strings?.captionsBannerSpinnerText} ariaLive=\"assertive\" labelPosition=\"right\" />\n </Stack>\n )}\n </FocusZone>\n )}\n </>\n );\n};\n"]}
@@ -1,6 +1,8 @@
1
1
  // Copyright (c) Microsoft Corporation.
2
2
  // Licensed under the MIT License.
3
3
  import React, { useCallback, useMemo, useRef, useState } from 'react';
4
+ /* @conditional-compile-remove(file-sharing-acs) */
5
+ import { useEffect } from 'react';
4
6
  import { RichTextInputBoxComponent } from './RichTextInputBoxComponent';
5
7
  import { Icon, Stack } from '@fluentui/react';
6
8
  import { useLocale } from '../../localization';
@@ -63,6 +65,12 @@ export const RichTextSendBox = (props) => {
63
65
  /* @conditional-compile-remove(file-sharing-acs) */
64
66
  const customV9Styles = useV9CustomStyles();
65
67
  const contentTooLongMessage = useMemo(() => (contentValueOverflow ? strings.textTooLong : undefined), [contentValueOverflow, strings.textTooLong]);
68
+ /* @conditional-compile-remove(file-sharing-acs) */
69
+ useEffect(() => {
70
+ if (!hasIncompleteAttachmentUploads(attachments)) {
71
+ setAttachmentUploadsPendingError(undefined);
72
+ }
73
+ }, [attachments]);
66
74
  const setContent = useCallback((newValue) => {
67
75
  if (newValue === undefined) {
68
76
  return;