@azure/communication-react 1.18.0-alpha-202407180014 → 1.18.0-alpha-202407200014
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/communication-react.d.ts +71 -18
 - package/dist/dist-cjs/communication-react/{ChatMessageComponentAsRichTextEditBox-Bi4Or6hk.js → ChatMessageComponentAsRichTextEditBox-D4ctXnw1.js} +27 -6
 - package/dist/dist-cjs/communication-react/ChatMessageComponentAsRichTextEditBox-D4ctXnw1.js.map +1 -0
 - package/dist/dist-cjs/communication-react/{RichTextSendBoxWrapper-CaXswhPn.js → RichTextSendBoxWrapper-F6eqVXer.js} +2 -2
 - package/dist/dist-cjs/communication-react/{RichTextSendBoxWrapper-CaXswhPn.js.map → RichTextSendBoxWrapper-F6eqVXer.js.map} +1 -1
 - package/dist/dist-cjs/communication-react/{index-B3X0l4SB.js → index-BJO_NOTU.js} +658 -367
 - package/dist/dist-cjs/communication-react/index-BJO_NOTU.js.map +1 -0
 - package/dist/dist-cjs/communication-react/index.js +1 -1
 - package/dist/dist-esm/acs-ui-common/src/telemetryVersion.js +1 -1
 - package/dist/dist-esm/acs-ui-common/src/telemetryVersion.js.map +1 -1
 - package/dist/dist-esm/calling-stateful-client/src/CallAgentDeclarative.d.ts +3 -3
 - package/dist/dist-esm/calling-stateful-client/src/CallAgentDeclarative.js.map +1 -1
 - package/dist/dist-esm/calling-stateful-client/src/CallAgentDeclarativeCommon.d.ts +1 -1
 - package/dist/dist-esm/calling-stateful-client/src/CallAgentDeclarativeCommon.js +15 -7
 - package/dist/dist-esm/calling-stateful-client/src/CallAgentDeclarativeCommon.js.map +1 -1
 - package/dist/dist-esm/calling-stateful-client/src/IncomingCallDeclarative.d.ts +2 -8
 - package/dist/dist-esm/calling-stateful-client/src/IncomingCallDeclarative.js.map +1 -1
 - package/dist/dist-esm/calling-stateful-client/src/TeamsCallAgentDeclarative.d.ts +14 -2
 - package/dist/dist-esm/calling-stateful-client/src/TeamsCallAgentDeclarative.js.map +1 -1
 - package/dist/dist-esm/calling-stateful-client/src/TeamsIncomingCallDeclarative.d.ts +17 -0
 - package/dist/dist-esm/calling-stateful-client/src/TeamsIncomingCallDeclarative.js +49 -0
 - package/dist/dist-esm/calling-stateful-client/src/TeamsIncomingCallDeclarative.js.map +1 -0
 - package/dist/dist-esm/calling-stateful-client/src/TypeGuards.d.ts +9 -1
 - package/dist/dist-esm/calling-stateful-client/src/TypeGuards.js +16 -0
 - package/dist/dist-esm/calling-stateful-client/src/TypeGuards.js.map +1 -1
 - package/dist/dist-esm/calling-stateful-client/src/index-public.d.ts +1 -1
 - package/dist/dist-esm/calling-stateful-client/src/index-public.js.map +1 -1
 - package/dist/dist-esm/communication-react/src/index.d.ts +1 -1
 - package/dist/dist-esm/communication-react/src/index.js.map +1 -1
 - package/dist/dist-esm/react-components/src/components/Attachment/AttachmentCard.js +14 -8
 - package/dist/dist-esm/react-components/src/components/Attachment/AttachmentCard.js.map +1 -1
 - package/dist/dist-esm/react-components/src/components/ChatMessage/ChatMessageComponentWrapper.d.ts +8 -2
 - package/dist/dist-esm/react-components/src/components/ChatMessage/ChatMessageComponentWrapper.js.map +1 -1
 - package/dist/dist-esm/react-components/src/components/ChatMessage/MyMessageComponents/ChatMessageComponentAsEditBoxPicker.d.ts +6 -4
 - package/dist/dist-esm/react-components/src/components/ChatMessage/MyMessageComponents/ChatMessageComponentAsEditBoxPicker.js +2 -12
 - package/dist/dist-esm/react-components/src/components/ChatMessage/MyMessageComponents/ChatMessageComponentAsEditBoxPicker.js.map +1 -1
 - package/dist/dist-esm/react-components/src/components/ChatMessage/MyMessageComponents/ChatMessageComponentAsRichTextEditBox.d.ts +2 -2
 - package/dist/dist-esm/react-components/src/components/ChatMessage/MyMessageComponents/ChatMessageComponentAsRichTextEditBox.js +25 -4
 - package/dist/dist-esm/react-components/src/components/ChatMessage/MyMessageComponents/ChatMessageComponentAsRichTextEditBox.js.map +1 -1
 - package/dist/dist-esm/react-components/src/components/ChatMessage/MyMessageComponents/ChatMyMessageComponent.d.ts +8 -6
 - package/dist/dist-esm/react-components/src/components/ChatMessage/MyMessageComponents/ChatMyMessageComponent.js +12 -3
 - package/dist/dist-esm/react-components/src/components/ChatMessage/MyMessageComponents/ChatMyMessageComponent.js.map +1 -1
 - package/dist/dist-esm/react-components/src/components/ChatMessage/MyMessageComponents/FluentChatMyMessageComponent.js +27 -3
 - package/dist/dist-esm/react-components/src/components/ChatMessage/MyMessageComponents/FluentChatMyMessageComponent.js.map +1 -1
 - package/dist/dist-esm/react-components/src/components/MessageThread.d.ts +9 -15
 - package/dist/dist-esm/react-components/src/components/MessageThread.js +10 -1
 - package/dist/dist-esm/react-components/src/components/MessageThread.js.map +1 -1
 - package/dist/dist-esm/react-components/src/components/RichTextEditor/RichTextEditor.js +28 -22
 - package/dist/dist-esm/react-components/src/components/RichTextEditor/RichTextEditor.js.map +1 -1
 - package/dist/dist-esm/react-components/src/components/RichTextEditor/RichTextSendBox.d.ts +49 -0
 - package/dist/dist-esm/react-components/src/components/RichTextEditor/RichTextSendBox.js +16 -4
 - package/dist/dist-esm/react-components/src/components/RichTextEditor/RichTextSendBox.js.map +1 -1
 - package/dist/dist-esm/react-components/src/components/RichTextEditor/Toolbar/RichTextToolbar.js +20 -2
 - package/dist/dist-esm/react-components/src/components/RichTextEditor/Toolbar/RichTextToolbar.js.map +1 -1
 - package/dist/dist-esm/react-components/src/components/index.d.ts +2 -1
 - package/dist/dist-esm/react-components/src/components/index.js.map +1 -1
 - package/dist/dist-esm/react-components/src/components/styles/AttachmentCard.styles.d.ts +2 -2
 - package/dist/dist-esm/react-components/src/components/styles/AttachmentCard.styles.js +15 -17
 - package/dist/dist-esm/react-components/src/components/styles/AttachmentCard.styles.js.map +1 -1
 - package/dist/dist-esm/react-components/src/components/styles/RichTextEditor.styles.js +3 -0
 - package/dist/dist-esm/react-components/src/components/styles/RichTextEditor.styles.js.map +1 -1
 - package/dist/dist-esm/react-components/src/components/utils/RichTextEditorUtils.d.ts +1 -5
 - package/dist/dist-esm/react-components/src/components/utils/RichTextEditorUtils.js +0 -21
 - package/dist/dist-esm/react-components/src/components/utils/RichTextEditorUtils.js.map +1 -1
 - package/dist/dist-esm/react-components/src/components/utils/SendBoxUtils.d.ts +9 -1
 - package/dist/dist-esm/react-components/src/components/utils/SendBoxUtils.js +10 -2
 - package/dist/dist-esm/react-components/src/components/utils/SendBoxUtils.js.map +1 -1
 - package/dist/dist-esm/react-components/src/localization/locales/ar-SA/strings.json +101 -63
 - package/dist/dist-esm/react-components/src/localization/locales/cs-CZ/strings.json +99 -61
 - package/dist/dist-esm/react-components/src/localization/locales/de-DE/strings.json +99 -61
 - package/dist/dist-esm/react-components/src/localization/locales/en-GB/strings.json +99 -61
 - package/dist/dist-esm/react-components/src/localization/locales/en-US/strings.json +8 -2
 - package/dist/dist-esm/react-components/src/localization/locales/es-ES/strings.json +99 -61
 - package/dist/dist-esm/react-components/src/localization/locales/fi-FI/strings.json +99 -61
 - package/dist/dist-esm/react-components/src/localization/locales/fr-FR/strings.json +102 -64
 - package/dist/dist-esm/react-components/src/localization/locales/he-IL/strings.json +99 -61
 - package/dist/dist-esm/react-components/src/localization/locales/it-IT/strings.json +99 -61
 - package/dist/dist-esm/react-components/src/localization/locales/ja-JP/strings.json +101 -63
 - package/dist/dist-esm/react-components/src/localization/locales/ko-KR/strings.json +106 -68
 - package/dist/dist-esm/react-components/src/localization/locales/nb-NO/strings.json +99 -61
 - package/dist/dist-esm/react-components/src/localization/locales/nl-NL/strings.json +105 -67
 - package/dist/dist-esm/react-components/src/localization/locales/pl-PL/strings.json +104 -66
 - package/dist/dist-esm/react-components/src/localization/locales/pt-BR/strings.json +102 -64
 - package/dist/dist-esm/react-components/src/localization/locales/ru-RU/strings.json +100 -62
 - package/dist/dist-esm/react-components/src/localization/locales/sv-SE/strings.json +99 -61
 - package/dist/dist-esm/react-components/src/localization/locales/tr-TR/strings.json +100 -62
 - package/dist/dist-esm/react-components/src/localization/locales/zh-CN/strings.json +101 -63
 - package/dist/dist-esm/react-components/src/localization/locales/zh-TW/strings.json +100 -62
 - package/dist/dist-esm/react-composites/src/composites/ChatComposite/ChatScreen.js +66 -31
 - package/dist/dist-esm/react-composites/src/composites/ChatComposite/ChatScreen.js.map +1 -1
 - package/dist/dist-esm/react-composites/src/composites/ChatComposite/ImageUpload/ImageUploadReducer.d.ts +49 -0
 - package/dist/dist-esm/react-composites/src/composites/ChatComposite/ImageUpload/ImageUploadReducer.js +48 -0
 - package/dist/dist-esm/react-composites/src/composites/ChatComposite/ImageUpload/ImageUploadReducer.js.map +1 -0
 - package/dist/dist-esm/react-composites/src/composites/ChatComposite/ImageUpload/ImageUploadUtils.d.ts +33 -1
 - package/dist/dist-esm/react-composites/src/composites/ChatComposite/ImageUpload/ImageUploadUtils.js +198 -6
 - package/dist/dist-esm/react-composites/src/composites/ChatComposite/ImageUpload/ImageUploadUtils.js.map +1 -1
 - package/dist/dist-esm/react-composites/src/composites/ChatComposite/file-sharing/AttachmentUpload.d.ts +7 -7
 - package/dist/dist-esm/react-composites/src/composites/ChatComposite/file-sharing/AttachmentUpload.js.map +1 -1
 - package/dist/dist-esm/react-composites/src/composites/common/SendBoxPicker.d.ts +2 -5
 - package/dist/dist-esm/react-composites/src/composites/common/SendBoxPicker.js.map +1 -1
 - package/dist/dist-esm/react-composites/src/composites/common/constants.d.ts +4 -0
 - package/dist/dist-esm/react-composites/src/composites/common/constants.js +4 -0
 - package/dist/dist-esm/react-composites/src/composites/common/constants.js.map +1 -1
 - package/dist/dist-esm/react-composites/src/composites/localization/locales/ar-SA/strings.json +10 -5
 - package/dist/dist-esm/react-composites/src/composites/localization/locales/cs-CZ/strings.json +6 -1
 - package/dist/dist-esm/react-composites/src/composites/localization/locales/de-DE/strings.json +6 -1
 - package/dist/dist-esm/react-composites/src/composites/localization/locales/en-GB/strings.json +6 -1
 - package/dist/dist-esm/react-composites/src/composites/localization/locales/es-ES/strings.json +6 -1
 - package/dist/dist-esm/react-composites/src/composites/localization/locales/fi-FI/strings.json +10 -5
 - package/dist/dist-esm/react-composites/src/composites/localization/locales/fr-FR/strings.json +10 -5
 - package/dist/dist-esm/react-composites/src/composites/localization/locales/he-IL/strings.json +10 -5
 - package/dist/dist-esm/react-composites/src/composites/localization/locales/it-IT/strings.json +10 -5
 - package/dist/dist-esm/react-composites/src/composites/localization/locales/ja-JP/strings.json +6 -1
 - package/dist/dist-esm/react-composites/src/composites/localization/locales/ko-KR/strings.json +10 -5
 - package/dist/dist-esm/react-composites/src/composites/localization/locales/nb-NO/strings.json +6 -1
 - package/dist/dist-esm/react-composites/src/composites/localization/locales/nl-NL/strings.json +6 -1
 - package/dist/dist-esm/react-composites/src/composites/localization/locales/pl-PL/strings.json +6 -1
 - package/dist/dist-esm/react-composites/src/composites/localization/locales/pt-BR/strings.json +10 -5
 - package/dist/dist-esm/react-composites/src/composites/localization/locales/ru-RU/strings.json +6 -1
 - package/dist/dist-esm/react-composites/src/composites/localization/locales/sv-SE/strings.json +10 -5
 - package/dist/dist-esm/react-composites/src/composites/localization/locales/tr-TR/strings.json +6 -1
 - package/dist/dist-esm/react-composites/src/composites/localization/locales/zh-CN/strings.json +10 -5
 - package/dist/dist-esm/react-composites/src/composites/localization/locales/zh-TW/strings.json +10 -5
 - package/package.json +14 -14
 - package/dist/dist-cjs/communication-react/ChatMessageComponentAsRichTextEditBox-Bi4Or6hk.js.map +0 -1
 - package/dist/dist-cjs/communication-react/index-B3X0l4SB.js.map +0 -1
 - package/dist/dist-esm/react-composites/src/composites/ChatComposite/ImageUpload/useImageUpload.d.ts +0 -12
 - package/dist/dist-esm/react-composites/src/composites/ChatComposite/ImageUpload/useImageUpload.js +0 -115
 - package/dist/dist-esm/react-composites/src/composites/ChatComposite/ImageUpload/useImageUpload.js.map +0 -1
 
| 
         @@ -1 +1 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            {"version":3,"file":"ChatScreen.js","sourceRoot":"","sources":["../../../../../../../react-composites/src/composites/ChatComposite/ChatScreen.tsx"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { isIOS } from '@fluentui/react';\nimport { mergeStyles, Stack } from '@fluentui/react';\nimport { PersonaSize } from '@fluentui/react';\nimport {\n  CommunicationParticipant,\n  ErrorBar,\n  MessageProps,\n  MessageRenderer,\n  MessageThread,\n  MessageThreadStyles,\n  ParticipantMenuItemsCallback,\n  SendBoxStylesProps,\n  TypingIndicator,\n  TypingIndicatorStylesProps,\n  useTheme\n} from '@internal/react-components';\n/* @conditional-compile-remove(file-sharing-acs) */\nimport { ChatMessage } from '@internal/react-components';\nimport React, { useCallback, useEffect, useMemo } from 'react';\n/* @conditional-compile-remove(file-sharing-acs) */\nimport { useReducer } from 'react';\nimport { useState } from 'react';\nimport { AvatarPersona, AvatarPersonaDataCallback, AvatarPersonaProps } from '../common/AvatarPersona';\nimport { useAdapter } from './adapter/ChatAdapterProvider';\nimport { ChatCompositeOptions } from './ChatComposite';\nimport { ChatHeader, getHeaderProps } from './ChatHeader';\n/* @conditional-compile-remove(file-sharing-acs) */\nimport { AttachmentUploadButtonWrapper as AttachmentUploadButton } from './file-sharing';\nimport { useAdaptedSelector } from './hooks/useAdaptedSelector';\nimport { usePropsFor } from './hooks/usePropsFor';\n\nimport {\n  chatArea,\n  chatContainer,\n  chatWrapper,\n  messageThreadChatCompositeStyles,\n  sendboxContainerStyles,\n  typingIndicatorContainerStyles\n} from './styles/Chat.styles';\nimport { participantListContainerPadding } from '../common/styles/ParticipantContainer.styles';\n/* @conditional-compile-remove(chat-composite-participant-pane) */\nimport { ChatScreenPeoplePane } from './ChatScreenPeoplePane';\nimport { toFlatCommunicationIdentifier } from '@internal/acs-ui-common';\n/* @conditional-compile-remove(file-sharing-acs) */\nimport { AttachmentDownloadErrorBar } from './AttachmentDownloadErrorBar';\nimport { _AttachmentDownloadCards } from '@internal/react-components';\nimport { ImageOverlay } from '@internal/react-components';\nimport { InlineImage } from '@internal/react-components';\nimport { ResourceFetchResult } from '@internal/chat-stateful-client';\n/* @conditional-compile-remove(file-sharing-acs) */\nimport { AttachmentOptions } from '@internal/react-components';\n/* @conditional-compile-remove(file-sharing-acs) */\nimport { nanoid } from 'nanoid';\n/* @conditional-compile-remove(file-sharing-acs) */\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\nimport { AttachmentUploadActionType, AttachmentUpload, AttachmentUploadReducer } from './file-sharing/AttachmentUpload';\n/* @conditional-compile-remove(file-sharing-acs) */\nimport { MessageOptions } from '@internal/acs-ui-common';\nimport { SendBoxPicker } from '../common/SendBoxPicker';\n/* @conditional-compile-remove(rich-text-editor-composite-support) */\nimport { loadRichTextSendBox } from '../common/SendBoxPicker';\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\nimport { useImageUpload } from './ImageUpload/useImageUpload';\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\nimport { removeImageTags } from './ImageUpload/ImageUploadUtils';\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\nimport type { ChatAdapterState } from './adapter/ChatAdapter';\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\nimport { isMicrosoftTeamsUserIdentifier } from '@azure/communication-common';\n\n/**\n * @private\n */\nexport type ChatScreenProps = {\n  options?: ChatCompositeOptions;\n  onFetchAvatarPersonaData?: AvatarPersonaDataCallback;\n  onRenderMessage?: (messageProps: MessageProps, defaultOnRender?: MessageRenderer) => JSX.Element;\n  onRenderTypingIndicator?: (typingUsers: CommunicationParticipant[]) => JSX.Element;\n  onFetchParticipantMenuItems?: ParticipantMenuItemsCallback;\n  styles?: ChatScreenStyles;\n  /* @conditional-compile-remove(file-sharing-acs) */\n  attachmentOptions?: AttachmentOptions;\n  formFactor?: 'desktop' | 'mobile';\n};\n\n/**\n * @private\n */\nexport type ChatScreenStyles = {\n  messageThread?: MessageThreadStyles;\n  sendBox?: SendBoxStylesProps;\n  typingIndicator?: TypingIndicatorStylesProps;\n};\n\n/**\n * @private\n */\ninterface OverlayImageItem {\n  imageSrc: string;\n  title: string;\n  titleIcon: JSX.Element;\n  attachmentId: string;\n  messageId: string;\n  imageUrl: string;\n}\n\n/**\n * @private\n */\nexport const ChatScreen = (props: ChatScreenProps): JSX.Element => {\n  const {\n    onFetchAvatarPersonaData,\n    onRenderMessage,\n    onRenderTypingIndicator,\n    options,\n    styles,\n    /* @conditional-compile-remove(file-sharing-acs) */\n    attachmentOptions,\n    formFactor\n  } = props;\n\n  const defaultNumberOfChatMessagesToReload = 5;\n  /* @conditional-compile-remove(file-sharing-acs) */\n  const [downloadErrorMessage, setDownloadErrorMessage] = React.useState('');\n  const [overlayImageItem, setOverlayImageItem] = useState<OverlayImageItem>();\n  const [isImageOverlayOpen, setIsImageOverlayOpen] = useState<boolean>(false);\n  /* @conditional-compile-remove(file-sharing-acs) */\n  const [uploads, handleUploadAction] = useReducer(AttachmentUploadReducer, []);\n  const adapter = useAdapter();\n  const theme = useTheme();\n  /* @conditional-compile-remove(rich-text-editor-image-upload) */\n  const [inlineImageUploads, handleInlineImageUploadAction, onUploadInlineImage, onCancelInlineImageUploadHandler] =\n    useImageUpload();\n  /* @conditional-compile-remove(rich-text-editor-image-upload) */\n  const [textOnlyChat, setTextOnlyChat] = useState(false);\n  /* @conditional-compile-remove(rich-text-editor-image-upload) */\n  const [isACSChat, setIsACSChat] = useState(false);\n\n  /* @conditional-compile-remove(rich-text-editor-image-upload) */\n  useEffect(() => {\n    const updateChatState = (newState: ChatAdapterState): void => {\n      setTextOnlyChat(newState.thread.properties?.messagingPolicy?.textOnlyChat === true);\n      if (newState.thread.properties?.createdBy) {\n        setIsACSChat(!isMicrosoftTeamsUserIdentifier(newState.thread.properties?.createdBy));\n      }\n    };\n    // set initial state for textOnlyChat and isACSChat\n    updateChatState(adapter.getState());\n\n    adapter.onStateChange(updateChatState);\n    return () => {\n      adapter.offStateChange(updateChatState);\n    };\n  }, [adapter]);\n\n  useEffect(() => {\n    // Initial data should be always fetched by the composite(or external caller) instead of the adapter\n    const fetchData: () => Promise<void> = async () => {\n      // Fetch initial data for adapter\n      await adapter.fetchInitialData();\n      // Fetch initial set of messages. Without fetching messages here, if the Composite's adapter is changed the message thread does not load new messages.\n      await adapter.loadPreviousChatMessages(defaultNumberOfChatMessagesToReload);\n    };\n    fetchData();\n  }, [adapter]);\n\n  /* @conditional-compile-remove(rich-text-editor-composite-support) */\n  useEffect(() => {\n    // if rich text editor is enabled, the rich text editor component should be loaded early for good UX\n    if (options?.richTextEditor) {\n      // this line is needed to load the Rooster JS dependencies early in the lifecycle\n      // when the rich text editor is enabled\n      loadRichTextSendBox();\n    }\n  }, [options?.richTextEditor]);\n\n  const messageThreadProps = usePropsFor(MessageThread);\n  const typingIndicatorProps = usePropsFor(TypingIndicator);\n  const headerProps = useAdaptedSelector(getHeaderProps);\n  const errorBarProps = usePropsFor(ErrorBar);\n\n  useEffect(() => {\n    if (overlayImageItem === undefined) {\n      return;\n    }\n    const message = adapter.getState().thread.chatMessages[overlayImageItem.messageId];\n    if (message === undefined) {\n      return;\n    }\n    const resourceCache = message.resourceCache;\n    if (overlayImageItem.imageSrc === '' && resourceCache && resourceCache[overlayImageItem.imageUrl]) {\n      const fullSizeImageSrc = getResourceSourceUrl(resourceCache[overlayImageItem.imageUrl]);\n      if (fullSizeImageSrc === undefined || fullSizeImageSrc === '' || overlayImageItem.imageSrc === fullSizeImageSrc) {\n        return;\n      }\n      setOverlayImageItem({\n        ...overlayImageItem,\n        imageSrc: fullSizeImageSrc\n      });\n    }\n    // Disable eslint because we are using the overlayImageItem in this effect but don't want to have it as a dependency, as it will cause an infinite loop.\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [messageThreadProps.messages]);\n\n  const getResourceSourceUrl = (result: ResourceFetchResult): string => {\n    let src = '';\n    if (result.error || !result.sourceUrl) {\n      src = 'blob://';\n    } else {\n      src = result.sourceUrl;\n    }\n\n    return src;\n  };\n\n  const onRenderAvatarCallback = useCallback(\n    (userId?: string, defaultOptions?: AvatarPersonaProps) => {\n      return (\n        <AvatarPersona\n          userId={userId}\n          hidePersonaDetails={true}\n          {...defaultOptions}\n          dataProvider={onFetchAvatarPersonaData}\n        />\n      );\n    },\n    [onFetchAvatarPersonaData]\n  );\n\n  const messageThreadStyles = useMemo(() => {\n    return Object.assign(\n      {},\n      messageThreadChatCompositeStyles(theme.semanticColors.bodyBackground),\n      styles?.messageThread\n    );\n  }, [styles?.messageThread, theme.semanticColors.bodyBackground]);\n\n  const typingIndicatorStyles = useMemo(() => {\n    return Object.assign({}, styles?.typingIndicator);\n  }, [styles?.typingIndicator]);\n\n  const sendBoxStyles = useMemo(() => {\n    return Object.assign({}, styles?.sendBox);\n  }, [styles?.sendBox]);\n\n  const userId = toFlatCommunicationIdentifier(adapter.getState().userId);\n\n  /* @conditional-compile-remove(file-sharing-acs) */\n  const setKeyboardFocusAfterFileSelection = useCallback(() => {\n    // look up sendbox by ID for now, we will use `useRef`\n    // once attachment button is moved inside of send box component\n    // see ADO workitem #3764245\n    /* @conditional-compile-remove(rich-text-editor-composite-support) */\n    if (props.options?.richTextEditor) {\n      const richTextSendBox = document?.querySelector(`[id=\"richTextSendBox\"]`) as HTMLDivElement;\n      richTextSendBox?.focus();\n      return;\n    }\n    const sendBox = document?.querySelector(`[id=\"sendbox\"]`) as HTMLTextAreaElement;\n    // set send box on focus after file selection per A11y requirement\n    sendBox?.focus();\n  }, [\n    /* @conditional-compile-remove(rich-text-editor-composite-support) */\n    props.options?.richTextEditor\n  ]);\n\n  /* @conditional-compile-remove(file-sharing-acs) */\n  const attachmentUploadButtonOnChange = useCallback(\n    (files: FileList | null): void => {\n      setKeyboardFocusAfterFileSelection();\n\n      if (!files) {\n        return;\n      }\n\n      // Get files, change to tasks, store locally and pass back to Contoso\n      const newUploads = Array.from(files).map((file): AttachmentUpload => {\n        const taskId = nanoid();\n        return {\n          file,\n          taskId,\n          metadata: {\n            id: taskId,\n            name: file.name,\n            progress: 0\n          },\n          notifyUploadProgressChanged: (value: number) => {\n            handleUploadAction({ type: AttachmentUploadActionType.Progress, taskId, progress: value });\n          },\n          notifyUploadCompleted: (id: string, url: string) => {\n            handleUploadAction({ type: AttachmentUploadActionType.Completed, taskId, id, url });\n          },\n          notifyUploadFailed: (message: string) => {\n            handleUploadAction({ type: AttachmentUploadActionType.Failed, taskId, message });\n            // remove the failed upload task when error banner is auto dismissed after 10 seconds\n            // so the banner won't be shown again on UI re-rendering.\n            setTimeout(() => {\n              handleUploadAction({ type: AttachmentUploadActionType.Remove, id: taskId });\n            }, 10 * 1000);\n          }\n        };\n      });\n\n      handleUploadAction({ type: AttachmentUploadActionType.Set, newUploads });\n      attachmentOptions?.uploadOptions?.handleAttachmentSelection(newUploads);\n    },\n    [attachmentOptions?.uploadOptions, setKeyboardFocusAfterFileSelection]\n  );\n\n  /* @conditional-compile-remove(file-sharing-acs) */\n  const onRenderAttachmentDownloads = useCallback(\n    (message: ChatMessage) =>\n      message?.attachments?.length ?? 0 > 0 ? (\n        <_AttachmentDownloadCards\n          attachments={message.attachments}\n          message={message}\n          actionsForAttachment={attachmentOptions?.downloadOptions?.actionsForAttachment}\n          onActionHandlerFailed={(errorMessage: string) => {\n            setDownloadErrorMessage(errorMessage);\n          }}\n        />\n      ) : (\n        <></>\n      ),\n    [attachmentOptions?.downloadOptions?.actionsForAttachment]\n  );\n\n  const onInlineImageClicked = useCallback(\n    (attachmentId: string, messageId: string) => {\n      const message = adapter.getState().thread.chatMessages[messageId];\n      const inlinedImages = message.content?.attachments?.filter((attachment) => {\n        return attachment.attachmentType === 'image' && attachment.id === attachmentId;\n      });\n\n      if (!inlinedImages || inlinedImages.length <= 0) {\n        return;\n      }\n\n      const attachment = inlinedImages[0];\n\n      const resourceCache = message.resourceCache;\n      let imageSrc = '';\n\n      if (attachment.url) {\n        if (resourceCache && resourceCache[attachment.url]) {\n          imageSrc = getResourceSourceUrl(resourceCache[attachment.url]);\n        } else {\n          adapter.downloadResourceToCache({\n            threadId: adapter.getState().thread.threadId,\n            messageId: messageId,\n            resourceUrl: attachment.url\n          });\n        }\n      }\n\n      const titleIconRenderOptions = {\n        text: message.senderDisplayName,\n        size: PersonaSize.size32,\n        showOverflowTooltip: false,\n        imageAlt: message.senderDisplayName\n      };\n\n      const messageSenderId = message.sender !== undefined ? toFlatCommunicationIdentifier(message.sender) : userId;\n      const titleIcon = onRenderAvatarCallback && onRenderAvatarCallback(messageSenderId, titleIconRenderOptions);\n      const overlayImage: OverlayImageItem = {\n        title: message.senderDisplayName || '',\n        titleIcon: titleIcon,\n        attachmentId: attachment.id,\n        imageSrc: imageSrc,\n        messageId: messageId,\n        imageUrl: attachment.url || ''\n      };\n\n      setIsImageOverlayOpen(true);\n      setOverlayImageItem(overlayImage);\n    },\n    [adapter, onRenderAvatarCallback, userId]\n  );\n\n  const onRenderInlineImage = useCallback(\n    (inlineImage: InlineImage, defaultOnRender: (inlineImage: InlineImage) => JSX.Element): JSX.Element => {\n      const message = adapter.getState().thread.chatMessages[inlineImage.messageId];\n      const attachment = message?.content?.attachments?.find(\n        (attachment) => attachment.id === inlineImage.imageAttributes.id\n      );\n\n      if (attachment === undefined) {\n        return defaultOnRender(inlineImage);\n      }\n\n      let pointerEvents: 'none' | 'auto' = inlineImage.imageAttributes.src === '' ? 'none' : 'auto';\n      const resourceCache = message.resourceCache;\n      if (\n        resourceCache &&\n        attachment.previewUrl &&\n        resourceCache[attachment.previewUrl] &&\n        resourceCache[attachment.previewUrl].error\n      ) {\n        pointerEvents = 'none';\n      }\n\n      return (\n        <span\n          key={inlineImage.imageAttributes.id}\n          onClick={() => onInlineImageClicked(inlineImage.imageAttributes.id || '', inlineImage.messageId)}\n          tabIndex={0}\n          role=\"button\"\n          onKeyDown={(e) => {\n            if (e.key === 'Enter') {\n              onInlineImageClicked(inlineImage.imageAttributes.id || '', inlineImage.messageId);\n            }\n          }}\n          style={{ cursor: 'pointer', pointerEvents }}\n        >\n          {defaultOnRender(inlineImage)}\n        </span>\n      );\n    },\n    [adapter, onInlineImageClicked]\n  );\n\n  const inlineImageOptions = useMemo(() => {\n    return { onRenderInlineImage: onRenderInlineImage };\n  }, [onRenderInlineImage]);\n\n  const onDownloadButtonClicked = useCallback(\n    (imageSrc: string): void => {\n      if (imageSrc === '') {\n        return;\n      }\n      if (isIOS()) {\n        window.open(imageSrc, '_blank');\n      } else {\n        // Create a new anchor element\n        const a = document.createElement('a');\n        // Set the href and download attributes for the anchor element\n        a.href = imageSrc;\n        a.download = overlayImageItem?.attachmentId || '';\n        a.rel = 'noopener noreferrer';\n        a.target = '_blank';\n\n        // Programmatically click the anchor element to trigger the download\n        document.body.appendChild(a);\n        a.click();\n        document.body.removeChild(a);\n      }\n    },\n    [overlayImageItem?.attachmentId]\n  );\n\n  /* @conditional-compile-remove(file-sharing-acs) */\n  const attachmentButton = useMemo(() => {\n    if (\n      !attachmentOptions?.uploadOptions?.handleAttachmentSelection ||\n      /* @conditional-compile-remove(rich-text-editor-image-upload) */\n      textOnlyChat\n    ) {\n      return null;\n    }\n    return (\n      <AttachmentUploadButton\n        supportedMediaTypes={attachmentOptions?.uploadOptions?.supportedMediaTypes}\n        disableMultipleUploads={attachmentOptions?.uploadOptions?.disableMultipleUploads}\n        onChange={attachmentUploadButtonOnChange}\n      />\n    );\n    return <></>;\n  }, [\n    attachmentOptions?.uploadOptions?.handleAttachmentSelection,\n    attachmentOptions?.uploadOptions?.supportedMediaTypes,\n    attachmentOptions?.uploadOptions?.disableMultipleUploads,\n    attachmentUploadButtonOnChange,\n    /* @conditional-compile-remove(rich-text-editor-image-upload) */\n    textOnlyChat\n  ]);\n\n  /* @conditional-compile-remove(file-sharing-acs) */\n  const attachments = useMemo(() => {\n    return uploads?.map((v) => v.metadata);\n  }, [uploads]);\n\n  /* @conditional-compile-remove(rich-text-editor-image-upload) */\n  const imageUploadsInProgress = useMemo(() => {\n    return inlineImageUploads?.map((v) => v.metadata);\n  }, [inlineImageUploads]);\n\n  const onSendMessageHandler = useCallback(\n    async function (\n      content: string,\n      /* @conditional-compile-remove(file-sharing-acs) */ /* @conditional-compile-remove(rich-text-editor-composite-support) */ options?: MessageOptions\n    ) {\n      /* @conditional-compile-remove(file-sharing-acs) */\n      const attachments = options?.attachments ?? [];\n      /* @conditional-compile-remove(file-sharing-acs) */\n      handleUploadAction({ type: AttachmentUploadActionType.Clear });\n      /* @conditional-compile-remove(rich-text-editor-image-upload) */\n      handleInlineImageUploadAction({ type: AttachmentUploadActionType.Clear });\n\n      /* @conditional-compile-remove(file-sharing-acs) */\n      await adapter.sendMessage(content, {\n        attachments: attachments,\n        /* @conditional-compile-remove(rich-text-editor-composite-support) */\n        type: options?.type\n      });\n      /* @conditional-compile-remove(file-sharing-acs) */\n      return;\n      await adapter.sendMessage(content, {\n        /* @conditional-compile-remove(rich-text-editor-composite-support) */\n        type: options?.type\n      });\n    },\n    [adapter, /* @conditional-compile-remove(rich-text-editor-image-upload) */ handleInlineImageUploadAction]\n  );\n\n  const onUpdateMessageHandler = useCallback(\n    async (messageId: string, content: string) => {\n      await messageThreadProps.onUpdateMessage(messageId, content);\n      /* @conditional-compile-remove(rich-text-editor-image-upload) */\n      handleInlineImageUploadAction({ type: AttachmentUploadActionType.Clear });\n    },\n    [/* @conditional-compile-remove(rich-text-editor-image-upload) */ handleInlineImageUploadAction, messageThreadProps]\n  );\n\n  /* @conditional-compile-remove(rich-text-editor-image-upload) */\n  const onCancelEditMessageHandler = useCallback(() => {\n    handleInlineImageUploadAction({ type: AttachmentUploadActionType.Clear });\n  }, [handleInlineImageUploadAction]);\n\n  /* @conditional-compile-remove(file-sharing-acs) */\n  const onCancelUploadHandler = useCallback(\n    (id: string) => {\n      handleUploadAction({ type: AttachmentUploadActionType.Remove, id });\n      attachmentOptions?.uploadOptions?.handleAttachmentRemoval?.(id);\n    },\n    [attachmentOptions?.uploadOptions]\n  );\n\n  /* @conditional-compile-remove(rich-text-editor-composite-support) */\n  const richTextEditorOptions = useMemo(() => {\n    const onPasteCallback = isACSChat || textOnlyChat ? removeImageTags : undefined;\n    return options?.richTextEditor\n      ? {\n          /* @conditional-compile-remove(rich-text-editor-image-upload) */ onPaste: onPasteCallback,\n          /* @conditional-compile-remove(rich-text-editor-image-upload) */\n          onUploadInlineImage: onUploadInlineImage,\n          /* @conditional-compile-remove(rich-text-editor-image-upload) */\n          imageUploadsInProgress: imageUploadsInProgress,\n          /* @conditional-compile-remove(rich-text-editor-image-upload) */\n          onCancelInlineImageUpload: onCancelInlineImageUploadHandler\n        }\n      : undefined;\n  }, [\n    /* @conditional-compile-remove(rich-text-editor-image-upload) */\n    imageUploadsInProgress,\n    /* @conditional-compile-remove(rich-text-editor-image-upload) */\n    onCancelInlineImageUploadHandler,\n    /* @conditional-compile-remove(rich-text-editor-image-upload) */\n    onUploadInlineImage,\n    /* @conditional-compile-remove(rich-text-editor-image-upload) */\n    isACSChat,\n    /* @conditional-compile-remove(rich-text-editor-image-upload) */\n    textOnlyChat,\n    options?.richTextEditor\n  ]);\n\n  return (\n    <Stack className={chatContainer} grow>\n      {options?.topic !== false && <ChatHeader {...headerProps} />}\n      <Stack className={chatArea} tokens={participantListContainerPadding} horizontal grow>\n        <Stack className={chatWrapper} grow>\n          {options?.errorBar !== false && <ErrorBar {...errorBarProps} />}\n          {\n            /* @conditional-compile-remove(file-sharing-acs) */\n            <AttachmentDownloadErrorBar\n              onDismissDownloadErrorMessage={useCallback(() => {\n                setDownloadErrorMessage('');\n              }, [])}\n              attachmentDownloadErrorMessage={downloadErrorMessage || ''}\n            />\n          }\n          <MessageThread\n            {...messageThreadProps}\n            onUpdateMessage={onUpdateMessageHandler}\n            /* @conditional-compile-remove(rich-text-editor-image-upload) */\n            onCancelEditMessage={onCancelEditMessageHandler}\n            onRenderAvatar={onRenderAvatarCallback}\n            onRenderMessage={onRenderMessage}\n            /* @conditional-compile-remove(file-sharing-acs) */\n            onRenderAttachmentDownloads={onRenderAttachmentDownloads}\n            inlineImageOptions={inlineImageOptions}\n            numberOfChatMessagesToReload={defaultNumberOfChatMessagesToReload}\n            styles={messageThreadStyles}\n            /* @conditional-compile-remove(rich-text-editor-composite-support) */\n            richTextEditorOptions={richTextEditorOptions}\n          />\n          <Stack className={mergeStyles(sendboxContainerStyles)}>\n            <div className={mergeStyles(typingIndicatorContainerStyles)}>\n              {onRenderTypingIndicator ? (\n                onRenderTypingIndicator(typingIndicatorProps.typingUsers)\n              ) : (\n                <TypingIndicator {...typingIndicatorProps} styles={typingIndicatorStyles} />\n              )}\n            </div>\n            <Stack horizontal={formFactor === 'mobile'}>\n              {formFactor === 'mobile' && (\n                /* @conditional-compile-remove(file-sharing-acs) */\n                <Stack verticalAlign=\"center\">{attachmentButton}</Stack>\n              )}\n              <Stack grow>\n                <SendBoxPicker\n                  styles={sendBoxStyles}\n                  autoFocus={options?.autoFocus}\n                  /* @conditional-compile-remove(rich-text-editor-composite-support) */\n                  richTextEditorOptions={richTextEditorOptions}\n                  /* @conditional-compile-remove(file-sharing-acs) */\n                  attachments={attachments}\n                  /* @conditional-compile-remove(file-sharing-acs) */\n                  onCancelAttachmentUpload={onCancelUploadHandler}\n                  // we need to overwrite onSendMessage for SendBox because we need to clear attachment state\n                  // when submit button is clicked\n                  onSendMessage={onSendMessageHandler}\n                />\n              </Stack>\n              {formFactor !== 'mobile' &&\n                /* @conditional-compile-remove(file-sharing-acs) */\n                attachmentButton}\n            </Stack>\n          </Stack>\n        </Stack>\n        {\n          /* @conditional-compile-remove(chat-composite-participant-pane) */\n          options?.participantPane === true && (\n            <ChatScreenPeoplePane\n              onFetchAvatarPersonaData={onFetchAvatarPersonaData}\n              onFetchParticipantMenuItems={props.onFetchParticipantMenuItems}\n              isMobile={formFactor === 'mobile'}\n            />\n          )\n        }\n      </Stack>\n      {overlayImageItem && (\n        <ImageOverlay\n          {...overlayImageItem}\n          isOpen={isImageOverlayOpen}\n          onDismiss={() => {\n            setOverlayImageItem(undefined);\n            setIsImageOverlayOpen(false);\n            adapter.removeResourceFromCache({\n              threadId: adapter.getState().thread.threadId,\n              messageId: overlayImageItem.messageId,\n              resourceUrl: overlayImageItem.imageUrl\n            });\n          }}\n          onDownloadButtonClicked={onDownloadButtonClicked}\n        />\n      )}\n    </Stack>\n  );\n};\n"]}
         
     | 
| 
      
 1 
     | 
    
         
            +
            {"version":3,"file":"ChatScreen.js","sourceRoot":"","sources":["../../../../../../../react-composites/src/composites/ChatComposite/ChatScreen.tsx"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { isIOS } from '@fluentui/react';\nimport { mergeStyles, Stack } from '@fluentui/react';\nimport { PersonaSize } from '@fluentui/react';\nimport {\n  CommunicationParticipant,\n  ErrorBar,\n  MessageProps,\n  MessageRenderer,\n  MessageThread,\n  MessageThreadStyles,\n  ParticipantMenuItemsCallback,\n  SendBoxStylesProps,\n  TypingIndicator,\n  TypingIndicatorStylesProps,\n  useTheme\n} from '@internal/react-components';\n/* @conditional-compile-remove(file-sharing-acs) */\nimport { ChatMessage } from '@internal/react-components';\nimport React, { useCallback, useEffect, useMemo } from 'react';\n/* @conditional-compile-remove(file-sharing-acs) */\nimport { useReducer } from 'react';\nimport { useState } from 'react';\nimport { AvatarPersona, AvatarPersonaDataCallback, AvatarPersonaProps } from '../common/AvatarPersona';\nimport { useAdapter } from './adapter/ChatAdapterProvider';\nimport { ChatCompositeOptions } from './ChatComposite';\nimport { ChatHeader, getHeaderProps } from './ChatHeader';\n/* @conditional-compile-remove(file-sharing-acs) */\nimport { AttachmentUploadButtonWrapper as AttachmentUploadButton } from './file-sharing';\nimport { useAdaptedSelector } from './hooks/useAdaptedSelector';\nimport { usePropsFor } from './hooks/usePropsFor';\n\nimport {\n  chatArea,\n  chatContainer,\n  chatWrapper,\n  messageThreadChatCompositeStyles,\n  sendboxContainerStyles,\n  typingIndicatorContainerStyles\n} from './styles/Chat.styles';\nimport { participantListContainerPadding } from '../common/styles/ParticipantContainer.styles';\n/* @conditional-compile-remove(chat-composite-participant-pane) */\nimport { ChatScreenPeoplePane } from './ChatScreenPeoplePane';\nimport { toFlatCommunicationIdentifier } from '@internal/acs-ui-common';\n/* @conditional-compile-remove(file-sharing-acs) */\nimport { AttachmentDownloadErrorBar } from './AttachmentDownloadErrorBar';\nimport { _AttachmentDownloadCards } from '@internal/react-components';\nimport { ImageOverlay } from '@internal/react-components';\nimport { InlineImage } from '@internal/react-components';\nimport { ResourceFetchResult } from '@internal/chat-stateful-client';\n/* @conditional-compile-remove(file-sharing-acs) */\nimport { AttachmentOptions } from '@internal/react-components';\n/* @conditional-compile-remove(file-sharing-acs) */\nimport { nanoid } from 'nanoid';\n/* @conditional-compile-remove(file-sharing-acs) */\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\nimport { AttachmentUploadActionType, AttachmentUpload, AttachmentUploadReducer } from './file-sharing/AttachmentUpload';\n/* @conditional-compile-remove(file-sharing-acs) */\nimport { MessageOptions } from '@internal/acs-ui-common';\nimport { SendBoxPicker } from '../common/SendBoxPicker';\n/* @conditional-compile-remove(rich-text-editor-composite-support) */\nimport { loadRichTextSendBox } from '../common/SendBoxPicker';\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\nimport {\n  getEditBoxMessagesImageUploadsInProgress,\n  getSendBoxImageUploadsInProgress,\n  onCancelInlineImageUploadHandlerForEditBox,\n  onCancelInlineImageUploadHandlerForSendBox,\n  onUploadInlineImageForEditBox,\n  onUploadInlineImageForSendBox,\n  removeImageTags\n} from './ImageUpload/ImageUploadUtils';\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\nimport type { ChatAdapterState } from './adapter/ChatAdapter';\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\nimport { isMicrosoftTeamsUserIdentifier } from '@azure/communication-common';\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\nimport { SEND_BOX_UPLOADS_KEY_VALUE } from '../common/constants';\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\nimport { ImageUploadReducer } from './ImageUpload/ImageUploadReducer';\n\n/**\n * @private\n */\nexport type ChatScreenProps = {\n  options?: ChatCompositeOptions;\n  onFetchAvatarPersonaData?: AvatarPersonaDataCallback;\n  onRenderMessage?: (messageProps: MessageProps, defaultOnRender?: MessageRenderer) => JSX.Element;\n  onRenderTypingIndicator?: (typingUsers: CommunicationParticipant[]) => JSX.Element;\n  onFetchParticipantMenuItems?: ParticipantMenuItemsCallback;\n  styles?: ChatScreenStyles;\n  /* @conditional-compile-remove(file-sharing-acs) */\n  attachmentOptions?: AttachmentOptions;\n  formFactor?: 'desktop' | 'mobile';\n};\n\n/**\n * @private\n */\nexport type ChatScreenStyles = {\n  messageThread?: MessageThreadStyles;\n  sendBox?: SendBoxStylesProps;\n  typingIndicator?: TypingIndicatorStylesProps;\n};\n\n/**\n * @private\n */\ninterface OverlayImageItem {\n  imageSrc: string;\n  title: string;\n  titleIcon: JSX.Element;\n  attachmentId: string;\n  messageId: string;\n  imageUrl: string;\n}\n\n/**\n * @private\n */\nexport const ChatScreen = (props: ChatScreenProps): JSX.Element => {\n  const {\n    onFetchAvatarPersonaData,\n    onRenderMessage,\n    onRenderTypingIndicator,\n    options,\n    styles,\n    /* @conditional-compile-remove(file-sharing-acs) */\n    attachmentOptions,\n    formFactor\n  } = props;\n\n  const defaultNumberOfChatMessagesToReload = 5;\n  /* @conditional-compile-remove(file-sharing-acs) */\n  const [downloadErrorMessage, setDownloadErrorMessage] = React.useState('');\n  const [overlayImageItem, setOverlayImageItem] = useState<OverlayImageItem>();\n  const [isImageOverlayOpen, setIsImageOverlayOpen] = useState<boolean>(false);\n  /* @conditional-compile-remove(file-sharing-acs) */\n  const [uploads, handleUploadAction] = useReducer(AttachmentUploadReducer, []);\n  const adapter = useAdapter();\n  const theme = useTheme();\n  /* @conditional-compile-remove(rich-text-editor-image-upload) */\n  const [textOnlyChat, setTextOnlyChat] = useState(false);\n  /* @conditional-compile-remove(rich-text-editor-image-upload) */\n  const [isACSChat, setIsACSChat] = useState(false);\n  /* @conditional-compile-remove(rich-text-editor-image-upload) */\n  const [editBoxInlineImageUploads, handleEditBoxInlineImageUploadAction] = useReducer(ImageUploadReducer, undefined);\n  /* @conditional-compile-remove(rich-text-editor-image-upload) */\n  const [sendBoxInlineImageUploads, handleSendBoxInlineImageUploadAction] = useReducer(ImageUploadReducer, undefined);\n\n  /* @conditional-compile-remove(rich-text-editor-image-upload) */\n  useEffect(() => {\n    const updateChatState = (newState: ChatAdapterState): void => {\n      setTextOnlyChat(newState.thread.properties?.messagingPolicy?.textOnlyChat === true);\n      if (newState.thread.properties?.createdBy) {\n        setIsACSChat(!isMicrosoftTeamsUserIdentifier(newState.thread.properties?.createdBy));\n      }\n    };\n    // set initial state for textOnlyChat and isACSChat\n    updateChatState(adapter.getState());\n\n    adapter.onStateChange(updateChatState);\n    return () => {\n      adapter.offStateChange(updateChatState);\n    };\n  }, [adapter]);\n\n  useEffect(() => {\n    // Initial data should be always fetched by the composite(or external caller) instead of the adapter\n    const fetchData: () => Promise<void> = async () => {\n      // Fetch initial data for adapter\n      await adapter.fetchInitialData();\n      // Fetch initial set of messages. Without fetching messages here, if the Composite's adapter is changed the message thread does not load new messages.\n      await adapter.loadPreviousChatMessages(defaultNumberOfChatMessagesToReload);\n    };\n    fetchData();\n  }, [adapter]);\n\n  /* @conditional-compile-remove(rich-text-editor-composite-support) */\n  useEffect(() => {\n    // if rich text editor is enabled, the rich text editor component should be loaded early for good UX\n    if (options?.richTextEditor) {\n      // this line is needed to load the Rooster JS dependencies early in the lifecycle\n      // when the rich text editor is enabled\n      loadRichTextSendBox();\n    }\n  }, [options?.richTextEditor]);\n\n  const messageThreadProps = usePropsFor(MessageThread);\n  const typingIndicatorProps = usePropsFor(TypingIndicator);\n  const headerProps = useAdaptedSelector(getHeaderProps);\n  const errorBarProps = usePropsFor(ErrorBar);\n\n  useEffect(() => {\n    if (overlayImageItem === undefined) {\n      return;\n    }\n    const message = adapter.getState().thread.chatMessages[overlayImageItem.messageId];\n    if (message === undefined) {\n      return;\n    }\n    const resourceCache = message.resourceCache;\n    if (overlayImageItem.imageSrc === '' && resourceCache && resourceCache[overlayImageItem.imageUrl]) {\n      const fullSizeImageSrc = getResourceSourceUrl(resourceCache[overlayImageItem.imageUrl]);\n      if (fullSizeImageSrc === undefined || fullSizeImageSrc === '' || overlayImageItem.imageSrc === fullSizeImageSrc) {\n        return;\n      }\n      setOverlayImageItem({\n        ...overlayImageItem,\n        imageSrc: fullSizeImageSrc\n      });\n    }\n    // Disable eslint because we are using the overlayImageItem in this effect but don't want to have it as a dependency, as it will cause an infinite loop.\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [messageThreadProps.messages]);\n\n  const getResourceSourceUrl = (result: ResourceFetchResult): string => {\n    let src = '';\n    if (result.error || !result.sourceUrl) {\n      src = 'blob://';\n    } else {\n      src = result.sourceUrl;\n    }\n\n    return src;\n  };\n\n  const onRenderAvatarCallback = useCallback(\n    (userId?: string, defaultOptions?: AvatarPersonaProps) => {\n      return (\n        <AvatarPersona\n          userId={userId}\n          hidePersonaDetails={true}\n          {...defaultOptions}\n          dataProvider={onFetchAvatarPersonaData}\n        />\n      );\n    },\n    [onFetchAvatarPersonaData]\n  );\n\n  const messageThreadStyles = useMemo(() => {\n    return Object.assign(\n      {},\n      messageThreadChatCompositeStyles(theme.semanticColors.bodyBackground),\n      styles?.messageThread\n    );\n  }, [styles?.messageThread, theme.semanticColors.bodyBackground]);\n\n  const typingIndicatorStyles = useMemo(() => {\n    return Object.assign({}, styles?.typingIndicator);\n  }, [styles?.typingIndicator]);\n\n  const sendBoxStyles = useMemo(() => {\n    return Object.assign({}, styles?.sendBox);\n  }, [styles?.sendBox]);\n\n  const userId = toFlatCommunicationIdentifier(adapter.getState().userId);\n\n  /* @conditional-compile-remove(file-sharing-acs) */\n  const setKeyboardFocusAfterFileSelection = useCallback(() => {\n    // look up sendbox by ID for now, we will use `useRef`\n    // once attachment button is moved inside of send box component\n    // see ADO workitem #3764245\n    /* @conditional-compile-remove(rich-text-editor-composite-support) */\n    if (props.options?.richTextEditor) {\n      const richTextSendBox = document?.querySelector(`[id=\"richTextSendBox\"]`) as HTMLDivElement;\n      richTextSendBox?.focus();\n      return;\n    }\n    const sendBox = document?.querySelector(`[id=\"sendbox\"]`) as HTMLTextAreaElement;\n    // set send box on focus after file selection per A11y requirement\n    sendBox?.focus();\n  }, [\n    /* @conditional-compile-remove(rich-text-editor-composite-support) */\n    props.options?.richTextEditor\n  ]);\n\n  /* @conditional-compile-remove(file-sharing-acs) */\n  const attachmentUploadButtonOnChange = useCallback(\n    (files: FileList | null): void => {\n      setKeyboardFocusAfterFileSelection();\n\n      if (!files) {\n        return;\n      }\n\n      // Get files, change to tasks, store locally and pass back to Contoso\n      const newUploads = Array.from(files).map((file): AttachmentUpload => {\n        const taskId = nanoid();\n        return {\n          file,\n          taskId,\n          metadata: {\n            id: taskId,\n            name: file.name,\n            progress: 0\n          },\n          notifyUploadProgressChanged: (value: number) => {\n            handleUploadAction({ type: AttachmentUploadActionType.Progress, taskId, progress: value });\n          },\n          notifyUploadCompleted: (id: string, url: string) => {\n            handleUploadAction({ type: AttachmentUploadActionType.Completed, taskId, id, url });\n          },\n          notifyUploadFailed: (message: string) => {\n            handleUploadAction({ type: AttachmentUploadActionType.Failed, taskId, message });\n            // remove the failed upload task when error banner is auto dismissed after 10 seconds\n            // so the banner won't be shown again on UI re-rendering.\n            setTimeout(() => {\n              handleUploadAction({ type: AttachmentUploadActionType.Remove, id: taskId });\n            }, 10 * 1000);\n          }\n        };\n      });\n\n      handleUploadAction({ type: AttachmentUploadActionType.Set, newUploads });\n      attachmentOptions?.uploadOptions?.handleAttachmentSelection(newUploads);\n    },\n    [attachmentOptions?.uploadOptions, setKeyboardFocusAfterFileSelection]\n  );\n\n  /* @conditional-compile-remove(file-sharing-acs) */\n  const onRenderAttachmentDownloads = useCallback(\n    (message: ChatMessage) =>\n      message?.attachments?.length ?? 0 > 0 ? (\n        <_AttachmentDownloadCards\n          attachments={message.attachments}\n          message={message}\n          actionsForAttachment={attachmentOptions?.downloadOptions?.actionsForAttachment}\n          onActionHandlerFailed={(errorMessage: string) => {\n            setDownloadErrorMessage(errorMessage);\n          }}\n        />\n      ) : (\n        <></>\n      ),\n    [attachmentOptions?.downloadOptions?.actionsForAttachment]\n  );\n\n  const onInlineImageClicked = useCallback(\n    (attachmentId: string, messageId: string) => {\n      const message = adapter.getState().thread.chatMessages[messageId];\n      const inlinedImages = message.content?.attachments?.filter((attachment) => {\n        return attachment.attachmentType === 'image' && attachment.id === attachmentId;\n      });\n\n      if (!inlinedImages || inlinedImages.length <= 0) {\n        return;\n      }\n\n      const attachment = inlinedImages[0];\n\n      const resourceCache = message.resourceCache;\n      let imageSrc = '';\n\n      if (attachment.url) {\n        if (resourceCache && resourceCache[attachment.url]) {\n          imageSrc = getResourceSourceUrl(resourceCache[attachment.url]);\n        } else {\n          adapter.downloadResourceToCache({\n            threadId: adapter.getState().thread.threadId,\n            messageId: messageId,\n            resourceUrl: attachment.url\n          });\n        }\n      }\n\n      const titleIconRenderOptions = {\n        text: message.senderDisplayName,\n        size: PersonaSize.size32,\n        showOverflowTooltip: false,\n        imageAlt: message.senderDisplayName\n      };\n\n      const messageSenderId = message.sender !== undefined ? toFlatCommunicationIdentifier(message.sender) : userId;\n      const titleIcon = onRenderAvatarCallback && onRenderAvatarCallback(messageSenderId, titleIconRenderOptions);\n      const overlayImage: OverlayImageItem = {\n        title: message.senderDisplayName || '',\n        titleIcon: titleIcon,\n        attachmentId: attachment.id,\n        imageSrc: imageSrc,\n        messageId: messageId,\n        imageUrl: attachment.url || ''\n      };\n\n      setIsImageOverlayOpen(true);\n      setOverlayImageItem(overlayImage);\n    },\n    [adapter, onRenderAvatarCallback, userId]\n  );\n\n  const onRenderInlineImage = useCallback(\n    (inlineImage: InlineImage, defaultOnRender: (inlineImage: InlineImage) => JSX.Element): JSX.Element => {\n      const message = adapter.getState().thread.chatMessages[inlineImage.messageId];\n      const attachment = message?.content?.attachments?.find(\n        (attachment) => attachment.id === inlineImage.imageAttributes.id\n      );\n\n      if (attachment === undefined) {\n        return defaultOnRender(inlineImage);\n      }\n\n      let pointerEvents: 'none' | 'auto' = inlineImage.imageAttributes.src === '' ? 'none' : 'auto';\n      const resourceCache = message.resourceCache;\n      if (\n        resourceCache &&\n        attachment.previewUrl &&\n        resourceCache[attachment.previewUrl] &&\n        resourceCache[attachment.previewUrl].error\n      ) {\n        pointerEvents = 'none';\n      }\n\n      return (\n        <span\n          key={inlineImage.imageAttributes.id}\n          onClick={() => onInlineImageClicked(inlineImage.imageAttributes.id || '', inlineImage.messageId)}\n          tabIndex={0}\n          role=\"button\"\n          onKeyDown={(e) => {\n            if (e.key === 'Enter') {\n              onInlineImageClicked(inlineImage.imageAttributes.id || '', inlineImage.messageId);\n            }\n          }}\n          style={{ cursor: 'pointer', pointerEvents }}\n        >\n          {defaultOnRender(inlineImage)}\n        </span>\n      );\n    },\n    [adapter, onInlineImageClicked]\n  );\n\n  const inlineImageOptions = useMemo(() => {\n    return { onRenderInlineImage: onRenderInlineImage };\n  }, [onRenderInlineImage]);\n\n  const onDownloadButtonClicked = useCallback(\n    (imageSrc: string): void => {\n      if (imageSrc === '') {\n        return;\n      }\n      if (isIOS()) {\n        window.open(imageSrc, '_blank');\n      } else {\n        // Create a new anchor element\n        const a = document.createElement('a');\n        // Set the href and download attributes for the anchor element\n        a.href = imageSrc;\n        a.download = overlayImageItem?.attachmentId || '';\n        a.rel = 'noopener noreferrer';\n        a.target = '_blank';\n\n        // Programmatically click the anchor element to trigger the download\n        document.body.appendChild(a);\n        a.click();\n        document.body.removeChild(a);\n      }\n    },\n    [overlayImageItem?.attachmentId]\n  );\n\n  /* @conditional-compile-remove(file-sharing-acs) */\n  const attachmentButton = useMemo(() => {\n    if (\n      !attachmentOptions?.uploadOptions?.handleAttachmentSelection ||\n      /* @conditional-compile-remove(rich-text-editor-image-upload) */\n      textOnlyChat\n    ) {\n      return null;\n    }\n    return (\n      <AttachmentUploadButton\n        supportedMediaTypes={attachmentOptions?.uploadOptions?.supportedMediaTypes}\n        disableMultipleUploads={attachmentOptions?.uploadOptions?.disableMultipleUploads}\n        onChange={attachmentUploadButtonOnChange}\n      />\n    );\n    return <></>;\n  }, [\n    attachmentOptions?.uploadOptions?.handleAttachmentSelection,\n    attachmentOptions?.uploadOptions?.supportedMediaTypes,\n    attachmentOptions?.uploadOptions?.disableMultipleUploads,\n    attachmentUploadButtonOnChange,\n    /* @conditional-compile-remove(rich-text-editor-image-upload) */\n    textOnlyChat\n  ]);\n\n  /* @conditional-compile-remove(file-sharing-acs) */\n  const attachments = useMemo(() => {\n    return uploads?.map((v) => v.metadata);\n  }, [uploads]);\n\n  const onSendMessageHandler = useCallback(\n    async function (\n      content: string,\n      /* @conditional-compile-remove(file-sharing-acs) */ /* @conditional-compile-remove(rich-text-editor-composite-support) */ options?: MessageOptions\n    ) {\n      /* @conditional-compile-remove(file-sharing-acs) */\n      const attachments = options?.attachments ?? [];\n      /* @conditional-compile-remove(file-sharing-acs) */\n      handleUploadAction({ type: AttachmentUploadActionType.Clear });\n      /* @conditional-compile-remove(rich-text-editor-image-upload) */\n      handleSendBoxInlineImageUploadAction({\n        type: AttachmentUploadActionType.Clear,\n        messageId: SEND_BOX_UPLOADS_KEY_VALUE\n      });\n\n      /* @conditional-compile-remove(file-sharing-acs) */\n      await adapter.sendMessage(content, {\n        attachments: attachments,\n        /* @conditional-compile-remove(rich-text-editor-composite-support) */\n        type: options?.type\n      });\n      /* @conditional-compile-remove(file-sharing-acs) */\n      return;\n      await adapter.sendMessage(content, {\n        /* @conditional-compile-remove(rich-text-editor-composite-support) */\n        type: options?.type\n      });\n    },\n    [adapter, /* @conditional-compile-remove(rich-text-editor-image-upload) */ handleSendBoxInlineImageUploadAction]\n  );\n\n  const onUpdateMessageHandler = useCallback(\n    async (messageId: string, content: string) => {\n      await messageThreadProps.onUpdateMessage(messageId, content);\n      /* @conditional-compile-remove(rich-text-editor-image-upload) */\n      handleEditBoxInlineImageUploadAction({ type: AttachmentUploadActionType.Clear, messageId });\n    },\n    [\n      /* @conditional-compile-remove(rich-text-editor-image-upload) */ handleEditBoxInlineImageUploadAction,\n      messageThreadProps\n    ]\n  );\n\n  /* @conditional-compile-remove(rich-text-editor-image-upload) */\n  const onCancelEditMessageHandler = useCallback(\n    (messageId: string) => {\n      handleEditBoxInlineImageUploadAction({ type: AttachmentUploadActionType.Clear, messageId });\n    },\n    [handleEditBoxInlineImageUploadAction]\n  );\n\n  /* @conditional-compile-remove(file-sharing-acs) */\n  const onCancelUploadHandler = useCallback(\n    (id: string) => {\n      handleUploadAction({ type: AttachmentUploadActionType.Remove, id });\n      attachmentOptions?.uploadOptions?.handleAttachmentRemoval?.(id);\n    },\n    [attachmentOptions?.uploadOptions]\n  );\n\n  /* @conditional-compile-remove(rich-text-editor-composite-support) */\n  const richTextEditorOptions = useMemo(() => {\n    const onPasteCallback = isACSChat || textOnlyChat ? removeImageTags : undefined;\n    return options?.richTextEditor\n      ? {\n          /* @conditional-compile-remove(rich-text-editor-image-upload) */ onPaste: onPasteCallback\n        }\n      : undefined;\n  }, [\n    /* @conditional-compile-remove(rich-text-editor-image-upload) */\n    isACSChat,\n    /* @conditional-compile-remove(rich-text-editor-image-upload) */\n    textOnlyChat,\n    options?.richTextEditor\n  ]);\n\n  /* @conditional-compile-remove(rich-text-editor-composite-support) */\n  const richTextEditBoxOptions = useMemo(() => {\n    return options?.richTextEditor\n      ? {\n          /* @conditional-compile-remove(rich-text-editor-image-upload) */\n          ...richTextEditorOptions,\n          /* @conditional-compile-remove(rich-text-editor-image-upload) */\n          onUploadInlineImage: (imageUrl: string, imageFileName: string, messageId: string) => {\n            onUploadInlineImageForEditBox(\n              imageUrl,\n              imageFileName,\n              messageId,\n              adapter,\n              handleEditBoxInlineImageUploadAction\n            );\n          },\n          /* @conditional-compile-remove(rich-text-editor-image-upload) */\n          messagesImageUploadsInProgress: getEditBoxMessagesImageUploadsInProgress(editBoxInlineImageUploads),\n          /* @conditional-compile-remove(rich-text-editor-image-upload) */\n          onCancelInlineImageUpload: (imageId: string, messageId: string) => {\n            onCancelInlineImageUploadHandlerForEditBox(\n              imageId,\n              messageId,\n              editBoxInlineImageUploads,\n              adapter,\n              handleEditBoxInlineImageUploadAction\n            );\n          }\n        }\n      : undefined;\n  }, [\n    options?.richTextEditor,\n    /* @conditional-compile-remove(rich-text-editor-image-upload) */ richTextEditorOptions,\n    /* @conditional-compile-remove(rich-text-editor-image-upload) */ editBoxInlineImageUploads,\n    /* @conditional-compile-remove(rich-text-editor-image-upload) */ adapter\n  ]);\n\n  /* @conditional-compile-remove(rich-text-editor-composite-support) */\n  const richTextSendBoxOptions = useMemo(() => {\n    return options?.richTextEditor\n      ? {\n          /* @conditional-compile-remove(rich-text-editor-image-upload) */\n          ...richTextEditorOptions,\n          /* @conditional-compile-remove(rich-text-editor-image-upload) */\n          onUploadInlineImage: (imageUrl: string, imageFileName: string) => {\n            onUploadInlineImageForSendBox(imageUrl, imageFileName, adapter, handleSendBoxInlineImageUploadAction);\n          },\n          // onUploadInlineImageForSendBox,\n          /* @conditional-compile-remove(rich-text-editor-image-upload) */\n          imageUploadsInProgress: getSendBoxImageUploadsInProgress(sendBoxInlineImageUploads),\n          /* @conditional-compile-remove(rich-text-editor-image-upload) */\n          onCancelInlineImageUpload: (imageId: string) => {\n            onCancelInlineImageUploadHandlerForSendBox(\n              imageId,\n              sendBoxInlineImageUploads,\n              adapter,\n              handleSendBoxInlineImageUploadAction\n            );\n          }\n        }\n      : undefined;\n  }, [\n    options?.richTextEditor,\n    /* @conditional-compile-remove(rich-text-editor-image-upload) */ richTextEditorOptions,\n    /* @conditional-compile-remove(rich-text-editor-image-upload) */ sendBoxInlineImageUploads,\n    adapter\n  ]);\n\n  return (\n    <Stack className={chatContainer} grow>\n      {options?.topic !== false && <ChatHeader {...headerProps} />}\n      <Stack className={chatArea} tokens={participantListContainerPadding} horizontal grow>\n        <Stack className={chatWrapper} grow>\n          {options?.errorBar !== false && <ErrorBar {...errorBarProps} />}\n          {\n            /* @conditional-compile-remove(file-sharing-acs) */\n            <AttachmentDownloadErrorBar\n              onDismissDownloadErrorMessage={useCallback(() => {\n                setDownloadErrorMessage('');\n              }, [])}\n              attachmentDownloadErrorMessage={downloadErrorMessage || ''}\n            />\n          }\n          <MessageThread\n            {...messageThreadProps}\n            onUpdateMessage={onUpdateMessageHandler}\n            /* @conditional-compile-remove(rich-text-editor-image-upload) */\n            onCancelEditMessage={onCancelEditMessageHandler}\n            onRenderAvatar={onRenderAvatarCallback}\n            onRenderMessage={onRenderMessage}\n            /* @conditional-compile-remove(file-sharing-acs) */\n            onRenderAttachmentDownloads={onRenderAttachmentDownloads}\n            inlineImageOptions={inlineImageOptions}\n            numberOfChatMessagesToReload={defaultNumberOfChatMessagesToReload}\n            styles={messageThreadStyles}\n            /* @conditional-compile-remove(rich-text-editor-composite-support) */\n            richTextEditorOptions={richTextEditBoxOptions}\n          />\n          <Stack className={mergeStyles(sendboxContainerStyles)}>\n            <div className={mergeStyles(typingIndicatorContainerStyles)}>\n              {onRenderTypingIndicator ? (\n                onRenderTypingIndicator(typingIndicatorProps.typingUsers)\n              ) : (\n                <TypingIndicator {...typingIndicatorProps} styles={typingIndicatorStyles} />\n              )}\n            </div>\n            <Stack horizontal={formFactor === 'mobile'}>\n              {formFactor === 'mobile' && (\n                /* @conditional-compile-remove(file-sharing-acs) */\n                <Stack verticalAlign=\"center\">{attachmentButton}</Stack>\n              )}\n              <Stack grow>\n                <SendBoxPicker\n                  styles={sendBoxStyles}\n                  autoFocus={options?.autoFocus}\n                  /* @conditional-compile-remove(rich-text-editor-composite-support) */\n                  richTextEditorOptions={richTextSendBoxOptions}\n                  /* @conditional-compile-remove(file-sharing-acs) */\n                  attachments={attachments}\n                  /* @conditional-compile-remove(file-sharing-acs) */\n                  onCancelAttachmentUpload={onCancelUploadHandler}\n                  // we need to overwrite onSendMessage for SendBox because we need to clear attachment state\n                  // when submit button is clicked\n                  onSendMessage={onSendMessageHandler}\n                />\n              </Stack>\n              {formFactor !== 'mobile' &&\n                /* @conditional-compile-remove(file-sharing-acs) */\n                attachmentButton}\n            </Stack>\n          </Stack>\n        </Stack>\n        {\n          /* @conditional-compile-remove(chat-composite-participant-pane) */\n          options?.participantPane === true && (\n            <ChatScreenPeoplePane\n              onFetchAvatarPersonaData={onFetchAvatarPersonaData}\n              onFetchParticipantMenuItems={props.onFetchParticipantMenuItems}\n              isMobile={formFactor === 'mobile'}\n            />\n          )\n        }\n      </Stack>\n      {overlayImageItem && (\n        <ImageOverlay\n          {...overlayImageItem}\n          isOpen={isImageOverlayOpen}\n          onDismiss={() => {\n            setOverlayImageItem(undefined);\n            setIsImageOverlayOpen(false);\n            adapter.removeResourceFromCache({\n              threadId: adapter.getState().thread.threadId,\n              messageId: overlayImageItem.messageId,\n              resourceUrl: overlayImageItem.imageUrl\n            });\n          }}\n          onDownloadButtonClicked={onDownloadButtonClicked}\n        />\n      )}\n    </Stack>\n  );\n};\n"]}
         
     | 
| 
         @@ -0,0 +1,49 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            import { Action, AttachmentUpload, AttachmentUploadActionType, ProgressAction, CompleteAction, FailedAction, RemoveAction, ClearAction } from '../file-sharing/AttachmentUpload';
         
     | 
| 
      
 2 
     | 
    
         
            +
            /**
         
     | 
| 
      
 3 
     | 
    
         
            +
             * @private
         
     | 
| 
      
 4 
     | 
    
         
            +
             */
         
     | 
| 
      
 5 
     | 
    
         
            +
            export interface ImageAction {
         
     | 
| 
      
 6 
     | 
    
         
            +
                messageId: string;
         
     | 
| 
      
 7 
     | 
    
         
            +
            }
         
     | 
| 
      
 8 
     | 
    
         
            +
            /**
         
     | 
| 
      
 9 
     | 
    
         
            +
             * @private
         
     | 
| 
      
 10 
     | 
    
         
            +
             */
         
     | 
| 
      
 11 
     | 
    
         
            +
            interface ImageSetAction extends Action, ImageAction {
         
     | 
| 
      
 12 
     | 
    
         
            +
                type: AttachmentUploadActionType.Set;
         
     | 
| 
      
 13 
     | 
    
         
            +
                newUploads: AttachmentUpload[];
         
     | 
| 
      
 14 
     | 
    
         
            +
            }
         
     | 
| 
      
 15 
     | 
    
         
            +
            /**
         
     | 
| 
      
 16 
     | 
    
         
            +
             * @private
         
     | 
| 
      
 17 
     | 
    
         
            +
             */
         
     | 
| 
      
 18 
     | 
    
         
            +
            interface ImageProgressAction extends ProgressAction, ImageAction {
         
     | 
| 
      
 19 
     | 
    
         
            +
            }
         
     | 
| 
      
 20 
     | 
    
         
            +
            /**
         
     | 
| 
      
 21 
     | 
    
         
            +
             * @private
         
     | 
| 
      
 22 
     | 
    
         
            +
             */
         
     | 
| 
      
 23 
     | 
    
         
            +
            interface ImageCompleteAction extends CompleteAction, ImageAction {
         
     | 
| 
      
 24 
     | 
    
         
            +
            }
         
     | 
| 
      
 25 
     | 
    
         
            +
            /**
         
     | 
| 
      
 26 
     | 
    
         
            +
             * @private
         
     | 
| 
      
 27 
     | 
    
         
            +
             */
         
     | 
| 
      
 28 
     | 
    
         
            +
            interface ImageFailedAction extends FailedAction, ImageAction {
         
     | 
| 
      
 29 
     | 
    
         
            +
            }
         
     | 
| 
      
 30 
     | 
    
         
            +
            /**
         
     | 
| 
      
 31 
     | 
    
         
            +
             * @private
         
     | 
| 
      
 32 
     | 
    
         
            +
             */
         
     | 
| 
      
 33 
     | 
    
         
            +
            interface ImageRemoveAction extends RemoveAction, ImageAction {
         
     | 
| 
      
 34 
     | 
    
         
            +
            }
         
     | 
| 
      
 35 
     | 
    
         
            +
            /**
         
     | 
| 
      
 36 
     | 
    
         
            +
             * @private
         
     | 
| 
      
 37 
     | 
    
         
            +
             */
         
     | 
| 
      
 38 
     | 
    
         
            +
            interface ImageClearAction extends ClearAction, ImageAction {
         
     | 
| 
      
 39 
     | 
    
         
            +
            }
         
     | 
| 
      
 40 
     | 
    
         
            +
            /**
         
     | 
| 
      
 41 
     | 
    
         
            +
             * @private
         
     | 
| 
      
 42 
     | 
    
         
            +
             */
         
     | 
| 
      
 43 
     | 
    
         
            +
            export type ImageActions = ImageSetAction | ImageProgressAction | ImageCompleteAction | ImageFailedAction | ImageRemoveAction | ImageClearAction;
         
     | 
| 
      
 44 
     | 
    
         
            +
            /**
         
     | 
| 
      
 45 
     | 
    
         
            +
             * @internal
         
     | 
| 
      
 46 
     | 
    
         
            +
             */
         
     | 
| 
      
 47 
     | 
    
         
            +
            export declare const ImageUploadReducer: (state: Record<string, AttachmentUpload[]> | undefined, action: ImageActions) => Record<string, AttachmentUpload[]> | undefined;
         
     | 
| 
      
 48 
     | 
    
         
            +
            export {};
         
     | 
| 
      
 49 
     | 
    
         
            +
            //# sourceMappingURL=ImageUploadReducer.d.ts.map
         
     | 
| 
         @@ -0,0 +1,48 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            // Copyright (c) Microsoft Corporation.
         
     | 
| 
      
 2 
     | 
    
         
            +
            // Licensed under the MIT License.
         
     | 
| 
      
 3 
     | 
    
         
            +
            /* @conditional-compile-remove(rich-text-editor-image-upload) */
         
     | 
| 
      
 4 
     | 
    
         
            +
            import { AttachmentUploadActionType } from '../file-sharing/AttachmentUpload';
         
     | 
| 
      
 5 
     | 
    
         
            +
            /* @conditional-compile-remove(rich-text-editor-image-upload) */
         
     | 
| 
      
 6 
     | 
    
         
            +
            /**
         
     | 
| 
      
 7 
     | 
    
         
            +
             * @internal
         
     | 
| 
      
 8 
     | 
    
         
            +
             */
         
     | 
| 
      
 9 
     | 
    
         
            +
            export const ImageUploadReducer = (state, action) => {
         
     | 
| 
      
 10 
     | 
    
         
            +
                const messageId = action.messageId;
         
     | 
| 
      
 11 
     | 
    
         
            +
                const messageState = state && state[messageId];
         
     | 
| 
      
 12 
     | 
    
         
            +
                switch (action.type) {
         
     | 
| 
      
 13 
     | 
    
         
            +
                    case AttachmentUploadActionType.Set:
         
     | 
| 
      
 14 
     | 
    
         
            +
                        if (!messageState || messageState.length === 0) {
         
     | 
| 
      
 15 
     | 
    
         
            +
                            return Object.assign(Object.assign({}, state), { [messageId]: action.newUploads });
         
     | 
| 
      
 16 
     | 
    
         
            +
                        }
         
     | 
| 
      
 17 
     | 
    
         
            +
                        return Object.assign(Object.assign({}, state), { [messageId]: messageState.filter((v) => !v.metadata.error).concat(action.newUploads) });
         
     | 
| 
      
 18 
     | 
    
         
            +
                    case AttachmentUploadActionType.Completed:
         
     | 
| 
      
 19 
     | 
    
         
            +
                        if (!messageState) {
         
     | 
| 
      
 20 
     | 
    
         
            +
                            return state;
         
     | 
| 
      
 21 
     | 
    
         
            +
                        }
         
     | 
| 
      
 22 
     | 
    
         
            +
                        return Object.assign(Object.assign({}, state), { [messageId]: messageState.map((v) => v.taskId === action.taskId
         
     | 
| 
      
 23 
     | 
    
         
            +
                                ? Object.assign(Object.assign({}, v), { metadata: Object.assign(Object.assign({}, v.metadata), { id: action.id, url: action.url, progress: 1 }) }) : v) });
         
     | 
| 
      
 24 
     | 
    
         
            +
                    case AttachmentUploadActionType.Failed:
         
     | 
| 
      
 25 
     | 
    
         
            +
                        if (!messageState) {
         
     | 
| 
      
 26 
     | 
    
         
            +
                            return state;
         
     | 
| 
      
 27 
     | 
    
         
            +
                        }
         
     | 
| 
      
 28 
     | 
    
         
            +
                        return Object.assign(Object.assign({}, state), { [messageId]: messageState.map((v) => v.taskId === action.taskId
         
     | 
| 
      
 29 
     | 
    
         
            +
                                ? Object.assign(Object.assign({}, v), { metadata: Object.assign(Object.assign({}, v.metadata), { error: {
         
     | 
| 
      
 30 
     | 
    
         
            +
                                            message: action.message
         
     | 
| 
      
 31 
     | 
    
         
            +
                                        } }) }) : v) });
         
     | 
| 
      
 32 
     | 
    
         
            +
                    case AttachmentUploadActionType.Remove:
         
     | 
| 
      
 33 
     | 
    
         
            +
                        if (!messageState) {
         
     | 
| 
      
 34 
     | 
    
         
            +
                            return state;
         
     | 
| 
      
 35 
     | 
    
         
            +
                        }
         
     | 
| 
      
 36 
     | 
    
         
            +
                        return Object.assign(Object.assign({}, state), { [messageId]: messageState.filter((v) => !v.metadata.error).filter((v) => v.metadata.id !== action.id) });
         
     | 
| 
      
 37 
     | 
    
         
            +
                    case AttachmentUploadActionType.Progress:
         
     | 
| 
      
 38 
     | 
    
         
            +
                        if (!messageState) {
         
     | 
| 
      
 39 
     | 
    
         
            +
                            return state;
         
     | 
| 
      
 40 
     | 
    
         
            +
                        }
         
     | 
| 
      
 41 
     | 
    
         
            +
                        return Object.assign(Object.assign({}, state), { [messageId]: messageState.map((v) => v.taskId === action.taskId ? Object.assign(Object.assign({}, v), { metadata: Object.assign(Object.assign({}, v.metadata), { progress: action.progress }) }) : v) });
         
     | 
| 
      
 42 
     | 
    
         
            +
                    case AttachmentUploadActionType.Clear:
         
     | 
| 
      
 43 
     | 
    
         
            +
                        return Object.assign(Object.assign({}, state), { [messageId]: [] });
         
     | 
| 
      
 44 
     | 
    
         
            +
                    default:
         
     | 
| 
      
 45 
     | 
    
         
            +
                        return state;
         
     | 
| 
      
 46 
     | 
    
         
            +
                }
         
     | 
| 
      
 47 
     | 
    
         
            +
            };
         
     | 
| 
      
 48 
     | 
    
         
            +
            //# sourceMappingURL=ImageUploadReducer.js.map
         
     | 
| 
         @@ -0,0 +1 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            {"version":3,"file":"ImageUploadReducer.js","sourceRoot":"","sources":["../../../../../../../../react-composites/src/composites/ChatComposite/ImageUpload/ImageUploadReducer.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\nimport {\n  Action,\n  AttachmentUpload,\n  AttachmentUploadActionType,\n  ProgressAction,\n  CompleteAction,\n  FailedAction,\n  RemoveAction,\n  ClearAction\n} from '../file-sharing/AttachmentUpload';\n\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\n/**\n * @private\n */\nexport interface ImageAction {\n  messageId: string;\n}\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\n/**\n * @private\n */\ninterface ImageSetAction extends Action, ImageAction {\n  type: AttachmentUploadActionType.Set;\n  newUploads: AttachmentUpload[];\n}\n\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\n/**\n * @private\n */\ninterface ImageProgressAction extends ProgressAction, ImageAction {}\n\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\n/**\n * @private\n */\ninterface ImageCompleteAction extends CompleteAction, ImageAction {}\n\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\n/**\n * @private\n */\ninterface ImageFailedAction extends FailedAction, ImageAction {}\n\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\n/**\n * @private\n */\ninterface ImageRemoveAction extends RemoveAction, ImageAction {}\n\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\n/**\n * @private\n */\ninterface ImageClearAction extends ClearAction, ImageAction {}\n\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\n/**\n * @private\n */\nexport type ImageActions =\n  | ImageSetAction\n  | ImageProgressAction\n  | ImageCompleteAction\n  | ImageFailedAction\n  | ImageRemoveAction\n  | ImageClearAction;\n\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\n/**\n * @internal\n */\nexport const ImageUploadReducer = (\n  state: Record<string, AttachmentUpload[]> | undefined,\n  action: ImageActions\n): Record<string, AttachmentUpload[]> | undefined => {\n  const messageId = action.messageId;\n  const messageState = state && state[messageId];\n  switch (action.type) {\n    case AttachmentUploadActionType.Set:\n      if (!messageState || messageState.length === 0) {\n        return { ...state, [messageId]: action.newUploads };\n      }\n      return {\n        ...state,\n        [messageId]: messageState.filter((v) => !v.metadata.error).concat(action.newUploads)\n      };\n\n    case AttachmentUploadActionType.Completed:\n      if (!messageState) {\n        return state;\n      }\n\n      return {\n        ...state,\n        [messageId]: messageState.map((v) =>\n          v.taskId === action.taskId\n            ? { ...v, metadata: { ...v.metadata, id: action.id, url: action.url, progress: 1 } }\n            : v\n        )\n      };\n\n    case AttachmentUploadActionType.Failed:\n      if (!messageState) {\n        return state;\n      }\n      return {\n        ...state,\n        [messageId]: messageState.map((v) =>\n          v.taskId === action.taskId\n            ? {\n                ...v,\n                metadata: {\n                  ...v.metadata,\n                  error: {\n                    message: action.message\n                  }\n                }\n              }\n            : v\n        )\n      };\n\n    case AttachmentUploadActionType.Remove:\n      if (!messageState) {\n        return state;\n      }\n      return {\n        ...state,\n        [messageId]: messageState.filter((v) => !v.metadata.error).filter((v) => v.metadata.id !== action.id)\n      };\n\n    case AttachmentUploadActionType.Progress:\n      if (!messageState) {\n        return state;\n      }\n      return {\n        ...state,\n        [messageId]: messageState.map((v) =>\n          v.taskId === action.taskId ? { ...v, metadata: { ...v.metadata, progress: action.progress } } : v\n        )\n      };\n\n    case AttachmentUploadActionType.Clear:\n      return { ...state, [messageId]: [] };\n    default:\n      return state;\n  }\n};\n"]}
         
     | 
| 
         @@ -1,12 +1,44 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            import { AttachmentMetadataInProgress } from "../../../../../acs-ui-common/src";
         
     | 
| 
      
 2 
     | 
    
         
            +
            import { AttachmentUpload } from '../file-sharing/AttachmentUpload';
         
     | 
| 
      
 3 
     | 
    
         
            +
            import { ChatAdapter } from '../adapter/ChatAdapter';
         
     | 
| 
      
 4 
     | 
    
         
            +
            import { Dispatch } from 'react';
         
     | 
| 
      
 5 
     | 
    
         
            +
            import { ImageActions } from './ImageUploadReducer';
         
     | 
| 
       1 
6 
     | 
    
         
             
            /**
         
     | 
| 
       2 
7 
     | 
    
         
             
             * @private
         
     | 
| 
       3 
8 
     | 
    
         
             
             */
         
     | 
| 
       4 
9 
     | 
    
         
             
            export declare const getInlineImageData: (image: string) => Promise<Blob | undefined>;
         
     | 
| 
       5 
10 
     | 
    
         
             
            /**
         
     | 
| 
       6 
11 
     | 
    
         
             
             * @internal
         
     | 
| 
       7 
     | 
    
         
            -
             * Exported only for unit testing
         
     | 
| 
       8 
12 
     | 
    
         
             
             */
         
     | 
| 
       9 
13 
     | 
    
         
             
            export declare const removeImageTags: (event: {
         
     | 
| 
       10 
14 
     | 
    
         
             
                content: DocumentFragment;
         
     | 
| 
       11 
15 
     | 
    
         
             
            }) => void;
         
     | 
| 
      
 16 
     | 
    
         
            +
            /**
         
     | 
| 
      
 17 
     | 
    
         
            +
             * @internal
         
     | 
| 
      
 18 
     | 
    
         
            +
             */
         
     | 
| 
      
 19 
     | 
    
         
            +
            export declare const getEditBoxMessagesImageUploadsInProgress: (editBoxInlineImageUploads: Record<string, AttachmentUpload[]> | undefined) => Record<string, AttachmentMetadataInProgress[]> | undefined;
         
     | 
| 
      
 20 
     | 
    
         
            +
            /**
         
     | 
| 
      
 21 
     | 
    
         
            +
             * @internal
         
     | 
| 
      
 22 
     | 
    
         
            +
             */
         
     | 
| 
      
 23 
     | 
    
         
            +
            export declare const getSendBoxImageUploadsInProgress: (sendBoxInlineImageUploads: Record<string, AttachmentUpload[]> | undefined) => AttachmentMetadataInProgress[] | undefined;
         
     | 
| 
      
 24 
     | 
    
         
            +
            /**
         
     | 
| 
      
 25 
     | 
    
         
            +
             * @internal
         
     | 
| 
      
 26 
     | 
    
         
            +
             */
         
     | 
| 
      
 27 
     | 
    
         
            +
            export declare const onUploadInlineImageForEditBox: (image: string, fileName: string, messageId: string, adapter: ChatAdapter, handleEditBoxInlineImageUploadAction: Dispatch<ImageActions>) => Promise<void>;
         
     | 
| 
      
 28 
     | 
    
         
            +
            /**
         
     | 
| 
      
 29 
     | 
    
         
            +
             * @internal
         
     | 
| 
      
 30 
     | 
    
         
            +
             */
         
     | 
| 
      
 31 
     | 
    
         
            +
            export declare const onUploadInlineImageForSendBox: (image: string, fileName: string, adapter: ChatAdapter, handleSendBoxInlineImageUploadAction: Dispatch<ImageActions>) => Promise<void>;
         
     | 
| 
      
 32 
     | 
    
         
            +
            /**
         
     | 
| 
      
 33 
     | 
    
         
            +
             * @internal
         
     | 
| 
      
 34 
     | 
    
         
            +
             */
         
     | 
| 
      
 35 
     | 
    
         
            +
            export declare const cancelInlineImageUpload: (imageId: string, imageUpload: AttachmentUpload | undefined, messageId: string, inlineImageUploadActionHandler: Dispatch<ImageActions>, adapter: ChatAdapter) => void;
         
     | 
| 
      
 36 
     | 
    
         
            +
            /**
         
     | 
| 
      
 37 
     | 
    
         
            +
             * @internal
         
     | 
| 
      
 38 
     | 
    
         
            +
             */
         
     | 
| 
      
 39 
     | 
    
         
            +
            export declare const onCancelInlineImageUploadHandlerForEditBox: (imageId: string, messageId: string, editBoxInlineImageUploads: Record<string, AttachmentUpload[]> | undefined, adapter: ChatAdapter, handleEditBoxInlineImageUploadAction: Dispatch<ImageActions>) => void;
         
     | 
| 
      
 40 
     | 
    
         
            +
            /**
         
     | 
| 
      
 41 
     | 
    
         
            +
             * @internal
         
     | 
| 
      
 42 
     | 
    
         
            +
             */
         
     | 
| 
      
 43 
     | 
    
         
            +
            export declare const onCancelInlineImageUploadHandlerForSendBox: (imageId: string, sendBoxInlineImageUploads: Record<string, AttachmentUpload[]> | undefined, adapter: ChatAdapter, handleSendBoxInlineImageUploadAction: Dispatch<ImageActions>) => void;
         
     | 
| 
       12 
44 
     | 
    
         
             
            //# sourceMappingURL=ImageUploadUtils.d.ts.map
         
     | 
    
        package/dist/dist-esm/react-composites/src/composites/ChatComposite/ImageUpload/ImageUploadUtils.js
    CHANGED
    
    | 
         @@ -10,6 +10,14 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge 
     | 
|
| 
       10 
10 
     | 
    
         
             
                });
         
     | 
| 
       11 
11 
     | 
    
         
             
            };
         
     | 
| 
       12 
12 
     | 
    
         
             
            /* @conditional-compile-remove(rich-text-editor-image-upload) */
         
     | 
| 
      
 13 
     | 
    
         
            +
            import { AttachmentUploadActionType } from '../file-sharing/AttachmentUpload';
         
     | 
| 
      
 14 
     | 
    
         
            +
            /* @conditional-compile-remove(rich-text-editor-image-upload) */
         
     | 
| 
      
 15 
     | 
    
         
            +
            import { SEND_BOX_UPLOADS_KEY_VALUE } from '../../common/constants';
         
     | 
| 
      
 16 
     | 
    
         
            +
            /* @conditional-compile-remove(rich-text-editor-image-upload) */
         
     | 
| 
      
 17 
     | 
    
         
            +
            import { nanoid } from 'nanoid';
         
     | 
| 
      
 18 
     | 
    
         
            +
            /* @conditional-compile-remove(rich-text-editor-image-upload) */
         
     | 
| 
      
 19 
     | 
    
         
            +
            const MAX_INLINE_IMAGE_UPLOAD_SIZE_MB = 20;
         
     | 
| 
      
 20 
     | 
    
         
            +
            /* @conditional-compile-remove(rich-text-editor-image-upload) */
         
     | 
| 
       13 
21 
     | 
    
         
             
            const fetchBlobData = (resource, options) => __awaiter(void 0, void 0, void 0, function* () {
         
     | 
| 
       14 
22 
     | 
    
         
             
                // default timeout is 30 seconds
         
     | 
| 
       15 
23 
     | 
    
         
             
                const { timeout = 30000, abortController } = options;
         
     | 
| 
         @@ -25,18 +33,22 @@ const fetchBlobData = (resource, options) => __awaiter(void 0, void 0, void 0, f 
     | 
|
| 
       25 
33 
     | 
    
         
             
             * @private
         
     | 
| 
       26 
34 
     | 
    
         
             
             */
         
     | 
| 
       27 
35 
     | 
    
         
             
            export const getInlineImageData = (image) => __awaiter(void 0, void 0, void 0, function* () {
         
     | 
| 
       28 
     | 
    
         
            -
                const blobImage = undefined;
         
     | 
| 
       29 
36 
     | 
    
         
             
                if (image.startsWith('blob') || image.startsWith('http')) {
         
     | 
| 
       30 
     | 
    
         
            -
                     
     | 
| 
       31 
     | 
    
         
            -
             
     | 
| 
       32 
     | 
    
         
            -
             
     | 
| 
      
 37 
     | 
    
         
            +
                    try {
         
     | 
| 
      
 38 
     | 
    
         
            +
                        const res = yield fetchBlobData(image, { abortController: new AbortController() });
         
     | 
| 
      
 39 
     | 
    
         
            +
                        const blobImage = yield res.blob();
         
     | 
| 
      
 40 
     | 
    
         
            +
                        return blobImage;
         
     | 
| 
      
 41 
     | 
    
         
            +
                    }
         
     | 
| 
      
 42 
     | 
    
         
            +
                    catch (error) {
         
     | 
| 
      
 43 
     | 
    
         
            +
                        console.error('Error fetching image data', error);
         
     | 
| 
      
 44 
     | 
    
         
            +
                        return;
         
     | 
| 
      
 45 
     | 
    
         
            +
                    }
         
     | 
| 
       33 
46 
     | 
    
         
             
                }
         
     | 
| 
       34 
     | 
    
         
            -
                return 
     | 
| 
      
 47 
     | 
    
         
            +
                return;
         
     | 
| 
       35 
48 
     | 
    
         
             
            });
         
     | 
| 
       36 
49 
     | 
    
         
             
            /* @conditional-compile-remove(rich-text-editor-image-upload) */
         
     | 
| 
       37 
50 
     | 
    
         
             
            /**
         
     | 
| 
       38 
51 
     | 
    
         
             
             * @internal
         
     | 
| 
       39 
     | 
    
         
            -
             * Exported only for unit testing
         
     | 
| 
       40 
52 
     | 
    
         
             
             */
         
     | 
| 
       41 
53 
     | 
    
         
             
            export const removeImageTags = (event) => {
         
     | 
| 
       42 
54 
     | 
    
         
             
                event.content.querySelectorAll('img').forEach((image) => {
         
     | 
| 
         @@ -50,4 +62,184 @@ export const removeImageTags = (event) => { 
     | 
|
| 
       50 
62 
     | 
    
         
             
                    currentNode === null || currentNode === void 0 ? void 0 : currentNode.remove();
         
     | 
| 
       51 
63 
     | 
    
         
             
                });
         
     | 
| 
       52 
64 
     | 
    
         
             
            };
         
     | 
| 
      
 65 
     | 
    
         
            +
            /* @conditional-compile-remove(rich-text-editor-image-upload) */
         
     | 
| 
      
 66 
     | 
    
         
            +
            /**
         
     | 
| 
      
 67 
     | 
    
         
            +
             * @internal
         
     | 
| 
      
 68 
     | 
    
         
            +
             */
         
     | 
| 
      
 69 
     | 
    
         
            +
            export const getEditBoxMessagesImageUploadsInProgress = (editBoxInlineImageUploads) => {
         
     | 
| 
      
 70 
     | 
    
         
            +
                if (!editBoxInlineImageUploads) {
         
     | 
| 
      
 71 
     | 
    
         
            +
                    return;
         
     | 
| 
      
 72 
     | 
    
         
            +
                }
         
     | 
| 
      
 73 
     | 
    
         
            +
                const messageIds = Object.keys(editBoxInlineImageUploads || {});
         
     | 
| 
      
 74 
     | 
    
         
            +
                const messagesImageUploadsInProgress = {};
         
     | 
| 
      
 75 
     | 
    
         
            +
                messageIds.map((messageId) => {
         
     | 
| 
      
 76 
     | 
    
         
            +
                    const messageUploads = editBoxInlineImageUploads[messageId].map((upload) => {
         
     | 
| 
      
 77 
     | 
    
         
            +
                        return upload.metadata;
         
     | 
| 
      
 78 
     | 
    
         
            +
                    });
         
     | 
| 
      
 79 
     | 
    
         
            +
                    messagesImageUploadsInProgress[messageId] = messageUploads;
         
     | 
| 
      
 80 
     | 
    
         
            +
                });
         
     | 
| 
      
 81 
     | 
    
         
            +
                return messagesImageUploadsInProgress;
         
     | 
| 
      
 82 
     | 
    
         
            +
            };
         
     | 
| 
      
 83 
     | 
    
         
            +
            /* @conditional-compile-remove(rich-text-editor-image-upload) */
         
     | 
| 
      
 84 
     | 
    
         
            +
            /**
         
     | 
| 
      
 85 
     | 
    
         
            +
             * @internal
         
     | 
| 
      
 86 
     | 
    
         
            +
             */
         
     | 
| 
      
 87 
     | 
    
         
            +
            export const getSendBoxImageUploadsInProgress = (sendBoxInlineImageUploads) => {
         
     | 
| 
      
 88 
     | 
    
         
            +
                var _a;
         
     | 
| 
      
 89 
     | 
    
         
            +
                if (!sendBoxInlineImageUploads) {
         
     | 
| 
      
 90 
     | 
    
         
            +
                    return;
         
     | 
| 
      
 91 
     | 
    
         
            +
                }
         
     | 
| 
      
 92 
     | 
    
         
            +
                return (_a = sendBoxInlineImageUploads[SEND_BOX_UPLOADS_KEY_VALUE]) === null || _a === void 0 ? void 0 : _a.map((upload) => upload.metadata);
         
     | 
| 
      
 93 
     | 
    
         
            +
            };
         
     | 
| 
      
 94 
     | 
    
         
            +
            /* @conditional-compile-remove(rich-text-editor-image-upload) */
         
     | 
| 
      
 95 
     | 
    
         
            +
            const inlineImageUploadHandler = (uploadTasks, adapter) => __awaiter(void 0, void 0, void 0, function* () {
         
     | 
| 
      
 96 
     | 
    
         
            +
                var _a, _b, _c, _d, _e;
         
     | 
| 
      
 97 
     | 
    
         
            +
                for (const task of uploadTasks) {
         
     | 
| 
      
 98 
     | 
    
         
            +
                    const uploadTask = task;
         
     | 
| 
      
 99 
     | 
    
         
            +
                    const image = uploadTask.image;
         
     | 
| 
      
 100 
     | 
    
         
            +
                    if (!image) {
         
     | 
| 
      
 101 
     | 
    
         
            +
                        uploadTask.notifyUploadFailed(`Image data for "${(_a = task.metadata) === null || _a === void 0 ? void 0 : _a.name}" is not provided.`);
         
     | 
| 
      
 102 
     | 
    
         
            +
                        continue;
         
     | 
| 
      
 103 
     | 
    
         
            +
                    }
         
     | 
| 
      
 104 
     | 
    
         
            +
                    if (image && image.size > MAX_INLINE_IMAGE_UPLOAD_SIZE_MB * 1024 * 1024) {
         
     | 
| 
      
 105 
     | 
    
         
            +
                        uploadTask.notifyUploadFailed(`"${(_b = task.metadata) === null || _b === void 0 ? void 0 : _b.name}" is too big. Select a file under ${MAX_INLINE_IMAGE_UPLOAD_SIZE_MB}MB.`);
         
     | 
| 
      
 106 
     | 
    
         
            +
                        continue;
         
     | 
| 
      
 107 
     | 
    
         
            +
                    }
         
     | 
| 
      
 108 
     | 
    
         
            +
                    const SUPPORTED_FILES = ['jpg', 'jpeg', 'png', 'gif', 'heic', 'webp'];
         
     | 
| 
      
 109 
     | 
    
         
            +
                    const imageExtension = (_d = (_c = task.metadata) === null || _c === void 0 ? void 0 : _c.name.split('.').pop()) !== null && _d !== void 0 ? _d : '';
         
     | 
| 
      
 110 
     | 
    
         
            +
                    if (!SUPPORTED_FILES.includes(imageExtension)) {
         
     | 
| 
      
 111 
     | 
    
         
            +
                        uploadTask.notifyUploadFailed(`Uploading ".${imageExtension}" image is not allowed.`);
         
     | 
| 
      
 112 
     | 
    
         
            +
                        continue;
         
     | 
| 
      
 113 
     | 
    
         
            +
                    }
         
     | 
| 
      
 114 
     | 
    
         
            +
                    try {
         
     | 
| 
      
 115 
     | 
    
         
            +
                        const response = yield adapter.uploadImage(image, (_e = task.metadata) === null || _e === void 0 ? void 0 : _e.name);
         
     | 
| 
      
 116 
     | 
    
         
            +
                        uploadTask.notifyUploadCompleted(response.id, task.metadata.url || '');
         
     | 
| 
      
 117 
     | 
    
         
            +
                    }
         
     | 
| 
      
 118 
     | 
    
         
            +
                    catch (error) {
         
     | 
| 
      
 119 
     | 
    
         
            +
                        console.error(error);
         
     | 
| 
      
 120 
     | 
    
         
            +
                        uploadTask.notifyUploadFailed('Unable to upload inline image. Please try again later.');
         
     | 
| 
      
 121 
     | 
    
         
            +
                    }
         
     | 
| 
      
 122 
     | 
    
         
            +
                }
         
     | 
| 
      
 123 
     | 
    
         
            +
            });
         
     | 
| 
      
 124 
     | 
    
         
            +
            /* @conditional-compile-remove(rich-text-editor-image-upload) */
         
     | 
| 
      
 125 
     | 
    
         
            +
            const generateUploadTask = (image, fileName, messageId, inlineImageUploadActionHandler) => __awaiter(void 0, void 0, void 0, function* () {
         
     | 
| 
      
 126 
     | 
    
         
            +
                const imageData = yield getInlineImageData(image);
         
     | 
| 
      
 127 
     | 
    
         
            +
                if (!imageData) {
         
     | 
| 
      
 128 
     | 
    
         
            +
                    return;
         
     | 
| 
      
 129 
     | 
    
         
            +
                }
         
     | 
| 
      
 130 
     | 
    
         
            +
                const taskId = nanoid();
         
     | 
| 
      
 131 
     | 
    
         
            +
                const uploadTask = {
         
     | 
| 
      
 132 
     | 
    
         
            +
                    image: imageData,
         
     | 
| 
      
 133 
     | 
    
         
            +
                    taskId,
         
     | 
| 
      
 134 
     | 
    
         
            +
                    metadata: {
         
     | 
| 
      
 135 
     | 
    
         
            +
                        id: taskId,
         
     | 
| 
      
 136 
     | 
    
         
            +
                        name: fileName,
         
     | 
| 
      
 137 
     | 
    
         
            +
                        url: image,
         
     | 
| 
      
 138 
     | 
    
         
            +
                        progress: 0
         
     | 
| 
      
 139 
     | 
    
         
            +
                    },
         
     | 
| 
      
 140 
     | 
    
         
            +
                    notifyUploadProgressChanged: (value) => {
         
     | 
| 
      
 141 
     | 
    
         
            +
                        inlineImageUploadActionHandler({
         
     | 
| 
      
 142 
     | 
    
         
            +
                            type: AttachmentUploadActionType.Progress,
         
     | 
| 
      
 143 
     | 
    
         
            +
                            taskId,
         
     | 
| 
      
 144 
     | 
    
         
            +
                            progress: value,
         
     | 
| 
      
 145 
     | 
    
         
            +
                            messageId
         
     | 
| 
      
 146 
     | 
    
         
            +
                        });
         
     | 
| 
      
 147 
     | 
    
         
            +
                    },
         
     | 
| 
      
 148 
     | 
    
         
            +
                    notifyUploadCompleted: (id, url) => {
         
     | 
| 
      
 149 
     | 
    
         
            +
                        inlineImageUploadActionHandler({
         
     | 
| 
      
 150 
     | 
    
         
            +
                            type: AttachmentUploadActionType.Completed,
         
     | 
| 
      
 151 
     | 
    
         
            +
                            taskId,
         
     | 
| 
      
 152 
     | 
    
         
            +
                            id,
         
     | 
| 
      
 153 
     | 
    
         
            +
                            url,
         
     | 
| 
      
 154 
     | 
    
         
            +
                            messageId
         
     | 
| 
      
 155 
     | 
    
         
            +
                        });
         
     | 
| 
      
 156 
     | 
    
         
            +
                    },
         
     | 
| 
      
 157 
     | 
    
         
            +
                    notifyUploadFailed: (message) => {
         
     | 
| 
      
 158 
     | 
    
         
            +
                        inlineImageUploadActionHandler({ type: AttachmentUploadActionType.Failed, taskId, message, messageId });
         
     | 
| 
      
 159 
     | 
    
         
            +
                        // remove the failed upload task when error banner is auto dismissed after 10 seconds
         
     | 
| 
      
 160 
     | 
    
         
            +
                        // so the banner won't be shown again on UI re-rendering.
         
     | 
| 
      
 161 
     | 
    
         
            +
                        setTimeout(() => {
         
     | 
| 
      
 162 
     | 
    
         
            +
                            inlineImageUploadActionHandler({ type: AttachmentUploadActionType.Remove, id: taskId, messageId });
         
     | 
| 
      
 163 
     | 
    
         
            +
                        }, 10 * 1000);
         
     | 
| 
      
 164 
     | 
    
         
            +
                    }
         
     | 
| 
      
 165 
     | 
    
         
            +
                };
         
     | 
| 
      
 166 
     | 
    
         
            +
                return uploadTask;
         
     | 
| 
      
 167 
     | 
    
         
            +
            });
         
     | 
| 
      
 168 
     | 
    
         
            +
            /* @conditional-compile-remove(rich-text-editor-image-upload) */
         
     | 
| 
      
 169 
     | 
    
         
            +
            /**
         
     | 
| 
      
 170 
     | 
    
         
            +
             * @internal
         
     | 
| 
      
 171 
     | 
    
         
            +
             */
         
     | 
| 
      
 172 
     | 
    
         
            +
            export const onUploadInlineImageForEditBox = (image, fileName, messageId, adapter, handleEditBoxInlineImageUploadAction) => __awaiter(void 0, void 0, void 0, function* () {
         
     | 
| 
      
 173 
     | 
    
         
            +
                const uploadTask = yield generateUploadTask(image, fileName, messageId, handleEditBoxInlineImageUploadAction);
         
     | 
| 
      
 174 
     | 
    
         
            +
                if (!uploadTask) {
         
     | 
| 
      
 175 
     | 
    
         
            +
                    return;
         
     | 
| 
      
 176 
     | 
    
         
            +
                }
         
     | 
| 
      
 177 
     | 
    
         
            +
                handleEditBoxInlineImageUploadAction({
         
     | 
| 
      
 178 
     | 
    
         
            +
                    type: AttachmentUploadActionType.Set,
         
     | 
| 
      
 179 
     | 
    
         
            +
                    newUploads: [uploadTask],
         
     | 
| 
      
 180 
     | 
    
         
            +
                    messageId
         
     | 
| 
      
 181 
     | 
    
         
            +
                });
         
     | 
| 
      
 182 
     | 
    
         
            +
                inlineImageUploadHandler([uploadTask], adapter);
         
     | 
| 
      
 183 
     | 
    
         
            +
            });
         
     | 
| 
      
 184 
     | 
    
         
            +
            /* @conditional-compile-remove(rich-text-editor-image-upload) */
         
     | 
| 
      
 185 
     | 
    
         
            +
            /**
         
     | 
| 
      
 186 
     | 
    
         
            +
             * @internal
         
     | 
| 
      
 187 
     | 
    
         
            +
             */
         
     | 
| 
      
 188 
     | 
    
         
            +
            export const onUploadInlineImageForSendBox = (image, fileName, adapter, handleSendBoxInlineImageUploadAction) => __awaiter(void 0, void 0, void 0, function* () {
         
     | 
| 
      
 189 
     | 
    
         
            +
                const uploadTask = yield generateUploadTask(image, fileName, SEND_BOX_UPLOADS_KEY_VALUE, handleSendBoxInlineImageUploadAction);
         
     | 
| 
      
 190 
     | 
    
         
            +
                if (!uploadTask) {
         
     | 
| 
      
 191 
     | 
    
         
            +
                    return;
         
     | 
| 
      
 192 
     | 
    
         
            +
                }
         
     | 
| 
      
 193 
     | 
    
         
            +
                handleSendBoxInlineImageUploadAction({
         
     | 
| 
      
 194 
     | 
    
         
            +
                    type: AttachmentUploadActionType.Set,
         
     | 
| 
      
 195 
     | 
    
         
            +
                    newUploads: [uploadTask],
         
     | 
| 
      
 196 
     | 
    
         
            +
                    messageId: SEND_BOX_UPLOADS_KEY_VALUE
         
     | 
| 
      
 197 
     | 
    
         
            +
                });
         
     | 
| 
      
 198 
     | 
    
         
            +
                inlineImageUploadHandler([uploadTask], adapter);
         
     | 
| 
      
 199 
     | 
    
         
            +
            });
         
     | 
| 
      
 200 
     | 
    
         
            +
            /* @conditional-compile-remove(rich-text-editor-image-upload) */
         
     | 
| 
      
 201 
     | 
    
         
            +
            /**
         
     | 
| 
      
 202 
     | 
    
         
            +
             * @internal
         
     | 
| 
      
 203 
     | 
    
         
            +
             */
         
     | 
| 
      
 204 
     | 
    
         
            +
            export const cancelInlineImageUpload = (imageId, imageUpload, messageId, inlineImageUploadActionHandler, adapter) => {
         
     | 
| 
      
 205 
     | 
    
         
            +
                if (!imageUpload || !(imageUpload === null || imageUpload === void 0 ? void 0 : imageUpload.metadata.id)) {
         
     | 
| 
      
 206 
     | 
    
         
            +
                    return;
         
     | 
| 
      
 207 
     | 
    
         
            +
                }
         
     | 
| 
      
 208 
     | 
    
         
            +
                inlineImageUploadActionHandler({
         
     | 
| 
      
 209 
     | 
    
         
            +
                    type: AttachmentUploadActionType.Remove,
         
     | 
| 
      
 210 
     | 
    
         
            +
                    id: imageUpload === null || imageUpload === void 0 ? void 0 : imageUpload.metadata.id,
         
     | 
| 
      
 211 
     | 
    
         
            +
                    messageId
         
     | 
| 
      
 212 
     | 
    
         
            +
                });
         
     | 
| 
      
 213 
     | 
    
         
            +
                // TODO: remove local blob
         
     | 
| 
      
 214 
     | 
    
         
            +
                if ((imageUpload === null || imageUpload === void 0 ? void 0 : imageUpload.metadata.progress) === 1) {
         
     | 
| 
      
 215 
     | 
    
         
            +
                    try {
         
     | 
| 
      
 216 
     | 
    
         
            +
                        adapter.deleteImage(imageId);
         
     | 
| 
      
 217 
     | 
    
         
            +
                    }
         
     | 
| 
      
 218 
     | 
    
         
            +
                    catch (error) {
         
     | 
| 
      
 219 
     | 
    
         
            +
                        console.error(error);
         
     | 
| 
      
 220 
     | 
    
         
            +
                    }
         
     | 
| 
      
 221 
     | 
    
         
            +
                }
         
     | 
| 
      
 222 
     | 
    
         
            +
            };
         
     | 
| 
      
 223 
     | 
    
         
            +
            /* @conditional-compile-remove(rich-text-editor-image-upload) */
         
     | 
| 
      
 224 
     | 
    
         
            +
            /**
         
     | 
| 
      
 225 
     | 
    
         
            +
             * @internal
         
     | 
| 
      
 226 
     | 
    
         
            +
             */
         
     | 
| 
      
 227 
     | 
    
         
            +
            export const onCancelInlineImageUploadHandlerForEditBox = (imageId, messageId, editBoxInlineImageUploads, adapter, handleEditBoxInlineImageUploadAction) => {
         
     | 
| 
      
 228 
     | 
    
         
            +
                if (!editBoxInlineImageUploads) {
         
     | 
| 
      
 229 
     | 
    
         
            +
                    return;
         
     | 
| 
      
 230 
     | 
    
         
            +
                }
         
     | 
| 
      
 231 
     | 
    
         
            +
                const imageUpload = editBoxInlineImageUploads[messageId].find((upload) => upload.metadata.id === imageId);
         
     | 
| 
      
 232 
     | 
    
         
            +
                cancelInlineImageUpload(imageId, imageUpload, messageId, handleEditBoxInlineImageUploadAction, adapter);
         
     | 
| 
      
 233 
     | 
    
         
            +
            };
         
     | 
| 
      
 234 
     | 
    
         
            +
            /* @conditional-compile-remove(rich-text-editor-image-upload) */
         
     | 
| 
      
 235 
     | 
    
         
            +
            /**
         
     | 
| 
      
 236 
     | 
    
         
            +
             * @internal
         
     | 
| 
      
 237 
     | 
    
         
            +
             */
         
     | 
| 
      
 238 
     | 
    
         
            +
            export const onCancelInlineImageUploadHandlerForSendBox = (imageId, sendBoxInlineImageUploads, adapter, handleSendBoxInlineImageUploadAction) => {
         
     | 
| 
      
 239 
     | 
    
         
            +
                if (!sendBoxInlineImageUploads) {
         
     | 
| 
      
 240 
     | 
    
         
            +
                    return;
         
     | 
| 
      
 241 
     | 
    
         
            +
                }
         
     | 
| 
      
 242 
     | 
    
         
            +
                const imageUpload = sendBoxInlineImageUploads[SEND_BOX_UPLOADS_KEY_VALUE].find((upload) => upload.metadata.id === imageId);
         
     | 
| 
      
 243 
     | 
    
         
            +
                cancelInlineImageUpload(imageId, imageUpload, SEND_BOX_UPLOADS_KEY_VALUE, handleSendBoxInlineImageUploadAction, adapter);
         
     | 
| 
      
 244 
     | 
    
         
            +
            };
         
     | 
| 
       53 
245 
     | 
    
         
             
            //# sourceMappingURL=ImageUploadUtils.js.map
         
     |