@azure/communication-react 1.5.1-alpha-202304040013 → 1.5.1-beta.2
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/CHANGELOG.beta.md +76 -1
- package/CHANGELOG.json +621 -0
- package/dist/communication-react.d.ts +160 -192
- package/dist/dist-cjs/communication-react/index.js +1615 -2195
- package/dist/dist-cjs/communication-react/index.js.map +1 -1
- package/dist/dist-esm/acs-ui-common/src/telemetryVersion.js +1 -1
- package/dist/dist-esm/acs-ui-common/src/telemetryVersion.js.map +1 -1
- package/dist/dist-esm/chat-component-bindings/src/messageThreadSelector.js +2 -29
- package/dist/dist-esm/chat-component-bindings/src/messageThreadSelector.js.map +1 -1
- package/dist/dist-esm/chat-component-bindings/src/utils/constants.d.ts +0 -4
- package/dist/dist-esm/chat-component-bindings/src/utils/constants.js +0 -4
- package/dist/dist-esm/chat-component-bindings/src/utils/constants.js.map +1 -1
- package/dist/dist-esm/chat-component-bindings/src/utils/updateMessagesWithAttached.js +26 -32
- package/dist/dist-esm/chat-component-bindings/src/utils/updateMessagesWithAttached.js.map +1 -1
- package/dist/dist-esm/chat-stateful-client/src/convertChatMessage.js +1 -6
- package/dist/dist-esm/chat-stateful-client/src/convertChatMessage.js.map +1 -1
- package/dist/dist-esm/chat-stateful-client/src/types/ChatMessageWithStatus.d.ts +0 -1
- package/dist/dist-esm/chat-stateful-client/src/types/ChatMessageWithStatus.js.map +1 -1
- package/dist/dist-esm/communication-react/src/index.d.ts +0 -2
- package/dist/dist-esm/communication-react/src/index.js.map +1 -1
- package/dist/dist-esm/react-components/src/components/CaptionsBanner.js +29 -31
- package/dist/dist-esm/react-components/src/components/CaptionsBanner.js.map +1 -1
- package/dist/dist-esm/react-components/src/components/ChatMessage/ChatMessageComponent.d.ts +1 -2
- package/dist/dist-esm/react-components/src/components/ChatMessage/ChatMessageComponent.js +13 -11
- package/dist/dist-esm/react-components/src/components/ChatMessage/ChatMessageComponent.js.map +1 -1
- package/dist/dist-esm/react-components/src/components/ChatMessage/ChatMessageComponentAsMessageBubble.d.ts +1 -2
- package/dist/dist-esm/react-components/src/components/ChatMessage/ChatMessageComponentAsMessageBubble.js +20 -34
- package/dist/dist-esm/react-components/src/components/ChatMessage/ChatMessageComponentAsMessageBubble.js.map +1 -1
- package/dist/dist-esm/react-components/src/components/ChatMessage/ChatMessageContent.d.ts +2 -11
- package/dist/dist-esm/react-components/src/components/ChatMessage/ChatMessageContent.js +9 -47
- package/dist/dist-esm/react-components/src/components/ChatMessage/ChatMessageContent.js.map +1 -1
- package/dist/dist-esm/react-components/src/components/FileDownloadCards.d.ts +0 -7
- package/dist/dist-esm/react-components/src/components/FileDownloadCards.js +1 -5
- package/dist/dist-esm/react-components/src/components/FileDownloadCards.js.map +1 -1
- package/dist/dist-esm/react-components/src/components/MessageThread.d.ts +3 -10
- package/dist/dist-esm/react-components/src/components/MessageThread.js +36 -57
- package/dist/dist-esm/react-components/src/components/MessageThread.js.map +1 -1
- package/dist/dist-esm/react-components/src/components/index.d.ts +0 -1
- package/dist/dist-esm/react-components/src/components/index.js +0 -1
- package/dist/dist-esm/react-components/src/components/index.js.map +1 -1
- package/dist/dist-esm/react-components/src/components/styles/CaptionsBanner.style.d.ts +13 -0
- package/dist/dist-esm/react-components/src/components/styles/CaptionsBanner.style.js +35 -0
- package/dist/dist-esm/react-components/src/components/styles/CaptionsBanner.style.js.map +1 -0
- package/dist/dist-esm/react-components/src/components/styles/MessageThread.styles.d.ts +0 -5
- package/dist/dist-esm/react-components/src/components/styles/MessageThread.styles.js +0 -28
- package/dist/dist-esm/react-components/src/components/styles/MessageThread.styles.js.map +1 -1
- package/dist/dist-esm/react-components/src/components/utils/getParticipantsWhoHaveReadMessage.d.ts +4 -6
- package/dist/dist-esm/react-components/src/components/utils/getParticipantsWhoHaveReadMessage.js +1 -1
- package/dist/dist-esm/react-components/src/components/utils/getParticipantsWhoHaveReadMessage.js.map +1 -1
- package/dist/dist-esm/react-components/src/index.d.ts +0 -1
- package/dist/dist-esm/react-components/src/index.js.map +1 -1
- package/dist/dist-esm/react-components/src/localization/locales/de-DE/strings.json +116 -11
- package/dist/dist-esm/react-components/src/localization/locales/en-GB/strings.json +115 -10
- package/dist/dist-esm/react-components/src/localization/locales/en-US/strings.json +1 -3
- package/dist/dist-esm/react-components/src/localization/locales/es-ES/strings.json +115 -10
- package/dist/dist-esm/react-components/src/localization/locales/fr-FR/strings.json +116 -11
- package/dist/dist-esm/react-components/src/localization/locales/it-IT/strings.json +115 -10
- package/dist/dist-esm/react-components/src/localization/locales/ja-JP/strings.json +115 -10
- package/dist/dist-esm/react-components/src/localization/locales/ko-KR/strings.json +115 -10
- package/dist/dist-esm/react-components/src/localization/locales/nl-NL/strings.json +115 -10
- package/dist/dist-esm/react-components/src/localization/locales/pt-BR/strings.json +116 -11
- package/dist/dist-esm/react-components/src/localization/locales/ru-RU/strings.json +115 -10
- package/dist/dist-esm/react-components/src/localization/locales/tr-TR/strings.json +116 -11
- package/dist/dist-esm/react-components/src/localization/locales/zh-CN/strings.json +115 -10
- package/dist/dist-esm/react-components/src/localization/locales/zh-TW/strings.json +115 -10
- package/dist/dist-esm/react-components/src/theming/icons.d.ts +0 -1
- package/dist/dist-esm/react-components/src/theming/icons.js +0 -8
- package/dist/dist-esm/react-components/src/theming/icons.js.map +1 -1
- package/dist/dist-esm/react-components/src/types/ChatMessage.d.ts +1 -20
- package/dist/dist-esm/react-components/src/types/ChatMessage.js.map +1 -1
- package/dist/dist-esm/react-composites/src/composites/CallComposite/Strings.d.ts +0 -20
- package/dist/dist-esm/react-composites/src/composites/CallComposite/Strings.js.map +1 -1
- package/dist/dist-esm/react-composites/src/composites/CallComposite/adapter/AzureCommunicationCallAdapter.d.ts +1 -7
- package/dist/dist-esm/react-composites/src/composites/CallComposite/adapter/AzureCommunicationCallAdapter.js +2 -14
- 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 +0 -8
- package/dist/dist-esm/react-composites/src/composites/CallComposite/adapter/CallAdapter.js.map +1 -1
- package/dist/dist-esm/react-composites/src/composites/CallComposite/components/CallArrangement.js +20 -93
- package/dist/dist-esm/react-composites/src/composites/CallComposite/components/CallArrangement.js.map +1 -1
- package/dist/dist-esm/react-composites/src/composites/CallComposite/components/buttons/Camera.d.ts +1 -1
- package/dist/dist-esm/react-composites/src/composites/CallComposite/components/buttons/Camera.js.map +1 -1
- package/dist/dist-esm/react-composites/src/composites/CallComposite/components/buttons/Custom.d.ts +3 -9
- package/dist/dist-esm/react-composites/src/composites/CallComposite/components/buttons/Custom.js +1 -3
- package/dist/dist-esm/react-composites/src/composites/CallComposite/components/buttons/Custom.js.map +1 -1
- package/dist/dist-esm/react-composites/src/composites/CallComposite/components/buttons/Devices.d.ts +1 -1
- package/dist/dist-esm/react-composites/src/composites/CallComposite/components/buttons/Devices.js.map +1 -1
- package/dist/dist-esm/react-composites/src/composites/CallComposite/components/buttons/EndCall.d.ts +1 -1
- package/dist/dist-esm/react-composites/src/composites/CallComposite/components/buttons/EndCall.js.map +1 -1
- package/dist/dist-esm/react-composites/src/composites/CallComposite/components/buttons/Microphone.d.ts +1 -1
- package/dist/dist-esm/react-composites/src/composites/CallComposite/components/buttons/Microphone.js.map +1 -1
- package/dist/dist-esm/react-composites/src/composites/CallComposite/components/buttons/Participants.d.ts +1 -1
- package/dist/dist-esm/react-composites/src/composites/CallComposite/components/buttons/Participants.js.map +1 -1
- package/dist/dist-esm/react-composites/src/composites/CallComposite/components/buttons/ScreenShare.d.ts +1 -1
- package/dist/dist-esm/react-composites/src/composites/CallComposite/components/buttons/ScreenShare.js.map +1 -1
- package/dist/dist-esm/react-composites/src/composites/CallComposite/index.d.ts +2 -2
- package/dist/dist-esm/react-composites/src/composites/CallComposite/index.js.map +1 -1
- package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/ConfigurationPage.js +1 -19
- package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/ConfigurationPage.js.map +1 -1
- package/dist/dist-esm/react-composites/src/composites/CallComposite/styles/CallConfiguration.styles.d.ts +1 -5
- package/dist/dist-esm/react-composites/src/composites/CallComposite/styles/CallConfiguration.styles.js +0 -20
- package/dist/dist-esm/react-composites/src/composites/CallComposite/styles/CallConfiguration.styles.js.map +1 -1
- package/dist/dist-esm/react-composites/src/composites/CallComposite/types/CallControlOptions.d.ts +87 -5
- package/dist/dist-esm/react-composites/src/composites/CallComposite/types/CallControlOptions.js.map +1 -1
- package/dist/dist-esm/react-composites/src/composites/CallComposite/utils/Utils.js.map +1 -1
- package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/CallWithChatComposite.d.ts +75 -15
- package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/CallWithChatComposite.js +5 -7
- package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/CallWithChatComposite.js.map +1 -1
- package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/CallWithChatControlBar.d.ts +28 -0
- package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/CallWithChatControlBar.js +194 -0
- package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/CallWithChatControlBar.js.map +1 -0
- package/dist/dist-esm/react-composites/src/composites/{common/ControlBar → CallWithChatComposite}/CustomButton.d.ts +16 -19
- package/dist/dist-esm/react-composites/src/composites/{common/ControlBar → CallWithChatComposite}/CustomButton.js +4 -4
- package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/CustomButton.js.map +1 -0
- package/dist/dist-esm/react-composites/src/composites/{common/ControlBar → CallWithChatComposite}/PeopleButton.d.ts +1 -1
- package/dist/dist-esm/react-composites/src/composites/{common/ControlBar → CallWithChatComposite}/PeopleButton.js +3 -3
- package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/PeopleButton.js.map +1 -0
- package/dist/dist-esm/react-composites/src/composites/{common/Drawer → CallWithChatComposite}/PreparedMoreDrawer.d.ts +2 -2
- package/dist/dist-esm/react-composites/src/composites/{common/Drawer → CallWithChatComposite}/PreparedMoreDrawer.js +5 -5
- package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/PreparedMoreDrawer.js.map +1 -0
- package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/AzureCommunicationCallWithChatAdapter.d.ts +0 -2
- package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/AzureCommunicationCallWithChatAdapter.js +1 -7
- 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 +0 -10
- 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 +0 -2
- package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/CallWithChatBackedCallAdapter.js +1 -7
- package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/CallWithChatBackedCallAdapter.js.map +1 -1
- package/dist/dist-esm/react-composites/src/composites/{common/ControlBar → CallWithChatComposite/components}/DesktopMoreButton.d.ts +2 -2
- package/dist/dist-esm/react-composites/src/composites/{common/ControlBar → CallWithChatComposite/components}/DesktopMoreButton.js +3 -3
- package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/components/DesktopMoreButton.js.map +1 -0
- package/dist/dist-esm/react-composites/src/composites/{common/Drawer → CallWithChatComposite/components}/MoreDrawer.d.ts +2 -2
- package/dist/dist-esm/react-composites/src/composites/{common/Drawer → CallWithChatComposite/components}/MoreDrawer.js +5 -4
- package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/components/MoreDrawer.js.map +1 -0
- package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/index.d.ts +1 -1
- package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/index.js.map +1 -1
- package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/state/CallWithChatAdapterState.d.ts +0 -3
- package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/state/CallWithChatAdapterState.js +2 -6
- package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/state/CallWithChatAdapterState.js.map +1 -1
- package/dist/dist-esm/react-composites/src/composites/ChatComposite/adapter/AzureCommunicationChatAdapter.d.ts +0 -1
- package/dist/dist-esm/react-composites/src/composites/ChatComposite/adapter/AzureCommunicationChatAdapter.js +0 -11
- package/dist/dist-esm/react-composites/src/composites/ChatComposite/adapter/AzureCommunicationChatAdapter.js.map +1 -1
- package/dist/dist-esm/react-composites/src/composites/ChatComposite/adapter/AzureCommunicationFileUploadAdapter.d.ts +1 -4
- package/dist/dist-esm/react-composites/src/composites/ChatComposite/adapter/AzureCommunicationFileUploadAdapter.js +1 -29
- package/dist/dist-esm/react-composites/src/composites/ChatComposite/adapter/AzureCommunicationFileUploadAdapter.js.map +1 -1
- package/dist/dist-esm/react-composites/src/composites/common/VideoEffectsPane.d.ts +0 -2
- package/dist/dist-esm/react-composites/src/composites/common/VideoEffectsPane.js +3 -88
- package/dist/dist-esm/react-composites/src/composites/common/VideoEffectsPane.js.map +1 -1
- package/dist/dist-esm/react-composites/src/composites/common/icons.d.ts +1 -7
- package/dist/dist-esm/react-composites/src/composites/common/icons.js +1 -7
- package/dist/dist-esm/react-composites/src/composites/common/icons.js.map +1 -1
- package/dist/dist-esm/react-composites/src/composites/index.d.ts +0 -3
- package/dist/dist-esm/react-composites/src/composites/index.js.map +1 -1
- package/dist/dist-esm/react-composites/src/composites/localization/locales/de-DE/strings.json +17 -3
- package/dist/dist-esm/react-composites/src/composites/localization/locales/en-GB/strings.json +17 -3
- package/dist/dist-esm/react-composites/src/composites/localization/locales/en-US/strings.json +0 -5
- package/dist/dist-esm/react-composites/src/composites/localization/locales/es-ES/strings.json +17 -3
- package/dist/dist-esm/react-composites/src/composites/localization/locales/fr-FR/strings.json +17 -3
- package/dist/dist-esm/react-composites/src/composites/localization/locales/it-IT/strings.json +17 -3
- package/dist/dist-esm/react-composites/src/composites/localization/locales/ja-JP/strings.json +17 -3
- package/dist/dist-esm/react-composites/src/composites/localization/locales/ko-KR/strings.json +17 -3
- package/dist/dist-esm/react-composites/src/composites/localization/locales/nl-NL/strings.json +17 -3
- package/dist/dist-esm/react-composites/src/composites/localization/locales/pt-BR/strings.json +17 -3
- package/dist/dist-esm/react-composites/src/composites/localization/locales/ru-RU/strings.json +17 -3
- package/dist/dist-esm/react-composites/src/composites/localization/locales/tr-TR/strings.json +17 -3
- package/dist/dist-esm/react-composites/src/composites/localization/locales/zh-CN/strings.json +17 -3
- package/dist/dist-esm/react-composites/src/composites/localization/locales/zh-TW/strings.json +17 -3
- package/package.json +10 -10
- package/dist/dist-esm/react-components/src/components/Caption.d.ts +0 -21
- package/dist/dist-esm/react-components/src/components/Caption.js +0 -32
- package/dist/dist-esm/react-components/src/components/Caption.js.map +0 -1
- package/dist/dist-esm/react-components/src/components/styles/Captions.style.d.ts +0 -21
- package/dist/dist-esm/react-components/src/components/styles/Captions.style.js +0 -41
- package/dist/dist-esm/react-components/src/components/styles/Captions.style.js.map +0 -1
- package/dist/dist-esm/react-composites/src/composites/common/ControlBar/CommonCallControlBar.d.ts +0 -30
- package/dist/dist-esm/react-composites/src/composites/common/ControlBar/CommonCallControlBar.js +0 -253
- package/dist/dist-esm/react-composites/src/composites/common/ControlBar/CommonCallControlBar.js.map +0 -1
- package/dist/dist-esm/react-composites/src/composites/common/ControlBar/CustomButton.js.map +0 -1
- package/dist/dist-esm/react-composites/src/composites/common/ControlBar/DesktopMoreButton.js.map +0 -1
- package/dist/dist-esm/react-composites/src/composites/common/ControlBar/PeopleButton.js.map +0 -1
- package/dist/dist-esm/react-composites/src/composites/common/Drawer/MoreDrawer.js.map +0 -1
- package/dist/dist-esm/react-composites/src/composites/common/Drawer/PreparedMoreDrawer.js.map +0 -1
- package/dist/dist-esm/react-composites/src/composites/common/types/CommonCallControlOptions.d.ts +0 -165
- package/dist/dist-esm/react-composites/src/composites/common/types/CommonCallControlOptions.js +0 -4
- package/dist/dist-esm/react-composites/src/composites/common/types/CommonCallControlOptions.js.map +0 -1
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"AzureCommunicationChatAdapter.js","sourceRoot":"","sources":["../../../../../../../../react-composites/src/composites/ChatComposite/adapter/AzureCommunicationChatAdapter.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport {\n createStatefulChatClient,\n ChatClientState,\n ChatError,\n StatefulChatClient\n} from '@internal/chat-stateful-client';\nimport { ChatHandlers, createDefaultChatHandlers } from '@internal/chat-component-bindings';\nimport { ChatMessage, ChatMessageType, ChatThreadClient, SendMessageOptions } from '@azure/communication-chat';\nimport { CommunicationTokenCredential, CommunicationUserIdentifier } from '@azure/communication-common';\nimport type {\n ChatMessageReceivedEvent,\n ChatThreadPropertiesUpdatedEvent,\n ParticipantsAddedEvent,\n ParticipantsRemovedEvent,\n ReadReceiptReceivedEvent\n} from '@azure/communication-chat';\nimport { toFlatCommunicationIdentifier } from '@internal/acs-ui-common';\nimport EventEmitter from 'events';\nimport {\n ChatAdapter,\n ChatAdapterState,\n MessageReadListener,\n MessageReceivedListener,\n ParticipantsAddedListener,\n ParticipantsRemovedListener,\n TopicChangedListener\n} from './ChatAdapter';\nimport { AdapterError } from '../../common/adapters';\n/* @conditional-compile-remove(file-sharing) */\nimport {\n FileUploadAdapter,\n AzureCommunicationFileUploadAdapter,\n convertFileUploadsUiStateToMessageMetadata\n} from './AzureCommunicationFileUploadAdapter';\nimport { useEffect, useRef, useState } from 'react';\nimport { FileMetadata } from '@internal/react-components';\n/* @conditional-compile-remove(file-sharing) */\nimport { FileUploadManager } from '../file-sharing';\nimport { isValidIdentifier } from '../../CallComposite/utils/Utils';\n\n/**\n * Context of Chat, which is a centralized context for all state updates\n * @private\n */\nexport class ChatContext {\n private emitter: EventEmitter = new EventEmitter();\n private state: ChatAdapterState;\n private threadId: string;\n\n constructor(clientState: ChatClientState, threadId: string) {\n const thread = clientState.threads[threadId];\n this.threadId = threadId;\n if (!thread) {\n throw 'Cannot find threadId, please initialize thread before use!';\n }\n this.state = {\n userId: clientState.userId,\n displayName: clientState.displayName,\n thread,\n latestErrors: clientState.latestErrors\n };\n }\n\n public onStateChange(handler: (_uiState: ChatAdapterState) => void): void {\n this.emitter.on('stateChanged', handler);\n }\n\n public offStateChange(handler: (_uiState: ChatAdapterState) => void): void {\n this.emitter.off('stateChanged', handler);\n }\n\n public setState(state: ChatAdapterState): void {\n this.state = state;\n this.emitter.emit('stateChanged', this.state);\n }\n\n public getState(): ChatAdapterState {\n return this.state;\n }\n\n public setError(error: Error): void {\n this.setState({ ...this.state, error });\n }\n\n public updateClientState(clientState: ChatClientState): void {\n const thread = clientState.threads[this.threadId];\n if (!thread) {\n throw 'Cannot find threadId, please make sure thread state is still in Stateful ChatClient.';\n }\n\n let updatedState: ChatAdapterState = {\n userId: clientState.userId,\n displayName: clientState.displayName,\n thread,\n latestErrors: clientState.latestErrors\n };\n\n /* @conditional-compile-remove(file-sharing) */\n updatedState = { ...updatedState, fileUploads: this.state.fileUploads };\n\n this.setState(updatedState);\n }\n}\n\n/**\n * @private\n */\nexport class AzureCommunicationChatAdapter implements ChatAdapter {\n private chatClient: StatefulChatClient;\n private chatThreadClient: ChatThreadClient;\n private context: ChatContext;\n /* @conditional-compile-remove(file-sharing) */ /* @conditional-compile-remove(teams-inline-images) */\n private fileUploadAdapter: FileUploadAdapter;\n private handlers: ChatHandlers;\n private emitter: EventEmitter = new EventEmitter();\n\n constructor(chatClient: StatefulChatClient, chatThreadClient: ChatThreadClient) {\n this.bindAllPublicMethods();\n this.chatClient = chatClient;\n this.chatThreadClient = chatThreadClient;\n this.context = new ChatContext(chatClient.getState(), chatThreadClient.threadId);\n /* @conditional-compile-remove(file-sharing) */\n this.fileUploadAdapter = new AzureCommunicationFileUploadAdapter(this.context);\n const onStateChange = (clientState: ChatClientState): void => {\n // unsubscribe when the instance gets disposed\n if (!this) {\n chatClient.offStateChange(onStateChange);\n return;\n }\n this.context.updateClientState(clientState);\n };\n\n this.handlers = createDefaultChatHandlers(chatClient, chatThreadClient);\n\n this.chatClient.onStateChange(onStateChange);\n this.subscribeAllEvents();\n }\n\n private bindAllPublicMethods(): void {\n this.onStateChange = this.onStateChange.bind(this);\n this.offStateChange = this.offStateChange.bind(this);\n this.getState = this.getState.bind(this);\n this.dispose = this.dispose.bind(this);\n this.fetchInitialData = this.fetchInitialData.bind(this);\n this.sendMessage = this.sendMessage.bind(this);\n this.sendReadReceipt = this.sendReadReceipt.bind(this);\n this.sendTypingIndicator = this.sendTypingIndicator.bind(this);\n this.updateMessage = this.updateMessage.bind(this);\n this.deleteMessage = this.deleteMessage.bind(this);\n this.removeParticipant = this.removeParticipant.bind(this);\n this.setTopic = this.setTopic.bind(this);\n this.loadPreviousChatMessages = this.loadPreviousChatMessages.bind(this);\n this.on = this.on.bind(this);\n this.off = this.off.bind(this);\n /* @conditional-compile-remove(file-sharing) */\n this.registerActiveFileUploads = this.registerActiveFileUploads.bind(this);\n /* @conditional-compile-remove(file-sharing) */\n this.registerCompletedFileUploads = this.registerCompletedFileUploads.bind(this);\n /* @conditional-compile-remove(file-sharing) */\n this.clearFileUploads = this.clearFileUploads.bind(this);\n /* @conditional-compile-remove(file-sharing) */\n this.cancelFileUpload = this.cancelFileUpload.bind(this);\n /* @conditional-compile-remove(file-sharing) */\n this.updateFileUploadProgress = this.updateFileUploadProgress.bind(this);\n /* @conditional-compile-remove(file-sharing) */\n this.updateFileUploadErrorMessage = this.updateFileUploadErrorMessage.bind(this);\n /* @conditional-compile-remove(file-sharing) */\n this.updateFileUploadMetadata = this.updateFileUploadMetadata.bind(this);\n /* @conditional-compile-remove(teams-inline-images) */\n this.downloadAuthenticatedAttachment = this.downloadAuthenticatedAttachment.bind(this);\n }\n\n dispose(): void {\n this.unsubscribeAllEvents();\n }\n\n async fetchInitialData(): Promise<void> {\n // If get properties fails we dont want to try to get the participants after.\n await this.asyncTeeErrorToEventEmitter(async () => {\n await this.chatThreadClient.getProperties();\n // Fetch all participants who joined before the local user.\n for await (const _page of this.chatThreadClient.listParticipants().byPage({\n // Fetch 100 participants per page by default.\n maxPageSize: 100\n // eslint-disable-next-line curly\n }));\n });\n }\n\n getState(): ChatAdapterState {\n return this.context.getState();\n }\n\n onStateChange(handler: (state: ChatAdapterState) => void): void {\n this.context.onStateChange(handler);\n }\n\n offStateChange(handler: (state: ChatAdapterState) => void): void {\n this.context.offStateChange(handler);\n }\n\n async sendMessage(content: string, options: SendMessageOptions = {}): Promise<void> {\n await this.asyncTeeErrorToEventEmitter(async () => {\n /* @conditional-compile-remove(file-sharing) */\n options.metadata = {\n ...options.metadata,\n ...convertFileUploadsUiStateToMessageMetadata(this.context.getState().fileUploads)\n };\n\n /* @conditional-compile-remove(file-sharing) */\n /**\n * All the current uploads need to be clear from the state before a message has been sent.\n * This ensures the following behavior:\n * 1. File Upload cards are removed from sendbox at the same time text in sendbox is removed.\n * 2. any component rendering these file uploads doesn't continue to do so.\n * 3. Cleans the state for new file uploads with a fresh message.\n */\n this.fileUploadAdapter.clearFileUploads();\n\n await this.handlers.onSendMessage(content, options);\n });\n }\n\n async sendReadReceipt(chatMessageId: string): Promise<void> {\n await this.asyncTeeErrorToEventEmitter(async () => {\n await this.handlers.onMessageSeen(chatMessageId);\n });\n }\n\n async sendTypingIndicator(): Promise<void> {\n await this.asyncTeeErrorToEventEmitter(async () => {\n await this.handlers.onTyping();\n });\n }\n\n async removeParticipant(userId: string): Promise<void> {\n await this.asyncTeeErrorToEventEmitter(async () => {\n await this.handlers.onRemoveParticipant(userId);\n });\n }\n\n async setTopic(topicName: string): Promise<void> {\n await this.asyncTeeErrorToEventEmitter(async () => {\n await this.handlers.updateThreadTopicName(topicName);\n });\n }\n\n async loadPreviousChatMessages(messagesToLoad: number): Promise<boolean> {\n return await this.asyncTeeErrorToEventEmitter(async () => {\n return await this.handlers.onLoadPreviousChatMessages(messagesToLoad);\n });\n }\n\n async updateMessage(\n messageId: string,\n content: string,\n metadata?: Record<string, string>,\n options?: {\n attachedFilesMetadata?: FileMetadata[];\n }\n ): Promise<void> {\n return await this.asyncTeeErrorToEventEmitter(async () => {\n /* @conditional-compile-remove(file-sharing) */\n return await this.handlers.onUpdateMessage(messageId, content, metadata, options);\n return await this.handlers.onUpdateMessage(messageId, content);\n });\n }\n\n async deleteMessage(messageId: string): Promise<void> {\n return await this.asyncTeeErrorToEventEmitter(async () => {\n return await this.handlers.onDeleteMessage(messageId);\n });\n }\n\n /* @conditional-compile-remove(file-sharing) */\n registerActiveFileUploads(files: File[]): FileUploadManager[] {\n return this.fileUploadAdapter.registerActiveFileUploads(files);\n }\n\n /* @conditional-compile-remove(file-sharing) */\n registerCompletedFileUploads(metadata: FileMetadata[]): FileUploadManager[] {\n return this.fileUploadAdapter.registerCompletedFileUploads(metadata);\n }\n\n /* @conditional-compile-remove(file-sharing) */\n clearFileUploads(): void {\n this.fileUploadAdapter.clearFileUploads();\n }\n\n /* @conditional-compile-remove(file-sharing) */\n cancelFileUpload(id: string): void {\n this.fileUploadAdapter.cancelFileUpload(id);\n }\n\n /* @conditional-compile-remove(file-sharing) */\n updateFileUploadProgress(id: string, progress: number): void {\n this.fileUploadAdapter.updateFileUploadProgress(id, progress);\n }\n\n /* @conditional-compile-remove(file-sharing) */\n updateFileUploadErrorMessage(id: string, errorMessage: string): void {\n this.fileUploadAdapter.updateFileUploadErrorMessage(id, errorMessage);\n }\n\n /* @conditional-compile-remove(file-sharing) */\n updateFileUploadMetadata(id: string, metadata: FileMetadata): void {\n this.fileUploadAdapter.updateFileUploadMetadata(id, metadata);\n }\n\n /* @conditional-compile-remove(teams-inline-images) */\n async downloadAuthenticatedAttachment(attachmentUrl: string): Promise<string> {\n if (!this.fileUploadAdapter.downloadAuthenticatedAttachment) {\n return '';\n }\n\n return await this.fileUploadAdapter.downloadAuthenticatedAttachment(attachmentUrl);\n }\n\n private messageReceivedListener(event: ChatMessageReceivedEvent): void {\n const message = convertEventToChatMessage(event);\n this.emitter.emit('messageReceived', { message });\n\n const currentUserId = toFlatCommunicationIdentifier(this.chatClient.getState().userId);\n if (message?.sender && toFlatCommunicationIdentifier(message.sender) === currentUserId) {\n this.emitter.emit('messageSent', { message });\n }\n }\n\n private messageReadListener({ chatMessageId, recipient }: ReadReceiptReceivedEvent): void {\n const message = this.getState().thread.chatMessages[chatMessageId];\n if (message) {\n this.emitter.emit('messageRead', { message, readBy: recipient });\n }\n }\n\n private participantsAddedListener({ addedBy, participantsAdded }: ParticipantsAddedEvent): void {\n this.emitter.emit('participantsAdded', { addedBy, participantsAdded });\n }\n\n private participantsRemovedListener({ removedBy, participantsRemoved }: ParticipantsRemovedEvent): void {\n this.emitter.emit('participantsRemoved', { removedBy, participantsRemoved });\n }\n\n private chatThreadPropertiesUpdatedListener(event: ChatThreadPropertiesUpdatedEvent): void {\n this.emitter.emit('topicChanged', { topic: event.properties.topic });\n }\n\n private subscribeAllEvents(): void {\n this.chatClient.on('chatThreadPropertiesUpdated', this.chatThreadPropertiesUpdatedListener.bind(this));\n this.chatClient.on('participantsAdded', this.participantsAddedListener.bind(this));\n this.chatClient.on('participantsRemoved', this.participantsRemovedListener.bind(this));\n this.chatClient.on('chatMessageReceived', this.messageReceivedListener.bind(this));\n this.chatClient.on('readReceiptReceived', this.messageReadListener.bind(this));\n this.chatClient.on('participantsRemoved', this.participantsRemovedListener.bind(this));\n }\n\n private unsubscribeAllEvents(): void {\n this.chatClient.off('chatThreadPropertiesUpdated', this.chatThreadPropertiesUpdatedListener.bind(this));\n this.chatClient.off('participantsAdded', this.participantsAddedListener.bind(this));\n this.chatClient.off('participantsRemoved', this.participantsRemovedListener.bind(this));\n this.chatClient.off('chatMessageReceived', this.messageReceivedListener.bind(this));\n this.chatClient.off('readReceiptReceived', this.messageReadListener.bind(this));\n this.chatClient.off('participantsRemoved', this.participantsRemovedListener.bind(this));\n }\n\n on(event: 'messageReceived', listener: MessageReceivedListener): void;\n on(event: 'messageSent', listener: MessageReceivedListener): void;\n on(event: 'messageRead', listener: MessageReadListener): void;\n on(event: 'participantsAdded', listener: ParticipantsAddedListener): void;\n on(event: 'participantsRemoved', listener: ParticipantsRemovedListener): void;\n on(event: 'topicChanged', listener: TopicChangedListener): void;\n on(event: 'error', listener: (e: AdapterError) => void): void;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n on(event: string, listener: (e: any) => void): void {\n this.emitter.on(event, listener);\n }\n\n off(event: 'messageReceived', listener: MessageReceivedListener): void;\n off(event: 'messageSent', listener: MessageReceivedListener): void;\n off(event: 'messageRead', listener: MessageReadListener): void;\n off(event: 'participantsAdded', listener: ParticipantsAddedListener): void;\n off(event: 'participantsRemoved', listener: ParticipantsRemovedListener): void;\n off(event: 'topicChanged', listener: TopicChangedListener): void;\n off(event: 'error', listener: (e: AdapterError) => void): void;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n off(event: string, listener: (e: any) => void): void {\n this.emitter.off(event, listener);\n }\n\n private async asyncTeeErrorToEventEmitter<T>(f: () => Promise<T>): Promise<T> {\n try {\n return await f();\n } catch (error) {\n if (isChatError(error as Error)) {\n this.emitter.emit('error', error as AdapterError);\n }\n throw error;\n }\n }\n}\n\nconst convertEventToChatMessage = (event: ChatMessageReceivedEvent): ChatMessage => {\n return {\n id: event.id,\n version: event.version,\n content: { message: event.message },\n type: convertEventType(event.type),\n sender: event.sender,\n senderDisplayName: event.senderDisplayName,\n sequenceId: '',\n createdOn: new Date(event.createdOn)\n };\n};\n\n// only text/html message type will be received from event\nconst convertEventType = (type: string): ChatMessageType => {\n const lowerCaseType = type.toLowerCase();\n if (lowerCaseType === 'richtext/html' || lowerCaseType === 'html') {\n return 'html';\n } else {\n return 'text';\n }\n};\n\n/**\n * Arguments for creating the Azure Communication Services implementation of {@link ChatAdapter}.\n *\n * @public\n */\nexport type AzureCommunicationChatAdapterArgs = {\n endpoint: string;\n userId: CommunicationUserIdentifier;\n displayName: string;\n credential: CommunicationTokenCredential;\n threadId: string;\n};\n\n/**\n * Create a {@link ChatAdapter} backed by Azure Communication Services.\n *\n * This is the default implementation of {@link ChatAdapter} provided by this library.\n *\n * @public\n */\nexport const createAzureCommunicationChatAdapter = async ({\n endpoint: endpointUrl,\n userId,\n displayName,\n credential,\n threadId\n}: AzureCommunicationChatAdapterArgs): Promise<ChatAdapter> => {\n if (!isValidIdentifier(userId)) {\n throw new Error('Provided userId is invalid. Please provide valid identifier object.');\n }\n\n const chatClient = createStatefulChatClient({\n userId,\n displayName,\n endpoint: endpointUrl,\n credential: credential\n });\n const chatThreadClient = await chatClient.getChatThreadClient(threadId);\n await chatClient.startRealtimeNotifications();\n\n const adapter = await createAzureCommunicationChatAdapterFromClient(chatClient, chatThreadClient);\n\n return adapter;\n};\n\n/**\n * A custom React hook to simplify the creation of {@link ChatAdapter}.\n *\n * Similar to {@link createAzureCommunicationChatAdapter}, but takes care of asynchronous\n * creation of the adapter internally.\n *\n * Allows arguments to be undefined so that you can respect the rule-of-hooks and pass in arguments\n * as they are created. The adapter is only created when all arguments are defined.\n *\n * Note that you must memoize the arguments to avoid recreating adapter on each render.\n * See storybook for typical usage examples.\n *\n * @public\n */\nexport const useAzureCommunicationChatAdapter = (\n /**\n * Arguments to be passed to {@link createAzureCommunicationChatAdapter}.\n *\n * Allows arguments to be undefined so that you can respect the rule-of-hooks and pass in arguments\n * as they are created. The adapter is only created when all arguments are defined.\n */\n args: Partial<AzureCommunicationChatAdapterArgs>,\n /**\n * Optional callback to modify the adapter once it is created.\n *\n * If set, must return the modified adapter.\n */\n afterCreate?: (adapter: ChatAdapter) => Promise<ChatAdapter>,\n /**\n * Optional callback called before the adapter is disposed.\n *\n * This is useful for clean up tasks, e.g., leaving any ongoing calls.\n */\n beforeDispose?: (adapter: ChatAdapter) => Promise<void>\n): ChatAdapter | undefined => {\n const { credential, displayName, endpoint, threadId, userId } = args;\n\n // State update needed to rerender the parent component when a new adapter is created.\n const [adapter, setAdapter] = useState<ChatAdapter | undefined>(undefined);\n // Ref needed for cleanup to access the old adapter created asynchronously.\n const adapterRef = useRef<ChatAdapter | undefined>(undefined);\n\n const afterCreateRef = useRef<((adapter: ChatAdapter) => Promise<ChatAdapter>) | undefined>(undefined);\n const beforeDisposeRef = useRef<((adapter: ChatAdapter) => Promise<void>) | undefined>(undefined);\n // These refs are updated on *each* render, so that the latest values\n // are used in the `useEffect` closures below.\n // Using a Ref ensures that new values for the callbacks do not trigger the\n // useEffect blocks, and a new adapter creation / distruction is not triggered.\n afterCreateRef.current = afterCreate;\n beforeDisposeRef.current = beforeDispose;\n\n useEffect(\n () => {\n if (!credential || !displayName || !endpoint || !threadId || !userId) {\n return;\n }\n (async () => {\n if (adapterRef.current) {\n // Dispose the old adapter when a new one is created.\n //\n // This clean up function uses `adapterRef` because `adapter` can not be added to the dependency array of\n // this `useEffect` -- we do not want to trigger a new adapter creation because of the first adapter\n // creation.\n if (beforeDisposeRef.current) {\n await beforeDisposeRef.current(adapterRef.current);\n }\n adapterRef.current.dispose();\n adapterRef.current = undefined;\n }\n\n let newAdapter = await createAzureCommunicationChatAdapter({\n credential,\n displayName,\n endpoint,\n threadId,\n userId\n });\n if (afterCreateRef.current) {\n newAdapter = await afterCreateRef.current(newAdapter);\n }\n adapterRef.current = newAdapter;\n setAdapter(newAdapter);\n })();\n },\n // Explicitly list all arguments so that caller doesn't have to memoize the `args` object.\n [adapterRef, afterCreateRef, beforeDisposeRef, credential, displayName, endpoint, threadId, userId]\n );\n\n // Dispose any existing adapter when the component unmounts.\n useEffect(() => {\n return () => {\n (async () => {\n if (adapterRef.current) {\n if (beforeDisposeRef.current) {\n await beforeDisposeRef.current(adapterRef.current);\n }\n adapterRef.current.dispose();\n adapterRef.current = undefined;\n }\n })();\n };\n }, []);\n\n return adapter;\n};\n\n/**\n * Create a {@link ChatAdapter} using the provided {@link StatefulChatClient}.\n *\n * Useful if you want to keep a reference to {@link StatefulChatClient}.\n * Consider using {@link createAzureCommunicationChatAdapter} for a simpler API.\n *\n * @public\n */\nexport const createAzureCommunicationChatAdapterFromClient = async (\n chatClient: StatefulChatClient,\n chatThreadClient: ChatThreadClient\n): Promise<ChatAdapter> => {\n return new AzureCommunicationChatAdapter(chatClient, chatThreadClient);\n};\n\nconst isChatError = (e: Error): e is ChatError => {\n return e['target'] !== undefined && e['innerError'] !== undefined;\n};\n\"../../../../../chat-stateful-client/src\"\"../../../../../chat-component-bindings/src\"\"../../../../../acs-ui-common/src\"\"../../../../../react-components/src\""]}
|
1
|
+
{"version":3,"file":"AzureCommunicationChatAdapter.js","sourceRoot":"","sources":["../../../../../../../../react-composites/src/composites/ChatComposite/adapter/AzureCommunicationChatAdapter.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport {\n createStatefulChatClient,\n ChatClientState,\n ChatError,\n StatefulChatClient\n} from '@internal/chat-stateful-client';\nimport { ChatHandlers, createDefaultChatHandlers } from '@internal/chat-component-bindings';\nimport { ChatMessage, ChatMessageType, ChatThreadClient, SendMessageOptions } from '@azure/communication-chat';\nimport { CommunicationTokenCredential, CommunicationUserIdentifier } from '@azure/communication-common';\nimport type {\n ChatMessageReceivedEvent,\n ChatThreadPropertiesUpdatedEvent,\n ParticipantsAddedEvent,\n ParticipantsRemovedEvent,\n ReadReceiptReceivedEvent\n} from '@azure/communication-chat';\nimport { toFlatCommunicationIdentifier } from '@internal/acs-ui-common';\nimport EventEmitter from 'events';\nimport {\n ChatAdapter,\n ChatAdapterState,\n MessageReadListener,\n MessageReceivedListener,\n ParticipantsAddedListener,\n ParticipantsRemovedListener,\n TopicChangedListener\n} from './ChatAdapter';\nimport { AdapterError } from '../../common/adapters';\n/* @conditional-compile-remove(file-sharing) */\nimport {\n FileUploadAdapter,\n AzureCommunicationFileUploadAdapter,\n convertFileUploadsUiStateToMessageMetadata\n} from './AzureCommunicationFileUploadAdapter';\nimport { useEffect, useRef, useState } from 'react';\nimport { FileMetadata } from '@internal/react-components';\n/* @conditional-compile-remove(file-sharing) */\nimport { FileUploadManager } from '../file-sharing';\nimport { isValidIdentifier } from '../../CallComposite/utils/Utils';\n\n/**\n * Context of Chat, which is a centralized context for all state updates\n * @private\n */\nexport class ChatContext {\n private emitter: EventEmitter = new EventEmitter();\n private state: ChatAdapterState;\n private threadId: string;\n\n constructor(clientState: ChatClientState, threadId: string) {\n const thread = clientState.threads[threadId];\n this.threadId = threadId;\n if (!thread) {\n throw 'Cannot find threadId, please initialize thread before use!';\n }\n this.state = {\n userId: clientState.userId,\n displayName: clientState.displayName,\n thread,\n latestErrors: clientState.latestErrors\n };\n }\n\n public onStateChange(handler: (_uiState: ChatAdapterState) => void): void {\n this.emitter.on('stateChanged', handler);\n }\n\n public offStateChange(handler: (_uiState: ChatAdapterState) => void): void {\n this.emitter.off('stateChanged', handler);\n }\n\n public setState(state: ChatAdapterState): void {\n this.state = state;\n this.emitter.emit('stateChanged', this.state);\n }\n\n public getState(): ChatAdapterState {\n return this.state;\n }\n\n public setError(error: Error): void {\n this.setState({ ...this.state, error });\n }\n\n public updateClientState(clientState: ChatClientState): void {\n const thread = clientState.threads[this.threadId];\n if (!thread) {\n throw 'Cannot find threadId, please make sure thread state is still in Stateful ChatClient.';\n }\n\n let updatedState: ChatAdapterState = {\n userId: clientState.userId,\n displayName: clientState.displayName,\n thread,\n latestErrors: clientState.latestErrors\n };\n\n /* @conditional-compile-remove(file-sharing) */\n updatedState = { ...updatedState, fileUploads: this.state.fileUploads };\n\n this.setState(updatedState);\n }\n}\n\n/**\n * @private\n */\nexport class AzureCommunicationChatAdapter implements ChatAdapter {\n private chatClient: StatefulChatClient;\n private chatThreadClient: ChatThreadClient;\n private context: ChatContext;\n /* @conditional-compile-remove(file-sharing) */\n private fileUploadAdapter: FileUploadAdapter;\n private handlers: ChatHandlers;\n private emitter: EventEmitter = new EventEmitter();\n\n constructor(chatClient: StatefulChatClient, chatThreadClient: ChatThreadClient) {\n this.bindAllPublicMethods();\n this.chatClient = chatClient;\n this.chatThreadClient = chatThreadClient;\n this.context = new ChatContext(chatClient.getState(), chatThreadClient.threadId);\n /* @conditional-compile-remove(file-sharing) */\n this.fileUploadAdapter = new AzureCommunicationFileUploadAdapter(this.context);\n const onStateChange = (clientState: ChatClientState): void => {\n // unsubscribe when the instance gets disposed\n if (!this) {\n chatClient.offStateChange(onStateChange);\n return;\n }\n this.context.updateClientState(clientState);\n };\n\n this.handlers = createDefaultChatHandlers(chatClient, chatThreadClient);\n\n this.chatClient.onStateChange(onStateChange);\n this.subscribeAllEvents();\n }\n\n private bindAllPublicMethods(): void {\n this.onStateChange = this.onStateChange.bind(this);\n this.offStateChange = this.offStateChange.bind(this);\n this.getState = this.getState.bind(this);\n this.dispose = this.dispose.bind(this);\n this.fetchInitialData = this.fetchInitialData.bind(this);\n this.sendMessage = this.sendMessage.bind(this);\n this.sendReadReceipt = this.sendReadReceipt.bind(this);\n this.sendTypingIndicator = this.sendTypingIndicator.bind(this);\n this.updateMessage = this.updateMessage.bind(this);\n this.deleteMessage = this.deleteMessage.bind(this);\n this.removeParticipant = this.removeParticipant.bind(this);\n this.setTopic = this.setTopic.bind(this);\n this.loadPreviousChatMessages = this.loadPreviousChatMessages.bind(this);\n this.on = this.on.bind(this);\n this.off = this.off.bind(this);\n /* @conditional-compile-remove(file-sharing) */\n this.registerActiveFileUploads = this.registerActiveFileUploads.bind(this);\n /* @conditional-compile-remove(file-sharing) */\n this.registerCompletedFileUploads = this.registerCompletedFileUploads.bind(this);\n /* @conditional-compile-remove(file-sharing) */\n this.clearFileUploads = this.clearFileUploads.bind(this);\n /* @conditional-compile-remove(file-sharing) */\n this.cancelFileUpload = this.cancelFileUpload.bind(this);\n /* @conditional-compile-remove(file-sharing) */\n this.updateFileUploadProgress = this.updateFileUploadProgress.bind(this);\n /* @conditional-compile-remove(file-sharing) */\n this.updateFileUploadErrorMessage = this.updateFileUploadErrorMessage.bind(this);\n /* @conditional-compile-remove(file-sharing) */\n this.updateFileUploadMetadata = this.updateFileUploadMetadata.bind(this);\n }\n\n dispose(): void {\n this.unsubscribeAllEvents();\n }\n\n async fetchInitialData(): Promise<void> {\n // If get properties fails we dont want to try to get the participants after.\n await this.asyncTeeErrorToEventEmitter(async () => {\n await this.chatThreadClient.getProperties();\n // Fetch all participants who joined before the local user.\n for await (const _page of this.chatThreadClient.listParticipants().byPage({\n // Fetch 100 participants per page by default.\n maxPageSize: 100\n // eslint-disable-next-line curly\n }));\n });\n }\n\n getState(): ChatAdapterState {\n return this.context.getState();\n }\n\n onStateChange(handler: (state: ChatAdapterState) => void): void {\n this.context.onStateChange(handler);\n }\n\n offStateChange(handler: (state: ChatAdapterState) => void): void {\n this.context.offStateChange(handler);\n }\n\n async sendMessage(content: string, options: SendMessageOptions = {}): Promise<void> {\n await this.asyncTeeErrorToEventEmitter(async () => {\n /* @conditional-compile-remove(file-sharing) */\n options.metadata = {\n ...options.metadata,\n ...convertFileUploadsUiStateToMessageMetadata(this.context.getState().fileUploads)\n };\n\n /* @conditional-compile-remove(file-sharing) */\n /**\n * All the current uploads need to be clear from the state before a message has been sent.\n * This ensures the following behavior:\n * 1. File Upload cards are removed from sendbox at the same time text in sendbox is removed.\n * 2. any component rendering these file uploads doesn't continue to do so.\n * 3. Cleans the state for new file uploads with a fresh message.\n */\n this.fileUploadAdapter.clearFileUploads();\n\n await this.handlers.onSendMessage(content, options);\n });\n }\n\n async sendReadReceipt(chatMessageId: string): Promise<void> {\n await this.asyncTeeErrorToEventEmitter(async () => {\n await this.handlers.onMessageSeen(chatMessageId);\n });\n }\n\n async sendTypingIndicator(): Promise<void> {\n await this.asyncTeeErrorToEventEmitter(async () => {\n await this.handlers.onTyping();\n });\n }\n\n async removeParticipant(userId: string): Promise<void> {\n await this.asyncTeeErrorToEventEmitter(async () => {\n await this.handlers.onRemoveParticipant(userId);\n });\n }\n\n async setTopic(topicName: string): Promise<void> {\n await this.asyncTeeErrorToEventEmitter(async () => {\n await this.handlers.updateThreadTopicName(topicName);\n });\n }\n\n async loadPreviousChatMessages(messagesToLoad: number): Promise<boolean> {\n return await this.asyncTeeErrorToEventEmitter(async () => {\n return await this.handlers.onLoadPreviousChatMessages(messagesToLoad);\n });\n }\n\n async updateMessage(\n messageId: string,\n content: string,\n metadata?: Record<string, string>,\n options?: {\n attachedFilesMetadata?: FileMetadata[];\n }\n ): Promise<void> {\n return await this.asyncTeeErrorToEventEmitter(async () => {\n /* @conditional-compile-remove(file-sharing) */\n return await this.handlers.onUpdateMessage(messageId, content, metadata, options);\n return await this.handlers.onUpdateMessage(messageId, content);\n });\n }\n\n async deleteMessage(messageId: string): Promise<void> {\n return await this.asyncTeeErrorToEventEmitter(async () => {\n return await this.handlers.onDeleteMessage(messageId);\n });\n }\n\n /* @conditional-compile-remove(file-sharing) */\n registerActiveFileUploads(files: File[]): FileUploadManager[] {\n return this.fileUploadAdapter.registerActiveFileUploads(files);\n }\n\n /* @conditional-compile-remove(file-sharing) */\n registerCompletedFileUploads(metadata: FileMetadata[]): FileUploadManager[] {\n return this.fileUploadAdapter.registerCompletedFileUploads(metadata);\n }\n\n /* @conditional-compile-remove(file-sharing) */\n clearFileUploads(): void {\n this.fileUploadAdapter.clearFileUploads();\n }\n\n /* @conditional-compile-remove(file-sharing) */\n cancelFileUpload(id: string): void {\n this.fileUploadAdapter.cancelFileUpload(id);\n }\n\n /* @conditional-compile-remove(file-sharing) */\n updateFileUploadProgress(id: string, progress: number): void {\n this.fileUploadAdapter.updateFileUploadProgress(id, progress);\n }\n\n /* @conditional-compile-remove(file-sharing) */\n updateFileUploadErrorMessage(id: string, errorMessage: string): void {\n this.fileUploadAdapter.updateFileUploadErrorMessage(id, errorMessage);\n }\n\n /* @conditional-compile-remove(file-sharing) */\n updateFileUploadMetadata(id: string, metadata: FileMetadata): void {\n this.fileUploadAdapter.updateFileUploadMetadata(id, metadata);\n }\n\n private messageReceivedListener(event: ChatMessageReceivedEvent): void {\n const message = convertEventToChatMessage(event);\n this.emitter.emit('messageReceived', { message });\n\n const currentUserId = toFlatCommunicationIdentifier(this.chatClient.getState().userId);\n if (message?.sender && toFlatCommunicationIdentifier(message.sender) === currentUserId) {\n this.emitter.emit('messageSent', { message });\n }\n }\n\n private messageReadListener({ chatMessageId, recipient }: ReadReceiptReceivedEvent): void {\n const message = this.getState().thread.chatMessages[chatMessageId];\n if (message) {\n this.emitter.emit('messageRead', { message, readBy: recipient });\n }\n }\n\n private participantsAddedListener({ addedBy, participantsAdded }: ParticipantsAddedEvent): void {\n this.emitter.emit('participantsAdded', { addedBy, participantsAdded });\n }\n\n private participantsRemovedListener({ removedBy, participantsRemoved }: ParticipantsRemovedEvent): void {\n this.emitter.emit('participantsRemoved', { removedBy, participantsRemoved });\n }\n\n private chatThreadPropertiesUpdatedListener(event: ChatThreadPropertiesUpdatedEvent): void {\n this.emitter.emit('topicChanged', { topic: event.properties.topic });\n }\n\n private subscribeAllEvents(): void {\n this.chatClient.on('chatThreadPropertiesUpdated', this.chatThreadPropertiesUpdatedListener.bind(this));\n this.chatClient.on('participantsAdded', this.participantsAddedListener.bind(this));\n this.chatClient.on('participantsRemoved', this.participantsRemovedListener.bind(this));\n this.chatClient.on('chatMessageReceived', this.messageReceivedListener.bind(this));\n this.chatClient.on('readReceiptReceived', this.messageReadListener.bind(this));\n this.chatClient.on('participantsRemoved', this.participantsRemovedListener.bind(this));\n }\n\n private unsubscribeAllEvents(): void {\n this.chatClient.off('chatThreadPropertiesUpdated', this.chatThreadPropertiesUpdatedListener.bind(this));\n this.chatClient.off('participantsAdded', this.participantsAddedListener.bind(this));\n this.chatClient.off('participantsRemoved', this.participantsRemovedListener.bind(this));\n this.chatClient.off('chatMessageReceived', this.messageReceivedListener.bind(this));\n this.chatClient.off('readReceiptReceived', this.messageReadListener.bind(this));\n this.chatClient.off('participantsRemoved', this.participantsRemovedListener.bind(this));\n }\n\n on(event: 'messageReceived', listener: MessageReceivedListener): void;\n on(event: 'messageSent', listener: MessageReceivedListener): void;\n on(event: 'messageRead', listener: MessageReadListener): void;\n on(event: 'participantsAdded', listener: ParticipantsAddedListener): void;\n on(event: 'participantsRemoved', listener: ParticipantsRemovedListener): void;\n on(event: 'topicChanged', listener: TopicChangedListener): void;\n on(event: 'error', listener: (e: AdapterError) => void): void;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n on(event: string, listener: (e: any) => void): void {\n this.emitter.on(event, listener);\n }\n\n off(event: 'messageReceived', listener: MessageReceivedListener): void;\n off(event: 'messageSent', listener: MessageReceivedListener): void;\n off(event: 'messageRead', listener: MessageReadListener): void;\n off(event: 'participantsAdded', listener: ParticipantsAddedListener): void;\n off(event: 'participantsRemoved', listener: ParticipantsRemovedListener): void;\n off(event: 'topicChanged', listener: TopicChangedListener): void;\n off(event: 'error', listener: (e: AdapterError) => void): void;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n off(event: string, listener: (e: any) => void): void {\n this.emitter.off(event, listener);\n }\n\n private async asyncTeeErrorToEventEmitter<T>(f: () => Promise<T>): Promise<T> {\n try {\n return await f();\n } catch (error) {\n if (isChatError(error as Error)) {\n this.emitter.emit('error', error as AdapterError);\n }\n throw error;\n }\n }\n}\n\nconst convertEventToChatMessage = (event: ChatMessageReceivedEvent): ChatMessage => {\n return {\n id: event.id,\n version: event.version,\n content: { message: event.message },\n type: convertEventType(event.type),\n sender: event.sender,\n senderDisplayName: event.senderDisplayName,\n sequenceId: '',\n createdOn: new Date(event.createdOn)\n };\n};\n\n// only text/html message type will be received from event\nconst convertEventType = (type: string): ChatMessageType => {\n const lowerCaseType = type.toLowerCase();\n if (lowerCaseType === 'richtext/html' || lowerCaseType === 'html') {\n return 'html';\n } else {\n return 'text';\n }\n};\n\n/**\n * Arguments for creating the Azure Communication Services implementation of {@link ChatAdapter}.\n *\n * @public\n */\nexport type AzureCommunicationChatAdapterArgs = {\n endpoint: string;\n userId: CommunicationUserIdentifier;\n displayName: string;\n credential: CommunicationTokenCredential;\n threadId: string;\n};\n\n/**\n * Create a {@link ChatAdapter} backed by Azure Communication Services.\n *\n * This is the default implementation of {@link ChatAdapter} provided by this library.\n *\n * @public\n */\nexport const createAzureCommunicationChatAdapter = async ({\n endpoint: endpointUrl,\n userId,\n displayName,\n credential,\n threadId\n}: AzureCommunicationChatAdapterArgs): Promise<ChatAdapter> => {\n if (!isValidIdentifier(userId)) {\n throw new Error('Provided userId is invalid. Please provide valid identifier object.');\n }\n\n const chatClient = createStatefulChatClient({\n userId,\n displayName,\n endpoint: endpointUrl,\n credential: credential\n });\n const chatThreadClient = await chatClient.getChatThreadClient(threadId);\n await chatClient.startRealtimeNotifications();\n\n const adapter = await createAzureCommunicationChatAdapterFromClient(chatClient, chatThreadClient);\n\n return adapter;\n};\n\n/**\n * A custom React hook to simplify the creation of {@link ChatAdapter}.\n *\n * Similar to {@link createAzureCommunicationChatAdapter}, but takes care of asynchronous\n * creation of the adapter internally.\n *\n * Allows arguments to be undefined so that you can respect the rule-of-hooks and pass in arguments\n * as they are created. The adapter is only created when all arguments are defined.\n *\n * Note that you must memoize the arguments to avoid recreating adapter on each render.\n * See storybook for typical usage examples.\n *\n * @public\n */\nexport const useAzureCommunicationChatAdapter = (\n /**\n * Arguments to be passed to {@link createAzureCommunicationChatAdapter}.\n *\n * Allows arguments to be undefined so that you can respect the rule-of-hooks and pass in arguments\n * as they are created. The adapter is only created when all arguments are defined.\n */\n args: Partial<AzureCommunicationChatAdapterArgs>,\n /**\n * Optional callback to modify the adapter once it is created.\n *\n * If set, must return the modified adapter.\n */\n afterCreate?: (adapter: ChatAdapter) => Promise<ChatAdapter>,\n /**\n * Optional callback called before the adapter is disposed.\n *\n * This is useful for clean up tasks, e.g., leaving any ongoing calls.\n */\n beforeDispose?: (adapter: ChatAdapter) => Promise<void>\n): ChatAdapter | undefined => {\n const { credential, displayName, endpoint, threadId, userId } = args;\n\n // State update needed to rerender the parent component when a new adapter is created.\n const [adapter, setAdapter] = useState<ChatAdapter | undefined>(undefined);\n // Ref needed for cleanup to access the old adapter created asynchronously.\n const adapterRef = useRef<ChatAdapter | undefined>(undefined);\n\n const afterCreateRef = useRef<((adapter: ChatAdapter) => Promise<ChatAdapter>) | undefined>(undefined);\n const beforeDisposeRef = useRef<((adapter: ChatAdapter) => Promise<void>) | undefined>(undefined);\n // These refs are updated on *each* render, so that the latest values\n // are used in the `useEffect` closures below.\n // Using a Ref ensures that new values for the callbacks do not trigger the\n // useEffect blocks, and a new adapter creation / distruction is not triggered.\n afterCreateRef.current = afterCreate;\n beforeDisposeRef.current = beforeDispose;\n\n useEffect(\n () => {\n if (!credential || !displayName || !endpoint || !threadId || !userId) {\n return;\n }\n (async () => {\n if (adapterRef.current) {\n // Dispose the old adapter when a new one is created.\n //\n // This clean up function uses `adapterRef` because `adapter` can not be added to the dependency array of\n // this `useEffect` -- we do not want to trigger a new adapter creation because of the first adapter\n // creation.\n if (beforeDisposeRef.current) {\n await beforeDisposeRef.current(adapterRef.current);\n }\n adapterRef.current.dispose();\n adapterRef.current = undefined;\n }\n\n let newAdapter = await createAzureCommunicationChatAdapter({\n credential,\n displayName,\n endpoint,\n threadId,\n userId\n });\n if (afterCreateRef.current) {\n newAdapter = await afterCreateRef.current(newAdapter);\n }\n adapterRef.current = newAdapter;\n setAdapter(newAdapter);\n })();\n },\n // Explicitly list all arguments so that caller doesn't have to memoize the `args` object.\n [adapterRef, afterCreateRef, beforeDisposeRef, credential, displayName, endpoint, threadId, userId]\n );\n\n // Dispose any existing adapter when the component unmounts.\n useEffect(() => {\n return () => {\n (async () => {\n if (adapterRef.current) {\n if (beforeDisposeRef.current) {\n await beforeDisposeRef.current(adapterRef.current);\n }\n adapterRef.current.dispose();\n adapterRef.current = undefined;\n }\n })();\n };\n }, []);\n\n return adapter;\n};\n\n/**\n * Create a {@link ChatAdapter} using the provided {@link StatefulChatClient}.\n *\n * Useful if you want to keep a reference to {@link StatefulChatClient}.\n * Consider using {@link createAzureCommunicationChatAdapter} for a simpler API.\n *\n * @public\n */\nexport const createAzureCommunicationChatAdapterFromClient = async (\n chatClient: StatefulChatClient,\n chatThreadClient: ChatThreadClient\n): Promise<ChatAdapter> => {\n return new AzureCommunicationChatAdapter(chatClient, chatThreadClient);\n};\n\nconst isChatError = (e: Error): e is ChatError => {\n return e['target'] !== undefined && e['innerError'] !== undefined;\n};\n\"../../../../../chat-stateful-client/src\"\"../../../../../chat-component-bindings/src\"\"../../../../../acs-ui-common/src\"\"../../../../../react-components/src\""]}
|
@@ -18,16 +18,14 @@ export interface FileUploadAdapter {
|
|
18
18
|
updateFileUploadProgress: (id: string, progress: number) => void;
|
19
19
|
updateFileUploadErrorMessage: (id: string, errorMessage: string) => void;
|
20
20
|
updateFileUploadMetadata: (id: string, metadata: FileMetadata) => void;
|
21
|
-
downloadAuthenticatedAttachment?: (attachmentUrl: string) => Promise<string>;
|
22
21
|
}
|
23
22
|
/**
|
24
23
|
* @internal
|
25
24
|
*/
|
26
25
|
export declare class AzureCommunicationFileUploadAdapter implements FileUploadAdapter {
|
27
26
|
private context;
|
28
|
-
private getAuthToken?;
|
29
27
|
private fileUploads;
|
30
|
-
constructor(chatContext: ChatContext
|
28
|
+
constructor(chatContext: ChatContext);
|
31
29
|
private findFileUpload;
|
32
30
|
private deleteFileUploads;
|
33
31
|
private deleteErroneousFileUploads;
|
@@ -39,7 +37,6 @@ export declare class AzureCommunicationFileUploadAdapter implements FileUploadAd
|
|
39
37
|
updateFileUploadProgress(id: string, progress: number): void;
|
40
38
|
updateFileUploadErrorMessage(id: string, errorMessage: string): void;
|
41
39
|
updateFileUploadMetadata(id: string, metadata: FileMetadata): void;
|
42
|
-
downloadAuthenticatedAttachment(attachmentUrl: string): Promise<string>;
|
43
40
|
private subscribeAllEvents;
|
44
41
|
private unsubscribeAllEvents;
|
45
42
|
}
|
@@ -1,14 +1,5 @@
|
|
1
1
|
// Copyright (c) Microsoft Corporation.
|
2
2
|
// Licensed under the MIT license.
|
3
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
4
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
5
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
6
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
7
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
8
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
9
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
10
|
-
});
|
11
|
-
};
|
12
3
|
/* @conditional-compile-remove(file-sharing) */
|
13
4
|
import produce from 'immer';
|
14
5
|
/* @conditional-compile-remove(file-sharing) */
|
@@ -58,10 +49,9 @@ class FileUploadContext {
|
|
58
49
|
* @internal
|
59
50
|
*/
|
60
51
|
export class AzureCommunicationFileUploadAdapter {
|
61
|
-
constructor(chatContext
|
52
|
+
constructor(chatContext) {
|
62
53
|
this.fileUploads = [];
|
63
54
|
this.context = new FileUploadContext(chatContext);
|
64
|
-
this.getAuthToken = getAuthToken;
|
65
55
|
}
|
66
56
|
findFileUpload(id) {
|
67
57
|
return this.fileUploads.find((fileUpload) => fileUpload.id === id);
|
@@ -121,24 +111,6 @@ export class AzureCommunicationFileUploadAdapter {
|
|
121
111
|
updateFileUploadMetadata(id, metadata) {
|
122
112
|
this.context.updateFileUpload(id, { progress: 1, metadata });
|
123
113
|
}
|
124
|
-
/* @conditional-compile-remove(teams-inline-images) */
|
125
|
-
downloadAuthenticatedAttachment(attachmentUrl) {
|
126
|
-
return __awaiter(this, void 0, void 0, function* () {
|
127
|
-
function fetchWithAuthentication(url, token) {
|
128
|
-
const headers = new Headers();
|
129
|
-
headers.append('Authorization', `Bearer ${token}`);
|
130
|
-
return fetch(url, { headers });
|
131
|
-
}
|
132
|
-
if (!this.getAuthToken) {
|
133
|
-
return '';
|
134
|
-
}
|
135
|
-
// ToDo InlineAttachments: If GET fails might need to send failure up to contoso
|
136
|
-
const token = yield this.getAuthToken();
|
137
|
-
const response = yield fetchWithAuthentication(attachmentUrl !== null && attachmentUrl !== void 0 ? attachmentUrl : '', token);
|
138
|
-
const blob = yield response.blob();
|
139
|
-
return URL.createObjectURL(blob);
|
140
|
-
});
|
141
|
-
}
|
142
114
|
subscribeAllEvents(fileUpload) {
|
143
115
|
fileUpload.on('uploadProgressChange', this.updateFileUploadProgress.bind(this));
|
144
116
|
fileUpload.on('uploadComplete', this.updateFileUploadMetadata.bind(this));
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"AzureCommunicationFileUploadAdapter.js","sourceRoot":"","sources":["../../../../../../../../react-composites/src/composites/ChatComposite/adapter/AzureCommunicationFileUploadAdapter.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport { FileMetadata } from '@internal/react-components';\nimport { FileUploadManager, FileUploadState } from '../file-sharing';\n/* @conditional-compile-remove(file-sharing) */\nimport produce from 'immer';\n/* @conditional-compile-remove(file-sharing) */\nimport { FileSharingMetadata, FileUpload } from '../file-sharing';\n/* @conditional-compile-remove(file-sharing) */\nimport { ChatContext } from './AzureCommunicationChatAdapter';\n/* @conditional-compile-remove(file-sharing) */\nimport { ChatAdapterState } from './ChatAdapter';\n\n/**\n * A record containing {@link FileUploadState} mapped to unique ids.\n * @beta\n */\nexport type FileUploadsUiState = Record<string, FileUploadState>;\n\n/**\n * @beta\n */\nexport interface FileUploadAdapter {\n registerActiveFileUploads: (files: File[]) => FileUploadManager[];\n registerCompletedFileUploads: (metadata: FileMetadata[]) => FileUploadManager[];\n clearFileUploads: () => void;\n cancelFileUpload: (id: string) => void;\n updateFileUploadProgress: (id: string, progress: number) => void;\n updateFileUploadErrorMessage: (id: string, errorMessage: string) => void;\n updateFileUploadMetadata: (id: string, metadata: FileMetadata) => void;\n /* @conditional-compile-remove(teams-inline-images) */\n downloadAuthenticatedAttachment?: (attachmentUrl: string) => Promise<string>;\n}\n\n/* @conditional-compile-remove(file-sharing) */\n/**\n * @internal\n */\nclass FileUploadContext {\n private chatContext: ChatContext;\n\n constructor(chatContext: ChatContext) {\n this.chatContext = chatContext;\n }\n\n public getFileUploads(): FileUploadsUiState | undefined {\n return this.chatContext.getState().fileUploads;\n }\n\n public addFileUploads(fileUploads: FileUpload[]): void {\n const fileUploadsMap = convertObservableFileUploadToFileUploadsUiState(fileUploads);\n this.chatContext.setState(\n produce(this.chatContext.getState(), (draft) => {\n draft.fileUploads = draft.fileUploads || {};\n draft.fileUploads = { ...draft.fileUploads, ...fileUploadsMap };\n })\n );\n }\n\n public clearFileUploads(): void {\n this.chatContext.setState(\n produce(this.chatContext.getState(), (draft: ChatAdapterState) => {\n draft.fileUploads = {};\n })\n );\n }\n\n public updateFileUpload(id: string, data: Partial<Pick<FileUploadState, 'progress' | 'metadata' | 'error'>>): void {\n this.chatContext.setState(\n produce(this.chatContext.getState(), (draft: ChatAdapterState) => {\n if (draft.fileUploads?.[id]) {\n draft.fileUploads[id] = {\n ...draft.fileUploads?.[id],\n ...data\n };\n }\n })\n );\n }\n\n public deleteFileUploads(ids: string[]): void {\n this.chatContext.setState(\n produce(this.chatContext.getState(), (draft: ChatAdapterState) => {\n ids.forEach((id) => {\n delete draft?.fileUploads?.[id];\n });\n })\n );\n }\n}\n\n/* @conditional-compile-remove(file-sharing) */\n/**\n * @internal\n */\nexport class AzureCommunicationFileUploadAdapter implements FileUploadAdapter {\n private context: FileUploadContext;\n private getAuthToken?: () => Promise<string>;\n private fileUploads: FileUpload[] = [];\n\n constructor(chatContext: ChatContext, getAuthToken?: () => Promise<string>) {\n this.context = new FileUploadContext(chatContext);\n this.getAuthToken = getAuthToken;\n }\n\n private findFileUpload(id: string): FileUpload | undefined {\n return this.fileUploads.find((fileUpload) => fileUpload.id === id);\n }\n\n private deleteFileUploads(ids: string[]): void {\n this.fileUploads = this.fileUploads.filter((fileUpload) => !ids.includes(fileUpload.id));\n this.context.deleteFileUploads(ids);\n }\n\n private deleteErroneousFileUploads(): void {\n const fileUploads = this.context.getFileUploads() || {};\n const ids = Object.values(fileUploads)\n .filter((item: FileUploadState) => item.error)\n .map((item: FileUploadState) => item.id);\n\n ids.forEach((id) => {\n const fileUpload = this.findFileUpload(id);\n this.unsubscribeAllEvents(fileUpload);\n });\n\n this.deleteFileUploads(ids);\n }\n\n private registerFileUploads(files: File[] | FileMetadata[]): FileUploadManager[] {\n this.deleteErroneousFileUploads();\n const fileUploads: FileUpload[] = [];\n files.forEach((file) => fileUploads.push(new FileUpload(file)));\n fileUploads.forEach((fileUpload) => this.subscribeAllEvents(fileUpload));\n this.fileUploads = this.fileUploads.concat(fileUploads);\n this.context.addFileUploads(fileUploads);\n return fileUploads;\n }\n\n registerActiveFileUploads(files: File[]): FileUploadManager[] {\n return this.registerFileUploads(files);\n }\n\n registerCompletedFileUploads(metadata: FileMetadata[]): FileUploadManager[] {\n return this.registerFileUploads(metadata);\n }\n\n clearFileUploads(): void {\n this.context.clearFileUploads();\n this.fileUploads.forEach((fileUpload) => this.unsubscribeAllEvents(fileUpload));\n this.fileUploads = [];\n }\n\n cancelFileUpload(id: string): void {\n this.deleteErroneousFileUploads();\n const fileUpload = this.findFileUpload(id);\n this.unsubscribeAllEvents(fileUpload);\n this.deleteFileUploads([id]);\n }\n\n updateFileUploadProgress(id: string, progress: number): void {\n this.context.updateFileUpload(id, { progress });\n }\n\n updateFileUploadErrorMessage(id: string, errorMessage: string): void {\n this.context.updateFileUpload(id, {\n error: {\n message: errorMessage,\n timestamp: Date.now()\n }\n });\n }\n\n updateFileUploadMetadata(id: string, metadata: FileMetadata): void {\n this.context.updateFileUpload(id, { progress: 1, metadata });\n }\n\n /* @conditional-compile-remove(teams-inline-images) */\n async downloadAuthenticatedAttachment(attachmentUrl: string): Promise<string> {\n function fetchWithAuthentication(url: string, token: string): Promise<Response> {\n const headers = new Headers();\n headers.append('Authorization', `Bearer ${token}`);\n return fetch(url, { headers });\n }\n if (!this.getAuthToken) {\n return '';\n }\n // ToDo InlineAttachments: If GET fails might need to send failure up to contoso\n const token = await this.getAuthToken();\n const response = await fetchWithAuthentication(attachmentUrl ?? '', token);\n const blob = await response.blob();\n return URL.createObjectURL(blob);\n }\n\n private subscribeAllEvents(fileUpload: FileUpload): void {\n fileUpload.on('uploadProgressChange', this.updateFileUploadProgress.bind(this));\n fileUpload.on('uploadComplete', this.updateFileUploadMetadata.bind(this));\n fileUpload.on('uploadFail', this.updateFileUploadErrorMessage.bind(this));\n }\n\n private unsubscribeAllEvents(fileUpload?: FileUpload): void {\n fileUpload?.off('uploadProgressChange', this.updateFileUploadProgress.bind(this));\n fileUpload?.off('uploadComplete', this.updateFileUploadMetadata.bind(this));\n fileUpload?.off('uploadFail', this.updateFileUploadErrorMessage.bind(this));\n }\n}\n\n/* @conditional-compile-remove(file-sharing) */\n/**\n * @param fileUploadUiState {@link FileUploadsUiState}\n * @private\n */\nexport const convertFileUploadsUiStateToMessageMetadata = (fileUploads?: FileUploadsUiState): FileSharingMetadata => {\n const fileMetadata: FileMetadata[] = [];\n if (fileUploads) {\n Object.keys(fileUploads).forEach((key) => {\n const file = fileUploads[key];\n if (!file.error && file.metadata) {\n fileMetadata.push(file.metadata);\n }\n });\n }\n\n return { fileSharingMetadata: JSON.stringify(fileMetadata) };\n};\n\n/* @conditional-compile-remove(file-sharing) */\n/**\n * @private\n */\nconst convertObservableFileUploadToFileUploadsUiState = (fileUploads: FileUpload[]): FileUploadsUiState => {\n return fileUploads.reduce((map: FileUploadsUiState, fileUpload) => {\n map[fileUpload.id] = {\n id: fileUpload.id,\n filename: fileUpload.fileName,\n progress: 0,\n metadata: fileUpload.metadata\n };\n return map;\n }, {});\n};\n\"../../../../../react-components/src\""]}
|
1
|
+
{"version":3,"file":"AzureCommunicationFileUploadAdapter.js","sourceRoot":"","sources":["../../../../../../../../react-composites/src/composites/ChatComposite/adapter/AzureCommunicationFileUploadAdapter.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport { FileMetadata } from '@internal/react-components';\nimport { FileUploadManager, FileUploadState } from '../file-sharing';\n/* @conditional-compile-remove(file-sharing) */\nimport produce from 'immer';\n/* @conditional-compile-remove(file-sharing) */\nimport { FileSharingMetadata, FileUpload } from '../file-sharing';\n/* @conditional-compile-remove(file-sharing) */\nimport { ChatContext } from './AzureCommunicationChatAdapter';\n/* @conditional-compile-remove(file-sharing) */\nimport { ChatAdapterState } from './ChatAdapter';\n\n/**\n * A record containing {@link FileUploadState} mapped to unique ids.\n * @beta\n */\nexport type FileUploadsUiState = Record<string, FileUploadState>;\n\n/**\n * @beta\n */\nexport interface FileUploadAdapter {\n registerActiveFileUploads: (files: File[]) => FileUploadManager[];\n registerCompletedFileUploads: (metadata: FileMetadata[]) => FileUploadManager[];\n clearFileUploads: () => void;\n cancelFileUpload: (id: string) => void;\n updateFileUploadProgress: (id: string, progress: number) => void;\n updateFileUploadErrorMessage: (id: string, errorMessage: string) => void;\n updateFileUploadMetadata: (id: string, metadata: FileMetadata) => void;\n}\n\n/* @conditional-compile-remove(file-sharing) */\n/**\n * @internal\n */\nclass FileUploadContext {\n private chatContext: ChatContext;\n\n constructor(chatContext: ChatContext) {\n this.chatContext = chatContext;\n }\n\n public getFileUploads(): FileUploadsUiState | undefined {\n return this.chatContext.getState().fileUploads;\n }\n\n public addFileUploads(fileUploads: FileUpload[]): void {\n const fileUploadsMap = convertObservableFileUploadToFileUploadsUiState(fileUploads);\n this.chatContext.setState(\n produce(this.chatContext.getState(), (draft) => {\n draft.fileUploads = draft.fileUploads || {};\n draft.fileUploads = { ...draft.fileUploads, ...fileUploadsMap };\n })\n );\n }\n\n public clearFileUploads(): void {\n this.chatContext.setState(\n produce(this.chatContext.getState(), (draft: ChatAdapterState) => {\n draft.fileUploads = {};\n })\n );\n }\n\n public updateFileUpload(id: string, data: Partial<Pick<FileUploadState, 'progress' | 'metadata' | 'error'>>): void {\n this.chatContext.setState(\n produce(this.chatContext.getState(), (draft: ChatAdapterState) => {\n if (draft.fileUploads?.[id]) {\n draft.fileUploads[id] = {\n ...draft.fileUploads?.[id],\n ...data\n };\n }\n })\n );\n }\n\n public deleteFileUploads(ids: string[]): void {\n this.chatContext.setState(\n produce(this.chatContext.getState(), (draft: ChatAdapterState) => {\n ids.forEach((id) => {\n delete draft?.fileUploads?.[id];\n });\n })\n );\n }\n}\n\n/* @conditional-compile-remove(file-sharing) */\n/**\n * @internal\n */\nexport class AzureCommunicationFileUploadAdapter implements FileUploadAdapter {\n private context: FileUploadContext;\n private fileUploads: FileUpload[] = [];\n\n constructor(chatContext: ChatContext) {\n this.context = new FileUploadContext(chatContext);\n }\n\n private findFileUpload(id: string): FileUpload | undefined {\n return this.fileUploads.find((fileUpload) => fileUpload.id === id);\n }\n\n private deleteFileUploads(ids: string[]): void {\n this.fileUploads = this.fileUploads.filter((fileUpload) => !ids.includes(fileUpload.id));\n this.context.deleteFileUploads(ids);\n }\n\n private deleteErroneousFileUploads(): void {\n const fileUploads = this.context.getFileUploads() || {};\n const ids = Object.values(fileUploads)\n .filter((item: FileUploadState) => item.error)\n .map((item: FileUploadState) => item.id);\n\n ids.forEach((id) => {\n const fileUpload = this.findFileUpload(id);\n this.unsubscribeAllEvents(fileUpload);\n });\n\n this.deleteFileUploads(ids);\n }\n\n private registerFileUploads(files: File[] | FileMetadata[]): FileUploadManager[] {\n this.deleteErroneousFileUploads();\n const fileUploads: FileUpload[] = [];\n files.forEach((file) => fileUploads.push(new FileUpload(file)));\n fileUploads.forEach((fileUpload) => this.subscribeAllEvents(fileUpload));\n this.fileUploads = this.fileUploads.concat(fileUploads);\n this.context.addFileUploads(fileUploads);\n return fileUploads;\n }\n\n registerActiveFileUploads(files: File[]): FileUploadManager[] {\n return this.registerFileUploads(files);\n }\n\n registerCompletedFileUploads(metadata: FileMetadata[]): FileUploadManager[] {\n return this.registerFileUploads(metadata);\n }\n\n clearFileUploads(): void {\n this.context.clearFileUploads();\n this.fileUploads.forEach((fileUpload) => this.unsubscribeAllEvents(fileUpload));\n this.fileUploads = [];\n }\n\n cancelFileUpload(id: string): void {\n this.deleteErroneousFileUploads();\n const fileUpload = this.findFileUpload(id);\n this.unsubscribeAllEvents(fileUpload);\n this.deleteFileUploads([id]);\n }\n\n updateFileUploadProgress(id: string, progress: number): void {\n this.context.updateFileUpload(id, { progress });\n }\n\n updateFileUploadErrorMessage(id: string, errorMessage: string): void {\n this.context.updateFileUpload(id, {\n error: {\n message: errorMessage,\n timestamp: Date.now()\n }\n });\n }\n\n updateFileUploadMetadata(id: string, metadata: FileMetadata): void {\n this.context.updateFileUpload(id, { progress: 1, metadata });\n }\n\n private subscribeAllEvents(fileUpload: FileUpload): void {\n fileUpload.on('uploadProgressChange', this.updateFileUploadProgress.bind(this));\n fileUpload.on('uploadComplete', this.updateFileUploadMetadata.bind(this));\n fileUpload.on('uploadFail', this.updateFileUploadErrorMessage.bind(this));\n }\n\n private unsubscribeAllEvents(fileUpload?: FileUpload): void {\n fileUpload?.off('uploadProgressChange', this.updateFileUploadProgress.bind(this));\n fileUpload?.off('uploadComplete', this.updateFileUploadMetadata.bind(this));\n fileUpload?.off('uploadFail', this.updateFileUploadErrorMessage.bind(this));\n }\n}\n\n/* @conditional-compile-remove(file-sharing) */\n/**\n * @param fileUploadUiState {@link FileUploadsUiState}\n * @private\n */\nexport const convertFileUploadsUiStateToMessageMetadata = (fileUploads?: FileUploadsUiState): FileSharingMetadata => {\n const fileMetadata: FileMetadata[] = [];\n if (fileUploads) {\n Object.keys(fileUploads).forEach((key) => {\n const file = fileUploads[key];\n if (!file.error && file.metadata) {\n fileMetadata.push(file.metadata);\n }\n });\n }\n\n return { fileSharingMetadata: JSON.stringify(fileMetadata) };\n};\n\n/* @conditional-compile-remove(file-sharing) */\n/**\n * @private\n */\nconst convertObservableFileUploadToFileUploadsUiState = (fileUploads: FileUpload[]): FileUploadsUiState => {\n return fileUploads.reduce((map: FileUploadsUiState, fileUpload) => {\n map[fileUpload.id] = {\n id: fileUpload.id,\n filename: fileUpload.fileName,\n progress: 0,\n metadata: fileUpload.metadata\n };\n return map;\n }, {});\n};\n\"../../../../../react-components/src\""]}
|
@@ -1,5 +1,4 @@
|
|
1
1
|
/// <reference types="react" />
|
2
|
-
import { CallAdapter, CommonCallAdapter } from '../CallComposite';
|
3
2
|
/**
|
4
3
|
* Pane that is used to show video effects button
|
5
4
|
* @private
|
@@ -8,6 +7,5 @@ import { CallAdapter, CommonCallAdapter } from '../CallComposite';
|
|
8
7
|
export declare const VideoEffectsPane: (props: {
|
9
8
|
showVideoEffectsOptions: boolean;
|
10
9
|
setshowVideoEffectsOptions: (showVideoEffectsOptions: boolean) => void;
|
11
|
-
adapter: CallAdapter | CommonCallAdapter;
|
12
10
|
}) => JSX.Element;
|
13
11
|
//# sourceMappingURL=VideoEffectsPane.d.ts.map
|
@@ -1,104 +1,19 @@
|
|
1
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
2
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
3
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
4
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
5
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
6
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
7
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
8
|
-
});
|
9
|
-
};
|
10
1
|
// Copyright (c) Microsoft Corporation.
|
11
2
|
// Licensed under the MIT license.
|
12
3
|
import React from 'react';
|
13
4
|
/* @conditional-compile-remove(video-background-effects) */
|
14
|
-
import { useCallback, useMemo } from 'react';
|
15
|
-
/* @conditional-compile-remove(video-background-effects) */
|
16
5
|
import { Panel } from '@fluentui/react';
|
17
|
-
/* @conditional-compile-remove(video-background-effects) */
|
18
|
-
import { useLocale } from '../localization';
|
19
|
-
/* @conditional-compile-remove(video-background-effects) */
|
20
|
-
import { _VideoBackgroundEffectsPicker } from "../../../../react-components/src";
|
21
6
|
/**
|
22
7
|
* Pane that is used to show video effects button
|
23
8
|
* @private
|
24
9
|
*/
|
25
10
|
/** @beta */
|
26
11
|
export const VideoEffectsPane = (props) => {
|
27
|
-
|
28
|
-
/* @conditional-compile-remove(video-background-effects) */
|
29
|
-
const locale = useLocale();
|
30
|
-
/* @conditional-compile-remove(video-background-effects) */
|
31
|
-
const strings = locale.strings.call;
|
32
|
-
/* @conditional-compile-remove(video-background-effects) */
|
33
|
-
const selectableVideoEffects = useMemo(() => {
|
34
|
-
const videoEffects = [
|
35
|
-
{
|
36
|
-
key: 'none',
|
37
|
-
iconProps: {
|
38
|
-
iconName: 'RemoveVideoBackgroundEffect'
|
39
|
-
},
|
40
|
-
title: strings.removeBackgroundEffectButtonLabel,
|
41
|
-
tooltipProps: {
|
42
|
-
content: strings.removeBackgroundTooltip
|
43
|
-
}
|
44
|
-
},
|
45
|
-
{
|
46
|
-
key: 'blur',
|
47
|
-
iconProps: {
|
48
|
-
iconName: 'BlurVideoBackground'
|
49
|
-
},
|
50
|
-
title: strings.blurBackgroundEffectButtonLabel,
|
51
|
-
tooltipProps: {
|
52
|
-
content: strings.blurBackgroundTooltip
|
53
|
-
}
|
54
|
-
}
|
55
|
-
];
|
56
|
-
const videoEffectImages = props.adapter.getState().videoBackgroundImages;
|
57
|
-
if (videoEffectImages) {
|
58
|
-
videoEffectImages.forEach((img) => {
|
59
|
-
var _a;
|
60
|
-
videoEffects.push({
|
61
|
-
key: img.key,
|
62
|
-
backgroundProps: {
|
63
|
-
url: img.url
|
64
|
-
},
|
65
|
-
tooltipProps: {
|
66
|
-
content: (_a = img.tooltipText) !== null && _a !== void 0 ? _a : ''
|
67
|
-
}
|
68
|
-
});
|
69
|
-
});
|
70
|
-
}
|
71
|
-
return videoEffects;
|
72
|
-
}, [strings, props.adapter]);
|
73
|
-
/* @conditional-compile-remove(video-background-effects) */
|
74
|
-
const onEffectChange = useCallback((effectKey) => __awaiter(void 0, void 0, void 0, function* () {
|
75
|
-
console.log(props.adapter.getState());
|
76
|
-
if (effectKey === 'blur') {
|
77
|
-
props.adapter.blurVideoBackground();
|
78
|
-
}
|
79
|
-
else if (effectKey === 'none') {
|
80
|
-
props.adapter.stopVideoBackgroundEffect();
|
81
|
-
}
|
82
|
-
else {
|
83
|
-
const backgroundImg = selectableVideoEffects.find((effect) => {
|
84
|
-
return effect.key === effectKey;
|
85
|
-
});
|
86
|
-
if (backgroundImg && backgroundImg.backgroundProps) {
|
87
|
-
props.adapter.replaceVideoBackground({ backgroundImageUrl: backgroundImg.backgroundProps.url });
|
88
|
-
}
|
89
|
-
}
|
90
|
-
}), [props.adapter, selectableVideoEffects]);
|
91
|
-
return VideoEffectsPaneTrampoline(showVideoEffectsOptions, setshowVideoEffectsOptions,
|
92
|
-
/* @conditional-compile-remove(video-background-effects) */
|
93
|
-
selectableVideoEffects,
|
94
|
-
/* @conditional-compile-remove(video-background-effects) */
|
95
|
-
onEffectChange);
|
12
|
+
return VideoEffectsPaneTrampoline(props.showVideoEffectsOptions, props.setshowVideoEffectsOptions);
|
96
13
|
};
|
97
|
-
const VideoEffectsPaneTrampoline = (showVideoEffectsOptions, setshowVideoEffectsOptions
|
98
|
-
/* @conditional-compile-remove(video-background-effects) */
|
99
|
-
const locale = useLocale();
|
14
|
+
const VideoEffectsPaneTrampoline = (showVideoEffectsOptions, setshowVideoEffectsOptions) => {
|
100
15
|
/* @conditional-compile-remove(video-background-effects) */
|
101
|
-
return (React.createElement(Panel, { headerText:
|
16
|
+
return (React.createElement(Panel, { headerText: "Effects", isOpen: showVideoEffectsOptions, onDismiss: () => setshowVideoEffectsOptions(false), hasCloseButton: true, closeButtonAriaLabel: "Close", isLightDismiss: true }));
|
102
17
|
return React.createElement(React.Fragment, null);
|
103
18
|
};
|
104
19
|
//# sourceMappingURL=VideoEffectsPane.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"VideoEffectsPane.js","sourceRoot":"","sources":["../../../../../../../react-composites/src/composites/common/VideoEffectsPane.tsx"],"names":[],"mappings":"
|
1
|
+
{"version":3,"file":"VideoEffectsPane.js","sourceRoot":"","sources":["../../../../../../../react-composites/src/composites/common/VideoEffectsPane.tsx"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAClC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,2DAA2D;AAC3D,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAExC;;;GAGG;AACH,YAAY;AACZ,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,KAGhC,EAAe,EAAE;IAChB,OAAO,0BAA0B,CAAC,KAAK,CAAC,uBAAuB,EAAE,KAAK,CAAC,0BAA0B,CAAC,CAAC;AACrG,CAAC,CAAC;AAEF,MAAM,0BAA0B,GAAG,CACjC,uBAAgC,EAChC,0BAAsE,EACzD,EAAE;IACf,2DAA2D;IAC3D,OAAO,CACL,oBAAC,KAAK,IACJ,UAAU,EAAC,SAAS,EACpB,MAAM,EAAE,uBAAuB,EAC/B,SAAS,EAAE,GAAG,EAAE,CAAC,0BAA0B,CAAC,KAAK,CAAC,EAClD,cAAc,EAAE,IAAI,EACpB,oBAAoB,EAAC,OAAO,EAC5B,cAAc,EAAE,IAAI,GACb,CACV,CAAC;IACF,OAAO,yCAAK,CAAC;AACf,CAAC,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport React from 'react';\n/* @conditional-compile-remove(video-background-effects) */\nimport { Panel } from '@fluentui/react';\n\n/**\n * Pane that is used to show video effects button\n * @private\n */\n/** @beta */\nexport const VideoEffectsPane = (props: {\n showVideoEffectsOptions: boolean;\n setshowVideoEffectsOptions: (showVideoEffectsOptions: boolean) => void;\n}): JSX.Element => {\n return VideoEffectsPaneTrampoline(props.showVideoEffectsOptions, props.setshowVideoEffectsOptions);\n};\n\nconst VideoEffectsPaneTrampoline = (\n showVideoEffectsOptions: boolean,\n setshowVideoEffectsOptions: (showVideoEffectsOptions: boolean) => void\n): JSX.Element => {\n /* @conditional-compile-remove(video-background-effects) */\n return (\n <Panel\n headerText=\"Effects\"\n isOpen={showVideoEffectsOptions}\n onDismiss={() => setshowVideoEffectsOptions(false)}\n hasCloseButton={true}\n closeButtonAriaLabel=\"Close\"\n isLightDismiss={true}\n ></Panel>\n );\n return <></>;\n};\n"]}
|
@@ -25,7 +25,6 @@ export declare const DEFAULT_COMPOSITE_ICONS: {
|
|
25
25
|
SendBoxSend: JSX.Element;
|
26
26
|
SendBoxSendHovered: JSX.Element;
|
27
27
|
SendBoxAttachFile?: JSX.Element | undefined;
|
28
|
-
ControlBarPeopleButton?: JSX.Element | undefined;
|
29
28
|
ControlButtonCameraOff: JSX.Element;
|
30
29
|
ControlButtonCameraOn: JSX.Element;
|
31
30
|
ControlButtonEndCall: JSX.Element;
|
@@ -72,11 +71,10 @@ export declare const DEFAULT_COMPOSITE_ICONS: {
|
|
72
71
|
PeoplePaneOpenDialpad?: JSX.Element | undefined;
|
73
72
|
DialpadStartCall?: JSX.Element | undefined;
|
74
73
|
NoticePageInvalidRoom?: JSX.Element | undefined;
|
75
|
-
BlurVideoBackground?: JSX.Element | undefined;
|
76
|
-
RemoveVideoBackgroundEffect?: JSX.Element | undefined;
|
77
74
|
ChevronLeft?: JSX.Element | undefined;
|
78
75
|
ControlBarChatButtonActive?: JSX.Element | undefined;
|
79
76
|
ControlBarChatButtonInactive?: JSX.Element | undefined;
|
77
|
+
ControlBarPeopleButton?: JSX.Element | undefined;
|
80
78
|
Link?: JSX.Element | undefined;
|
81
79
|
MoreDrawerMicrophones?: JSX.Element | undefined;
|
82
80
|
MoreDrawerPeople?: JSX.Element | undefined;
|
@@ -87,7 +85,6 @@ export declare const DEFAULT_COMPOSITE_ICONS: {
|
|
87
85
|
ControlButtonParticipantsContextualMenuItem: JSX.Element;
|
88
86
|
CancelFileUpload: JSX.Element;
|
89
87
|
DownloadFile: JSX.Element;
|
90
|
-
DataLossPreventionProhibited: JSX.Element;
|
91
88
|
ErrorBarCallVideoRecoveredBySystem: JSX.Element;
|
92
89
|
ErrorBarCallVideoStoppedBySystem: JSX.Element;
|
93
90
|
MessageResend: JSX.Element;
|
@@ -154,7 +151,6 @@ export declare const ChatCompositeIcon: (props: CompositeIconProps<ChatComposite
|
|
154
151
|
* @public
|
155
152
|
*/
|
156
153
|
export declare type CallCompositeIcons = {
|
157
|
-
ControlBarPeopleButton?: JSX.Element;
|
158
154
|
ControlButtonCameraOff?: JSX.Element;
|
159
155
|
ControlButtonCameraOn?: JSX.Element;
|
160
156
|
ControlButtonEndCall?: JSX.Element;
|
@@ -203,8 +199,6 @@ export declare type CallCompositeIcons = {
|
|
203
199
|
PeoplePaneOpenDialpad?: JSX.Element;
|
204
200
|
DialpadStartCall?: JSX.Element;
|
205
201
|
NoticePageInvalidRoom?: JSX.Element;
|
206
|
-
BlurVideoBackground?: JSX.Element;
|
207
|
-
RemoveVideoBackgroundEffect?: JSX.Element;
|
208
202
|
};
|
209
203
|
/**
|
210
204
|
* Icon wrapper to use when including customizable icons inside the CallComposite.
|
@@ -9,8 +9,6 @@ import React from 'react';
|
|
9
9
|
import { FontIcon, mergeStyles, Text } from '@fluentui/react';
|
10
10
|
/* @conditional-compile-remove(file-sharing) */
|
11
11
|
import { Attach20Regular } from '@fluentui/react-icons';
|
12
|
-
/* @conditional-compile-remove(video-background-effects) */
|
13
|
-
import { VideoBackgroundEffect20Regular, VideoPerson20Filled } from '@fluentui/react-icons';
|
14
12
|
const CoffeeIcon = () => (React.createElement(Text, { className: mergeStyles(coffeeIconStyle), "aria-hidden": true }, "\u2615"));
|
15
13
|
const coffeeIconStyle = {
|
16
14
|
// Fluent wraps all icons with <i> so we must force the fontStyle back to normal.
|
@@ -56,11 +54,7 @@ export const COMPOSITE_ONLY_ICONS = {
|
|
56
54
|
/* @conditional-compile-remove(PSTN-calls) */
|
57
55
|
DialpadStartCall: React.createElement(Call20Regular, null),
|
58
56
|
/* @conditional-compile-remove(rooms) */
|
59
|
-
NoticePageInvalidRoom: React.createElement(Info20Filled, null)
|
60
|
-
/* @conditional-compile-remove(video-background-effects) */
|
61
|
-
BlurVideoBackground: React.createElement(VideoBackgroundEffect20Regular, null),
|
62
|
-
/* @conditional-compile-remove(video-background-effects) */
|
63
|
-
RemoveVideoBackgroundEffect: React.createElement(VideoPerson20Filled, null)
|
57
|
+
NoticePageInvalidRoom: React.createElement(Info20Filled, null)
|
64
58
|
};
|
65
59
|
/**
|
66
60
|
* The default set of icons that are available to used in the Composites.
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"icons.js","sourceRoot":"","sources":["../../../../../../../react-composites/src/composites/common/icons.tsx"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport {\n CallEnd20Filled,\n CallMissed20Filled,\n CameraSwitch24Regular,\n Chat20Filled,\n Chat20Regular,\n Info20Filled,\n MicOff20Filled,\n Mic20Filled,\n Mic20Regular,\n People20Regular,\n PersonDelete20Filled,\n Speaker220Filled,\n Speaker220Regular,\n Video20Filled,\n VideoOff20Filled,\n WifiWarning20Filled\n} from '@fluentui/react-icons';\n/* @conditional-compile-remove(PSTN-calls) */\nimport { PersonAdd20Regular, Dialpad20Regular, Call20Regular } from '@fluentui/react-icons';\nimport { DEFAULT_COMPONENT_ICONS } from '@internal/react-components';\nimport React from 'react';\n// eslint-disable-next-line no-restricted-imports\nimport { FontIcon, IIconProps, mergeStyles, Text } from '@fluentui/react';\n/* @conditional-compile-remove(file-sharing) */\nimport { Attach20Regular } from '@fluentui/react-icons';\n/* @conditional-compile-remove(video-background-effects) */\nimport { VideoBackgroundEffect20Regular, VideoPerson20Filled } from '@fluentui/react-icons';\n\nconst CoffeeIcon = (): JSX.Element => (\n <Text className={mergeStyles(coffeeIconStyle)} aria-hidden={true}>\n ☕\n </Text>\n);\n\nconst coffeeIconStyle = {\n // Fluent wraps all icons with <i> so we must force the fontStyle back to normal.\n fontStyle: 'normal',\n // By default our icons are 20px x 20px (for 1rem = 16px), make this a bit bigger for lobby.\n fontSize: '2rem'\n};\n\n/**\n * The default set of icons used by the composites directly (i.e. not via the components defined in this library).\n *\n * @public\n */\nexport const COMPOSITE_ONLY_ICONS: CompositeIcons = {\n ChevronLeft: undefined,\n Link: undefined,\n LobbyScreenConnectingToCall: <CoffeeIcon />,\n LobbyScreenWaitingToBeAdmitted: <CoffeeIcon />,\n LocalDeviceSettingsCamera: <Video20Filled />,\n LocalDeviceSettingsMic: <Mic20Filled />,\n LocalDeviceSettingsSpeaker: <Speaker220Filled />,\n LocalPreviewPlaceholder: <VideoOff20Filled />,\n LocalCameraSwitch: <CameraSwitch24Regular />,\n ControlBarChatButtonActive: <Chat20Filled />,\n ControlBarChatButtonInactive: <Chat20Regular />,\n ControlBarPeopleButton: <People20Regular />,\n MoreDrawerMicrophones: <Mic20Regular />,\n MoreDrawerPeople: <People20Regular />,\n MoreDrawerSpeakers: <Speaker220Regular />,\n MoreDrawerSelectedMicrophone: <Mic20Filled />,\n MoreDrawerSelectedSpeaker: <Speaker220Filled />,\n Muted: <MicOff20Filled />,\n NetworkReconnectIcon: <CallMissed20Filled />,\n NoticePageAccessDeniedTeamsMeeting: <PersonDelete20Filled />,\n NoticePageJoinCallFailedDueToNoNetwork: <WifiWarning20Filled />,\n NoticePageLeftCall: <CallEnd20Filled />,\n NoticePageRemovedFromCall: <Info20Filled />,\n /* @conditional-compile-remove(file-sharing) */\n SendBoxAttachFile: <Attach20Regular />,\n /* @conditional-compile-remove(PSTN-calls) */\n PeoplePaneAddPerson: <PersonAdd20Regular />,\n /* @conditional-compile-remove(PSTN-calls) */\n PeoplePaneOpenDialpad: <Dialpad20Regular />,\n /* @conditional-compile-remove(PSTN-calls) */\n DialpadStartCall: <Call20Regular />,\n /* @conditional-compile-remove(rooms) */\n NoticePageInvalidRoom: <Info20Filled />,\n /* @conditional-compile-remove(video-background-effects) */\n BlurVideoBackground: <VideoBackgroundEffect20Regular />,\n /* @conditional-compile-remove(video-background-effects) */\n RemoveVideoBackgroundEffect: <VideoPerson20Filled />\n};\n\n/**\n * The default set of icons that are available to used in the Composites.\n *\n * @public\n */\nexport const DEFAULT_COMPOSITE_ICONS = {\n ...DEFAULT_COMPONENT_ICONS,\n ...COMPOSITE_ONLY_ICONS\n};\n\n/** @private */\nexport type CompositeIconProps<Icons> = IIconProps & { iconName: keyof Icons };\n\n/**\n * Icons that can be overridden for {@link ChatComposite}.\n *\n * @public\n */\nexport type ChatCompositeIcons = {\n EditBoxCancel?: JSX.Element;\n EditBoxSubmit?: JSX.Element;\n MessageDelivered?: JSX.Element;\n MessageEdit?: JSX.Element;\n MessageFailed?: JSX.Element;\n MessageRemove?: JSX.Element;\n MessageSeen?: JSX.Element;\n MessageSending?: JSX.Element;\n ParticipantItemOptions?: JSX.Element;\n ParticipantItemOptionsHovered?: JSX.Element;\n SendBoxSend?: JSX.Element;\n SendBoxSendHovered?: JSX.Element;\n /* @conditional-compile-remove(file-sharing) */\n SendBoxAttachFile?: JSX.Element;\n};\n\n/**\n * Icon wrapper to use when including customizable icons inside the ChatComposite.\n * This wrapper ensures the icon name is being type-checked helping ensure no typos\n * and ensure that icon is customizable through the composite API.\n *\n * @private\n */\nexport const ChatCompositeIcon = (props: CompositeIconProps<ChatCompositeIcons>): JSX.Element => (\n <FontIcon {...props} />\n);\n\n/**\n * Icons that can be overridden for {@link CallComposite}.\n *\n * @public\n */\nexport type CallCompositeIcons = {\n ControlBarPeopleButton?: JSX.Element;\n ControlButtonCameraOff?: JSX.Element;\n ControlButtonCameraOn?: JSX.Element;\n ControlButtonEndCall?: JSX.Element;\n ControlButtonMicOff?: JSX.Element;\n ControlButtonMicOn?: JSX.Element;\n ControlButtonOptions?: JSX.Element;\n ControlButtonParticipants?: JSX.Element;\n ControlButtonScreenShareStart?: JSX.Element;\n ControlButtonScreenShareStop?: JSX.Element;\n ErrorBarCallCameraAccessDenied?: JSX.Element;\n ErrorBarCallCameraAlreadyInUse?: JSX.Element;\n ErrorBarCallLocalVideoFreeze?: JSX.Element;\n ErrorBarCallMacOsCameraAccessDenied?: JSX.Element;\n ErrorBarCallMacOsMicrophoneAccessDenied?: JSX.Element;\n ErrorBarCallMicrophoneAccessDenied?: JSX.Element;\n ErrorBarCallMicrophoneMutedBySystem?: JSX.Element;\n ErrorBarCallMicrophoneUnmutedBySystem?: JSX.Element;\n ErrorBarCallNetworkQualityLow?: JSX.Element;\n ErrorBarCallNoMicrophoneFound?: JSX.Element;\n ErrorBarCallNoSpeakerFound?: JSX.Element;\n ErrorBarClear?: JSX.Element;\n HorizontalGalleryLeftButton?: JSX.Element;\n HorizontalGalleryRightButton?: JSX.Element;\n LobbyScreenConnectingToCall?: JSX.Element;\n LobbyScreenWaitingToBeAdmitted?: JSX.Element;\n LocalDeviceSettingsCamera?: JSX.Element;\n LocalDeviceSettingsMic?: JSX.Element;\n LocalDeviceSettingsSpeaker?: JSX.Element;\n LocalPreviewPlaceholder?: JSX.Element;\n Muted?: JSX.Element;\n NetworkReconnectIcon?: JSX.Element;\n NoticePageAccessDeniedTeamsMeeting?: JSX.Element;\n NoticePageJoinCallFailedDueToNoNetwork?: JSX.Element;\n NoticePageLeftCall?: JSX.Element;\n NoticePageRemovedFromCall?: JSX.Element;\n OptionsCamera?: JSX.Element;\n OptionsMic?: JSX.Element;\n OptionsSpeaker?: JSX.Element;\n ParticipantItemMicOff?: JSX.Element;\n ParticipantItemOptions?: JSX.Element;\n ParticipantItemOptionsHovered?: JSX.Element;\n ParticipantItemScreenShareStart?: JSX.Element;\n VideoTileMicOff?: JSX.Element;\n LocalCameraSwitch?: JSX.Element;\n /* @conditional-compile-remove(PSTN-calls) */\n PeoplePaneAddPerson?: JSX.Element;\n /* @conditional-compile-remove(PSTN-calls) */\n PeoplePaneOpenDialpad?: JSX.Element;\n /* @conditional-compile-remove(PSTN-calls) */\n DialpadStartCall?: JSX.Element;\n /* @conditional-compile-remove(rooms) */\n NoticePageInvalidRoom?: JSX.Element;\n /* @conditional-compile-remove(video-background-effects) */\n BlurVideoBackground?: JSX.Element;\n /* @conditional-compile-remove(video-background-effects) */\n RemoveVideoBackgroundEffect?: JSX.Element;\n};\n\n/**\n * Icon wrapper to use when including customizable icons inside the CallComposite.\n * This wrapper ensures the icon name is being type-checked helping ensure no typos\n * and ensure that icon is customizable through the composite API.\n *\n * @private\n */\nexport const CallCompositeIcon = (props: CompositeIconProps<CallCompositeIcons>): JSX.Element => (\n <FontIcon {...props} />\n);\n\n/**\n * Icons that can be overridden for {@link CallWithChatComposite}.\n *\n * @public\n */\nexport type CallWithChatCompositeIcons = {\n // CallWithChat Specific Icons\n ChevronLeft?: JSX.Element;\n ControlBarChatButtonActive?: JSX.Element;\n ControlBarChatButtonInactive?: JSX.Element;\n ControlBarPeopleButton?: JSX.Element;\n Link?: JSX.Element;\n MoreDrawerMicrophones?: JSX.Element;\n MoreDrawerPeople?: JSX.Element;\n MoreDrawerSelectedMicrophone?: JSX.Element;\n MoreDrawerSelectedSpeaker?: JSX.Element;\n MoreDrawerSpeakers?: JSX.Element;\n\n // Call icons\n ControlButtonCameraOff?: JSX.Element;\n ControlButtonCameraOn?: JSX.Element;\n ControlButtonEndCall?: JSX.Element;\n ControlButtonMicOff?: JSX.Element;\n ControlButtonMicOn?: JSX.Element;\n ControlButtonOptions?: JSX.Element;\n ControlButtonScreenShareStart?: JSX.Element;\n ControlButtonScreenShareStop?: JSX.Element;\n ErrorBarCallCameraAccessDenied?: JSX.Element;\n ErrorBarCallCameraAlreadyInUse?: JSX.Element;\n ErrorBarCallLocalVideoFreeze?: JSX.Element;\n ErrorBarCallMacOsCameraAccessDenied?: JSX.Element;\n ErrorBarCallMacOsMicrophoneAccessDenied?: JSX.Element;\n ErrorBarCallMicrophoneAccessDenied?: JSX.Element;\n ErrorBarCallMicrophoneMutedBySystem?: JSX.Element;\n ErrorBarCallMicrophoneUnmutedBySystem?: JSX.Element;\n ErrorBarCallNetworkQualityLow?: JSX.Element;\n ErrorBarCallNoMicrophoneFound?: JSX.Element;\n ErrorBarCallNoSpeakerFound?: JSX.Element;\n ErrorBarClear?: JSX.Element;\n HorizontalGalleryLeftButton?: JSX.Element;\n HorizontalGalleryRightButton?: JSX.Element;\n LobbyScreenConnectingToCall?: JSX.Element;\n LobbyScreenWaitingToBeAdmitted?: JSX.Element;\n LocalDeviceSettingsCamera?: JSX.Element;\n LocalDeviceSettingsMic?: JSX.Element;\n LocalDeviceSettingsSpeaker?: JSX.Element;\n LocalPreviewPlaceholder?: JSX.Element;\n Muted?: JSX.Element;\n NetworkReconnectIcon?: JSX.Element;\n NoticePageAccessDeniedTeamsMeeting?: JSX.Element;\n NoticePageJoinCallFailedDueToNoNetwork?: JSX.Element;\n NoticePageLeftCall?: JSX.Element;\n NoticePageRemovedFromCall?: JSX.Element;\n OptionsCamera?: JSX.Element;\n OptionsMic?: JSX.Element;\n OptionsSpeaker?: JSX.Element;\n ParticipantItemMicOff?: JSX.Element;\n ParticipantItemScreenShareStart?: JSX.Element;\n VideoTileMicOff?: JSX.Element;\n LocalCameraSwitch?: JSX.Element;\n /* @conditional-compile-remove(PSTN-calls) */\n PeoplePaneAddPerson?: JSX.Element;\n /* @conditional-compile-remove(PSTN-calls) */\n PeoplePaneOpenDialpad?: JSX.Element;\n /* @conditional-compile-remove(PSTN-calls) */\n DialpadStartCall?: JSX.Element;\n\n // Chat icons\n EditBoxCancel?: JSX.Element;\n EditBoxSubmit?: JSX.Element;\n MessageDelivered?: JSX.Element;\n MessageEdit?: JSX.Element;\n MessageFailed?: JSX.Element;\n MessageRemove?: JSX.Element;\n MessageSeen?: JSX.Element;\n MessageSending?: JSX.Element;\n SendBoxSend?: JSX.Element;\n SendBoxSendHovered?: JSX.Element;\n SendBoxAttachFile?: JSX.Element;\n\n // Icons common to Call and Chat.\n ParticipantItemOptions?: JSX.Element;\n ParticipantItemOptionsHovered?: JSX.Element;\n};\n\n/**\n * Icon wrapper to use when including customizable icons inside the CallWithChatComposite.\n * This wrapper ensures the icon name is being type-checked helping ensure no typos\n * and ensure that icon is customizable through the composite API.\n *\n * @private\n */\nexport const CallWithChatCompositeIcon = (props: CompositeIconProps<CallWithChatCompositeIcons>): JSX.Element => (\n <FontIcon {...props} />\n);\n\n/**\n * Icons that can be overridden in one of the composites exported by this library.\n *\n * See {@link ChatCompositeIcons}, {@link CallCompositeIcons} and {@link CallWithChatCompositeIcons} for more targeted types.\n *\n * @public\n */\nexport type CompositeIcons = ChatCompositeIcons & CallCompositeIcons & CallWithChatCompositeIcons;\n\"../../../../react-components/src\""]}
|
1
|
+
{"version":3,"file":"icons.js","sourceRoot":"","sources":["../../../../../../../react-composites/src/composites/common/icons.tsx"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,OAAO,EACL,eAAe,EACf,kBAAkB,EAClB,qBAAqB,EACrB,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,cAAc,EACd,WAAW,EACX,YAAY,EACZ,eAAe,EACf,oBAAoB,EACpB,gBAAgB,EAChB,iBAAiB,EACjB,aAAa,EACb,gBAAgB,EAChB,mBAAmB,EACpB,MAAM,uBAAuB,CAAC;AAC/B,6CAA6C;AAC7C,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC5F,OAAO,EAAE,uBAAuB,EAAE,yCAAmC;AACrE,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,iDAAiD;AACjD,OAAO,EAAE,QAAQ,EAAc,WAAW,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAC1E,+CAA+C;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD,MAAM,UAAU,GAAG,GAAgB,EAAE,CAAC,CACpC,oBAAC,IAAI,IAAC,SAAS,EAAE,WAAW,CAAC,eAAe,CAAC,iBAAe,IAAI,aAEzD,CACR,CAAC;AAEF,MAAM,eAAe,GAAG;IACtB,iFAAiF;IACjF,SAAS,EAAE,QAAQ;IACnB,4FAA4F;IAC5F,QAAQ,EAAE,MAAM;CACjB,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAmB;IAClD,WAAW,EAAE,SAAS;IACtB,IAAI,EAAE,SAAS;IACf,2BAA2B,EAAE,oBAAC,UAAU,OAAG;IAC3C,8BAA8B,EAAE,oBAAC,UAAU,OAAG;IAC9C,yBAAyB,EAAE,oBAAC,aAAa,OAAG;IAC5C,sBAAsB,EAAE,oBAAC,WAAW,OAAG;IACvC,0BAA0B,EAAE,oBAAC,gBAAgB,OAAG;IAChD,uBAAuB,EAAE,oBAAC,gBAAgB,OAAG;IAC7C,iBAAiB,EAAE,oBAAC,qBAAqB,OAAG;IAC5C,0BAA0B,EAAE,oBAAC,YAAY,OAAG;IAC5C,4BAA4B,EAAE,oBAAC,aAAa,OAAG;IAC/C,sBAAsB,EAAE,oBAAC,eAAe,OAAG;IAC3C,qBAAqB,EAAE,oBAAC,YAAY,OAAG;IACvC,gBAAgB,EAAE,oBAAC,eAAe,OAAG;IACrC,kBAAkB,EAAE,oBAAC,iBAAiB,OAAG;IACzC,4BAA4B,EAAE,oBAAC,WAAW,OAAG;IAC7C,yBAAyB,EAAE,oBAAC,gBAAgB,OAAG;IAC/C,KAAK,EAAE,oBAAC,cAAc,OAAG;IACzB,oBAAoB,EAAE,oBAAC,kBAAkB,OAAG;IAC5C,kCAAkC,EAAE,oBAAC,oBAAoB,OAAG;IAC5D,sCAAsC,EAAE,oBAAC,mBAAmB,OAAG;IAC/D,kBAAkB,EAAE,oBAAC,eAAe,OAAG;IACvC,yBAAyB,EAAE,oBAAC,YAAY,OAAG;IAC3C,+CAA+C;IAC/C,iBAAiB,EAAE,oBAAC,eAAe,OAAG;IACtC,6CAA6C;IAC7C,mBAAmB,EAAE,oBAAC,kBAAkB,OAAG;IAC3C,6CAA6C;IAC7C,qBAAqB,EAAE,oBAAC,gBAAgB,OAAG;IAC3C,6CAA6C;IAC7C,gBAAgB,EAAE,oBAAC,aAAa,OAAG;IACnC,wCAAwC;IACxC,qBAAqB,EAAE,oBAAC,YAAY,OAAG;CACxC,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,uBAAuB,mCAC/B,uBAAuB,GACvB,oBAAoB,CACxB,CAAC;AA2BF;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,KAA6C,EAAe,EAAE,CAAC,CAC/F,oBAAC,QAAQ,oBAAK,KAAK,EAAI,CACxB,CAAC;AA8DF;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,KAA6C,EAAe,EAAE,CAAC,CAC/F,oBAAC,QAAQ,oBAAK,KAAK,EAAI,CACxB,CAAC;AAuFF;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,KAAqD,EAAe,EAAE,CAAC,CAC/G,oBAAC,QAAQ,oBAAK,KAAK,EAAI,CACxB,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport {\n CallEnd20Filled,\n CallMissed20Filled,\n CameraSwitch24Regular,\n Chat20Filled,\n Chat20Regular,\n Info20Filled,\n MicOff20Filled,\n Mic20Filled,\n Mic20Regular,\n People20Regular,\n PersonDelete20Filled,\n Speaker220Filled,\n Speaker220Regular,\n Video20Filled,\n VideoOff20Filled,\n WifiWarning20Filled\n} from '@fluentui/react-icons';\n/* @conditional-compile-remove(PSTN-calls) */\nimport { PersonAdd20Regular, Dialpad20Regular, Call20Regular } from '@fluentui/react-icons';\nimport { DEFAULT_COMPONENT_ICONS } from '@internal/react-components';\nimport React from 'react';\n// eslint-disable-next-line no-restricted-imports\nimport { FontIcon, IIconProps, mergeStyles, Text } from '@fluentui/react';\n/* @conditional-compile-remove(file-sharing) */\nimport { Attach20Regular } from '@fluentui/react-icons';\n\nconst CoffeeIcon = (): JSX.Element => (\n <Text className={mergeStyles(coffeeIconStyle)} aria-hidden={true}>\n ☕\n </Text>\n);\n\nconst coffeeIconStyle = {\n // Fluent wraps all icons with <i> so we must force the fontStyle back to normal.\n fontStyle: 'normal',\n // By default our icons are 20px x 20px (for 1rem = 16px), make this a bit bigger for lobby.\n fontSize: '2rem'\n};\n\n/**\n * The default set of icons used by the composites directly (i.e. not via the components defined in this library).\n *\n * @public\n */\nexport const COMPOSITE_ONLY_ICONS: CompositeIcons = {\n ChevronLeft: undefined,\n Link: undefined,\n LobbyScreenConnectingToCall: <CoffeeIcon />,\n LobbyScreenWaitingToBeAdmitted: <CoffeeIcon />,\n LocalDeviceSettingsCamera: <Video20Filled />,\n LocalDeviceSettingsMic: <Mic20Filled />,\n LocalDeviceSettingsSpeaker: <Speaker220Filled />,\n LocalPreviewPlaceholder: <VideoOff20Filled />,\n LocalCameraSwitch: <CameraSwitch24Regular />,\n ControlBarChatButtonActive: <Chat20Filled />,\n ControlBarChatButtonInactive: <Chat20Regular />,\n ControlBarPeopleButton: <People20Regular />,\n MoreDrawerMicrophones: <Mic20Regular />,\n MoreDrawerPeople: <People20Regular />,\n MoreDrawerSpeakers: <Speaker220Regular />,\n MoreDrawerSelectedMicrophone: <Mic20Filled />,\n MoreDrawerSelectedSpeaker: <Speaker220Filled />,\n Muted: <MicOff20Filled />,\n NetworkReconnectIcon: <CallMissed20Filled />,\n NoticePageAccessDeniedTeamsMeeting: <PersonDelete20Filled />,\n NoticePageJoinCallFailedDueToNoNetwork: <WifiWarning20Filled />,\n NoticePageLeftCall: <CallEnd20Filled />,\n NoticePageRemovedFromCall: <Info20Filled />,\n /* @conditional-compile-remove(file-sharing) */\n SendBoxAttachFile: <Attach20Regular />,\n /* @conditional-compile-remove(PSTN-calls) */\n PeoplePaneAddPerson: <PersonAdd20Regular />,\n /* @conditional-compile-remove(PSTN-calls) */\n PeoplePaneOpenDialpad: <Dialpad20Regular />,\n /* @conditional-compile-remove(PSTN-calls) */\n DialpadStartCall: <Call20Regular />,\n /* @conditional-compile-remove(rooms) */\n NoticePageInvalidRoom: <Info20Filled />\n};\n\n/**\n * The default set of icons that are available to used in the Composites.\n *\n * @public\n */\nexport const DEFAULT_COMPOSITE_ICONS = {\n ...DEFAULT_COMPONENT_ICONS,\n ...COMPOSITE_ONLY_ICONS\n};\n\n/** @private */\nexport type CompositeIconProps<Icons> = IIconProps & { iconName: keyof Icons };\n\n/**\n * Icons that can be overridden for {@link ChatComposite}.\n *\n * @public\n */\nexport type ChatCompositeIcons = {\n EditBoxCancel?: JSX.Element;\n EditBoxSubmit?: JSX.Element;\n MessageDelivered?: JSX.Element;\n MessageEdit?: JSX.Element;\n MessageFailed?: JSX.Element;\n MessageRemove?: JSX.Element;\n MessageSeen?: JSX.Element;\n MessageSending?: JSX.Element;\n ParticipantItemOptions?: JSX.Element;\n ParticipantItemOptionsHovered?: JSX.Element;\n SendBoxSend?: JSX.Element;\n SendBoxSendHovered?: JSX.Element;\n /* @conditional-compile-remove(file-sharing) */\n SendBoxAttachFile?: JSX.Element;\n};\n\n/**\n * Icon wrapper to use when including customizable icons inside the ChatComposite.\n * This wrapper ensures the icon name is being type-checked helping ensure no typos\n * and ensure that icon is customizable through the composite API.\n *\n * @private\n */\nexport const ChatCompositeIcon = (props: CompositeIconProps<ChatCompositeIcons>): JSX.Element => (\n <FontIcon {...props} />\n);\n\n/**\n * Icons that can be overridden for {@link CallComposite}.\n *\n * @public\n */\nexport type CallCompositeIcons = {\n ControlButtonCameraOff?: JSX.Element;\n ControlButtonCameraOn?: JSX.Element;\n ControlButtonEndCall?: JSX.Element;\n ControlButtonMicOff?: JSX.Element;\n ControlButtonMicOn?: JSX.Element;\n ControlButtonOptions?: JSX.Element;\n ControlButtonParticipants?: JSX.Element;\n ControlButtonScreenShareStart?: JSX.Element;\n ControlButtonScreenShareStop?: JSX.Element;\n ErrorBarCallCameraAccessDenied?: JSX.Element;\n ErrorBarCallCameraAlreadyInUse?: JSX.Element;\n ErrorBarCallLocalVideoFreeze?: JSX.Element;\n ErrorBarCallMacOsCameraAccessDenied?: JSX.Element;\n ErrorBarCallMacOsMicrophoneAccessDenied?: JSX.Element;\n ErrorBarCallMicrophoneAccessDenied?: JSX.Element;\n ErrorBarCallMicrophoneMutedBySystem?: JSX.Element;\n ErrorBarCallMicrophoneUnmutedBySystem?: JSX.Element;\n ErrorBarCallNetworkQualityLow?: JSX.Element;\n ErrorBarCallNoMicrophoneFound?: JSX.Element;\n ErrorBarCallNoSpeakerFound?: JSX.Element;\n ErrorBarClear?: JSX.Element;\n HorizontalGalleryLeftButton?: JSX.Element;\n HorizontalGalleryRightButton?: JSX.Element;\n LobbyScreenConnectingToCall?: JSX.Element;\n LobbyScreenWaitingToBeAdmitted?: JSX.Element;\n LocalDeviceSettingsCamera?: JSX.Element;\n LocalDeviceSettingsMic?: JSX.Element;\n LocalDeviceSettingsSpeaker?: JSX.Element;\n LocalPreviewPlaceholder?: JSX.Element;\n Muted?: JSX.Element;\n NetworkReconnectIcon?: JSX.Element;\n NoticePageAccessDeniedTeamsMeeting?: JSX.Element;\n NoticePageJoinCallFailedDueToNoNetwork?: JSX.Element;\n NoticePageLeftCall?: JSX.Element;\n NoticePageRemovedFromCall?: JSX.Element;\n OptionsCamera?: JSX.Element;\n OptionsMic?: JSX.Element;\n OptionsSpeaker?: JSX.Element;\n ParticipantItemMicOff?: JSX.Element;\n ParticipantItemOptions?: JSX.Element;\n ParticipantItemOptionsHovered?: JSX.Element;\n ParticipantItemScreenShareStart?: JSX.Element;\n VideoTileMicOff?: JSX.Element;\n LocalCameraSwitch?: JSX.Element;\n /* @conditional-compile-remove(PSTN-calls) */\n PeoplePaneAddPerson?: JSX.Element;\n /* @conditional-compile-remove(PSTN-calls) */\n PeoplePaneOpenDialpad?: JSX.Element;\n /* @conditional-compile-remove(PSTN-calls) */\n DialpadStartCall?: JSX.Element;\n /* @conditional-compile-remove(rooms) */\n NoticePageInvalidRoom?: JSX.Element;\n};\n\n/**\n * Icon wrapper to use when including customizable icons inside the CallComposite.\n * This wrapper ensures the icon name is being type-checked helping ensure no typos\n * and ensure that icon is customizable through the composite API.\n *\n * @private\n */\nexport const CallCompositeIcon = (props: CompositeIconProps<CallCompositeIcons>): JSX.Element => (\n <FontIcon {...props} />\n);\n\n/**\n * Icons that can be overridden for {@link CallWithChatComposite}.\n *\n * @public\n */\nexport type CallWithChatCompositeIcons = {\n // CallWithChat Specific Icons\n ChevronLeft?: JSX.Element;\n ControlBarChatButtonActive?: JSX.Element;\n ControlBarChatButtonInactive?: JSX.Element;\n ControlBarPeopleButton?: JSX.Element;\n Link?: JSX.Element;\n MoreDrawerMicrophones?: JSX.Element;\n MoreDrawerPeople?: JSX.Element;\n MoreDrawerSelectedMicrophone?: JSX.Element;\n MoreDrawerSelectedSpeaker?: JSX.Element;\n MoreDrawerSpeakers?: JSX.Element;\n\n // Call icons\n ControlButtonCameraOff?: JSX.Element;\n ControlButtonCameraOn?: JSX.Element;\n ControlButtonEndCall?: JSX.Element;\n ControlButtonMicOff?: JSX.Element;\n ControlButtonMicOn?: JSX.Element;\n ControlButtonOptions?: JSX.Element;\n ControlButtonScreenShareStart?: JSX.Element;\n ControlButtonScreenShareStop?: JSX.Element;\n ErrorBarCallCameraAccessDenied?: JSX.Element;\n ErrorBarCallCameraAlreadyInUse?: JSX.Element;\n ErrorBarCallLocalVideoFreeze?: JSX.Element;\n ErrorBarCallMacOsCameraAccessDenied?: JSX.Element;\n ErrorBarCallMacOsMicrophoneAccessDenied?: JSX.Element;\n ErrorBarCallMicrophoneAccessDenied?: JSX.Element;\n ErrorBarCallMicrophoneMutedBySystem?: JSX.Element;\n ErrorBarCallMicrophoneUnmutedBySystem?: JSX.Element;\n ErrorBarCallNetworkQualityLow?: JSX.Element;\n ErrorBarCallNoMicrophoneFound?: JSX.Element;\n ErrorBarCallNoSpeakerFound?: JSX.Element;\n ErrorBarClear?: JSX.Element;\n HorizontalGalleryLeftButton?: JSX.Element;\n HorizontalGalleryRightButton?: JSX.Element;\n LobbyScreenConnectingToCall?: JSX.Element;\n LobbyScreenWaitingToBeAdmitted?: JSX.Element;\n LocalDeviceSettingsCamera?: JSX.Element;\n LocalDeviceSettingsMic?: JSX.Element;\n LocalDeviceSettingsSpeaker?: JSX.Element;\n LocalPreviewPlaceholder?: JSX.Element;\n Muted?: JSX.Element;\n NetworkReconnectIcon?: JSX.Element;\n NoticePageAccessDeniedTeamsMeeting?: JSX.Element;\n NoticePageJoinCallFailedDueToNoNetwork?: JSX.Element;\n NoticePageLeftCall?: JSX.Element;\n NoticePageRemovedFromCall?: JSX.Element;\n OptionsCamera?: JSX.Element;\n OptionsMic?: JSX.Element;\n OptionsSpeaker?: JSX.Element;\n ParticipantItemMicOff?: JSX.Element;\n ParticipantItemScreenShareStart?: JSX.Element;\n VideoTileMicOff?: JSX.Element;\n LocalCameraSwitch?: JSX.Element;\n /* @conditional-compile-remove(PSTN-calls) */\n PeoplePaneAddPerson?: JSX.Element;\n /* @conditional-compile-remove(PSTN-calls) */\n PeoplePaneOpenDialpad?: JSX.Element;\n /* @conditional-compile-remove(PSTN-calls) */\n DialpadStartCall?: JSX.Element;\n\n // Chat icons\n EditBoxCancel?: JSX.Element;\n EditBoxSubmit?: JSX.Element;\n MessageDelivered?: JSX.Element;\n MessageEdit?: JSX.Element;\n MessageFailed?: JSX.Element;\n MessageRemove?: JSX.Element;\n MessageSeen?: JSX.Element;\n MessageSending?: JSX.Element;\n SendBoxSend?: JSX.Element;\n SendBoxSendHovered?: JSX.Element;\n SendBoxAttachFile?: JSX.Element;\n\n // Icons common to Call and Chat.\n ParticipantItemOptions?: JSX.Element;\n ParticipantItemOptionsHovered?: JSX.Element;\n};\n\n/**\n * Icon wrapper to use when including customizable icons inside the CallWithChatComposite.\n * This wrapper ensures the icon name is being type-checked helping ensure no typos\n * and ensure that icon is customizable through the composite API.\n *\n * @private\n */\nexport const CallWithChatCompositeIcon = (props: CompositeIconProps<CallWithChatCompositeIcons>): JSX.Element => (\n <FontIcon {...props} />\n);\n\n/**\n * Icons that can be overridden in one of the composites exported by this library.\n *\n * See {@link ChatCompositeIcons}, {@link CallCompositeIcons} and {@link CallWithChatCompositeIcons} for more targeted types.\n *\n * @public\n */\nexport type CompositeIcons = ChatCompositeIcons & CallCompositeIcons & CallWithChatCompositeIcons;\n\"../../../../react-components/src\""]}
|