@azure/communication-react 1.20.0-alpha-202410130017 → 1.20.0-alpha-202410170016
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/communication-react.d.ts +10 -10
- package/dist/dist-cjs/communication-react/{ChatMessageComponentAsRichTextEditBox-Cfp-l5FZ.js → ChatMessageComponentAsRichTextEditBox-Dg2BkrN6.js} +2 -2
- package/dist/dist-cjs/communication-react/{ChatMessageComponentAsRichTextEditBox-Cfp-l5FZ.js.map → ChatMessageComponentAsRichTextEditBox-Dg2BkrN6.js.map} +1 -1
- package/dist/dist-cjs/communication-react/{RichTextSendBoxWrapper-4qfX6tfT.js → RichTextSendBoxWrapper-D4pLWFtj.js} +2 -2
- package/dist/dist-cjs/communication-react/{RichTextSendBoxWrapper-4qfX6tfT.js.map → RichTextSendBoxWrapper-D4pLWFtj.js.map} +1 -1
- package/dist/dist-cjs/communication-react/{index-BzKaW_nR.js → index-BlNmEm_b.js} +225 -163
- package/dist/dist-cjs/communication-react/{index-BzKaW_nR.js.map → index-BlNmEm_b.js.map} +1 -1
- package/dist/dist-cjs/communication-react/index.js +1 -1
- package/dist/dist-esm/acs-ui-common/src/telemetryVersion.js +1 -1
- package/dist/dist-esm/acs-ui-common/src/telemetryVersion.js.map +1 -1
- package/dist/dist-esm/acs-ui-javascript-loaders/src/callCompositeLoader.d.ts +3 -2
- package/dist/dist-esm/acs-ui-javascript-loaders/src/callCompositeLoader.js +3 -5
- package/dist/dist-esm/acs-ui-javascript-loaders/src/callCompositeLoader.js.map +1 -1
- package/dist/dist-esm/acs-ui-javascript-loaders/src/callWithChatCompositeLoader.d.ts +3 -2
- package/dist/dist-esm/acs-ui-javascript-loaders/src/callWithChatCompositeLoader.js +3 -5
- package/dist/dist-esm/acs-ui-javascript-loaders/src/callWithChatCompositeLoader.js.map +1 -1
- package/dist/dist-esm/acs-ui-javascript-loaders/src/chatCompositeLoader.d.ts +3 -2
- package/dist/dist-esm/acs-ui-javascript-loaders/src/chatCompositeLoader.js +3 -5
- package/dist/dist-esm/acs-ui-javascript-loaders/src/chatCompositeLoader.js.map +1 -1
- package/dist/dist-esm/acs-ui-javascript-loaders/src/outboundCallCompositeLoader.d.ts +3 -2
- package/dist/dist-esm/acs-ui-javascript-loaders/src/outboundCallCompositeLoader.js +3 -4
- package/dist/dist-esm/acs-ui-javascript-loaders/src/outboundCallCompositeLoader.js.map +1 -1
- package/dist/dist-esm/chat-component-bindings/src/chatParticipantListSelector.js +10 -14
- package/dist/dist-esm/chat-component-bindings/src/chatParticipantListSelector.js.map +1 -1
- package/dist/dist-esm/chat-component-bindings/src/hooks/usePropsFor.js +2 -2
- package/dist/dist-esm/chat-component-bindings/src/hooks/usePropsFor.js.map +1 -1
- package/dist/dist-esm/chat-component-bindings/src/typingIndicatorSelector.js +2 -2
- package/dist/dist-esm/chat-component-bindings/src/typingIndicatorSelector.js.map +1 -1
- package/dist/dist-esm/chat-stateful-client/src/ChatContext.js +6 -8
- package/dist/dist-esm/chat-stateful-client/src/ChatContext.js.map +1 -1
- package/dist/dist-esm/chat-stateful-client/src/ResourceDownloadQueue.js +4 -3
- package/dist/dist-esm/chat-stateful-client/src/ResourceDownloadQueue.js.map +1 -1
- package/dist/dist-esm/react-components/src/components/VideoGallery/styles/FloatingLocalVideo.styles.js +1 -1
- package/dist/dist-esm/react-components/src/components/VideoGallery/styles/FloatingLocalVideo.styles.js.map +1 -1
- package/dist/dist-esm/react-composites/src/composites/CallComposite/CallComposite.js +14 -5
- package/dist/dist-esm/react-composites/src/composites/CallComposite/CallComposite.js.map +1 -1
- package/dist/dist-esm/react-composites/src/composites/CallComposite/adapter/AzureCommunicationCallAdapter.d.ts +2 -1
- package/dist/dist-esm/react-composites/src/composites/CallComposite/adapter/AzureCommunicationCallAdapter.js +39 -26
- package/dist/dist-esm/react-composites/src/composites/CallComposite/adapter/AzureCommunicationCallAdapter.js.map +1 -1
- package/dist/dist-esm/react-composites/src/composites/CallComposite/adapter/CallAdapter.d.ts +2 -2
- package/dist/dist-esm/react-composites/src/composites/CallComposite/adapter/CallAdapter.js.map +1 -1
- package/dist/dist-esm/react-composites/src/composites/CallComposite/adapter/CallingSoundSubscriber.d.ts +2 -2
- package/dist/dist-esm/react-composites/src/composites/CallComposite/adapter/CallingSoundSubscriber.js +8 -9
- package/dist/dist-esm/react-composites/src/composites/CallComposite/adapter/CallingSoundSubscriber.js.map +1 -1
- package/dist/dist-esm/react-composites/src/composites/CallComposite/adapter/OnFetchProfileCallback.js +9 -4
- package/dist/dist-esm/react-composites/src/composites/CallComposite/adapter/OnFetchProfileCallback.js.map +1 -1
- package/dist/dist-esm/react-composites/src/composites/CallComposite/components/CallReadinessModal.js +4 -4
- package/dist/dist-esm/react-composites/src/composites/CallComposite/components/CallReadinessModal.js.map +1 -1
- package/dist/dist-esm/react-composites/src/composites/CallComposite/components/LocalDeviceSettings.js +27 -8
- package/dist/dist-esm/react-composites/src/composites/CallComposite/components/LocalDeviceSettings.js.map +1 -1
- package/dist/dist-esm/react-composites/src/composites/CallComposite/components/NetworkReconnectTile.js +1 -1
- package/dist/dist-esm/react-composites/src/composites/CallComposite/components/NetworkReconnectTile.js.map +1 -1
- package/dist/dist-esm/react-composites/src/composites/CallComposite/components/SidePane/usePeoplePane.js +1 -1
- package/dist/dist-esm/react-composites/src/composites/CallComposite/components/SidePane/usePeoplePane.js.map +1 -1
- package/dist/dist-esm/react-composites/src/composites/CallComposite/hooks/useHandlers.js +1 -1
- package/dist/dist-esm/react-composites/src/composites/CallComposite/hooks/useHandlers.js.map +1 -1
- package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/TransferPage.js +3 -0
- package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/TransferPage.js.map +1 -1
- package/dist/dist-esm/react-composites/src/composites/CallComposite/selectors/dominantRemoteParticipantSelector.js +1 -1
- package/dist/dist-esm/react-composites/src/composites/CallComposite/selectors/dominantRemoteParticipantSelector.js.map +1 -1
- package/dist/dist-esm/react-composites/src/composites/CallComposite/selectors/localPreviewSelector.js +2 -1
- package/dist/dist-esm/react-composites/src/composites/CallComposite/selectors/localPreviewSelector.js.map +1 -1
- package/dist/dist-esm/react-composites/src/composites/CallComposite/utils/MediaGalleryUtils.js +10 -11
- package/dist/dist-esm/react-composites/src/composites/CallComposite/utils/MediaGalleryUtils.js.map +1 -1
- package/dist/dist-esm/react-composites/src/composites/CallComposite/utils/Utils.js +12 -8
- package/dist/dist-esm/react-composites/src/composites/CallComposite/utils/Utils.js.map +1 -1
- package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/AzureCommunicationCallWithChatAdapter.d.ts +2 -2
- package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/AzureCommunicationCallWithChatAdapter.js +1 -4
- package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/AzureCommunicationCallWithChatAdapter.js.map +1 -1
- package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/CallWithChatAdapter.d.ts +2 -2
- package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/CallWithChatAdapter.js.map +1 -1
- package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/CallWithChatBackedCallAdapter.d.ts +2 -2
- package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/CallWithChatBackedCallAdapter.js.map +1 -1
- package/dist/dist-esm/react-composites/src/composites/ChatComposite/ChatScreen.js +18 -19
- package/dist/dist-esm/react-composites/src/composites/ChatComposite/ChatScreen.js.map +1 -1
- package/dist/dist-esm/react-composites/src/composites/ChatComposite/ImageUpload/ImageUploadUtils.js +17 -5
- package/dist/dist-esm/react-composites/src/composites/ChatComposite/ImageUpload/ImageUploadUtils.js.map +1 -1
- package/dist/dist-esm/react-composites/src/composites/common/MeetingPhoneInfoPaneContent.js +1 -1
- package/dist/dist-esm/react-composites/src/composites/common/MeetingPhoneInfoPaneContent.js.map +1 -1
- package/dist/dist-esm/react-composites/src/composites/common/ModalLocalAndRemotePIP.js +5 -1
- package/dist/dist-esm/react-composites/src/composites/common/ModalLocalAndRemotePIP.js.map +1 -1
- package/dist/dist-esm/react-composites/src/composites/localization/locales/ar-SA/strings.json +2 -1
- package/dist/dist-esm/react-composites/src/composites/localization/locales/cs-CZ/strings.json +2 -1
- package/dist/dist-esm/react-composites/src/composites/localization/locales/cy-GB/strings.json +2 -1
- package/dist/dist-esm/react-composites/src/composites/localization/locales/de-DE/strings.json +2 -1
- package/dist/dist-esm/react-composites/src/composites/localization/locales/en-GB/strings.json +2 -1
- package/dist/dist-esm/react-composites/src/composites/localization/locales/es-ES/strings.json +2 -1
- package/dist/dist-esm/react-composites/src/composites/localization/locales/fi-FI/strings.json +2 -1
- package/dist/dist-esm/react-composites/src/composites/localization/locales/fr-FR/strings.json +2 -1
- package/dist/dist-esm/react-composites/src/composites/localization/locales/he-IL/strings.json +2 -1
- package/dist/dist-esm/react-composites/src/composites/localization/locales/it-IT/strings.json +2 -1
- package/dist/dist-esm/react-composites/src/composites/localization/locales/ja-JP/strings.json +2 -1
- package/dist/dist-esm/react-composites/src/composites/localization/locales/ko-KR/strings.json +1 -0
- package/dist/dist-esm/react-composites/src/composites/localization/locales/nb-NO/strings.json +2 -1
- package/dist/dist-esm/react-composites/src/composites/localization/locales/nl-NL/strings.json +2 -1
- package/dist/dist-esm/react-composites/src/composites/localization/locales/pl-PL/strings.json +2 -1
- package/dist/dist-esm/react-composites/src/composites/localization/locales/pt-BR/strings.json +2 -1
- package/dist/dist-esm/react-composites/src/composites/localization/locales/ru-RU/strings.json +2 -1
- package/dist/dist-esm/react-composites/src/composites/localization/locales/sv-SE/strings.json +2 -1
- package/dist/dist-esm/react-composites/src/composites/localization/locales/tr-TR/strings.json +2 -1
- package/dist/dist-esm/react-composites/src/composites/localization/locales/zh-CN/strings.json +2 -1
- package/dist/dist-esm/react-composites/src/composites/localization/locales/zh-TW/strings.json +2 -1
- package/package.json +2 -2
- package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/parseTeamsUrl.d.ts +0 -8
- package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/parseTeamsUrl.js +0 -25
- package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/parseTeamsUrl.js.map +0 -1
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"CallWithChatBackedCallAdapter.js","sourceRoot":"","sources":["../../../../../../../../react-composites/src/composites/CallWithChatComposite/adapter/CallWithChatBackedCallAdapter.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { CallWithChatAdapter } from './CallWithChatAdapter';\nimport { CallAdapter, CallAdapterState } from '../../CallComposite';\n\nimport { VideoBackgroundImage, VideoBackgroundEffect } from '../../CallComposite';\nimport { CreateVideoStreamViewResult, VideoStreamOptions } from '@internal/react-components';\nimport {\n AudioDeviceInfo,\n VideoDeviceInfo,\n Call,\n PermissionConstraints,\n StartCallOptions\n} from '@azure/communication-calling';\nimport { Reaction } from '@azure/communication-calling';\nimport { AddPhoneNumberOptions } from '@azure/communication-calling';\nimport { DtmfTone } from '@azure/communication-calling';\nimport { CallWithChatAdapterState } from '../state/CallWithChatAdapterState';\nimport { CommunicationIdentifier, isPhoneNumberIdentifier, PhoneNumberIdentifier } from '@azure/communication-common';\nimport { CommunicationUserIdentifier } from '@azure/communication-common';\nimport { _toCommunicationIdentifier } from '@internal/acs-ui-common';\nimport {\n JoinCallOptions,\n StartCallIdentifier,\n StartCaptionsAdapterOptions,\n StopCaptionsAdapterOptions\n} from '../../CallComposite/adapter/CallAdapter';\nimport { CallSurvey, CallSurveyResponse } from '@azure/communication-calling';\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\n\n/**\n * Facade around the CallWithChatAdapter to satisfy the call adapter interface.\n *\n * @private\n */\nexport class CallWithChatBackedCallAdapter implements CallAdapter {\n private callWithChatAdapter: CallWithChatAdapter;\n\n // For onStateChange we must convert CallWithChat state to chat state. This involves creating a new handler to be passed into the onStateChange.\n // In order to unsubscribe the handler when offStateChange is called we must have a mapping of the original handler to the newly created handler.\n private eventStore: Map<(state: CallAdapterState) => void, (state: CallWithChatAdapterState) => void> = new Map();\n\n constructor(callWithChatAdapter: CallWithChatAdapter) {\n this.callWithChatAdapter = callWithChatAdapter;\n }\n\n public on = (event: any, listener: any): void => {\n switch (event) {\n case 'error':\n return this.callWithChatAdapter.on('callError', listener);\n case 'participantsJoined':\n return this.callWithChatAdapter.on('callParticipantsJoined', listener);\n case 'participantsLeft':\n return this.callWithChatAdapter.on('callParticipantsLeft', listener);\n default:\n return this.callWithChatAdapter.on(event, listener);\n }\n };\n public off = (event: any, listener: any): void => {\n switch (event) {\n case 'error':\n return this.callWithChatAdapter.off('callError', listener);\n case 'participantsJoined':\n return this.callWithChatAdapter.off('callParticipantsJoined', listener);\n case 'participantsLeft':\n return this.callWithChatAdapter.off('callParticipantsLeft', listener);\n default:\n return this.callWithChatAdapter.off(event, listener);\n }\n };\n public onStateChange = (handler: (state: CallAdapterState) => void): void => {\n const convertedHandler = (state: CallWithChatAdapterState): void => {\n handler(callAdapterStateFromCallWithChatAdapterState(state));\n };\n this.callWithChatAdapter.onStateChange(convertedHandler);\n this.eventStore.set(handler, convertedHandler);\n };\n public offStateChange = (handler: (state: CallAdapterState) => void): void => {\n const convertedHandler = this.eventStore.get(handler);\n convertedHandler && this.callWithChatAdapter.offStateChange(convertedHandler);\n };\n public getState = (): CallAdapterState =>\n callAdapterStateFromCallWithChatAdapterState(this.callWithChatAdapter.getState());\n public dispose = (): void => this.callWithChatAdapter.dispose();\n public joinCall = (options?: boolean | JoinCallOptions): Call | undefined => {\n if (typeof options === 'boolean') {\n return this.callWithChatAdapter.joinCall(options);\n } else {\n return this.callWithChatAdapter.joinCall(options);\n }\n };\n public leaveCall = async (forEveryone?: boolean): Promise<void> =>\n await this.callWithChatAdapter.leaveCall(forEveryone);\n\n public startCall = (participants: (string | StartCallIdentifier)[], options: StartCallOptions): Call | undefined => {\n if (participants.every((participant: string | StartCallIdentifier) => typeof participant === 'string')) {\n return this.callWithChatAdapter.startCall(participants as string[], options);\n } else {\n return this.callWithChatAdapter.startCall(participants as StartCallIdentifier[], options);\n }\n };\n public setCamera = async (sourceId: VideoDeviceInfo, options?: VideoStreamOptions): Promise<void> =>\n await this.callWithChatAdapter.setCamera(sourceId, options);\n public setMicrophone = async (sourceId: AudioDeviceInfo): Promise<void> =>\n await this.callWithChatAdapter.setMicrophone(sourceId);\n public setSpeaker = async (sourceId: AudioDeviceInfo): Promise<void> =>\n await this.callWithChatAdapter.setSpeaker(sourceId);\n public askDevicePermission = async (constraints: PermissionConstraints): Promise<void> =>\n await this.callWithChatAdapter.askDevicePermission(constraints);\n public queryCameras = async (): Promise<VideoDeviceInfo[]> => await this.callWithChatAdapter.queryCameras();\n public queryMicrophones = async (): Promise<AudioDeviceInfo[]> => await this.callWithChatAdapter.queryMicrophones();\n public querySpeakers = async (): Promise<AudioDeviceInfo[]> => await this.callWithChatAdapter.querySpeakers();\n public startCamera = async (options?: VideoStreamOptions): Promise<void> =>\n await this.callWithChatAdapter.startCamera(options);\n public stopCamera = async (): Promise<void> => await this.callWithChatAdapter.stopCamera();\n public mute = async (): Promise<void> => await this.callWithChatAdapter.mute();\n public unmute = async (): Promise<void> => await this.callWithChatAdapter.unmute();\n public startScreenShare = async (): Promise<void> => await this.callWithChatAdapter.startScreenShare();\n public stopScreenShare = async (): Promise<void> => await this.callWithChatAdapter.stopScreenShare();\n public raiseHand = async (): Promise<void> => await this.callWithChatAdapter.raiseHand();\n public lowerHand = async (): Promise<void> => await this.callWithChatAdapter.lowerHand();\n public onReactionClick = async (reaction: Reaction): Promise<void> =>\n await this.callWithChatAdapter.onReactionClick(reaction);\n public removeParticipant = async (userId: string | CommunicationIdentifier): Promise<void> => {\n let participant = userId;\n participant = _toCommunicationIdentifier(userId);\n await this.callWithChatAdapter.removeParticipant(participant);\n };\n public createStreamView = async (\n remoteUserId?: string,\n options?: VideoStreamOptions\n ): Promise<void | CreateVideoStreamViewResult> =>\n await this.callWithChatAdapter.createStreamView(remoteUserId, options);\n public disposeStreamView = async (remoteUserId?: string, options?: VideoStreamOptions): Promise<void> =>\n await this.callWithChatAdapter.disposeStreamView(remoteUserId, options);\n public disposeScreenShareStreamView(remoteUserId: string): Promise<void> {\n return this.callWithChatAdapter.disposeScreenShareStreamView(remoteUserId);\n }\n public disposeRemoteVideoStreamView(remoteUserId: string): Promise<void> {\n return this.callWithChatAdapter.disposeRemoteVideoStreamView(remoteUserId);\n }\n public disposeLocalVideoStreamView(): Promise<void> {\n return this.callWithChatAdapter.disposeLocalVideoStreamView();\n }\n public holdCall = async (): Promise<void> => {\n await this.callWithChatAdapter.holdCall();\n };\n public resumeCall = async (): Promise<void> => {\n await this.callWithChatAdapter.resumeCall();\n };\n public async addParticipant(participant: PhoneNumberIdentifier, options?: AddPhoneNumberOptions): Promise<void>;\n public async addParticipant(participant: CommunicationUserIdentifier): Promise<void>;\n public async addParticipant(\n participant: PhoneNumberIdentifier | CommunicationUserIdentifier,\n options?: AddPhoneNumberOptions\n ): Promise<void> {\n if (isPhoneNumberIdentifier(participant) && options) {\n return this.callWithChatAdapter.addParticipant(participant as PhoneNumberIdentifier, options);\n } else {\n return this.callWithChatAdapter.addParticipant(participant as CommunicationUserIdentifier);\n }\n }\n\n /* @conditional-compile-remove(unsupported-browser) */\n public allowUnsupportedBrowserVersion(): void {\n return this.callWithChatAdapter.allowUnsupportedBrowserVersion();\n }\n\n public sendDtmfTone = async (dtmfTone: DtmfTone): Promise<void> => {\n await this.callWithChatAdapter.sendDtmfTone(dtmfTone);\n };\n\n public async startCaptions(options?: StartCaptionsAdapterOptions): Promise<void> {\n await this.callWithChatAdapter.startCaptions(options);\n }\n\n public async stopCaptions(options?: StopCaptionsAdapterOptions): Promise<void> {\n await this.callWithChatAdapter.stopCaptions(options);\n }\n\n public async setCaptionLanguage(language: string): Promise<void> {\n await this.callWithChatAdapter.setCaptionLanguage(language);\n }\n\n public async setSpokenLanguage(language: string): Promise<void> {\n await this.callWithChatAdapter.setSpokenLanguage(language);\n }\n\n public async startVideoBackgroundEffect(videoBackgroundEffect: VideoBackgroundEffect): Promise<void> {\n await this.callWithChatAdapter.startVideoBackgroundEffect(videoBackgroundEffect);\n }\n\n public async stopVideoBackgroundEffects(): Promise<void> {\n await this.callWithChatAdapter.stopVideoBackgroundEffects();\n }\n\n public updateBackgroundPickerImages(backgroundImages: VideoBackgroundImage[]): void {\n return this.callWithChatAdapter.updateBackgroundPickerImages(backgroundImages);\n }\n\n public updateSelectedVideoBackgroundEffect(selectedVideoBackground: VideoBackgroundEffect): void {\n return this.callWithChatAdapter.updateSelectedVideoBackgroundEffect(selectedVideoBackground);\n }\n\n /* @conditional-compile-remove(DNS) */\n public async startNoiseSuppressionEffect(): Promise<void> {\n return this.callWithChatAdapter.startNoiseSuppressionEffect();\n }\n\n /* @conditional-compile-remove(DNS) */\n public async stopNoiseSuppressionEffect(): Promise<void> {\n return this.callWithChatAdapter.stopNoiseSuppressionEffect();\n }\n\n public async submitSurvey(survey: CallSurvey): Promise<CallSurveyResponse | undefined> {\n return this.callWithChatAdapter.submitSurvey(survey);\n }\n\n public async startSpotlight(userIds?: string[]): Promise<void> {\n return this.callWithChatAdapter.startSpotlight(userIds);\n }\n\n public async stopSpotlight(userIds?: string[]): Promise<void> {\n return this.callWithChatAdapter.stopSpotlight(userIds);\n }\n\n public async stopAllSpotlight(): Promise<void> {\n return this.callWithChatAdapter.stopAllSpotlight();\n }\n\n /* @conditional-compile-remove(soft-mute) */\n public async muteParticipant(userId: string): Promise<void> {\n return this.callWithChatAdapter.muteParticipant(userId);\n }\n\n /* @conditional-compile-remove(soft-mute) */\n public async muteAllRemoteParticipants(): Promise<void> {\n return this.callWithChatAdapter.muteAllRemoteParticipants();\n }\n\n /* @conditional-compile-remove(breakout-rooms) */\n public async returnFromBreakoutRoom(): Promise<void> {\n return this.callWithChatAdapter.returnFromBreakoutRoom();\n }\n}\n\nfunction callAdapterStateFromCallWithChatAdapterState(\n callWithChatAdapterState: CallWithChatAdapterState\n): CallAdapterState {\n return {\n isLocalPreviewMicrophoneEnabled: callWithChatAdapterState.isLocalPreviewMicrophoneEnabled,\n page: callWithChatAdapterState.page,\n userId: callWithChatAdapterState.userId,\n displayName: callWithChatAdapterState.displayName,\n call: callWithChatAdapterState.call,\n devices: callWithChatAdapterState.devices,\n isTeamsCall: callWithChatAdapterState.isTeamsCall,\n isTeamsMeeting: callWithChatAdapterState.isTeamsMeeting,\n isRoomsCall: false,\n latestErrors: callWithChatAdapterState.latestCallErrors,\n /* @conditional-compile-remove(breakout-rooms) */\n latestNotifications: callWithChatAdapterState.latestCallNotifications,\n alternateCallerId: callWithChatAdapterState.alternateCallerId,\n /* @conditional-compile-remove(unsupported-browser) */\n environmentInfo: callWithChatAdapterState.environmentInfo,\n\n videoBackgroundImages: callWithChatAdapterState.videoBackgroundImages,\n\n onResolveVideoEffectDependency: callWithChatAdapterState.onResolveVideoEffectDependency,\n /* @conditional-compile-remove(DNS) */\n onResolveDeepNoiseSuppressionDependency: callWithChatAdapterState.onResolveDeepNoiseSuppressionDependency,\n /* @conditional-compile-remove(DNS) */\n deepNoiseSuppressionOnByDefault: callWithChatAdapterState.deepNoiseSuppressionOnByDefault,\n /* @conditional-compile-remove(DNS) */\n hideDeepNoiseSuppressionButton: callWithChatAdapterState.hideDeepNoiseSuppressionButton,\n selectedVideoBackgroundEffect: callWithChatAdapterState.selectedVideoBackgroundEffect,\n reactions: callWithChatAdapterState.reactions\n };\n}\n"]}
|
1
|
+
{"version":3,"file":"CallWithChatBackedCallAdapter.js","sourceRoot":"","sources":["../../../../../../../../react-composites/src/composites/CallWithChatComposite/adapter/CallWithChatBackedCallAdapter.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { CallWithChatAdapter } from './CallWithChatAdapter';\nimport { CallAdapter, CallAdapterState } from '../../CallComposite';\n\nimport { VideoBackgroundImage, VideoBackgroundEffect } from '../../CallComposite';\nimport { CreateVideoStreamViewResult, VideoStreamOptions } from '@internal/react-components';\nimport {\n AudioDeviceInfo,\n VideoDeviceInfo,\n Call,\n PermissionConstraints,\n StartCallOptions,\n DeviceAccess\n} from '@azure/communication-calling';\nimport { Reaction } from '@azure/communication-calling';\nimport { AddPhoneNumberOptions } from '@azure/communication-calling';\nimport { DtmfTone } from '@azure/communication-calling';\nimport { CallWithChatAdapterState } from '../state/CallWithChatAdapterState';\nimport { CommunicationIdentifier, isPhoneNumberIdentifier, PhoneNumberIdentifier } from '@azure/communication-common';\nimport { CommunicationUserIdentifier } from '@azure/communication-common';\nimport { _toCommunicationIdentifier } from '@internal/acs-ui-common';\nimport {\n JoinCallOptions,\n StartCallIdentifier,\n StartCaptionsAdapterOptions,\n StopCaptionsAdapterOptions\n} from '../../CallComposite/adapter/CallAdapter';\nimport { CallSurvey, CallSurveyResponse } from '@azure/communication-calling';\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\n\n/**\n * Facade around the CallWithChatAdapter to satisfy the call adapter interface.\n *\n * @private\n */\nexport class CallWithChatBackedCallAdapter implements CallAdapter {\n private callWithChatAdapter: CallWithChatAdapter;\n\n // For onStateChange we must convert CallWithChat state to chat state. This involves creating a new handler to be passed into the onStateChange.\n // In order to unsubscribe the handler when offStateChange is called we must have a mapping of the original handler to the newly created handler.\n private eventStore: Map<(state: CallAdapterState) => void, (state: CallWithChatAdapterState) => void> = new Map();\n\n constructor(callWithChatAdapter: CallWithChatAdapter) {\n this.callWithChatAdapter = callWithChatAdapter;\n }\n\n public on = (event: any, listener: any): void => {\n switch (event) {\n case 'error':\n return this.callWithChatAdapter.on('callError', listener);\n case 'participantsJoined':\n return this.callWithChatAdapter.on('callParticipantsJoined', listener);\n case 'participantsLeft':\n return this.callWithChatAdapter.on('callParticipantsLeft', listener);\n default:\n return this.callWithChatAdapter.on(event, listener);\n }\n };\n public off = (event: any, listener: any): void => {\n switch (event) {\n case 'error':\n return this.callWithChatAdapter.off('callError', listener);\n case 'participantsJoined':\n return this.callWithChatAdapter.off('callParticipantsJoined', listener);\n case 'participantsLeft':\n return this.callWithChatAdapter.off('callParticipantsLeft', listener);\n default:\n return this.callWithChatAdapter.off(event, listener);\n }\n };\n public onStateChange = (handler: (state: CallAdapterState) => void): void => {\n const convertedHandler = (state: CallWithChatAdapterState): void => {\n handler(callAdapterStateFromCallWithChatAdapterState(state));\n };\n this.callWithChatAdapter.onStateChange(convertedHandler);\n this.eventStore.set(handler, convertedHandler);\n };\n public offStateChange = (handler: (state: CallAdapterState) => void): void => {\n const convertedHandler = this.eventStore.get(handler);\n convertedHandler && this.callWithChatAdapter.offStateChange(convertedHandler);\n };\n public getState = (): CallAdapterState =>\n callAdapterStateFromCallWithChatAdapterState(this.callWithChatAdapter.getState());\n public dispose = (): void => this.callWithChatAdapter.dispose();\n public joinCall = (options?: boolean | JoinCallOptions): Call | undefined => {\n if (typeof options === 'boolean') {\n return this.callWithChatAdapter.joinCall(options);\n } else {\n return this.callWithChatAdapter.joinCall(options);\n }\n };\n public leaveCall = async (forEveryone?: boolean): Promise<void> =>\n await this.callWithChatAdapter.leaveCall(forEveryone);\n\n public startCall = (participants: (string | StartCallIdentifier)[], options: StartCallOptions): Call | undefined => {\n if (participants.every((participant: string | StartCallIdentifier) => typeof participant === 'string')) {\n return this.callWithChatAdapter.startCall(participants as string[], options);\n } else {\n return this.callWithChatAdapter.startCall(participants as StartCallIdentifier[], options);\n }\n };\n public setCamera = async (sourceId: VideoDeviceInfo, options?: VideoStreamOptions): Promise<void> =>\n await this.callWithChatAdapter.setCamera(sourceId, options);\n public setMicrophone = async (sourceId: AudioDeviceInfo): Promise<void> =>\n await this.callWithChatAdapter.setMicrophone(sourceId);\n public setSpeaker = async (sourceId: AudioDeviceInfo): Promise<void> =>\n await this.callWithChatAdapter.setSpeaker(sourceId);\n public askDevicePermission = async (constraints: PermissionConstraints): Promise<DeviceAccess> =>\n await this.callWithChatAdapter.askDevicePermission(constraints);\n public queryCameras = async (): Promise<VideoDeviceInfo[]> => await this.callWithChatAdapter.queryCameras();\n public queryMicrophones = async (): Promise<AudioDeviceInfo[]> => await this.callWithChatAdapter.queryMicrophones();\n public querySpeakers = async (): Promise<AudioDeviceInfo[]> => await this.callWithChatAdapter.querySpeakers();\n public startCamera = async (options?: VideoStreamOptions): Promise<void> =>\n await this.callWithChatAdapter.startCamera(options);\n public stopCamera = async (): Promise<void> => await this.callWithChatAdapter.stopCamera();\n public mute = async (): Promise<void> => await this.callWithChatAdapter.mute();\n public unmute = async (): Promise<void> => await this.callWithChatAdapter.unmute();\n public startScreenShare = async (): Promise<void> => await this.callWithChatAdapter.startScreenShare();\n public stopScreenShare = async (): Promise<void> => await this.callWithChatAdapter.stopScreenShare();\n public raiseHand = async (): Promise<void> => await this.callWithChatAdapter.raiseHand();\n public lowerHand = async (): Promise<void> => await this.callWithChatAdapter.lowerHand();\n public onReactionClick = async (reaction: Reaction): Promise<void> =>\n await this.callWithChatAdapter.onReactionClick(reaction);\n public removeParticipant = async (userId: string | CommunicationIdentifier): Promise<void> => {\n let participant = userId;\n participant = _toCommunicationIdentifier(userId);\n await this.callWithChatAdapter.removeParticipant(participant);\n };\n public createStreamView = async (\n remoteUserId?: string,\n options?: VideoStreamOptions\n ): Promise<void | CreateVideoStreamViewResult> =>\n await this.callWithChatAdapter.createStreamView(remoteUserId, options);\n public disposeStreamView = async (remoteUserId?: string, options?: VideoStreamOptions): Promise<void> =>\n await this.callWithChatAdapter.disposeStreamView(remoteUserId, options);\n public disposeScreenShareStreamView(remoteUserId: string): Promise<void> {\n return this.callWithChatAdapter.disposeScreenShareStreamView(remoteUserId);\n }\n public disposeRemoteVideoStreamView(remoteUserId: string): Promise<void> {\n return this.callWithChatAdapter.disposeRemoteVideoStreamView(remoteUserId);\n }\n public disposeLocalVideoStreamView(): Promise<void> {\n return this.callWithChatAdapter.disposeLocalVideoStreamView();\n }\n public holdCall = async (): Promise<void> => {\n await this.callWithChatAdapter.holdCall();\n };\n public resumeCall = async (): Promise<void> => {\n await this.callWithChatAdapter.resumeCall();\n };\n public async addParticipant(participant: PhoneNumberIdentifier, options?: AddPhoneNumberOptions): Promise<void>;\n public async addParticipant(participant: CommunicationUserIdentifier): Promise<void>;\n public async addParticipant(\n participant: PhoneNumberIdentifier | CommunicationUserIdentifier,\n options?: AddPhoneNumberOptions\n ): Promise<void> {\n if (isPhoneNumberIdentifier(participant) && options) {\n return this.callWithChatAdapter.addParticipant(participant as PhoneNumberIdentifier, options);\n } else {\n return this.callWithChatAdapter.addParticipant(participant as CommunicationUserIdentifier);\n }\n }\n\n /* @conditional-compile-remove(unsupported-browser) */\n public allowUnsupportedBrowserVersion(): void {\n return this.callWithChatAdapter.allowUnsupportedBrowserVersion();\n }\n\n public sendDtmfTone = async (dtmfTone: DtmfTone): Promise<void> => {\n await this.callWithChatAdapter.sendDtmfTone(dtmfTone);\n };\n\n public async startCaptions(options?: StartCaptionsAdapterOptions): Promise<void> {\n await this.callWithChatAdapter.startCaptions(options);\n }\n\n public async stopCaptions(options?: StopCaptionsAdapterOptions): Promise<void> {\n await this.callWithChatAdapter.stopCaptions(options);\n }\n\n public async setCaptionLanguage(language: string): Promise<void> {\n await this.callWithChatAdapter.setCaptionLanguage(language);\n }\n\n public async setSpokenLanguage(language: string): Promise<void> {\n await this.callWithChatAdapter.setSpokenLanguage(language);\n }\n\n public async startVideoBackgroundEffect(videoBackgroundEffect: VideoBackgroundEffect): Promise<void> {\n await this.callWithChatAdapter.startVideoBackgroundEffect(videoBackgroundEffect);\n }\n\n public async stopVideoBackgroundEffects(): Promise<void> {\n await this.callWithChatAdapter.stopVideoBackgroundEffects();\n }\n\n public updateBackgroundPickerImages(backgroundImages: VideoBackgroundImage[]): void {\n return this.callWithChatAdapter.updateBackgroundPickerImages(backgroundImages);\n }\n\n public updateSelectedVideoBackgroundEffect(selectedVideoBackground: VideoBackgroundEffect): void {\n return this.callWithChatAdapter.updateSelectedVideoBackgroundEffect(selectedVideoBackground);\n }\n\n /* @conditional-compile-remove(DNS) */\n public async startNoiseSuppressionEffect(): Promise<void> {\n return this.callWithChatAdapter.startNoiseSuppressionEffect();\n }\n\n /* @conditional-compile-remove(DNS) */\n public async stopNoiseSuppressionEffect(): Promise<void> {\n return this.callWithChatAdapter.stopNoiseSuppressionEffect();\n }\n\n public async submitSurvey(survey: CallSurvey): Promise<CallSurveyResponse | undefined> {\n return this.callWithChatAdapter.submitSurvey(survey);\n }\n\n public async startSpotlight(userIds?: string[]): Promise<void> {\n return this.callWithChatAdapter.startSpotlight(userIds);\n }\n\n public async stopSpotlight(userIds?: string[]): Promise<void> {\n return this.callWithChatAdapter.stopSpotlight(userIds);\n }\n\n public async stopAllSpotlight(): Promise<void> {\n return this.callWithChatAdapter.stopAllSpotlight();\n }\n\n /* @conditional-compile-remove(soft-mute) */\n public async muteParticipant(userId: string): Promise<void> {\n return this.callWithChatAdapter.muteParticipant(userId);\n }\n\n /* @conditional-compile-remove(soft-mute) */\n public async muteAllRemoteParticipants(): Promise<void> {\n return this.callWithChatAdapter.muteAllRemoteParticipants();\n }\n\n /* @conditional-compile-remove(breakout-rooms) */\n public async returnFromBreakoutRoom(): Promise<void> {\n return this.callWithChatAdapter.returnFromBreakoutRoom();\n }\n}\n\nfunction callAdapterStateFromCallWithChatAdapterState(\n callWithChatAdapterState: CallWithChatAdapterState\n): CallAdapterState {\n return {\n isLocalPreviewMicrophoneEnabled: callWithChatAdapterState.isLocalPreviewMicrophoneEnabled,\n page: callWithChatAdapterState.page,\n userId: callWithChatAdapterState.userId,\n displayName: callWithChatAdapterState.displayName,\n call: callWithChatAdapterState.call,\n devices: callWithChatAdapterState.devices,\n isTeamsCall: callWithChatAdapterState.isTeamsCall,\n isTeamsMeeting: callWithChatAdapterState.isTeamsMeeting,\n isRoomsCall: false,\n latestErrors: callWithChatAdapterState.latestCallErrors,\n /* @conditional-compile-remove(breakout-rooms) */\n latestNotifications: callWithChatAdapterState.latestCallNotifications,\n alternateCallerId: callWithChatAdapterState.alternateCallerId,\n /* @conditional-compile-remove(unsupported-browser) */\n environmentInfo: callWithChatAdapterState.environmentInfo,\n\n videoBackgroundImages: callWithChatAdapterState.videoBackgroundImages,\n\n onResolveVideoEffectDependency: callWithChatAdapterState.onResolveVideoEffectDependency,\n /* @conditional-compile-remove(DNS) */\n onResolveDeepNoiseSuppressionDependency: callWithChatAdapterState.onResolveDeepNoiseSuppressionDependency,\n /* @conditional-compile-remove(DNS) */\n deepNoiseSuppressionOnByDefault: callWithChatAdapterState.deepNoiseSuppressionOnByDefault,\n /* @conditional-compile-remove(DNS) */\n hideDeepNoiseSuppressionButton: callWithChatAdapterState.hideDeepNoiseSuppressionButton,\n selectedVideoBackgroundEffect: callWithChatAdapterState.selectedVideoBackgroundEffect,\n reactions: callWithChatAdapterState.reactions\n };\n}\n"]}
|
@@ -113,6 +113,7 @@ export const ChatScreen = (props) => {
|
|
113
113
|
overlayImageItemRef.current = overlayImageItem;
|
114
114
|
const adapterChatMessages = useSelector(getChatMessages);
|
115
115
|
useEffect(() => {
|
116
|
+
var _a;
|
116
117
|
if (overlayImageItemRef.current === undefined) {
|
117
118
|
return;
|
118
119
|
}
|
@@ -120,11 +121,9 @@ export const ChatScreen = (props) => {
|
|
120
121
|
if (message === undefined) {
|
121
122
|
return;
|
122
123
|
}
|
123
|
-
const
|
124
|
-
if (overlayImageItemRef.current.imageSrc === '' &&
|
125
|
-
|
126
|
-
resourceCache[overlayImageItemRef.current.imageUrl]) {
|
127
|
-
const fullSizeImageSrc = getResourceSourceUrl(resourceCache[overlayImageItemRef.current.imageUrl]);
|
124
|
+
const resourceFetchResult = (_a = message.resourceCache) === null || _a === void 0 ? void 0 : _a[overlayImageItemRef.current.imageUrl];
|
125
|
+
if (overlayImageItemRef.current.imageSrc === '' && resourceFetchResult) {
|
126
|
+
const fullSizeImageSrc = getResourceSourceUrl(resourceFetchResult);
|
128
127
|
if (fullSizeImageSrc === undefined ||
|
129
128
|
fullSizeImageSrc === '' ||
|
130
129
|
overlayImageItemRef.current.imageSrc === fullSizeImageSrc) {
|
@@ -222,20 +221,20 @@ export const ChatScreen = (props) => {
|
|
222
221
|
}, [(_b = attachmentOptions === null || attachmentOptions === void 0 ? void 0 : attachmentOptions.downloadOptions) === null || _b === void 0 ? void 0 : _b.actionsForAttachment]);
|
223
222
|
const threadId = useSelector(getThreadId);
|
224
223
|
const onInlineImageClicked = useCallback((attachmentId, messageId) => {
|
225
|
-
var _a, _b;
|
224
|
+
var _a, _b, _c;
|
226
225
|
const message = adapterChatMessages[messageId];
|
227
|
-
const inlinedImages = (_b = (_a = message.content) === null || _a === void 0 ? void 0 : _a.attachments) === null || _b === void 0 ? void 0 : _b.filter((attachment) => {
|
226
|
+
const inlinedImages = (_b = (_a = message === null || message === void 0 ? void 0 : message.content) === null || _a === void 0 ? void 0 : _a.attachments) === null || _b === void 0 ? void 0 : _b.filter((attachment) => {
|
228
227
|
return attachment.attachmentType === 'image' && attachment.id === attachmentId;
|
229
228
|
});
|
230
|
-
|
229
|
+
const attachment = inlinedImages === null || inlinedImages === void 0 ? void 0 : inlinedImages[0];
|
230
|
+
if (!attachment) {
|
231
231
|
return;
|
232
232
|
}
|
233
|
-
const attachment = inlinedImages[0];
|
234
|
-
const resourceCache = message.resourceCache;
|
235
233
|
let imageSrc = '';
|
236
234
|
if (attachment.url) {
|
237
|
-
|
238
|
-
|
235
|
+
const resourceFetchResult = (_c = message === null || message === void 0 ? void 0 : message.resourceCache) === null || _c === void 0 ? void 0 : _c[attachment.url];
|
236
|
+
if (resourceFetchResult) {
|
237
|
+
imageSrc = getResourceSourceUrl(resourceFetchResult);
|
239
238
|
}
|
240
239
|
else {
|
241
240
|
adapter.downloadResourceToCache({
|
@@ -246,15 +245,15 @@ export const ChatScreen = (props) => {
|
|
246
245
|
}
|
247
246
|
}
|
248
247
|
const titleIconRenderOptions = {
|
249
|
-
text: message.senderDisplayName,
|
248
|
+
text: message === null || message === void 0 ? void 0 : message.senderDisplayName,
|
250
249
|
size: PersonaSize.size32,
|
251
250
|
showOverflowTooltip: false,
|
252
|
-
imageAlt: message.senderDisplayName
|
251
|
+
imageAlt: message === null || message === void 0 ? void 0 : message.senderDisplayName
|
253
252
|
};
|
254
|
-
const messageSenderId = message.sender !== undefined ? toFlatCommunicationIdentifier(message.sender) : userId;
|
253
|
+
const messageSenderId = (message === null || message === void 0 ? void 0 : message.sender) !== undefined ? toFlatCommunicationIdentifier(message.sender) : userId;
|
255
254
|
const titleIcon = onRenderAvatarCallback && onRenderAvatarCallback(messageSenderId, titleIconRenderOptions);
|
256
255
|
const overlayImage = {
|
257
|
-
title: message.senderDisplayName || '',
|
256
|
+
title: (message === null || message === void 0 ? void 0 : message.senderDisplayName) || '',
|
258
257
|
titleIcon: titleIcon,
|
259
258
|
attachmentId: attachment.id,
|
260
259
|
imageSrc: imageSrc,
|
@@ -265,18 +264,18 @@ export const ChatScreen = (props) => {
|
|
265
264
|
setOverlayImageItem(overlayImage);
|
266
265
|
}, [adapter, adapterChatMessages, onRenderAvatarCallback, userId, threadId]);
|
267
266
|
const onRenderInlineImage = useCallback((inlineImage, defaultOnRender) => {
|
268
|
-
var _a, _b;
|
267
|
+
var _a, _b, _c;
|
269
268
|
const message = adapterChatMessages[inlineImage.messageId];
|
270
269
|
const attachment = (_b = (_a = message === null || message === void 0 ? void 0 : message.content) === null || _a === void 0 ? void 0 : _a.attachments) === null || _b === void 0 ? void 0 : _b.find((attachment) => attachment.id === inlineImage.imageAttributes.id);
|
271
270
|
if (attachment === undefined) {
|
272
271
|
return defaultOnRender(inlineImage);
|
273
272
|
}
|
274
273
|
let pointerEvents = inlineImage.imageAttributes.src === '' ? 'none' : 'auto';
|
275
|
-
const resourceCache = message.resourceCache;
|
274
|
+
const resourceCache = message === null || message === void 0 ? void 0 : message.resourceCache;
|
276
275
|
if (resourceCache &&
|
277
276
|
attachment.previewUrl &&
|
278
277
|
resourceCache[attachment.previewUrl] &&
|
279
|
-
resourceCache[attachment.previewUrl].error) {
|
278
|
+
((_c = resourceCache[attachment.previewUrl]) === null || _c === void 0 ? void 0 : _c.error)) {
|
280
279
|
pointerEvents = 'none';
|
281
280
|
}
|
282
281
|
return (React.createElement("span", { key: inlineImage.imageAttributes.id, onClick: () => onInlineImageClicked(inlineImage.imageAttributes.id || '', inlineImage.messageId), tabIndex: 0, role: "button", onKeyDown: (e) => {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"ChatScreen.js","sourceRoot":"","sources":["../../../../../../../react-composites/src/composites/ChatComposite/ChatScreen.tsx"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { isIOS } from '@fluentui/react';\nimport { mergeStyles, Stack } from '@fluentui/react';\nimport { PersonaSize } from '@fluentui/react';\nimport {\n CommunicationParticipant,\n ErrorBar,\n MessageProps,\n MessageRenderer,\n MessageThread,\n MessageThreadStyles,\n ParticipantMenuItemsCallback,\n SendBoxStylesProps,\n TypingIndicator,\n TypingIndicatorStylesProps,\n useTheme\n} from '@internal/react-components';\n/* @conditional-compile-remove(rich-text-editor) */\nimport { RichTextEditBoxOptions } from '@internal/react-components';\n/* @conditional-compile-remove(file-sharing-acs) */\nimport { ChatMessage } from '@internal/react-components';\nimport React, { useCallback, useEffect, useMemo } from 'react';\n/* @conditional-compile-remove(file-sharing-acs) */\nimport { useReducer } from 'react';\nimport { useState } from 'react';\nimport { AvatarPersona, AvatarPersonaDataCallback, AvatarPersonaProps } from '../common/AvatarPersona';\nimport { useAdapter } from './adapter/ChatAdapterProvider';\nimport { ChatCompositeOptions } from './ChatComposite';\nimport { ChatHeader, getHeaderProps } from './ChatHeader';\n/* @conditional-compile-remove(file-sharing-acs) */\nimport { AttachmentUploadButtonWrapper as AttachmentUploadButton } from './file-sharing';\nimport { useAdaptedSelector } from './hooks/useAdaptedSelector';\nimport { usePropsFor } from './hooks/usePropsFor';\n\nimport {\n chatArea,\n chatContainer,\n chatWrapper,\n messageThreadChatCompositeStyles,\n sendboxContainerStyles,\n typingIndicatorContainerStyles\n} from './styles/Chat.styles';\nimport { participantListContainerPadding } from '../common/styles/ParticipantContainer.styles';\n/* @conditional-compile-remove(chat-composite-participant-pane) */\nimport { ChatScreenPeoplePane } from './ChatScreenPeoplePane';\nimport { toFlatCommunicationIdentifier } from '@internal/acs-ui-common';\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\nimport { removeImageTags, _IMAGE_ATTRIBUTE_INLINE_IMAGE_FILE_NAME_KEY } from '@internal/acs-ui-common';\n/* @conditional-compile-remove(file-sharing-acs) */\nimport { AttachmentDownloadErrorBar } from './AttachmentDownloadErrorBar';\nimport { _AttachmentDownloadCards } from '@internal/react-components';\nimport { ImageOverlay } from '@internal/react-components';\nimport { InlineImage } from '@internal/react-components';\nimport { ChatMessageWithStatus, ResourceFetchResult } from '@internal/chat-stateful-client';\n/* @conditional-compile-remove(file-sharing-acs) */\nimport { AttachmentOptions } from '@internal/react-components';\n/* @conditional-compile-remove(file-sharing-acs) */\nimport { nanoid } from 'nanoid';\n/* @conditional-compile-remove(file-sharing-acs) */\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\nimport { AttachmentUploadActionType, AttachmentUpload, AttachmentUploadReducer } from './file-sharing/AttachmentUpload';\n/* @conditional-compile-remove(file-sharing-acs) */\nimport { MessageOptions } from '@internal/acs-ui-common';\nimport { SendBoxPicker } from '../common/SendBoxPicker';\n/* @conditional-compile-remove(rich-text-editor-composite-support) */\nimport { loadRichTextSendBox, RichTextSendBoxOptions } from '../common/SendBoxPicker';\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\nimport {\n cancelInlineImageUpload,\n getEditBoxMessagesInlineImages,\n getImageFileNameFromAttributes,\n getSendBoxInlineImages,\n onInsertInlineImageForEditBox,\n onInsertInlineImageForSendBox,\n updateContentStringWithUploadedInlineImages\n} from './ImageUpload/ImageUploadUtils';\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\nimport { isMicrosoftTeamsUserIdentifier } from '@azure/communication-common';\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\nimport { SEND_BOX_UPLOADS_KEY_VALUE, _DEFAULT_INLINE_IMAGE_FILE_NAME } from '../common/constants';\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\nimport { ImageUploadReducer } from './ImageUpload/ImageUploadReducer';\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\nimport { useLocale } from '../localization';\nimport { useSelector } from './hooks/useSelector';\nimport { getChatMessages, getThreadId, getUserId } from './selectors/baseSelectors';\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\nimport { getCreatedBy, getTextOnlyChat } from './selectors/baseSelectors';\n\n/**\n * @private\n */\nexport type ChatScreenProps = {\n options?: ChatCompositeOptions;\n onFetchAvatarPersonaData?: AvatarPersonaDataCallback;\n onRenderMessage?: (messageProps: MessageProps, defaultOnRender?: MessageRenderer) => JSX.Element;\n onRenderTypingIndicator?: (typingUsers: CommunicationParticipant[]) => JSX.Element;\n onFetchParticipantMenuItems?: ParticipantMenuItemsCallback;\n styles?: ChatScreenStyles;\n /* @conditional-compile-remove(file-sharing-acs) */\n attachmentOptions?: AttachmentOptions;\n formFactor?: 'desktop' | 'mobile';\n};\n\n/**\n * @private\n */\nexport type ChatScreenStyles = {\n messageThread?: MessageThreadStyles;\n sendBox?: SendBoxStylesProps;\n typingIndicator?: TypingIndicatorStylesProps;\n};\n\n/**\n * @private\n */\ninterface OverlayImageItem {\n imageSrc: string;\n title: string;\n titleIcon: JSX.Element;\n attachmentId: string;\n messageId: string;\n imageUrl: string;\n}\n\n/**\n * @private\n */\nexport const ChatScreen = (props: ChatScreenProps): JSX.Element => {\n const {\n onFetchAvatarPersonaData,\n onRenderMessage,\n onRenderTypingIndicator,\n options,\n styles,\n /* @conditional-compile-remove(file-sharing-acs) */\n attachmentOptions,\n formFactor\n } = props;\n\n const defaultNumberOfChatMessagesToReload = 5;\n /* @conditional-compile-remove(file-sharing-acs) */\n const [downloadErrorMessage, setDownloadErrorMessage] = React.useState('');\n const [overlayImageItem, setOverlayImageItem] = useState<OverlayImageItem>();\n const [isImageOverlayOpen, setIsImageOverlayOpen] = useState<boolean>(false);\n /* @conditional-compile-remove(file-sharing-acs) */\n const [uploads, handleUploadAction] = useReducer(AttachmentUploadReducer, []);\n const adapter = useAdapter();\n const theme = useTheme();\n /* @conditional-compile-remove(rich-text-editor-image-upload) */\n const localeStrings = useLocale().strings;\n\n /* @conditional-compile-remove(rich-text-editor-image-upload) */\n const textOnlyChat = !!useSelector(getTextOnlyChat);\n /* @conditional-compile-remove(rich-text-editor-image-upload) */\n const createdBy = useSelector(getCreatedBy);\n /* @conditional-compile-remove(rich-text-editor-image-upload) */\n const isACSChat = createdBy && !isMicrosoftTeamsUserIdentifier(createdBy);\n /* @conditional-compile-remove(rich-text-editor-image-upload) */\n const [editBoxInlineImageUploads, handleEditBoxInlineImageUploadAction] = useReducer(ImageUploadReducer, undefined);\n /* @conditional-compile-remove(rich-text-editor-image-upload) */\n const [sendBoxInlineImageUploads, handleSendBoxInlineImageUploadAction] = useReducer(ImageUploadReducer, undefined);\n\n useEffect(() => {\n // Initial data should be always fetched by the composite(or external caller) instead of the adapter\n const fetchData: () => Promise<void> = async () => {\n // Fetch initial data for adapter\n await adapter.fetchInitialData();\n // Fetch initial set of messages. Without fetching messages here, if the Composite's adapter is changed the message thread does not load new messages.\n await adapter.loadPreviousChatMessages(defaultNumberOfChatMessagesToReload);\n };\n fetchData();\n }, [adapter]);\n\n /* @conditional-compile-remove(rich-text-editor-composite-support) */\n useEffect(() => {\n // if rich text editor is enabled, the rich text editor component should be loaded early for good UX\n if (options?.richTextEditor) {\n // this line is needed to load the Rooster JS dependencies early in the lifecycle\n // when the rich text editor is enabled\n loadRichTextSendBox();\n }\n }, [options?.richTextEditor]);\n\n const messageThreadProps = usePropsFor(MessageThread);\n const typingIndicatorProps = usePropsFor(TypingIndicator);\n const headerProps = useAdaptedSelector(getHeaderProps);\n const errorBarProps = usePropsFor(ErrorBar);\n\n const overlayImageItemRef = React.useRef<OverlayImageItem | undefined>(overlayImageItem);\n overlayImageItemRef.current = overlayImageItem;\n const adapterChatMessages = useSelector(getChatMessages);\n useEffect(() => {\n if (overlayImageItemRef.current === undefined) {\n return;\n }\n const message: ChatMessageWithStatus | undefined = adapterChatMessages[overlayImageItemRef.current.messageId];\n if (message === undefined) {\n return;\n }\n const resourceCache = message.resourceCache;\n if (\n overlayImageItemRef.current.imageSrc === '' &&\n resourceCache &&\n resourceCache[overlayImageItemRef.current.imageUrl]\n ) {\n const fullSizeImageSrc = getResourceSourceUrl(resourceCache[overlayImageItemRef.current.imageUrl]);\n if (\n fullSizeImageSrc === undefined ||\n fullSizeImageSrc === '' ||\n overlayImageItemRef.current.imageSrc === fullSizeImageSrc\n ) {\n return;\n }\n setOverlayImageItem({\n ...overlayImageItemRef.current,\n imageSrc: fullSizeImageSrc\n });\n }\n }, [adapterChatMessages]);\n\n const getResourceSourceUrl = (result: ResourceFetchResult): string => {\n let src = '';\n if (result.error || !result.sourceUrl) {\n src = 'blob://';\n } else {\n src = result.sourceUrl;\n }\n\n return src;\n };\n\n const onRenderAvatarCallback = useCallback(\n (userId?: string, defaultOptions?: AvatarPersonaProps) => {\n return (\n <AvatarPersona\n userId={userId}\n hidePersonaDetails={true}\n {...defaultOptions}\n dataProvider={onFetchAvatarPersonaData}\n />\n );\n },\n [onFetchAvatarPersonaData]\n );\n\n const messageThreadStyles = useMemo(() => {\n return Object.assign(\n {},\n messageThreadChatCompositeStyles(theme.semanticColors.bodyBackground),\n styles?.messageThread\n );\n }, [styles?.messageThread, theme.semanticColors.bodyBackground]);\n\n const typingIndicatorStyles = useMemo(() => {\n return Object.assign({}, styles?.typingIndicator);\n }, [styles?.typingIndicator]);\n\n const sendBoxStyles = useMemo(() => {\n return Object.assign({}, styles?.sendBox);\n }, [styles?.sendBox]);\n\n const userIdObject = useSelector(getUserId);\n const userId = toFlatCommunicationIdentifier(userIdObject);\n\n /* @conditional-compile-remove(file-sharing-acs) */\n const setKeyboardFocusAfterFileSelection = useCallback(() => {\n // look up sendbox by ID for now, we will use `useRef`\n // once attachment button is moved inside of send box component\n // see ADO workitem #3764245\n /* @conditional-compile-remove(rich-text-editor-composite-support) */\n if (props.options?.richTextEditor) {\n const richTextSendBox = document?.querySelector(`[id=\"richTextSendBox\"]`) as HTMLDivElement;\n richTextSendBox?.focus();\n return;\n }\n const sendBox = document?.querySelector(`[id=\"sendbox\"]`) as HTMLTextAreaElement;\n // set send box on focus after file selection per A11y requirement\n sendBox?.focus();\n }, [\n /* @conditional-compile-remove(rich-text-editor-composite-support) */\n props.options?.richTextEditor\n ]);\n\n /* @conditional-compile-remove(file-sharing-acs) */\n const attachmentUploadButtonOnChange = useCallback(\n (files: FileList | null): void => {\n setKeyboardFocusAfterFileSelection();\n\n if (!files) {\n return;\n }\n\n // Get files, change to tasks, store locally and pass back to Contoso\n const newUploads = Array.from(files).map((file): AttachmentUpload => {\n const taskId = nanoid();\n return {\n file,\n taskId,\n metadata: {\n id: taskId,\n name: file.name,\n progress: 0\n },\n notifyUploadProgressChanged: (value: number) => {\n handleUploadAction({ type: AttachmentUploadActionType.Progress, taskId, progress: value });\n },\n notifyUploadCompleted: (id: string, url: string) => {\n handleUploadAction({ type: AttachmentUploadActionType.Completed, taskId, id, url });\n },\n notifyUploadFailed: (message: string) => {\n handleUploadAction({ type: AttachmentUploadActionType.Failed, taskId, message });\n // remove the failed upload task when error banner is auto dismissed after 10 seconds\n // so the banner won't be shown again on UI re-rendering.\n setTimeout(() => {\n handleUploadAction({ type: AttachmentUploadActionType.Remove, id: taskId });\n }, 10 * 1000);\n }\n };\n });\n\n handleUploadAction({ type: AttachmentUploadActionType.Set, newUploads });\n attachmentOptions?.uploadOptions?.handleAttachmentSelection(newUploads);\n },\n [attachmentOptions?.uploadOptions, setKeyboardFocusAfterFileSelection]\n );\n\n /* @conditional-compile-remove(file-sharing-acs) */\n const onRenderAttachmentDownloads = useCallback(\n (message: ChatMessage) =>\n message?.attachments?.length ?? 0 > 0 ? (\n <_AttachmentDownloadCards\n attachments={message.attachments}\n message={message}\n actionsForAttachment={attachmentOptions?.downloadOptions?.actionsForAttachment}\n onActionHandlerFailed={(errorMessage: string) => {\n setDownloadErrorMessage(errorMessage);\n }}\n />\n ) : (\n <></>\n ),\n [attachmentOptions?.downloadOptions?.actionsForAttachment]\n );\n\n const threadId = useSelector(getThreadId);\n const onInlineImageClicked = useCallback(\n (attachmentId: string, messageId: string) => {\n const message: ChatMessageWithStatus | undefined = adapterChatMessages[messageId];\n const inlinedImages = message.content?.attachments?.filter((attachment) => {\n return attachment.attachmentType === 'image' && attachment.id === attachmentId;\n });\n\n if (!inlinedImages || inlinedImages.length <= 0) {\n return;\n }\n\n const attachment = inlinedImages[0];\n\n const resourceCache = message.resourceCache;\n let imageSrc = '';\n\n if (attachment.url) {\n if (resourceCache && resourceCache[attachment.url]) {\n imageSrc = getResourceSourceUrl(resourceCache[attachment.url]);\n } else {\n adapter.downloadResourceToCache({\n threadId,\n messageId,\n resourceUrl: attachment.url\n });\n }\n }\n\n const titleIconRenderOptions = {\n text: message.senderDisplayName,\n size: PersonaSize.size32,\n showOverflowTooltip: false,\n imageAlt: message.senderDisplayName\n };\n\n const messageSenderId = message.sender !== undefined ? toFlatCommunicationIdentifier(message.sender) : userId;\n const titleIcon = onRenderAvatarCallback && onRenderAvatarCallback(messageSenderId, titleIconRenderOptions);\n const overlayImage: OverlayImageItem = {\n title: message.senderDisplayName || '',\n titleIcon: titleIcon,\n attachmentId: attachment.id,\n imageSrc: imageSrc,\n messageId: messageId,\n imageUrl: attachment.url || ''\n };\n\n setIsImageOverlayOpen(true);\n setOverlayImageItem(overlayImage);\n },\n [adapter, adapterChatMessages, onRenderAvatarCallback, userId, threadId]\n );\n\n const onRenderInlineImage = useCallback(\n (inlineImage: InlineImage, defaultOnRender: (inlineImage: InlineImage) => JSX.Element): JSX.Element => {\n const message = adapterChatMessages[inlineImage.messageId];\n const attachment = message?.content?.attachments?.find(\n (attachment) => attachment.id === inlineImage.imageAttributes.id\n );\n\n if (attachment === undefined) {\n return defaultOnRender(inlineImage);\n }\n\n let pointerEvents: 'none' | 'auto' = inlineImage.imageAttributes.src === '' ? 'none' : 'auto';\n const resourceCache = message.resourceCache;\n if (\n resourceCache &&\n attachment.previewUrl &&\n resourceCache[attachment.previewUrl] &&\n resourceCache[attachment.previewUrl].error\n ) {\n pointerEvents = 'none';\n }\n\n return (\n <span\n key={inlineImage.imageAttributes.id}\n onClick={() => onInlineImageClicked(inlineImage.imageAttributes.id || '', inlineImage.messageId)}\n tabIndex={0}\n role=\"button\"\n onKeyDown={(e) => {\n if (e.key === 'Enter') {\n onInlineImageClicked(inlineImage.imageAttributes.id || '', inlineImage.messageId);\n }\n }}\n style={{ cursor: 'pointer', pointerEvents }}\n >\n {defaultOnRender(inlineImage)}\n </span>\n );\n },\n [adapterChatMessages, onInlineImageClicked]\n );\n\n const inlineImageOptions = useMemo(() => {\n return { onRenderInlineImage: onRenderInlineImage };\n }, [onRenderInlineImage]);\n\n const onDownloadButtonClicked = useCallback(\n (imageSrc: string): void => {\n if (imageSrc === '') {\n return;\n }\n if (isIOS()) {\n window.open(imageSrc, '_blank');\n } else {\n // Create a new anchor element\n const a = document.createElement('a');\n // Set the href and download attributes for the anchor element\n a.href = imageSrc;\n a.download = overlayImageItem?.attachmentId || '';\n a.rel = 'noopener noreferrer';\n a.target = '_blank';\n\n // Programmatically click the anchor element to trigger the download\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n }\n },\n [overlayImageItem?.attachmentId]\n );\n\n /* @conditional-compile-remove(file-sharing-acs) */\n const attachmentButton = useMemo(() => {\n if (\n !attachmentOptions?.uploadOptions?.handleAttachmentSelection ||\n /* @conditional-compile-remove(rich-text-editor-image-upload) */\n textOnlyChat\n ) {\n return null;\n }\n return (\n <AttachmentUploadButton\n supportedMediaTypes={attachmentOptions?.uploadOptions?.supportedMediaTypes}\n disableMultipleUploads={attachmentOptions?.uploadOptions?.disableMultipleUploads}\n onChange={attachmentUploadButtonOnChange}\n />\n );\n return <></>;\n }, [\n attachmentOptions?.uploadOptions?.handleAttachmentSelection,\n attachmentOptions?.uploadOptions?.supportedMediaTypes,\n attachmentOptions?.uploadOptions?.disableMultipleUploads,\n attachmentUploadButtonOnChange,\n /* @conditional-compile-remove(rich-text-editor-image-upload) */\n textOnlyChat\n ]);\n\n /* @conditional-compile-remove(file-sharing-acs) */\n const attachments = useMemo(() => {\n return uploads?.map((v) => v.metadata);\n }, [uploads]);\n\n const onSendMessageHandler = useCallback(\n async function (\n content: string,\n /* @conditional-compile-remove(file-sharing-acs) */ /* @conditional-compile-remove(rich-text-editor-composite-support) */ options?: MessageOptions\n ) {\n /* @conditional-compile-remove(rich-text-editor-image-upload) */\n content = updateContentStringWithUploadedInlineImages(content, sendBoxInlineImageUploads);\n /* @conditional-compile-remove(file-sharing-acs) */\n const attachments = options?.attachments ?? [];\n /* @conditional-compile-remove(file-sharing-acs) */\n handleUploadAction({ type: AttachmentUploadActionType.Clear });\n /* @conditional-compile-remove(rich-text-editor-image-upload) */\n handleSendBoxInlineImageUploadAction({\n type: AttachmentUploadActionType.Clear,\n messageId: SEND_BOX_UPLOADS_KEY_VALUE\n });\n\n /* @conditional-compile-remove(file-sharing-acs) */\n await adapter.sendMessage(content, {\n attachments: attachments,\n /* @conditional-compile-remove(rich-text-editor-composite-support) */\n type: options?.type\n });\n /* @conditional-compile-remove(file-sharing-acs) */\n return;\n await adapter.sendMessage(content, {\n /* @conditional-compile-remove(rich-text-editor-composite-support) */\n type: options?.type\n });\n },\n [\n adapter,\n /* @conditional-compile-remove(rich-text-editor-image-upload) */ handleSendBoxInlineImageUploadAction,\n /* @conditional-compile-remove(rich-text-editor-image-upload) */ sendBoxInlineImageUploads\n ]\n );\n\n const onUpdateMessageHandler = useCallback(\n async function (\n messageId: string,\n content: string,\n /* @conditional-compile-remove(file-sharing-acs) */ options?: MessageOptions\n ) {\n /* @conditional-compile-remove(rich-text-editor-image-upload) */\n content = updateContentStringWithUploadedInlineImages(content, editBoxInlineImageUploads, messageId);\n await messageThreadProps.onUpdateMessage(\n messageId,\n content,\n /* @conditional-compile-remove(file-sharing-acs) */ options\n );\n /* @conditional-compile-remove(rich-text-editor-image-upload) */\n handleEditBoxInlineImageUploadAction({ type: AttachmentUploadActionType.Clear, messageId });\n },\n [\n /* @conditional-compile-remove(rich-text-editor-image-upload) */ handleEditBoxInlineImageUploadAction,\n /* @conditional-compile-remove(rich-text-editor-image-upload) */ editBoxInlineImageUploads,\n messageThreadProps\n ]\n );\n\n /* @conditional-compile-remove(rich-text-editor-image-upload) */\n const onCancelEditMessageHandler = useCallback(\n (messageId: string) => {\n handleEditBoxInlineImageUploadAction({ type: AttachmentUploadActionType.Clear, messageId });\n },\n [handleEditBoxInlineImageUploadAction]\n );\n\n /* @conditional-compile-remove(file-sharing-acs) */\n const onCancelUploadHandler = useCallback(\n (id: string) => {\n handleUploadAction({ type: AttachmentUploadActionType.Remove, id });\n attachmentOptions?.uploadOptions?.handleAttachmentRemoval?.(id);\n },\n [attachmentOptions?.uploadOptions]\n );\n\n /* @conditional-compile-remove(rich-text-editor-composite-support) */\n const richTextEditorOptions = useMemo(() => {\n /* @conditional-compile-remove(rich-text-editor-image-upload) */\n const onPasteCallback = !!isACSChat || textOnlyChat ? removeImageTags : undefined;\n return options?.richTextEditor\n ? {\n /* @conditional-compile-remove(rich-text-editor-image-upload) */ onPaste: onPasteCallback\n }\n : undefined;\n }, [\n /* @conditional-compile-remove(rich-text-editor-image-upload) */\n isACSChat,\n /* @conditional-compile-remove(rich-text-editor-image-upload) */\n textOnlyChat,\n options?.richTextEditor\n ]);\n\n /* @conditional-compile-remove(rich-text-editor-composite-support) */\n const richTextEditBoxOptions: RichTextEditBoxOptions | undefined = useMemo(() => {\n return options?.richTextEditor\n ? {\n /* @conditional-compile-remove(rich-text-editor-image-upload) */\n ...richTextEditorOptions,\n /* @conditional-compile-remove(rich-text-editor-image-upload) */\n onInsertInlineImage: (imageAttributes: Record<string, string>, messageId: string) => {\n onInsertInlineImageForEditBox(\n imageAttributes,\n getImageFileNameFromAttributes(imageAttributes),\n messageId,\n adapter,\n handleEditBoxInlineImageUploadAction,\n localeStrings.chat\n );\n },\n /* @conditional-compile-remove(rich-text-editor-image-upload) */\n messagesInlineImagesWithProgress: getEditBoxMessagesInlineImages(editBoxInlineImageUploads),\n /* @conditional-compile-remove(rich-text-editor-image-upload) */\n onRemoveInlineImage: (imageAttributes: Record<string, string>, messageId: string) => {\n cancelInlineImageUpload(\n imageAttributes,\n editBoxInlineImageUploads,\n messageId,\n handleEditBoxInlineImageUploadAction,\n adapter\n );\n }\n }\n : undefined;\n }, [\n options?.richTextEditor,\n /* @conditional-compile-remove(rich-text-editor-image-upload) */ richTextEditorOptions,\n /* @conditional-compile-remove(rich-text-editor-image-upload) */ editBoxInlineImageUploads,\n /* @conditional-compile-remove(rich-text-editor-image-upload) */ adapter,\n /* @conditional-compile-remove(rich-text-editor-image-upload) */ localeStrings.chat\n ]);\n\n /* @conditional-compile-remove(rich-text-editor-composite-support) */\n const richTextSendBoxOptions: RichTextSendBoxOptions | undefined = useMemo(() => {\n return options?.richTextEditor\n ? {\n /* @conditional-compile-remove(rich-text-editor-image-upload) */\n ...richTextEditorOptions,\n /* @conditional-compile-remove(rich-text-editor-image-upload) */\n onInsertInlineImage: (imageAttributes: Record<string, string>) => {\n onInsertInlineImageForSendBox(\n imageAttributes,\n getImageFileNameFromAttributes(imageAttributes),\n adapter,\n handleSendBoxInlineImageUploadAction,\n localeStrings.chat\n );\n },\n /* @conditional-compile-remove(rich-text-editor-image-upload) */\n inlineImagesWithProgress: getSendBoxInlineImages(sendBoxInlineImageUploads),\n /* @conditional-compile-remove(rich-text-editor-image-upload) */\n onRemoveInlineImage: (imageAttributes: Record<string, string>) => {\n cancelInlineImageUpload(\n imageAttributes,\n sendBoxInlineImageUploads,\n SEND_BOX_UPLOADS_KEY_VALUE,\n handleSendBoxInlineImageUploadAction,\n adapter\n );\n }\n }\n : undefined;\n }, [\n options?.richTextEditor,\n /* @conditional-compile-remove(rich-text-editor-image-upload) */ richTextEditorOptions,\n /* @conditional-compile-remove(rich-text-editor-image-upload) */ sendBoxInlineImageUploads,\n /* @conditional-compile-remove(rich-text-editor-image-upload) */ localeStrings.chat,\n adapter\n ]);\n\n return (\n <Stack className={chatContainer} grow>\n {options?.topic !== false && <ChatHeader {...headerProps} />}\n <Stack className={chatArea} tokens={participantListContainerPadding} horizontal grow>\n <Stack className={chatWrapper} grow>\n {options?.errorBar !== false && <ErrorBar {...errorBarProps} />}\n {\n /* @conditional-compile-remove(file-sharing-acs) */\n <AttachmentDownloadErrorBar\n onDismissDownloadErrorMessage={useCallback(() => {\n setDownloadErrorMessage('');\n }, [])}\n attachmentDownloadErrorMessage={downloadErrorMessage || ''}\n />\n }\n <MessageThread\n {...messageThreadProps}\n onUpdateMessage={onUpdateMessageHandler}\n /* @conditional-compile-remove(rich-text-editor-image-upload) */\n onCancelEditMessage={onCancelEditMessageHandler}\n onRenderAvatar={onRenderAvatarCallback}\n onRenderMessage={onRenderMessage}\n /* @conditional-compile-remove(file-sharing-acs) */\n onRenderAttachmentDownloads={onRenderAttachmentDownloads}\n inlineImageOptions={inlineImageOptions}\n numberOfChatMessagesToReload={defaultNumberOfChatMessagesToReload}\n styles={messageThreadStyles}\n /* @conditional-compile-remove(rich-text-editor-composite-support) */\n richTextEditorOptions={richTextEditBoxOptions}\n />\n <Stack className={mergeStyles(sendboxContainerStyles)}>\n <div className={mergeStyles(typingIndicatorContainerStyles)}>\n {onRenderTypingIndicator ? (\n onRenderTypingIndicator(typingIndicatorProps.typingUsers)\n ) : (\n <TypingIndicator {...typingIndicatorProps} styles={typingIndicatorStyles} />\n )}\n </div>\n <Stack horizontal={formFactor === 'mobile'}>\n {formFactor === 'mobile' && (\n /* @conditional-compile-remove(file-sharing-acs) */\n <Stack verticalAlign=\"center\">{attachmentButton}</Stack>\n )}\n <Stack grow>\n <SendBoxPicker\n styles={sendBoxStyles}\n autoFocus={options?.autoFocus}\n /* @conditional-compile-remove(rich-text-editor-composite-support) */\n richTextEditorOptions={richTextSendBoxOptions}\n /* @conditional-compile-remove(file-sharing-acs) */\n attachments={attachments}\n /* @conditional-compile-remove(file-sharing-acs) */\n onCancelAttachmentUpload={onCancelUploadHandler}\n // we need to overwrite onSendMessage for SendBox because we need to clear attachment state\n // when submit button is clicked\n onSendMessage={onSendMessageHandler}\n />\n </Stack>\n {formFactor !== 'mobile' &&\n /* @conditional-compile-remove(file-sharing-acs) */\n attachmentButton}\n </Stack>\n </Stack>\n </Stack>\n {\n /* @conditional-compile-remove(chat-composite-participant-pane) */\n options?.participantPane === true && (\n <ChatScreenPeoplePane\n onFetchAvatarPersonaData={onFetchAvatarPersonaData}\n onFetchParticipantMenuItems={props.onFetchParticipantMenuItems}\n isMobile={formFactor === 'mobile'}\n />\n )\n }\n </Stack>\n {overlayImageItem && (\n <ImageOverlay\n {...overlayImageItem}\n isOpen={isImageOverlayOpen}\n onDismiss={() => {\n setOverlayImageItem(undefined);\n setIsImageOverlayOpen(false);\n adapter.removeResourceFromCache({\n threadId,\n messageId: overlayImageItem.messageId,\n resourceUrl: overlayImageItem.imageUrl\n });\n }}\n onDownloadButtonClicked={onDownloadButtonClicked}\n />\n )}\n </Stack>\n );\n};\n"]}
|
1
|
+
{"version":3,"file":"ChatScreen.js","sourceRoot":"","sources":["../../../../../../../react-composites/src/composites/ChatComposite/ChatScreen.tsx"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { isIOS } from '@fluentui/react';\nimport { mergeStyles, Stack } from '@fluentui/react';\nimport { PersonaSize } from '@fluentui/react';\nimport {\n CommunicationParticipant,\n ErrorBar,\n MessageProps,\n MessageRenderer,\n MessageThread,\n MessageThreadStyles,\n ParticipantMenuItemsCallback,\n SendBoxStylesProps,\n TypingIndicator,\n TypingIndicatorStylesProps,\n useTheme\n} from '@internal/react-components';\n/* @conditional-compile-remove(rich-text-editor) */\nimport { RichTextEditBoxOptions } from '@internal/react-components';\n/* @conditional-compile-remove(file-sharing-acs) */\nimport { ChatMessage } from '@internal/react-components';\nimport React, { useCallback, useEffect, useMemo } from 'react';\n/* @conditional-compile-remove(file-sharing-acs) */\nimport { useReducer } from 'react';\nimport { useState } from 'react';\nimport { AvatarPersona, AvatarPersonaDataCallback, AvatarPersonaProps } from '../common/AvatarPersona';\nimport { useAdapter } from './adapter/ChatAdapterProvider';\nimport { ChatCompositeOptions } from './ChatComposite';\nimport { ChatHeader, getHeaderProps } from './ChatHeader';\n/* @conditional-compile-remove(file-sharing-acs) */\nimport { AttachmentUploadButtonWrapper as AttachmentUploadButton } from './file-sharing';\nimport { useAdaptedSelector } from './hooks/useAdaptedSelector';\nimport { usePropsFor } from './hooks/usePropsFor';\n\nimport {\n chatArea,\n chatContainer,\n chatWrapper,\n messageThreadChatCompositeStyles,\n sendboxContainerStyles,\n typingIndicatorContainerStyles\n} from './styles/Chat.styles';\nimport { participantListContainerPadding } from '../common/styles/ParticipantContainer.styles';\n/* @conditional-compile-remove(chat-composite-participant-pane) */\nimport { ChatScreenPeoplePane } from './ChatScreenPeoplePane';\nimport { toFlatCommunicationIdentifier } from '@internal/acs-ui-common';\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\nimport { removeImageTags, _IMAGE_ATTRIBUTE_INLINE_IMAGE_FILE_NAME_KEY } from '@internal/acs-ui-common';\n/* @conditional-compile-remove(file-sharing-acs) */\nimport { AttachmentDownloadErrorBar } from './AttachmentDownloadErrorBar';\nimport { _AttachmentDownloadCards } from '@internal/react-components';\nimport { ImageOverlay } from '@internal/react-components';\nimport { InlineImage } from '@internal/react-components';\nimport { ChatMessageWithStatus, ResourceFetchResult } from '@internal/chat-stateful-client';\n/* @conditional-compile-remove(file-sharing-acs) */\nimport { AttachmentOptions } from '@internal/react-components';\n/* @conditional-compile-remove(file-sharing-acs) */\nimport { nanoid } from 'nanoid';\n/* @conditional-compile-remove(file-sharing-acs) */\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\nimport { AttachmentUploadActionType, AttachmentUpload, AttachmentUploadReducer } from './file-sharing/AttachmentUpload';\n/* @conditional-compile-remove(file-sharing-acs) */\nimport { MessageOptions } from '@internal/acs-ui-common';\nimport { SendBoxPicker } from '../common/SendBoxPicker';\n/* @conditional-compile-remove(rich-text-editor-composite-support) */\nimport { loadRichTextSendBox, RichTextSendBoxOptions } from '../common/SendBoxPicker';\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\nimport {\n cancelInlineImageUpload,\n getEditBoxMessagesInlineImages,\n getImageFileNameFromAttributes,\n getSendBoxInlineImages,\n onInsertInlineImageForEditBox,\n onInsertInlineImageForSendBox,\n updateContentStringWithUploadedInlineImages\n} from './ImageUpload/ImageUploadUtils';\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\nimport { isMicrosoftTeamsUserIdentifier } from '@azure/communication-common';\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\nimport { SEND_BOX_UPLOADS_KEY_VALUE, _DEFAULT_INLINE_IMAGE_FILE_NAME } from '../common/constants';\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\nimport { ImageUploadReducer } from './ImageUpload/ImageUploadReducer';\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\nimport { useLocale } from '../localization';\nimport { useSelector } from './hooks/useSelector';\nimport { getChatMessages, getThreadId, getUserId } from './selectors/baseSelectors';\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\nimport { getCreatedBy, getTextOnlyChat } from './selectors/baseSelectors';\n\n/**\n * @private\n */\nexport type ChatScreenProps = {\n options?: ChatCompositeOptions;\n onFetchAvatarPersonaData?: AvatarPersonaDataCallback;\n onRenderMessage?: (messageProps: MessageProps, defaultOnRender?: MessageRenderer) => JSX.Element;\n onRenderTypingIndicator?: (typingUsers: CommunicationParticipant[]) => JSX.Element;\n onFetchParticipantMenuItems?: ParticipantMenuItemsCallback;\n styles?: ChatScreenStyles;\n /* @conditional-compile-remove(file-sharing-acs) */\n attachmentOptions?: AttachmentOptions;\n formFactor?: 'desktop' | 'mobile';\n};\n\n/**\n * @private\n */\nexport type ChatScreenStyles = {\n messageThread?: MessageThreadStyles;\n sendBox?: SendBoxStylesProps;\n typingIndicator?: TypingIndicatorStylesProps;\n};\n\n/**\n * @private\n */\ninterface OverlayImageItem {\n imageSrc: string;\n title: string;\n titleIcon: JSX.Element;\n attachmentId: string;\n messageId: string;\n imageUrl: string;\n}\n\n/**\n * @private\n */\nexport const ChatScreen = (props: ChatScreenProps): JSX.Element => {\n const {\n onFetchAvatarPersonaData,\n onRenderMessage,\n onRenderTypingIndicator,\n options,\n styles,\n /* @conditional-compile-remove(file-sharing-acs) */\n attachmentOptions,\n formFactor\n } = props;\n\n const defaultNumberOfChatMessagesToReload = 5;\n /* @conditional-compile-remove(file-sharing-acs) */\n const [downloadErrorMessage, setDownloadErrorMessage] = React.useState('');\n const [overlayImageItem, setOverlayImageItem] = useState<OverlayImageItem>();\n const [isImageOverlayOpen, setIsImageOverlayOpen] = useState<boolean>(false);\n /* @conditional-compile-remove(file-sharing-acs) */\n const [uploads, handleUploadAction] = useReducer(AttachmentUploadReducer, []);\n const adapter = useAdapter();\n const theme = useTheme();\n /* @conditional-compile-remove(rich-text-editor-image-upload) */\n const localeStrings = useLocale().strings;\n\n /* @conditional-compile-remove(rich-text-editor-image-upload) */\n const textOnlyChat = !!useSelector(getTextOnlyChat);\n /* @conditional-compile-remove(rich-text-editor-image-upload) */\n const createdBy = useSelector(getCreatedBy);\n /* @conditional-compile-remove(rich-text-editor-image-upload) */\n const isACSChat = createdBy && !isMicrosoftTeamsUserIdentifier(createdBy);\n /* @conditional-compile-remove(rich-text-editor-image-upload) */\n const [editBoxInlineImageUploads, handleEditBoxInlineImageUploadAction] = useReducer(ImageUploadReducer, undefined);\n /* @conditional-compile-remove(rich-text-editor-image-upload) */\n const [sendBoxInlineImageUploads, handleSendBoxInlineImageUploadAction] = useReducer(ImageUploadReducer, undefined);\n\n useEffect(() => {\n // Initial data should be always fetched by the composite(or external caller) instead of the adapter\n const fetchData: () => Promise<void> = async () => {\n // Fetch initial data for adapter\n await adapter.fetchInitialData();\n // Fetch initial set of messages. Without fetching messages here, if the Composite's adapter is changed the message thread does not load new messages.\n await adapter.loadPreviousChatMessages(defaultNumberOfChatMessagesToReload);\n };\n fetchData();\n }, [adapter]);\n\n /* @conditional-compile-remove(rich-text-editor-composite-support) */\n useEffect(() => {\n // if rich text editor is enabled, the rich text editor component should be loaded early for good UX\n if (options?.richTextEditor) {\n // this line is needed to load the Rooster JS dependencies early in the lifecycle\n // when the rich text editor is enabled\n loadRichTextSendBox();\n }\n }, [options?.richTextEditor]);\n\n const messageThreadProps = usePropsFor(MessageThread);\n const typingIndicatorProps = usePropsFor(TypingIndicator);\n const headerProps = useAdaptedSelector(getHeaderProps);\n const errorBarProps = usePropsFor(ErrorBar);\n\n const overlayImageItemRef = React.useRef<OverlayImageItem | undefined>(overlayImageItem);\n overlayImageItemRef.current = overlayImageItem;\n const adapterChatMessages = useSelector(getChatMessages);\n useEffect(() => {\n if (overlayImageItemRef.current === undefined) {\n return;\n }\n const message: ChatMessageWithStatus | undefined = adapterChatMessages[overlayImageItemRef.current.messageId];\n if (message === undefined) {\n return;\n }\n const resourceFetchResult = message.resourceCache?.[overlayImageItemRef.current.imageUrl];\n if (overlayImageItemRef.current.imageSrc === '' && resourceFetchResult) {\n const fullSizeImageSrc = getResourceSourceUrl(resourceFetchResult);\n if (\n fullSizeImageSrc === undefined ||\n fullSizeImageSrc === '' ||\n overlayImageItemRef.current.imageSrc === fullSizeImageSrc\n ) {\n return;\n }\n setOverlayImageItem({\n ...overlayImageItemRef.current,\n imageSrc: fullSizeImageSrc\n });\n }\n }, [adapterChatMessages]);\n\n const getResourceSourceUrl = (result: ResourceFetchResult): string => {\n let src = '';\n if (result.error || !result.sourceUrl) {\n src = 'blob://';\n } else {\n src = result.sourceUrl;\n }\n\n return src;\n };\n\n const onRenderAvatarCallback = useCallback(\n (userId?: string, defaultOptions?: AvatarPersonaProps) => {\n return (\n <AvatarPersona\n userId={userId}\n hidePersonaDetails={true}\n {...defaultOptions}\n dataProvider={onFetchAvatarPersonaData}\n />\n );\n },\n [onFetchAvatarPersonaData]\n );\n\n const messageThreadStyles = useMemo(() => {\n return Object.assign(\n {},\n messageThreadChatCompositeStyles(theme.semanticColors.bodyBackground),\n styles?.messageThread\n );\n }, [styles?.messageThread, theme.semanticColors.bodyBackground]);\n\n const typingIndicatorStyles = useMemo(() => {\n return Object.assign({}, styles?.typingIndicator);\n }, [styles?.typingIndicator]);\n\n const sendBoxStyles = useMemo(() => {\n return Object.assign({}, styles?.sendBox);\n }, [styles?.sendBox]);\n\n const userIdObject = useSelector(getUserId);\n const userId = toFlatCommunicationIdentifier(userIdObject);\n\n /* @conditional-compile-remove(file-sharing-acs) */\n const setKeyboardFocusAfterFileSelection = useCallback(() => {\n // look up sendbox by ID for now, we will use `useRef`\n // once attachment button is moved inside of send box component\n // see ADO workitem #3764245\n /* @conditional-compile-remove(rich-text-editor-composite-support) */\n if (props.options?.richTextEditor) {\n const richTextSendBox = document?.querySelector(`[id=\"richTextSendBox\"]`) as HTMLDivElement;\n richTextSendBox?.focus();\n return;\n }\n const sendBox = document?.querySelector(`[id=\"sendbox\"]`) as HTMLTextAreaElement;\n // set send box on focus after file selection per A11y requirement\n sendBox?.focus();\n }, [\n /* @conditional-compile-remove(rich-text-editor-composite-support) */\n props.options?.richTextEditor\n ]);\n\n /* @conditional-compile-remove(file-sharing-acs) */\n const attachmentUploadButtonOnChange = useCallback(\n (files: FileList | null): void => {\n setKeyboardFocusAfterFileSelection();\n\n if (!files) {\n return;\n }\n\n // Get files, change to tasks, store locally and pass back to Contoso\n const newUploads = Array.from(files).map((file): AttachmentUpload => {\n const taskId = nanoid();\n return {\n file,\n taskId,\n metadata: {\n id: taskId,\n name: file.name,\n progress: 0\n },\n notifyUploadProgressChanged: (value: number) => {\n handleUploadAction({ type: AttachmentUploadActionType.Progress, taskId, progress: value });\n },\n notifyUploadCompleted: (id: string, url: string) => {\n handleUploadAction({ type: AttachmentUploadActionType.Completed, taskId, id, url });\n },\n notifyUploadFailed: (message: string) => {\n handleUploadAction({ type: AttachmentUploadActionType.Failed, taskId, message });\n // remove the failed upload task when error banner is auto dismissed after 10 seconds\n // so the banner won't be shown again on UI re-rendering.\n setTimeout(() => {\n handleUploadAction({ type: AttachmentUploadActionType.Remove, id: taskId });\n }, 10 * 1000);\n }\n };\n });\n\n handleUploadAction({ type: AttachmentUploadActionType.Set, newUploads });\n attachmentOptions?.uploadOptions?.handleAttachmentSelection(newUploads);\n },\n [attachmentOptions?.uploadOptions, setKeyboardFocusAfterFileSelection]\n );\n\n /* @conditional-compile-remove(file-sharing-acs) */\n const onRenderAttachmentDownloads = useCallback(\n (message: ChatMessage) =>\n message?.attachments?.length ?? 0 > 0 ? (\n <_AttachmentDownloadCards\n attachments={message.attachments}\n message={message}\n actionsForAttachment={attachmentOptions?.downloadOptions?.actionsForAttachment}\n onActionHandlerFailed={(errorMessage: string) => {\n setDownloadErrorMessage(errorMessage);\n }}\n />\n ) : (\n <></>\n ),\n [attachmentOptions?.downloadOptions?.actionsForAttachment]\n );\n\n const threadId = useSelector(getThreadId);\n const onInlineImageClicked = useCallback(\n (attachmentId: string, messageId: string) => {\n const message: ChatMessageWithStatus | undefined = adapterChatMessages[messageId];\n const inlinedImages = message?.content?.attachments?.filter((attachment) => {\n return attachment.attachmentType === 'image' && attachment.id === attachmentId;\n });\n\n const attachment = inlinedImages?.[0];\n if (!attachment) {\n return;\n }\n\n let imageSrc = '';\n\n if (attachment.url) {\n const resourceFetchResult = message?.resourceCache?.[attachment.url];\n if (resourceFetchResult) {\n imageSrc = getResourceSourceUrl(resourceFetchResult);\n } else {\n adapter.downloadResourceToCache({\n threadId,\n messageId,\n resourceUrl: attachment.url\n });\n }\n }\n\n const titleIconRenderOptions = {\n text: message?.senderDisplayName,\n size: PersonaSize.size32,\n showOverflowTooltip: false,\n imageAlt: message?.senderDisplayName\n };\n\n const messageSenderId = message?.sender !== undefined ? toFlatCommunicationIdentifier(message.sender) : userId;\n const titleIcon = onRenderAvatarCallback && onRenderAvatarCallback(messageSenderId, titleIconRenderOptions);\n const overlayImage: OverlayImageItem = {\n title: message?.senderDisplayName || '',\n titleIcon: titleIcon,\n attachmentId: attachment.id,\n imageSrc: imageSrc,\n messageId: messageId,\n imageUrl: attachment.url || ''\n };\n\n setIsImageOverlayOpen(true);\n setOverlayImageItem(overlayImage);\n },\n [adapter, adapterChatMessages, onRenderAvatarCallback, userId, threadId]\n );\n\n const onRenderInlineImage = useCallback(\n (inlineImage: InlineImage, defaultOnRender: (inlineImage: InlineImage) => JSX.Element): JSX.Element => {\n const message = adapterChatMessages[inlineImage.messageId];\n const attachment = message?.content?.attachments?.find(\n (attachment) => attachment.id === inlineImage.imageAttributes.id\n );\n\n if (attachment === undefined) {\n return defaultOnRender(inlineImage);\n }\n\n let pointerEvents: 'none' | 'auto' = inlineImage.imageAttributes.src === '' ? 'none' : 'auto';\n const resourceCache = message?.resourceCache;\n if (\n resourceCache &&\n attachment.previewUrl &&\n resourceCache[attachment.previewUrl] &&\n resourceCache[attachment.previewUrl]?.error\n ) {\n pointerEvents = 'none';\n }\n\n return (\n <span\n key={inlineImage.imageAttributes.id}\n onClick={() => onInlineImageClicked(inlineImage.imageAttributes.id || '', inlineImage.messageId)}\n tabIndex={0}\n role=\"button\"\n onKeyDown={(e) => {\n if (e.key === 'Enter') {\n onInlineImageClicked(inlineImage.imageAttributes.id || '', inlineImage.messageId);\n }\n }}\n style={{ cursor: 'pointer', pointerEvents }}\n >\n {defaultOnRender(inlineImage)}\n </span>\n );\n },\n [adapterChatMessages, onInlineImageClicked]\n );\n\n const inlineImageOptions = useMemo(() => {\n return { onRenderInlineImage: onRenderInlineImage };\n }, [onRenderInlineImage]);\n\n const onDownloadButtonClicked = useCallback(\n (imageSrc: string): void => {\n if (imageSrc === '') {\n return;\n }\n if (isIOS()) {\n window.open(imageSrc, '_blank');\n } else {\n // Create a new anchor element\n const a = document.createElement('a');\n // Set the href and download attributes for the anchor element\n a.href = imageSrc;\n a.download = overlayImageItem?.attachmentId || '';\n a.rel = 'noopener noreferrer';\n a.target = '_blank';\n\n // Programmatically click the anchor element to trigger the download\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n }\n },\n [overlayImageItem?.attachmentId]\n );\n\n /* @conditional-compile-remove(file-sharing-acs) */\n const attachmentButton = useMemo(() => {\n if (\n !attachmentOptions?.uploadOptions?.handleAttachmentSelection ||\n /* @conditional-compile-remove(rich-text-editor-image-upload) */\n textOnlyChat\n ) {\n return null;\n }\n return (\n <AttachmentUploadButton\n supportedMediaTypes={attachmentOptions?.uploadOptions?.supportedMediaTypes}\n disableMultipleUploads={attachmentOptions?.uploadOptions?.disableMultipleUploads}\n onChange={attachmentUploadButtonOnChange}\n />\n );\n return <></>;\n }, [\n attachmentOptions?.uploadOptions?.handleAttachmentSelection,\n attachmentOptions?.uploadOptions?.supportedMediaTypes,\n attachmentOptions?.uploadOptions?.disableMultipleUploads,\n attachmentUploadButtonOnChange,\n /* @conditional-compile-remove(rich-text-editor-image-upload) */\n textOnlyChat\n ]);\n\n /* @conditional-compile-remove(file-sharing-acs) */\n const attachments = useMemo(() => {\n return uploads?.map((v) => v.metadata);\n }, [uploads]);\n\n const onSendMessageHandler = useCallback(\n async function (\n content: string,\n /* @conditional-compile-remove(file-sharing-acs) */ /* @conditional-compile-remove(rich-text-editor-composite-support) */ options?: MessageOptions\n ) {\n /* @conditional-compile-remove(rich-text-editor-image-upload) */\n content = updateContentStringWithUploadedInlineImages(content, sendBoxInlineImageUploads);\n /* @conditional-compile-remove(file-sharing-acs) */\n const attachments = options?.attachments ?? [];\n /* @conditional-compile-remove(file-sharing-acs) */\n handleUploadAction({ type: AttachmentUploadActionType.Clear });\n /* @conditional-compile-remove(rich-text-editor-image-upload) */\n handleSendBoxInlineImageUploadAction({\n type: AttachmentUploadActionType.Clear,\n messageId: SEND_BOX_UPLOADS_KEY_VALUE\n });\n\n /* @conditional-compile-remove(file-sharing-acs) */\n await adapter.sendMessage(content, {\n attachments: attachments,\n /* @conditional-compile-remove(rich-text-editor-composite-support) */\n type: options?.type\n });\n /* @conditional-compile-remove(file-sharing-acs) */\n return;\n await adapter.sendMessage(content, {\n /* @conditional-compile-remove(rich-text-editor-composite-support) */\n type: options?.type\n });\n },\n [\n adapter,\n /* @conditional-compile-remove(rich-text-editor-image-upload) */ handleSendBoxInlineImageUploadAction,\n /* @conditional-compile-remove(rich-text-editor-image-upload) */ sendBoxInlineImageUploads\n ]\n );\n\n const onUpdateMessageHandler = useCallback(\n async function (\n messageId: string,\n content: string,\n /* @conditional-compile-remove(file-sharing-acs) */ options?: MessageOptions\n ) {\n /* @conditional-compile-remove(rich-text-editor-image-upload) */\n content = updateContentStringWithUploadedInlineImages(content, editBoxInlineImageUploads, messageId);\n await messageThreadProps.onUpdateMessage(\n messageId,\n content,\n /* @conditional-compile-remove(file-sharing-acs) */ options\n );\n /* @conditional-compile-remove(rich-text-editor-image-upload) */\n handleEditBoxInlineImageUploadAction({ type: AttachmentUploadActionType.Clear, messageId });\n },\n [\n /* @conditional-compile-remove(rich-text-editor-image-upload) */ handleEditBoxInlineImageUploadAction,\n /* @conditional-compile-remove(rich-text-editor-image-upload) */ editBoxInlineImageUploads,\n messageThreadProps\n ]\n );\n\n /* @conditional-compile-remove(rich-text-editor-image-upload) */\n const onCancelEditMessageHandler = useCallback(\n (messageId: string) => {\n handleEditBoxInlineImageUploadAction({ type: AttachmentUploadActionType.Clear, messageId });\n },\n [handleEditBoxInlineImageUploadAction]\n );\n\n /* @conditional-compile-remove(file-sharing-acs) */\n const onCancelUploadHandler = useCallback(\n (id: string) => {\n handleUploadAction({ type: AttachmentUploadActionType.Remove, id });\n attachmentOptions?.uploadOptions?.handleAttachmentRemoval?.(id);\n },\n [attachmentOptions?.uploadOptions]\n );\n\n /* @conditional-compile-remove(rich-text-editor-composite-support) */\n const richTextEditorOptions = useMemo(() => {\n /* @conditional-compile-remove(rich-text-editor-image-upload) */\n const onPasteCallback = !!isACSChat || textOnlyChat ? removeImageTags : undefined;\n return options?.richTextEditor\n ? {\n /* @conditional-compile-remove(rich-text-editor-image-upload) */ onPaste: onPasteCallback\n }\n : undefined;\n }, [\n /* @conditional-compile-remove(rich-text-editor-image-upload) */\n isACSChat,\n /* @conditional-compile-remove(rich-text-editor-image-upload) */\n textOnlyChat,\n options?.richTextEditor\n ]);\n\n /* @conditional-compile-remove(rich-text-editor-composite-support) */\n const richTextEditBoxOptions: RichTextEditBoxOptions | undefined = useMemo(() => {\n return options?.richTextEditor\n ? {\n /* @conditional-compile-remove(rich-text-editor-image-upload) */\n ...richTextEditorOptions,\n /* @conditional-compile-remove(rich-text-editor-image-upload) */\n onInsertInlineImage: (imageAttributes: Record<string, string>, messageId: string) => {\n onInsertInlineImageForEditBox(\n imageAttributes,\n getImageFileNameFromAttributes(imageAttributes),\n messageId,\n adapter,\n handleEditBoxInlineImageUploadAction,\n localeStrings.chat\n );\n },\n /* @conditional-compile-remove(rich-text-editor-image-upload) */\n messagesInlineImagesWithProgress: getEditBoxMessagesInlineImages(editBoxInlineImageUploads),\n /* @conditional-compile-remove(rich-text-editor-image-upload) */\n onRemoveInlineImage: (imageAttributes: Record<string, string>, messageId: string) => {\n cancelInlineImageUpload(\n imageAttributes,\n editBoxInlineImageUploads,\n messageId,\n handleEditBoxInlineImageUploadAction,\n adapter\n );\n }\n }\n : undefined;\n }, [\n options?.richTextEditor,\n /* @conditional-compile-remove(rich-text-editor-image-upload) */ richTextEditorOptions,\n /* @conditional-compile-remove(rich-text-editor-image-upload) */ editBoxInlineImageUploads,\n /* @conditional-compile-remove(rich-text-editor-image-upload) */ adapter,\n /* @conditional-compile-remove(rich-text-editor-image-upload) */ localeStrings.chat\n ]);\n\n /* @conditional-compile-remove(rich-text-editor-composite-support) */\n const richTextSendBoxOptions: RichTextSendBoxOptions | undefined = useMemo(() => {\n return options?.richTextEditor\n ? {\n /* @conditional-compile-remove(rich-text-editor-image-upload) */\n ...richTextEditorOptions,\n /* @conditional-compile-remove(rich-text-editor-image-upload) */\n onInsertInlineImage: (imageAttributes: Record<string, string>) => {\n onInsertInlineImageForSendBox(\n imageAttributes,\n getImageFileNameFromAttributes(imageAttributes),\n adapter,\n handleSendBoxInlineImageUploadAction,\n localeStrings.chat\n );\n },\n /* @conditional-compile-remove(rich-text-editor-image-upload) */\n inlineImagesWithProgress: getSendBoxInlineImages(sendBoxInlineImageUploads),\n /* @conditional-compile-remove(rich-text-editor-image-upload) */\n onRemoveInlineImage: (imageAttributes: Record<string, string>) => {\n cancelInlineImageUpload(\n imageAttributes,\n sendBoxInlineImageUploads,\n SEND_BOX_UPLOADS_KEY_VALUE,\n handleSendBoxInlineImageUploadAction,\n adapter\n );\n }\n }\n : undefined;\n }, [\n options?.richTextEditor,\n /* @conditional-compile-remove(rich-text-editor-image-upload) */ richTextEditorOptions,\n /* @conditional-compile-remove(rich-text-editor-image-upload) */ sendBoxInlineImageUploads,\n /* @conditional-compile-remove(rich-text-editor-image-upload) */ localeStrings.chat,\n adapter\n ]);\n\n return (\n <Stack className={chatContainer} grow>\n {options?.topic !== false && <ChatHeader {...headerProps} />}\n <Stack className={chatArea} tokens={participantListContainerPadding} horizontal grow>\n <Stack className={chatWrapper} grow>\n {options?.errorBar !== false && <ErrorBar {...errorBarProps} />}\n {\n /* @conditional-compile-remove(file-sharing-acs) */\n <AttachmentDownloadErrorBar\n onDismissDownloadErrorMessage={useCallback(() => {\n setDownloadErrorMessage('');\n }, [])}\n attachmentDownloadErrorMessage={downloadErrorMessage || ''}\n />\n }\n <MessageThread\n {...messageThreadProps}\n onUpdateMessage={onUpdateMessageHandler}\n /* @conditional-compile-remove(rich-text-editor-image-upload) */\n onCancelEditMessage={onCancelEditMessageHandler}\n onRenderAvatar={onRenderAvatarCallback}\n onRenderMessage={onRenderMessage}\n /* @conditional-compile-remove(file-sharing-acs) */\n onRenderAttachmentDownloads={onRenderAttachmentDownloads}\n inlineImageOptions={inlineImageOptions}\n numberOfChatMessagesToReload={defaultNumberOfChatMessagesToReload}\n styles={messageThreadStyles}\n /* @conditional-compile-remove(rich-text-editor-composite-support) */\n richTextEditorOptions={richTextEditBoxOptions}\n />\n <Stack className={mergeStyles(sendboxContainerStyles)}>\n <div className={mergeStyles(typingIndicatorContainerStyles)}>\n {onRenderTypingIndicator ? (\n onRenderTypingIndicator(typingIndicatorProps.typingUsers)\n ) : (\n <TypingIndicator {...typingIndicatorProps} styles={typingIndicatorStyles} />\n )}\n </div>\n <Stack horizontal={formFactor === 'mobile'}>\n {formFactor === 'mobile' && (\n /* @conditional-compile-remove(file-sharing-acs) */\n <Stack verticalAlign=\"center\">{attachmentButton}</Stack>\n )}\n <Stack grow>\n <SendBoxPicker\n styles={sendBoxStyles}\n autoFocus={options?.autoFocus}\n /* @conditional-compile-remove(rich-text-editor-composite-support) */\n richTextEditorOptions={richTextSendBoxOptions}\n /* @conditional-compile-remove(file-sharing-acs) */\n attachments={attachments}\n /* @conditional-compile-remove(file-sharing-acs) */\n onCancelAttachmentUpload={onCancelUploadHandler}\n // we need to overwrite onSendMessage for SendBox because we need to clear attachment state\n // when submit button is clicked\n onSendMessage={onSendMessageHandler}\n />\n </Stack>\n {formFactor !== 'mobile' &&\n /* @conditional-compile-remove(file-sharing-acs) */\n attachmentButton}\n </Stack>\n </Stack>\n </Stack>\n {\n /* @conditional-compile-remove(chat-composite-participant-pane) */\n options?.participantPane === true && (\n <ChatScreenPeoplePane\n onFetchAvatarPersonaData={onFetchAvatarPersonaData}\n onFetchParticipantMenuItems={props.onFetchParticipantMenuItems}\n isMobile={formFactor === 'mobile'}\n />\n )\n }\n </Stack>\n {overlayImageItem && (\n <ImageOverlay\n {...overlayImageItem}\n isOpen={isImageOverlayOpen}\n onDismiss={() => {\n setOverlayImageItem(undefined);\n setIsImageOverlayOpen(false);\n adapter.removeResourceFromCache({\n threadId,\n messageId: overlayImageItem.messageId,\n resourceUrl: overlayImageItem.imageUrl\n });\n }}\n onDownloadButtonClicked={onDownloadButtonClicked}\n />\n )}\n </Stack>\n );\n};\n"]}
|
package/dist/dist-esm/react-composites/src/composites/ChatComposite/ImageUpload/ImageUploadUtils.js
CHANGED
@@ -56,10 +56,9 @@ export const getEditBoxMessagesInlineImages = (editBoxInlineImageUploads) => {
|
|
56
56
|
if (!editBoxInlineImageUploads) {
|
57
57
|
return;
|
58
58
|
}
|
59
|
-
const messageIds = Object.keys(editBoxInlineImageUploads || {});
|
60
59
|
const messagesInlineImagesWithProgress = {};
|
61
|
-
|
62
|
-
const messageUploads =
|
60
|
+
Object.entries(editBoxInlineImageUploads || {}).map(([messageId, attachmentUploads]) => {
|
61
|
+
const messageUploads = attachmentUploads.map((upload) => {
|
63
62
|
return upload.metadata;
|
64
63
|
});
|
65
64
|
messagesInlineImagesWithProgress[messageId] = messageUploads;
|
@@ -112,6 +111,14 @@ const inlineImageUploadHandler = (uploadTasks, adapter, strings) => __awaiter(vo
|
|
112
111
|
});
|
113
112
|
/* @conditional-compile-remove(rich-text-editor-image-upload) */
|
114
113
|
const generateUploadTask = (imageAttributes, fileName, messageId, inlineImageUploadActionHandler) => __awaiter(void 0, void 0, void 0, function* () {
|
114
|
+
if (!imageAttributes.src) {
|
115
|
+
console.error('Cannot upload image - Image src is not provided');
|
116
|
+
return;
|
117
|
+
}
|
118
|
+
if (!imageAttributes.id) {
|
119
|
+
console.error('Cannot upload image - Image id is not provided');
|
120
|
+
return;
|
121
|
+
}
|
115
122
|
const imageData = yield getInlineImageData(imageAttributes.src);
|
116
123
|
if (!imageData) {
|
117
124
|
return;
|
@@ -191,11 +198,16 @@ export const onInsertInlineImageForSendBox = (imageAttributes, fileName, adapter
|
|
191
198
|
* @internal
|
192
199
|
*/
|
193
200
|
export const cancelInlineImageUpload = (imageAttributes, imageUploads, messageId, inlineImageUploadActionHandler, adapter) => {
|
201
|
+
var _a;
|
202
|
+
if (!imageAttributes.id) {
|
203
|
+
console.error('Cannot cancel image upload - Image id is not provided');
|
204
|
+
return;
|
205
|
+
}
|
194
206
|
if (!imageUploads || !imageUploads[messageId]) {
|
195
207
|
deleteExistingInlineImageForEditBox(imageAttributes.id, messageId, adapter);
|
196
208
|
return;
|
197
209
|
}
|
198
|
-
const imageUpload = imageUploads[messageId].find((upload) => upload.metadata.id === imageAttributes.id);
|
210
|
+
const imageUpload = (_a = imageUploads[messageId]) === null || _a === void 0 ? void 0 : _a.find((upload) => upload.metadata.id === imageAttributes.id);
|
199
211
|
if (!imageUpload || !(imageUpload === null || imageUpload === void 0 ? void 0 : imageUpload.metadata.id)) {
|
200
212
|
deleteExistingInlineImageForEditBox(imageAttributes.id, messageId, adapter);
|
201
213
|
return;
|
@@ -237,7 +249,7 @@ export const updateContentStringWithUploadedInlineImages = (content, imageUpload
|
|
237
249
|
const document = new DOMParser().parseFromString(content !== null && content !== void 0 ? content : '', 'text/html');
|
238
250
|
document.querySelectorAll('img').forEach((img) => {
|
239
251
|
var _a;
|
240
|
-
const uploadInlineImage = messageUploads.find((upload) => !upload.metadata.error && upload.metadata.progress === 1 && upload.metadata.id === img.id);
|
252
|
+
const uploadInlineImage = messageUploads === null || messageUploads === void 0 ? void 0 : messageUploads.find((upload) => !upload.metadata.error && upload.metadata.progress === 1 && upload.metadata.id === img.id);
|
241
253
|
if (uploadInlineImage) {
|
242
254
|
// ChatSDK uses the respond id provided by the upload response. We store the response id in the image src attribute previously.
|
243
255
|
img.id = (_a = uploadInlineImage.metadata.url) !== null && _a !== void 0 ? _a : img.id;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"ImageUploadUtils.js","sourceRoot":"","sources":["../../../../../../../../react-composites/src/composites/ChatComposite/ImageUpload/ImageUploadUtils.tsx"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\nimport { AttachmentMetadataInProgress, _IMAGE_ATTRIBUTE_INLINE_IMAGE_FILE_NAME_KEY } from '@internal/acs-ui-common';\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\nimport { AttachmentUpload, AttachmentUploadActionType, AttachmentUploadTask } from '../file-sharing/AttachmentUpload';\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\nimport { _DEFAULT_INLINE_IMAGE_FILE_NAME, SEND_BOX_UPLOADS_KEY_VALUE } from '../../common/constants';\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\nimport { ChatAdapter } from '../adapter/ChatAdapter';\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\nimport { Dispatch } from 'react';\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\nimport { ImageActions } from './ImageUploadReducer';\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\nimport { nanoid } from 'nanoid';\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\nimport { ChatCompositeStrings } from '../Strings';\n\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\nconst MAX_INLINE_IMAGE_UPLOAD_SIZE_MB = 20;\n\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\nconst fetchBlobData = async (\n resource: string | URL | Request,\n options: { timeout?: number; headers?: Headers; abortController: AbortController }\n): Promise<Response> => {\n // default timeout is 30 seconds\n const { timeout = 30000, abortController } = options;\n\n const id = setTimeout(() => {\n abortController.abort();\n }, timeout);\n\n const response = await fetch(resource, {\n ...options,\n signal: abortController.signal\n });\n clearTimeout(id);\n return response;\n};\n\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\n/**\n * @private\n */\nexport const getInlineImageData = async (image: string): Promise<Blob | undefined> => {\n if (image.startsWith('blob') || image.startsWith('http')) {\n try {\n const res = await fetchBlobData(image, { abortController: new AbortController() });\n const blobImage = await res.blob();\n return blobImage;\n } catch (error) {\n console.error('Error fetching image data', error);\n return;\n }\n }\n return;\n};\n\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\n/**\n * @internal\n */\nexport const getEditBoxMessagesInlineImages = (\n editBoxInlineImageUploads: Record<string, AttachmentUpload[]> | undefined\n): Record<string, AttachmentMetadataInProgress[]> | undefined => {\n if (!editBoxInlineImageUploads) {\n return;\n }\n const messageIds = Object.keys(editBoxInlineImageUploads || {});\n const messagesInlineImagesWithProgress: Record<string, AttachmentMetadataInProgress[]> = {};\n messageIds.map((messageId) => {\n const messageUploads = editBoxInlineImageUploads[messageId].map((upload) => {\n return upload.metadata;\n });\n messagesInlineImagesWithProgress[messageId] = messageUploads;\n });\n return messagesInlineImagesWithProgress;\n};\n\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\n/**\n * @internal\n */\nexport const getSendBoxInlineImages = (\n sendBoxInlineImageUploads: Record<string, AttachmentUpload[]> | undefined\n): AttachmentMetadataInProgress[] | undefined => {\n if (!sendBoxInlineImageUploads) {\n return;\n }\n return sendBoxInlineImageUploads[SEND_BOX_UPLOADS_KEY_VALUE]?.map((upload) => upload.metadata);\n};\n\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\nconst inlineImageUploadHandler = async (\n uploadTasks: AttachmentUpload[],\n adapter: ChatAdapter,\n strings: ChatCompositeStrings\n): Promise<void> => {\n for (const task of uploadTasks) {\n const uploadTask = task as AttachmentUploadTask;\n const image: Blob | undefined = uploadTask.image;\n if (!image) {\n uploadTask.notifyUploadFailed(strings.uploadImageDataNotProvided);\n continue;\n }\n if (image && image.size > MAX_INLINE_IMAGE_UPLOAD_SIZE_MB * 1024 * 1024) {\n uploadTask.notifyUploadFailed(\n strings.uploadImageIsTooLarge.replace('{maxImageSize}', `${MAX_INLINE_IMAGE_UPLOAD_SIZE_MB}`)\n );\n continue;\n }\n\n const SUPPORTED_FILES: Array<string> = ['jpg', 'jpeg', 'png', 'gif', 'heic', 'webp'];\n const imageExtension = task.metadata?.name.split('.').pop() ?? '';\n if (!SUPPORTED_FILES.includes(imageExtension)) {\n uploadTask.notifyUploadFailed(\n strings.uploadImageExtensionIsNotAllowed.replace('{imageExtension}', imageExtension)\n );\n continue;\n }\n\n try {\n const response = await adapter.uploadImage(image, task.metadata?.name);\n // Use response id as the image src because we need to keep the original image id as a reference to find the image.\n // Also the html content we send to ChatSDK does not need image src,\n // it only need the response id to match the uploaded image, url is not needed.\n uploadTask.notifyUploadCompleted(task.metadata.id, response.id);\n } catch (error) {\n console.error(error);\n uploadTask.notifyUploadFailed(strings.uploadImageFailed);\n }\n }\n};\n\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\nconst generateUploadTask = async (\n imageAttributes: Record<string, string>,\n fileName: string,\n messageId: string,\n inlineImageUploadActionHandler: Dispatch<ImageActions>\n): Promise<AttachmentUpload | undefined> => {\n const imageData = await getInlineImageData(imageAttributes.src);\n if (!imageData) {\n return;\n }\n const taskId = nanoid();\n const uploadTask: AttachmentUpload = {\n image: imageData,\n taskId,\n metadata: {\n id: imageAttributes.id,\n name: fileName,\n url: imageAttributes.src,\n progress: 0\n },\n notifyUploadProgressChanged: (value: number) => {\n inlineImageUploadActionHandler({\n type: AttachmentUploadActionType.Progress,\n taskId,\n progress: value,\n messageId\n });\n },\n notifyUploadCompleted: (id: string, url: string) => {\n inlineImageUploadActionHandler({\n type: AttachmentUploadActionType.Completed,\n taskId,\n id,\n url,\n messageId\n });\n },\n notifyUploadFailed: (message: string) => {\n inlineImageUploadActionHandler({ type: AttachmentUploadActionType.Failed, taskId, message, messageId });\n // remove the failed upload task when error banner is auto dismissed after 10 seconds\n // so the banner won't be shown again on UI re-rendering.\n setTimeout(() => {\n inlineImageUploadActionHandler({ type: AttachmentUploadActionType.Remove, id: taskId, messageId });\n }, 10 * 1000);\n }\n };\n return uploadTask;\n};\n\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\n/**\n * @internal\n */\nexport const onInsertInlineImageForEditBox = async (\n imageAttributes: Record<string, string>,\n fileName: string,\n messageId: string,\n adapter: ChatAdapter,\n handleEditBoxInlineImageUploadAction: Dispatch<ImageActions>,\n chatCompositeStrings: ChatCompositeStrings\n): Promise<void> => {\n const uploadTask: AttachmentUpload | undefined = await generateUploadTask(\n imageAttributes,\n fileName,\n messageId,\n handleEditBoxInlineImageUploadAction\n );\n if (!uploadTask) {\n return;\n }\n\n handleEditBoxInlineImageUploadAction({\n type: AttachmentUploadActionType.Set,\n newUploads: [uploadTask],\n messageId\n });\n inlineImageUploadHandler([uploadTask], adapter, chatCompositeStrings);\n};\n\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\n/**\n * @internal\n */\nexport const onInsertInlineImageForSendBox = async (\n imageAttributes: Record<string, string>,\n fileName: string,\n adapter: ChatAdapter,\n handleSendBoxInlineImageUploadAction: Dispatch<ImageActions>,\n chatCompositeStrings: ChatCompositeStrings\n): Promise<void> => {\n const uploadTask: AttachmentUpload | undefined = await generateUploadTask(\n imageAttributes,\n fileName,\n SEND_BOX_UPLOADS_KEY_VALUE,\n handleSendBoxInlineImageUploadAction\n );\n\n if (!uploadTask) {\n return;\n }\n\n handleSendBoxInlineImageUploadAction({\n type: AttachmentUploadActionType.Set,\n newUploads: [uploadTask],\n messageId: SEND_BOX_UPLOADS_KEY_VALUE\n });\n inlineImageUploadHandler([uploadTask], adapter, chatCompositeStrings);\n};\n\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\n/**\n * @internal\n */\nexport const cancelInlineImageUpload = (\n imageAttributes: Record<string, string>,\n imageUploads: Record<string, AttachmentUpload[]> | undefined,\n messageId: string,\n inlineImageUploadActionHandler: Dispatch<ImageActions>,\n adapter: ChatAdapter\n): void => {\n if (!imageUploads || !imageUploads[messageId]) {\n deleteExistingInlineImageForEditBox(imageAttributes.id, messageId, adapter);\n return;\n }\n const imageUpload = imageUploads[messageId].find((upload) => upload.metadata.id === imageAttributes.id);\n\n if (!imageUpload || !imageUpload?.metadata.id) {\n deleteExistingInlineImageForEditBox(imageAttributes.id, messageId, adapter);\n return;\n }\n\n inlineImageUploadActionHandler({\n type: AttachmentUploadActionType.Remove,\n id: imageUpload?.metadata.id,\n messageId\n });\n\n if (imageUpload?.metadata.progress === 1 && imageUpload?.metadata.url) {\n // The image id that we got back from the ChatSDK response is stored in the image src attribute,\n // while the metadata id is the internal image id that we assigned to the image when it was pasted in.\n deleteInlineImageFromServer(imageUpload?.metadata.url, adapter);\n }\n};\n\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\nconst deleteInlineImageFromServer = (imageId: string, adapter: ChatAdapter): void => {\n try {\n adapter.deleteImage(imageId);\n } catch (error) {\n console.error(error);\n }\n};\n\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\n// This function is used to delete the inline image that existed before editing starts\nconst deleteExistingInlineImageForEditBox = (imageId: string, messageId: string, adapter: ChatAdapter): void => {\n messageId !== SEND_BOX_UPLOADS_KEY_VALUE && deleteInlineImageFromServer(imageId, adapter);\n};\n\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\n/**\n * @internal\n */\nexport const updateContentStringWithUploadedInlineImages = (\n content: string,\n imageUploads: Record<string, AttachmentUpload[]> | undefined,\n messageId: string = SEND_BOX_UPLOADS_KEY_VALUE\n): string => {\n if (!imageUploads || !imageUploads[messageId]) {\n return content;\n }\n const messageUploads = imageUploads[messageId];\n const document = new DOMParser().parseFromString(content ?? '', 'text/html');\n document.querySelectorAll('img').forEach((img) => {\n const uploadInlineImage = messageUploads.find(\n (upload) => !upload.metadata.error && upload.metadata.progress === 1 && upload.metadata.id === img.id\n );\n\n if (uploadInlineImage) {\n // ChatSDK uses the respond id provided by the upload response. We store the response id in the image src attribute previously.\n img.id = uploadInlineImage.metadata.url ?? img.id;\n img.src = '';\n }\n });\n content = document.body.innerHTML;\n\n return content;\n};\n\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\n/**\n * @internal\n */\nexport const getImageFileNameFromAttributes = (imageAttributes: Record<string, string>): string => {\n const fileName = imageAttributes[_IMAGE_ATTRIBUTE_INLINE_IMAGE_FILE_NAME_KEY];\n if (!fileName || fileName === '' || fileName === 'undefined' || fileName === 'null') {\n return _DEFAULT_INLINE_IMAGE_FILE_NAME;\n }\n return fileName;\n};\n"]}
|
1
|
+
{"version":3,"file":"ImageUploadUtils.js","sourceRoot":"","sources":["../../../../../../../../react-composites/src/composites/ChatComposite/ImageUpload/ImageUploadUtils.tsx"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\nimport { AttachmentMetadataInProgress, _IMAGE_ATTRIBUTE_INLINE_IMAGE_FILE_NAME_KEY } from '@internal/acs-ui-common';\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\nimport { AttachmentUpload, AttachmentUploadActionType, AttachmentUploadTask } from '../file-sharing/AttachmentUpload';\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\nimport { _DEFAULT_INLINE_IMAGE_FILE_NAME, SEND_BOX_UPLOADS_KEY_VALUE } from '../../common/constants';\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\nimport { ChatAdapter } from '../adapter/ChatAdapter';\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\nimport { Dispatch } from 'react';\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\nimport { ImageActions } from './ImageUploadReducer';\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\nimport { nanoid } from 'nanoid';\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\nimport { ChatCompositeStrings } from '../Strings';\n\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\nconst MAX_INLINE_IMAGE_UPLOAD_SIZE_MB = 20;\n\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\nconst fetchBlobData = async (\n resource: string | URL | Request,\n options: { timeout?: number; headers?: Headers; abortController: AbortController }\n): Promise<Response> => {\n // default timeout is 30 seconds\n const { timeout = 30000, abortController } = options;\n\n const id = setTimeout(() => {\n abortController.abort();\n }, timeout);\n\n const response = await fetch(resource, {\n ...options,\n signal: abortController.signal\n });\n clearTimeout(id);\n return response;\n};\n\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\n/**\n * @private\n */\nexport const getInlineImageData = async (image: string): Promise<Blob | undefined> => {\n if (image.startsWith('blob') || image.startsWith('http')) {\n try {\n const res = await fetchBlobData(image, { abortController: new AbortController() });\n const blobImage = await res.blob();\n return blobImage;\n } catch (error) {\n console.error('Error fetching image data', error);\n return;\n }\n }\n return;\n};\n\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\n/**\n * @internal\n */\nexport const getEditBoxMessagesInlineImages = (\n editBoxInlineImageUploads: Record<string, AttachmentUpload[]> | undefined\n): Record<string, AttachmentMetadataInProgress[]> | undefined => {\n if (!editBoxInlineImageUploads) {\n return;\n }\n\n const messagesInlineImagesWithProgress: Record<string, AttachmentMetadataInProgress[]> = {};\n Object.entries(editBoxInlineImageUploads || {}).map(([messageId, attachmentUploads]) => {\n const messageUploads = attachmentUploads.map((upload) => {\n return upload.metadata;\n });\n messagesInlineImagesWithProgress[messageId] = messageUploads;\n });\n return messagesInlineImagesWithProgress;\n};\n\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\n/**\n * @internal\n */\nexport const getSendBoxInlineImages = (\n sendBoxInlineImageUploads: Record<string, AttachmentUpload[]> | undefined\n): AttachmentMetadataInProgress[] | undefined => {\n if (!sendBoxInlineImageUploads) {\n return;\n }\n return sendBoxInlineImageUploads[SEND_BOX_UPLOADS_KEY_VALUE]?.map((upload) => upload.metadata);\n};\n\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\nconst inlineImageUploadHandler = async (\n uploadTasks: AttachmentUpload[],\n adapter: ChatAdapter,\n strings: ChatCompositeStrings\n): Promise<void> => {\n for (const task of uploadTasks) {\n const uploadTask = task as AttachmentUploadTask;\n const image: Blob | undefined = uploadTask.image;\n if (!image) {\n uploadTask.notifyUploadFailed(strings.uploadImageDataNotProvided);\n continue;\n }\n if (image && image.size > MAX_INLINE_IMAGE_UPLOAD_SIZE_MB * 1024 * 1024) {\n uploadTask.notifyUploadFailed(\n strings.uploadImageIsTooLarge.replace('{maxImageSize}', `${MAX_INLINE_IMAGE_UPLOAD_SIZE_MB}`)\n );\n continue;\n }\n\n const SUPPORTED_FILES: Array<string> = ['jpg', 'jpeg', 'png', 'gif', 'heic', 'webp'];\n const imageExtension = task.metadata?.name.split('.').pop() ?? '';\n if (!SUPPORTED_FILES.includes(imageExtension)) {\n uploadTask.notifyUploadFailed(\n strings.uploadImageExtensionIsNotAllowed.replace('{imageExtension}', imageExtension)\n );\n continue;\n }\n\n try {\n const response = await adapter.uploadImage(image, task.metadata?.name);\n // Use response id as the image src because we need to keep the original image id as a reference to find the image.\n // Also the html content we send to ChatSDK does not need image src,\n // it only need the response id to match the uploaded image, url is not needed.\n uploadTask.notifyUploadCompleted(task.metadata.id, response.id);\n } catch (error) {\n console.error(error);\n uploadTask.notifyUploadFailed(strings.uploadImageFailed);\n }\n }\n};\n\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\nconst generateUploadTask = async (\n imageAttributes: Record<string, string>,\n fileName: string,\n messageId: string,\n inlineImageUploadActionHandler: Dispatch<ImageActions>\n): Promise<AttachmentUpload | undefined> => {\n if (!imageAttributes.src) {\n console.error('Cannot upload image - Image src is not provided');\n return;\n }\n if (!imageAttributes.id) {\n console.error('Cannot upload image - Image id is not provided');\n return;\n }\n const imageData = await getInlineImageData(imageAttributes.src);\n if (!imageData) {\n return;\n }\n const taskId = nanoid();\n const uploadTask: AttachmentUpload = {\n image: imageData,\n taskId,\n metadata: {\n id: imageAttributes.id,\n name: fileName,\n url: imageAttributes.src,\n progress: 0\n },\n notifyUploadProgressChanged: (value: number) => {\n inlineImageUploadActionHandler({\n type: AttachmentUploadActionType.Progress,\n taskId,\n progress: value,\n messageId\n });\n },\n notifyUploadCompleted: (id: string, url: string) => {\n inlineImageUploadActionHandler({\n type: AttachmentUploadActionType.Completed,\n taskId,\n id,\n url,\n messageId\n });\n },\n notifyUploadFailed: (message: string) => {\n inlineImageUploadActionHandler({ type: AttachmentUploadActionType.Failed, taskId, message, messageId });\n // remove the failed upload task when error banner is auto dismissed after 10 seconds\n // so the banner won't be shown again on UI re-rendering.\n setTimeout(() => {\n inlineImageUploadActionHandler({ type: AttachmentUploadActionType.Remove, id: taskId, messageId });\n }, 10 * 1000);\n }\n };\n return uploadTask;\n};\n\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\n/**\n * @internal\n */\nexport const onInsertInlineImageForEditBox = async (\n imageAttributes: Record<string, string>,\n fileName: string,\n messageId: string,\n adapter: ChatAdapter,\n handleEditBoxInlineImageUploadAction: Dispatch<ImageActions>,\n chatCompositeStrings: ChatCompositeStrings\n): Promise<void> => {\n const uploadTask: AttachmentUpload | undefined = await generateUploadTask(\n imageAttributes,\n fileName,\n messageId,\n handleEditBoxInlineImageUploadAction\n );\n if (!uploadTask) {\n return;\n }\n\n handleEditBoxInlineImageUploadAction({\n type: AttachmentUploadActionType.Set,\n newUploads: [uploadTask],\n messageId\n });\n inlineImageUploadHandler([uploadTask], adapter, chatCompositeStrings);\n};\n\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\n/**\n * @internal\n */\nexport const onInsertInlineImageForSendBox = async (\n imageAttributes: Record<string, string>,\n fileName: string,\n adapter: ChatAdapter,\n handleSendBoxInlineImageUploadAction: Dispatch<ImageActions>,\n chatCompositeStrings: ChatCompositeStrings\n): Promise<void> => {\n const uploadTask: AttachmentUpload | undefined = await generateUploadTask(\n imageAttributes,\n fileName,\n SEND_BOX_UPLOADS_KEY_VALUE,\n handleSendBoxInlineImageUploadAction\n );\n\n if (!uploadTask) {\n return;\n }\n\n handleSendBoxInlineImageUploadAction({\n type: AttachmentUploadActionType.Set,\n newUploads: [uploadTask],\n messageId: SEND_BOX_UPLOADS_KEY_VALUE\n });\n inlineImageUploadHandler([uploadTask], adapter, chatCompositeStrings);\n};\n\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\n/**\n * @internal\n */\nexport const cancelInlineImageUpload = (\n imageAttributes: Record<string, string>,\n imageUploads: Record<string, AttachmentUpload[]> | undefined,\n messageId: string,\n inlineImageUploadActionHandler: Dispatch<ImageActions>,\n adapter: ChatAdapter\n): void => {\n if (!imageAttributes.id) {\n console.error('Cannot cancel image upload - Image id is not provided');\n return;\n }\n\n if (!imageUploads || !imageUploads[messageId]) {\n deleteExistingInlineImageForEditBox(imageAttributes.id, messageId, adapter);\n return;\n }\n const imageUpload = imageUploads[messageId]?.find((upload) => upload.metadata.id === imageAttributes.id);\n\n if (!imageUpload || !imageUpload?.metadata.id) {\n deleteExistingInlineImageForEditBox(imageAttributes.id, messageId, adapter);\n return;\n }\n\n inlineImageUploadActionHandler({\n type: AttachmentUploadActionType.Remove,\n id: imageUpload?.metadata.id,\n messageId\n });\n\n if (imageUpload?.metadata.progress === 1 && imageUpload?.metadata.url) {\n // The image id that we got back from the ChatSDK response is stored in the image src attribute,\n // while the metadata id is the internal image id that we assigned to the image when it was pasted in.\n deleteInlineImageFromServer(imageUpload?.metadata.url, adapter);\n }\n};\n\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\nconst deleteInlineImageFromServer = (imageId: string, adapter: ChatAdapter): void => {\n try {\n adapter.deleteImage(imageId);\n } catch (error) {\n console.error(error);\n }\n};\n\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\n// This function is used to delete the inline image that existed before editing starts\nconst deleteExistingInlineImageForEditBox = (imageId: string, messageId: string, adapter: ChatAdapter): void => {\n messageId !== SEND_BOX_UPLOADS_KEY_VALUE && deleteInlineImageFromServer(imageId, adapter);\n};\n\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\n/**\n * @internal\n */\nexport const updateContentStringWithUploadedInlineImages = (\n content: string,\n imageUploads: Record<string, AttachmentUpload[]> | undefined,\n messageId: string = SEND_BOX_UPLOADS_KEY_VALUE\n): string => {\n if (!imageUploads || !imageUploads[messageId]) {\n return content;\n }\n const messageUploads = imageUploads[messageId];\n const document = new DOMParser().parseFromString(content ?? '', 'text/html');\n document.querySelectorAll('img').forEach((img) => {\n const uploadInlineImage = messageUploads?.find(\n (upload) => !upload.metadata.error && upload.metadata.progress === 1 && upload.metadata.id === img.id\n );\n\n if (uploadInlineImage) {\n // ChatSDK uses the respond id provided by the upload response. We store the response id in the image src attribute previously.\n img.id = uploadInlineImage.metadata.url ?? img.id;\n img.src = '';\n }\n });\n content = document.body.innerHTML;\n\n return content;\n};\n\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\n/**\n * @internal\n */\nexport const getImageFileNameFromAttributes = (imageAttributes: Record<string, string>): string => {\n const fileName = imageAttributes[_IMAGE_ATTRIBUTE_INLINE_IMAGE_FILE_NAME_KEY];\n if (!fileName || fileName === '' || fileName === 'undefined' || fileName === 'null') {\n return _DEFAULT_INLINE_IMAGE_FILE_NAME;\n }\n return fileName;\n};\n"]}
|