@azure/communication-react 1.5.1-alpha-202306130014 → 1.5.1-alpha-202306150014
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/communication-react.d.ts +75 -11
- package/dist/dist-cjs/communication-react/index.js +161 -29
- package/dist/dist-cjs/communication-react/index.js.map +1 -1
- package/dist/dist-esm/acs-ui-common/src/telemetryVersion.js +1 -1
- package/dist/dist-esm/acs-ui-common/src/telemetryVersion.js.map +1 -1
- package/dist/dist-esm/calling-component-bindings/src/handlers/createCommonHandlers.d.ts +5 -0
- package/dist/dist-esm/calling-component-bindings/src/handlers/createCommonHandlers.js +36 -0
- package/dist/dist-esm/calling-component-bindings/src/handlers/createCommonHandlers.js.map +1 -1
- package/dist/dist-esm/calling-stateful-client/src/CallDeclarativeCommon.js +1 -1
- package/dist/dist-esm/calling-stateful-client/src/CallDeclarativeCommon.js.map +1 -1
- package/dist/dist-esm/react-components/src/components/InputBoxComponent.js +1 -1
- package/dist/dist-esm/react-components/src/components/InputBoxComponent.js.map +1 -1
- package/dist/dist-esm/react-components/src/components/TextFieldWithMention/TextFieldWithMention.js +8 -2
- package/dist/dist-esm/react-components/src/components/TextFieldWithMention/TextFieldWithMention.js.map +1 -1
- package/dist/dist-esm/react-components/src/components/VideoGallery.d.ts +9 -1
- package/dist/dist-esm/react-components/src/components/VideoGallery.js +4 -4
- package/dist/dist-esm/react-components/src/components/VideoGallery.js.map +1 -1
- package/dist/dist-esm/react-components/src/components/VideoTile.js +7 -3
- package/dist/dist-esm/react-components/src/components/VideoTile.js.map +1 -1
- package/dist/dist-esm/react-components/src/components/styles/SendBox.styles.js +2 -3
- package/dist/dist-esm/react-components/src/components/styles/SendBox.styles.js.map +1 -1
- package/dist/dist-esm/react-composites/src/Logger.d.ts +5 -0
- package/dist/dist-esm/react-composites/src/Logger.js +8 -0
- package/dist/dist-esm/react-composites/src/Logger.js.map +1 -0
- package/dist/dist-esm/react-composites/src/composites/CallComposite/CallComposite.js +0 -3
- package/dist/dist-esm/react-composites/src/composites/CallComposite/CallComposite.js.map +1 -1
- package/dist/dist-esm/react-composites/src/composites/CallComposite/adapter/AzureCommunicationCallAdapter.d.ts +11 -9
- package/dist/dist-esm/react-composites/src/composites/CallComposite/adapter/AzureCommunicationCallAdapter.js +52 -4
- package/dist/dist-esm/react-composites/src/composites/CallComposite/adapter/AzureCommunicationCallAdapter.js.map +1 -1
- package/dist/dist-esm/react-composites/src/composites/CallComposite/adapter/CallAdapter.d.ts +28 -1
- package/dist/dist-esm/react-composites/src/composites/CallComposite/adapter/CallAdapter.js.map +1 -1
- package/dist/dist-esm/react-composites/src/composites/CallComposite/adapter/OnFetchProfileCallback.js +1 -1
- package/dist/dist-esm/react-composites/src/composites/CallComposite/adapter/OnFetchProfileCallback.js.map +1 -1
- package/dist/dist-esm/react-composites/src/composites/CallComposite/hooks/useHandlers.js +7 -1
- package/dist/dist-esm/react-composites/src/composites/CallComposite/hooks/useHandlers.js.map +1 -1
- package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/CallPage.js +1 -1
- package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/CallPage.js.map +1 -1
- package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/TransferPage.js +7 -8
- package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/TransferPage.js.map +1 -1
- package/dist/dist-esm/react-composites/src/composites/CallComposite/styles/TransferPage.styles.d.ts +4 -0
- package/dist/dist-esm/react-composites/src/composites/CallComposite/styles/TransferPage.styles.js +4 -0
- package/dist/dist-esm/react-composites/src/composites/CallComposite/styles/TransferPage.styles.js.map +1 -1
- package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/AzureCommunicationCallWithChatAdapter.d.ts +6 -0
- package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/AzureCommunicationCallWithChatAdapter.js +19 -0
- package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/AzureCommunicationCallWithChatAdapter.js.map +1 -1
- package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/CallWithChatAdapter.d.ts +25 -0
- package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/CallWithChatAdapter.js.map +1 -1
- package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/CallWithChatBackedCallAdapter.d.ts +3 -0
- package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/CallWithChatBackedCallAdapter.js +9 -0
- package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/CallWithChatBackedCallAdapter.js.map +1 -1
- package/package.json +8 -8
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"VideoTile.js","sourceRoot":"","sources":["../../../../../../react-components/src/components/VideoTile.tsx"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport { Icon, IStyle, mergeStyles, Persona, Stack, Text } from '@fluentui/react';\n/* @conditional-compile-remove(pinned-participants) */\nimport { IconButton } from '@fluentui/react';\nimport React, { useLayoutEffect, useMemo, useRef, useState } from 'react';\nimport { useIdentifiers } from '../identifiers';\nimport { ComponentLocale, useLocale } from '../localization';\nimport { useTheme } from '../theming';\nimport { BaseCustomStyles, CustomAvatarOptions, OnRenderAvatarCallback } from '../types';\n/* @conditional-compile-remove(one-to-n-calling) */\n/* @conditional-compile-remove(PSTN-calls) */\nimport { ParticipantState } from '../types';\nimport {\n disabledVideoHint,\n displayNameStyle,\n iconContainerStyle,\n overlayContainerStyles,\n rootStyles,\n videoContainerStyles,\n videoHint,\n tileInfoContainerStyle,\n participantStateStringStyles\n} from './styles/VideoTile.styles';\nimport { getVideoTileOverrideColor } from './utils/videoTileStylesUtils';\n/* @conditional-compile-remove(pinned-participants) */\nimport { pinIconStyle } from './styles/VideoTile.styles';\n/* @conditional-compile-remove(pinned-participants) */\nimport { DirectionalHint, IContextualMenuProps } from '@fluentui/react';\n/* @conditional-compile-remove(pinned-participants) */\nimport useLongPress from './utils/useLongPress';\n/* @conditional-compile-remove(pinned-participants) */\nimport { moreButtonStyles } from './styles/VideoTile.styles';\n\n/**\n * Strings of {@link VideoTile} that can be overridden.\n * @beta\n */\nexport interface VideoTileStrings {\n participantStateRinging: string;\n participantStateHold: string;\n}\n\n/**\n * Fluent styles for {@link VideoTile}.\n *\n * @public\n */\nexport interface VideoTileStylesProps extends BaseCustomStyles {\n /** Styles for video container. */\n videoContainer?: IStyle;\n /** Styles for container overlayed on the video container. */\n overlayContainer?: IStyle;\n /** Styles for displayName on the video container. */\n displayNameContainer?: IStyle;\n}\n\n/**\n * Props for {@link VideoTile}.\n *\n * @public\n */\nexport interface VideoTileProps {\n /** React Child components. Child Components will show as overlay component in the VideoTile. */\n children?: React.ReactNode;\n /**\n * Allows users to pass in an object contains custom CSS styles.\n * @Example\n * ```\n * <VideoTile styles={{ root: { background: 'blue' } }} />\n * ```\n */\n styles?: VideoTileStylesProps;\n /** user id for the VideoTile placeholder. */\n userId?: string;\n /** Component with the video stream. */\n renderElement?: JSX.Element | null;\n /** Determines if the video is mirrored or not. */\n isMirrored?: boolean;\n /** Custom render Component function for no video is available. Render a Persona Icon if undefined. */\n onRenderPlaceholder?: OnRenderAvatarCallback;\n /**\n * Show label on the VideoTile\n * @defaultValue true\n */\n showLabel?: boolean;\n /**\n * Whether to display a mute icon beside the user's display name.\n * @defaultValue true\n */\n showMuteIndicator?: boolean;\n /**\n * Whether the video is muted or not.\n */\n isMuted?: boolean;\n /* @conditional-compile-remove(pinned-participants) */\n /**\n * If true, the video tile will show the pin icon.\n */\n isPinned?: boolean;\n /**\n * Display Name of the Participant to be shown in the label.\n * @remarks `displayName` is used to generate avatar initials if `initialsName` is not provided.\n */\n displayName?: string;\n /**\n * Name of the participant used to generate initials. For example, a name `John Doe` will display `JD` as initials.\n * @remarks `displayName` is used if this property is not specified.\n */\n initialsName?: string;\n /**\n * Minimum size of the persona avatar in px.\n * The persona avatar is the default placeholder shown when no video stream is available.\n * For more information see https://developer.microsoft.com/en-us/fluentui#/controls/web/persona\n * @defaultValue 32px\n */\n personaMinSize?: number;\n /**\n * Maximum size of the personal avatar in px.\n * The persona avatar is the default placeholder shown when no video stream is available.\n * For more information see https://developer.microsoft.com/en-us/fluentui#/controls/web/persona\n * @defaultValue 100px\n */\n personaMaxSize?: number;\n /** Optional property to set the aria label of the video tile if there is no available stream. */\n noVideoAvailableAriaLabel?: string;\n /** Whether the participant in the videoTile is speaking. Shows a speaking indicator (border). */\n isSpeaking?: boolean;\n\n /* @conditional-compile-remove(one-to-n-calling) */\n /* @conditional-compile-remove(PSTN-calls) */\n /**\n * The call connection state of the participant.\n * For example, `Hold` means the participant is on hold.\n */\n participantState?: ParticipantState;\n /* @conditional-compile-remove(one-to-n-calling) */\n /* @conditional-compile-remove(PSTN-calls) */\n strings?: VideoTileStrings;\n /* @conditional-compile-remove(pinned-participants) */\n /**\n * Display custom menu items in the VideoTile's contextual menu.\n * Uses Fluent UI ContextualMenu.\n * An ellipses icon will be displayed to open the contextual menu if this prop is defined.\n */\n contextualMenu?: IContextualMenuProps;\n /* @conditional-compile-remove(pinned-participants) */\n /**\n * Callback triggered by video tile on touch and hold.\n */\n onLongTouch?: () => void;\n}\n\n// Coin max size is set to PersonaSize.size100\nconst DEFAULT_PERSONA_MAX_SIZE_PX = 100;\n// Coin min size is set PersonaSize.size32\nconst DEFAULT_PERSONA_MIN_SIZE_PX = 32;\n\nconst DefaultPlaceholder = (props: CustomAvatarOptions): JSX.Element => {\n const { text, noVideoAvailableAriaLabel, coinSize, hidePersonaDetails } = props;\n\n return (\n <Stack className={mergeStyles({ position: 'absolute', height: '100%', width: '100%' })}>\n <Stack styles={defaultPersonaStyles}>\n {coinSize && (\n <Persona\n coinSize={coinSize}\n hidePersonaDetails={hidePersonaDetails}\n text={text ?? ''}\n initialsTextColor=\"white\"\n aria-label={noVideoAvailableAriaLabel ?? ''}\n showOverflowTooltip={false}\n />\n )}\n </Stack>\n </Stack>\n );\n};\n\nconst defaultPersonaStyles = { root: { margin: 'auto', maxHeight: '100%' } };\n\n/* @conditional-compile-remove(pinned-participants) */\nconst videoTileMoreMenuIconProps = { iconName: undefined, style: { display: 'none' } };\n/* @conditional-compile-remove(pinned-participants) */\nconst videoTileMoreMenuProps = {\n directionalHint: DirectionalHint.topLeftEdge,\n isBeakVisible: false,\n styles: { container: { maxWidth: '8rem' } }\n};\n/* @conditional-compile-remove(pinned-participants) */\nconst VideoTileMoreOptionsButton = (props: {\n contextualMenu?: IContextualMenuProps;\n canShowContextMenuButton: boolean;\n}): JSX.Element => {\n const { contextualMenu, canShowContextMenuButton } = props;\n if (!contextualMenu) {\n return <></>;\n }\n\n const optionsIcon = canShowContextMenuButton ? 'VideoTileMoreOptions' : undefined;\n\n return (\n <IconButton\n data-ui-id=\"video-tile-more-options-button\"\n styles={moreButtonStyles}\n menuIconProps={videoTileMoreMenuIconProps}\n menuProps={{ ...videoTileMoreMenuProps, ...contextualMenu }}\n iconProps={{ iconName: optionsIcon }}\n />\n );\n};\n\n/**\n * A component to render the video stream for a single call participant.\n *\n * Use with {@link GridLayout} in a {@link VideoGallery}.\n *\n * @public\n */\nexport const VideoTile = (props: VideoTileProps): JSX.Element => {\n const {\n children,\n displayName,\n initialsName,\n isMirrored,\n isMuted,\n /* @conditional-compile-remove(pinned-participants) */\n isPinned,\n onRenderPlaceholder,\n renderElement,\n showLabel = true,\n showMuteIndicator = true,\n styles,\n userId,\n noVideoAvailableAriaLabel,\n isSpeaking,\n personaMinSize = DEFAULT_PERSONA_MIN_SIZE_PX,\n personaMaxSize = DEFAULT_PERSONA_MAX_SIZE_PX,\n /* @conditional-compile-remove(pinned-participants) */\n contextualMenu\n } = props;\n\n /* @conditional-compile-remove(pinned-participants) */\n const [isHovered, setIsHovered] = useState<boolean>(false);\n /* @conditional-compile-remove(pinned-participants) */\n const [isFocused, setIsFocused] = useState<boolean>(false);\n const [personaSize, setPersonaSize] = useState<number>();\n const videoTileRef = useRef<HTMLDivElement>(null);\n\n const locale = useLocale();\n const theme = useTheme();\n\n const isVideoRendered = !!renderElement;\n\n const observer = useRef(\n new ResizeObserver((entries): void => {\n const { width, height } = entries[0].contentRect;\n const personaSize = Math.min(width, height) / 3;\n setPersonaSize(Math.max(Math.min(personaSize, personaMaxSize), personaMinSize));\n })\n );\n\n useLayoutEffect(() => {\n if (videoTileRef.current) {\n observer.current.observe(videoTileRef.current);\n }\n const currentObserver = observer.current;\n return () => currentObserver.disconnect();\n }, [observer, videoTileRef]);\n\n /* @conditional-compile-remove(pinned-participants) */\n const useLongPressProps = useMemo(() => {\n return {\n onLongPress: () => {\n props.onLongTouch?.();\n },\n touchEventsOnly: true\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [props.onLongTouch]);\n /* @conditional-compile-remove(pinned-participants) */\n const longPressHandlers = useLongPress(useLongPressProps);\n const longPressHandlersTrampoline = useMemo(() => {\n /* @conditional-compile-remove(pinned-participants) */\n return longPressHandlers;\n return {};\n }, [\n /* @conditional-compile-remove(pinned-participants) */\n longPressHandlers\n ]);\n\n const hoverHandlers = useMemo(() => {\n /* @conditional-compile-remove(pinned-participants) */\n return {\n onMouseEnter: () => setIsHovered(true),\n onMouseLeave: () => setIsHovered(false),\n onFocus: () => setIsFocused(true),\n onBlur: () => setIsFocused(false)\n };\n return {};\n }, []);\n\n const placeholderOptions = {\n userId,\n text: initialsName ?? displayName,\n noVideoAvailableAriaLabel,\n coinSize: personaSize,\n styles: defaultPersonaStyles,\n hidePersonaDetails: true\n };\n\n const videoHintWithBorderRadius = mergeStyles(videoHint, { borderRadius: theme.effects.roundedCorner4 });\n\n const tileInfoStyle = useMemo(\n () =>\n mergeStyles(\n isVideoRendered ? videoHintWithBorderRadius : disabledVideoHint,\n getVideoTileOverrideColor(isVideoRendered, theme, 'neutralPrimary'),\n styles?.displayNameContainer\n ),\n [isVideoRendered, videoHintWithBorderRadius, theme, styles?.displayNameContainer]\n );\n\n const ids = useIdentifiers();\n\n const canShowLabel = showLabel && (displayName || (showMuteIndicator && isMuted));\n const participantStateString = participantStateStringTrampoline(props, locale);\n /* @conditional-compile-remove(pinned-participants) */\n const canShowContextMenuButton = isHovered || isFocused;\n return (\n <Stack\n data-ui-id={ids.videoTile}\n className={mergeStyles(\n rootStyles,\n {\n background: theme.palette.neutralLighter,\n borderRadius: theme.effects.roundedCorner4\n },\n isSpeaking && {\n '&::after': {\n content: `''`,\n position: 'absolute',\n border: `0.25rem solid ${theme.palette.themePrimary}`,\n borderRadius: theme.effects.roundedCorner4,\n width: '100%',\n height: '100%',\n pointerEvents: 'none'\n }\n },\n styles?.root\n )}\n {...longPressHandlersTrampoline}\n >\n <div ref={videoTileRef} style={{ width: '100%', height: '100%' }} {...hoverHandlers} data-is-focusable={true}>\n {isVideoRendered ? (\n <Stack\n className={mergeStyles(\n videoContainerStyles,\n isMirrored && { transform: 'scaleX(-1)' },\n styles?.videoContainer\n )}\n >\n {renderElement}\n </Stack>\n ) : (\n <Stack\n className={mergeStyles(videoContainerStyles, {\n opacity:\n participantStateString ||\n /* @conditional-compile-remove(PSTN-calls) */ props.participantState === 'Idle'\n ? 0.4\n : 1\n })}\n >\n {onRenderPlaceholder ? (\n onRenderPlaceholder(userId ?? '', placeholderOptions, DefaultPlaceholder)\n ) : (\n <DefaultPlaceholder {...placeholderOptions} />\n )}\n </Stack>\n )}\n\n {(canShowLabel || participantStateString) && (\n <Stack horizontal className={tileInfoContainerStyle} tokens={tileInfoContainerTokens}>\n <Stack horizontal className={tileInfoStyle}>\n {canShowLabel && (\n <Text\n className={mergeStyles(displayNameStyle)}\n title={displayName}\n style={{ color: participantStateString ? theme.palette.neutralSecondary : 'inherit' }}\n data-ui-id=\"video-tile-display-name\"\n >\n {displayName}\n </Text>\n )}\n {participantStateString && (\n <Text className={mergeStyles(participantStateStringStyles(theme))}>\n {bracketedParticipantString(participantStateString, !!canShowLabel)}\n </Text>\n )}\n {showMuteIndicator && isMuted && (\n <Stack className={mergeStyles(iconContainerStyle)}>\n <Icon iconName=\"VideoTileMicOff\" />\n </Stack>\n )}\n {\n /* @conditional-compile-remove(pinned-participants) */\n <VideoTileMoreOptionsButton\n contextualMenu={contextualMenu}\n canShowContextMenuButton={canShowContextMenuButton}\n />\n }\n {\n /* @conditional-compile-remove(pinned-participants) */\n isPinned && (\n <Stack className={mergeStyles(iconContainerStyle)}>\n <Icon iconName=\"VideoTilePinned\" className={mergeStyles(pinIconStyle)} />\n </Stack>\n )\n }\n </Stack>\n </Stack>\n )}\n\n {children && (\n <Stack className={mergeStyles(overlayContainerStyles, styles?.overlayContainer)}>{children}</Stack>\n )}\n </div>\n </Stack>\n );\n};\n\nconst participantStateStringTrampoline = (props: VideoTileProps, locale: ComponentLocale): string | undefined => {\n /* @conditional-compile-remove(one-to-n-calling) */\n /* @conditional-compile-remove(PSTN-calls) */\n const strings = { ...locale.strings.videoTile, ...props.strings };\n /* @conditional-compile-remove(one-to-n-calling) */\n /* @conditional-compile-remove(PSTN-calls) */\n return props.participantState === 'EarlyMedia' || props.participantState === 'Ringing'\n ? strings?.participantStateRinging\n : props.participantState === 'Hold'\n ? strings?.participantStateHold\n : undefined;\n\n return undefined;\n};\n\nconst tileInfoContainerTokens = {\n // A horizontal Stack sets the left margin to 0 for all it's children.\n // We need to allow the children to set their own margins\n childrenGap: 'none'\n};\n\nconst bracketedParticipantString = (participantString: string, withBrackets: boolean): string => {\n return withBrackets ? `(${participantString})` : participantString;\n};\n"]}
|
1
|
+
{"version":3,"file":"VideoTile.js","sourceRoot":"","sources":["../../../../../../react-components/src/components/VideoTile.tsx"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport { Icon, IStyle, mergeStyles, Persona, Stack, Text } from '@fluentui/react';\n/* @conditional-compile-remove(pinned-participants) */\nimport { IconButton } from '@fluentui/react';\nimport React, { useLayoutEffect, useMemo, useRef, useState } from 'react';\nimport { useIdentifiers } from '../identifiers';\nimport { ComponentLocale, useLocale } from '../localization';\nimport { useTheme } from '../theming';\nimport { BaseCustomStyles, CustomAvatarOptions, OnRenderAvatarCallback } from '../types';\n/* @conditional-compile-remove(one-to-n-calling) */\n/* @conditional-compile-remove(PSTN-calls) */\nimport { ParticipantState } from '../types';\nimport {\n disabledVideoHint,\n displayNameStyle,\n iconContainerStyle,\n overlayContainerStyles,\n rootStyles,\n videoContainerStyles,\n videoHint,\n tileInfoContainerStyle,\n participantStateStringStyles\n} from './styles/VideoTile.styles';\nimport { getVideoTileOverrideColor } from './utils/videoTileStylesUtils';\n/* @conditional-compile-remove(pinned-participants) */\nimport { pinIconStyle } from './styles/VideoTile.styles';\n/* @conditional-compile-remove(pinned-participants) */\nimport { DirectionalHint, IContextualMenuProps } from '@fluentui/react';\n/* @conditional-compile-remove(pinned-participants) */\nimport useLongPress from './utils/useLongPress';\n/* @conditional-compile-remove(pinned-participants) */\nimport { moreButtonStyles } from './styles/VideoTile.styles';\n\n/**\n * Strings of {@link VideoTile} that can be overridden.\n * @beta\n */\nexport interface VideoTileStrings {\n participantStateRinging: string;\n participantStateHold: string;\n}\n\n/**\n * Fluent styles for {@link VideoTile}.\n *\n * @public\n */\nexport interface VideoTileStylesProps extends BaseCustomStyles {\n /** Styles for video container. */\n videoContainer?: IStyle;\n /** Styles for container overlayed on the video container. */\n overlayContainer?: IStyle;\n /** Styles for displayName on the video container. */\n displayNameContainer?: IStyle;\n}\n\n/**\n * Props for {@link VideoTile}.\n *\n * @public\n */\nexport interface VideoTileProps {\n /** React Child components. Child Components will show as overlay component in the VideoTile. */\n children?: React.ReactNode;\n /**\n * Allows users to pass in an object contains custom CSS styles.\n * @Example\n * ```\n * <VideoTile styles={{ root: { background: 'blue' } }} />\n * ```\n */\n styles?: VideoTileStylesProps;\n /** user id for the VideoTile placeholder. */\n userId?: string;\n /** Component with the video stream. */\n renderElement?: JSX.Element | null;\n /** Determines if the video is mirrored or not. */\n isMirrored?: boolean;\n /** Custom render Component function for no video is available. Render a Persona Icon if undefined. */\n onRenderPlaceholder?: OnRenderAvatarCallback;\n /**\n * Show label on the VideoTile\n * @defaultValue true\n */\n showLabel?: boolean;\n /**\n * Whether to display a mute icon beside the user's display name.\n * @defaultValue true\n */\n showMuteIndicator?: boolean;\n /**\n * Whether the video is muted or not.\n */\n isMuted?: boolean;\n /* @conditional-compile-remove(pinned-participants) */\n /**\n * If true, the video tile will show the pin icon.\n */\n isPinned?: boolean;\n /**\n * Display Name of the Participant to be shown in the label.\n * @remarks `displayName` is used to generate avatar initials if `initialsName` is not provided.\n */\n displayName?: string;\n /**\n * Name of the participant used to generate initials. For example, a name `John Doe` will display `JD` as initials.\n * @remarks `displayName` is used if this property is not specified.\n */\n initialsName?: string;\n /**\n * Minimum size of the persona avatar in px.\n * The persona avatar is the default placeholder shown when no video stream is available.\n * For more information see https://developer.microsoft.com/en-us/fluentui#/controls/web/persona\n * @defaultValue 32px\n */\n personaMinSize?: number;\n /**\n * Maximum size of the personal avatar in px.\n * The persona avatar is the default placeholder shown when no video stream is available.\n * For more information see https://developer.microsoft.com/en-us/fluentui#/controls/web/persona\n * @defaultValue 100px\n */\n personaMaxSize?: number;\n /** Optional property to set the aria label of the video tile if there is no available stream. */\n noVideoAvailableAriaLabel?: string;\n /** Whether the participant in the videoTile is speaking. Shows a speaking indicator (border). */\n isSpeaking?: boolean;\n\n /* @conditional-compile-remove(one-to-n-calling) */\n /* @conditional-compile-remove(PSTN-calls) */\n /**\n * The call connection state of the participant.\n * For example, `Hold` means the participant is on hold.\n */\n participantState?: ParticipantState;\n /* @conditional-compile-remove(one-to-n-calling) */\n /* @conditional-compile-remove(PSTN-calls) */\n strings?: VideoTileStrings;\n /* @conditional-compile-remove(pinned-participants) */\n /**\n * Display custom menu items in the VideoTile's contextual menu.\n * Uses Fluent UI ContextualMenu.\n * An ellipses icon will be displayed to open the contextual menu if this prop is defined.\n */\n contextualMenu?: IContextualMenuProps;\n /* @conditional-compile-remove(pinned-participants) */\n /**\n * Callback triggered by video tile on touch and hold.\n */\n onLongTouch?: () => void;\n}\n\n// Coin max size is set to PersonaSize.size100\nconst DEFAULT_PERSONA_MAX_SIZE_PX = 100;\n// Coin min size is set PersonaSize.size32\nconst DEFAULT_PERSONA_MIN_SIZE_PX = 32;\n\nconst DefaultPlaceholder = (props: CustomAvatarOptions): JSX.Element => {\n const { text, noVideoAvailableAriaLabel, coinSize, hidePersonaDetails } = props;\n\n return (\n <Stack className={mergeStyles({ position: 'absolute', height: '100%', width: '100%' })}>\n <Stack styles={defaultPersonaStyles}>\n {coinSize && (\n <Persona\n coinSize={coinSize}\n hidePersonaDetails={hidePersonaDetails}\n text={text ?? ''}\n initialsTextColor=\"white\"\n aria-label={noVideoAvailableAriaLabel ?? ''}\n showOverflowTooltip={false}\n />\n )}\n </Stack>\n </Stack>\n );\n};\n\nconst defaultPersonaStyles = { root: { margin: 'auto', maxHeight: '100%' } };\n\n/* @conditional-compile-remove(pinned-participants) */\nconst videoTileMoreMenuIconProps = { iconName: undefined, style: { display: 'none' } };\n/* @conditional-compile-remove(pinned-participants) */\nconst videoTileMoreMenuProps = {\n directionalHint: DirectionalHint.topLeftEdge,\n isBeakVisible: false,\n styles: { container: { maxWidth: '8rem' } }\n};\n/* @conditional-compile-remove(pinned-participants) */\nconst VideoTileMoreOptionsButton = (props: {\n contextualMenu?: IContextualMenuProps;\n canShowContextMenuButton: boolean;\n}): JSX.Element => {\n const { contextualMenu, canShowContextMenuButton } = props;\n if (!contextualMenu) {\n return <></>;\n }\n\n const optionsIcon = canShowContextMenuButton ? 'VideoTileMoreOptions' : undefined;\n\n return (\n <IconButton\n data-ui-id=\"video-tile-more-options-button\"\n styles={moreButtonStyles}\n menuIconProps={videoTileMoreMenuIconProps}\n menuProps={{ ...videoTileMoreMenuProps, ...contextualMenu }}\n iconProps={{ iconName: optionsIcon }}\n />\n );\n};\n\n/**\n * A component to render the video stream for a single call participant.\n *\n * Use with {@link GridLayout} in a {@link VideoGallery}.\n *\n * @public\n */\nexport const VideoTile = (props: VideoTileProps): JSX.Element => {\n const {\n children,\n displayName,\n initialsName,\n isMirrored,\n isMuted,\n /* @conditional-compile-remove(pinned-participants) */\n isPinned,\n onRenderPlaceholder,\n renderElement,\n showLabel = true,\n showMuteIndicator = true,\n styles,\n userId,\n noVideoAvailableAriaLabel,\n isSpeaking,\n personaMinSize = DEFAULT_PERSONA_MIN_SIZE_PX,\n personaMaxSize = DEFAULT_PERSONA_MAX_SIZE_PX,\n /* @conditional-compile-remove(pinned-participants) */\n contextualMenu\n } = props;\n\n /* @conditional-compile-remove(pinned-participants) */\n const [isHovered, setIsHovered] = useState<boolean>(false);\n /* @conditional-compile-remove(pinned-participants) */\n const [isFocused, setIsFocused] = useState<boolean>(false);\n // need to set a default otherwise the resizeObserver will get stuck in an infinite loop.\n const [personaSize, setPersonaSize] = useState<number>(1);\n const videoTileRef = useRef<HTMLDivElement>(null);\n\n const locale = useLocale();\n const theme = useTheme();\n\n const isVideoRendered = !!renderElement;\n\n const observer = useRef(\n new ResizeObserver((entries): void => {\n const { width, height } = entries[0].contentRect;\n const personaCalcSize = Math.min(width, height) / 3;\n // we only want to set the persona size if it has changed\n if (personaCalcSize !== personaSize) {\n setPersonaSize(Math.max(Math.min(personaCalcSize, personaMaxSize), personaMinSize));\n }\n })\n );\n\n useLayoutEffect(() => {\n if (videoTileRef.current) {\n observer.current.observe(videoTileRef.current);\n }\n const currentObserver = observer.current;\n return () => currentObserver.disconnect();\n }, [observer, videoTileRef]);\n\n /* @conditional-compile-remove(pinned-participants) */\n const useLongPressProps = useMemo(() => {\n return {\n onLongPress: () => {\n props.onLongTouch?.();\n },\n touchEventsOnly: true\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [props.onLongTouch]);\n /* @conditional-compile-remove(pinned-participants) */\n const longPressHandlers = useLongPress(useLongPressProps);\n const longPressHandlersTrampoline = useMemo(() => {\n /* @conditional-compile-remove(pinned-participants) */\n return longPressHandlers;\n return {};\n }, [\n /* @conditional-compile-remove(pinned-participants) */\n longPressHandlers\n ]);\n\n const hoverHandlers = useMemo(() => {\n /* @conditional-compile-remove(pinned-participants) */\n return {\n onMouseEnter: () => setIsHovered(true),\n onMouseLeave: () => setIsHovered(false),\n onFocus: () => setIsFocused(true),\n onBlur: () => setIsFocused(false)\n };\n return {};\n }, []);\n\n const placeholderOptions = {\n userId,\n text: initialsName ?? displayName,\n noVideoAvailableAriaLabel,\n coinSize: personaSize,\n styles: defaultPersonaStyles,\n hidePersonaDetails: true\n };\n\n const videoHintWithBorderRadius = mergeStyles(videoHint, { borderRadius: theme.effects.roundedCorner4 });\n\n const tileInfoStyle = useMemo(\n () =>\n mergeStyles(\n isVideoRendered ? videoHintWithBorderRadius : disabledVideoHint,\n getVideoTileOverrideColor(isVideoRendered, theme, 'neutralPrimary'),\n styles?.displayNameContainer\n ),\n [isVideoRendered, videoHintWithBorderRadius, theme, styles?.displayNameContainer]\n );\n\n const ids = useIdentifiers();\n\n const canShowLabel = showLabel && (displayName || (showMuteIndicator && isMuted));\n const participantStateString = participantStateStringTrampoline(props, locale);\n /* @conditional-compile-remove(pinned-participants) */\n const canShowContextMenuButton = isHovered || isFocused;\n return (\n <Stack\n data-ui-id={ids.videoTile}\n className={mergeStyles(\n rootStyles,\n {\n background: theme.palette.neutralLighter,\n borderRadius: theme.effects.roundedCorner4\n },\n isSpeaking && {\n '&::after': {\n content: `''`,\n position: 'absolute',\n border: `0.25rem solid ${theme.palette.themePrimary}`,\n borderRadius: theme.effects.roundedCorner4,\n width: '100%',\n height: '100%',\n pointerEvents: 'none'\n }\n },\n styles?.root\n )}\n {...longPressHandlersTrampoline}\n >\n <div ref={videoTileRef} style={{ width: '100%', height: '100%' }} {...hoverHandlers} data-is-focusable={true}>\n {isVideoRendered ? (\n <Stack\n className={mergeStyles(\n videoContainerStyles,\n isMirrored && { transform: 'scaleX(-1)' },\n styles?.videoContainer\n )}\n >\n {renderElement}\n </Stack>\n ) : (\n <Stack\n className={mergeStyles(videoContainerStyles, {\n opacity:\n participantStateString ||\n /* @conditional-compile-remove(PSTN-calls) */ props.participantState === 'Idle'\n ? 0.4\n : 1\n })}\n >\n {onRenderPlaceholder ? (\n onRenderPlaceholder(userId ?? '', placeholderOptions, DefaultPlaceholder)\n ) : (\n <DefaultPlaceholder {...placeholderOptions} />\n )}\n </Stack>\n )}\n\n {(canShowLabel || participantStateString) && (\n <Stack horizontal className={tileInfoContainerStyle} tokens={tileInfoContainerTokens}>\n <Stack horizontal className={tileInfoStyle}>\n {canShowLabel && (\n <Text\n className={mergeStyles(displayNameStyle)}\n title={displayName}\n style={{ color: participantStateString ? theme.palette.neutralSecondary : 'inherit' }}\n data-ui-id=\"video-tile-display-name\"\n >\n {displayName}\n </Text>\n )}\n {participantStateString && (\n <Text className={mergeStyles(participantStateStringStyles(theme))}>\n {bracketedParticipantString(participantStateString, !!canShowLabel)}\n </Text>\n )}\n {showMuteIndicator && isMuted && (\n <Stack className={mergeStyles(iconContainerStyle)}>\n <Icon iconName=\"VideoTileMicOff\" />\n </Stack>\n )}\n {\n /* @conditional-compile-remove(pinned-participants) */\n <VideoTileMoreOptionsButton\n contextualMenu={contextualMenu}\n canShowContextMenuButton={canShowContextMenuButton}\n />\n }\n {\n /* @conditional-compile-remove(pinned-participants) */\n isPinned && (\n <Stack className={mergeStyles(iconContainerStyle)}>\n <Icon iconName=\"VideoTilePinned\" className={mergeStyles(pinIconStyle)} />\n </Stack>\n )\n }\n </Stack>\n </Stack>\n )}\n\n {children && (\n <Stack className={mergeStyles(overlayContainerStyles, styles?.overlayContainer)}>{children}</Stack>\n )}\n </div>\n </Stack>\n );\n};\n\nconst participantStateStringTrampoline = (props: VideoTileProps, locale: ComponentLocale): string | undefined => {\n /* @conditional-compile-remove(one-to-n-calling) */\n /* @conditional-compile-remove(PSTN-calls) */\n const strings = { ...locale.strings.videoTile, ...props.strings };\n /* @conditional-compile-remove(one-to-n-calling) */\n /* @conditional-compile-remove(PSTN-calls) */\n return props.participantState === 'EarlyMedia' || props.participantState === 'Ringing'\n ? strings?.participantStateRinging\n : props.participantState === 'Hold'\n ? strings?.participantStateHold\n : undefined;\n\n return undefined;\n};\n\nconst tileInfoContainerTokens = {\n // A horizontal Stack sets the left margin to 0 for all it's children.\n // We need to allow the children to set their own margins\n childrenGap: 'none'\n};\n\nconst bracketedParticipantString = (participantString: string, withBrackets: boolean): string => {\n return withBrackets ? `(${participantString})` : participantString;\n};\n"]}
|
@@ -25,9 +25,8 @@ export const sendBoxWrapperStyles = mergeStyles({
|
|
25
25
|
* @private
|
26
26
|
*/
|
27
27
|
export const sendButtonStyle = mergeStyles({
|
28
|
-
height: '
|
29
|
-
width: '
|
30
|
-
marginRight: '0.313rem' // 5px
|
28
|
+
height: '2.25rem',
|
29
|
+
width: '2.25rem'
|
31
30
|
});
|
32
31
|
/**
|
33
32
|
* @private
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"SendBox.styles.js","sourceRoot":"","sources":["../../../../../../../react-components/src/components/styles/SendBox.styles.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,OAAO,EAAE,WAAW,EAAiB,MAAM,iBAAiB,CAAC;AAE7D;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,aAAa,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE;IACtF,IAAI,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE;CAC1B,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,WAAW,CAAC;IAC9C,MAAM,EAAE,SAAS;IACjB,QAAQ,EAAE,QAAQ;IAClB;;OAEG;IACH,oBAAoB,EAAE;QACpB,SAAS,EAAE,SAAS;KACrB;CACF,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,WAAW,CAAC;IACzC,MAAM,EAAE,SAAS;IACjB,KAAK,EAAE,SAAS;
|
1
|
+
{"version":3,"file":"SendBox.styles.js","sourceRoot":"","sources":["../../../../../../../react-components/src/components/styles/SendBox.styles.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,OAAO,EAAE,WAAW,EAAiB,MAAM,iBAAiB,CAAC;AAE7D;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,aAAa,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE;IACtF,IAAI,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE;CAC1B,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,WAAW,CAAC;IAC9C,MAAM,EAAE,SAAS;IACjB,QAAQ,EAAE,QAAQ;IAClB;;OAEG;IACH,oBAAoB,EAAE;QACpB,SAAS,EAAE,SAAS;KACrB;CACF,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,WAAW,CAAC;IACzC,MAAM,EAAE,SAAS;IACjB,KAAK,EAAE,SAAS;CACjB,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,WAAW,CAAC;IACvC,KAAK,EAAE,SAAS;IAChB,MAAM,EAAE,SAAS;IACjB,MAAM,EAAE,MAAM;CACf,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,WAAW,CAAC;IAC/C,MAAM,EAAE,2BAA2B;IACnC,SAAS,EAAE,SAAS;IACpB,QAAQ,EAAE,MAAM;CACjB,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,WAAW,CAAC;IAC1C,KAAK,EAAE,MAAM;IACb,OAAO,EAAE,SAAS;CACnB,CAAC,CAAC;AAEH,MAAM,wCAAwC,GAAG,MAAM,CAAC;AACxD,MAAM,sCAAsC,GAAG,KAAK,CAAC;AAErD;;GAEG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,KAIvC,EAAU,EAAE;IACX,MAAM,EAAE,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC;IACnD,MAAM,WAAW,GAAG,eAAe,CAAC,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC;IACtG,MAAM,iBAAiB,GAAG,eAAe,CAAC,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC;IAExG,MAAM,eAAe,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,wCAAwC,CAAC;IAChF,MAAM,qBAAqB,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,sCAAsC,CAAC;IAEpF,OAAO;QACL,YAAY,EAAE,KAAK,CAAC,OAAO,CAAC,cAAc;QAC1C,MAAM,EAAE,GAAG,eAAe,aAAa,WAAW,EAAE;QAEpD,mHAAmH;QACnH,uHAAuH;QACvH,MAAM,EAAE,GAAG,sCAAsC,GAAG,eAAe,KAAK;QAExE,wCAAwC,EAAE;YACxC,MAAM,EAAE,GAAG,qBAAqB,aAAa,iBAAiB,EAAE;YAChE,MAAM,EAAE,GAAG,sCAAsC,GAAG,qBAAqB,KAAK;SAC/E;KACF,CAAC;AACJ,CAAC,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport { mergeStyles, IStyle, Theme } from '@fluentui/react';\n\n/**\n * @private\n */\nexport const suppressIconStyle = {\n iconContainer: { minHeight: '0', minWidth: '0', height: '0', width: '0', margin: '0' },\n icon: { display: 'none' }\n};\n\n/**\n * @private\n */\nexport const sendBoxWrapperStyles = mergeStyles({\n margin: '0.25rem',\n overflow: 'hidden',\n /**\n * margin-top set for all the child components of sendbox except first\n */\n ':not(:first-child)': {\n marginTop: '0.25rem'\n }\n});\n\n/**\n * @private\n */\nexport const sendButtonStyle = mergeStyles({\n height: '2.25rem',\n width: '2.25rem'\n});\n\n/**\n * @private\n */\nexport const sendIconStyle = mergeStyles({\n width: '1.25rem',\n height: '1.25rem',\n margin: 'auto'\n});\n\n/**\n * @private\n */\nexport const fileUploadCardsStyles = mergeStyles({\n margin: '0 0.25rem 0.25rem 0.25rem',\n maxHeight: '12.5rem',\n overflow: 'auto'\n});\n\n/**\n * @private\n */\nexport const fileCardBoxStyle = mergeStyles({\n width: '100%',\n padding: '0.50rem'\n});\n\nconst defaultSendBoxInactiveBorderThicknessREM = 0.0625;\nconst defaultSendBoxActiveBorderThicknessREM = 0.125;\n\n/**\n * @private\n */\nexport const borderAndBoxShadowStyle = (props: {\n theme: Theme;\n hasErrorMessage: boolean;\n disabled: boolean;\n}): IStyle => {\n const { theme, hasErrorMessage, disabled } = props;\n const borderColor = hasErrorMessage ? theme.semanticColors.errorText : theme.palette.neutralSecondary;\n const borderColorActive = hasErrorMessage ? theme.semanticColors.errorText : theme.palette.themePrimary;\n\n const borderThickness = disabled ? 0 : defaultSendBoxInactiveBorderThicknessREM;\n const borderActiveThickness = disabled ? 0 : defaultSendBoxActiveBorderThicknessREM;\n\n return {\n borderRadius: theme.effects.roundedCorner4,\n border: `${borderThickness}rem solid ${borderColor}`,\n\n // The border thickness of the sendbox wrapper changes on hover, to prevent the border thickness change causing the\n // input box to shift we apply a margin to compensate. This margin is then removed on hover when the border is thicker.\n margin: `${defaultSendBoxActiveBorderThicknessREM - borderThickness}rem`,\n\n ':hover, :active, :focus, :focus-within': {\n border: `${borderActiveThickness}rem solid ${borderColorActive}`,\n margin: `${defaultSendBoxActiveBorderThicknessREM - borderActiveThickness}rem`\n }\n };\n};\n"]}
|
@@ -0,0 +1,8 @@
|
|
1
|
+
// Copyright (c) Microsoft Corporation.
|
2
|
+
// Licensed under the MIT license.
|
3
|
+
import { createClientLogger } from '@azure/logger';
|
4
|
+
/**
|
5
|
+
* @private
|
6
|
+
*/
|
7
|
+
export const compositeLogger = createClientLogger('communication-react:composite');
|
8
|
+
//# sourceMappingURL=Logger.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"Logger.js","sourceRoot":"","sources":["../../../../../react-composites/src/Logger.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAClC,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAEnD;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,kBAAkB,CAAC,+BAA+B,CAAC,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\nimport { createClientLogger } from '@azure/logger';\n\n/**\n * @private\n */\nexport const compositeLogger = createClientLogger('communication-react:composite');\n"]}
|
@@ -27,9 +27,7 @@ import { TransferPage } from './pages/TransferPage';
|
|
27
27
|
import { leavingPageStyle, mainScreenContainerStyleDesktop, mainScreenContainerStyleMobile } from './styles/CallComposite.styles';
|
28
28
|
/* @conditional-compile-remove(rooms) */
|
29
29
|
import { _PermissionsProvider, _getPermissions } from "../../../../react-components/src";
|
30
|
-
/* @conditional-compile-remove(one-to-n-calling) @conditional-compile-remove(PSTN-calls) */
|
31
30
|
import { LayerHost, mergeStyles } from '@fluentui/react';
|
32
|
-
/* @conditional-compile-remove(one-to-n-calling) @conditional-compile-remove(PSTN-calls) */
|
33
31
|
import { modalLayerHostStyle } from '../common/styles/ModalLocalAndRemotePIP.styles';
|
34
32
|
import { useId } from '@fluentui/react-hooks';
|
35
33
|
/* @conditional-compile-remove(one-to-n-calling) */ /* @conditional-compile-remove(PSTN-calls) */
|
@@ -182,7 +180,6 @@ export const CallCompositeInner = (props) => {
|
|
182
180
|
// Warning: this is fragile and works because the call arrangement page is only rendered after the call has connected and thus this
|
183
181
|
// LayerHost will be guaranteed to have rendered (and subsequently mounted in the DOM). This ensures the DOM element will be available
|
184
182
|
// before the call to `document.getElementById(modalLayerHostId)` is made.
|
185
|
-
/* @conditional-compile-remove(one-to-n-calling) @conditional-compile-remove(PSTN-calls) @conditional-compile-remove(call-readiness) */
|
186
183
|
React.createElement(LayerHost, { id: modalLayerHostId, className: mergeStyles(modalLayerHostStyle) })))));
|
187
184
|
};
|
188
185
|
const getQueryOptions = (options) => {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"CallComposite.js","sourceRoot":"","sources":["../../../../../../../react-composites/src/composites/CallComposite/CallComposite.tsx"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport { _isInCall } from '@internal/calling-component-bindings';\nimport { OnRenderAvatarCallback, ParticipantMenuItemsCallback, useTheme } from '@internal/react-components';\nimport React, { useEffect, useMemo, useRef } from 'react';\nimport { AvatarPersonaDataCallback } from '../common/AvatarPersona';\nimport { BaseProvider, BaseCompositeProps } from '../common/BaseComposite';\nimport { CallCompositeIcons } from '../common/icons';\nimport { useLocale } from '../localization';\nimport { CommonCallAdapter } from './adapter/CallAdapter';\nimport { CallAdapterProvider, useAdapter } from './adapter/CallAdapterProvider';\nimport { CallPage } from './pages/CallPage';\nimport { ConfigurationPage } from './pages/ConfigurationPage';\nimport { NoticePage } from './pages/NoticePage';\nimport { useSelector } from './hooks/useSelector';\nimport { getPage } from './selectors/baseSelectors';\n/* @conditional-compile-remove(rooms) */\nimport { getRole } from './selectors/baseSelectors';\nimport { LobbyPage } from './pages/LobbyPage';\n/* @conditional-compile-remove(call-transfer) */\nimport { TransferPage } from './pages/TransferPage';\nimport {\n leavingPageStyle,\n mainScreenContainerStyleDesktop,\n mainScreenContainerStyleMobile\n} from './styles/CallComposite.styles';\nimport { CallControlOptions } from './types/CallControlOptions';\n\n/* @conditional-compile-remove(rooms) */\nimport { _PermissionsProvider, Role, _getPermissions } from '@internal/react-components';\n/* @conditional-compile-remove(one-to-n-calling) @conditional-compile-remove(PSTN-calls) */\nimport { LayerHost, mergeStyles } from '@fluentui/react';\n/* @conditional-compile-remove(one-to-n-calling) @conditional-compile-remove(PSTN-calls) */\nimport { modalLayerHostStyle } from '../common/styles/ModalLocalAndRemotePIP.styles';\nimport { useId } from '@fluentui/react-hooks';\n/* @conditional-compile-remove(one-to-n-calling) */ /* @conditional-compile-remove(PSTN-calls) */\nimport { HoldPage } from './pages/HoldPage';\n/* @conditional-compile-remove(unsupported-browser) */\nimport { UnsupportedBrowserPage } from './pages/UnsupportedBrowser';\nimport { PermissionConstraints } from '@azure/communication-calling';\nimport { MobileChatSidePaneTabHeaderProps } from '../common/TabHeader';\nimport { InjectedSidePaneProps, SidePaneProvider, SidePaneRenderer } from './components/SidePane/SidePaneProvider';\n\n/**\n * Props for {@link CallComposite}.\n *\n * @public\n */\nexport interface CallCompositeProps extends BaseCompositeProps<CallCompositeIcons> {\n /**\n * An adapter provides logic and data to the composite.\n * Composite can also be controlled using the adapter.\n */\n adapter: CommonCallAdapter;\n /**\n * Optimizes the composite form factor for either desktop or mobile.\n * @remarks `mobile` is currently only optimized for Portrait mode on mobile devices and does not support landscape.\n * @defaultValue 'desktop'\n */\n formFactor?: 'desktop' | 'mobile';\n /**\n * URL to invite new participants to the current call. If this is supplied, a button appears in the Participants\n * Button flyout menu.\n */\n callInvitationUrl?: string;\n /**\n * Flags to enable/disable or customize UI elements of the {@link CallComposite}.\n */\n options?: CallCompositeOptions;\n}\n\n/* @conditional-compile-remove(call-readiness) */\n/**\n * Device Checks.\n * Choose whether or not to block starting a call depending on camera and microphone permission options.\n *\n * @beta\n */\nexport interface DeviceCheckOptions {\n /**\n * Camera Permission prompts for your call.\n * 'required' - requires the permission to be allowed before permitting the user join the call.\n * 'optional' - permission can be disallowed and the user is still permitted to join the call.\n * 'doNotPrompt' - permission is not required and the user is not prompted to allow the permission.\n */\n camera: 'required' | 'optional' | 'doNotPrompt';\n /**\n * Microphone permission prompts for your call.\n * 'required' - requires the permission to be allowed before permitting the user join the call.\n * 'optional' - permission can be disallowed and the user is still permitted to join the call.\n * 'doNotPrompt' - permission is not required and the user is not prompted to allow the permission.\n */\n microphone: 'required' | 'optional' | 'doNotPrompt';\n}\n\n/* @conditional-compile-remove(pinned-participants) */\n/**\n * Menu options for remote video tiles in {@link VideoGallery}.\n *\n * @beta\n */\nexport interface RemoteVideoTileMenuOptions {\n /**\n * If set to true, remote video tiles in the VideoGallery will not have menu options\n *\n * @defaultValue false\n */\n isHidden?: boolean;\n}\n\n/* @conditional-compile-remove(click-to-call) */\n/**\n * Options for the local video tile in the Call composite.\n *\n * @beta\n */\nexport interface LocalVideoTileOptions {\n /**\n * Position of the local video tile. If unset will render the local tile in the floating local position.\n *\n * @defaultValue 'floating'\n * @remarks 'grid' - local video tile will be rendered in the grid view of the videoGallery.\n * 'floating' - local video tile will be rendered in the floating position and will observe overflow gallery\n * local video tile rules and be docked in the bottom corner.\n * 'hidden' - local video tile will not be rendered.\n * This does not affect the Configuration screen or the side pane Picture in Picture in Picture view.\n */\n position?: 'grid' | 'floating';\n}\n/**\n * Optional features of the {@link CallComposite}.\n *\n * @public\n */\nexport type CallCompositeOptions = {\n /**\n * Surface Azure Communication Services backend errors in the UI with {@link @azure/communication-react#ErrorBar}.\n * Hide or show the error bar.\n * @defaultValue true\n */\n errorBar?: boolean;\n /**\n * Hide or Customize the control bar element.\n * Can be customized by providing an object of type {@link @azure/communication-react#CallControlOptions}.\n * @defaultValue true\n */\n callControls?: boolean | CallControlOptions;\n /* @conditional-compile-remove(call-readiness) */\n /**\n * Device permissions check options for your call.\n * Here you can choose what device permissions you prompt the user for,\n * as well as what device permissions must be accepted before starting a call.\n */\n deviceChecks?: DeviceCheckOptions;\n /* @conditional-compile-remove(call-readiness) */\n /**\n * Callback you may provide to supply users with further steps to troubleshoot why they have been\n * unable to grant your site the required permissions for the call.\n *\n * @example\n * ```ts\n * onPermissionsTroubleshootingClick: () =>\n * window.open('https://contoso.com/permissions-troubleshooting', '_blank');\n * ```\n *\n * @remarks\n * if this is not supplied, the composite will not show a 'further troubleshooting' link.\n */\n onPermissionsTroubleshootingClick?: (permissionsState: {\n camera: PermissionState;\n microphone: PermissionState;\n }) => void;\n /* @conditional-compile-remove(call-readiness) */\n /**\n * Callback you may provide to supply users with further steps to troubleshoot why they have been\n * having network issues when connecting to the call.\n *\n * @example\n * ```ts\n * onNetworkingTroubleShootingClick?: () =>\n * window.open('https://contoso.com/network-troubleshooting', '_blank');\n * ```\n *\n * @remarks\n * if this is not supplied, the composite will not show a 'network troubleshooting' link.\n */\n onNetworkingTroubleShootingClick?: () => void;\n /* @conditional-compile-remove(unsupported-browser) */\n /**\n * Callback you may provide to supply users with a provided page to showcase supported browsers by ACS.\n *\n * @example\n * ```ts\n * onBrowserTroubleShootingClick?: () =>\n * window.open('https://contoso.com/browser-troubleshooting', '_blank');\n * ```\n *\n * @remarks\n * if this is not supplied, the composite will not show a unsupported browser page.\n */\n onEnvironmentInfoTroubleshootingClick?: () => void;\n /* @conditional-compile-remove(pinned-participants) */\n /**\n * Remote participant video tile menu options\n */\n remoteVideoTileMenu?: RemoteVideoTileMenuOptions;\n /* @conditional-compile-remove(click-to-call) */\n /**\n * Options for controlling the local video tile.\n *\n * @remarks if 'false' the local video tile will not be rendered.\n */\n localVideoTile?: boolean | LocalVideoTileOptions;\n};\n\ntype MainScreenProps = {\n mobileView: boolean;\n modalLayerHostId: string;\n onRenderAvatar?: OnRenderAvatarCallback;\n callInvitationUrl?: string;\n onFetchAvatarPersonaData?: AvatarPersonaDataCallback;\n onFetchParticipantMenuItems?: ParticipantMenuItemsCallback;\n options?: CallCompositeOptions;\n /* @conditional-compile-remove(rooms) */\n roleHint?: Role;\n overrideSidePane?: InjectedSidePaneProps;\n onSidePaneIdChange?: (sidePaneId: string | undefined) => void;\n mobileChatTabHeader?: MobileChatSidePaneTabHeaderProps;\n};\n\nconst isShowing = (overrideSidePane?: InjectedSidePaneProps): boolean => {\n return !!overrideSidePane?.isActive;\n};\n\nconst MainScreen = (props: MainScreenProps): JSX.Element => {\n const { callInvitationUrl, onRenderAvatar, onFetchAvatarPersonaData, onFetchParticipantMenuItems } = props;\n const page = useSelector(getPage);\n\n const [sidePaneRenderer, setSidePaneRenderer] = React.useState<SidePaneRenderer | undefined>();\n const [injectedSidePaneProps, setInjectedSidePaneProps] = React.useState<InjectedSidePaneProps>();\n\n const overridePropsRef = useRef<InjectedSidePaneProps | undefined>(props.overrideSidePane);\n useEffect(() => {\n setInjectedSidePaneProps(props.overrideSidePane);\n // When the injected side pane is opened, clear the previous side pane active state.\n // this ensures when the injected side pane is \"closed\", the previous side pane is not \"re-opened\".\n if (!isShowing(overridePropsRef.current) && isShowing(props.overrideSidePane)) {\n setSidePaneRenderer(undefined);\n }\n overridePropsRef.current = props.overrideSidePane;\n }, [props.overrideSidePane]);\n\n const onSidePaneIdChange = props.onSidePaneIdChange;\n useEffect(() => {\n onSidePaneIdChange?.(sidePaneRenderer?.id);\n }, [sidePaneRenderer?.id, onSidePaneIdChange]);\n\n const adapter = useAdapter();\n const locale = useLocale();\n const palette = useTheme().palette;\n const leavePageStyle = useMemo(() => leavingPageStyle(palette), [palette]);\n\n /* @conditional-compile-remove(rooms) */\n const role = useSelector(getRole);\n\n let pageElement: JSX.Element | undefined;\n /* @conditional-compile-remove(rooms) */\n switch (page) {\n case 'roomNotFound':\n pageElement = (\n <NoticePage\n iconName=\"NoticePageInvalidRoom\"\n title={locale.strings.call.roomNotFoundTitle}\n moreDetails={locale.strings.call.roomNotFoundDetails}\n dataUiId={'room-not-found-page'}\n />\n );\n break;\n case 'deniedPermissionToRoom':\n pageElement = (\n <NoticePage\n iconName=\"NoticePageInvalidRoom\"\n title={locale.strings.call.deniedPermissionToRoomTitle}\n moreDetails={locale.strings.call.deniedPermissionToRoomDetails}\n dataUiId={'not-invited-to-room-page'}\n />\n );\n break;\n }\n switch (page) {\n case 'configuration':\n pageElement = (\n <ConfigurationPage\n mobileView={props.mobileView}\n startCallHandler={(): void => {\n adapter.joinCall();\n }}\n updateSidePaneRenderer={setSidePaneRenderer}\n modalLayerHostId={props.modalLayerHostId}\n /* @conditional-compile-remove(call-readiness) */\n deviceChecks={props.options?.deviceChecks}\n /* @conditional-compile-remove(call-readiness) */\n onPermissionsTroubleshootingClick={props.options?.onPermissionsTroubleshootingClick}\n /* @conditional-compile-remove(call-readiness) */\n onNetworkingTroubleShootingClick={props.options?.onNetworkingTroubleShootingClick}\n />\n );\n break;\n case 'accessDeniedTeamsMeeting':\n pageElement = (\n <NoticePage\n iconName=\"NoticePageAccessDeniedTeamsMeeting\"\n title={locale.strings.call.failedToJoinTeamsMeetingReasonAccessDeniedTitle}\n moreDetails={locale.strings.call.failedToJoinTeamsMeetingReasonAccessDeniedMoreDetails}\n dataUiId={'access-denied-teams-meeting-page'}\n />\n );\n break;\n case 'removedFromCall':\n pageElement = (\n <NoticePage\n iconName=\"NoticePageRemovedFromCall\"\n title={locale.strings.call.removedFromCallTitle}\n moreDetails={locale.strings.call.removedFromCallMoreDetails}\n dataUiId={'removed-from-call-page'}\n />\n );\n break;\n case 'joinCallFailedDueToNoNetwork':\n pageElement = (\n <NoticePage\n iconName=\"NoticePageJoinCallFailedDueToNoNetwork\"\n title={locale.strings.call.failedToJoinCallDueToNoNetworkTitle}\n moreDetails={locale.strings.call.failedToJoinCallDueToNoNetworkMoreDetails}\n dataUiId={'join-call-failed-due-to-no-network-page'}\n />\n );\n break;\n case 'leaving':\n pageElement = (\n <NoticePage\n title={locale.strings.call.leavingCallTitle ?? 'Leaving...'}\n dataUiId={'leaving-page'}\n pageStyle={leavePageStyle}\n disableStartCallButton={true}\n />\n );\n break;\n case 'leftCall':\n pageElement = (\n <NoticePage\n iconName=\"NoticePageLeftCall\"\n title={locale.strings.call.leftCallTitle}\n moreDetails={locale.strings.call.leftCallMoreDetails}\n dataUiId={'left-call-page'}\n />\n );\n break;\n case 'lobby':\n pageElement = (\n <LobbyPage\n mobileView={props.mobileView}\n modalLayerHostId={props.modalLayerHostId}\n options={props.options}\n updateSidePaneRenderer={setSidePaneRenderer}\n mobileChatTabHeader={props.mobileChatTabHeader}\n />\n );\n break;\n /* @conditional-compile-remove(call-transfer) */\n case 'transferring':\n pageElement = (\n <TransferPage\n mobileView={props.mobileView}\n modalLayerHostId={props.modalLayerHostId}\n options={props.options}\n updateSidePaneRenderer={setSidePaneRenderer}\n mobileChatTabHeader={props.mobileChatTabHeader}\n onRenderAvatar={onRenderAvatar}\n onFetchAvatarPersonaData={onFetchAvatarPersonaData}\n />\n );\n break;\n case 'call':\n pageElement = (\n <CallPage\n onRenderAvatar={onRenderAvatar}\n callInvitationURL={callInvitationUrl}\n onFetchAvatarPersonaData={onFetchAvatarPersonaData}\n onFetchParticipantMenuItems={onFetchParticipantMenuItems}\n mobileView={props.mobileView}\n modalLayerHostId={props.modalLayerHostId}\n options={props.options}\n updateSidePaneRenderer={setSidePaneRenderer}\n mobileChatTabHeader={props.mobileChatTabHeader}\n />\n );\n break;\n /* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */\n case 'hold':\n pageElement = (\n <>\n {\n <HoldPage\n mobileView={props.mobileView}\n modalLayerHostId={props.modalLayerHostId}\n options={props.options}\n updateSidePaneRenderer={setSidePaneRenderer}\n mobileChatTabHeader={props.mobileChatTabHeader}\n />\n }\n </>\n );\n break;\n }\n\n /* @conditional-compile-remove(unsupported-browser) */\n switch (page) {\n case 'unsupportedEnvironment':\n pageElement = (\n <>\n {\n /* @conditional-compile-remove(unsupported-browser) */\n <UnsupportedBrowserPage\n onTroubleshootingClick={props.options?.onEnvironmentInfoTroubleshootingClick}\n environmentInfo={adapter.getState().environmentInfo}\n />\n }\n </>\n );\n break;\n }\n\n if (!pageElement) {\n throw new Error('Invalid call composite page');\n }\n\n /* @conditional-compile-remove(rooms) */\n const permissions = _getPermissions(role === 'Unknown' || role === undefined ? props.roleHint : role);\n\n // default retElement for stable version\n let retElement = pageElement;\n /* @conditional-compile-remove(rooms) */\n retElement = <_PermissionsProvider permissions={permissions}>{pageElement}</_PermissionsProvider>;\n\n return (\n <SidePaneProvider sidePaneRenderer={sidePaneRenderer} overrideSidePane={injectedSidePaneProps}>\n {retElement}\n </SidePaneProvider>\n );\n};\n\n/**\n * A customizable UI composite for calling experience.\n *\n * @remarks Call composite min width/height are as follow:\n * - mobile: 17.5rem x 21rem (280px x 336px, with default rem at 16px)\n * - desktop: 30rem x 22rem (480px x 352px, with default rem at 16px)\n *\n * @public\n */\nexport const CallComposite = (props: CallCompositeProps): JSX.Element => <CallCompositeInner {...props} />;\n\n/**\n * @private\n */\nexport interface InternalCallCompositeProps {\n overrideSidePane?: InjectedSidePaneProps;\n onSidePaneIdChange?: (sidePaneId: string | undefined) => void;\n\n // legacy property to avoid breaking change\n mobileChatTabHeader?: MobileChatSidePaneTabHeaderProps;\n}\n\n/** @private */\nexport const CallCompositeInner = (props: CallCompositeProps & InternalCallCompositeProps): JSX.Element => {\n const {\n adapter,\n callInvitationUrl,\n onFetchAvatarPersonaData,\n onFetchParticipantMenuItems,\n options,\n formFactor = 'desktop'\n } = props;\n\n /* @conditional-compile-remove(rooms) */\n const roleHint = adapter.getState().roleHint;\n\n useEffect(() => {\n (async () => {\n const constrain = getQueryOptions({\n /* @conditional-compile-remove(rooms) */ role: roleHint\n });\n await adapter.askDevicePermission(constrain);\n adapter.queryCameras();\n adapter.queryMicrophones();\n adapter.querySpeakers();\n })();\n }, [adapter, /* @conditional-compile-remove(rooms) */ roleHint]);\n\n const mobileView = formFactor === 'mobile';\n\n const modalLayerHostId = useId('modalLayerhost');\n\n const mainScreenContainerClassName = useMemo(() => {\n return mobileView ? mainScreenContainerStyleMobile : mainScreenContainerStyleDesktop;\n }, [mobileView]);\n\n return (\n <div className={mainScreenContainerClassName}>\n <BaseProvider {...props}>\n <CallAdapterProvider adapter={adapter}>\n <MainScreen\n callInvitationUrl={callInvitationUrl}\n onFetchAvatarPersonaData={onFetchAvatarPersonaData}\n onFetchParticipantMenuItems={onFetchParticipantMenuItems}\n mobileView={mobileView}\n modalLayerHostId={modalLayerHostId}\n options={options}\n /* @conditional-compile-remove(rooms) */\n roleHint={roleHint}\n onSidePaneIdChange={props.onSidePaneIdChange}\n overrideSidePane={props.overrideSidePane}\n mobileChatTabHeader={props.mobileChatTabHeader}\n />\n {\n // This layer host is for ModalLocalAndRemotePIP in SidePane. This LayerHost cannot be inside the SidePane\n // because when the SidePane is hidden, ie. style property display is 'none', it takes up no space. This causes problems when dragging\n // the Modal because the draggable bounds thinks it has no space and will always return to its initial position after dragging.\n // Additionally, this layer host cannot be in the Call Arrangement as it needs to be rendered before useMinMaxDragPosition() in\n // common/utils useRef is called.\n // Warning: this is fragile and works because the call arrangement page is only rendered after the call has connected and thus this\n // LayerHost will be guaranteed to have rendered (and subsequently mounted in the DOM). This ensures the DOM element will be available\n // before the call to `document.getElementById(modalLayerHostId)` is made.\n /* @conditional-compile-remove(one-to-n-calling) @conditional-compile-remove(PSTN-calls) @conditional-compile-remove(call-readiness) */\n <LayerHost id={modalLayerHostId} className={mergeStyles(modalLayerHostStyle)} />\n }\n </CallAdapterProvider>\n </BaseProvider>\n </div>\n );\n};\n\nconst getQueryOptions = (options: { /* @conditional-compile-remove(rooms) */ role?: Role }): PermissionConstraints => {\n /* @conditional-compile-remove(rooms) */\n if (options.role === 'Consumer') {\n return {\n video: false,\n audio: true\n };\n }\n return { video: true, audio: true };\n};\n\"../../../../calling-component-bindings/src\"\"../../../../react-components/src\""]}
|
1
|
+
{"version":3,"file":"CallComposite.js","sourceRoot":"","sources":["../../../../../../../react-composites/src/composites/CallComposite/CallComposite.tsx"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport { _isInCall } from '@internal/calling-component-bindings';\nimport { OnRenderAvatarCallback, ParticipantMenuItemsCallback, useTheme } from '@internal/react-components';\nimport React, { useEffect, useMemo, useRef } from 'react';\nimport { AvatarPersonaDataCallback } from '../common/AvatarPersona';\nimport { BaseProvider, BaseCompositeProps } from '../common/BaseComposite';\nimport { CallCompositeIcons } from '../common/icons';\nimport { useLocale } from '../localization';\nimport { CommonCallAdapter } from './adapter/CallAdapter';\nimport { CallAdapterProvider, useAdapter } from './adapter/CallAdapterProvider';\nimport { CallPage } from './pages/CallPage';\nimport { ConfigurationPage } from './pages/ConfigurationPage';\nimport { NoticePage } from './pages/NoticePage';\nimport { useSelector } from './hooks/useSelector';\nimport { getPage } from './selectors/baseSelectors';\n/* @conditional-compile-remove(rooms) */\nimport { getRole } from './selectors/baseSelectors';\nimport { LobbyPage } from './pages/LobbyPage';\n/* @conditional-compile-remove(call-transfer) */\nimport { TransferPage } from './pages/TransferPage';\nimport {\n leavingPageStyle,\n mainScreenContainerStyleDesktop,\n mainScreenContainerStyleMobile\n} from './styles/CallComposite.styles';\nimport { CallControlOptions } from './types/CallControlOptions';\n\n/* @conditional-compile-remove(rooms) */\nimport { _PermissionsProvider, Role, _getPermissions } from '@internal/react-components';\nimport { LayerHost, mergeStyles } from '@fluentui/react';\nimport { modalLayerHostStyle } from '../common/styles/ModalLocalAndRemotePIP.styles';\nimport { useId } from '@fluentui/react-hooks';\n/* @conditional-compile-remove(one-to-n-calling) */ /* @conditional-compile-remove(PSTN-calls) */\nimport { HoldPage } from './pages/HoldPage';\n/* @conditional-compile-remove(unsupported-browser) */\nimport { UnsupportedBrowserPage } from './pages/UnsupportedBrowser';\nimport { PermissionConstraints } from '@azure/communication-calling';\nimport { MobileChatSidePaneTabHeaderProps } from '../common/TabHeader';\nimport { InjectedSidePaneProps, SidePaneProvider, SidePaneRenderer } from './components/SidePane/SidePaneProvider';\n\n/**\n * Props for {@link CallComposite}.\n *\n * @public\n */\nexport interface CallCompositeProps extends BaseCompositeProps<CallCompositeIcons> {\n /**\n * An adapter provides logic and data to the composite.\n * Composite can also be controlled using the adapter.\n */\n adapter: CommonCallAdapter;\n /**\n * Optimizes the composite form factor for either desktop or mobile.\n * @remarks `mobile` is currently only optimized for Portrait mode on mobile devices and does not support landscape.\n * @defaultValue 'desktop'\n */\n formFactor?: 'desktop' | 'mobile';\n /**\n * URL to invite new participants to the current call. If this is supplied, a button appears in the Participants\n * Button flyout menu.\n */\n callInvitationUrl?: string;\n /**\n * Flags to enable/disable or customize UI elements of the {@link CallComposite}.\n */\n options?: CallCompositeOptions;\n}\n\n/* @conditional-compile-remove(call-readiness) */\n/**\n * Device Checks.\n * Choose whether or not to block starting a call depending on camera and microphone permission options.\n *\n * @beta\n */\nexport interface DeviceCheckOptions {\n /**\n * Camera Permission prompts for your call.\n * 'required' - requires the permission to be allowed before permitting the user join the call.\n * 'optional' - permission can be disallowed and the user is still permitted to join the call.\n * 'doNotPrompt' - permission is not required and the user is not prompted to allow the permission.\n */\n camera: 'required' | 'optional' | 'doNotPrompt';\n /**\n * Microphone permission prompts for your call.\n * 'required' - requires the permission to be allowed before permitting the user join the call.\n * 'optional' - permission can be disallowed and the user is still permitted to join the call.\n * 'doNotPrompt' - permission is not required and the user is not prompted to allow the permission.\n */\n microphone: 'required' | 'optional' | 'doNotPrompt';\n}\n\n/* @conditional-compile-remove(pinned-participants) */\n/**\n * Menu options for remote video tiles in {@link VideoGallery}.\n *\n * @beta\n */\nexport interface RemoteVideoTileMenuOptions {\n /**\n * If set to true, remote video tiles in the VideoGallery will not have menu options\n *\n * @defaultValue false\n */\n isHidden?: boolean;\n}\n\n/* @conditional-compile-remove(click-to-call) */\n/**\n * Options for the local video tile in the Call composite.\n *\n * @beta\n */\nexport interface LocalVideoTileOptions {\n /**\n * Position of the local video tile. If unset will render the local tile in the floating local position.\n *\n * @defaultValue 'floating'\n * @remarks 'grid' - local video tile will be rendered in the grid view of the videoGallery.\n * 'floating' - local video tile will be rendered in the floating position and will observe overflow gallery\n * local video tile rules and be docked in the bottom corner.\n * 'hidden' - local video tile will not be rendered.\n * This does not affect the Configuration screen or the side pane Picture in Picture in Picture view.\n */\n position?: 'grid' | 'floating';\n}\n/**\n * Optional features of the {@link CallComposite}.\n *\n * @public\n */\nexport type CallCompositeOptions = {\n /**\n * Surface Azure Communication Services backend errors in the UI with {@link @azure/communication-react#ErrorBar}.\n * Hide or show the error bar.\n * @defaultValue true\n */\n errorBar?: boolean;\n /**\n * Hide or Customize the control bar element.\n * Can be customized by providing an object of type {@link @azure/communication-react#CallControlOptions}.\n * @defaultValue true\n */\n callControls?: boolean | CallControlOptions;\n /* @conditional-compile-remove(call-readiness) */\n /**\n * Device permissions check options for your call.\n * Here you can choose what device permissions you prompt the user for,\n * as well as what device permissions must be accepted before starting a call.\n */\n deviceChecks?: DeviceCheckOptions;\n /* @conditional-compile-remove(call-readiness) */\n /**\n * Callback you may provide to supply users with further steps to troubleshoot why they have been\n * unable to grant your site the required permissions for the call.\n *\n * @example\n * ```ts\n * onPermissionsTroubleshootingClick: () =>\n * window.open('https://contoso.com/permissions-troubleshooting', '_blank');\n * ```\n *\n * @remarks\n * if this is not supplied, the composite will not show a 'further troubleshooting' link.\n */\n onPermissionsTroubleshootingClick?: (permissionsState: {\n camera: PermissionState;\n microphone: PermissionState;\n }) => void;\n /* @conditional-compile-remove(call-readiness) */\n /**\n * Callback you may provide to supply users with further steps to troubleshoot why they have been\n * having network issues when connecting to the call.\n *\n * @example\n * ```ts\n * onNetworkingTroubleShootingClick?: () =>\n * window.open('https://contoso.com/network-troubleshooting', '_blank');\n * ```\n *\n * @remarks\n * if this is not supplied, the composite will not show a 'network troubleshooting' link.\n */\n onNetworkingTroubleShootingClick?: () => void;\n /* @conditional-compile-remove(unsupported-browser) */\n /**\n * Callback you may provide to supply users with a provided page to showcase supported browsers by ACS.\n *\n * @example\n * ```ts\n * onBrowserTroubleShootingClick?: () =>\n * window.open('https://contoso.com/browser-troubleshooting', '_blank');\n * ```\n *\n * @remarks\n * if this is not supplied, the composite will not show a unsupported browser page.\n */\n onEnvironmentInfoTroubleshootingClick?: () => void;\n /* @conditional-compile-remove(pinned-participants) */\n /**\n * Remote participant video tile menu options\n */\n remoteVideoTileMenu?: RemoteVideoTileMenuOptions;\n /* @conditional-compile-remove(click-to-call) */\n /**\n * Options for controlling the local video tile.\n *\n * @remarks if 'false' the local video tile will not be rendered.\n */\n localVideoTile?: boolean | LocalVideoTileOptions;\n};\n\ntype MainScreenProps = {\n mobileView: boolean;\n modalLayerHostId: string;\n onRenderAvatar?: OnRenderAvatarCallback;\n callInvitationUrl?: string;\n onFetchAvatarPersonaData?: AvatarPersonaDataCallback;\n onFetchParticipantMenuItems?: ParticipantMenuItemsCallback;\n options?: CallCompositeOptions;\n /* @conditional-compile-remove(rooms) */\n roleHint?: Role;\n overrideSidePane?: InjectedSidePaneProps;\n onSidePaneIdChange?: (sidePaneId: string | undefined) => void;\n mobileChatTabHeader?: MobileChatSidePaneTabHeaderProps;\n};\n\nconst isShowing = (overrideSidePane?: InjectedSidePaneProps): boolean => {\n return !!overrideSidePane?.isActive;\n};\n\nconst MainScreen = (props: MainScreenProps): JSX.Element => {\n const { callInvitationUrl, onRenderAvatar, onFetchAvatarPersonaData, onFetchParticipantMenuItems } = props;\n const page = useSelector(getPage);\n\n const [sidePaneRenderer, setSidePaneRenderer] = React.useState<SidePaneRenderer | undefined>();\n const [injectedSidePaneProps, setInjectedSidePaneProps] = React.useState<InjectedSidePaneProps>();\n\n const overridePropsRef = useRef<InjectedSidePaneProps | undefined>(props.overrideSidePane);\n useEffect(() => {\n setInjectedSidePaneProps(props.overrideSidePane);\n // When the injected side pane is opened, clear the previous side pane active state.\n // this ensures when the injected side pane is \"closed\", the previous side pane is not \"re-opened\".\n if (!isShowing(overridePropsRef.current) && isShowing(props.overrideSidePane)) {\n setSidePaneRenderer(undefined);\n }\n overridePropsRef.current = props.overrideSidePane;\n }, [props.overrideSidePane]);\n\n const onSidePaneIdChange = props.onSidePaneIdChange;\n useEffect(() => {\n onSidePaneIdChange?.(sidePaneRenderer?.id);\n }, [sidePaneRenderer?.id, onSidePaneIdChange]);\n\n const adapter = useAdapter();\n const locale = useLocale();\n const palette = useTheme().palette;\n const leavePageStyle = useMemo(() => leavingPageStyle(palette), [palette]);\n\n /* @conditional-compile-remove(rooms) */\n const role = useSelector(getRole);\n\n let pageElement: JSX.Element | undefined;\n /* @conditional-compile-remove(rooms) */\n switch (page) {\n case 'roomNotFound':\n pageElement = (\n <NoticePage\n iconName=\"NoticePageInvalidRoom\"\n title={locale.strings.call.roomNotFoundTitle}\n moreDetails={locale.strings.call.roomNotFoundDetails}\n dataUiId={'room-not-found-page'}\n />\n );\n break;\n case 'deniedPermissionToRoom':\n pageElement = (\n <NoticePage\n iconName=\"NoticePageInvalidRoom\"\n title={locale.strings.call.deniedPermissionToRoomTitle}\n moreDetails={locale.strings.call.deniedPermissionToRoomDetails}\n dataUiId={'not-invited-to-room-page'}\n />\n );\n break;\n }\n switch (page) {\n case 'configuration':\n pageElement = (\n <ConfigurationPage\n mobileView={props.mobileView}\n startCallHandler={(): void => {\n adapter.joinCall();\n }}\n updateSidePaneRenderer={setSidePaneRenderer}\n modalLayerHostId={props.modalLayerHostId}\n /* @conditional-compile-remove(call-readiness) */\n deviceChecks={props.options?.deviceChecks}\n /* @conditional-compile-remove(call-readiness) */\n onPermissionsTroubleshootingClick={props.options?.onPermissionsTroubleshootingClick}\n /* @conditional-compile-remove(call-readiness) */\n onNetworkingTroubleShootingClick={props.options?.onNetworkingTroubleShootingClick}\n />\n );\n break;\n case 'accessDeniedTeamsMeeting':\n pageElement = (\n <NoticePage\n iconName=\"NoticePageAccessDeniedTeamsMeeting\"\n title={locale.strings.call.failedToJoinTeamsMeetingReasonAccessDeniedTitle}\n moreDetails={locale.strings.call.failedToJoinTeamsMeetingReasonAccessDeniedMoreDetails}\n dataUiId={'access-denied-teams-meeting-page'}\n />\n );\n break;\n case 'removedFromCall':\n pageElement = (\n <NoticePage\n iconName=\"NoticePageRemovedFromCall\"\n title={locale.strings.call.removedFromCallTitle}\n moreDetails={locale.strings.call.removedFromCallMoreDetails}\n dataUiId={'removed-from-call-page'}\n />\n );\n break;\n case 'joinCallFailedDueToNoNetwork':\n pageElement = (\n <NoticePage\n iconName=\"NoticePageJoinCallFailedDueToNoNetwork\"\n title={locale.strings.call.failedToJoinCallDueToNoNetworkTitle}\n moreDetails={locale.strings.call.failedToJoinCallDueToNoNetworkMoreDetails}\n dataUiId={'join-call-failed-due-to-no-network-page'}\n />\n );\n break;\n case 'leaving':\n pageElement = (\n <NoticePage\n title={locale.strings.call.leavingCallTitle ?? 'Leaving...'}\n dataUiId={'leaving-page'}\n pageStyle={leavePageStyle}\n disableStartCallButton={true}\n />\n );\n break;\n case 'leftCall':\n pageElement = (\n <NoticePage\n iconName=\"NoticePageLeftCall\"\n title={locale.strings.call.leftCallTitle}\n moreDetails={locale.strings.call.leftCallMoreDetails}\n dataUiId={'left-call-page'}\n />\n );\n break;\n case 'lobby':\n pageElement = (\n <LobbyPage\n mobileView={props.mobileView}\n modalLayerHostId={props.modalLayerHostId}\n options={props.options}\n updateSidePaneRenderer={setSidePaneRenderer}\n mobileChatTabHeader={props.mobileChatTabHeader}\n />\n );\n break;\n /* @conditional-compile-remove(call-transfer) */\n case 'transferring':\n pageElement = (\n <TransferPage\n mobileView={props.mobileView}\n modalLayerHostId={props.modalLayerHostId}\n options={props.options}\n updateSidePaneRenderer={setSidePaneRenderer}\n mobileChatTabHeader={props.mobileChatTabHeader}\n onRenderAvatar={onRenderAvatar}\n onFetchAvatarPersonaData={onFetchAvatarPersonaData}\n />\n );\n break;\n case 'call':\n pageElement = (\n <CallPage\n onRenderAvatar={onRenderAvatar}\n callInvitationURL={callInvitationUrl}\n onFetchAvatarPersonaData={onFetchAvatarPersonaData}\n onFetchParticipantMenuItems={onFetchParticipantMenuItems}\n mobileView={props.mobileView}\n modalLayerHostId={props.modalLayerHostId}\n options={props.options}\n updateSidePaneRenderer={setSidePaneRenderer}\n mobileChatTabHeader={props.mobileChatTabHeader}\n />\n );\n break;\n /* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */\n case 'hold':\n pageElement = (\n <>\n {\n <HoldPage\n mobileView={props.mobileView}\n modalLayerHostId={props.modalLayerHostId}\n options={props.options}\n updateSidePaneRenderer={setSidePaneRenderer}\n mobileChatTabHeader={props.mobileChatTabHeader}\n />\n }\n </>\n );\n break;\n }\n\n /* @conditional-compile-remove(unsupported-browser) */\n switch (page) {\n case 'unsupportedEnvironment':\n pageElement = (\n <>\n {\n /* @conditional-compile-remove(unsupported-browser) */\n <UnsupportedBrowserPage\n onTroubleshootingClick={props.options?.onEnvironmentInfoTroubleshootingClick}\n environmentInfo={adapter.getState().environmentInfo}\n />\n }\n </>\n );\n break;\n }\n\n if (!pageElement) {\n throw new Error('Invalid call composite page');\n }\n\n /* @conditional-compile-remove(rooms) */\n const permissions = _getPermissions(role === 'Unknown' || role === undefined ? props.roleHint : role);\n\n // default retElement for stable version\n let retElement = pageElement;\n /* @conditional-compile-remove(rooms) */\n retElement = <_PermissionsProvider permissions={permissions}>{pageElement}</_PermissionsProvider>;\n\n return (\n <SidePaneProvider sidePaneRenderer={sidePaneRenderer} overrideSidePane={injectedSidePaneProps}>\n {retElement}\n </SidePaneProvider>\n );\n};\n\n/**\n * A customizable UI composite for calling experience.\n *\n * @remarks Call composite min width/height are as follow:\n * - mobile: 17.5rem x 21rem (280px x 336px, with default rem at 16px)\n * - desktop: 30rem x 22rem (480px x 352px, with default rem at 16px)\n *\n * @public\n */\nexport const CallComposite = (props: CallCompositeProps): JSX.Element => <CallCompositeInner {...props} />;\n\n/**\n * @private\n */\nexport interface InternalCallCompositeProps {\n overrideSidePane?: InjectedSidePaneProps;\n onSidePaneIdChange?: (sidePaneId: string | undefined) => void;\n\n // legacy property to avoid breaking change\n mobileChatTabHeader?: MobileChatSidePaneTabHeaderProps;\n}\n\n/** @private */\nexport const CallCompositeInner = (props: CallCompositeProps & InternalCallCompositeProps): JSX.Element => {\n const {\n adapter,\n callInvitationUrl,\n onFetchAvatarPersonaData,\n onFetchParticipantMenuItems,\n options,\n formFactor = 'desktop'\n } = props;\n\n /* @conditional-compile-remove(rooms) */\n const roleHint = adapter.getState().roleHint;\n\n useEffect(() => {\n (async () => {\n const constrain = getQueryOptions({\n /* @conditional-compile-remove(rooms) */ role: roleHint\n });\n await adapter.askDevicePermission(constrain);\n adapter.queryCameras();\n adapter.queryMicrophones();\n adapter.querySpeakers();\n })();\n }, [adapter, /* @conditional-compile-remove(rooms) */ roleHint]);\n\n const mobileView = formFactor === 'mobile';\n\n const modalLayerHostId = useId('modalLayerhost');\n const mainScreenContainerClassName = useMemo(() => {\n return mobileView ? mainScreenContainerStyleMobile : mainScreenContainerStyleDesktop;\n }, [mobileView]);\n\n return (\n <div className={mainScreenContainerClassName}>\n <BaseProvider {...props}>\n <CallAdapterProvider adapter={adapter}>\n <MainScreen\n callInvitationUrl={callInvitationUrl}\n onFetchAvatarPersonaData={onFetchAvatarPersonaData}\n onFetchParticipantMenuItems={onFetchParticipantMenuItems}\n mobileView={mobileView}\n modalLayerHostId={modalLayerHostId}\n options={options}\n /* @conditional-compile-remove(rooms) */\n roleHint={roleHint}\n onSidePaneIdChange={props.onSidePaneIdChange}\n overrideSidePane={props.overrideSidePane}\n mobileChatTabHeader={props.mobileChatTabHeader}\n />\n {\n // This layer host is for ModalLocalAndRemotePIP in SidePane. This LayerHost cannot be inside the SidePane\n // because when the SidePane is hidden, ie. style property display is 'none', it takes up no space. This causes problems when dragging\n // the Modal because the draggable bounds thinks it has no space and will always return to its initial position after dragging.\n // Additionally, this layer host cannot be in the Call Arrangement as it needs to be rendered before useMinMaxDragPosition() in\n // common/utils useRef is called.\n // Warning: this is fragile and works because the call arrangement page is only rendered after the call has connected and thus this\n // LayerHost will be guaranteed to have rendered (and subsequently mounted in the DOM). This ensures the DOM element will be available\n // before the call to `document.getElementById(modalLayerHostId)` is made.\n <LayerHost id={modalLayerHostId} className={mergeStyles(modalLayerHostStyle)} />\n }\n </CallAdapterProvider>\n </BaseProvider>\n </div>\n );\n};\n\nconst getQueryOptions = (options: { /* @conditional-compile-remove(rooms) */ role?: Role }): PermissionConstraints => {\n /* @conditional-compile-remove(rooms) */\n if (options.role === 'Consumer') {\n return {\n video: false,\n audio: true\n };\n }\n return { video: true, audio: true };\n};\n\"../../../../calling-component-bindings/src\"\"../../../../react-components/src\""]}
|
@@ -49,6 +49,9 @@ export declare class AzureCommunicationCallAdapter<AgentType extends CallAgent |
|
|
49
49
|
private _joinCall;
|
50
50
|
createStreamView(remoteUserId?: string, options?: VideoStreamOptions): Promise<void | CreateVideoStreamViewResult>;
|
51
51
|
disposeStreamView(remoteUserId?: string): Promise<void>;
|
52
|
+
disposeScreenShareStreamView(remoteUserId: string): Promise<void>;
|
53
|
+
disposeRemoteVideoStreamView(remoteUserId: string): Promise<void>;
|
54
|
+
disposeLocalVideoStreamView(): Promise<void>;
|
52
55
|
leaveCall(forEveryone?: boolean): Promise<void>;
|
53
56
|
setCamera(device: VideoDeviceInfo, options?: VideoStreamOptions): Promise<void>;
|
54
57
|
setMicrophone(device: AudioDeviceInfo): Promise<void>;
|
@@ -157,6 +160,12 @@ export declare type CommonCallAdapterOptions = {
|
|
157
160
|
* Default set of background images for background image picker.
|
158
161
|
*/
|
159
162
|
videoBackgroundImages?: VideoBackgroundImage[];
|
163
|
+
/**
|
164
|
+
* Use this to fetch profile information which will override data in {@link CallAdapterState} like display name
|
165
|
+
* The onFetchProfile is fetch-and-forget one time action for each user, once a user profile is updated, the value will be cached
|
166
|
+
* and would not be updated again within the lifecycle of adapter.
|
167
|
+
*/
|
168
|
+
onFetchProfile?: OnFetchProfileCallback;
|
160
169
|
};
|
161
170
|
/**
|
162
171
|
* Optional parameters to create {@link AzureCommunicationCallAdapter}
|
@@ -198,14 +207,7 @@ export declare type AzureCommunicationCallAdapterArgs = {
|
|
198
207
|
*
|
199
208
|
* @beta
|
200
209
|
*/
|
201
|
-
export declare type TeamsAdapterOptions =
|
202
|
-
/**
|
203
|
-
* Use this to fetch profile information which will override data in {@link CallAdapterState} like display name
|
204
|
-
* The onFetchProfile is fetch-and-forget one time action for each user, once a user profile is updated, the value will be cached
|
205
|
-
* and would not be updated again within the lifecycle of adapter.
|
206
|
-
*/
|
207
|
-
onFetchProfile?: OnFetchProfileCallback;
|
208
|
-
} & CommonCallAdapterOptions;
|
210
|
+
export declare type TeamsAdapterOptions = CommonCallAdapterOptions;
|
209
211
|
/**
|
210
212
|
* Arguments for creating the Azure Communication Services implementation of {@link TeamsCallAdapter}.
|
211
213
|
*
|
@@ -281,6 +283,6 @@ export declare const createAzureCommunicationCallAdapterFromClient: (callClient:
|
|
281
283
|
*
|
282
284
|
* @beta
|
283
285
|
*/
|
284
|
-
export declare const createTeamsCallAdapterFromClient: (callClient: StatefulCallClient, callAgent: TeamsCallAgent, locator: CallAdapterLocator, options?:
|
286
|
+
export declare const createTeamsCallAdapterFromClient: (callClient: StatefulCallClient, callAgent: TeamsCallAgent, locator: CallAdapterLocator, options?: CommonCallAdapterOptions | undefined) => Promise<TeamsCallAdapter>;
|
285
287
|
export {};
|
286
288
|
//# sourceMappingURL=AzureCommunicationCallAdapter.d.ts.map
|
@@ -9,11 +9,14 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
9
9
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
10
10
|
});
|
11
11
|
};
|
12
|
+
import { compositeLogger } from '../../../Logger';
|
12
13
|
import { _isInCall } from "../../../../../calling-component-bindings/src";
|
13
14
|
import { createStatefulCallClient } from "../../../../../calling-stateful-client/src";
|
14
15
|
/* @conditional-compile-remove(teams-identity-support) */
|
15
16
|
import { _isTeamsCallAgent } from "../../../../../calling-stateful-client/src";
|
16
17
|
import { LocalVideoStream as SDKLocalVideoStream } from '@azure/communication-calling';
|
18
|
+
/* @conditional-compile-remove(call-transfer) */
|
19
|
+
import { LocalVideoStream } from '@azure/communication-calling';
|
17
20
|
/* @conditional-compile-remove(unsupported-browser) */
|
18
21
|
import { Features } from '@azure/communication-calling';
|
19
22
|
import { EventEmitter } from 'events';
|
@@ -299,6 +302,9 @@ export class AzureCommunicationCallAdapter {
|
|
299
302
|
this.removeParticipant.bind(this);
|
300
303
|
this.createStreamView.bind(this);
|
301
304
|
this.disposeStreamView.bind(this);
|
305
|
+
this.disposeScreenShareStreamView.bind(this);
|
306
|
+
this.disposeRemoteVideoStreamView.bind(this);
|
307
|
+
this.disposeLocalVideoStreamView.bind(this);
|
302
308
|
this.on.bind(this);
|
303
309
|
this.off.bind(this);
|
304
310
|
this.processNewCall.bind(this);
|
@@ -333,29 +339,44 @@ export class AzureCommunicationCallAdapter {
|
|
333
339
|
}
|
334
340
|
queryCameras() {
|
335
341
|
return __awaiter(this, void 0, void 0, function* () {
|
342
|
+
const startTime = new Date().getTime();
|
336
343
|
return yield this.asyncTeeErrorToEventEmitter(() => __awaiter(this, void 0, void 0, function* () {
|
337
|
-
|
344
|
+
const cameras = yield this.deviceManager.getCameras();
|
345
|
+
const endTime = new Date().getTime();
|
346
|
+
compositeLogger.info('time to query cameras', endTime - startTime, 'ms');
|
347
|
+
return cameras;
|
338
348
|
}));
|
339
349
|
});
|
340
350
|
}
|
341
351
|
queryMicrophones() {
|
342
352
|
return __awaiter(this, void 0, void 0, function* () {
|
353
|
+
const startTime = new Date().getTime();
|
343
354
|
return yield this.asyncTeeErrorToEventEmitter(() => __awaiter(this, void 0, void 0, function* () {
|
344
|
-
|
355
|
+
const microphones = yield this.deviceManager.getMicrophones();
|
356
|
+
const endTime = new Date().getTime();
|
357
|
+
compositeLogger.info('time to query microphones', endTime - startTime, 'ms');
|
358
|
+
return microphones;
|
345
359
|
}));
|
346
360
|
});
|
347
361
|
}
|
348
362
|
querySpeakers() {
|
349
363
|
return __awaiter(this, void 0, void 0, function* () {
|
364
|
+
const startTime = new Date().getTime();
|
350
365
|
return yield this.asyncTeeErrorToEventEmitter(() => __awaiter(this, void 0, void 0, function* () {
|
351
|
-
|
366
|
+
const speakers = (yield this.deviceManager.isSpeakerSelectionAvailable) ? this.deviceManager.getSpeakers() : [];
|
367
|
+
const endTime = new Date().getTime();
|
368
|
+
compositeLogger.info('time to query speakers', endTime - startTime, 'ms');
|
369
|
+
return speakers;
|
352
370
|
}));
|
353
371
|
});
|
354
372
|
}
|
355
373
|
askDevicePermission(constrain) {
|
356
374
|
return __awaiter(this, void 0, void 0, function* () {
|
375
|
+
const startTime = new Date().getTime();
|
357
376
|
return yield this.asyncTeeErrorToEventEmitter(() => __awaiter(this, void 0, void 0, function* () {
|
358
377
|
yield this.deviceManager.askDevicePermission(constrain);
|
378
|
+
const endTime = new Date().getTime();
|
379
|
+
compositeLogger.info('time to query askDevicePermissions', endTime - startTime, 'ms');
|
359
380
|
}));
|
360
381
|
});
|
361
382
|
}
|
@@ -435,6 +456,21 @@ export class AzureCommunicationCallAdapter {
|
|
435
456
|
}
|
436
457
|
});
|
437
458
|
}
|
459
|
+
disposeScreenShareStreamView(remoteUserId) {
|
460
|
+
return __awaiter(this, void 0, void 0, function* () {
|
461
|
+
yield this.handlers.onDisposeRemoteScreenShareStreamView(remoteUserId);
|
462
|
+
});
|
463
|
+
}
|
464
|
+
disposeRemoteVideoStreamView(remoteUserId) {
|
465
|
+
return __awaiter(this, void 0, void 0, function* () {
|
466
|
+
yield this.handlers.onDisposeRemoteVideoStreamView(remoteUserId);
|
467
|
+
});
|
468
|
+
}
|
469
|
+
disposeLocalVideoStreamView() {
|
470
|
+
return __awaiter(this, void 0, void 0, function* () {
|
471
|
+
yield this.handlers.onDisposeLocalStreamView();
|
472
|
+
});
|
473
|
+
}
|
438
474
|
leaveCall(forEveryone) {
|
439
475
|
return __awaiter(this, void 0, void 0, function* () {
|
440
476
|
yield this.handlers.onHangUp(forEveryone);
|
@@ -770,7 +806,19 @@ export class AzureCommunicationCallAdapter {
|
|
770
806
|
}
|
771
807
|
/* @conditional-compile-remove(call-transfer) */
|
772
808
|
transferRequested(args) {
|
773
|
-
|
809
|
+
const newArgs = Object.assign(Object.assign({}, args), { accept: (options) => {
|
810
|
+
var _a, _b, _c, _d, _e, _f;
|
811
|
+
const videoSource = (_c = (_b = (_a = this.context.getState().call) === null || _a === void 0 ? void 0 : _a.localVideoStreams) === null || _b === void 0 ? void 0 : _b[0]) === null || _c === void 0 ? void 0 : _c.source;
|
812
|
+
args.accept({
|
813
|
+
audioOptions: (_d = options === null || options === void 0 ? void 0 : options.audioOptions) !== null && _d !== void 0 ? _d : {
|
814
|
+
muted: !!((_e = this.context.getState().call) === null || _e === void 0 ? void 0 : _e.isMuted)
|
815
|
+
},
|
816
|
+
videoOptions: (_f = options === null || options === void 0 ? void 0 : options.videoOptions) !== null && _f !== void 0 ? _f :
|
817
|
+
/* maintain video state if options.videoOptions is not defined */
|
818
|
+
(videoSource ? { localVideoStreams: [new LocalVideoStream(videoSource)] } : undefined)
|
819
|
+
});
|
820
|
+
} });
|
821
|
+
this.emitter.emit('transferRequested', newArgs);
|
774
822
|
}
|
775
823
|
callIdChanged() {
|
776
824
|
var _a;
|