@azure/communication-react 1.11.1-alpha-202401050013 → 1.11.1-alpha-202401090013

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/dist/communication-react.d.ts +38 -4
  2. package/dist/dist-cjs/communication-react/index.js +157 -34
  3. package/dist/dist-cjs/communication-react/index.js.map +1 -1
  4. package/dist/dist-esm/acs-ui-common/src/telemetryVersion.js +1 -1
  5. package/dist/dist-esm/acs-ui-common/src/telemetryVersion.js.map +1 -1
  6. package/dist/dist-esm/react-components/src/components/MentionPopover.js +14 -13
  7. package/dist/dist-esm/react-components/src/components/MentionPopover.js.map +1 -1
  8. package/dist/dist-esm/react-components/src/components/RTE/RTESendBox.d.ts +16 -0
  9. package/dist/dist-esm/react-components/src/components/RTE/RTESendBox.js +13 -0
  10. package/dist/dist-esm/react-components/src/components/RTE/RTESendBox.js.map +1 -0
  11. package/dist/dist-esm/react-components/src/components/TextFieldWithMention/TextFieldWithMention.js +11 -0
  12. package/dist/dist-esm/react-components/src/components/TextFieldWithMention/TextFieldWithMention.js.map +1 -1
  13. package/dist/dist-esm/react-components/src/components/index.d.ts +2 -0
  14. package/dist/dist-esm/react-components/src/components/index.js +2 -0
  15. package/dist/dist-esm/react-components/src/components/index.js.map +1 -1
  16. package/dist/dist-esm/react-components/src/components/styles/MentionPopover.style.d.ts +1 -1
  17. package/dist/dist-esm/react-components/src/components/styles/MentionPopover.style.js +6 -5
  18. package/dist/dist-esm/react-components/src/components/styles/MentionPopover.style.js.map +1 -1
  19. package/dist/dist-esm/react-components/src/components/styles/Stack.style.d.ts +5 -0
  20. package/dist/dist-esm/react-components/src/components/styles/Stack.style.js +32 -0
  21. package/dist/dist-esm/react-components/src/components/styles/Stack.style.js.map +1 -0
  22. package/dist/dist-esm/react-composites/src/composites/CallComposite/Strings.d.ts +1 -1
  23. package/dist/dist-esm/react-composites/src/composites/CallComposite/Strings.js.map +1 -1
  24. package/dist/dist-esm/react-composites/src/composites/CallComposite/adapter/AzureCommunicationCallAdapter.js +10 -1
  25. package/dist/dist-esm/react-composites/src/composites/CallComposite/adapter/AzureCommunicationCallAdapter.js.map +1 -1
  26. package/dist/dist-esm/react-composites/src/composites/CallComposite/adapter/CallAdapter.d.ts +4 -3
  27. package/dist/dist-esm/react-composites/src/composites/CallComposite/adapter/CallAdapter.js.map +1 -1
  28. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/LocalDeviceSettings.js +15 -5
  29. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/LocalDeviceSettings.js.map +1 -1
  30. package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/ConfigurationPage.js +9 -1
  31. package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/ConfigurationPage.js.map +1 -1
  32. package/dist/dist-esm/react-composites/src/composites/CallComposite/styles/CallConfiguration.styles.d.ts +1 -1
  33. package/dist/dist-esm/react-composites/src/composites/CallComposite/styles/CallConfiguration.styles.js +2 -2
  34. package/dist/dist-esm/react-composites/src/composites/CallComposite/styles/CallConfiguration.styles.js.map +1 -1
  35. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/ChatButton/useUnreadMessagesTracker.js +24 -5
  36. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/ChatButton/useUnreadMessagesTracker.js.map +1 -1
  37. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/AzureCommunicationCallWithChatAdapter.d.ts +5 -1
  38. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/AzureCommunicationCallWithChatAdapter.js +12 -0
  39. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/AzureCommunicationCallWithChatAdapter.js.map +1 -1
  40. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/CallWithChatAdapter.d.ts +6 -2
  41. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/CallWithChatAdapter.js.map +1 -1
  42. package/dist/dist-esm/react-composites/src/composites/ChatComposite/adapter/AzureCommunicationChatAdapter.d.ts +7 -1
  43. package/dist/dist-esm/react-composites/src/composites/ChatComposite/adapter/AzureCommunicationChatAdapter.js +30 -2
  44. package/dist/dist-esm/react-composites/src/composites/ChatComposite/adapter/AzureCommunicationChatAdapter.js.map +1 -1
  45. package/dist/dist-esm/react-composites/src/composites/ChatComposite/adapter/ChatAdapter.d.ts +28 -0
  46. package/dist/dist-esm/react-composites/src/composites/ChatComposite/adapter/ChatAdapter.js.map +1 -1
  47. package/dist/dist-esm/react-composites/src/composites/ChatComposite/index.d.ts +1 -1
  48. package/dist/dist-esm/react-composites/src/composites/ChatComposite/index.js.map +1 -1
  49. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"CallConfiguration.styles.js","sourceRoot":"","sources":["../../../../../../../../react-composites/src/composites/CallComposite/styles/CallConfiguration.styles.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport {\n IStackItemStyles,\n IStackStyles,\n IStackTokens,\n IStyle,\n mergeStyles,\n IButtonStyles,\n Theme,\n IPanelStyles,\n IFocusTrapZoneProps,\n IImageStyles,\n AnimationStyles,\n ITheme\n} from '@fluentui/react';\nimport { _pxToRem } from '@internal/acs-ui-common';\n\n/** @private */\nexport const CONFIGURATION_PAGE_SECTION_MIN_WIDTH_REM = 11;\n/** @private */\nexport const CONFIGURATION_PAGE_SECTION_MAX_WIDTH_REM = 20.625;\n/** @private */\nexport const CONFIGURATION_PAGE_SECTION_HEIGHT_REM = 13.625;\n\nconst LOGO_HEIGHT_REM = 3;\n\n/**\n * @private\n */\nexport const configurationStackTokensDesktop: IStackTokens = {\n childrenGap: '1.5rem'\n};\n\n/**\n * @private\n */\nexport const configurationStackTokensMobile: IStackTokens = {\n childrenGap: '0.5rem'\n};\n\n/**\n * @private\n */\nexport const deviceConfigurationStackTokens: IStackTokens = {\n childrenGap: '1.5rem'\n};\n\n/** @private */\nexport const configurationContainerStyle = (desktop: boolean, backgroundImageUrl?: string): IStackStyles => ({\n root: {\n height: '100%',\n width: '100%',\n padding: desktop ? '2rem 1rem 2rem 1rem' : '1rem 1rem 2rem 1rem',\n minWidth: desktop\n ? '25rem' // sum of min-width from children + ChildrenGap * (nb of children - 1) + padding * 2 = (11 + 11) + (2 * 1) + 0.5 * 2\n : '16rem', // from LocalPreview: ControlBar width + 0.5 * 2 for spacing + padding * 2 = 14 + 0.5 * 2 + 0.5 * 2\n minHeight: desktop\n ? '22rem' // max height of SelectionContainer + padding * 2 = 21 + 0.5 * 2\n : '13rem',\n '::before': !backgroundImageUrl\n ? undefined\n : {\n content: '\"\"',\n position: 'absolute',\n top: 0,\n left: 0,\n zIndex: 0,\n width: '100%',\n height: '100%',\n backgroundImage: `url(${backgroundImageUrl})`,\n backgroundSize: 'cover',\n backgroundPosition: 'center',\n ...AnimationStyles.fadeIn500\n }\n }\n});\n\n/**\n * @private\n */\nexport const configurationSectionStyle: IStackStyles = {\n root: {\n width: '100%',\n minWidth: `${CONFIGURATION_PAGE_SECTION_MIN_WIDTH_REM}rem`,\n maxWidth: `${CONFIGURATION_PAGE_SECTION_MAX_WIDTH_REM}rem`\n }\n};\n\n/**\n * @private\n */\nexport const selectionContainerStyle = (theme: ITheme): string =>\n mergeStyles({\n width: '100%',\n height: `${CONFIGURATION_PAGE_SECTION_HEIGHT_REM}rem`,\n padding: '1rem',\n borderRadius: theme.effects.roundedCorner6,\n border: `0.0625rem solid ${theme.palette.neutralLight}`,\n overflow: 'hidden', // do not let child background overflow the curved corners\n boxShadow: theme.effects.elevation4,\n // Style the background of the container to have partial transparency.\n // Using `before:` pseudo-element to avoid having to wrap the content in an extra div.\n // Ideally rgba would be used but we cannot garauntee the format of theme.palette.white\n // to parse it correctly.\n position: 'relative',\n ':before': {\n content: '\"\"',\n position: 'absolute',\n top: 0,\n bottom: 0,\n left: 0,\n right: 0,\n zIndex: 0,\n background: theme.palette.white,\n opacity: 0.9\n }\n });\n\n/**\n * @private\n */\nexport const titleContainerStyleDesktop = (theme: ITheme): string =>\n mergeStyles(\n {\n fontSize: '1.2rem',\n lineHeight: '1rem',\n fontWeight: 600\n },\n configurationPageTextDecoration(theme)\n );\n\n/**\n * @private\n */\nexport const titleContainerStyleMobile = (theme: ITheme): string =>\n mergeStyles(\n {\n fontSize: '1.0625rem',\n lineHeight: '1.375rem',\n fontWeight: 600,\n textAlign: 'center'\n },\n configurationPageTextDecoration(theme)\n );\n\n/**\n * Ensure configuration page text is legible on top of a background image.\n * @private\n */\nconst configurationPageTextDecoration = (theme: ITheme): IStyle => {\n return {\n textShadow: `0px 0px 8px ${theme.palette.whiteTranslucent40}`,\n fill: theme.semanticColors.bodyText,\n stroke: theme.palette.whiteTranslucent40,\n paintOrder: 'stroke fill',\n strokeWidth: _pxToRem(1.5),\n text: {\n letterSpacing: '-0.02rem' // cope with extra width due to stroke width\n },\n '@media (forced-colors: active)': {\n forcedColorAdjust: 'auto',\n fill: theme.palette.neutralQuaternaryAlt,\n textShadow: 'none',\n stroke: 'none'\n }\n };\n};\n\n/**\n * @private\n */\nexport const callDetailsContainerStyles: IStackStyles = {\n root: {\n textAlign: 'center',\n maxWidth: _pxToRem(700),\n alignSelf: 'center'\n }\n};\n\nconst callDetailsStyle = (theme: ITheme): IStyle => ({\n fontSize: '0.9375',\n lineHeight: '1.25rem',\n textShadow: `0px 0px 8px ${theme.palette.whiteTranslucent40}`,\n marginTop: '-0.33rem' // compensate for extra padding around the CallTitle that avoids the SVG shadowing being cut off\n});\n\n/**\n * @private\n */\nexport const callDetailsStyleDesktop = (theme: ITheme): string => mergeStyles(callDetailsStyle(theme));\n\n/**\n * @private\n */\nexport const callDetailsStyleMobile = (theme: ITheme): string =>\n mergeStyles(callDetailsStyle(theme), {\n marginBottom: '0.5rem',\n textAlign: 'center'\n });\n\n/**\n * @private\n */\nexport const startCallButtonContainerStyleDesktop: IStackStyles = {\n root: {\n paddingTop: '1.125rem'\n }\n};\n\n/**\n * @private\n */\nexport const startCallButtonContainerStyleMobile: IStackStyles = {\n root: {\n textAlign: 'center'\n }\n};\n\n/**\n * @private\n */\nexport const startCallButtonStyleMobile = mergeStyles({\n width: '100%',\n maxWidth: 'unset',\n borderRadius: '0.25rem'\n});\n\n/**\n * @private\n */\nexport const startCallButtonStyleDesktop = mergeStyles({\n borderRadius: '0.25rem',\n width: 'auto',\n height: '2.25rem'\n});\n\n/** @private */\nexport const cameraAndVideoEffectsContainerStyleDesktop: IStackItemStyles = {\n root: {\n alignItems: 'center'\n }\n};\n\n/**\n * @private\n */\nexport const effectsButtonStyles = (theme: Theme): IButtonStyles => {\n return {\n root: {\n background: 'transparent',\n border: 'none',\n color: theme.palette.themePrimary,\n // Top and bottom padding needs to be 5px to match the label padding\n padding: '5px 0.25rem',\n ':hover, :focus': {\n color: theme.palette.themePrimary\n },\n svg: {\n height: '1rem',\n width: '1rem'\n }\n },\n rootChecked: {\n color: theme.palette.themePrimary\n },\n rootHovered: {\n color: theme.palette.themePrimary\n },\n rootPressed: {\n color: theme.palette.themePrimary\n },\n rootFocused: {\n color: theme.palette.themePrimary\n }\n };\n};\n\n/** @private */\nexport const fillWidth = mergeStyles({\n width: '100%',\n position: 'relative'\n});\n\n/** @private */\nexport const configurationCenteredContent = (fillsHeight: boolean, hasLogo?: boolean): string =>\n mergeStyles({\n width: '100%',\n position: 'relative',\n\n // If the content does not fill the height, center it vertically.\n // We do not include the logo in the centering per design. This allows it to fade\n // in and not shift the content. To exclude the logo, we subtract the logo height\n // and margin from the actual height. This allows the flex box's natural centering\n // to appropriately center the content.\n height: `calc(100% - ${!fillsHeight && hasLogo ? `${LOGO_HEIGHT_REM}rem` : '0rem'})`\n });\n\n/** @private */\nexport const panelStyles: Partial<IPanelStyles> = {\n content: {\n display: 'flex',\n flexBasis: '100%',\n paddingLeft: '0rem', // remove default padding\n paddingRight: '0rem' // remove default padding\n },\n commands: {\n paddingTop: '0rem' // remove default padding\n },\n scrollableContent: {\n display: 'flex',\n flexDirection: 'column',\n height: '100%'\n }\n};\n\n/** @private */\nexport const panelFocusProps: IFocusTrapZoneProps = {\n forceFocusInsideTrap: false\n};\n\n/**\n * @private\n */\nexport const logoStyles = (shape: undefined | 'unset' | 'circle'): IImageStyles => ({\n root: {\n overflow: 'initial', // prevent the image being clipped\n display: 'flex',\n justifyContent: 'center'\n },\n image: {\n height: `${LOGO_HEIGHT_REM}rem`,\n borderRadius: shape === 'circle' ? '100%' : undefined,\n aspectRatio: shape === 'circle' ? '1 / 1' : undefined,\n objectFit: shape === 'circle' ? 'cover' : undefined\n }\n});\n"]}
1
+ {"version":3,"file":"CallConfiguration.styles.js","sourceRoot":"","sources":["../../../../../../../../react-composites/src/composites/CallComposite/styles/CallConfiguration.styles.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport {\n IStackItemStyles,\n IStackStyles,\n IStackTokens,\n IStyle,\n mergeStyles,\n IButtonStyles,\n Theme,\n IPanelStyles,\n IFocusTrapZoneProps,\n IImageStyles,\n AnimationStyles,\n ITheme\n} from '@fluentui/react';\nimport { _pxToRem } from '@internal/acs-ui-common';\n\n/** @private */\nexport const CONFIGURATION_PAGE_SECTION_MIN_WIDTH_REM = 11;\n/** @private */\nexport const CONFIGURATION_PAGE_SECTION_MAX_WIDTH_REM = 20.625;\n/** @private */\nexport const CONFIGURATION_PAGE_SECTION_HEIGHT_REM = 13.625;\n\nconst LOGO_HEIGHT_REM = 3;\n\n/**\n * @private\n */\nexport const configurationStackTokensDesktop: IStackTokens = {\n childrenGap: '1.5rem'\n};\n\n/**\n * @private\n */\nexport const configurationStackTokensMobile: IStackTokens = {\n childrenGap: '0.5rem'\n};\n\n/**\n * @private\n */\nexport const deviceConfigurationStackTokens: IStackTokens = {\n childrenGap: '1.5rem'\n};\n\n/** @private */\nexport const configurationContainerStyle = (desktop: boolean, backgroundImageUrl?: string): IStackStyles => ({\n root: {\n height: '100%',\n width: '100%',\n padding: desktop ? '2rem 1rem 2rem 1rem' : '1rem 1rem 2rem 1rem',\n minWidth: desktop\n ? '25rem' // sum of min-width from children + ChildrenGap * (nb of children - 1) + padding * 2 = (11 + 11) + (2 * 1) + 0.5 * 2\n : '16rem', // from LocalPreview: ControlBar width + 0.5 * 2 for spacing + padding * 2 = 14 + 0.5 * 2 + 0.5 * 2\n minHeight: desktop\n ? '22rem' // max height of SelectionContainer + padding * 2 = 21 + 0.5 * 2\n : '13rem',\n '::before': !backgroundImageUrl\n ? undefined\n : {\n content: '\"\"',\n position: 'absolute',\n top: 0,\n left: 0,\n zIndex: 0,\n width: '100%',\n height: '100%',\n backgroundImage: `url(${backgroundImageUrl})`,\n backgroundSize: 'cover',\n backgroundPosition: 'center',\n ...AnimationStyles.fadeIn500\n }\n }\n});\n\n/**\n * @private\n */\nexport const configurationSectionStyle: IStackStyles = {\n root: {\n width: '100%',\n minWidth: `${CONFIGURATION_PAGE_SECTION_MIN_WIDTH_REM}rem`,\n maxWidth: `${CONFIGURATION_PAGE_SECTION_MAX_WIDTH_REM}rem`\n }\n};\n\n/**\n * @private\n */\nexport const selectionContainerStyle = (theme: ITheme, noSpeakerDropdownShown?: boolean): string =>\n mergeStyles({\n width: '100%',\n height: noSpeakerDropdownShown ? 'auto' : `${CONFIGURATION_PAGE_SECTION_HEIGHT_REM}rem`,\n padding: '1rem',\n borderRadius: theme.effects.roundedCorner6,\n border: `0.0625rem solid ${theme.palette.neutralLight}`,\n overflow: 'hidden', // do not let child background overflow the curved corners\n boxShadow: theme.effects.elevation4,\n // Style the background of the container to have partial transparency.\n // Using `before:` pseudo-element to avoid having to wrap the content in an extra div.\n // Ideally rgba would be used but we cannot garauntee the format of theme.palette.white\n // to parse it correctly.\n position: 'relative',\n ':before': {\n content: '\"\"',\n position: 'absolute',\n top: 0,\n bottom: 0,\n left: 0,\n right: 0,\n zIndex: 0,\n background: theme.palette.white,\n opacity: 0.9\n }\n });\n\n/**\n * @private\n */\nexport const titleContainerStyleDesktop = (theme: ITheme): string =>\n mergeStyles(\n {\n fontSize: '1.2rem',\n lineHeight: '1rem',\n fontWeight: 600\n },\n configurationPageTextDecoration(theme)\n );\n\n/**\n * @private\n */\nexport const titleContainerStyleMobile = (theme: ITheme): string =>\n mergeStyles(\n {\n fontSize: '1.0625rem',\n lineHeight: '1.375rem',\n fontWeight: 600,\n textAlign: 'center'\n },\n configurationPageTextDecoration(theme)\n );\n\n/**\n * Ensure configuration page text is legible on top of a background image.\n * @private\n */\nconst configurationPageTextDecoration = (theme: ITheme): IStyle => {\n return {\n textShadow: `0px 0px 8px ${theme.palette.whiteTranslucent40}`,\n fill: theme.semanticColors.bodyText,\n stroke: theme.palette.whiteTranslucent40,\n paintOrder: 'stroke fill',\n strokeWidth: _pxToRem(1.5),\n text: {\n letterSpacing: '-0.02rem' // cope with extra width due to stroke width\n },\n '@media (forced-colors: active)': {\n forcedColorAdjust: 'auto',\n fill: theme.palette.neutralQuaternaryAlt,\n textShadow: 'none',\n stroke: 'none'\n }\n };\n};\n\n/**\n * @private\n */\nexport const callDetailsContainerStyles: IStackStyles = {\n root: {\n textAlign: 'center',\n maxWidth: _pxToRem(700),\n alignSelf: 'center'\n }\n};\n\nconst callDetailsStyle = (theme: ITheme): IStyle => ({\n fontSize: '0.9375',\n lineHeight: '1.25rem',\n textShadow: `0px 0px 8px ${theme.palette.whiteTranslucent40}`,\n marginTop: '-0.33rem' // compensate for extra padding around the CallTitle that avoids the SVG shadowing being cut off\n});\n\n/**\n * @private\n */\nexport const callDetailsStyleDesktop = (theme: ITheme): string => mergeStyles(callDetailsStyle(theme));\n\n/**\n * @private\n */\nexport const callDetailsStyleMobile = (theme: ITheme): string =>\n mergeStyles(callDetailsStyle(theme), {\n marginBottom: '0.5rem',\n textAlign: 'center'\n });\n\n/**\n * @private\n */\nexport const startCallButtonContainerStyleDesktop: IStackStyles = {\n root: {\n paddingTop: '1.125rem'\n }\n};\n\n/**\n * @private\n */\nexport const startCallButtonContainerStyleMobile: IStackStyles = {\n root: {\n textAlign: 'center'\n }\n};\n\n/**\n * @private\n */\nexport const startCallButtonStyleMobile = mergeStyles({\n width: '100%',\n maxWidth: 'unset',\n borderRadius: '0.25rem'\n});\n\n/**\n * @private\n */\nexport const startCallButtonStyleDesktop = mergeStyles({\n borderRadius: '0.25rem',\n width: 'auto',\n height: '2.25rem'\n});\n\n/** @private */\nexport const cameraAndVideoEffectsContainerStyleDesktop: IStackItemStyles = {\n root: {\n alignItems: 'center'\n }\n};\n\n/**\n * @private\n */\nexport const effectsButtonStyles = (theme: Theme): IButtonStyles => {\n return {\n root: {\n background: 'transparent',\n border: 'none',\n color: theme.palette.themePrimary,\n // Top and bottom padding needs to be 5px to match the label padding\n padding: '5px 0.25rem',\n ':hover, :focus': {\n color: theme.palette.themePrimary\n },\n svg: {\n height: '1rem',\n width: '1rem'\n }\n },\n rootChecked: {\n color: theme.palette.themePrimary\n },\n rootHovered: {\n color: theme.palette.themePrimary\n },\n rootPressed: {\n color: theme.palette.themePrimary\n },\n rootFocused: {\n color: theme.palette.themePrimary\n }\n };\n};\n\n/** @private */\nexport const fillWidth = mergeStyles({\n width: '100%',\n position: 'relative'\n});\n\n/** @private */\nexport const configurationCenteredContent = (fillsHeight: boolean, hasLogo?: boolean): string =>\n mergeStyles({\n width: '100%',\n position: 'relative',\n\n // If the content does not fill the height, center it vertically.\n // We do not include the logo in the centering per design. This allows it to fade\n // in and not shift the content. To exclude the logo, we subtract the logo height\n // and margin from the actual height. This allows the flex box's natural centering\n // to appropriately center the content.\n height: `calc(100% - ${!fillsHeight && hasLogo ? `${LOGO_HEIGHT_REM}rem` : '0rem'})`\n });\n\n/** @private */\nexport const panelStyles: Partial<IPanelStyles> = {\n content: {\n display: 'flex',\n flexBasis: '100%',\n paddingLeft: '0rem', // remove default padding\n paddingRight: '0rem' // remove default padding\n },\n commands: {\n paddingTop: '0rem' // remove default padding\n },\n scrollableContent: {\n display: 'flex',\n flexDirection: 'column',\n height: '100%'\n }\n};\n\n/** @private */\nexport const panelFocusProps: IFocusTrapZoneProps = {\n forceFocusInsideTrap: false\n};\n\n/**\n * @private\n */\nexport const logoStyles = (shape: undefined | 'unset' | 'circle'): IImageStyles => ({\n root: {\n overflow: 'initial', // prevent the image being clipped\n display: 'flex',\n justifyContent: 'center'\n },\n image: {\n height: `${LOGO_HEIGHT_REM}rem`,\n borderRadius: shape === 'circle' ? '100%' : undefined,\n aspectRatio: shape === 'circle' ? '1 / 1' : undefined,\n objectFit: shape === 'circle' ? 'cover' : undefined\n }\n});\n"]}
@@ -6,23 +6,42 @@ import { useEffect, useState } from 'react';
6
6
  * @private
7
7
  */
8
8
  export const useUnreadMessagesTracker = (chatAdapter, isChatPaneVisible) => {
9
- const [unreadChatMessagesCount, setUnreadChatMessagesCount] = useState(0);
9
+ // Store messageIds of unread messages
10
+ const [unreadChatMessages, setUnreadChatMessages] = useState(new Set());
10
11
  useEffect(() => {
12
+ // Clear unread messages when chat pane is opened
11
13
  if (isChatPaneVisible) {
12
- setUnreadChatMessagesCount(0);
14
+ setUnreadChatMessages(new Set());
13
15
  return;
14
16
  }
17
+ // Increment unread messages when a new message is received and the chat pane is closed
15
18
  const incrementUnreadChatMessagesCount = (event) => {
16
19
  if (!isChatPaneVisible && validNewChatMessage(event.message)) {
17
- setUnreadChatMessagesCount(unreadChatMessagesCount + 1);
20
+ setUnreadChatMessages((prevUnreadChatMessages) => {
21
+ const newUnreadChatMessages = new Set(prevUnreadChatMessages);
22
+ newUnreadChatMessages.add(event.message.id);
23
+ return newUnreadChatMessages;
24
+ });
25
+ }
26
+ };
27
+ // Decrement unread messages when a message is deleted and the chat pane is closed
28
+ const decrementUnreadChatMessagesCount = (event) => {
29
+ if (!isChatPaneVisible) {
30
+ setUnreadChatMessages((prevUnreadChatMessages) => {
31
+ const newUnreadChatMessages = new Set(prevUnreadChatMessages);
32
+ newUnreadChatMessages.delete(event.message.id);
33
+ return newUnreadChatMessages;
34
+ });
18
35
  }
19
36
  };
20
37
  chatAdapter.on('messageReceived', incrementUnreadChatMessagesCount);
38
+ chatAdapter.on('messageDeleted', decrementUnreadChatMessagesCount);
21
39
  return () => {
22
40
  chatAdapter.off('messageReceived', incrementUnreadChatMessagesCount);
41
+ chatAdapter.off('messageDeleted', decrementUnreadChatMessagesCount);
23
42
  };
24
- }, [chatAdapter, setUnreadChatMessagesCount, isChatPaneVisible, unreadChatMessagesCount]);
25
- return unreadChatMessagesCount;
43
+ }, [chatAdapter, setUnreadChatMessages, isChatPaneVisible]);
44
+ return unreadChatMessages.size;
26
45
  };
27
46
  /**
28
47
  * Helper function to determine if the message in the event is a valid one from a user.
@@ -1 +1 @@
1
- {"version":3,"file":"useUnreadMessagesTracker.js","sourceRoot":"","sources":["../../../../../../../../react-composites/src/composites/CallWithChatComposite/ChatButton/useUnreadMessagesTracker.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAI5C;;;GAGG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,WAAwB,EAAE,iBAA0B,EAAU,EAAE;IACvG,MAAM,CAAC,uBAAuB,EAAE,0BAA0B,CAAC,GAAG,QAAQ,CAAS,CAAC,CAAC,CAAC;IAElF,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,iBAAiB,EAAE,CAAC;YACtB,0BAA0B,CAAC,CAAC,CAAC,CAAC;YAC9B,OAAO;QACT,CAAC;QACD,MAAM,gCAAgC,GAAG,CAAC,KAA+B,EAAQ,EAAE;YACjF,IAAI,CAAC,iBAAiB,IAAI,mBAAmB,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC7D,0BAA0B,CAAC,uBAAuB,GAAG,CAAC,CAAC,CAAC;YAC1D,CAAC;QACH,CAAC,CAAC;QACF,WAAW,CAAC,EAAE,CAAC,iBAAiB,EAAE,gCAAgC,CAAC,CAAC;QAEpE,OAAO,GAAG,EAAE;YACV,WAAW,CAAC,GAAG,CAAC,iBAAiB,EAAE,gCAAgC,CAAC,CAAC;QACvE,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,WAAW,EAAE,0BAA0B,EAAE,iBAAiB,EAAE,uBAAuB,CAAC,CAAC,CAAC;IAE1F,OAAO,uBAAuB,CAAC;AACjC,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,mBAAmB,GAAG,CAAC,OAAO,EAAW,EAAE,CAC/C,CAAC,CAAC,OAAO,CAAC,iBAAiB,IAAI,CAAC,OAAO,CAAC,IAAI,KAAK,MAAM,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { useEffect, useState } from 'react';\nimport { ChatAdapter } from '../../ChatComposite/adapter/ChatAdapter';\nimport { ChatMessage } from '@azure/communication-chat';\n\n/**\n * Used by the CallWithChatComposite to track unread messages for showing as a badge on the Chat Button.\n * @private\n */\nexport const useUnreadMessagesTracker = (chatAdapter: ChatAdapter, isChatPaneVisible: boolean): number => {\n const [unreadChatMessagesCount, setUnreadChatMessagesCount] = useState<number>(0);\n\n useEffect(() => {\n if (isChatPaneVisible) {\n setUnreadChatMessagesCount(0);\n return;\n }\n const incrementUnreadChatMessagesCount = (event: { message: ChatMessage }): void => {\n if (!isChatPaneVisible && validNewChatMessage(event.message)) {\n setUnreadChatMessagesCount(unreadChatMessagesCount + 1);\n }\n };\n chatAdapter.on('messageReceived', incrementUnreadChatMessagesCount);\n\n return () => {\n chatAdapter.off('messageReceived', incrementUnreadChatMessagesCount);\n };\n }, [chatAdapter, setUnreadChatMessagesCount, isChatPaneVisible, unreadChatMessagesCount]);\n\n return unreadChatMessagesCount;\n};\n\n/**\n * Helper function to determine if the message in the event is a valid one from a user.\n * Display name is used since system messages will not have one.\n */\nconst validNewChatMessage = (message): boolean =>\n !!message.senderDisplayName && (message.type === 'text' || message.type === 'html');\n"]}
1
+ {"version":3,"file":"useUnreadMessagesTracker.js","sourceRoot":"","sources":["../../../../../../../../react-composites/src/composites/CallWithChatComposite/ChatButton/useUnreadMessagesTracker.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAI5C;;;GAGG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,WAAwB,EAAE,iBAA0B,EAAU,EAAE;IACvG,sCAAsC;IACtC,MAAM,CAAC,kBAAkB,EAAE,qBAAqB,CAAC,GAAG,QAAQ,CAAc,IAAI,GAAG,EAAE,CAAC,CAAC;IAErF,SAAS,CAAC,GAAG,EAAE;QACb,iDAAiD;QACjD,IAAI,iBAAiB,EAAE,CAAC;YACtB,qBAAqB,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;YACjC,OAAO;QACT,CAAC;QAED,uFAAuF;QACvF,MAAM,gCAAgC,GAAG,CAAC,KAA+B,EAAQ,EAAE;YACjF,IAAI,CAAC,iBAAiB,IAAI,mBAAmB,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC7D,qBAAqB,CAAC,CAAC,sBAAsB,EAAE,EAAE;oBAC/C,MAAM,qBAAqB,GAAG,IAAI,GAAG,CAAC,sBAAsB,CAAC,CAAC;oBAC9D,qBAAqB,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;oBAC5C,OAAO,qBAAqB,CAAC;gBAC/B,CAAC,CAAC,CAAC;YACL,CAAC;QACH,CAAC,CAAC;QAEF,kFAAkF;QAClF,MAAM,gCAAgC,GAAG,CAAC,KAA+B,EAAQ,EAAE;YACjF,IAAI,CAAC,iBAAiB,EAAE,CAAC;gBACvB,qBAAqB,CAAC,CAAC,sBAAsB,EAAE,EAAE;oBAC/C,MAAM,qBAAqB,GAAG,IAAI,GAAG,CAAC,sBAAsB,CAAC,CAAC;oBAC9D,qBAAqB,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;oBAC/C,OAAO,qBAAqB,CAAC;gBAC/B,CAAC,CAAC,CAAC;YACL,CAAC;QACH,CAAC,CAAC;QAEF,WAAW,CAAC,EAAE,CAAC,iBAAiB,EAAE,gCAAgC,CAAC,CAAC;QACpE,WAAW,CAAC,EAAE,CAAC,gBAAgB,EAAE,gCAAgC,CAAC,CAAC;QAEnE,OAAO,GAAG,EAAE;YACV,WAAW,CAAC,GAAG,CAAC,iBAAiB,EAAE,gCAAgC,CAAC,CAAC;YACrE,WAAW,CAAC,GAAG,CAAC,gBAAgB,EAAE,gCAAgC,CAAC,CAAC;QACtE,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,WAAW,EAAE,qBAAqB,EAAE,iBAAiB,CAAC,CAAC,CAAC;IAE5D,OAAO,kBAAkB,CAAC,IAAI,CAAC;AACjC,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,mBAAmB,GAAG,CAAC,OAAO,EAAW,EAAE,CAC/C,CAAC,CAAC,OAAO,CAAC,iBAAiB,IAAI,CAAC,OAAO,CAAC,IAAI,KAAK,MAAM,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { useEffect, useState } from 'react';\nimport { ChatAdapter } from '../../ChatComposite/adapter/ChatAdapter';\nimport { ChatMessage } from '@azure/communication-chat';\n\n/**\n * Used by the CallWithChatComposite to track unread messages for showing as a badge on the Chat Button.\n * @private\n */\nexport const useUnreadMessagesTracker = (chatAdapter: ChatAdapter, isChatPaneVisible: boolean): number => {\n // Store messageIds of unread messages\n const [unreadChatMessages, setUnreadChatMessages] = useState<Set<string>>(new Set());\n\n useEffect(() => {\n // Clear unread messages when chat pane is opened\n if (isChatPaneVisible) {\n setUnreadChatMessages(new Set());\n return;\n }\n\n // Increment unread messages when a new message is received and the chat pane is closed\n const incrementUnreadChatMessagesCount = (event: { message: ChatMessage }): void => {\n if (!isChatPaneVisible && validNewChatMessage(event.message)) {\n setUnreadChatMessages((prevUnreadChatMessages) => {\n const newUnreadChatMessages = new Set(prevUnreadChatMessages);\n newUnreadChatMessages.add(event.message.id);\n return newUnreadChatMessages;\n });\n }\n };\n\n // Decrement unread messages when a message is deleted and the chat pane is closed\n const decrementUnreadChatMessagesCount = (event: { message: ChatMessage }): void => {\n if (!isChatPaneVisible) {\n setUnreadChatMessages((prevUnreadChatMessages) => {\n const newUnreadChatMessages = new Set(prevUnreadChatMessages);\n newUnreadChatMessages.delete(event.message.id);\n return newUnreadChatMessages;\n });\n }\n };\n\n chatAdapter.on('messageReceived', incrementUnreadChatMessagesCount);\n chatAdapter.on('messageDeleted', decrementUnreadChatMessagesCount);\n\n return () => {\n chatAdapter.off('messageReceived', incrementUnreadChatMessagesCount);\n chatAdapter.off('messageDeleted', decrementUnreadChatMessagesCount);\n };\n }, [chatAdapter, setUnreadChatMessages, isChatPaneVisible]);\n\n return unreadChatMessages.size;\n};\n\n/**\n * Helper function to determine if the message in the event is a valid one from a user.\n * Display name is used since system messages will not have one.\n */\nconst validNewChatMessage = (message): boolean =>\n !!message.senderDisplayName && (message.type === 'text' || message.type === 'html');\n"]}
@@ -5,7 +5,7 @@ import { CreateVideoStreamViewResult, VideoStreamOptions } from "../../../../../
5
5
  import { AttachmentDownloadResult } from "../../../../../react-components/src";
6
6
  import { AttachmentMetadata } from "../../../../../react-components/src";
7
7
  import { ParticipantsJoinedListener, ParticipantsLeftListener, IsMutedChangedListener, CallIdChangedListener, IsLocalScreenSharingActiveChangedListener, DisplayNameChangedListener, IsSpeakingChangedListener, CallAdapter, CallEndedListener } from '../../CallComposite';
8
- import { MessageReceivedListener, MessageReadListener, ChatAdapter, ParticipantsRemovedListener, ParticipantsAddedListener } from '../../ChatComposite';
8
+ import { MessageReceivedListener, MessageReadListener, ChatAdapter, ParticipantsRemovedListener, ParticipantsAddedListener, MessageEditedListener, MessageDeletedListener } from '../../ChatComposite';
9
9
  import { FileUploadManager } from '../../ChatComposite';
10
10
  import { CallWithChatAdapter } from './CallWithChatAdapter';
11
11
  import { CallWithChatAdapterState } from '../state/CallWithChatAdapterState';
@@ -147,6 +147,8 @@ export declare class AzureCommunicationCallWithChatAdapter implements CallWithCh
147
147
  on(event: 'displayNameChanged', listener: DisplayNameChangedListener): void;
148
148
  on(event: 'isSpeakingChanged', listener: IsSpeakingChangedListener): void;
149
149
  on(event: 'messageReceived', listener: MessageReceivedListener): void;
150
+ on(event: 'messageEdited', listener: MessageEditedListener): void;
151
+ on(event: 'messageDeleted', listener: MessageDeletedListener): void;
150
152
  on(event: 'messageSent', listener: MessageReceivedListener): void;
151
153
  on(event: 'messageRead', listener: MessageReadListener): void;
152
154
  on(event: 'chatParticipantsAdded', listener: ParticipantsAddedListener): void;
@@ -171,6 +173,8 @@ export declare class AzureCommunicationCallWithChatAdapter implements CallWithCh
171
173
  off(event: 'selectedMicrophoneChanged', listener: PropertyChangedEvent): void;
172
174
  off(event: 'selectedSpeakerChanged', listener: PropertyChangedEvent): void;
173
175
  off(event: 'messageReceived', listener: MessageReceivedListener): void;
176
+ off(event: 'messageEdited', listener: MessageEditedListener): void;
177
+ off(event: 'messageDeleted', listener: MessageDeletedListener): void;
174
178
  off(event: 'messageSent', listener: MessageReceivedListener): void;
175
179
  off(event: 'messageRead', listener: MessageReadListener): void;
176
180
  off(event: 'chatParticipantsAdded', listener: ParticipantsAddedListener): void;
@@ -534,6 +534,12 @@ export class AzureCommunicationCallWithChatAdapter {
534
534
  case 'messageReceived':
535
535
  this.chatAdapter.on('messageReceived', listener);
536
536
  break;
537
+ case 'messageEdited':
538
+ this.chatAdapter.on('messageEdited', listener);
539
+ break;
540
+ case 'messageDeleted':
541
+ this.chatAdapter.on('messageDeleted', listener);
542
+ break;
537
543
  case 'messageSent':
538
544
  this.chatAdapter.on('messageSent', listener);
539
545
  break;
@@ -608,6 +614,12 @@ export class AzureCommunicationCallWithChatAdapter {
608
614
  case 'messageReceived':
609
615
  this.chatAdapter.off('messageReceived', listener);
610
616
  break;
617
+ case 'messageEdited':
618
+ this.chatAdapter.off('messageEdited', listener);
619
+ break;
620
+ case 'messageDeleted':
621
+ this.chatAdapter.off('messageDeleted', listener);
622
+ break;
611
623
  case 'messageSent':
612
624
  this.chatAdapter.off('messageSent', listener);
613
625
  break;
@@ -1 +1 @@
1
- {"version":3,"file":"AzureCommunicationCallWithChatAdapter.js","sourceRoot":"","sources":["../../../../../../../../react-composites/src/composites/CallWithChatComposite/adapter/AzureCommunicationCallWithChatAdapter.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/* eslint-disable @typescript-eslint/no-unused-vars */ // REMOVE ONCE THIS FILE IS IMPLEMENTED\n/* eslint-disable @typescript-eslint/explicit-module-boundary-types */ // REMOVE ONCE THIS FILE IS IMPLEMENTED\n\nimport {\n AudioDeviceInfo,\n Call,\n CallAgent,\n GroupCallLocator,\n PermissionConstraints,\n PropertyChangedEvent,\n TeamsMeetingLinkLocator,\n StartCallOptions,\n VideoDeviceInfo\n} from '@azure/communication-calling';\n/* @conditional-compile-remove(close-captions) */\nimport { StartCaptionsOptions } from '@azure/communication-calling';\n/* @conditional-compile-remove(PSTN-calls) */\nimport { AddPhoneNumberOptions, DtmfTone } from '@azure/communication-calling';\nimport { CreateVideoStreamViewResult, VideoStreamOptions } from '@internal/react-components';\nimport { AttachmentDownloadResult } from '@internal/react-components';\n/* @conditional-compile-remove(file-sharing) */\nimport { AttachmentMetadata } from '@internal/react-components';\nimport {\n ParticipantsJoinedListener,\n ParticipantsLeftListener,\n IsMutedChangedListener,\n CallIdChangedListener,\n IsLocalScreenSharingActiveChangedListener,\n DisplayNameChangedListener,\n IsSpeakingChangedListener,\n CallAdapter,\n CallAdapterState,\n CallEndedListener\n} from '../../CallComposite';\nimport {\n MessageReceivedListener,\n MessageReadListener,\n ChatAdapter,\n ChatAdapterState,\n ParticipantsRemovedListener,\n ParticipantsAddedListener\n} from '../../ChatComposite';\n/* @conditional-compile-remove(file-sharing) */\nimport { FileUploadManager } from '../../ChatComposite';\nimport { CallWithChatAdapter, CallWithChatEvent } from './CallWithChatAdapter';\nimport {\n callWithChatAdapterStateFromBackingStates,\n CallWithChatAdapterState,\n mergeCallAdapterStateIntoCallWithChatAdapterState,\n mergeChatAdapterStateIntoCallWithChatAdapterState\n} from '../state/CallWithChatAdapterState';\nimport {\n _createAzureCommunicationChatAdapterInner,\n createAzureCommunicationChatAdapterFromClient\n} from '../../ChatComposite/adapter/AzureCommunicationChatAdapter';\nimport { AzureCommunicationChatAdapterOptions } from '../../ChatComposite/adapter/AzureCommunicationChatAdapter';\nimport { EventEmitter } from 'events';\nimport { CommunicationTokenCredential, CommunicationUserIdentifier } from '@azure/communication-common';\n/* @conditional-compile-remove(PSTN-calls) */\nimport {\n CommunicationIdentifier,\n isCommunicationUserIdentifier,\n PhoneNumberIdentifier\n} from '@azure/communication-common';\nimport { getChatThreadFromTeamsLink } from './parseTeamsUrl';\nimport { AdapterError } from '../../common/adapters';\n\n/* @conditional-compile-remove(teams-adhoc-call) */\nimport { CallParticipantsLocator } from '../../CallComposite/adapter/AzureCommunicationCallAdapter';\n\nimport { _createAzureCommunicationCallAdapterInner } from '../../CallComposite/adapter/AzureCommunicationCallAdapter';\n\nimport {\n CallAdapterLocator,\n createAzureCommunicationCallAdapterFromClient\n} from '../../CallComposite/adapter/AzureCommunicationCallAdapter';\nimport { StatefulCallClient } from '@internal/calling-stateful-client';\nimport { StatefulChatClient } from '@internal/chat-stateful-client';\nimport { ChatThreadClient } from '@azure/communication-chat';\nimport { useEffect, useRef, useState } from 'react';\nimport { _toCommunicationIdentifier, _TelemetryImplementationHint } from '@internal/acs-ui-common';\nimport { JoinCallOptions } from '../../CallComposite/adapter/CallAdapter';\n/* @conditional-compile-remove(video-background-effects) */\nimport { AzureCommunicationCallAdapterOptions } from '../../CallComposite/adapter/AzureCommunicationCallAdapter';\n/* @conditional-compile-remove(close-captions) */\nimport {\n IsCaptionsActiveChangedListener,\n CaptionsReceivedListener,\n IsCaptionLanguageChangedListener,\n IsSpokenLanguageChangedListener\n} from '../../CallComposite/adapter/CallAdapter';\n/* @conditional-compile-remove(capabilities) */\nimport { CapabilitiesChangedListener } from '../../CallComposite/adapter/CallAdapter';\n/* @conditional-compile-remove(video-background-effects) */\nimport { VideoBackgroundImage, VideoBackgroundEffect } from '../../CallComposite';\n/* @conditional-compile-remove(end-of-call-survey) */\nimport { CallSurvey, CallSurveyResponse } from '@azure/communication-calling';\n\ntype CallWithChatAdapterStateChangedHandler = (newState: CallWithChatAdapterState) => void;\n\n/** Context of Call with Chat, which is a centralized context for all state updates */\nclass CallWithChatContext {\n private emitter = new EventEmitter();\n private state: CallWithChatAdapterState;\n\n constructor(clientState: CallWithChatAdapterState, maxListeners = 50) {\n this.state = clientState;\n this.emitter.setMaxListeners(maxListeners);\n }\n\n public onStateChange(handler: CallWithChatAdapterStateChangedHandler): void {\n this.emitter.on('stateChanged', handler);\n }\n\n public offStateChange(handler: CallWithChatAdapterStateChangedHandler): void {\n this.emitter.off('stateChanged', handler);\n }\n\n public setState(state: CallWithChatAdapterState): void {\n this.state = state;\n this.emitter.emit('stateChanged', this.state);\n }\n\n public getState(): CallWithChatAdapterState {\n return this.state;\n }\n\n public updateClientState(clientState: CallWithChatAdapterState): void {\n this.setState(clientState);\n }\n\n public updateClientStateWithChatState(chatAdapterState: ChatAdapterState): void {\n this.updateClientState(mergeChatAdapterStateIntoCallWithChatAdapterState(this.state, chatAdapterState));\n }\n\n public updateClientStateWithCallState(callAdapterState: CallAdapterState): void {\n this.updateClientState(mergeCallAdapterStateIntoCallWithChatAdapterState(this.state, callAdapterState));\n }\n}\n\n/**\n * CallWithChat adapter backed by Azure Communication Services.\n * Created for easy use with the {@link CallWithChatComposite}.\n */\nexport class AzureCommunicationCallWithChatAdapter implements CallWithChatAdapter {\n private callAdapter: CallAdapter;\n private chatAdapter: ChatAdapter;\n private context: CallWithChatContext;\n private onChatStateChange: (newChatAdapterState: ChatAdapterState) => void;\n private onCallStateChange: (newChatAdapterState: CallAdapterState) => void;\n\n constructor(callAdapter: CallAdapter, chatAdapter: ChatAdapter) {\n this.bindPublicMethods();\n this.callAdapter = callAdapter;\n this.chatAdapter = chatAdapter;\n this.context = new CallWithChatContext(callWithChatAdapterStateFromBackingStates(callAdapter, chatAdapter));\n\n const onChatStateChange = (newChatAdapterState: ChatAdapterState): void => {\n this.context.updateClientStateWithChatState(newChatAdapterState);\n };\n this.chatAdapter.onStateChange(onChatStateChange);\n this.onChatStateChange = onChatStateChange;\n\n const onCallStateChange = (newCallAdapterState: CallAdapterState): void => {\n this.context.updateClientStateWithCallState(newCallAdapterState);\n };\n this.callAdapter.onStateChange(onCallStateChange);\n this.onCallStateChange = onCallStateChange;\n }\n\n private bindPublicMethods(): void {\n this.joinCall.bind(this);\n this.leaveCall.bind(this);\n this.startCall.bind(this);\n this.onStateChange.bind(this);\n this.offStateChange.bind(this);\n this.getState.bind(this);\n this.dispose.bind(this);\n this.setCamera.bind(this);\n this.setMicrophone.bind(this);\n this.setSpeaker.bind(this);\n this.askDevicePermission.bind(this);\n this.queryCameras.bind(this);\n this.queryMicrophones.bind(this);\n this.querySpeakers.bind(this);\n this.startCamera.bind(this);\n this.stopCamera.bind(this);\n this.mute.bind(this);\n this.unmute.bind(this);\n this.startScreenShare.bind(this);\n this.stopScreenShare.bind(this);\n /* @conditional-compile-remove(raise-hand) */\n this.raiseHand.bind(this);\n /* @conditional-compile-remove(raise-hand) */\n this.lowerHand.bind(this);\n this.removeParticipant.bind(this);\n this.createStreamView.bind(this);\n this.disposeStreamView.bind(this);\n this.disposeScreenShareStreamView.bind(this);\n this.fetchInitialData.bind(this);\n this.sendMessage.bind(this);\n this.sendReadReceipt.bind(this);\n this.sendTypingIndicator.bind(this);\n this.loadPreviousChatMessages.bind(this);\n this.updateMessage.bind(this);\n this.deleteMessage.bind(this);\n this.on.bind(this);\n this.off.bind(this);\n /* @conditional-compile-remove(file-sharing) */\n this.registerActiveFileUploads = this.registerActiveFileUploads.bind(this);\n /* @conditional-compile-remove(file-sharing) */\n this.registerCompletedFileUploads = this.registerCompletedFileUploads.bind(this);\n /* @conditional-compile-remove(file-sharing) */\n this.clearFileUploads = this.clearFileUploads.bind(this);\n /* @conditional-compile-remove(file-sharing) */\n this.cancelFileUpload = this.cancelFileUpload.bind(this);\n /* @conditional-compile-remove(file-sharing) */\n this.updateFileUploadProgress = this.updateFileUploadProgress.bind(this);\n /* @conditional-compile-remove(file-sharing) */\n this.updateFileUploadErrorMessage = this.updateFileUploadErrorMessage.bind(this);\n /* @conditional-compile-remove(file-sharing) */\n this.updateFileUploadMetadata = this.updateFileUploadMetadata.bind(this);\n\n this.downloadAttachments = this.downloadAttachments.bind(this);\n /* @conditional-compile-remove(PSTN-calls) */\n this.holdCall.bind(this);\n /* @conditional-compile-remove(PSTN-calls) */\n this.resumeCall.bind(this);\n /* @conditional-compile-remove(PSTN-calls) */\n this.addParticipant.bind(this);\n /* @conditional-compile-remove(PSTN-calls) */\n this.sendDtmfTone.bind(this);\n /* @conditional-compile-remove(unsupported-browser) */\n this.allowUnsupportedBrowserVersion.bind(this);\n /* @conditional-compile-remove(close-captions) */ {\n this.startCaptions.bind(this);\n this.stopCaptions.bind(this);\n this.setSpokenLanguage.bind(this);\n this.setCaptionLanguage.bind(this);\n }\n /* @conditional-compile-remove(video-background-effects) */\n this.startVideoBackgroundEffect.bind(this);\n /* @conditional-compile-remove(video-background-effects) */\n this.stopVideoBackgroundEffects.bind(this);\n /* @conditional-compile-remove(video-background-effects) */\n this.updateBackgroundPickerImages.bind(this);\n }\n\n /** Join existing Call. */\n public joinCall(options?: boolean | JoinCallOptions): Call | undefined {\n if (typeof options === 'boolean') {\n return this.callAdapter.joinCall(options);\n } else {\n return this.callAdapter.joinCall(options);\n }\n }\n /** Leave current Call. */\n public async leaveCall(forEveryone?: boolean): Promise<void> {\n // Only remove self from the GroupCall. Contoso must manage access to Chat.\n await this.callAdapter.leaveCall(forEveryone);\n }\n /** Start a new Call. */\n public startCall(\n participants: string[] | /* @conditional-compile-remove(PSTN-calls) */ CommunicationIdentifier[],\n options?: StartCallOptions\n ): Call | undefined {\n let communicationParticipants = participants;\n /* @conditional-compile-remove(PSTN-calls) */\n communicationParticipants = participants.map(_toCommunicationIdentifier);\n return this.callAdapter.startCall(communicationParticipants, options);\n }\n /**\n * Subscribe to state change events.\n * @param handler - handler to be called when the state changes. This is passed the new state.\n */\n public onStateChange(handler: (state: CallWithChatAdapterState) => void): void {\n this.context.onStateChange(handler);\n }\n /**\n * Unsubscribe to state change events.\n * @param handler - handler to be no longer called when state changes.\n */\n public offStateChange(handler: (state: CallWithChatAdapterState) => void): void {\n this.context.offStateChange(handler);\n }\n /** Get current Call and Chat state. */\n public getState(): CallWithChatAdapterState {\n return this.context.getState();\n }\n /** Dispose of the current CallWithChatAdapter. */\n public dispose(): void {\n this.chatAdapter.offStateChange(this.onChatStateChange);\n this.callAdapter.offStateChange(this.onCallStateChange);\n\n this.chatAdapter.dispose();\n this.callAdapter.dispose();\n }\n /** Remove a participant from the Call only. */\n public async removeParticipant(\n userId: string | /* @conditional-compile-remove(PSTN-calls) */ CommunicationIdentifier\n ): Promise<void> {\n let participant = userId;\n /* @conditional-compile-remove(PSTN-calls) */\n participant = _toCommunicationIdentifier(userId);\n await this.callAdapter.removeParticipant(participant);\n }\n public async setCamera(device: VideoDeviceInfo, options?: VideoStreamOptions): Promise<void> {\n await this.callAdapter.setCamera(device, options);\n }\n /** Set the microphone to be used in the Call. */\n public async setMicrophone(device: AudioDeviceInfo): Promise<void> {\n await this.callAdapter.setMicrophone(device);\n }\n /** Set the speaker to be used in the Call. */\n public async setSpeaker(device: AudioDeviceInfo): Promise<void> {\n await this.callAdapter.setSpeaker(device);\n }\n public async askDevicePermission(constraints: PermissionConstraints): Promise<void> {\n await this.callAdapter.askDevicePermission(constraints);\n }\n /** Query for available cameras. */\n public async queryCameras(): Promise<VideoDeviceInfo[]> {\n return await this.callAdapter.queryCameras();\n }\n /** Query for available microphones. */\n public async queryMicrophones(): Promise<AudioDeviceInfo[]> {\n return await this.callAdapter.queryMicrophones();\n }\n /** Query for available speakers. */\n public async querySpeakers(): Promise<AudioDeviceInfo[]> {\n return await this.callAdapter.querySpeakers();\n }\n /** Start the camera for the user in the Call. */\n public async startCamera(options?: VideoStreamOptions): Promise<void> {\n await this.callAdapter.startCamera(options);\n }\n /** Stop the camera for the user in the Call. */\n public async stopCamera(): Promise<void> {\n await this.callAdapter.stopCamera();\n }\n /** Mute the user in the Call. */\n public async mute(): Promise<void> {\n await this.callAdapter.mute();\n }\n /** Unmute the user in the Call. */\n public async unmute(): Promise<void> {\n await this.callAdapter.unmute();\n }\n /** Trigger the user to start screen share. */\n public async startScreenShare(): Promise<void> {\n await this.callAdapter.startScreenShare();\n }\n /** Stop the current active screen share. */\n public async stopScreenShare(): Promise<void> {\n await this.callAdapter.stopScreenShare();\n }\n /* @conditional-compile-remove(raise-hand) */\n /** Raise hand for local user. */\n public async raiseHand(): Promise<void> {\n await this.callAdapter.raiseHand();\n }\n /* @conditional-compile-remove(raise-hand) */\n /** Lower hand for local user. */\n public async lowerHand(): Promise<void> {\n await this.callAdapter.lowerHand();\n }\n /** Create a stream view for a remote participants video feed. */\n public async createStreamView(\n remoteUserId?: string,\n options?: VideoStreamOptions\n ): Promise<void | CreateVideoStreamViewResult> {\n return await this.callAdapter.createStreamView(remoteUserId, options);\n }\n /** Dispose of a created stream view of a remote participants video feed. */\n public async disposeStreamView(remoteUserId?: string, options?: VideoStreamOptions): Promise<void> {\n await this.callAdapter.disposeStreamView(remoteUserId, options);\n }\n /** Dispose of a remote screen share */\n public async disposeScreenShareStreamView(remoteUserId: string): Promise<void> {\n await this.callAdapter.disposeScreenShareStreamView(remoteUserId);\n }\n /** Dispose of a remote video stream */\n public async disposeRemoteVideoStreamView(remoteUserId: string): Promise<void> {\n await this.callAdapter.disposeRemoteVideoStreamView(remoteUserId);\n }\n /** Dispose of the local video stream */\n public async disposeLocalVideoStreamView(): Promise<void> {\n await this.callAdapter.disposeLocalVideoStreamView();\n }\n /** Fetch initial Call and Chat data such as chat messages. */\n public async fetchInitialData(): Promise<void> {\n await this.chatAdapter.fetchInitialData();\n }\n /** Send a chat message. */\n public async sendMessage(content: string): Promise<void> {\n await this.chatAdapter.sendMessage(content);\n }\n /** Send a chat read receipt. */\n public async sendReadReceipt(chatMessageId: string): Promise<void> {\n await this.chatAdapter.sendReadReceipt(chatMessageId);\n }\n /** Send an isTyping indicator. */\n public async sendTypingIndicator(): Promise<void> {\n await this.chatAdapter.sendTypingIndicator();\n }\n /** Load previous Chat messages. */\n public async loadPreviousChatMessages(messagesToLoad: number): Promise<boolean> {\n return await this.chatAdapter.loadPreviousChatMessages(messagesToLoad);\n }\n /** Update an existing message. */\n public async updateMessage(\n messageId: string,\n content: string,\n metadata?: Record<string, string>,\n options?: {\n /* @conditional-compile-remove(file-sharing) */\n attachmentMetadata?: AttachmentMetadata[];\n }\n ): Promise<void> {\n return await this.chatAdapter.updateMessage(\n messageId,\n content,\n metadata,\n /* @conditional-compile-remove(file-sharing) */ options\n );\n }\n /** Delete an existing message. */\n public async deleteMessage(messageId: string): Promise<void> {\n return await this.chatAdapter.deleteMessage(messageId);\n }\n /* @conditional-compile-remove(file-sharing) */\n public registerActiveFileUploads = (files: File[]): FileUploadManager[] => {\n return this.chatAdapter.registerActiveFileUploads(files);\n };\n /* @conditional-compile-remove(file-sharing) */\n public registerCompletedFileUploads = (metadata: AttachmentMetadata[]): FileUploadManager[] => {\n return this.chatAdapter.registerCompletedFileUploads(metadata);\n };\n /* @conditional-compile-remove(file-sharing) */\n public clearFileUploads = (): void => {\n this.chatAdapter.clearFileUploads();\n };\n /* @conditional-compile-remove(file-sharing) */\n public cancelFileUpload = (id: string): void => {\n this.chatAdapter.cancelFileUpload(id);\n };\n /* @conditional-compile-remove(file-sharing) */\n public updateFileUploadProgress = (id: string, progress: number): void => {\n this.chatAdapter.updateFileUploadProgress(id, progress);\n };\n /* @conditional-compile-remove(file-sharing) */\n public updateFileUploadErrorMessage = (id: string, errorMessage: string): void => {\n this.chatAdapter.updateFileUploadErrorMessage(id, errorMessage);\n };\n /* @conditional-compile-remove(file-sharing) */\n public updateFileUploadMetadata = (id: string, metadata: AttachmentMetadata): void => {\n this.chatAdapter.updateFileUploadMetadata(id, metadata);\n };\n async downloadAttachments(options: { attachmentUrls: Record<string, string> }): Promise<AttachmentDownloadResult[]> {\n return await this.chatAdapter.downloadAttachments(options);\n }\n /* @conditional-compile-remove(PSTN-calls) */\n public async holdCall(): Promise<void> {\n return await this.callAdapter.holdCall();\n }\n /* @conditional-compile-remove(PSTN-calls) */\n public async resumeCall(): Promise<void> {\n return await this.callAdapter.resumeCall();\n }\n /* @conditional-compile-remove(PSTN-calls) */\n public async addParticipant(participant: PhoneNumberIdentifier, options?: AddPhoneNumberOptions): Promise<void>;\n /* @conditional-compile-remove(PSTN-calls) */\n public async addParticipant(participant: CommunicationUserIdentifier): Promise<void>;\n /* @conditional-compile-remove(PSTN-calls) */\n public async addParticipant(\n participant: PhoneNumberIdentifier | CommunicationUserIdentifier,\n options?: AddPhoneNumberOptions\n ): Promise<void> {\n if (isCommunicationUserIdentifier(participant)) {\n return await this.callAdapter.addParticipant(participant);\n } else {\n return await this.callAdapter.addParticipant(participant, options);\n }\n }\n\n /* @conditional-compile-remove(PSTN-calls) */\n public async sendDtmfTone(dtmfTone: DtmfTone): Promise<void> {\n return await this.callAdapter.sendDtmfTone(dtmfTone);\n }\n\n /* @conditional-compile-remove(unsupported-browser) */\n public allowUnsupportedBrowserVersion(): void {\n return this.callAdapter.allowUnsupportedBrowserVersion();\n }\n\n /* @conditional-compile-remove(close-captions) */\n public async startCaptions(options?: StartCaptionsOptions): Promise<void> {\n await this.callAdapter.startCaptions(options);\n }\n\n /* @conditional-compile-remove(close-captions) */\n public async stopCaptions(): Promise<void> {\n await this.callAdapter.stopCaptions();\n }\n\n /* @conditional-compile-remove(close-captions) */\n public async setCaptionLanguage(language: string): Promise<void> {\n await this.callAdapter.setCaptionLanguage(language);\n }\n\n /* @conditional-compile-remove(close-captions) */\n public async setSpokenLanguage(language: string): Promise<void> {\n await this.callAdapter.setSpokenLanguage(language);\n }\n\n /* @conditional-compile-remove(video-background-effects) */\n public async startVideoBackgroundEffect(videoBackgroundEffect: VideoBackgroundEffect): Promise<void> {\n await this.callAdapter.startVideoBackgroundEffect(videoBackgroundEffect);\n }\n\n /* @conditional-compile-remove(video-background-effects) */\n public async stopVideoBackgroundEffects(): Promise<void> {\n return await this.callAdapter.stopVideoBackgroundEffects();\n }\n\n /* @conditional-compile-remove(video-background-effects) */\n public updateBackgroundPickerImages(backgroundImages: VideoBackgroundImage[]): void {\n return this.callAdapter.updateBackgroundPickerImages(backgroundImages);\n }\n\n /* @conditional-compile-remove(video-background-effects) */\n public updateSelectedVideoBackgroundEffect(selectedVideoBackground: VideoBackgroundEffect): void {\n return this.callAdapter.updateSelectedVideoBackgroundEffect(selectedVideoBackground);\n }\n /* @conditional-compile-remove(end-of-call-survey) */\n public async submitSurvey(survey: CallSurvey): Promise<CallSurveyResponse | undefined> {\n return this.callAdapter.submitSurvey(survey);\n }\n\n on(event: 'callParticipantsJoined', listener: ParticipantsJoinedListener): void;\n on(event: 'callParticipantsLeft', listener: ParticipantsLeftListener): void;\n on(event: 'callEnded', listener: CallEndedListener): void;\n on(event: 'callError', listener: (e: AdapterError) => void): void;\n on(event: 'isMutedChanged', listener: IsMutedChangedListener): void;\n on(event: 'callIdChanged', listener: CallIdChangedListener): void;\n on(event: 'isLocalScreenSharingActiveChanged', listener: IsLocalScreenSharingActiveChangedListener): void;\n on(event: 'displayNameChanged', listener: DisplayNameChangedListener): void;\n on(event: 'isSpeakingChanged', listener: IsSpeakingChangedListener): void;\n on(event: 'messageReceived', listener: MessageReceivedListener): void;\n on(event: 'messageSent', listener: MessageReceivedListener): void;\n on(event: 'messageRead', listener: MessageReadListener): void;\n on(event: 'chatParticipantsAdded', listener: ParticipantsAddedListener): void;\n on(event: 'chatParticipantsRemoved', listener: ParticipantsRemovedListener): void;\n on(event: 'selectedMicrophoneChanged', listener: PropertyChangedEvent): void;\n on(event: 'selectedSpeakerChanged', listener: PropertyChangedEvent): void;\n on(event: 'chatError', listener: (e: AdapterError) => void): void;\n /* @conditional-compile-remove(close-captions) */\n on(event: 'captionsReceived', listener: CaptionsReceivedListener): void;\n /* @conditional-compile-remove(close-captions) */\n on(event: 'isCaptionsActiveChanged', listener: IsCaptionsActiveChangedListener): void;\n /* @conditional-compile-remove(close-captions) */\n on(event: 'isCaptionLanguageChanged', listener: IsCaptionLanguageChangedListener): void;\n /* @conditional-compile-remove(close-captions) */\n on(event: 'isSpokenLanguageChanged', listener: IsSpokenLanguageChangedListener): void;\n /* @conditional-compile-remove(capabilities) */\n on(event: 'capabilitiesChanged', listener: CapabilitiesChangedListener): void;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n on(event: CallWithChatEvent, listener: any): void {\n switch (event) {\n case 'callParticipantsJoined':\n this.callAdapter.on('participantsJoined', listener);\n break;\n case 'callParticipantsLeft':\n this.callAdapter.on('participantsLeft', listener);\n break;\n case 'callEnded':\n this.callAdapter.on('callEnded', listener);\n break;\n case 'isMutedChanged':\n this.callAdapter.on('isMutedChanged', listener);\n break;\n case 'callIdChanged':\n this.callAdapter.on('callIdChanged', listener);\n break;\n case 'isLocalScreenSharingActiveChanged':\n this.callAdapter.on('isLocalScreenSharingActiveChanged', listener);\n break;\n case 'displayNameChanged':\n this.callAdapter.on('displayNameChanged', listener);\n break;\n case 'isSpeakingChanged':\n this.callAdapter.on('isSpeakingChanged', listener);\n break;\n case 'selectedMicrophoneChanged':\n this.callAdapter.on('selectedMicrophoneChanged', listener);\n break;\n case 'selectedSpeakerChanged':\n this.callAdapter.on('selectedSpeakerChanged', listener);\n break;\n /* @conditional-compile-remove(close-captions) */\n case 'captionsReceived':\n this.callAdapter.on('captionsReceived', listener);\n break;\n /* @conditional-compile-remove(close-captions) */\n case 'isCaptionsActiveChanged':\n this.callAdapter.on('isCaptionsActiveChanged', listener);\n break;\n /* @conditional-compile-remove(close-captions) */\n case 'isCaptionLanguageChanged':\n this.callAdapter.on('isCaptionLanguageChanged', listener);\n break;\n /* @conditional-compile-remove(close-captions) */\n case 'isSpokenLanguageChanged':\n this.callAdapter.on('isSpokenLanguageChanged', listener);\n break;\n case 'messageReceived':\n this.chatAdapter.on('messageReceived', listener);\n break;\n case 'messageSent':\n this.chatAdapter.on('messageSent', listener);\n break;\n case 'messageRead':\n this.chatAdapter.on('messageRead', listener);\n break;\n case 'chatParticipantsAdded':\n this.chatAdapter.on('participantsAdded', listener);\n break;\n case 'chatParticipantsRemoved':\n this.chatAdapter.on('participantsRemoved', listener);\n break;\n case 'callError':\n this.callAdapter.on('error', listener);\n break;\n case 'chatError':\n this.chatAdapter.on('error', listener);\n break;\n\n default:\n throw `Unknown AzureCommunicationCallWithChatAdapter Event: ${event}`;\n }\n }\n\n off(event: 'callParticipantsJoined', listener: ParticipantsJoinedListener): void;\n off(event: 'callParticipantsLeft', listener: ParticipantsLeftListener): void;\n off(event: 'callEnded', listener: CallEndedListener): void;\n off(event: 'callError', listener: (e: AdapterError) => void): void;\n off(event: 'isMutedChanged', listener: IsMutedChangedListener): void;\n off(event: 'callIdChanged', listener: CallIdChangedListener): void;\n off(event: 'isLocalScreenSharingActiveChanged', listener: IsLocalScreenSharingActiveChangedListener): void;\n off(event: 'displayNameChanged', listener: DisplayNameChangedListener): void;\n off(event: 'isSpeakingChanged', listener: IsSpeakingChangedListener): void;\n off(event: 'selectedMicrophoneChanged', listener: PropertyChangedEvent): void;\n off(event: 'selectedSpeakerChanged', listener: PropertyChangedEvent): void;\n off(event: 'messageReceived', listener: MessageReceivedListener): void;\n off(event: 'messageSent', listener: MessageReceivedListener): void;\n off(event: 'messageRead', listener: MessageReadListener): void;\n off(event: 'chatParticipantsAdded', listener: ParticipantsAddedListener): void;\n off(event: 'chatParticipantsRemoved', listener: ParticipantsRemovedListener): void;\n off(event: 'chatError', listener: (e: AdapterError) => void): void;\n /* @conditional-compile-remove(close-captions) */\n off(event: 'captionsReceived', listener: CaptionsReceivedListener): void;\n /* @conditional-compile-remove(close-captions) */\n off(event: 'isCaptionsActiveChanged', listener: IsCaptionsActiveChangedListener): void;\n /* @conditional-compile-remove(close-captions) */\n off(event: 'isCaptionLanguageChanged', listener: IsCaptionLanguageChangedListener): void;\n /* @conditional-compile-remove(close-captions) */\n off(event: 'isSpokenLanguageChanged', listener: IsSpokenLanguageChangedListener): void;\n /* @conditional-compile-remove(capabilities) */\n off(event: 'capabilitiesChanged', listener: CapabilitiesChangedListener): void;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n off(event: CallWithChatEvent, listener: any): void {\n switch (event as unknown) {\n case 'callParticipantsJoined':\n this.callAdapter.off('participantsJoined', listener);\n break;\n case 'callParticipantsLeft':\n this.callAdapter.off('participantsLeft', listener);\n break;\n case 'callEnded':\n this.callAdapter.off('callEnded', listener);\n break;\n case 'isMutedChanged':\n this.callAdapter.off('isMutedChanged', listener);\n break;\n case 'callIdChanged':\n this.callAdapter.off('callIdChanged', listener);\n break;\n case 'isLocalScreenSharingActiveChanged':\n this.callAdapter.off('isLocalScreenSharingActiveChanged', listener);\n break;\n case 'displayNameChanged':\n this.callAdapter.off('displayNameChanged', listener);\n break;\n case 'isSpeakingChanged':\n this.callAdapter.off('isSpeakingChanged', listener);\n break;\n case 'selectedMicrophoneChanged':\n this.callAdapter.off('selectedMicrophoneChanged', listener);\n break;\n case 'selectedSpeakerChanged':\n this.callAdapter.off('selectedSpeakerChanged', listener);\n break;\n /* @conditional-compile-remove(close-captions) */\n case 'captionsReceived':\n this.callAdapter.off('captionsReceived', listener);\n break;\n /* @conditional-compile-remove(close-captions) */\n case 'isCaptionsActiveChanged':\n this.callAdapter.off('isCaptionsActiveChanged', listener);\n break;\n /* @conditional-compile-remove(close-captions) */\n case 'isCaptionLanguageChanged':\n this.callAdapter.off('isCaptionLanguageChanged', listener);\n break;\n /* @conditional-compile-remove(close-captions) */\n case 'isSpokenLanguageChanged':\n this.callAdapter.off('isSpokenLanguageChanged', listener);\n break;\n case 'messageReceived':\n this.chatAdapter.off('messageReceived', listener);\n break;\n case 'messageSent':\n this.chatAdapter.off('messageSent', listener);\n break;\n case 'messageRead':\n this.chatAdapter.off('messageRead', listener);\n break;\n case 'chatParticipantsAdded':\n this.chatAdapter.off('participantsAdded', listener);\n break;\n case 'chatParticipantsRemoved':\n this.chatAdapter.off('participantsRemoved', listener);\n break;\n case 'callError':\n this.callAdapter.off('error', listener);\n break;\n case 'chatError':\n this.chatAdapter.off('error', listener);\n break;\n default:\n throw `Unknown AzureCommunicationCallWithChatAdapter Event: ${event}`;\n }\n }\n}\n\n/**\n * Arguments for use in {@link createAzureCommunicationCallWithChatAdapter} to join a Call with an associated Chat thread.\n *\n * @public\n */\nexport interface CallAndChatLocator {\n /** Locator used by {@link createAzureCommunicationCallWithChatAdapter} to locate the call to join */\n callLocator: GroupCallLocator | /* @conditional-compile-remove(teams-adhoc-call) */ CallParticipantsLocator;\n /** Chat thread ID used by {@link createAzureCommunicationCallWithChatAdapter} to locate the chat thread to join */\n chatThreadId: string;\n}\n\n/**\n * Arguments for {@link createAzureCommunicationCallWithChatAdapter}\n *\n * @public\n */\nexport type AzureCommunicationCallWithChatAdapterArgs = {\n endpoint: string;\n userId: CommunicationUserIdentifier;\n displayName: string;\n credential: CommunicationTokenCredential;\n locator: CallAndChatLocator | TeamsMeetingLinkLocator;\n /* @conditional-compile-remove(PSTN-calls) */\n alternateCallerId?: string;\n /* @conditional-compile-remove(video-background-effects) */\n callAdapterOptions?: AzureCommunicationCallAdapterOptions;\n};\n\n/**\n * Create a CallWithChatAdapter backed by Azure Communication services\n * to plug into the {@link CallWithChatComposite}.\n *\n * @public\n */\nexport const createAzureCommunicationCallWithChatAdapter = async ({\n userId,\n displayName,\n credential,\n endpoint,\n locator,\n /* @conditional-compile-remove(PSTN-calls) */ alternateCallerId,\n /* @conditional-compile-remove(video-background-effects) */ callAdapterOptions\n}: AzureCommunicationCallWithChatAdapterArgs): Promise<CallWithChatAdapter> => {\n const callAdapterLocator = isTeamsMeetingLinkLocator(locator) ? locator : locator.callLocator;\n const createCallAdapterPromise = _createAzureCommunicationCallAdapterInner({\n userId,\n displayName,\n credential,\n locator: callAdapterLocator,\n /* @conditional-compile-remove(PSTN-calls) */ alternateCallerId,\n /* @conditional-compile-remove(video-background-effects) */ options: callAdapterOptions,\n telemetryImplementationHint: 'CallWithChat' as _TelemetryImplementationHint\n });\n\n const threadId = isTeamsMeetingLinkLocator(locator)\n ? getChatThreadFromTeamsLink(locator.meetingLink)\n : locator.chatThreadId;\n const createChatAdapterPromise = _createAzureCommunicationChatAdapterInner(\n endpoint,\n userId,\n displayName,\n credential,\n threadId,\n 'CallWithChat' as _TelemetryImplementationHint\n );\n\n const [callAdapter, chatAdapter] = await Promise.all([createCallAdapterPromise, createChatAdapterPromise]);\n return new AzureCommunicationCallWithChatAdapter(callAdapter, chatAdapter);\n};\n\n/**\n * A custom React hook to simplify the creation of {@link CallWithChatAdapter}.\n *\n * Similar to {@link createAzureCommunicationCallWithChatAdapter}, but takes care of asynchronous\n * creation of the adapter internally.\n *\n * Allows arguments to be undefined so that you can respect the rule-of-hooks and pass in arguments\n * as they are created. The adapter is only created when all arguments are defined.\n *\n * Note that you must memoize the arguments to avoid recreating adapter on each render.\n * See storybook for typical usage examples.\n *\n * @public\n */\nexport const useAzureCommunicationCallWithChatAdapter = (\n /**\n * Arguments to be passed to {@link createAzureCommunicationCallWithChatAdapter}.\n *\n * Allows arguments to be undefined so that you can respect the rule-of-hooks and pass in arguments\n * as they are created. The adapter is only created when all arguments are defined.\n */\n args: Partial<AzureCommunicationCallWithChatAdapterArgs>,\n /**\n * Optional callback to modify the adapter once it is created.\n *\n * If set, must return the modified adapter.\n */\n afterCreate?: (adapter: CallWithChatAdapter) => Promise<CallWithChatAdapter>,\n /**\n * Optional callback called before the adapter is disposed.\n *\n * This is useful for clean up tasks, e.g., leaving any ongoing calls.\n */\n beforeDispose?: (adapter: CallWithChatAdapter) => Promise<void>\n): CallWithChatAdapter | undefined => {\n const {\n credential,\n displayName,\n endpoint,\n locator,\n userId,\n /* @conditional-compile-remove(PSTN-calls) */ alternateCallerId,\n /* @conditional-compile-remove(video-background-effects) */ callAdapterOptions\n } = args;\n\n // State update needed to rerender the parent component when a new adapter is created.\n const [adapter, setAdapter] = useState<CallWithChatAdapter | undefined>(undefined);\n // Ref needed for cleanup to access the old adapter created asynchronously.\n const adapterRef = useRef<CallWithChatAdapter | undefined>(undefined);\n const creatingAdapterRef = useRef<boolean>(false);\n\n const afterCreateRef = useRef<((adapter: CallWithChatAdapter) => Promise<CallWithChatAdapter>) | undefined>(\n undefined\n );\n const beforeDisposeRef = useRef<((adapter: CallWithChatAdapter) => Promise<void>) | undefined>(undefined);\n // These refs are updated on *each* render, so that the latest values\n // are used in the `useEffect` closures below.\n // Using a Ref ensures that new values for the callbacks do not trigger the\n // useEffect blocks, and a new adapter creation / distruction is not triggered.\n afterCreateRef.current = afterCreate;\n beforeDisposeRef.current = beforeDispose;\n\n useEffect(\n () => {\n if (!credential || !displayName || !endpoint || !locator || !userId) {\n return;\n }\n (async () => {\n if (adapterRef.current) {\n // Dispose the old adapter when a new one is created.\n //\n // This clean up function uses `adapterRef` because `adapter` can not be added to the dependency array of\n // this `useEffect` -- we do not want to trigger a new adapter creation because of the first adapter\n // creation.\n if (beforeDisposeRef.current) {\n await beforeDisposeRef.current(adapterRef.current);\n }\n adapterRef.current.dispose();\n adapterRef.current = undefined;\n }\n if (creatingAdapterRef.current) {\n console.warn(\n 'Adapter is already being created, please see storybook for more information: https://azure.github.io/communication-ui-library/?path=/story/troubleshooting--page'\n );\n return;\n }\n creatingAdapterRef.current = true;\n let newAdapter = await createAzureCommunicationCallWithChatAdapter({\n credential,\n displayName,\n endpoint,\n locator,\n userId,\n /* @conditional-compile-remove(PSTN-calls) */ alternateCallerId,\n /* @conditional-compile-remove(video-background-effects) */ callAdapterOptions\n });\n if (afterCreateRef.current) {\n newAdapter = await afterCreateRef.current(newAdapter);\n }\n adapterRef.current = newAdapter;\n setAdapter(newAdapter);\n })();\n },\n // Explicitly list all arguments so that caller doesn't have to memoize the `args` object.\n [\n adapterRef,\n afterCreateRef,\n /* @conditional-compile-remove(PSTN-calls) */ alternateCallerId,\n beforeDisposeRef,\n credential,\n displayName,\n endpoint,\n locator,\n userId,\n /* @conditional-compile-remove(video-background-effects) */ callAdapterOptions\n ]\n );\n\n // Dispose any existing adapter when the component unmounts.\n useEffect(() => {\n return () => {\n (async () => {\n if (adapterRef.current) {\n if (beforeDisposeRef.current) {\n await beforeDisposeRef.current(adapterRef.current);\n }\n adapterRef.current.dispose();\n adapterRef.current = undefined;\n }\n })();\n };\n }, []);\n\n return adapter;\n};\n\n/**\n * Arguments for {@link createAzureCommunicationCallWithChatAdapterFromClient}\n *\n * @public\n */\nexport type AzureCommunicationCallWithChatAdapterFromClientArgs = {\n callLocator: CallAdapterLocator | TeamsMeetingLinkLocator;\n callAgent: CallAgent;\n callClient: StatefulCallClient;\n chatClient: StatefulChatClient;\n chatThreadClient: ChatThreadClient;\n /* @conditional-compile-remove(video-background-effects) */\n callAdapterOptions?: AzureCommunicationCallAdapterOptions;\n chatAdapterOptions?: AzureCommunicationChatAdapterOptions;\n};\n\n/**\n * Create a {@link CallWithChatAdapter} using the provided {@link StatefulChatClient} and {@link StatefulCallClient}.\n *\n * Useful if you want to keep a reference to {@link StatefulChatClient} and {@link StatefulCallClient}.\n * Please note that chatThreadClient has to be created by StatefulChatClient via chatClient.getChatThreadClient(chatThreadId) API.\n * Consider using {@link createAzureCommunicationCallWithChatAdapter} for a simpler API.\n *\n * @public\n */\nexport const createAzureCommunicationCallWithChatAdapterFromClients = async ({\n callClient,\n callAgent,\n callLocator,\n chatClient,\n chatThreadClient,\n /* @conditional-compile-remove(video-background-effects) */\n callAdapterOptions,\n chatAdapterOptions\n}: AzureCommunicationCallWithChatAdapterFromClientArgs): Promise<CallWithChatAdapter> => {\n const createCallAdapterPromise = createAzureCommunicationCallAdapterFromClient(\n callClient,\n callAgent,\n callLocator,\n /* @conditional-compile-remove(video-background-effects) */\n callAdapterOptions\n );\n const createChatAdapterPromise = createAzureCommunicationChatAdapterFromClient(\n chatClient,\n chatThreadClient,\n chatAdapterOptions\n );\n const [callAdapter, chatAdapter] = await Promise.all([createCallAdapterPromise, createChatAdapterPromise]);\n return new AzureCommunicationCallWithChatAdapter(callAdapter, chatAdapter);\n};\n\n/**\n * Create a {@link CallWithChatAdapter} from the underlying adapters.\n *\n * This is an internal factory function used by browser tests to inject fake adapters for call and chat.\n *\n * @internal\n */\nexport const _createAzureCommunicationCallWithChatAdapterFromAdapters = (\n callAdapter: CallAdapter,\n chatAdapter: ChatAdapter\n): CallWithChatAdapter => new AzureCommunicationCallWithChatAdapter(callAdapter, chatAdapter);\n\nconst isTeamsMeetingLinkLocator = (\n locator: CallAndChatLocator | TeamsMeetingLinkLocator\n): locator is TeamsMeetingLinkLocator => {\n return 'meetingLink' in locator;\n};\n"]}
1
+ {"version":3,"file":"AzureCommunicationCallWithChatAdapter.js","sourceRoot":"","sources":["../../../../../../../../react-composites/src/composites/CallWithChatComposite/adapter/AzureCommunicationCallWithChatAdapter.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/* eslint-disable @typescript-eslint/no-unused-vars */ // REMOVE ONCE THIS FILE IS IMPLEMENTED\n/* eslint-disable @typescript-eslint/explicit-module-boundary-types */ // REMOVE ONCE THIS FILE IS IMPLEMENTED\n\nimport {\n AudioDeviceInfo,\n Call,\n CallAgent,\n GroupCallLocator,\n PermissionConstraints,\n PropertyChangedEvent,\n TeamsMeetingLinkLocator,\n StartCallOptions,\n VideoDeviceInfo\n} from '@azure/communication-calling';\n/* @conditional-compile-remove(close-captions) */\nimport { StartCaptionsOptions } from '@azure/communication-calling';\n/* @conditional-compile-remove(PSTN-calls) */\nimport { AddPhoneNumberOptions, DtmfTone } from '@azure/communication-calling';\nimport { CreateVideoStreamViewResult, VideoStreamOptions } from '@internal/react-components';\nimport { AttachmentDownloadResult } from '@internal/react-components';\n/* @conditional-compile-remove(file-sharing) */\nimport { AttachmentMetadata } from '@internal/react-components';\nimport {\n ParticipantsJoinedListener,\n ParticipantsLeftListener,\n IsMutedChangedListener,\n CallIdChangedListener,\n IsLocalScreenSharingActiveChangedListener,\n DisplayNameChangedListener,\n IsSpeakingChangedListener,\n CallAdapter,\n CallAdapterState,\n CallEndedListener\n} from '../../CallComposite';\nimport {\n MessageReceivedListener,\n MessageReadListener,\n ChatAdapter,\n ChatAdapterState,\n ParticipantsRemovedListener,\n ParticipantsAddedListener,\n MessageEditedListener,\n MessageDeletedListener\n} from '../../ChatComposite';\n/* @conditional-compile-remove(file-sharing) */\nimport { FileUploadManager } from '../../ChatComposite';\nimport { CallWithChatAdapter, CallWithChatEvent } from './CallWithChatAdapter';\nimport {\n callWithChatAdapterStateFromBackingStates,\n CallWithChatAdapterState,\n mergeCallAdapterStateIntoCallWithChatAdapterState,\n mergeChatAdapterStateIntoCallWithChatAdapterState\n} from '../state/CallWithChatAdapterState';\nimport {\n _createAzureCommunicationChatAdapterInner,\n createAzureCommunicationChatAdapterFromClient\n} from '../../ChatComposite/adapter/AzureCommunicationChatAdapter';\nimport { AzureCommunicationChatAdapterOptions } from '../../ChatComposite/adapter/AzureCommunicationChatAdapter';\nimport { EventEmitter } from 'events';\nimport { CommunicationTokenCredential, CommunicationUserIdentifier } from '@azure/communication-common';\n/* @conditional-compile-remove(PSTN-calls) */\nimport {\n CommunicationIdentifier,\n isCommunicationUserIdentifier,\n PhoneNumberIdentifier\n} from '@azure/communication-common';\nimport { getChatThreadFromTeamsLink } from './parseTeamsUrl';\nimport { AdapterError } from '../../common/adapters';\n\n/* @conditional-compile-remove(teams-adhoc-call) */\nimport { CallParticipantsLocator } from '../../CallComposite/adapter/AzureCommunicationCallAdapter';\n\nimport { _createAzureCommunicationCallAdapterInner } from '../../CallComposite/adapter/AzureCommunicationCallAdapter';\n\nimport {\n CallAdapterLocator,\n createAzureCommunicationCallAdapterFromClient\n} from '../../CallComposite/adapter/AzureCommunicationCallAdapter';\nimport { StatefulCallClient } from '@internal/calling-stateful-client';\nimport { StatefulChatClient } from '@internal/chat-stateful-client';\nimport { ChatThreadClient } from '@azure/communication-chat';\nimport { useEffect, useRef, useState } from 'react';\nimport { _toCommunicationIdentifier, _TelemetryImplementationHint } from '@internal/acs-ui-common';\nimport { JoinCallOptions } from '../../CallComposite/adapter/CallAdapter';\n/* @conditional-compile-remove(video-background-effects) */\nimport { AzureCommunicationCallAdapterOptions } from '../../CallComposite/adapter/AzureCommunicationCallAdapter';\n/* @conditional-compile-remove(close-captions) */\nimport {\n IsCaptionsActiveChangedListener,\n CaptionsReceivedListener,\n IsCaptionLanguageChangedListener,\n IsSpokenLanguageChangedListener\n} from '../../CallComposite/adapter/CallAdapter';\n/* @conditional-compile-remove(capabilities) */\nimport { CapabilitiesChangedListener } from '../../CallComposite/adapter/CallAdapter';\n/* @conditional-compile-remove(video-background-effects) */\nimport { VideoBackgroundImage, VideoBackgroundEffect } from '../../CallComposite';\n/* @conditional-compile-remove(end-of-call-survey) */\nimport { CallSurvey, CallSurveyResponse } from '@azure/communication-calling';\n\ntype CallWithChatAdapterStateChangedHandler = (newState: CallWithChatAdapterState) => void;\n\n/** Context of Call with Chat, which is a centralized context for all state updates */\nclass CallWithChatContext {\n private emitter = new EventEmitter();\n private state: CallWithChatAdapterState;\n\n constructor(clientState: CallWithChatAdapterState, maxListeners = 50) {\n this.state = clientState;\n this.emitter.setMaxListeners(maxListeners);\n }\n\n public onStateChange(handler: CallWithChatAdapterStateChangedHandler): void {\n this.emitter.on('stateChanged', handler);\n }\n\n public offStateChange(handler: CallWithChatAdapterStateChangedHandler): void {\n this.emitter.off('stateChanged', handler);\n }\n\n public setState(state: CallWithChatAdapterState): void {\n this.state = state;\n this.emitter.emit('stateChanged', this.state);\n }\n\n public getState(): CallWithChatAdapterState {\n return this.state;\n }\n\n public updateClientState(clientState: CallWithChatAdapterState): void {\n this.setState(clientState);\n }\n\n public updateClientStateWithChatState(chatAdapterState: ChatAdapterState): void {\n this.updateClientState(mergeChatAdapterStateIntoCallWithChatAdapterState(this.state, chatAdapterState));\n }\n\n public updateClientStateWithCallState(callAdapterState: CallAdapterState): void {\n this.updateClientState(mergeCallAdapterStateIntoCallWithChatAdapterState(this.state, callAdapterState));\n }\n}\n\n/**\n * CallWithChat adapter backed by Azure Communication Services.\n * Created for easy use with the {@link CallWithChatComposite}.\n */\nexport class AzureCommunicationCallWithChatAdapter implements CallWithChatAdapter {\n private callAdapter: CallAdapter;\n private chatAdapter: ChatAdapter;\n private context: CallWithChatContext;\n private onChatStateChange: (newChatAdapterState: ChatAdapterState) => void;\n private onCallStateChange: (newChatAdapterState: CallAdapterState) => void;\n\n constructor(callAdapter: CallAdapter, chatAdapter: ChatAdapter) {\n this.bindPublicMethods();\n this.callAdapter = callAdapter;\n this.chatAdapter = chatAdapter;\n this.context = new CallWithChatContext(callWithChatAdapterStateFromBackingStates(callAdapter, chatAdapter));\n\n const onChatStateChange = (newChatAdapterState: ChatAdapterState): void => {\n this.context.updateClientStateWithChatState(newChatAdapterState);\n };\n this.chatAdapter.onStateChange(onChatStateChange);\n this.onChatStateChange = onChatStateChange;\n\n const onCallStateChange = (newCallAdapterState: CallAdapterState): void => {\n this.context.updateClientStateWithCallState(newCallAdapterState);\n };\n this.callAdapter.onStateChange(onCallStateChange);\n this.onCallStateChange = onCallStateChange;\n }\n\n private bindPublicMethods(): void {\n this.joinCall.bind(this);\n this.leaveCall.bind(this);\n this.startCall.bind(this);\n this.onStateChange.bind(this);\n this.offStateChange.bind(this);\n this.getState.bind(this);\n this.dispose.bind(this);\n this.setCamera.bind(this);\n this.setMicrophone.bind(this);\n this.setSpeaker.bind(this);\n this.askDevicePermission.bind(this);\n this.queryCameras.bind(this);\n this.queryMicrophones.bind(this);\n this.querySpeakers.bind(this);\n this.startCamera.bind(this);\n this.stopCamera.bind(this);\n this.mute.bind(this);\n this.unmute.bind(this);\n this.startScreenShare.bind(this);\n this.stopScreenShare.bind(this);\n /* @conditional-compile-remove(raise-hand) */\n this.raiseHand.bind(this);\n /* @conditional-compile-remove(raise-hand) */\n this.lowerHand.bind(this);\n this.removeParticipant.bind(this);\n this.createStreamView.bind(this);\n this.disposeStreamView.bind(this);\n this.disposeScreenShareStreamView.bind(this);\n this.fetchInitialData.bind(this);\n this.sendMessage.bind(this);\n this.sendReadReceipt.bind(this);\n this.sendTypingIndicator.bind(this);\n this.loadPreviousChatMessages.bind(this);\n this.updateMessage.bind(this);\n this.deleteMessage.bind(this);\n this.on.bind(this);\n this.off.bind(this);\n /* @conditional-compile-remove(file-sharing) */\n this.registerActiveFileUploads = this.registerActiveFileUploads.bind(this);\n /* @conditional-compile-remove(file-sharing) */\n this.registerCompletedFileUploads = this.registerCompletedFileUploads.bind(this);\n /* @conditional-compile-remove(file-sharing) */\n this.clearFileUploads = this.clearFileUploads.bind(this);\n /* @conditional-compile-remove(file-sharing) */\n this.cancelFileUpload = this.cancelFileUpload.bind(this);\n /* @conditional-compile-remove(file-sharing) */\n this.updateFileUploadProgress = this.updateFileUploadProgress.bind(this);\n /* @conditional-compile-remove(file-sharing) */\n this.updateFileUploadErrorMessage = this.updateFileUploadErrorMessage.bind(this);\n /* @conditional-compile-remove(file-sharing) */\n this.updateFileUploadMetadata = this.updateFileUploadMetadata.bind(this);\n\n this.downloadAttachments = this.downloadAttachments.bind(this);\n /* @conditional-compile-remove(PSTN-calls) */\n this.holdCall.bind(this);\n /* @conditional-compile-remove(PSTN-calls) */\n this.resumeCall.bind(this);\n /* @conditional-compile-remove(PSTN-calls) */\n this.addParticipant.bind(this);\n /* @conditional-compile-remove(PSTN-calls) */\n this.sendDtmfTone.bind(this);\n /* @conditional-compile-remove(unsupported-browser) */\n this.allowUnsupportedBrowserVersion.bind(this);\n /* @conditional-compile-remove(close-captions) */ {\n this.startCaptions.bind(this);\n this.stopCaptions.bind(this);\n this.setSpokenLanguage.bind(this);\n this.setCaptionLanguage.bind(this);\n }\n /* @conditional-compile-remove(video-background-effects) */\n this.startVideoBackgroundEffect.bind(this);\n /* @conditional-compile-remove(video-background-effects) */\n this.stopVideoBackgroundEffects.bind(this);\n /* @conditional-compile-remove(video-background-effects) */\n this.updateBackgroundPickerImages.bind(this);\n }\n\n /** Join existing Call. */\n public joinCall(options?: boolean | JoinCallOptions): Call | undefined {\n if (typeof options === 'boolean') {\n return this.callAdapter.joinCall(options);\n } else {\n return this.callAdapter.joinCall(options);\n }\n }\n /** Leave current Call. */\n public async leaveCall(forEveryone?: boolean): Promise<void> {\n // Only remove self from the GroupCall. Contoso must manage access to Chat.\n await this.callAdapter.leaveCall(forEveryone);\n }\n /** Start a new Call. */\n public startCall(\n participants: string[] | /* @conditional-compile-remove(PSTN-calls) */ CommunicationIdentifier[],\n options?: StartCallOptions\n ): Call | undefined {\n let communicationParticipants = participants;\n /* @conditional-compile-remove(PSTN-calls) */\n communicationParticipants = participants.map(_toCommunicationIdentifier);\n return this.callAdapter.startCall(communicationParticipants, options);\n }\n /**\n * Subscribe to state change events.\n * @param handler - handler to be called when the state changes. This is passed the new state.\n */\n public onStateChange(handler: (state: CallWithChatAdapterState) => void): void {\n this.context.onStateChange(handler);\n }\n /**\n * Unsubscribe to state change events.\n * @param handler - handler to be no longer called when state changes.\n */\n public offStateChange(handler: (state: CallWithChatAdapterState) => void): void {\n this.context.offStateChange(handler);\n }\n /** Get current Call and Chat state. */\n public getState(): CallWithChatAdapterState {\n return this.context.getState();\n }\n /** Dispose of the current CallWithChatAdapter. */\n public dispose(): void {\n this.chatAdapter.offStateChange(this.onChatStateChange);\n this.callAdapter.offStateChange(this.onCallStateChange);\n\n this.chatAdapter.dispose();\n this.callAdapter.dispose();\n }\n /** Remove a participant from the Call only. */\n public async removeParticipant(\n userId: string | /* @conditional-compile-remove(PSTN-calls) */ CommunicationIdentifier\n ): Promise<void> {\n let participant = userId;\n /* @conditional-compile-remove(PSTN-calls) */\n participant = _toCommunicationIdentifier(userId);\n await this.callAdapter.removeParticipant(participant);\n }\n public async setCamera(device: VideoDeviceInfo, options?: VideoStreamOptions): Promise<void> {\n await this.callAdapter.setCamera(device, options);\n }\n /** Set the microphone to be used in the Call. */\n public async setMicrophone(device: AudioDeviceInfo): Promise<void> {\n await this.callAdapter.setMicrophone(device);\n }\n /** Set the speaker to be used in the Call. */\n public async setSpeaker(device: AudioDeviceInfo): Promise<void> {\n await this.callAdapter.setSpeaker(device);\n }\n public async askDevicePermission(constraints: PermissionConstraints): Promise<void> {\n await this.callAdapter.askDevicePermission(constraints);\n }\n /** Query for available cameras. */\n public async queryCameras(): Promise<VideoDeviceInfo[]> {\n return await this.callAdapter.queryCameras();\n }\n /** Query for available microphones. */\n public async queryMicrophones(): Promise<AudioDeviceInfo[]> {\n return await this.callAdapter.queryMicrophones();\n }\n /** Query for available speakers. */\n public async querySpeakers(): Promise<AudioDeviceInfo[]> {\n return await this.callAdapter.querySpeakers();\n }\n /** Start the camera for the user in the Call. */\n public async startCamera(options?: VideoStreamOptions): Promise<void> {\n await this.callAdapter.startCamera(options);\n }\n /** Stop the camera for the user in the Call. */\n public async stopCamera(): Promise<void> {\n await this.callAdapter.stopCamera();\n }\n /** Mute the user in the Call. */\n public async mute(): Promise<void> {\n await this.callAdapter.mute();\n }\n /** Unmute the user in the Call. */\n public async unmute(): Promise<void> {\n await this.callAdapter.unmute();\n }\n /** Trigger the user to start screen share. */\n public async startScreenShare(): Promise<void> {\n await this.callAdapter.startScreenShare();\n }\n /** Stop the current active screen share. */\n public async stopScreenShare(): Promise<void> {\n await this.callAdapter.stopScreenShare();\n }\n /* @conditional-compile-remove(raise-hand) */\n /** Raise hand for local user. */\n public async raiseHand(): Promise<void> {\n await this.callAdapter.raiseHand();\n }\n /* @conditional-compile-remove(raise-hand) */\n /** Lower hand for local user. */\n public async lowerHand(): Promise<void> {\n await this.callAdapter.lowerHand();\n }\n /** Create a stream view for a remote participants video feed. */\n public async createStreamView(\n remoteUserId?: string,\n options?: VideoStreamOptions\n ): Promise<void | CreateVideoStreamViewResult> {\n return await this.callAdapter.createStreamView(remoteUserId, options);\n }\n /** Dispose of a created stream view of a remote participants video feed. */\n public async disposeStreamView(remoteUserId?: string, options?: VideoStreamOptions): Promise<void> {\n await this.callAdapter.disposeStreamView(remoteUserId, options);\n }\n /** Dispose of a remote screen share */\n public async disposeScreenShareStreamView(remoteUserId: string): Promise<void> {\n await this.callAdapter.disposeScreenShareStreamView(remoteUserId);\n }\n /** Dispose of a remote video stream */\n public async disposeRemoteVideoStreamView(remoteUserId: string): Promise<void> {\n await this.callAdapter.disposeRemoteVideoStreamView(remoteUserId);\n }\n /** Dispose of the local video stream */\n public async disposeLocalVideoStreamView(): Promise<void> {\n await this.callAdapter.disposeLocalVideoStreamView();\n }\n /** Fetch initial Call and Chat data such as chat messages. */\n public async fetchInitialData(): Promise<void> {\n await this.chatAdapter.fetchInitialData();\n }\n /** Send a chat message. */\n public async sendMessage(content: string): Promise<void> {\n await this.chatAdapter.sendMessage(content);\n }\n /** Send a chat read receipt. */\n public async sendReadReceipt(chatMessageId: string): Promise<void> {\n await this.chatAdapter.sendReadReceipt(chatMessageId);\n }\n /** Send an isTyping indicator. */\n public async sendTypingIndicator(): Promise<void> {\n await this.chatAdapter.sendTypingIndicator();\n }\n /** Load previous Chat messages. */\n public async loadPreviousChatMessages(messagesToLoad: number): Promise<boolean> {\n return await this.chatAdapter.loadPreviousChatMessages(messagesToLoad);\n }\n /** Update an existing message. */\n public async updateMessage(\n messageId: string,\n content: string,\n metadata?: Record<string, string>,\n options?: {\n /* @conditional-compile-remove(file-sharing) */\n attachmentMetadata?: AttachmentMetadata[];\n }\n ): Promise<void> {\n return await this.chatAdapter.updateMessage(\n messageId,\n content,\n metadata,\n /* @conditional-compile-remove(file-sharing) */ options\n );\n }\n /** Delete an existing message. */\n public async deleteMessage(messageId: string): Promise<void> {\n return await this.chatAdapter.deleteMessage(messageId);\n }\n /* @conditional-compile-remove(file-sharing) */\n public registerActiveFileUploads = (files: File[]): FileUploadManager[] => {\n return this.chatAdapter.registerActiveFileUploads(files);\n };\n /* @conditional-compile-remove(file-sharing) */\n public registerCompletedFileUploads = (metadata: AttachmentMetadata[]): FileUploadManager[] => {\n return this.chatAdapter.registerCompletedFileUploads(metadata);\n };\n /* @conditional-compile-remove(file-sharing) */\n public clearFileUploads = (): void => {\n this.chatAdapter.clearFileUploads();\n };\n /* @conditional-compile-remove(file-sharing) */\n public cancelFileUpload = (id: string): void => {\n this.chatAdapter.cancelFileUpload(id);\n };\n /* @conditional-compile-remove(file-sharing) */\n public updateFileUploadProgress = (id: string, progress: number): void => {\n this.chatAdapter.updateFileUploadProgress(id, progress);\n };\n /* @conditional-compile-remove(file-sharing) */\n public updateFileUploadErrorMessage = (id: string, errorMessage: string): void => {\n this.chatAdapter.updateFileUploadErrorMessage(id, errorMessage);\n };\n /* @conditional-compile-remove(file-sharing) */\n public updateFileUploadMetadata = (id: string, metadata: AttachmentMetadata): void => {\n this.chatAdapter.updateFileUploadMetadata(id, metadata);\n };\n async downloadAttachments(options: { attachmentUrls: Record<string, string> }): Promise<AttachmentDownloadResult[]> {\n return await this.chatAdapter.downloadAttachments(options);\n }\n /* @conditional-compile-remove(PSTN-calls) */\n public async holdCall(): Promise<void> {\n return await this.callAdapter.holdCall();\n }\n /* @conditional-compile-remove(PSTN-calls) */\n public async resumeCall(): Promise<void> {\n return await this.callAdapter.resumeCall();\n }\n /* @conditional-compile-remove(PSTN-calls) */\n public async addParticipant(participant: PhoneNumberIdentifier, options?: AddPhoneNumberOptions): Promise<void>;\n /* @conditional-compile-remove(PSTN-calls) */\n public async addParticipant(participant: CommunicationUserIdentifier): Promise<void>;\n /* @conditional-compile-remove(PSTN-calls) */\n public async addParticipant(\n participant: PhoneNumberIdentifier | CommunicationUserIdentifier,\n options?: AddPhoneNumberOptions\n ): Promise<void> {\n if (isCommunicationUserIdentifier(participant)) {\n return await this.callAdapter.addParticipant(participant);\n } else {\n return await this.callAdapter.addParticipant(participant, options);\n }\n }\n\n /* @conditional-compile-remove(PSTN-calls) */\n public async sendDtmfTone(dtmfTone: DtmfTone): Promise<void> {\n return await this.callAdapter.sendDtmfTone(dtmfTone);\n }\n\n /* @conditional-compile-remove(unsupported-browser) */\n public allowUnsupportedBrowserVersion(): void {\n return this.callAdapter.allowUnsupportedBrowserVersion();\n }\n\n /* @conditional-compile-remove(close-captions) */\n public async startCaptions(options?: StartCaptionsOptions): Promise<void> {\n await this.callAdapter.startCaptions(options);\n }\n\n /* @conditional-compile-remove(close-captions) */\n public async stopCaptions(): Promise<void> {\n await this.callAdapter.stopCaptions();\n }\n\n /* @conditional-compile-remove(close-captions) */\n public async setCaptionLanguage(language: string): Promise<void> {\n await this.callAdapter.setCaptionLanguage(language);\n }\n\n /* @conditional-compile-remove(close-captions) */\n public async setSpokenLanguage(language: string): Promise<void> {\n await this.callAdapter.setSpokenLanguage(language);\n }\n\n /* @conditional-compile-remove(video-background-effects) */\n public async startVideoBackgroundEffect(videoBackgroundEffect: VideoBackgroundEffect): Promise<void> {\n await this.callAdapter.startVideoBackgroundEffect(videoBackgroundEffect);\n }\n\n /* @conditional-compile-remove(video-background-effects) */\n public async stopVideoBackgroundEffects(): Promise<void> {\n return await this.callAdapter.stopVideoBackgroundEffects();\n }\n\n /* @conditional-compile-remove(video-background-effects) */\n public updateBackgroundPickerImages(backgroundImages: VideoBackgroundImage[]): void {\n return this.callAdapter.updateBackgroundPickerImages(backgroundImages);\n }\n\n /* @conditional-compile-remove(video-background-effects) */\n public updateSelectedVideoBackgroundEffect(selectedVideoBackground: VideoBackgroundEffect): void {\n return this.callAdapter.updateSelectedVideoBackgroundEffect(selectedVideoBackground);\n }\n /* @conditional-compile-remove(end-of-call-survey) */\n public async submitSurvey(survey: CallSurvey): Promise<CallSurveyResponse | undefined> {\n return this.callAdapter.submitSurvey(survey);\n }\n\n on(event: 'callParticipantsJoined', listener: ParticipantsJoinedListener): void;\n on(event: 'callParticipantsLeft', listener: ParticipantsLeftListener): void;\n on(event: 'callEnded', listener: CallEndedListener): void;\n on(event: 'callError', listener: (e: AdapterError) => void): void;\n on(event: 'isMutedChanged', listener: IsMutedChangedListener): void;\n on(event: 'callIdChanged', listener: CallIdChangedListener): void;\n on(event: 'isLocalScreenSharingActiveChanged', listener: IsLocalScreenSharingActiveChangedListener): void;\n on(event: 'displayNameChanged', listener: DisplayNameChangedListener): void;\n on(event: 'isSpeakingChanged', listener: IsSpeakingChangedListener): void;\n on(event: 'messageReceived', listener: MessageReceivedListener): void;\n on(event: 'messageEdited', listener: MessageEditedListener): void;\n on(event: 'messageDeleted', listener: MessageDeletedListener): void;\n on(event: 'messageSent', listener: MessageReceivedListener): void;\n on(event: 'messageRead', listener: MessageReadListener): void;\n on(event: 'chatParticipantsAdded', listener: ParticipantsAddedListener): void;\n on(event: 'chatParticipantsRemoved', listener: ParticipantsRemovedListener): void;\n on(event: 'selectedMicrophoneChanged', listener: PropertyChangedEvent): void;\n on(event: 'selectedSpeakerChanged', listener: PropertyChangedEvent): void;\n on(event: 'chatError', listener: (e: AdapterError) => void): void;\n /* @conditional-compile-remove(close-captions) */\n on(event: 'captionsReceived', listener: CaptionsReceivedListener): void;\n /* @conditional-compile-remove(close-captions) */\n on(event: 'isCaptionsActiveChanged', listener: IsCaptionsActiveChangedListener): void;\n /* @conditional-compile-remove(close-captions) */\n on(event: 'isCaptionLanguageChanged', listener: IsCaptionLanguageChangedListener): void;\n /* @conditional-compile-remove(close-captions) */\n on(event: 'isSpokenLanguageChanged', listener: IsSpokenLanguageChangedListener): void;\n /* @conditional-compile-remove(capabilities) */\n on(event: 'capabilitiesChanged', listener: CapabilitiesChangedListener): void;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n on(event: CallWithChatEvent, listener: any): void {\n switch (event) {\n case 'callParticipantsJoined':\n this.callAdapter.on('participantsJoined', listener);\n break;\n case 'callParticipantsLeft':\n this.callAdapter.on('participantsLeft', listener);\n break;\n case 'callEnded':\n this.callAdapter.on('callEnded', listener);\n break;\n case 'isMutedChanged':\n this.callAdapter.on('isMutedChanged', listener);\n break;\n case 'callIdChanged':\n this.callAdapter.on('callIdChanged', listener);\n break;\n case 'isLocalScreenSharingActiveChanged':\n this.callAdapter.on('isLocalScreenSharingActiveChanged', listener);\n break;\n case 'displayNameChanged':\n this.callAdapter.on('displayNameChanged', listener);\n break;\n case 'isSpeakingChanged':\n this.callAdapter.on('isSpeakingChanged', listener);\n break;\n case 'selectedMicrophoneChanged':\n this.callAdapter.on('selectedMicrophoneChanged', listener);\n break;\n case 'selectedSpeakerChanged':\n this.callAdapter.on('selectedSpeakerChanged', listener);\n break;\n /* @conditional-compile-remove(close-captions) */\n case 'captionsReceived':\n this.callAdapter.on('captionsReceived', listener);\n break;\n /* @conditional-compile-remove(close-captions) */\n case 'isCaptionsActiveChanged':\n this.callAdapter.on('isCaptionsActiveChanged', listener);\n break;\n /* @conditional-compile-remove(close-captions) */\n case 'isCaptionLanguageChanged':\n this.callAdapter.on('isCaptionLanguageChanged', listener);\n break;\n /* @conditional-compile-remove(close-captions) */\n case 'isSpokenLanguageChanged':\n this.callAdapter.on('isSpokenLanguageChanged', listener);\n break;\n case 'messageReceived':\n this.chatAdapter.on('messageReceived', listener);\n break;\n case 'messageEdited':\n this.chatAdapter.on('messageEdited', listener);\n break;\n case 'messageDeleted':\n this.chatAdapter.on('messageDeleted', listener);\n break;\n case 'messageSent':\n this.chatAdapter.on('messageSent', listener);\n break;\n case 'messageRead':\n this.chatAdapter.on('messageRead', listener);\n break;\n case 'chatParticipantsAdded':\n this.chatAdapter.on('participantsAdded', listener);\n break;\n case 'chatParticipantsRemoved':\n this.chatAdapter.on('participantsRemoved', listener);\n break;\n case 'callError':\n this.callAdapter.on('error', listener);\n break;\n case 'chatError':\n this.chatAdapter.on('error', listener);\n break;\n\n default:\n throw `Unknown AzureCommunicationCallWithChatAdapter Event: ${event}`;\n }\n }\n\n off(event: 'callParticipantsJoined', listener: ParticipantsJoinedListener): void;\n off(event: 'callParticipantsLeft', listener: ParticipantsLeftListener): void;\n off(event: 'callEnded', listener: CallEndedListener): void;\n off(event: 'callError', listener: (e: AdapterError) => void): void;\n off(event: 'isMutedChanged', listener: IsMutedChangedListener): void;\n off(event: 'callIdChanged', listener: CallIdChangedListener): void;\n off(event: 'isLocalScreenSharingActiveChanged', listener: IsLocalScreenSharingActiveChangedListener): void;\n off(event: 'displayNameChanged', listener: DisplayNameChangedListener): void;\n off(event: 'isSpeakingChanged', listener: IsSpeakingChangedListener): void;\n off(event: 'selectedMicrophoneChanged', listener: PropertyChangedEvent): void;\n off(event: 'selectedSpeakerChanged', listener: PropertyChangedEvent): void;\n off(event: 'messageReceived', listener: MessageReceivedListener): void;\n off(event: 'messageEdited', listener: MessageEditedListener): void;\n off(event: 'messageDeleted', listener: MessageDeletedListener): void;\n off(event: 'messageSent', listener: MessageReceivedListener): void;\n off(event: 'messageRead', listener: MessageReadListener): void;\n off(event: 'chatParticipantsAdded', listener: ParticipantsAddedListener): void;\n off(event: 'chatParticipantsRemoved', listener: ParticipantsRemovedListener): void;\n off(event: 'chatError', listener: (e: AdapterError) => void): void;\n /* @conditional-compile-remove(close-captions) */\n off(event: 'captionsReceived', listener: CaptionsReceivedListener): void;\n /* @conditional-compile-remove(close-captions) */\n off(event: 'isCaptionsActiveChanged', listener: IsCaptionsActiveChangedListener): void;\n /* @conditional-compile-remove(close-captions) */\n off(event: 'isCaptionLanguageChanged', listener: IsCaptionLanguageChangedListener): void;\n /* @conditional-compile-remove(close-captions) */\n off(event: 'isSpokenLanguageChanged', listener: IsSpokenLanguageChangedListener): void;\n /* @conditional-compile-remove(capabilities) */\n off(event: 'capabilitiesChanged', listener: CapabilitiesChangedListener): void;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n off(event: CallWithChatEvent, listener: any): void {\n switch (event as unknown) {\n case 'callParticipantsJoined':\n this.callAdapter.off('participantsJoined', listener);\n break;\n case 'callParticipantsLeft':\n this.callAdapter.off('participantsLeft', listener);\n break;\n case 'callEnded':\n this.callAdapter.off('callEnded', listener);\n break;\n case 'isMutedChanged':\n this.callAdapter.off('isMutedChanged', listener);\n break;\n case 'callIdChanged':\n this.callAdapter.off('callIdChanged', listener);\n break;\n case 'isLocalScreenSharingActiveChanged':\n this.callAdapter.off('isLocalScreenSharingActiveChanged', listener);\n break;\n case 'displayNameChanged':\n this.callAdapter.off('displayNameChanged', listener);\n break;\n case 'isSpeakingChanged':\n this.callAdapter.off('isSpeakingChanged', listener);\n break;\n case 'selectedMicrophoneChanged':\n this.callAdapter.off('selectedMicrophoneChanged', listener);\n break;\n case 'selectedSpeakerChanged':\n this.callAdapter.off('selectedSpeakerChanged', listener);\n break;\n /* @conditional-compile-remove(close-captions) */\n case 'captionsReceived':\n this.callAdapter.off('captionsReceived', listener);\n break;\n /* @conditional-compile-remove(close-captions) */\n case 'isCaptionsActiveChanged':\n this.callAdapter.off('isCaptionsActiveChanged', listener);\n break;\n /* @conditional-compile-remove(close-captions) */\n case 'isCaptionLanguageChanged':\n this.callAdapter.off('isCaptionLanguageChanged', listener);\n break;\n /* @conditional-compile-remove(close-captions) */\n case 'isSpokenLanguageChanged':\n this.callAdapter.off('isSpokenLanguageChanged', listener);\n break;\n case 'messageReceived':\n this.chatAdapter.off('messageReceived', listener);\n break;\n case 'messageEdited':\n this.chatAdapter.off('messageEdited', listener);\n break;\n case 'messageDeleted':\n this.chatAdapter.off('messageDeleted', listener);\n break;\n case 'messageSent':\n this.chatAdapter.off('messageSent', listener);\n break;\n case 'messageRead':\n this.chatAdapter.off('messageRead', listener);\n break;\n case 'chatParticipantsAdded':\n this.chatAdapter.off('participantsAdded', listener);\n break;\n case 'chatParticipantsRemoved':\n this.chatAdapter.off('participantsRemoved', listener);\n break;\n case 'callError':\n this.callAdapter.off('error', listener);\n break;\n case 'chatError':\n this.chatAdapter.off('error', listener);\n break;\n default:\n throw `Unknown AzureCommunicationCallWithChatAdapter Event: ${event}`;\n }\n }\n}\n\n/**\n * Arguments for use in {@link createAzureCommunicationCallWithChatAdapter} to join a Call with an associated Chat thread.\n *\n * @public\n */\nexport interface CallAndChatLocator {\n /** Locator used by {@link createAzureCommunicationCallWithChatAdapter} to locate the call to join */\n callLocator: GroupCallLocator | /* @conditional-compile-remove(teams-adhoc-call) */ CallParticipantsLocator;\n /** Chat thread ID used by {@link createAzureCommunicationCallWithChatAdapter} to locate the chat thread to join */\n chatThreadId: string;\n}\n\n/**\n * Arguments for {@link createAzureCommunicationCallWithChatAdapter}\n *\n * @public\n */\nexport type AzureCommunicationCallWithChatAdapterArgs = {\n endpoint: string;\n userId: CommunicationUserIdentifier;\n displayName: string;\n credential: CommunicationTokenCredential;\n locator: CallAndChatLocator | TeamsMeetingLinkLocator;\n /* @conditional-compile-remove(PSTN-calls) */\n alternateCallerId?: string;\n /* @conditional-compile-remove(video-background-effects) */\n callAdapterOptions?: AzureCommunicationCallAdapterOptions;\n};\n\n/**\n * Create a CallWithChatAdapter backed by Azure Communication services\n * to plug into the {@link CallWithChatComposite}.\n *\n * @public\n */\nexport const createAzureCommunicationCallWithChatAdapter = async ({\n userId,\n displayName,\n credential,\n endpoint,\n locator,\n /* @conditional-compile-remove(PSTN-calls) */ alternateCallerId,\n /* @conditional-compile-remove(video-background-effects) */ callAdapterOptions\n}: AzureCommunicationCallWithChatAdapterArgs): Promise<CallWithChatAdapter> => {\n const callAdapterLocator = isTeamsMeetingLinkLocator(locator) ? locator : locator.callLocator;\n const createCallAdapterPromise = _createAzureCommunicationCallAdapterInner({\n userId,\n displayName,\n credential,\n locator: callAdapterLocator,\n /* @conditional-compile-remove(PSTN-calls) */ alternateCallerId,\n /* @conditional-compile-remove(video-background-effects) */ options: callAdapterOptions,\n telemetryImplementationHint: 'CallWithChat' as _TelemetryImplementationHint\n });\n\n const threadId = isTeamsMeetingLinkLocator(locator)\n ? getChatThreadFromTeamsLink(locator.meetingLink)\n : locator.chatThreadId;\n const createChatAdapterPromise = _createAzureCommunicationChatAdapterInner(\n endpoint,\n userId,\n displayName,\n credential,\n threadId,\n 'CallWithChat' as _TelemetryImplementationHint\n );\n\n const [callAdapter, chatAdapter] = await Promise.all([createCallAdapterPromise, createChatAdapterPromise]);\n return new AzureCommunicationCallWithChatAdapter(callAdapter, chatAdapter);\n};\n\n/**\n * A custom React hook to simplify the creation of {@link CallWithChatAdapter}.\n *\n * Similar to {@link createAzureCommunicationCallWithChatAdapter}, but takes care of asynchronous\n * creation of the adapter internally.\n *\n * Allows arguments to be undefined so that you can respect the rule-of-hooks and pass in arguments\n * as they are created. The adapter is only created when all arguments are defined.\n *\n * Note that you must memoize the arguments to avoid recreating adapter on each render.\n * See storybook for typical usage examples.\n *\n * @public\n */\nexport const useAzureCommunicationCallWithChatAdapter = (\n /**\n * Arguments to be passed to {@link createAzureCommunicationCallWithChatAdapter}.\n *\n * Allows arguments to be undefined so that you can respect the rule-of-hooks and pass in arguments\n * as they are created. The adapter is only created when all arguments are defined.\n */\n args: Partial<AzureCommunicationCallWithChatAdapterArgs>,\n /**\n * Optional callback to modify the adapter once it is created.\n *\n * If set, must return the modified adapter.\n */\n afterCreate?: (adapter: CallWithChatAdapter) => Promise<CallWithChatAdapter>,\n /**\n * Optional callback called before the adapter is disposed.\n *\n * This is useful for clean up tasks, e.g., leaving any ongoing calls.\n */\n beforeDispose?: (adapter: CallWithChatAdapter) => Promise<void>\n): CallWithChatAdapter | undefined => {\n const {\n credential,\n displayName,\n endpoint,\n locator,\n userId,\n /* @conditional-compile-remove(PSTN-calls) */ alternateCallerId,\n /* @conditional-compile-remove(video-background-effects) */ callAdapterOptions\n } = args;\n\n // State update needed to rerender the parent component when a new adapter is created.\n const [adapter, setAdapter] = useState<CallWithChatAdapter | undefined>(undefined);\n // Ref needed for cleanup to access the old adapter created asynchronously.\n const adapterRef = useRef<CallWithChatAdapter | undefined>(undefined);\n const creatingAdapterRef = useRef<boolean>(false);\n\n const afterCreateRef = useRef<((adapter: CallWithChatAdapter) => Promise<CallWithChatAdapter>) | undefined>(\n undefined\n );\n const beforeDisposeRef = useRef<((adapter: CallWithChatAdapter) => Promise<void>) | undefined>(undefined);\n // These refs are updated on *each* render, so that the latest values\n // are used in the `useEffect` closures below.\n // Using a Ref ensures that new values for the callbacks do not trigger the\n // useEffect blocks, and a new adapter creation / distruction is not triggered.\n afterCreateRef.current = afterCreate;\n beforeDisposeRef.current = beforeDispose;\n\n useEffect(\n () => {\n if (!credential || !displayName || !endpoint || !locator || !userId) {\n return;\n }\n (async () => {\n if (adapterRef.current) {\n // Dispose the old adapter when a new one is created.\n //\n // This clean up function uses `adapterRef` because `adapter` can not be added to the dependency array of\n // this `useEffect` -- we do not want to trigger a new adapter creation because of the first adapter\n // creation.\n if (beforeDisposeRef.current) {\n await beforeDisposeRef.current(adapterRef.current);\n }\n adapterRef.current.dispose();\n adapterRef.current = undefined;\n }\n if (creatingAdapterRef.current) {\n console.warn(\n 'Adapter is already being created, please see storybook for more information: https://azure.github.io/communication-ui-library/?path=/story/troubleshooting--page'\n );\n return;\n }\n creatingAdapterRef.current = true;\n let newAdapter = await createAzureCommunicationCallWithChatAdapter({\n credential,\n displayName,\n endpoint,\n locator,\n userId,\n /* @conditional-compile-remove(PSTN-calls) */ alternateCallerId,\n /* @conditional-compile-remove(video-background-effects) */ callAdapterOptions\n });\n if (afterCreateRef.current) {\n newAdapter = await afterCreateRef.current(newAdapter);\n }\n adapterRef.current = newAdapter;\n setAdapter(newAdapter);\n })();\n },\n // Explicitly list all arguments so that caller doesn't have to memoize the `args` object.\n [\n adapterRef,\n afterCreateRef,\n /* @conditional-compile-remove(PSTN-calls) */ alternateCallerId,\n beforeDisposeRef,\n credential,\n displayName,\n endpoint,\n locator,\n userId,\n /* @conditional-compile-remove(video-background-effects) */ callAdapterOptions\n ]\n );\n\n // Dispose any existing adapter when the component unmounts.\n useEffect(() => {\n return () => {\n (async () => {\n if (adapterRef.current) {\n if (beforeDisposeRef.current) {\n await beforeDisposeRef.current(adapterRef.current);\n }\n adapterRef.current.dispose();\n adapterRef.current = undefined;\n }\n })();\n };\n }, []);\n\n return adapter;\n};\n\n/**\n * Arguments for {@link createAzureCommunicationCallWithChatAdapterFromClient}\n *\n * @public\n */\nexport type AzureCommunicationCallWithChatAdapterFromClientArgs = {\n callLocator: CallAdapterLocator | TeamsMeetingLinkLocator;\n callAgent: CallAgent;\n callClient: StatefulCallClient;\n chatClient: StatefulChatClient;\n chatThreadClient: ChatThreadClient;\n /* @conditional-compile-remove(video-background-effects) */\n callAdapterOptions?: AzureCommunicationCallAdapterOptions;\n chatAdapterOptions?: AzureCommunicationChatAdapterOptions;\n};\n\n/**\n * Create a {@link CallWithChatAdapter} using the provided {@link StatefulChatClient} and {@link StatefulCallClient}.\n *\n * Useful if you want to keep a reference to {@link StatefulChatClient} and {@link StatefulCallClient}.\n * Please note that chatThreadClient has to be created by StatefulChatClient via chatClient.getChatThreadClient(chatThreadId) API.\n * Consider using {@link createAzureCommunicationCallWithChatAdapter} for a simpler API.\n *\n * @public\n */\nexport const createAzureCommunicationCallWithChatAdapterFromClients = async ({\n callClient,\n callAgent,\n callLocator,\n chatClient,\n chatThreadClient,\n /* @conditional-compile-remove(video-background-effects) */\n callAdapterOptions,\n chatAdapterOptions\n}: AzureCommunicationCallWithChatAdapterFromClientArgs): Promise<CallWithChatAdapter> => {\n const createCallAdapterPromise = createAzureCommunicationCallAdapterFromClient(\n callClient,\n callAgent,\n callLocator,\n /* @conditional-compile-remove(video-background-effects) */\n callAdapterOptions\n );\n const createChatAdapterPromise = createAzureCommunicationChatAdapterFromClient(\n chatClient,\n chatThreadClient,\n chatAdapterOptions\n );\n const [callAdapter, chatAdapter] = await Promise.all([createCallAdapterPromise, createChatAdapterPromise]);\n return new AzureCommunicationCallWithChatAdapter(callAdapter, chatAdapter);\n};\n\n/**\n * Create a {@link CallWithChatAdapter} from the underlying adapters.\n *\n * This is an internal factory function used by browser tests to inject fake adapters for call and chat.\n *\n * @internal\n */\nexport const _createAzureCommunicationCallWithChatAdapterFromAdapters = (\n callAdapter: CallAdapter,\n chatAdapter: ChatAdapter\n): CallWithChatAdapter => new AzureCommunicationCallWithChatAdapter(callAdapter, chatAdapter);\n\nconst isTeamsMeetingLinkLocator = (\n locator: CallAndChatLocator | TeamsMeetingLinkLocator\n): locator is TeamsMeetingLinkLocator => {\n return 'meetingLink' in locator;\n};\n"]}
@@ -1,5 +1,5 @@
1
1
  import { CallIdChangedListener, DisplayNameChangedListener, IsMutedChangedListener, IsLocalScreenSharingActiveChangedListener, IsSpeakingChangedListener, ParticipantsJoinedListener, ParticipantsLeftListener, CallEndedListener } from '../../CallComposite';
2
- import { MessageReadListener, MessageReceivedListener, MessageSentListener, ParticipantsAddedListener, ParticipantsRemovedListener } from '../../ChatComposite';
2
+ import { MessageDeletedListener, MessageEditedListener, MessageReadListener, MessageReceivedListener, MessageSentListener, ParticipantsAddedListener, ParticipantsRemovedListener } from '../../ChatComposite';
3
3
  import { CallWithChatAdapterState } from '../state/CallWithChatAdapterState';
4
4
  import type { AdapterError, AdapterState, Disposable } from '../../common/adapters';
5
5
  import { AudioDeviceInfo, Call, PermissionConstraints, PropertyChangedEvent, StartCallOptions, VideoDeviceInfo } from '@azure/communication-calling';
@@ -432,12 +432,16 @@ export interface CallWithChatAdapterSubscriptions {
432
432
  off(event: 'isSpokenLanguageChanged', listener: IsSpokenLanguageChangedListener): void;
433
433
  off(event: 'capabilitiesChanged', listener: CapabilitiesChangedListener): void;
434
434
  on(event: 'messageReceived', listener: MessageReceivedListener): void;
435
+ on(event: 'messageEdited', listener: MessageEditedListener): void;
436
+ on(event: 'messageDeleted', listener: MessageDeletedListener): void;
435
437
  on(event: 'messageSent', listener: MessageSentListener): void;
436
438
  on(event: 'messageRead', listener: MessageReadListener): void;
437
439
  on(event: 'chatParticipantsAdded', listener: ParticipantsAddedListener): void;
438
440
  on(event: 'chatParticipantsRemoved', listener: ParticipantsRemovedListener): void;
439
441
  on(event: 'chatError', listener: (e: AdapterError) => void): void;
440
442
  off(event: 'messageReceived', listener: MessageReceivedListener): void;
443
+ off(event: 'messageEdited', listener: MessageEditedListener): void;
444
+ off(event: 'messageDeleted', listener: MessageDeletedListener): void;
441
445
  off(event: 'messageSent', listener: MessageSentListener): void;
442
446
  off(event: 'messageRead', listener: MessageReadListener): void;
443
447
  off(event: 'chatParticipantsAdded', listener: ParticipantsAddedListener): void;
@@ -456,5 +460,5 @@ export interface CallWithChatAdapter extends CallWithChatAdapterManagement, Adap
456
460
  *
457
461
  * @public
458
462
  */
459
- export type CallWithChatEvent = 'callError' | 'chatError' | 'callEnded' | 'isMutedChanged' | 'callIdChanged' | 'isLocalScreenSharingActiveChanged' | 'displayNameChanged' | 'isSpeakingChanged' | 'callParticipantsJoined' | 'callParticipantsLeft' | 'selectedMicrophoneChanged' | 'selectedSpeakerChanged' | /* @conditional-compile-remove(close-captions) */ 'isCaptionsActiveChanged' | /* @conditional-compile-remove(close-captions) */ 'captionsReceived' | /* @conditional-compile-remove(close-captions) */ 'isCaptionLanguageChanged' | /* @conditional-compile-remove(close-captions) */ 'isSpokenLanguageChanged' | /* @conditional-compile-remove(capabilities) */ 'capabilitiesChanged' | 'messageReceived' | 'messageSent' | 'messageRead' | 'chatParticipantsAdded' | 'chatParticipantsRemoved';
463
+ export type CallWithChatEvent = 'callError' | 'chatError' | 'callEnded' | 'isMutedChanged' | 'callIdChanged' | 'isLocalScreenSharingActiveChanged' | 'displayNameChanged' | 'isSpeakingChanged' | 'callParticipantsJoined' | 'callParticipantsLeft' | 'selectedMicrophoneChanged' | 'selectedSpeakerChanged' | /* @conditional-compile-remove(close-captions) */ 'isCaptionsActiveChanged' | /* @conditional-compile-remove(close-captions) */ 'captionsReceived' | /* @conditional-compile-remove(close-captions) */ 'isCaptionLanguageChanged' | /* @conditional-compile-remove(close-captions) */ 'isSpokenLanguageChanged' | /* @conditional-compile-remove(capabilities) */ 'capabilitiesChanged' | 'messageReceived' | 'messageEdited' | 'messageDeleted' | 'messageSent' | 'messageRead' | 'chatParticipantsAdded' | 'chatParticipantsRemoved';
460
464
  //# sourceMappingURL=CallWithChatAdapter.d.ts.map