@azure/communication-react 1.14.1-alpha-202403290012 → 1.15.0-alpha-202404030013

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (192) hide show
  1. package/dist/communication-react.d.ts +125 -218
  2. package/dist/dist-cjs/communication-react/{RichTextSendBoxWrapper-CH6WvEGZ.js → RichTextSendBoxWrapper-B8qxZi1I.js} +2 -2
  3. package/dist/dist-cjs/communication-react/{RichTextSendBoxWrapper-CH6WvEGZ.js.map → RichTextSendBoxWrapper-B8qxZi1I.js.map} +1 -1
  4. package/dist/dist-cjs/communication-react/{index-qxnuqL7s.js → index-aOBAWcNI.js} +1018 -874
  5. package/dist/dist-cjs/communication-react/index-aOBAWcNI.js.map +1 -0
  6. package/dist/dist-cjs/communication-react/index.js +2 -1
  7. package/dist/dist-cjs/communication-react/index.js.map +1 -1
  8. package/dist/dist-esm/acs-ui-common/src/telemetryVersion.js +1 -1
  9. package/dist/dist-esm/acs-ui-common/src/telemetryVersion.js.map +1 -1
  10. package/dist/dist-esm/calling-stateful-client/src/CallClientState.d.ts +4 -4
  11. package/dist/dist-esm/calling-stateful-client/src/CallClientState.js.map +1 -1
  12. package/dist/dist-esm/calling-stateful-client/src/CallContext.d.ts +4 -0
  13. package/dist/dist-esm/calling-stateful-client/src/CallContext.js +6 -1
  14. package/dist/dist-esm/calling-stateful-client/src/CallContext.js.map +1 -1
  15. package/dist/dist-esm/calling-stateful-client/src/ReactionSubscriber.d.ts +1 -1
  16. package/dist/dist-esm/calling-stateful-client/src/ReactionSubscriber.js +2 -2
  17. package/dist/dist-esm/calling-stateful-client/src/ReactionSubscriber.js.map +1 -1
  18. package/dist/dist-esm/chat-component-bindings/src/messageThreadSelector.js +20 -20
  19. package/dist/dist-esm/chat-component-bindings/src/messageThreadSelector.js.map +1 -1
  20. package/dist/dist-esm/communication-react/src/index.d.ts +2 -2
  21. package/dist/dist-esm/communication-react/src/index.js +2 -0
  22. package/dist/dist-esm/communication-react/src/index.js.map +1 -1
  23. package/dist/dist-esm/react-components/src/components/AttachmentCard.d.ts +0 -4
  24. package/dist/dist-esm/react-components/src/components/AttachmentCard.js +4 -1
  25. package/dist/dist-esm/react-components/src/components/AttachmentCard.js.map +1 -1
  26. package/dist/dist-esm/react-components/src/components/AttachmentUploadCards.d.ts +5 -36
  27. package/dist/dist-esm/react-components/src/components/AttachmentUploadCards.js +17 -26
  28. package/dist/dist-esm/react-components/src/components/AttachmentUploadCards.js.map +1 -1
  29. package/dist/dist-esm/react-components/src/components/ChatMessage/ChatMessageComponentAsEditBox.js +6 -10
  30. package/dist/dist-esm/react-components/src/components/ChatMessage/ChatMessageComponentAsEditBox.js.map +1 -1
  31. package/dist/dist-esm/react-components/src/components/ChatMessage/ChatMessageComponentAsRichTextEditBox.js +2 -2
  32. package/dist/dist-esm/react-components/src/components/ChatMessage/ChatMessageComponentAsRichTextEditBox.js.map +1 -1
  33. package/dist/dist-esm/react-components/src/components/EndCallButton.d.ts +10 -1
  34. package/dist/dist-esm/react-components/src/components/EndCallButton.js +93 -51
  35. package/dist/dist-esm/react-components/src/components/EndCallButton.js.map +1 -1
  36. package/dist/dist-esm/react-components/src/components/ReactionButton.d.ts +2 -2
  37. package/dist/dist-esm/react-components/src/components/ReactionButton.js +12 -15
  38. package/dist/dist-esm/react-components/src/components/ReactionButton.js.map +1 -1
  39. package/dist/dist-esm/react-components/src/components/RichTextEditor/RichTextInputBoxComponent.d.ts +2 -2
  40. package/dist/dist-esm/react-components/src/components/RichTextEditor/RichTextInputBoxComponent.js +6 -6
  41. package/dist/dist-esm/react-components/src/components/RichTextEditor/RichTextInputBoxComponent.js.map +1 -1
  42. package/dist/dist-esm/react-components/src/components/RichTextEditor/RichTextSendBox.d.ts +6 -6
  43. package/dist/dist-esm/react-components/src/components/RichTextEditor/RichTextSendBox.js +25 -25
  44. package/dist/dist-esm/react-components/src/components/RichTextEditor/RichTextSendBox.js.map +1 -1
  45. package/dist/dist-esm/react-components/src/components/SendBox.d.ts +6 -6
  46. package/dist/dist-esm/react-components/src/components/SendBox.js +18 -18
  47. package/dist/dist-esm/react-components/src/components/SendBox.js.map +1 -1
  48. package/dist/dist-esm/react-components/src/components/VideoEffects/VideoBackgroundEffectsPicker.d.ts +8 -0
  49. package/dist/dist-esm/react-components/src/components/VideoEffects/VideoBackgroundEffectsPicker.js +1 -1
  50. package/dist/dist-esm/react-components/src/components/VideoEffects/VideoBackgroundEffectsPicker.js.map +1 -1
  51. package/dist/dist-esm/react-components/src/components/VideoGallery/ParticipantVideoTileOverlay.js +8 -4
  52. package/dist/dist-esm/react-components/src/components/VideoGallery/ParticipantVideoTileOverlay.js.map +1 -1
  53. package/dist/dist-esm/react-components/src/components/VideoGallery/RemoteContentShareReactionOverlay.js +4 -4
  54. package/dist/dist-esm/react-components/src/components/VideoGallery/RemoteContentShareReactionOverlay.js.map +1 -1
  55. package/dist/dist-esm/react-components/src/components/VideoGallery/utils/videoGalleryLayoutUtils.d.ts +4 -0
  56. package/dist/dist-esm/react-components/src/components/VideoGallery/utils/videoGalleryLayoutUtils.js +22 -1
  57. package/dist/dist-esm/react-components/src/components/VideoGallery/utils/videoGalleryLayoutUtils.js.map +1 -1
  58. package/dist/dist-esm/react-components/src/components/index.d.ts +1 -2
  59. package/dist/dist-esm/react-components/src/components/index.js.map +1 -1
  60. package/dist/dist-esm/react-components/src/components/styles/ReactionButton.styles.d.ts +3 -3
  61. package/dist/dist-esm/react-components/src/components/styles/ReactionButton.styles.js +16 -9
  62. package/dist/dist-esm/react-components/src/components/styles/ReactionButton.styles.js.map +1 -1
  63. package/dist/dist-esm/react-components/src/components/styles/ReactionOverlay.style.d.ts +2 -1
  64. package/dist/dist-esm/react-components/src/components/styles/ReactionOverlay.style.js +10 -12
  65. package/dist/dist-esm/react-components/src/components/styles/ReactionOverlay.style.js.map +1 -1
  66. package/dist/dist-esm/react-components/src/components/styles/SendBox.styles.d.ts +1 -1
  67. package/dist/dist-esm/react-components/src/components/styles/SendBox.styles.js +2 -2
  68. package/dist/dist-esm/react-components/src/components/styles/SendBox.styles.js.map +1 -1
  69. package/dist/dist-esm/react-components/src/components/styles/VideoTile.styles.d.ts +1 -0
  70. package/dist/dist-esm/react-components/src/components/styles/VideoTile.styles.js +3 -1
  71. package/dist/dist-esm/react-components/src/components/styles/VideoTile.styles.js.map +1 -1
  72. package/dist/dist-esm/react-components/src/components/utils/ChatMessageComponentAsEditBoxUtils.d.ts +1 -1
  73. package/dist/dist-esm/react-components/src/components/utils/ChatMessageComponentAsEditBoxUtils.js +2 -2
  74. package/dist/dist-esm/react-components/src/components/utils/ChatMessageComponentAsEditBoxUtils.js.map +1 -1
  75. package/dist/dist-esm/react-components/src/components/utils/ChatMessageComponentUtils.js +4 -3
  76. package/dist/dist-esm/react-components/src/components/utils/ChatMessageComponentUtils.js.map +1 -1
  77. package/dist/dist-esm/react-components/src/components/utils/SendBoxUtils.d.ts +3 -3
  78. package/dist/dist-esm/react-components/src/components/utils/SendBoxUtils.js +7 -7
  79. package/dist/dist-esm/react-components/src/components/utils/SendBoxUtils.js.map +1 -1
  80. package/dist/dist-esm/react-components/src/components/utils/common.d.ts +1 -1
  81. package/dist/dist-esm/react-components/src/components/utils/common.js +1 -1
  82. package/dist/dist-esm/react-components/src/components/utils/common.js.map +1 -1
  83. package/dist/dist-esm/react-components/src/localization/LocalizationProvider.js.map +1 -1
  84. package/dist/dist-esm/react-components/src/localization/locales/en-US/strings.json +3 -1
  85. package/dist/dist-esm/react-components/src/types/Attachment.d.ts +22 -95
  86. package/dist/dist-esm/react-components/src/types/Attachment.js.map +1 -1
  87. package/dist/dist-esm/react-components/src/types/ChatMessage.d.ts +2 -2
  88. package/dist/dist-esm/react-components/src/types/ChatMessage.js.map +1 -1
  89. package/dist/dist-esm/react-composites/src/composites/CallComposite/Strings.d.ts +24 -0
  90. package/dist/dist-esm/react-composites/src/composites/CallComposite/Strings.js.map +1 -1
  91. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/CallArrangement.js +3 -4
  92. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/CallArrangement.js.map +1 -1
  93. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/Prompt.js +0 -7
  94. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/Prompt.js.map +1 -1
  95. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/buttons/EndCall.d.ts +2 -0
  96. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/buttons/EndCall.js +66 -1
  97. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/buttons/EndCall.js.map +1 -1
  98. package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/CallPage.js +1 -3
  99. package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/CallPage.js.map +1 -1
  100. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/CallWithChatComposite.d.ts +2 -2
  101. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/CallWithChatComposite.js +3 -3
  102. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/CallWithChatComposite.js.map +1 -1
  103. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/AzureCommunicationCallWithChatAdapter.d.ts +8 -8
  104. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/AzureCommunicationCallWithChatAdapter.js +21 -21
  105. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/AzureCommunicationCallWithChatAdapter.js.map +1 -1
  106. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/CallWithChatAdapter.d.ts +8 -8
  107. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/CallWithChatAdapter.js.map +1 -1
  108. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/CallWithChatBackedChatAdapter.d.ts +8 -8
  109. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/CallWithChatBackedChatAdapter.js +15 -15
  110. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/CallWithChatBackedChatAdapter.js.map +1 -1
  111. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/state/CallWithChatAdapterState.d.ts +3 -3
  112. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/state/CallWithChatAdapterState.js +2 -2
  113. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/state/CallWithChatAdapterState.js.map +1 -1
  114. package/dist/dist-esm/react-composites/src/composites/ChatComposite/ChatComposite.d.ts +2 -2
  115. package/dist/dist-esm/react-composites/src/composites/ChatComposite/ChatComposite.js +1 -1
  116. package/dist/dist-esm/react-composites/src/composites/ChatComposite/ChatComposite.js.map +1 -1
  117. package/dist/dist-esm/react-composites/src/composites/ChatComposite/ChatScreen.d.ts +2 -33
  118. package/dist/dist-esm/react-composites/src/composites/ChatComposite/ChatScreen.js +26 -18
  119. package/dist/dist-esm/react-composites/src/composites/ChatComposite/ChatScreen.js.map +1 -1
  120. package/dist/dist-esm/react-composites/src/composites/ChatComposite/Strings.d.ts +2 -2
  121. package/dist/dist-esm/react-composites/src/composites/ChatComposite/Strings.js.map +1 -1
  122. package/dist/dist-esm/react-composites/src/composites/ChatComposite/adapter/AzureCommunicationAttachmentUploadAdapter.d.ts +47 -0
  123. package/dist/dist-esm/react-composites/src/composites/ChatComposite/adapter/AzureCommunicationAttachmentUploadAdapter.js +179 -0
  124. package/dist/dist-esm/react-composites/src/composites/ChatComposite/adapter/AzureCommunicationAttachmentUploadAdapter.js.map +1 -0
  125. package/dist/dist-esm/react-composites/src/composites/ChatComposite/adapter/AzureCommunicationChatAdapter.d.ts +9 -9
  126. package/dist/dist-esm/react-composites/src/composites/ChatComposite/adapter/AzureCommunicationChatAdapter.js +30 -30
  127. package/dist/dist-esm/react-composites/src/composites/ChatComposite/adapter/AzureCommunicationChatAdapter.js.map +1 -1
  128. package/dist/dist-esm/react-composites/src/composites/ChatComposite/adapter/ChatAdapter.d.ts +5 -5
  129. package/dist/dist-esm/react-composites/src/composites/ChatComposite/adapter/ChatAdapter.js.map +1 -1
  130. package/dist/dist-esm/react-composites/src/composites/ChatComposite/adapter/ChatAdapterProvider.d.ts +2 -2
  131. package/dist/dist-esm/react-composites/src/composites/ChatComposite/adapter/ChatAdapterProvider.js +8 -8
  132. package/dist/dist-esm/react-composites/src/composites/ChatComposite/adapter/ChatAdapterProvider.js.map +1 -1
  133. package/dist/dist-esm/react-composites/src/composites/ChatComposite/file-sharing/{FileUpload.d.ts → AttachmentUpload.d.ts} +11 -11
  134. package/dist/dist-esm/react-composites/src/composites/ChatComposite/file-sharing/{FileUpload.js → AttachmentUpload.js} +13 -13
  135. package/dist/dist-esm/react-composites/src/composites/ChatComposite/file-sharing/AttachmentUpload.js.map +1 -0
  136. package/dist/dist-esm/react-composites/src/composites/ChatComposite/file-sharing/AttachmentUploadButton.d.ts +38 -0
  137. package/dist/dist-esm/react-composites/src/composites/ChatComposite/file-sharing/{FileUploadButton.js → AttachmentUploadButton.js} +14 -12
  138. package/dist/dist-esm/react-composites/src/composites/ChatComposite/file-sharing/AttachmentUploadButton.js.map +1 -0
  139. package/dist/dist-esm/react-composites/src/composites/ChatComposite/file-sharing/index.d.ts +4 -4
  140. package/dist/dist-esm/react-composites/src/composites/ChatComposite/file-sharing/index.js +2 -2
  141. package/dist/dist-esm/react-composites/src/composites/ChatComposite/file-sharing/index.js.map +1 -1
  142. package/dist/dist-esm/react-composites/src/composites/ChatComposite/index.d.ts +2 -3
  143. package/dist/dist-esm/react-composites/src/composites/ChatComposite/index.js.map +1 -1
  144. package/dist/dist-esm/react-composites/src/composites/ChatComposite/selectors/attachmentUploadsSelector.d.ts +29 -0
  145. package/dist/dist-esm/react-composites/src/composites/ChatComposite/selectors/attachmentUploadsSelector.js +12 -0
  146. package/dist/dist-esm/react-composites/src/composites/ChatComposite/selectors/attachmentUploadsSelector.js.map +1 -0
  147. package/dist/dist-esm/react-composites/src/composites/ChatComposite/selectors/baseSelectors.d.ts +2 -2
  148. package/dist/dist-esm/react-composites/src/composites/ChatComposite/selectors/baseSelectors.js +2 -2
  149. package/dist/dist-esm/react-composites/src/composites/ChatComposite/selectors/baseSelectors.js.map +1 -1
  150. package/dist/dist-esm/react-composites/src/composites/common/ControlBar/CommonCallControlBar.js +26 -9
  151. package/dist/dist-esm/react-composites/src/composites/common/ControlBar/CommonCallControlBar.js.map +1 -1
  152. package/dist/dist-esm/react-composites/src/composites/common/Drawer/MoreDrawer.js +6 -2
  153. package/dist/dist-esm/react-composites/src/composites/common/Drawer/MoreDrawer.js.map +1 -1
  154. package/dist/dist-esm/react-composites/src/composites/common/SendBox.js +5 -5
  155. package/dist/dist-esm/react-composites/src/composites/common/SendBox.js.map +1 -1
  156. package/dist/dist-esm/react-composites/src/composites/common/types/CommonCallControlOptions.d.ts +8 -2
  157. package/dist/dist-esm/react-composites/src/composites/common/types/CommonCallControlOptions.js.map +1 -1
  158. package/dist/dist-esm/react-composites/src/composites/common/utils.d.ts +4 -0
  159. package/dist/dist-esm/react-composites/src/composites/common/utils.js +6 -0
  160. package/dist/dist-esm/react-composites/src/composites/common/utils.js.map +1 -1
  161. package/dist/dist-esm/react-composites/src/composites/localization/locales/ar-SA/strings.json +1 -1
  162. package/dist/dist-esm/react-composites/src/composites/localization/locales/cs-CZ/strings.json +1 -1
  163. package/dist/dist-esm/react-composites/src/composites/localization/locales/de-DE/strings.json +1 -1
  164. package/dist/dist-esm/react-composites/src/composites/localization/locales/en-GB/strings.json +1 -1
  165. package/dist/dist-esm/react-composites/src/composites/localization/locales/en-US/strings.json +7 -1
  166. package/dist/dist-esm/react-composites/src/composites/localization/locales/es-ES/strings.json +1 -1
  167. package/dist/dist-esm/react-composites/src/composites/localization/locales/fi-FI/strings.json +1 -1
  168. package/dist/dist-esm/react-composites/src/composites/localization/locales/fr-FR/strings.json +1 -1
  169. package/dist/dist-esm/react-composites/src/composites/localization/locales/he-IL/strings.json +1 -1
  170. package/dist/dist-esm/react-composites/src/composites/localization/locales/it-IT/strings.json +1 -1
  171. package/dist/dist-esm/react-composites/src/composites/localization/locales/ja-JP/strings.json +1 -1
  172. package/dist/dist-esm/react-composites/src/composites/localization/locales/ko-KR/strings.json +1 -1
  173. package/dist/dist-esm/react-composites/src/composites/localization/locales/nb-NO/strings.json +1 -1
  174. package/dist/dist-esm/react-composites/src/composites/localization/locales/nl-NL/strings.json +1 -1
  175. package/dist/dist-esm/react-composites/src/composites/localization/locales/pl-PL/strings.json +1 -1
  176. package/dist/dist-esm/react-composites/src/composites/localization/locales/pt-BR/strings.json +1 -1
  177. package/dist/dist-esm/react-composites/src/composites/localization/locales/ru-RU/strings.json +1 -1
  178. package/dist/dist-esm/react-composites/src/composites/localization/locales/sv-SE/strings.json +1 -1
  179. package/dist/dist-esm/react-composites/src/composites/localization/locales/tr-TR/strings.json +1 -1
  180. package/dist/dist-esm/react-composites/src/composites/localization/locales/zh-CN/strings.json +1 -1
  181. package/dist/dist-esm/react-composites/src/composites/localization/locales/zh-TW/strings.json +1 -1
  182. package/package.json +7 -7
  183. package/dist/dist-cjs/communication-react/index-qxnuqL7s.js.map +0 -1
  184. package/dist/dist-esm/react-composites/src/composites/ChatComposite/adapter/AzureCommunicationFileUploadAdapter.d.ts +0 -48
  185. package/dist/dist-esm/react-composites/src/composites/ChatComposite/adapter/AzureCommunicationFileUploadAdapter.js +0 -160
  186. package/dist/dist-esm/react-composites/src/composites/ChatComposite/adapter/AzureCommunicationFileUploadAdapter.js.map +0 -1
  187. package/dist/dist-esm/react-composites/src/composites/ChatComposite/file-sharing/FileUpload.js.map +0 -1
  188. package/dist/dist-esm/react-composites/src/composites/ChatComposite/file-sharing/FileUploadButton.d.ts +0 -36
  189. package/dist/dist-esm/react-composites/src/composites/ChatComposite/file-sharing/FileUploadButton.js.map +0 -1
  190. package/dist/dist-esm/react-composites/src/composites/ChatComposite/selectors/fileUploadsSelector.d.ts +0 -27
  191. package/dist/dist-esm/react-composites/src/composites/ChatComposite/selectors/fileUploadsSelector.js +0 -12
  192. package/dist/dist-esm/react-composites/src/composites/ChatComposite/selectors/fileUploadsSelector.js.map +0 -1
@@ -1,48 +0,0 @@
1
- import { AttachmentMetadata } from "../../../../../react-components/src";
2
- import { FileUploadManager, FileUploadState } from "../../../../../react-components/src";
3
- import { FileSharingMetadata } from '../file-sharing';
4
- import { ChatContext } from './AzureCommunicationChatAdapter';
5
- /**
6
- * A record containing {@link FileUploadState} mapped to unique ids.
7
- * @beta
8
- */
9
- export type FileUploadsUiState = Record<string, FileUploadState>;
10
- /**
11
- * @beta
12
- */
13
- export interface FileUploadAdapter {
14
- registerActiveFileUploads: (files: File[]) => FileUploadManager[];
15
- registerCompletedFileUploads: (metadata: AttachmentMetadata[]) => FileUploadManager[];
16
- clearFileUploads: () => void;
17
- cancelFileUpload: (id: string) => void;
18
- updateFileUploadProgress: (id: string, progress: number) => void;
19
- updateFileUploadErrorMessage: (id: string, errorMessage: string) => void;
20
- updateFileUploadMetadata: (id: string, metadata: AttachmentMetadata) => void;
21
- }
22
- /**
23
- * @internal
24
- */
25
- export declare class AzureCommunicationFileUploadAdapter implements FileUploadAdapter {
26
- private context;
27
- private fileUploads;
28
- constructor(chatContext: ChatContext);
29
- private findFileUpload;
30
- private deleteFileUploads;
31
- private deleteErroneousFileUploads;
32
- private registerFileUploads;
33
- registerActiveFileUploads(files: File[]): FileUploadManager[];
34
- registerCompletedFileUploads(metadata: AttachmentMetadata[]): FileUploadManager[];
35
- clearFileUploads(): void;
36
- cancelFileUpload(id: string): void;
37
- updateFileUploadProgress(id: string, progress: number): void;
38
- updateFileUploadErrorMessage(id: string, errorMessage: string): void;
39
- updateFileUploadMetadata(id: string, metadata: AttachmentMetadata): void;
40
- private subscribeAllEvents;
41
- private unsubscribeAllEvents;
42
- }
43
- /**
44
- * @param fileUploadUiState {@link FileUploadsUiState}
45
- * @private
46
- */
47
- export declare const convertFileUploadsUiStateToMessageMetadata: (fileUploads?: FileUploadsUiState) => FileSharingMetadata | undefined;
48
- //# sourceMappingURL=AzureCommunicationFileUploadAdapter.d.ts.map
@@ -1,160 +0,0 @@
1
- // Copyright (c) Microsoft Corporation.
2
- // Licensed under the MIT License.
3
- /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
4
- import { produce } from 'immer';
5
- /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
6
- import { FileUpload } from '../file-sharing';
7
- /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
8
- /**
9
- * @internal
10
- */
11
- class FileUploadContext {
12
- constructor(chatContext) {
13
- this.chatContext = chatContext;
14
- }
15
- getFileUploads() {
16
- return this.chatContext.getState().fileUploads;
17
- }
18
- addFileUploads(fileUploads) {
19
- const fileUploadsMap = convertObservableFileUploadToFileUploadsUiState(fileUploads);
20
- this.chatContext.setState(produce(this.chatContext.getState(), (draft) => {
21
- draft.fileUploads = draft.fileUploads || {};
22
- draft.fileUploads = Object.assign(Object.assign({}, draft.fileUploads), fileUploadsMap);
23
- }));
24
- }
25
- clearFileUploads() {
26
- this.chatContext.setState(produce(this.chatContext.getState(), (draft) => {
27
- draft.fileUploads = {};
28
- }));
29
- }
30
- updateFileUpload(id, data) {
31
- this.chatContext.setState(produce(this.chatContext.getState(), (draft) => {
32
- var _a, _b;
33
- if ((_a = draft.fileUploads) === null || _a === void 0 ? void 0 : _a[id]) {
34
- draft.fileUploads[id] = Object.assign(Object.assign({}, (_b = draft.fileUploads) === null || _b === void 0 ? void 0 : _b[id]), data);
35
- }
36
- }));
37
- }
38
- deleteFileUploads(ids) {
39
- this.chatContext.setState(produce(this.chatContext.getState(), (draft) => {
40
- ids.forEach((id) => {
41
- var _a;
42
- (_a = draft === null || draft === void 0 ? void 0 : draft.fileUploads) === null || _a === void 0 ? true : delete _a[id];
43
- });
44
- }));
45
- }
46
- }
47
- /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
48
- /**
49
- * @internal
50
- */
51
- export class AzureCommunicationFileUploadAdapter {
52
- constructor(chatContext) {
53
- this.fileUploads = [];
54
- this.context = new FileUploadContext(chatContext);
55
- }
56
- findFileUpload(id) {
57
- return this.fileUploads.find((fileUpload) => fileUpload.id === id);
58
- }
59
- deleteFileUploads(ids) {
60
- this.fileUploads = this.fileUploads.filter((fileUpload) => !ids.includes(fileUpload.id));
61
- this.context.deleteFileUploads(ids);
62
- }
63
- deleteErroneousFileUploads() {
64
- const fileUploads = this.context.getFileUploads() || {};
65
- const ids = Object.values(fileUploads)
66
- .filter((item) => item.error)
67
- .map((item) => item.id);
68
- ids.forEach((id) => {
69
- const fileUpload = this.findFileUpload(id);
70
- this.unsubscribeAllEvents(fileUpload);
71
- });
72
- this.deleteFileUploads(ids);
73
- }
74
- registerFileUploads(files) {
75
- this.deleteErroneousFileUploads();
76
- const fileUploads = [];
77
- files.forEach((file) => fileUploads.push(new FileUpload(file)));
78
- fileUploads.forEach((fileUpload) => this.subscribeAllEvents(fileUpload));
79
- this.fileUploads = this.fileUploads.concat(fileUploads);
80
- this.context.addFileUploads(fileUploads);
81
- return fileUploads;
82
- }
83
- registerActiveFileUploads(files) {
84
- return this.registerFileUploads(files);
85
- }
86
- registerCompletedFileUploads(metadata) {
87
- return this.registerFileUploads(metadata);
88
- }
89
- clearFileUploads() {
90
- this.context.clearFileUploads();
91
- this.fileUploads.forEach((fileUpload) => this.unsubscribeAllEvents(fileUpload));
92
- this.fileUploads = [];
93
- }
94
- cancelFileUpload(id) {
95
- this.deleteErroneousFileUploads();
96
- const fileUpload = this.findFileUpload(id);
97
- this.unsubscribeAllEvents(fileUpload);
98
- this.deleteFileUploads([id]);
99
- }
100
- updateFileUploadProgress(id, progress) {
101
- this.context.updateFileUpload(id, { progress });
102
- }
103
- updateFileUploadErrorMessage(id, errorMessage) {
104
- this.context.updateFileUpload(id, {
105
- error: {
106
- message: errorMessage,
107
- timestamp: Date.now()
108
- }
109
- });
110
- }
111
- updateFileUploadMetadata(id, metadata) {
112
- this.context.updateFileUpload(id, { progress: 1, metadata });
113
- }
114
- subscribeAllEvents(fileUpload) {
115
- fileUpload.on('uploadProgressChange', this.updateFileUploadProgress.bind(this));
116
- fileUpload.on('uploadComplete', this.updateFileUploadMetadata.bind(this));
117
- fileUpload.on('uploadFail', this.updateFileUploadErrorMessage.bind(this));
118
- }
119
- unsubscribeAllEvents(fileUpload) {
120
- fileUpload === null || fileUpload === void 0 ? void 0 : fileUpload.off('uploadProgressChange', this.updateFileUploadProgress.bind(this));
121
- fileUpload === null || fileUpload === void 0 ? void 0 : fileUpload.off('uploadComplete', this.updateFileUploadMetadata.bind(this));
122
- fileUpload === null || fileUpload === void 0 ? void 0 : fileUpload.off('uploadFail', this.updateFileUploadErrorMessage.bind(this));
123
- }
124
- }
125
- /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
126
- /**
127
- * @param fileUploadUiState {@link FileUploadsUiState}
128
- * @private
129
- */
130
- export const convertFileUploadsUiStateToMessageMetadata = (fileUploads) => {
131
- if (fileUploads) {
132
- const fileMetadata = [];
133
- Object.keys(fileUploads).forEach((key) => {
134
- const file = fileUploads[key];
135
- if (!file.error && file.metadata) {
136
- fileMetadata.push(file.metadata);
137
- }
138
- });
139
- if (fileMetadata.length > 0) {
140
- return { fileSharingMetadata: JSON.stringify(fileMetadata) };
141
- }
142
- }
143
- return undefined;
144
- };
145
- /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
146
- /**
147
- * @private
148
- */
149
- const convertObservableFileUploadToFileUploadsUiState = (fileUploads) => {
150
- return fileUploads.reduce((map, fileUpload) => {
151
- map[fileUpload.id] = {
152
- id: fileUpload.id,
153
- filename: fileUpload.fileName,
154
- progress: 0,
155
- metadata: fileUpload.metadata
156
- };
157
- return map;
158
- }, {});
159
- };
160
- //# sourceMappingURL=AzureCommunicationFileUploadAdapter.js.map
@@ -1 +0,0 @@
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 { AttachmentMetadata } from '@internal/react-components';\nimport { FileUploadManager, FileUploadState } from '@internal/react-components';\n/* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */\nimport { produce } from 'immer';\n/* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */\nimport { FileSharingMetadata, FileUpload } from '../file-sharing';\n/* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */\nimport { ChatContext } from './AzureCommunicationChatAdapter';\n/* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */\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: AttachmentMetadata[]) => 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: AttachmentMetadata) => void;\n}\n\n/* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */\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(attachment-download) @conditional-compile-remove(attachment-upload) */\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[] | AttachmentMetadata[]): 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: AttachmentMetadata[]): 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: AttachmentMetadata): 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(attachment-download) @conditional-compile-remove(attachment-upload) */\n/**\n * @param fileUploadUiState {@link FileUploadsUiState}\n * @private\n */\nexport const convertFileUploadsUiStateToMessageMetadata = (\n fileUploads?: FileUploadsUiState\n): FileSharingMetadata | undefined => {\n if (fileUploads) {\n const fileMetadata: AttachmentMetadata[] = [];\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 if (fileMetadata.length > 0) {\n return { fileSharingMetadata: JSON.stringify(fileMetadata) };\n }\n }\n return undefined;\n};\n\n/* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */\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"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"FileUpload.js","sourceRoot":"","sources":["../../../../../../../../react-composites/src/composites/ChatComposite/file-sharing/FileUpload.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,oBAAoB,EAAE,yCAAgC;AAS/D;;;;GAIG;AACH,MAAM,OAAO,UAAU;IAarB,YAAY,IAA+B;QACzC,IAAI,CAAC,QAAQ,GAAG,IAAI,YAAY,EAAE,CAAC;QACnC,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,oBAAoB,CAAC,CAAC;QACpD,IAAI,CAAC,EAAE,GAAG,MAAM,EAAE,CAAC;QACnB,IAAI,IAAI,YAAY,IAAI,EAAE,CAAC;YACzB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACnB,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACvB,CAAC;QACD,MAAM,IAAI,GAAI,IAAsC,aAAtC,IAAI,uBAAJ,IAAI,CAAoC,IAAI,CAAC;QAC3D,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;IACvB,CAAC;IAED,2BAA2B,CAAC,KAAa;QACvC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,sBAAsB,EAAE,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;IAC7D,CAAC;IAED,qBAAqB,CAAC,QAA4B;QAChD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;IAC1D,CAAC;IAED,kBAAkB,CAAC,OAAe;QAChC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IACrD,CAAC;IAKD;;;;OAIG;IACH,EAAE,CAAC,KAAuB,EAAE,QAAiC;QAC3D,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IAC7C,CAAC;IAKD;;;;OAIG;IACH,GAAG,CAAC,KAAuB,EAAE,QAAiC;QAC5D,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IAChD,CAAC;CACF","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { EventEmitter } from 'events';\nimport { nanoid } from 'nanoid';\nimport { _MAX_EVENT_LISTENERS } from '@internal/acs-ui-common';\nimport {\n AttachmentMetadata,\n FileUploadHandler,\n FileUploadManager,\n FileUploadState,\n FileUploadError\n} from '@internal/react-components';\n\n/**\n * A wrapper object for a file that is being uploaded.\n * Provides common functions for updating the upload progress, canceling an upload etc.\n * @private\n */\nexport class FileUpload implements FileUploadManager, FileUploadEventEmitter {\n private _emitter: EventEmitter;\n public readonly id: string;\n public readonly file?: File;\n /**\n * Filename to be displayed in the UI during file upload.\n */\n public readonly fileName: string;\n /**\n * Optional object of type {@link AttachmentMetadata}\n */\n public metadata?: AttachmentMetadata;\n\n constructor(data: File | AttachmentMetadata) {\n this._emitter = new EventEmitter();\n this._emitter.setMaxListeners(_MAX_EVENT_LISTENERS);\n this.id = nanoid();\n if (data instanceof File) {\n this.file = data;\n } else {\n this.metadata = data;\n }\n const name = (data as unknown as AttachmentMetadata)?.name;\n this.fileName = name;\n }\n\n notifyUploadProgressChanged(value: number): void {\n this._emitter.emit('uploadProgressChange', this.id, value);\n }\n\n notifyUploadCompleted(metadata: AttachmentMetadata): void {\n this._emitter.emit('uploadComplete', this.id, metadata);\n }\n\n notifyUploadFailed(message: string): void {\n this._emitter.emit('uploadFail', this.id, message);\n }\n\n on(event: 'uploadProgressChange', listener: UploadProgressListener): void;\n on(event: 'uploadComplete', listener: UploadCompleteListener): void;\n on(event: 'uploadFail', listener: UploadFailedListener): void;\n /**\n * File upload event subscriber.\n * @param event - {@link FileUploadEvents}\n * @param listener - {@link FileUploadEventListener}\n */\n on(event: FileUploadEvents, listener: FileUploadEventListener): void {\n this._emitter.addListener(event, listener);\n }\n\n off(event: 'uploadProgressChange', listener: UploadProgressListener): void;\n off(event: 'uploadComplete', listener: UploadCompleteListener): void;\n off(event: 'uploadFail', listener: UploadFailedListener): void;\n /**\n * File upload event unsubscriber.\n * @param event - {@link FileUploadEvents}\n * @param listener - {@link FileUploadEventListener}\n */\n off(event: FileUploadEvents, listener: FileUploadEventListener): void {\n this._emitter.removeListener(event, listener);\n }\n}\n\nexport type { AttachmentMetadata, FileUploadHandler, FileUploadManager, FileUploadState, FileUploadError };\n\n/**\n * Events emitted by the FileUpload class.\n * @beta\n */\ntype FileUploadEvents = 'uploadProgressChange' | 'uploadComplete' | 'uploadFail';\n\n/**\n * Events listeners supported by the FileUpload class.\n * @beta\n */\ntype FileUploadEventListener = UploadProgressListener | UploadCompleteListener | UploadFailedListener;\n\n/**\n * Listener for `uploadProgressed` event.\n * @beta\n */\ntype UploadProgressListener = (id: string, value: number) => void;\n/**\n * Listener for `uploadComplete` event.\n * @beta\n */\ntype UploadCompleteListener = (id: string, metadata: AttachmentMetadata) => void;\n/**\n * Listener for `uploadFailed` event.\n * @beta\n */\ntype UploadFailedListener = (id: string, message: string) => void;\n\n/**\n * @beta\n */\ninterface FileUploadEventEmitter {\n /**\n * Subscriber function for `uploadProgressed` event.\n */\n on(event: 'uploadProgressChange', listener: UploadProgressListener): void;\n /**\n * Subscriber function for `uploadComplete` event.\n */\n on(event: 'uploadComplete', listener: UploadCompleteListener): void;\n /**\n * Subscriber function for `uploadFailed` event.\n */\n on(event: 'uploadFail', listener: UploadFailedListener): void;\n\n /**\n * Unsubscriber function for `uploadProgressed` event.\n */\n off(event: 'uploadProgressChange', listener: UploadProgressListener): void;\n /**\n * Unsubscriber function for `uploadComplete` event.\n */\n off(event: 'uploadComplete', listener: UploadCompleteListener): void;\n /**\n * Unsubscriber function for `uploadFailed` event.\n */\n off(event: 'uploadFail', listener: UploadFailedListener): void;\n}\n"]}
@@ -1,36 +0,0 @@
1
- /// <reference types="react" />
2
- /**
3
- * Props for {@link FileUploadButton} component.
4
- * @internal
5
- */
6
- export interface FileUploadButtonProps {
7
- /**
8
- * A string containing the comma separated list of accepted file types.
9
- * Similar to the `accept` attribute of the `<input type="file" />` element.
10
- */
11
- accept?: string;
12
- /**
13
- * Allows multiple files to be selected if set to `true`.
14
- * Default value is `false`.
15
- * Similar to the `multiple` attribute of the `<input type="file" />` element.
16
- */
17
- multiple?: boolean;
18
- /**
19
- * onChange handler for the file upload button.
20
- * Similar to the `onChange` attribute of the `<input type="file" />` element.
21
- * Called every time files are selected through the file upload button with a {@link FileList}
22
- * of selected files.
23
- */
24
- onChange?: (files: FileList | null) => void;
25
- }
26
- /**
27
- * @internal
28
- */
29
- export declare const FileUploadButton: (props: FileUploadButtonProps) => JSX.Element;
30
- /**
31
- * A wrapper to return {@link FileUploadButton} component conditionally.
32
- * It will return `<></>` for stable builds.
33
- * @internal
34
- */
35
- export declare const FileUploadButtonWrapper: (props: Pick<FileUploadButtonProps, 'accept' | 'multiple' | 'onChange'>) => JSX.Element;
36
- //# sourceMappingURL=FileUploadButton.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"FileUploadButton.js","sourceRoot":"","sources":["../../../../../../../../react-composites/src/composites/ChatComposite/file-sharing/FileUploadButton.tsx"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { IconButton, mergeStyles, Stack, useTheme } from '@fluentui/react';\nimport React from 'react';\nimport { ChatCompositeIcon } from '../../common/icons';\n/* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */\nimport { useLocale } from '../../localization';\n\n/**\n * Props for {@link FileUploadButton} component.\n * @internal\n */\nexport interface FileUploadButtonProps {\n /**\n * A string containing the comma separated list of accepted file types.\n * Similar to the `accept` attribute of the `<input type=\"file\" />` element.\n */\n accept?: string;\n /**\n * Allows multiple files to be selected if set to `true`.\n * Default value is `false`.\n * Similar to the `multiple` attribute of the `<input type=\"file\" />` element.\n */\n multiple?: boolean;\n /**\n * onChange handler for the file upload button.\n * Similar to the `onChange` attribute of the `<input type=\"file\" />` element.\n * Called every time files are selected through the file upload button with a {@link FileList}\n * of selected files.\n */\n onChange?: (files: FileList | null) => void;\n}\n\n/**\n * @internal\n */\nexport const FileUploadButton = (props: FileUploadButtonProps): JSX.Element => {\n const inputRef = React.useRef<HTMLInputElement>(null);\n const theme = useTheme();\n const { accept, multiple = false, onChange } = props;\n\n const fileUploadButtonClassName = mergeStyles({\n width: '1.5rem',\n height: '1.5rem',\n cursor: 'pointer',\n padding: '0.15rem',\n ':hover': {\n backgroundColor: theme.palette.neutralLighter\n }\n });\n\n const iconButtonClassName = mergeStyles({\n color: 'unset',\n width: '1.5rem',\n height: '1.5rem',\n ':hover': {\n color: 'unset',\n background: 'transparent'\n }\n });\n\n return (\n <>\n <Stack\n verticalAlign=\"center\"\n horizontalAlign=\"center\"\n className={fileUploadButtonClassName}\n onClick={() => {\n inputRef.current?.click();\n }}\n >\n <IconButton className={iconButtonClassName} ariaLabel={uploadFileButtonStringTrampoline()}>\n <SendBoxAttachFileIconTrampoline />\n </IconButton>\n </Stack>\n <input\n ref={inputRef}\n hidden\n multiple={multiple ?? true}\n accept={accept ?? '*'}\n type=\"file\"\n onClick={(e) => {\n // To ensure that `onChange` is fired even if the same file is picked again.\n e.currentTarget.value = '';\n }}\n onChange={(e) => {\n onChange && onChange(e.currentTarget.files);\n }}\n />\n </>\n );\n};\n\nconst SendBoxAttachFileIconTrampoline = (): JSX.Element => {\n // @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload)\n return <ChatCompositeIcon iconName=\"SendBoxAttachFile\" />;\n // Return _some_ available icon, as the real icon is beta-only.\n return <ChatCompositeIcon iconName=\"EditBoxCancel\" />;\n};\n\n/**\n * A wrapper to return {@link FileUploadButton} component conditionally.\n * It will return `<></>` for stable builds.\n * @internal\n */\nexport const FileUploadButtonWrapper = (\n // To make conditional compilation not throw errors.\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n props: Pick<FileUploadButtonProps, 'accept' | 'multiple' | 'onChange'>\n): JSX.Element => {\n return (\n <>\n {\n /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */\n <FileUploadButton {...props} />\n }\n </>\n );\n};\n\nconst uploadFileButtonStringTrampoline = (): string => {\n //@conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload)\n //eslint-disable-next-line react-hooks/rules-of-hooks\n return useLocale().strings.chat.uploadFile;\n return '';\n};\n"]}
@@ -1,27 +0,0 @@
1
- /**
2
- * @private
3
- */
4
- export declare const fileUploadsSelector: ((state: import("index").ChatAdapterUiState & import("index").ChatCompositeClientState) => {
5
- files: {
6
- uploadComplete: boolean;
7
- id: string;
8
- filename: string;
9
- progress: number;
10
- metadata?: import("index").AttachmentMetadata | undefined;
11
- error?: import("index").FileUploadError | undefined;
12
- }[];
13
- }) & import("reselect").OutputSelectorFields<(args_0: import("index").FileUploadsUiState | undefined) => {
14
- files: {
15
- uploadComplete: boolean;
16
- id: string;
17
- filename: string;
18
- progress: number;
19
- metadata?: import("index").AttachmentMetadata | undefined;
20
- error?: import("index").FileUploadError | undefined;
21
- }[];
22
- }, {
23
- clearCache: () => void;
24
- }> & {
25
- clearCache: () => void;
26
- };
27
- //# sourceMappingURL=fileUploadsSelector.d.ts.map
@@ -1,12 +0,0 @@
1
- // Copyright (c) Microsoft Corporation.
2
- // Licensed under the MIT License.
3
- import { createSelector } from 'reselect';
4
- import { getFileUploads } from './baseSelectors';
5
- /**
6
- * @private
7
- */
8
- export const fileUploadsSelector = createSelector([getFileUploads], (fileUploads) => {
9
- const files = Object.values(fileUploads || {}).map((fileUpload) => (Object.assign(Object.assign({}, fileUpload), { uploadComplete: !!fileUpload.metadata })));
10
- return { files: files };
11
- });
12
- //# sourceMappingURL=fileUploadsSelector.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"fileUploadsSelector.js","sourceRoot":"","sources":["../../../../../../../../react-composites/src/composites/ChatComposite/selectors/fileUploadsSelector.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEjD;;GAEG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,cAAc,CAAC,CAAC,cAAc,CAAC,EAAE,CAAC,WAAW,EAAE,EAAE;IAClF,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,iCAC9D,UAAU,KACb,cAAc,EAAE,CAAC,CAAC,UAAU,CAAC,QAAQ,IACrC,CAAC,CAAC;IACJ,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;AAC1B,CAAC,CAAC,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { createSelector } from 'reselect';\nimport { getFileUploads } from './baseSelectors';\n\n/**\n * @private\n */\nexport const fileUploadsSelector = createSelector([getFileUploads], (fileUploads) => {\n const files = Object.values(fileUploads || {}).map((fileUpload) => ({\n ...fileUpload,\n uploadComplete: !!fileUpload.metadata\n }));\n return { files: files };\n});\n"]}