@azure/communication-react 1.12.1-alpha-202401240013 → 1.12.1-alpha-202401250013
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 +10 -5
- package/dist/dist-cjs/communication-react/index.js +330 -254
- 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/communication-react/src/index.d.ts +1 -1
- package/dist/dist-esm/communication-react/src/index.js.map +1 -1
- package/dist/dist-esm/react-components/src/components/ChatMessage/ChatMessageComponentAsEditBox.js +2 -1
- package/dist/dist-esm/react-components/src/components/ChatMessage/ChatMessageComponentAsEditBox.js.map +1 -1
- package/dist/dist-esm/react-components/src/components/Dialpad/Dialpad.d.ts +9 -5
- package/dist/dist-esm/react-components/src/components/Dialpad/Dialpad.js +5 -9
- package/dist/dist-esm/react-components/src/components/Dialpad/Dialpad.js.map +1 -1
- package/dist/dist-esm/react-components/src/components/FileUploadCards.d.ts +32 -1
- package/dist/dist-esm/react-components/src/components/FileUploadCards.js.map +1 -1
- package/dist/dist-esm/react-components/src/components/InputBoxButton.d.ts +19 -0
- package/dist/dist-esm/react-components/src/components/InputBoxButton.js +32 -0
- package/dist/dist-esm/react-components/src/components/InputBoxButton.js.map +1 -0
- package/dist/dist-esm/react-components/src/components/InputBoxComponent.d.ts +0 -17
- package/dist/dist-esm/react-components/src/components/InputBoxComponent.js +3 -29
- package/dist/dist-esm/react-components/src/components/InputBoxComponent.js.map +1 -1
- package/dist/dist-esm/react-components/src/components/RTE/RTEInputBoxComponent.d.ts +19 -0
- package/dist/dist-esm/react-components/src/components/RTE/RTEInputBoxComponent.js +13 -0
- package/dist/dist-esm/react-components/src/components/RTE/RTEInputBoxComponent.js.map +1 -0
- package/dist/dist-esm/react-components/src/components/RTE/RTESendBox.d.ts +34 -1
- package/dist/dist-esm/react-components/src/components/RTE/RTESendBox.js +45 -3
- package/dist/dist-esm/react-components/src/components/RTE/RTESendBox.js.map +1 -1
- package/dist/dist-esm/react-components/src/components/RTE/RTESendBoxErrors.d.ts +15 -0
- package/dist/dist-esm/react-components/src/components/RTE/RTESendBoxErrors.js +18 -0
- package/dist/dist-esm/react-components/src/components/RTE/RTESendBoxErrors.js.map +1 -0
- package/dist/dist-esm/react-components/src/components/RTE/RichTextEditor.d.ts +18 -0
- package/dist/dist-esm/react-components/src/components/RTE/RichTextEditor.js +40 -0
- package/dist/dist-esm/react-components/src/components/RTE/RichTextEditor.js.map +1 -0
- package/dist/dist-esm/react-components/src/components/SendBox.d.ts +1 -32
- package/dist/dist-esm/react-components/src/components/SendBox.js +33 -30
- package/dist/dist-esm/react-components/src/components/SendBox.js.map +1 -1
- package/dist/dist-esm/react-components/src/components/TextFieldWithMention/TextFieldWithMention.d.ts +0 -17
- package/dist/dist-esm/react-components/src/components/TextFieldWithMention/TextFieldWithMention.js +1 -28
- package/dist/dist-esm/react-components/src/components/TextFieldWithMention/TextFieldWithMention.js.map +1 -1
- package/dist/dist-esm/react-components/src/components/index.d.ts +2 -1
- package/dist/dist-esm/react-components/src/components/index.js.map +1 -1
- package/dist/dist-esm/react-components/src/components/styles/InputBoxButton.style.d.ts +13 -0
- package/dist/dist-esm/react-components/src/components/styles/InputBoxButton.style.js +30 -0
- package/dist/dist-esm/react-components/src/components/styles/InputBoxButton.style.js.map +1 -0
- package/dist/dist-esm/react-components/src/components/styles/InputBoxComponent.style.d.ts +0 -16
- package/dist/dist-esm/react-components/src/components/styles/InputBoxComponent.style.js +0 -32
- package/dist/dist-esm/react-components/src/components/styles/InputBoxComponent.style.js.map +1 -1
- package/dist/dist-esm/react-components/src/components/styles/RichTextEditor.styles.d.ts +5 -0
- package/dist/dist-esm/react-components/src/components/styles/RichTextEditor.styles.js +16 -0
- package/dist/dist-esm/react-components/src/components/styles/RichTextEditor.styles.js.map +1 -0
- package/dist/dist-esm/react-components/src/components/styles/SendBox.styles.d.ts +8 -2
- package/dist/dist-esm/react-components/src/components/styles/SendBox.styles.js +13 -7
- package/dist/dist-esm/react-components/src/components/styles/SendBox.styles.js.map +1 -1
- package/dist/dist-esm/react-components/src/components/utils/SendBoxUtils.d.ts +10 -0
- package/dist/dist-esm/react-components/src/components/utils/SendBoxUtils.js +18 -0
- package/dist/dist-esm/react-components/src/components/utils/SendBoxUtils.js.map +1 -0
- package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/CallPage.js +30 -3
- 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/DtmfDialpadPage.js +11 -4
- package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/DtmfDialpadPage.js.map +1 -1
- package/dist/dist-esm/react-composites/src/composites/CallComposite/selectors/baseSelectors.d.ts +5 -0
- package/dist/dist-esm/react-composites/src/composites/CallComposite/selectors/baseSelectors.js +4 -0
- package/dist/dist-esm/react-composites/src/composites/CallComposite/selectors/baseSelectors.js.map +1 -1
- package/dist/dist-esm/react-composites/src/composites/CallComposite/utils/MediaGalleryUtils.d.ts +7 -0
- package/dist/dist-esm/react-composites/src/composites/CallComposite/utils/MediaGalleryUtils.js +13 -0
- package/dist/dist-esm/react-composites/src/composites/CallComposite/utils/MediaGalleryUtils.js.map +1 -1
- package/dist/dist-esm/react-composites/src/composites/common/ControlBar/DesktopMoreButton.js +11 -16
- package/dist/dist-esm/react-composites/src/composites/common/ControlBar/DesktopMoreButton.js.map +1 -1
- package/dist/tsdoc-metadata.json +1 -1
- package/package.json +5 -1
@@ -25,7 +25,13 @@ export declare const sendButtonStyle: string;
|
|
25
25
|
/**
|
26
26
|
* @private
|
27
27
|
*/
|
28
|
-
export declare const sendIconStyle:
|
28
|
+
export declare const sendIconStyle: (props: {
|
29
|
+
theme: Theme;
|
30
|
+
hasText: boolean;
|
31
|
+
hasFile: boolean;
|
32
|
+
hasErrorMessage: boolean;
|
33
|
+
customSendIconStyle?: IStyle;
|
34
|
+
}) => string;
|
29
35
|
/**
|
30
36
|
* @private
|
31
37
|
*/
|
@@ -49,5 +55,5 @@ export declare const borderAndBoxShadowStyle: (props: {
|
|
49
55
|
theme: Theme;
|
50
56
|
hasErrorMessage: boolean;
|
51
57
|
disabled: boolean;
|
52
|
-
}) =>
|
58
|
+
}) => string;
|
53
59
|
//# sourceMappingURL=SendBox.styles.d.ts.map
|
@@ -31,11 +31,17 @@ export const sendButtonStyle = mergeStyles({
|
|
31
31
|
/**
|
32
32
|
* @private
|
33
33
|
*/
|
34
|
-
export const sendIconStyle =
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
34
|
+
export const sendIconStyle = (props) => {
|
35
|
+
const { theme, hasText,
|
36
|
+
/* @conditional-compile-remove(file-sharing) */ hasFile, hasErrorMessage, customSendIconStyle } = props;
|
37
|
+
const hasNoContent = !hasText && /* @conditional-compile-remove(file-sharing) */ !hasFile;
|
38
|
+
return mergeStyles({
|
39
|
+
width: '1.25rem',
|
40
|
+
height: '1.25rem',
|
41
|
+
margin: 'auto',
|
42
|
+
color: hasErrorMessage || hasNoContent ? theme.palette.neutralTertiary : theme.palette.themePrimary
|
43
|
+
}, customSendIconStyle);
|
44
|
+
};
|
39
45
|
/**
|
40
46
|
* @private
|
41
47
|
*/
|
@@ -68,7 +74,7 @@ export const borderAndBoxShadowStyle = (props) => {
|
|
68
74
|
const borderColorActive = hasErrorMessage ? theme.semanticColors.errorText : theme.palette.themePrimary;
|
69
75
|
const borderThickness = disabled ? 0 : defaultSendBoxInactiveBorderThicknessREM;
|
70
76
|
const borderActiveThickness = disabled ? 0 : defaultSendBoxActiveBorderThicknessREM;
|
71
|
-
return {
|
77
|
+
return mergeStyles({
|
72
78
|
borderRadius: theme.effects.roundedCorner4,
|
73
79
|
border: `${borderThickness}rem solid ${borderColor}`,
|
74
80
|
// The border thickness of the sendbox wrapper changes on hover, to prevent the border thickness change causing the
|
@@ -78,6 +84,6 @@ export const borderAndBoxShadowStyle = (props) => {
|
|
78
84
|
border: `${borderActiveThickness}rem solid ${borderColorActive}`,
|
79
85
|
margin: `${defaultSendBoxActiveBorderThicknessREM - borderActiveThickness}rem`
|
80
86
|
}
|
81
|
-
};
|
87
|
+
});
|
82
88
|
};
|
83
89
|
//# sourceMappingURL=SendBox.styles.js.map
|
@@ -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,
|
1
|
+
{"version":3,"file":"SendBox.styles.js","sourceRoot":"","sources":["../../../../../../../react-components/src/components/styles/SendBox.styles.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { IStyle, mergeStyles, 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 = (props: {\n theme: Theme;\n hasText: boolean;\n /* @conditional-compile-remove(file-sharing) */ hasFile: boolean;\n hasErrorMessage: boolean;\n customSendIconStyle?: IStyle;\n}): string => {\n const {\n theme,\n hasText,\n /* @conditional-compile-remove(file-sharing) */ hasFile,\n hasErrorMessage,\n customSendIconStyle\n } = props;\n const hasNoContent = !hasText && /* @conditional-compile-remove(file-sharing) */ !hasFile;\n return mergeStyles(\n {\n width: '1.25rem',\n height: '1.25rem',\n margin: 'auto',\n color: hasErrorMessage || hasNoContent ? theme.palette.neutralTertiary : theme.palette.themePrimary\n },\n customSendIconStyle\n );\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\n/**\n * @private\n */\nexport const defaultSendBoxInactiveBorderThicknessREM = 0.0625;\n/**\n * @private\n */\nexport const defaultSendBoxActiveBorderThicknessREM = 0.125;\n\n/**\n * @private\n */\nexport const borderAndBoxShadowStyle = (props: {\n theme: Theme;\n hasErrorMessage: boolean;\n disabled: boolean;\n}): string => {\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 mergeStyles({\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,10 @@
|
|
1
|
+
import { ActiveFileUpload } from '../FileUploadCards';
|
2
|
+
/**
|
3
|
+
* @private
|
4
|
+
*/
|
5
|
+
export declare const hasIncompleteFileUploads: (activeFileUploads: ActiveFileUpload[] | undefined) => boolean;
|
6
|
+
/**
|
7
|
+
* @private
|
8
|
+
*/
|
9
|
+
export declare const hasCompletedFileUploads: (activeFileUploads: ActiveFileUpload[] | undefined) => boolean;
|
10
|
+
//# sourceMappingURL=SendBoxUtils.d.ts.map
|
@@ -0,0 +1,18 @@
|
|
1
|
+
// Copyright (c) Microsoft Corporation.
|
2
|
+
// Licensed under the MIT License.
|
3
|
+
/* @conditional-compile-remove(file-sharing) */
|
4
|
+
/**
|
5
|
+
* @private
|
6
|
+
*/
|
7
|
+
export const hasIncompleteFileUploads = (activeFileUploads) => {
|
8
|
+
return !!((activeFileUploads === null || activeFileUploads === void 0 ? void 0 : activeFileUploads.length) &&
|
9
|
+
!activeFileUploads.filter((fileUpload) => !fileUpload.error).every((fileUpload) => fileUpload.uploadComplete));
|
10
|
+
};
|
11
|
+
/* @conditional-compile-remove(file-sharing) */
|
12
|
+
/**
|
13
|
+
* @private
|
14
|
+
*/
|
15
|
+
export const hasCompletedFileUploads = (activeFileUploads) => {
|
16
|
+
return !!(activeFileUploads === null || activeFileUploads === void 0 ? void 0 : activeFileUploads.find((file) => !file.error));
|
17
|
+
};
|
18
|
+
//# sourceMappingURL=SendBoxUtils.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"SendBoxUtils.js","sourceRoot":"","sources":["../../../../../../../react-components/src/components/utils/SendBoxUtils.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAKlC,+CAA+C;AAC/C;;GAEG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,iBAAiD,EAAW,EAAE;IACrG,OAAO,CAAC,CAAC,CACP,CAAA,iBAAiB,aAAjB,iBAAiB,uBAAjB,iBAAiB,CAAE,MAAM;QACzB,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,cAAc,CAAC,CAC9G,CAAC;AACJ,CAAC,CAAC;AAEF,+CAA+C;AAC/C;;GAEG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,iBAAiD,EAAW,EAAE;IACpG,OAAO,CAAC,CAAC,CAAA,iBAAiB,aAAjB,iBAAiB,uBAAjB,iBAAiB,CAAE,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA,CAAC;AAC1D,CAAC,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/* @conditional-compile-remove(file-sharing) */\nimport { ActiveFileUpload } from '../FileUploadCards';\n\n/* @conditional-compile-remove(file-sharing) */\n/**\n * @private\n */\nexport const hasIncompleteFileUploads = (activeFileUploads: ActiveFileUpload[] | undefined): boolean => {\n return !!(\n activeFileUploads?.length &&\n !activeFileUploads.filter((fileUpload) => !fileUpload.error).every((fileUpload) => fileUpload.uploadComplete)\n );\n};\n\n/* @conditional-compile-remove(file-sharing) */\n/**\n * @private\n */\nexport const hasCompletedFileUploads = (activeFileUploads: ActiveFileUpload[] | undefined): boolean => {\n return !!activeFileUploads?.find((file) => !file.error);\n};\n"]}
|
@@ -6,7 +6,7 @@ import { _isInCall } from "../../../../../calling-component-bindings/src";
|
|
6
6
|
import { ErrorBar } from "../../../../../react-components/src";
|
7
7
|
import React from 'react';
|
8
8
|
/* @conditional-compile-remove(dtmf-dialer) */
|
9
|
-
import { useState } from 'react';
|
9
|
+
import { useState, useEffect, useRef } from 'react';
|
10
10
|
import { useLocale } from '../../localization';
|
11
11
|
import { CallArrangement } from '../components/CallArrangement';
|
12
12
|
import { MediaGallery } from '../components/MediaGallery';
|
@@ -17,11 +17,17 @@ import { useSelector } from '../hooks/useSelector';
|
|
17
17
|
import { callStatusSelector } from '../selectors/callStatusSelector';
|
18
18
|
import { complianceBannerSelector } from '../selectors/complianceBannerSelector';
|
19
19
|
import { mediaGallerySelector } from '../selectors/mediaGallerySelector';
|
20
|
+
/* @conditional-compile-remove(dtmf-dialer) */
|
21
|
+
import { getRemoteParticipantsConnectedSelector } from '../selectors/mediaGallerySelector';
|
20
22
|
import { mutedNotificationSelector } from '../selectors/mutedNotificationSelector';
|
21
23
|
import { networkReconnectTileSelector } from '../selectors/networkReconnectTileSelector';
|
22
24
|
import { reduceCallControlsForMobile } from '../utils';
|
23
25
|
/* @conditional-compile-remove(dtmf-dialer) */
|
24
26
|
import { DtmfDialpadPage } from './DtmfDialpadPage';
|
27
|
+
/* @conditional-compile-remove(dtmf-dialer) */
|
28
|
+
import { showDtmfDialer } from '../utils/MediaGalleryUtils';
|
29
|
+
/* @conditional-compile-remove(dtmf-dialer) */
|
30
|
+
import { getTargetCallees } from '../selectors/baseSelectors';
|
25
31
|
/**
|
26
32
|
* @private
|
27
33
|
*/
|
@@ -45,7 +51,26 @@ export const CallPage = (props) => {
|
|
45
51
|
const mutedNotificationProps = useSelector(mutedNotificationSelector);
|
46
52
|
const networkReconnectTileProps = useSelector(networkReconnectTileSelector);
|
47
53
|
/* @conditional-compile-remove(dtmf-dialer) */
|
48
|
-
const
|
54
|
+
const remoteParticipantsConnected = useSelector(getRemoteParticipantsConnectedSelector);
|
55
|
+
/* @conditional-compile-remove(dtmf-dialer) */
|
56
|
+
const callees = useSelector(getTargetCallees);
|
57
|
+
/* @conditional-compile-remove(dtmf-dialer) */
|
58
|
+
const renderDtmfDialerFromStart = showDtmfDialer(callees);
|
59
|
+
/* @conditional-compile-remove(dtmf-dialer) */
|
60
|
+
const [dtmfDialerPresent, setDtmfDialerPresent] = useState(renderDtmfDialerFromStart);
|
61
|
+
/* @conditional-compile-remove(dtmf-dialer) */
|
62
|
+
const dialerShouldAutoDismiss = useRef(renderDtmfDialerFromStart);
|
63
|
+
/* @conditional-compile-remove(dtmf-dialer) */
|
64
|
+
/**
|
65
|
+
* This useEffect is about clearing the dtmf dialer should there be a new participant that joins the call.
|
66
|
+
* This will only happen the first time should the dialer be present when the call starts.
|
67
|
+
*/
|
68
|
+
useEffect(() => {
|
69
|
+
if (remoteParticipantsConnected.length > 1 && dtmfDialerPresent && dialerShouldAutoDismiss.current) {
|
70
|
+
setDtmfDialerPresent(false);
|
71
|
+
dialerShouldAutoDismiss.current = false;
|
72
|
+
}
|
73
|
+
}, [dtmfDialerPresent, remoteParticipantsConnected, setDtmfDialerPresent]);
|
49
74
|
const strings = useLocale().strings.call;
|
50
75
|
// Reduce the controls shown when mobile view is enabled.
|
51
76
|
const callControlOptions = mobileView ? reduceCallControlsForMobile(options === null || options === void 0 ? void 0 : options.callControls) : options === null || options === void 0 ? void 0 : options.callControls;
|
@@ -95,7 +120,9 @@ export const CallPage = (props) => {
|
|
95
120
|
/* @conditional-compile-remove(capabilities) */
|
96
121
|
capabilitiesChangedNotificationBarProps: props.capabilitiesChangedNotificationBarProps,
|
97
122
|
/* @conditional-compile-remove(dtmf-dialer) */
|
98
|
-
onSetDialpadPage: () => setDtmfDialerPresent(!dtmfDialerPresent)
|
123
|
+
onSetDialpadPage: () => setDtmfDialerPresent(!dtmfDialerPresent),
|
124
|
+
/* @conditional-compile-remove(dtmf-dialer) */
|
125
|
+
dtmfDialerPresent: dtmfDialerPresent }));
|
99
126
|
};
|
100
127
|
/**
|
101
128
|
* @private
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"CallPage.js","sourceRoot":"","sources":["../../../../../../../../react-composites/src/composites/CallComposite/pages/CallPage.tsx"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { DiagnosticQuality } from '@azure/communication-calling';\nimport { useId } from '@fluentui/react-hooks';\nimport { _isInCall } from '@internal/calling-component-bindings';\nimport { ActiveErrorMessage, ErrorBar, ParticipantMenuItemsCallback } from '@internal/react-components';\n/* @conditional-compile-remove(gallery-layouts) */\nimport { VideoGalleryLayout } from '@internal/react-components';\nimport React from 'react';\n/* @conditional-compile-remove(dtmf-dialer) */\nimport { useState } from 'react';\nimport { AvatarPersonaDataCallback } from '../../common/AvatarPersona';\nimport { useLocale } from '../../localization';\nimport { CallCompositeOptions } from '../CallComposite';\nimport { CallArrangement } from '../components/CallArrangement';\nimport { MediaGallery } from '../components/MediaGallery';\nimport { NetworkReconnectTile } from '../components/NetworkReconnectTile';\nimport { useHandlers } from '../hooks/useHandlers';\nimport { usePropsFor } from '../hooks/usePropsFor';\nimport { useSelector } from '../hooks/useSelector';\nimport { callStatusSelector } from '../selectors/callStatusSelector';\nimport { complianceBannerSelector } from '../selectors/complianceBannerSelector';\nimport { mediaGallerySelector } from '../selectors/mediaGallerySelector';\nimport { mutedNotificationSelector } from '../selectors/mutedNotificationSelector';\nimport { networkReconnectTileSelector } from '../selectors/networkReconnectTileSelector';\nimport { reduceCallControlsForMobile } from '../utils';\nimport { MobileChatSidePaneTabHeaderProps } from '../../common/TabHeader';\nimport { SidePaneRenderer } from '../components/SidePane/SidePaneProvider';\n/* @conditional-compile-remove(capabilities) */\nimport { CapabilitiesChangeNotificationBarProps } from '../components/CapabilitiesChangedNotificationBar';\n/* @conditional-compile-remove(dtmf-dialer) */\nimport { DtmfDialpadPage } from './DtmfDialpadPage';\n\n/**\n * @private\n */\nexport interface CallPageProps {\n mobileView: boolean;\n modalLayerHostId: string;\n callInvitationURL?: string;\n onFetchAvatarPersonaData?: AvatarPersonaDataCallback;\n onFetchParticipantMenuItems?: ParticipantMenuItemsCallback;\n updateSidePaneRenderer: (renderer: SidePaneRenderer | undefined) => void;\n mobileChatTabHeader?: MobileChatSidePaneTabHeaderProps;\n options?: CallCompositeOptions;\n latestErrors: ActiveErrorMessage[];\n onDismissError: (error: ActiveErrorMessage) => void;\n /* @conditional-compile-remove(gallery-layouts) */\n galleryLayout: VideoGalleryLayout;\n /* @conditional-compile-remove(capabilities) */\n capabilitiesChangedNotificationBarProps?: CapabilitiesChangeNotificationBarProps;\n /* @conditional-compile-remove(gallery-layouts) */\n onUserSetGalleryLayoutChange?: (layout: VideoGalleryLayout) => void;\n /* @conditional-compile-remove(gallery-layouts) */\n userSetOverflowGalleryPosition?: 'Responsive' | 'horizontalTop';\n /* @conditional-compile-remove(gallery-layouts) */\n onSetUserSetOverflowGalleryPosition?: (position: 'Responsive' | 'horizontalTop') => void;\n onCloseChatPane?: () => void;\n}\n\n/**\n * @private\n */\nexport const CallPage = (props: CallPageProps): JSX.Element => {\n const {\n callInvitationURL,\n onFetchAvatarPersonaData,\n onFetchParticipantMenuItems,\n options,\n mobileView,\n /* @conditional-compile-remove(gallery-layouts) */\n galleryLayout = 'floatingLocalVideo',\n /* @conditional-compile-remove(gallery-layouts) */\n onUserSetGalleryLayoutChange,\n /* @conditional-compile-remove(gallery-layouts) */\n userSetOverflowGalleryPosition = 'Responsive',\n /* @conditional-compile-remove(gallery-layouts) */\n onSetUserSetOverflowGalleryPosition,\n onCloseChatPane\n } = props;\n\n // To use useProps to get these states, we need to create another file wrapping Call,\n // It seems unnecessary in this case, so we get the updated states using this approach.\n const { callStatus } = useSelector(callStatusSelector);\n const mediaGalleryProps = useSelector(mediaGallerySelector);\n const mediaGalleryHandlers = useHandlers(MediaGallery);\n const complianceBannerProps = useSelector(complianceBannerSelector);\n const errorBarProps = usePropsFor(ErrorBar);\n const mutedNotificationProps = useSelector(mutedNotificationSelector);\n const networkReconnectTileProps = useSelector(networkReconnectTileSelector);\n\n /* @conditional-compile-remove(dtmf-dialer) */\n const [dtmfDialerPresent, setDtmfDialerPresent] = useState<boolean>(false);\n\n const strings = useLocale().strings.call;\n\n // Reduce the controls shown when mobile view is enabled.\n const callControlOptions = mobileView ? reduceCallControlsForMobile(options?.callControls) : options?.callControls;\n\n const drawerMenuHostId = useId('drawerMenuHost');\n\n const onRenderGalleryContentTrampoline = (): JSX.Element => {\n /* @conditional-compile-remove(dtmf-dialer) */\n if (dtmfDialerPresent) {\n return (\n <DtmfDialpadPage\n mobileView={props.mobileView}\n modalLayerHostId={props.modalLayerHostId}\n options={props.options}\n updateSidePaneRenderer={props.updateSidePaneRenderer}\n mobileChatTabHeader={props.mobileChatTabHeader}\n latestErrors={props.latestErrors}\n onDismissError={props.onDismissError}\n /* @conditional-compile-remove(capabilities) */\n capabilitiesChangedNotificationBarProps={props.capabilitiesChangedNotificationBarProps}\n onSetDialpadPage={() => setDtmfDialerPresent(!dtmfDialerPresent)}\n dtmfDialerPresent={dtmfDialerPresent}\n />\n );\n } else {\n return (\n <MediaGallery\n isMobile={mobileView}\n {...mediaGalleryProps}\n {...mediaGalleryHandlers}\n onFetchAvatarPersonaData={onFetchAvatarPersonaData}\n /* @conditional-compile-remove(pinned-participants) */\n remoteVideoTileMenuOptions={options?.remoteVideoTileMenuOptions}\n drawerMenuHostId={drawerMenuHostId}\n /* @conditional-compile-remove(click-to-call) */\n localVideoTileOptions={options?.localVideoTile}\n /* @conditional-compile-remove(gallery-layouts) */\n userSetOverflowGalleryPosition={userSetOverflowGalleryPosition}\n /* @conditional-compile-remove(gallery-layouts) */\n userSetGalleryLayout={galleryLayout}\n />\n );\n }\n return (\n <MediaGallery\n isMobile={mobileView}\n {...mediaGalleryProps}\n {...mediaGalleryHandlers}\n onFetchAvatarPersonaData={onFetchAvatarPersonaData}\n /* @conditional-compile-remove(pinned-participants) */\n remoteVideoTileMenuOptions={options?.remoteVideoTileMenuOptions}\n drawerMenuHostId={drawerMenuHostId}\n /* @conditional-compile-remove(click-to-call) */\n localVideoTileOptions={options?.localVideoTile}\n /* @conditional-compile-remove(gallery-layouts) */\n userSetOverflowGalleryPosition={userSetOverflowGalleryPosition}\n /* @conditional-compile-remove(gallery-layouts) */\n userSetGalleryLayout={galleryLayout}\n />\n );\n };\n\n return (\n <CallArrangement\n id={drawerMenuHostId}\n complianceBannerProps={{ ...complianceBannerProps, strings }}\n errorBarProps={options?.errorBar !== false && errorBarProps}\n mutedNotificationProps={mutedNotificationProps}\n callControlProps={{\n callInvitationURL: callInvitationURL,\n onFetchParticipantMenuItems: onFetchParticipantMenuItems,\n options: callControlOptions,\n increaseFlyoutItemSize: mobileView\n }}\n /* @conditional-compile-remove(one-to-n-calling) */ /* @conditional-compile-remove(close-captions) */\n onFetchAvatarPersonaData={onFetchAvatarPersonaData}\n mobileView={mobileView}\n modalLayerHostId={props.modalLayerHostId}\n onRenderGalleryContent={() =>\n _isInCall(callStatus) ? (\n isNetworkHealthy(networkReconnectTileProps.networkReconnectValue) ? (\n onRenderGalleryContentTrampoline()\n ) : (\n <NetworkReconnectTile {...networkReconnectTileProps} />\n )\n ) : (\n <></>\n )\n }\n updateSidePaneRenderer={props.updateSidePaneRenderer}\n mobileChatTabHeader={props.mobileChatTabHeader}\n onCloseChatPane={onCloseChatPane}\n dataUiId={'call-page'}\n latestErrors={props.latestErrors}\n onDismissError={props.onDismissError}\n /* @conditional-compile-remove(gallery-layouts) */\n onUserSetOverflowGalleryPositionChange={onSetUserSetOverflowGalleryPosition}\n /* @conditional-compile-remove(gallery-layouts) */\n onUserSetGalleryLayoutChange={onUserSetGalleryLayoutChange}\n /* @conditional-compile-remove(gallery-layouts) */\n userSetGalleryLayout={galleryLayout}\n /* @conditional-compile-remove(capabilities) */\n capabilitiesChangedNotificationBarProps={props.capabilitiesChangedNotificationBarProps}\n /* @conditional-compile-remove(dtmf-dialer) */\n onSetDialpadPage={() => setDtmfDialerPresent(!dtmfDialerPresent)}\n />\n );\n};\n\n/**\n * @private\n */\nexport const isNetworkHealthy = (value: DiagnosticQuality | boolean | undefined): boolean => {\n // We know that the value is actually of type DiagnosticQuality for this diagnostic.\n // We ignore any boolen values, considering the network to still be healthy.\n // Thus, only DiagnosticQuality.Poor or .Bad indicate network problems.\n return value === true || value === false || value === undefined || value === DiagnosticQuality.Good;\n};\n"]}
|
1
|
+
{"version":3,"file":"CallPage.js","sourceRoot":"","sources":["../../../../../../../../react-composites/src/composites/CallComposite/pages/CallPage.tsx"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { DiagnosticQuality } from '@azure/communication-calling';\nimport { useId } from '@fluentui/react-hooks';\nimport { _isInCall } from '@internal/calling-component-bindings';\nimport { ActiveErrorMessage, ErrorBar, ParticipantMenuItemsCallback } from '@internal/react-components';\n/* @conditional-compile-remove(gallery-layouts) */\nimport { VideoGalleryLayout } from '@internal/react-components';\nimport React from 'react';\n/* @conditional-compile-remove(dtmf-dialer) */\nimport { useState, useEffect, useRef } from 'react';\nimport { AvatarPersonaDataCallback } from '../../common/AvatarPersona';\nimport { useLocale } from '../../localization';\nimport { CallCompositeOptions } from '../CallComposite';\nimport { CallArrangement } from '../components/CallArrangement';\nimport { MediaGallery } from '../components/MediaGallery';\nimport { NetworkReconnectTile } from '../components/NetworkReconnectTile';\nimport { useHandlers } from '../hooks/useHandlers';\nimport { usePropsFor } from '../hooks/usePropsFor';\nimport { useSelector } from '../hooks/useSelector';\nimport { callStatusSelector } from '../selectors/callStatusSelector';\nimport { complianceBannerSelector } from '../selectors/complianceBannerSelector';\nimport { mediaGallerySelector } from '../selectors/mediaGallerySelector';\n/* @conditional-compile-remove(dtmf-dialer) */\nimport { getRemoteParticipantsConnectedSelector } from '../selectors/mediaGallerySelector';\nimport { mutedNotificationSelector } from '../selectors/mutedNotificationSelector';\nimport { networkReconnectTileSelector } from '../selectors/networkReconnectTileSelector';\nimport { reduceCallControlsForMobile } from '../utils';\nimport { MobileChatSidePaneTabHeaderProps } from '../../common/TabHeader';\nimport { SidePaneRenderer } from '../components/SidePane/SidePaneProvider';\n/* @conditional-compile-remove(capabilities) */\nimport { CapabilitiesChangeNotificationBarProps } from '../components/CapabilitiesChangedNotificationBar';\n/* @conditional-compile-remove(dtmf-dialer) */\nimport { DtmfDialpadPage } from './DtmfDialpadPage';\n/* @conditional-compile-remove(dtmf-dialer) */\nimport { showDtmfDialer } from '../utils/MediaGalleryUtils';\n/* @conditional-compile-remove(dtmf-dialer) */\nimport { getTargetCallees } from '../selectors/baseSelectors';\n\n/**\n * @private\n */\nexport interface CallPageProps {\n mobileView: boolean;\n modalLayerHostId: string;\n callInvitationURL?: string;\n onFetchAvatarPersonaData?: AvatarPersonaDataCallback;\n onFetchParticipantMenuItems?: ParticipantMenuItemsCallback;\n updateSidePaneRenderer: (renderer: SidePaneRenderer | undefined) => void;\n mobileChatTabHeader?: MobileChatSidePaneTabHeaderProps;\n options?: CallCompositeOptions;\n latestErrors: ActiveErrorMessage[];\n onDismissError: (error: ActiveErrorMessage) => void;\n /* @conditional-compile-remove(gallery-layouts) */\n galleryLayout: VideoGalleryLayout;\n /* @conditional-compile-remove(capabilities) */\n capabilitiesChangedNotificationBarProps?: CapabilitiesChangeNotificationBarProps;\n /* @conditional-compile-remove(gallery-layouts) */\n onUserSetGalleryLayoutChange?: (layout: VideoGalleryLayout) => void;\n /* @conditional-compile-remove(gallery-layouts) */\n userSetOverflowGalleryPosition?: 'Responsive' | 'horizontalTop';\n /* @conditional-compile-remove(gallery-layouts) */\n onSetUserSetOverflowGalleryPosition?: (position: 'Responsive' | 'horizontalTop') => void;\n onCloseChatPane?: () => void;\n}\n\n/**\n * @private\n */\nexport const CallPage = (props: CallPageProps): JSX.Element => {\n const {\n callInvitationURL,\n onFetchAvatarPersonaData,\n onFetchParticipantMenuItems,\n options,\n mobileView,\n /* @conditional-compile-remove(gallery-layouts) */\n galleryLayout = 'floatingLocalVideo',\n /* @conditional-compile-remove(gallery-layouts) */\n onUserSetGalleryLayoutChange,\n /* @conditional-compile-remove(gallery-layouts) */\n userSetOverflowGalleryPosition = 'Responsive',\n /* @conditional-compile-remove(gallery-layouts) */\n onSetUserSetOverflowGalleryPosition,\n onCloseChatPane\n } = props;\n\n // To use useProps to get these states, we need to create another file wrapping Call,\n // It seems unnecessary in this case, so we get the updated states using this approach.\n const { callStatus } = useSelector(callStatusSelector);\n const mediaGalleryProps = useSelector(mediaGallerySelector);\n const mediaGalleryHandlers = useHandlers(MediaGallery);\n const complianceBannerProps = useSelector(complianceBannerSelector);\n const errorBarProps = usePropsFor(ErrorBar);\n const mutedNotificationProps = useSelector(mutedNotificationSelector);\n const networkReconnectTileProps = useSelector(networkReconnectTileSelector);\n /* @conditional-compile-remove(dtmf-dialer) */\n const remoteParticipantsConnected = useSelector(getRemoteParticipantsConnectedSelector);\n\n /* @conditional-compile-remove(dtmf-dialer) */\n const callees = useSelector(getTargetCallees);\n /* @conditional-compile-remove(dtmf-dialer) */\n const renderDtmfDialerFromStart = showDtmfDialer(callees);\n\n /* @conditional-compile-remove(dtmf-dialer) */\n const [dtmfDialerPresent, setDtmfDialerPresent] = useState<boolean>(renderDtmfDialerFromStart);\n /* @conditional-compile-remove(dtmf-dialer) */\n const dialerShouldAutoDismiss = useRef<boolean>(renderDtmfDialerFromStart);\n\n /* @conditional-compile-remove(dtmf-dialer) */\n /**\n * This useEffect is about clearing the dtmf dialer should there be a new participant that joins the call.\n * This will only happen the first time should the dialer be present when the call starts.\n */\n useEffect(() => {\n if (remoteParticipantsConnected.length > 1 && dtmfDialerPresent && dialerShouldAutoDismiss.current) {\n setDtmfDialerPresent(false);\n dialerShouldAutoDismiss.current = false;\n }\n }, [dtmfDialerPresent, remoteParticipantsConnected, setDtmfDialerPresent]);\n\n const strings = useLocale().strings.call;\n\n // Reduce the controls shown when mobile view is enabled.\n const callControlOptions = mobileView ? reduceCallControlsForMobile(options?.callControls) : options?.callControls;\n\n const drawerMenuHostId = useId('drawerMenuHost');\n\n const onRenderGalleryContentTrampoline = (): JSX.Element => {\n /* @conditional-compile-remove(dtmf-dialer) */\n if (dtmfDialerPresent) {\n return (\n <DtmfDialpadPage\n mobileView={props.mobileView}\n modalLayerHostId={props.modalLayerHostId}\n options={props.options}\n updateSidePaneRenderer={props.updateSidePaneRenderer}\n mobileChatTabHeader={props.mobileChatTabHeader}\n latestErrors={props.latestErrors}\n onDismissError={props.onDismissError}\n /* @conditional-compile-remove(capabilities) */\n capabilitiesChangedNotificationBarProps={props.capabilitiesChangedNotificationBarProps}\n onSetDialpadPage={() => setDtmfDialerPresent(!dtmfDialerPresent)}\n dtmfDialerPresent={dtmfDialerPresent}\n />\n );\n } else {\n return (\n <MediaGallery\n isMobile={mobileView}\n {...mediaGalleryProps}\n {...mediaGalleryHandlers}\n onFetchAvatarPersonaData={onFetchAvatarPersonaData}\n /* @conditional-compile-remove(pinned-participants) */\n remoteVideoTileMenuOptions={options?.remoteVideoTileMenuOptions}\n drawerMenuHostId={drawerMenuHostId}\n /* @conditional-compile-remove(click-to-call) */\n localVideoTileOptions={options?.localVideoTile}\n /* @conditional-compile-remove(gallery-layouts) */\n userSetOverflowGalleryPosition={userSetOverflowGalleryPosition}\n /* @conditional-compile-remove(gallery-layouts) */\n userSetGalleryLayout={galleryLayout}\n />\n );\n }\n return (\n <MediaGallery\n isMobile={mobileView}\n {...mediaGalleryProps}\n {...mediaGalleryHandlers}\n onFetchAvatarPersonaData={onFetchAvatarPersonaData}\n /* @conditional-compile-remove(pinned-participants) */\n remoteVideoTileMenuOptions={options?.remoteVideoTileMenuOptions}\n drawerMenuHostId={drawerMenuHostId}\n /* @conditional-compile-remove(click-to-call) */\n localVideoTileOptions={options?.localVideoTile}\n /* @conditional-compile-remove(gallery-layouts) */\n userSetOverflowGalleryPosition={userSetOverflowGalleryPosition}\n /* @conditional-compile-remove(gallery-layouts) */\n userSetGalleryLayout={galleryLayout}\n />\n );\n };\n\n return (\n <CallArrangement\n id={drawerMenuHostId}\n complianceBannerProps={{ ...complianceBannerProps, strings }}\n errorBarProps={options?.errorBar !== false && errorBarProps}\n mutedNotificationProps={mutedNotificationProps}\n callControlProps={{\n callInvitationURL: callInvitationURL,\n onFetchParticipantMenuItems: onFetchParticipantMenuItems,\n options: callControlOptions,\n increaseFlyoutItemSize: mobileView\n }}\n /* @conditional-compile-remove(one-to-n-calling) */ /* @conditional-compile-remove(close-captions) */\n onFetchAvatarPersonaData={onFetchAvatarPersonaData}\n mobileView={mobileView}\n modalLayerHostId={props.modalLayerHostId}\n onRenderGalleryContent={() =>\n _isInCall(callStatus) ? (\n isNetworkHealthy(networkReconnectTileProps.networkReconnectValue) ? (\n onRenderGalleryContentTrampoline()\n ) : (\n <NetworkReconnectTile {...networkReconnectTileProps} />\n )\n ) : (\n <></>\n )\n }\n updateSidePaneRenderer={props.updateSidePaneRenderer}\n mobileChatTabHeader={props.mobileChatTabHeader}\n onCloseChatPane={onCloseChatPane}\n dataUiId={'call-page'}\n latestErrors={props.latestErrors}\n onDismissError={props.onDismissError}\n /* @conditional-compile-remove(gallery-layouts) */\n onUserSetOverflowGalleryPositionChange={onSetUserSetOverflowGalleryPosition}\n /* @conditional-compile-remove(gallery-layouts) */\n onUserSetGalleryLayoutChange={onUserSetGalleryLayoutChange}\n /* @conditional-compile-remove(gallery-layouts) */\n userSetGalleryLayout={galleryLayout}\n /* @conditional-compile-remove(capabilities) */\n capabilitiesChangedNotificationBarProps={props.capabilitiesChangedNotificationBarProps}\n /* @conditional-compile-remove(dtmf-dialer) */\n onSetDialpadPage={() => setDtmfDialerPresent(!dtmfDialerPresent)}\n /* @conditional-compile-remove(dtmf-dialer) */\n dtmfDialerPresent={dtmfDialerPresent}\n />\n );\n};\n\n/**\n * @private\n */\nexport const isNetworkHealthy = (value: DiagnosticQuality | boolean | undefined): boolean => {\n // We know that the value is actually of type DiagnosticQuality for this diagnostic.\n // We ignore any boolen values, considering the network to still be healthy.\n // Thus, only DiagnosticQuality.Poor or .Bad indicate network problems.\n return value === true || value === false || value === undefined || value === DiagnosticQuality.Good;\n};\n"]}
|
package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/DtmfDialpadPage.js
CHANGED
@@ -15,6 +15,7 @@ import { useAdapter } from '../adapter/CallAdapterProvider';
|
|
15
15
|
import { Stack, Text, useTheme } from '@fluentui/react';
|
16
16
|
import { getReadableTime } from '../utils/timerUtils';
|
17
17
|
import { DtmfDialpadContentTimerStyles } from '../styles/DtmfDialpadPage.styles';
|
18
|
+
import { isPhoneNumberIdentifier } from '@azure/communication-common';
|
18
19
|
const DtmfDialpadPageContent = (props) => {
|
19
20
|
var _a, _b;
|
20
21
|
const { adapter } = props;
|
@@ -24,16 +25,22 @@ const DtmfDialpadPageContent = (props) => {
|
|
24
25
|
const remoteParticipants = (_b = adapterState.call) === null || _b === void 0 ? void 0 : _b.remoteParticipants;
|
25
26
|
let calleeName;
|
26
27
|
if (remoteParticipants) {
|
27
|
-
|
28
|
+
const remoteParticipantValues = Object.values(remoteParticipants);
|
29
|
+
if (calleeId && isPhoneNumberIdentifier(calleeId)) {
|
30
|
+
calleeName = calleeId.phoneNumber;
|
31
|
+
}
|
32
|
+
else {
|
33
|
+
calleeName = remoteParticipantValues.find((p) => p.identifier === calleeId);
|
34
|
+
}
|
28
35
|
}
|
29
36
|
return (React.createElement(Stack, { style: { height: '100%', width: '100%', background: theme.palette.white } },
|
30
|
-
React.createElement(Stack, { style: { margin: 'auto' } },
|
37
|
+
React.createElement(Stack, { verticalAlign: 'center', style: { margin: 'auto' } },
|
31
38
|
React.createElement(DtmfDialerContentTimer, null),
|
32
|
-
React.createElement(Text,
|
39
|
+
React.createElement(Text, { style: { margin: 'auto' } }, calleeName !== 'Unnamed participant' ? calleeName : ''),
|
33
40
|
React.createElement(Dialpad, { onSendDtmfTone: (tone) => __awaiter(void 0, void 0, void 0, function* () {
|
34
41
|
/* @conditional-compile-remove(dtmf-dialer) */
|
35
42
|
yield adapter.sendDtmfTone(tone);
|
36
|
-
}),
|
43
|
+
}), dialpadMode: 'dtmf' }))));
|
37
44
|
};
|
38
45
|
const DtmfDialerContentTimer = () => {
|
39
46
|
const [time, setTime] = useState(0);
|
package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/DtmfDialpadPage.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"DtmfDialpadPage.js","sourceRoot":"","sources":["../../../../../../../../react-composites/src/composites/CallComposite/pages/DtmfDialpadPage.tsx"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;;;;;;;;;;AAElC,OAAO,EAAsB,OAAO,EAAY,4CAAmC;AAKnF,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAE5D,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,6BAA6B,EAAE,MAAM,kCAAkC,CAAC;
|
1
|
+
{"version":3,"file":"DtmfDialpadPage.js","sourceRoot":"","sources":["../../../../../../../../react-composites/src/composites/CallComposite/pages/DtmfDialpadPage.tsx"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { ActiveErrorMessage, Dialpad, DtmfTone } from '@internal/react-components';\nimport { MobileChatSidePaneTabHeaderProps } from '../../common/TabHeader';\nimport { CallCompositeOptions } from '../CallComposite';\nimport { SidePaneRenderer } from '../components/SidePane/SidePaneProvider';\nimport { CapabilitiesChangeNotificationBarProps } from '../components/CapabilitiesChangedNotificationBar';\nimport React, { useEffect, useRef, useState } from 'react';\nimport { useAdapter } from '../adapter/CallAdapterProvider';\nimport { CommonCallAdapter } from '../adapter';\nimport { Stack, Text, useTheme } from '@fluentui/react';\nimport { getReadableTime } from '../utils/timerUtils';\nimport { DtmfDialpadContentTimerStyles } from '../styles/DtmfDialpadPage.styles';\nimport { RemoteParticipantState } from '@internal/calling-stateful-client';\nimport { isPhoneNumberIdentifier } from '@azure/communication-common';\n\n/**\n * @internal\n */\nexport interface DialpadPageProps {\n mobileView: boolean;\n options?: CallCompositeOptions;\n modalLayerHostId: string;\n updateSidePaneRenderer: (renderer: SidePaneRenderer | undefined) => void;\n mobileChatTabHeader?: MobileChatSidePaneTabHeaderProps;\n latestErrors: ActiveErrorMessage[];\n onDismissError: (error: ActiveErrorMessage) => void;\n /* @conditional-compile-remove(capabilities) */\n capabilitiesChangedNotificationBarProps?: CapabilitiesChangeNotificationBarProps;\n onSetDialpadPage: () => void;\n dtmfDialerPresent: boolean;\n}\n\ninterface DialpadPageContentProps {\n mobileView: boolean;\n adapter: CommonCallAdapter;\n}\n\nconst DtmfDialpadPageContent = (props: DialpadPageContentProps): JSX.Element => {\n const { adapter } = props;\n const adapterState = adapter.getState();\n const theme = useTheme();\n\n const calleeId = adapterState.targetCallees?.[0];\n const remoteParticipants = adapterState.call?.remoteParticipants;\n let calleeName;\n\n if (remoteParticipants) {\n const remoteParticipantValues: RemoteParticipantState[] = Object.values(remoteParticipants);\n if (calleeId && isPhoneNumberIdentifier(calleeId)) {\n calleeName = calleeId.phoneNumber;\n } else {\n calleeName = remoteParticipantValues.find((p) => p.identifier === calleeId);\n }\n }\n\n return (\n <Stack style={{ height: '100%', width: '100%', background: theme.palette.white }}>\n <Stack verticalAlign={'center'} style={{ margin: 'auto' }}>\n <DtmfDialerContentTimer />\n <Text style={{ margin: 'auto' }}>{calleeName !== 'Unnamed participant' ? calleeName : ''}</Text>\n <Dialpad\n onSendDtmfTone={async (tone: DtmfTone) => {\n /* @conditional-compile-remove(dtmf-dialer) */\n await adapter.sendDtmfTone(tone);\n }}\n dialpadMode={'dtmf'}\n ></Dialpad>\n </Stack>\n </Stack>\n );\n};\n\nconst DtmfDialerContentTimer = (): JSX.Element => {\n const [time, setTime] = useState<number>(0);\n const elapsedTime = getReadableTime(time);\n const startTime = useRef(performance.now());\n\n useEffect(() => {\n const interval = setInterval(() => {\n setTime(performance.now() - startTime.current);\n }, 10);\n return () => {\n clearInterval(interval);\n };\n }, [startTime]);\n\n return <Text styles={DtmfDialpadContentTimerStyles}>{elapsedTime}</Text>;\n};\n\n/**\n * @internal\n */\nexport const DtmfDialpadPage = (props: DialpadPageProps): JSX.Element => {\n const adapter = useAdapter();\n\n return <DtmfDialpadPageContent adapter={adapter} mobileView={props.mobileView} />;\n};\n"]}
|
package/dist/dist-esm/react-composites/src/composites/CallComposite/selectors/baseSelectors.d.ts
CHANGED
@@ -10,6 +10,7 @@ import { CallAdapterState, CallCompositePage } from '../adapter/CallAdapter';
|
|
10
10
|
import { VideoBackgroundEffect } from '../adapter/CallAdapter';
|
11
11
|
import { AdapterErrors } from '../../common/adapters';
|
12
12
|
import { RaisedHandState } from "../../../../../calling-stateful-client/src";
|
13
|
+
import { CommunicationIdentifier } from '@azure/communication-common';
|
13
14
|
/**
|
14
15
|
* @private
|
15
16
|
*/
|
@@ -128,4 +129,8 @@ export declare const getLatestErrors: (state: CallAdapterState) => AdapterErrors
|
|
128
129
|
* @private
|
129
130
|
*/
|
130
131
|
export declare const getLatestCapabilitiesChangedInfo: (state: CallAdapterState) => CapabilitiesChangeInfo | undefined;
|
132
|
+
/**
|
133
|
+
* @private
|
134
|
+
*/
|
135
|
+
export declare const getTargetCallees: (state: CallAdapterState) => CommunicationIdentifier[] | undefined;
|
131
136
|
//# sourceMappingURL=baseSelectors.d.ts.map
|
package/dist/dist-esm/react-composites/src/composites/CallComposite/selectors/baseSelectors.js
CHANGED
@@ -151,4 +151,8 @@ export const getLatestCapabilitiesChangedInfo = (state) => {
|
|
151
151
|
var _a, _b;
|
152
152
|
return (_b = (_a = state.call) === null || _a === void 0 ? void 0 : _a.capabilitiesFeature) === null || _b === void 0 ? void 0 : _b.latestCapabilitiesChangeInfo;
|
153
153
|
};
|
154
|
+
/**
|
155
|
+
* @private
|
156
|
+
*/
|
157
|
+
export const getTargetCallees = (state) => state.targetCallees;
|
154
158
|
//# sourceMappingURL=baseSelectors.js.map
|
package/dist/dist-esm/react-composites/src/composites/CallComposite/selectors/baseSelectors.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"baseSelectors.js","sourceRoot":"","sources":["../../../../../../../../react-composites/src/composites/CallComposite/selectors/baseSelectors.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { CallState as SDKCallStatus, DominantSpeakersInfo } from '@azure/communication-calling';\nimport { ParticipantCapabilities } from '@azure/communication-calling';\nimport { VideoDeviceInfo, AudioDeviceInfo } from '@azure/communication-calling';\n/* @conditional-compile-remove(capabilities) */\nimport { CapabilitiesChangeInfo } from '@azure/communication-calling';\n/* @conditional-compile-remove(unsupported-browser) */\nimport { EnvironmentInfo } from '@azure/communication-calling';\n/* @conditional-compile-remove(capabilities) */\nimport { ParticipantRole } from '@azure/communication-calling';\nimport {\n CallState,\n DeviceManagerState,\n DiagnosticsCallFeatureState,\n LocalVideoStreamState,\n RemoteParticipantState\n} from '@internal/calling-stateful-client';\n/* @conditional-compile-remove(close-captions) */\nimport { CaptionsInfo } from '@internal/calling-stateful-client';\nimport { CallAdapterState, CallCompositePage } from '../adapter/CallAdapter';\n/* @conditional-compile-remove(video-background-effects) */\nimport { VideoBackgroundEffect } from '../adapter/CallAdapter';\nimport { _isInCall, _isPreviewOn, _dominantSpeakersWithFlatId } from '@internal/calling-component-bindings';\nimport { AdapterErrors } from '../../common/adapters';\n/* @conditional-compile-remove(raise-hand) */\nimport { RaisedHandState } from '@internal/calling-stateful-client';\n/**\n * @private\n */\nexport const getDisplayName = (state: CallAdapterState): string | undefined => state.displayName;\n\n/**\n * @private\n */\nexport const getCallId = (state: CallAdapterState): string | undefined => state.call?.id;\n\n/**\n * @private\n */\nexport const getEndedCall = (state: CallAdapterState): CallState | undefined => state.endedCall;\n\n/**\n * @private\n */\nexport const getCallStatus = (state: CallAdapterState): SDKCallStatus => state.call?.state ?? 'None';\n\n/**\n * @private\n */\nexport const getDeviceManager = (state: CallAdapterState): DeviceManagerState => state.devices;\n\n/**\n * @private\n */\nexport const getIsScreenShareOn = (state: CallAdapterState): boolean => state.call?.isScreenSharingOn ?? false;\n\n/* @conditional-compile-remove(raise-hand) */\n/**\n * @private\n */\nexport const getLocalParticipantRaisedHand = (state: CallAdapterState): RaisedHandState | undefined =>\n state.call?.raiseHand.localParticipantRaisedHand;\n\n/**\n * @private\n */\nexport const getCapabilites = (state: CallAdapterState): ParticipantCapabilities | undefined =>\n state.call?.capabilitiesFeature?.capabilities;\n\n/**\n * @private\n */\nexport const getIsPreviewCameraOn = (state: CallAdapterState): boolean => _isPreviewOn(state.devices);\n\n/**\n * @private\n */\nexport const getMicrophones = (state: CallAdapterState): AudioDeviceInfo[] => state.devices.microphones;\n\n/**\n * @private\n */\nexport const getCameras = (state: CallAdapterState): VideoDeviceInfo[] => state.devices.cameras;\n\n/* @conditional-compile-remove(capabilities) */\n/**\n * @private\n */\nexport const getRole = (state: CallAdapterState): ParticipantRole | undefined => state.call?.role;\n\n/**\n * @private\n */\nexport const getPage = (state: CallAdapterState): CallCompositePage => state.page;\n\n/* @conditional-compile-remove(call-transfer) */\n/**\n * @private\n */\nexport const getTransferCall = (state: CallAdapterState): CallState | undefined => state.acceptedTransferCallState;\n\n/**\n * @private\n */\nexport const getLocalMicrophoneEnabled = (state: CallAdapterState): boolean => state.isLocalPreviewMicrophoneEnabled;\n\n/**\n * @private\n */\nexport const getLocalVideoStreams = (state: CallAdapterState): LocalVideoStreamState[] | undefined =>\n state.call?.localVideoStreams;\n\n/**\n * @private\n */\nexport const getIsTranscriptionActive = (state: CallAdapterState): boolean =>\n !!state.call?.transcription.isTranscriptionActive;\n\n/**\n * @private\n */\nexport const getIsRecordingActive = (state: CallAdapterState): boolean => !!state.call?.recording.isRecordingActive;\n\n/**\n * @private\n */\nexport const getUserFacingDiagnostics = (state: CallAdapterState): DiagnosticsCallFeatureState | undefined =>\n state.call?.diagnostics;\n\n/**\n * @private\n */\nexport const getDominantSpeakerInfo = (state: CallAdapterState): undefined | DominantSpeakersInfo =>\n state.call?.dominantSpeakers;\n\n/**\n * @private\n */\nexport const getRemoteParticipants = (\n state: CallAdapterState\n):\n | undefined\n | {\n [keys: string]: RemoteParticipantState;\n } => state.call?.remoteParticipants;\n\n/* @conditional-compile-remove(unsupported-browser) */\n/**\n * @private\n */\nexport const getEnvironmentInfo = (state: CallAdapterState): EnvironmentInfo | undefined => state.environmentInfo;\n\n/* @conditional-compile-remove(video-background-effects) */\n/**\n * @private\n */\nexport const getSelectedVideoEffect = (state: CallAdapterState): VideoBackgroundEffect | undefined =>\n state.selectedVideoBackgroundEffect;\n\n/* @conditional-compile-remove(close-captions) */\n/** @private */\nexport const getCaptions = (state: CallAdapterState): CaptionsInfo[] | undefined => {\n return state.call?.captionsFeature.captions;\n};\n\n/* @conditional-compile-remove(close-captions) */\n/** @private */\nexport const getCaptionsStatus = (state: CallAdapterState): boolean | undefined => {\n return state.call?.captionsFeature.isCaptionsFeatureActive;\n};\n\n/* @conditional-compile-remove(close-captions) */\n/** @private */\nexport const getCurrentCaptionLanguage = (state: CallAdapterState): string | undefined => {\n return state.call?.captionsFeature.currentCaptionLanguage;\n};\n\n/* @conditional-compile-remove(close-captions) */\n/** @private */\nexport const getCurrentSpokenLanguage = (state: CallAdapterState): string | undefined => {\n return state.call?.captionsFeature.currentSpokenLanguage;\n};\n\n/* @conditional-compile-remove(close-captions) */\n/** @private */\nexport const getSupportedCaptionLanguages = (state: CallAdapterState): string[] | undefined => {\n return state.call?.captionsFeature.supportedCaptionLanguages;\n};\n\n/* @conditional-compile-remove(close-captions) */\n/** @private */\nexport const getSupportedSpokenLanguages = (state: CallAdapterState): string[] | undefined => {\n return state.call?.captionsFeature.supportedSpokenLanguages;\n};\n\n/* @conditional-compile-remove(close-captions) */\n/**\n * @private\n */\nexport const getIsTeamsCall = (state: CallAdapterState): boolean => state.isTeamsCall;\n\n/**\n * @private\n */\nexport const getLatestErrors = (state: CallAdapterState): AdapterErrors => state.latestErrors;\n\n/* @conditional-compile-remove(capabilities) */\n/**\n * @private\n */\nexport const getLatestCapabilitiesChangedInfo = (state: CallAdapterState): CapabilitiesChangeInfo | undefined => {\n return state.call?.capabilitiesFeature?.latestCapabilitiesChangeInfo;\n};\n"]}
|
1
|
+
{"version":3,"file":"baseSelectors.js","sourceRoot":"","sources":["../../../../../../../../react-composites/src/composites/CallComposite/selectors/baseSelectors.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { CallState as SDKCallStatus, DominantSpeakersInfo } from '@azure/communication-calling';\nimport { ParticipantCapabilities } from '@azure/communication-calling';\nimport { VideoDeviceInfo, AudioDeviceInfo } from '@azure/communication-calling';\n/* @conditional-compile-remove(capabilities) */\nimport { CapabilitiesChangeInfo } from '@azure/communication-calling';\n/* @conditional-compile-remove(unsupported-browser) */\nimport { EnvironmentInfo } from '@azure/communication-calling';\n/* @conditional-compile-remove(capabilities) */\nimport { ParticipantRole } from '@azure/communication-calling';\nimport {\n CallState,\n DeviceManagerState,\n DiagnosticsCallFeatureState,\n LocalVideoStreamState,\n RemoteParticipantState\n} from '@internal/calling-stateful-client';\n/* @conditional-compile-remove(close-captions) */\nimport { CaptionsInfo } from '@internal/calling-stateful-client';\nimport { CallAdapterState, CallCompositePage } from '../adapter/CallAdapter';\n/* @conditional-compile-remove(video-background-effects) */\nimport { VideoBackgroundEffect } from '../adapter/CallAdapter';\nimport { _isInCall, _isPreviewOn, _dominantSpeakersWithFlatId } from '@internal/calling-component-bindings';\nimport { AdapterErrors } from '../../common/adapters';\n/* @conditional-compile-remove(raise-hand) */\nimport { RaisedHandState } from '@internal/calling-stateful-client';\nimport { CommunicationIdentifier } from '@azure/communication-common';\n/**\n * @private\n */\nexport const getDisplayName = (state: CallAdapterState): string | undefined => state.displayName;\n\n/**\n * @private\n */\nexport const getCallId = (state: CallAdapterState): string | undefined => state.call?.id;\n\n/**\n * @private\n */\nexport const getEndedCall = (state: CallAdapterState): CallState | undefined => state.endedCall;\n\n/**\n * @private\n */\nexport const getCallStatus = (state: CallAdapterState): SDKCallStatus => state.call?.state ?? 'None';\n\n/**\n * @private\n */\nexport const getDeviceManager = (state: CallAdapterState): DeviceManagerState => state.devices;\n\n/**\n * @private\n */\nexport const getIsScreenShareOn = (state: CallAdapterState): boolean => state.call?.isScreenSharingOn ?? false;\n\n/* @conditional-compile-remove(raise-hand) */\n/**\n * @private\n */\nexport const getLocalParticipantRaisedHand = (state: CallAdapterState): RaisedHandState | undefined =>\n state.call?.raiseHand.localParticipantRaisedHand;\n\n/**\n * @private\n */\nexport const getCapabilites = (state: CallAdapterState): ParticipantCapabilities | undefined =>\n state.call?.capabilitiesFeature?.capabilities;\n\n/**\n * @private\n */\nexport const getIsPreviewCameraOn = (state: CallAdapterState): boolean => _isPreviewOn(state.devices);\n\n/**\n * @private\n */\nexport const getMicrophones = (state: CallAdapterState): AudioDeviceInfo[] => state.devices.microphones;\n\n/**\n * @private\n */\nexport const getCameras = (state: CallAdapterState): VideoDeviceInfo[] => state.devices.cameras;\n\n/* @conditional-compile-remove(capabilities) */\n/**\n * @private\n */\nexport const getRole = (state: CallAdapterState): ParticipantRole | undefined => state.call?.role;\n\n/**\n * @private\n */\nexport const getPage = (state: CallAdapterState): CallCompositePage => state.page;\n\n/* @conditional-compile-remove(call-transfer) */\n/**\n * @private\n */\nexport const getTransferCall = (state: CallAdapterState): CallState | undefined => state.acceptedTransferCallState;\n\n/**\n * @private\n */\nexport const getLocalMicrophoneEnabled = (state: CallAdapterState): boolean => state.isLocalPreviewMicrophoneEnabled;\n\n/**\n * @private\n */\nexport const getLocalVideoStreams = (state: CallAdapterState): LocalVideoStreamState[] | undefined =>\n state.call?.localVideoStreams;\n\n/**\n * @private\n */\nexport const getIsTranscriptionActive = (state: CallAdapterState): boolean =>\n !!state.call?.transcription.isTranscriptionActive;\n\n/**\n * @private\n */\nexport const getIsRecordingActive = (state: CallAdapterState): boolean => !!state.call?.recording.isRecordingActive;\n\n/**\n * @private\n */\nexport const getUserFacingDiagnostics = (state: CallAdapterState): DiagnosticsCallFeatureState | undefined =>\n state.call?.diagnostics;\n\n/**\n * @private\n */\nexport const getDominantSpeakerInfo = (state: CallAdapterState): undefined | DominantSpeakersInfo =>\n state.call?.dominantSpeakers;\n\n/**\n * @private\n */\nexport const getRemoteParticipants = (\n state: CallAdapterState\n):\n | undefined\n | {\n [keys: string]: RemoteParticipantState;\n } => state.call?.remoteParticipants;\n\n/* @conditional-compile-remove(unsupported-browser) */\n/**\n * @private\n */\nexport const getEnvironmentInfo = (state: CallAdapterState): EnvironmentInfo | undefined => state.environmentInfo;\n\n/* @conditional-compile-remove(video-background-effects) */\n/**\n * @private\n */\nexport const getSelectedVideoEffect = (state: CallAdapterState): VideoBackgroundEffect | undefined =>\n state.selectedVideoBackgroundEffect;\n\n/* @conditional-compile-remove(close-captions) */\n/** @private */\nexport const getCaptions = (state: CallAdapterState): CaptionsInfo[] | undefined => {\n return state.call?.captionsFeature.captions;\n};\n\n/* @conditional-compile-remove(close-captions) */\n/** @private */\nexport const getCaptionsStatus = (state: CallAdapterState): boolean | undefined => {\n return state.call?.captionsFeature.isCaptionsFeatureActive;\n};\n\n/* @conditional-compile-remove(close-captions) */\n/** @private */\nexport const getCurrentCaptionLanguage = (state: CallAdapterState): string | undefined => {\n return state.call?.captionsFeature.currentCaptionLanguage;\n};\n\n/* @conditional-compile-remove(close-captions) */\n/** @private */\nexport const getCurrentSpokenLanguage = (state: CallAdapterState): string | undefined => {\n return state.call?.captionsFeature.currentSpokenLanguage;\n};\n\n/* @conditional-compile-remove(close-captions) */\n/** @private */\nexport const getSupportedCaptionLanguages = (state: CallAdapterState): string[] | undefined => {\n return state.call?.captionsFeature.supportedCaptionLanguages;\n};\n\n/* @conditional-compile-remove(close-captions) */\n/** @private */\nexport const getSupportedSpokenLanguages = (state: CallAdapterState): string[] | undefined => {\n return state.call?.captionsFeature.supportedSpokenLanguages;\n};\n\n/* @conditional-compile-remove(close-captions) */\n/**\n * @private\n */\nexport const getIsTeamsCall = (state: CallAdapterState): boolean => state.isTeamsCall;\n\n/**\n * @private\n */\nexport const getLatestErrors = (state: CallAdapterState): AdapterErrors => state.latestErrors;\n\n/* @conditional-compile-remove(capabilities) */\n/**\n * @private\n */\nexport const getLatestCapabilitiesChangedInfo = (state: CallAdapterState): CapabilitiesChangeInfo | undefined => {\n return state.call?.capabilitiesFeature?.latestCapabilitiesChangeInfo;\n};\n\n/**\n * @private\n */\nexport const getTargetCallees = (state: CallAdapterState): CommunicationIdentifier[] | undefined => state.targetCallees;\n"]}
|
package/dist/dist-esm/react-composites/src/composites/CallComposite/utils/MediaGalleryUtils.d.ts
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
import { RemoteParticipantState } from "../../../../../calling-stateful-client/src";
|
2
|
+
import { CommunicationIdentifier } from '@azure/communication-common';
|
2
3
|
type ParticipantChangedAnnouncmentStrings = {
|
3
4
|
participantJoinedNoticeString: string;
|
4
5
|
twoParticipantJoinedNoticeString: string;
|
@@ -25,5 +26,11 @@ export declare const useParticipantChangedAnnouncement: () => string;
|
|
25
26
|
* Generates the announcement string for when a participant joins or leaves a call.
|
26
27
|
*/
|
27
28
|
export declare const createAnnouncementString: (direction: 'joined' | 'left', participants: RemoteParticipantState[], strings: ParticipantChangedAnnouncmentStrings) => string;
|
29
|
+
/**
|
30
|
+
* determines if the media gallery should be replaced by the dtmf dialer
|
31
|
+
* @param callees Target callees to determine if the dtmf dialer should be shown
|
32
|
+
* @returns whether the dialer should be the gallery content or not
|
33
|
+
*/
|
34
|
+
export declare const showDtmfDialer: (callees?: CommunicationIdentifier[]) => boolean;
|
28
35
|
export {};
|
29
36
|
//# sourceMappingURL=MediaGalleryUtils.d.ts.map
|
package/dist/dist-esm/react-composites/src/composites/CallComposite/utils/MediaGalleryUtils.js
CHANGED
@@ -5,6 +5,8 @@ import { useMemo, useRef, useState } from 'react';
|
|
5
5
|
import { useLocale } from '../../localization';
|
6
6
|
import { useSelector } from '../hooks/useSelector';
|
7
7
|
import { getRemoteParticipantsConnectedSelector } from '../selectors/mediaGallerySelector';
|
8
|
+
/* @conditional-compile-remove(dtmf-dialer) */
|
9
|
+
import { isMicrosoftTeamsAppIdentifier, isPhoneNumberIdentifier } from '@azure/communication-common';
|
8
10
|
/**
|
9
11
|
* sets the announcement string whenever a Participant comes or goes from a call to be
|
10
12
|
* used by the system narrator.
|
@@ -116,4 +118,15 @@ export const createAnnouncementString = (direction, participants, strings) => {
|
|
116
118
|
numOfParticipants: numberOfExtraParticipants.toString()
|
117
119
|
});
|
118
120
|
};
|
121
|
+
/* @conditional-compile-remove(dtmf-dialer) */
|
122
|
+
/**
|
123
|
+
* determines if the media gallery should be replaced by the dtmf dialer
|
124
|
+
* @param callees Target callees to determine if the dtmf dialer should be shown
|
125
|
+
* @returns whether the dialer should be the gallery content or not
|
126
|
+
*/
|
127
|
+
export const showDtmfDialer = (callees) => {
|
128
|
+
return !!((callees === null || callees === void 0 ? void 0 : callees.filter((callee) => {
|
129
|
+
return isPhoneNumberIdentifier(callee) || isMicrosoftTeamsAppIdentifier(callee);
|
130
|
+
})) && callees.length > 0);
|
131
|
+
};
|
119
132
|
//# sourceMappingURL=MediaGalleryUtils.js.map
|
package/dist/dist-esm/react-composites/src/composites/CallComposite/utils/MediaGalleryUtils.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"MediaGalleryUtils.js","sourceRoot":"","sources":["../../../../../../../../react-composites/src/composites/CallComposite/utils/MediaGalleryUtils.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { toFlatCommunicationIdentifier, _formatString } from '@internal/acs-ui-common';\nimport { RemoteParticipantState } from '@internal/calling-stateful-client';\nimport { useMemo, useRef, useState } from 'react';\nimport { useLocale } from '../../localization';\nimport { useSelector } from '../hooks/useSelector';\nimport { getRemoteParticipantsConnectedSelector } from '../selectors/mediaGallerySelector';\n\ntype ParticipantChangedAnnouncmentStrings = {\n participantJoinedNoticeString: string;\n twoParticipantJoinedNoticeString: string;\n threeParticipantJoinedNoticeString: string;\n participantLeftNoticeString: string;\n twoParticipantLeftNoticeString: string;\n threeParticipantLeftNoticeString: string;\n unnamedParticipantString: string;\n manyParticipantsJoined: string;\n manyParticipantsLeft: string;\n manyUnnamedParticipantsJoined: string;\n manyUnnamedParticipantsLeft: string;\n};\n\n/**\n * sets the announcement string whenever a Participant comes or goes from a call to be\n * used by the system narrator.\n *\n * @returns string to be used by the narrator and Announcer component\n *\n * @internal\n */\nexport const useParticipantChangedAnnouncement = (): string => {\n const locale = useLocale().strings.call;\n const strings = useMemo(() => {\n return {\n participantJoinedNoticeString: locale.participantJoinedNoticeString,\n twoParticipantJoinedNoticeString: locale.twoParticipantJoinedNoticeString,\n threeParticipantJoinedNoticeString: locale.threeParticipantJoinedNoticeString,\n participantLeftNoticeString: locale.participantLeftNoticeString,\n twoParticipantLeftNoticeString: locale.twoParticipantLeftNoticeString,\n threeParticipantLeftNoticeString: locale.threeParticipantLeftNoticeString,\n unnamedParticipantString: locale.unnamedParticipantString,\n manyParticipantsJoined: locale.manyParticipantsJoined,\n manyParticipantsLeft: locale.manyParticipantsLeft,\n manyUnnamedParticipantsJoined: locale.manyUnnamedParticipantsJoined,\n manyUnnamedParticipantsLeft: locale.manyUnnamedParticipantsLeft\n };\n }, [locale]);\n const [announcerString, setAnnouncerString] = useState<string>('');\n const currentParticipants = useSelector(getRemoteParticipantsConnectedSelector);\n /**\n * We want to use a useRef here since we want to not fire this hook based on the previous participants\n * this allows this value to be used in the hook without being in the dependency array.\n *\n * Note: By definition if this hook is used in another component it is not pure anymore.\n */\n const previousParticipants = useRef<RemoteParticipantState[]>(currentParticipants);\n\n const resetAnnoucement = (string: string): void => {\n setAnnouncerString(string);\n };\n\n useMemo(() => {\n const currentIds = currentParticipants.map((p) => toFlatCommunicationIdentifier(p.identifier));\n const previousIds = previousParticipants.current.map((p) => toFlatCommunicationIdentifier(p.identifier));\n const whoJoined = currentParticipants.filter(\n (p) => !previousIds.includes(toFlatCommunicationIdentifier(p.identifier))\n );\n const whoLeft = previousParticipants.current.filter(\n (p) => !currentIds.includes(toFlatCommunicationIdentifier(p.identifier))\n );\n if (whoJoined.length > 0) {\n resetAnnoucement(createAnnouncementString('joined', whoJoined, strings));\n }\n if (whoLeft.length > 0) {\n resetAnnoucement(createAnnouncementString('left', whoLeft, strings));\n }\n // Update cached value at the end.\n previousParticipants.current = currentParticipants;\n }, [currentParticipants, strings]);\n return announcerString;\n};\n\n/**\n * Generates the announcement string for when a participant joins or leaves a call.\n */\nexport const createAnnouncementString = (\n direction: 'joined' | 'left',\n participants: RemoteParticipantState[],\n strings: ParticipantChangedAnnouncmentStrings\n): string => {\n /**\n * If there are no participants return empty string.\n */\n if (participants.length === 0) {\n return '';\n }\n /**\n * Filter participants into two arrays to put all the unnamed participants at the back of the\n * names being announced.\n */\n const unnamedParticipants = participants.filter((p) => !p.displayName);\n const namedParicipants = participants.filter((p) => p.displayName);\n const sortedParticipants = namedParicipants.concat(unnamedParticipants);\n\n /**\n * if there are only unnamed participants present in the array announce a special unnamed participants\n * only string.\n */\n if (sortedParticipants.filter((p) => p.displayName).length === 0 && sortedParticipants.length > 1) {\n return _formatString(\n direction === 'joined' ? strings.manyUnnamedParticipantsJoined : strings.manyUnnamedParticipantsLeft,\n {\n numOfParticipants: (sortedParticipants.length - 1).toString()\n }\n );\n }\n const participantNames = sortedParticipants.map((p) => p.displayName ?? strings.unnamedParticipantString);\n\n switch (sortedParticipants.length) {\n case 1:\n return _formatString(\n direction === 'joined' ? strings.participantJoinedNoticeString : strings.participantLeftNoticeString,\n { displayName: participantNames[0] }\n );\n case 2:\n return _formatString(\n direction === 'joined' ? strings.twoParticipantJoinedNoticeString : strings.twoParticipantLeftNoticeString,\n {\n displayName1: participantNames[0],\n displayName2: participantNames[1]\n }\n );\n case 3:\n return _formatString(\n direction === 'joined' ? strings.threeParticipantJoinedNoticeString : strings.threeParticipantLeftNoticeString,\n {\n displayName1: participantNames[0],\n displayName2: participantNames[1],\n displayName3: participantNames[2]\n }\n );\n }\n\n /**\n * If we have more than 3 participants joining we need to do something more to announce them\n * appropriately.\n *\n * We don't want to announce every name when more than 3 participants join at once so\n * we parse out the first 3 names we have and announce those with the number of others.\n */\n\n const numberOfExtraParticipants = sortedParticipants.length - 3;\n\n return _formatString(direction === 'joined' ? strings.manyParticipantsJoined : strings.manyParticipantsLeft, {\n displayName1: sortedParticipants[0].displayName ?? strings.unnamedParticipantString,\n displayName2: sortedParticipants[1].displayName ?? strings.unnamedParticipantString,\n displayName3: sortedParticipants[2].displayName ?? strings.unnamedParticipantString,\n numOfParticipants: numberOfExtraParticipants.toString()\n });\n};\n"]}
|
1
|
+
{"version":3,"file":"MediaGalleryUtils.js","sourceRoot":"","sources":["../../../../../../../../react-composites/src/composites/CallComposite/utils/MediaGalleryUtils.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { toFlatCommunicationIdentifier, _formatString } from '@internal/acs-ui-common';\nimport { RemoteParticipantState } from '@internal/calling-stateful-client';\nimport { useMemo, useRef, useState } from 'react';\nimport { useLocale } from '../../localization';\nimport { useSelector } from '../hooks/useSelector';\nimport { getRemoteParticipantsConnectedSelector } from '../selectors/mediaGallerySelector';\n/* @conditional-compile-remove(dtmf-dialer) */\nimport {\n CommunicationIdentifier,\n isMicrosoftTeamsAppIdentifier,\n isPhoneNumberIdentifier\n} from '@azure/communication-common';\n\ntype ParticipantChangedAnnouncmentStrings = {\n participantJoinedNoticeString: string;\n twoParticipantJoinedNoticeString: string;\n threeParticipantJoinedNoticeString: string;\n participantLeftNoticeString: string;\n twoParticipantLeftNoticeString: string;\n threeParticipantLeftNoticeString: string;\n unnamedParticipantString: string;\n manyParticipantsJoined: string;\n manyParticipantsLeft: string;\n manyUnnamedParticipantsJoined: string;\n manyUnnamedParticipantsLeft: string;\n};\n\n/**\n * sets the announcement string whenever a Participant comes or goes from a call to be\n * used by the system narrator.\n *\n * @returns string to be used by the narrator and Announcer component\n *\n * @internal\n */\nexport const useParticipantChangedAnnouncement = (): string => {\n const locale = useLocale().strings.call;\n const strings = useMemo(() => {\n return {\n participantJoinedNoticeString: locale.participantJoinedNoticeString,\n twoParticipantJoinedNoticeString: locale.twoParticipantJoinedNoticeString,\n threeParticipantJoinedNoticeString: locale.threeParticipantJoinedNoticeString,\n participantLeftNoticeString: locale.participantLeftNoticeString,\n twoParticipantLeftNoticeString: locale.twoParticipantLeftNoticeString,\n threeParticipantLeftNoticeString: locale.threeParticipantLeftNoticeString,\n unnamedParticipantString: locale.unnamedParticipantString,\n manyParticipantsJoined: locale.manyParticipantsJoined,\n manyParticipantsLeft: locale.manyParticipantsLeft,\n manyUnnamedParticipantsJoined: locale.manyUnnamedParticipantsJoined,\n manyUnnamedParticipantsLeft: locale.manyUnnamedParticipantsLeft\n };\n }, [locale]);\n const [announcerString, setAnnouncerString] = useState<string>('');\n const currentParticipants = useSelector(getRemoteParticipantsConnectedSelector);\n /**\n * We want to use a useRef here since we want to not fire this hook based on the previous participants\n * this allows this value to be used in the hook without being in the dependency array.\n *\n * Note: By definition if this hook is used in another component it is not pure anymore.\n */\n const previousParticipants = useRef<RemoteParticipantState[]>(currentParticipants);\n\n const resetAnnoucement = (string: string): void => {\n setAnnouncerString(string);\n };\n\n useMemo(() => {\n const currentIds = currentParticipants.map((p) => toFlatCommunicationIdentifier(p.identifier));\n const previousIds = previousParticipants.current.map((p) => toFlatCommunicationIdentifier(p.identifier));\n const whoJoined = currentParticipants.filter(\n (p) => !previousIds.includes(toFlatCommunicationIdentifier(p.identifier))\n );\n const whoLeft = previousParticipants.current.filter(\n (p) => !currentIds.includes(toFlatCommunicationIdentifier(p.identifier))\n );\n if (whoJoined.length > 0) {\n resetAnnoucement(createAnnouncementString('joined', whoJoined, strings));\n }\n if (whoLeft.length > 0) {\n resetAnnoucement(createAnnouncementString('left', whoLeft, strings));\n }\n // Update cached value at the end.\n previousParticipants.current = currentParticipants;\n }, [currentParticipants, strings]);\n return announcerString;\n};\n\n/**\n * Generates the announcement string for when a participant joins or leaves a call.\n */\nexport const createAnnouncementString = (\n direction: 'joined' | 'left',\n participants: RemoteParticipantState[],\n strings: ParticipantChangedAnnouncmentStrings\n): string => {\n /**\n * If there are no participants return empty string.\n */\n if (participants.length === 0) {\n return '';\n }\n /**\n * Filter participants into two arrays to put all the unnamed participants at the back of the\n * names being announced.\n */\n const unnamedParticipants = participants.filter((p) => !p.displayName);\n const namedParicipants = participants.filter((p) => p.displayName);\n const sortedParticipants = namedParicipants.concat(unnamedParticipants);\n\n /**\n * if there are only unnamed participants present in the array announce a special unnamed participants\n * only string.\n */\n if (sortedParticipants.filter((p) => p.displayName).length === 0 && sortedParticipants.length > 1) {\n return _formatString(\n direction === 'joined' ? strings.manyUnnamedParticipantsJoined : strings.manyUnnamedParticipantsLeft,\n {\n numOfParticipants: (sortedParticipants.length - 1).toString()\n }\n );\n }\n const participantNames = sortedParticipants.map((p) => p.displayName ?? strings.unnamedParticipantString);\n\n switch (sortedParticipants.length) {\n case 1:\n return _formatString(\n direction === 'joined' ? strings.participantJoinedNoticeString : strings.participantLeftNoticeString,\n { displayName: participantNames[0] }\n );\n case 2:\n return _formatString(\n direction === 'joined' ? strings.twoParticipantJoinedNoticeString : strings.twoParticipantLeftNoticeString,\n {\n displayName1: participantNames[0],\n displayName2: participantNames[1]\n }\n );\n case 3:\n return _formatString(\n direction === 'joined' ? strings.threeParticipantJoinedNoticeString : strings.threeParticipantLeftNoticeString,\n {\n displayName1: participantNames[0],\n displayName2: participantNames[1],\n displayName3: participantNames[2]\n }\n );\n }\n\n /**\n * If we have more than 3 participants joining we need to do something more to announce them\n * appropriately.\n *\n * We don't want to announce every name when more than 3 participants join at once so\n * we parse out the first 3 names we have and announce those with the number of others.\n */\n\n const numberOfExtraParticipants = sortedParticipants.length - 3;\n\n return _formatString(direction === 'joined' ? strings.manyParticipantsJoined : strings.manyParticipantsLeft, {\n displayName1: sortedParticipants[0].displayName ?? strings.unnamedParticipantString,\n displayName2: sortedParticipants[1].displayName ?? strings.unnamedParticipantString,\n displayName3: sortedParticipants[2].displayName ?? strings.unnamedParticipantString,\n numOfParticipants: numberOfExtraParticipants.toString()\n });\n};\n\n/* @conditional-compile-remove(dtmf-dialer) */\n/**\n * determines if the media gallery should be replaced by the dtmf dialer\n * @param callees Target callees to determine if the dtmf dialer should be shown\n * @returns whether the dialer should be the gallery content or not\n */\nexport const showDtmfDialer = (callees?: CommunicationIdentifier[]): boolean => {\n return !!(\n callees?.filter((callee) => {\n return isPhoneNumberIdentifier(callee) || isMicrosoftTeamsAppIdentifier(callee);\n }) && callees.length > 0\n );\n};\n"]}
|
package/dist/dist-esm/react-composites/src/composites/common/ControlBar/DesktopMoreButton.js
CHANGED
@@ -34,6 +34,12 @@ import { _startCaptionsButtonSelector } from "../../../../../calling-component-b
|
|
34
34
|
/* @conditional-compile-remove(close-captions) */
|
35
35
|
import { useAdaptedSelector } from '../../CallComposite/hooks/useAdaptedSelector';
|
36
36
|
import { _preventDismissOnEvent } from "../../../../../acs-ui-common/src";
|
37
|
+
/* @conditional-compile-remove(dtmf-dialer) */
|
38
|
+
import { showDtmfDialer } from '../../CallComposite/utils/MediaGalleryUtils';
|
39
|
+
/* @conditional-compile-remove(dtmf-dialer) */
|
40
|
+
import { useSelector } from '../../CallComposite/hooks/useSelector';
|
41
|
+
/* @conditional-compile-remove(dtmf-dialer) */
|
42
|
+
import { getTargetCallees } from '../../CallComposite/selectors/baseSelectors';
|
37
43
|
/**
|
38
44
|
*
|
39
45
|
* @private
|
@@ -61,6 +67,10 @@ export const DesktopMoreButton = (props) => {
|
|
61
67
|
/* @conditional-compile-remove(gallery-layouts) */
|
62
68
|
const [previousLayout, setPreviousLayout] = useState((_a = props.userSetGalleryLayout) !== null && _a !== void 0 ? _a : 'floatingLocalVideo');
|
63
69
|
/* @conditional-compile-remove(dtmf-dialer) */
|
70
|
+
const callees = useSelector(getTargetCallees);
|
71
|
+
/* @conditional-compile-remove(dtmf-dialer) */
|
72
|
+
const allowDtmfDialer = showDtmfDialer(callees);
|
73
|
+
/* @conditional-compile-remove(dtmf-dialer) */
|
64
74
|
const [dtmfDialerChecked, setDtmfDialerChecked] = useState((_b = props.dtmfDialerPresent) !== null && _b !== void 0 ? _b : false);
|
65
75
|
/* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */ /* @conditional-compile-remove(close-captions) */
|
66
76
|
const moreButtonStrings = useMemo(() => ({
|
@@ -175,24 +185,9 @@ export const DesktopMoreButton = (props) => {
|
|
175
185
|
/**
|
176
186
|
* Only render the dtmf dialer if the dialpad for PSTN calls is not present
|
177
187
|
*/
|
178
|
-
if (props.onSetDialpadPage &&
|
188
|
+
if (props.onSetDialpadPage && allowDtmfDialer) {
|
179
189
|
moreButtonContextualMenuItems.push(dtmfDialerScreenOption);
|
180
190
|
}
|
181
|
-
/*@conditional-compile-remove(PSTN-calls) */
|
182
|
-
if (props.onClickShowDialpad) {
|
183
|
-
moreButtonContextualMenuItems.push({
|
184
|
-
key: 'showDialpadKey',
|
185
|
-
text: localeStrings.strings.callWithChat.openDtmfDialpadLabel,
|
186
|
-
onClick: () => {
|
187
|
-
props.onClickShowDialpad && props.onClickShowDialpad();
|
188
|
-
},
|
189
|
-
iconProps: { iconName: 'Dialpad', styles: { root: { lineHeight: 0 } } },
|
190
|
-
itemProps: {
|
191
|
-
styles: buttonFlyoutIncreasedSizeStyles
|
192
|
-
},
|
193
|
-
disabled: props.disableButtonsForHoldScreen
|
194
|
-
});
|
195
|
-
}
|
196
191
|
/* @conditional-compile-remove(gallery-layouts) */
|
197
192
|
if (props.onUserSetOverflowGalleryPositionChange) {
|
198
193
|
const galleryOptions = {
|