@azure/communication-react 1.4.2-alpha-202211010021.0 → 1.4.2-alpha-202211030017.0
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 +12 -5
- package/dist/dist-cjs/communication-react/index.js +55 -21
- 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/baseSelectors.d.ts +5 -0
- package/dist/dist-esm/calling-component-bindings/src/baseSelectors.js +5 -0
- package/dist/dist-esm/calling-component-bindings/src/baseSelectors.js.map +1 -1
- package/dist/dist-esm/calling-component-bindings/src/participantListSelector.js +10 -3
- package/dist/dist-esm/calling-component-bindings/src/participantListSelector.js.map +1 -1
- package/dist/dist-esm/calling-component-bindings/src/utils/participantListSelectorUtils.d.ts +7 -1
- package/dist/dist-esm/calling-component-bindings/src/utils/participantListSelectorUtils.js +11 -0
- package/dist/dist-esm/calling-component-bindings/src/utils/participantListSelectorUtils.js.map +1 -1
- package/dist/dist-esm/react-components/src/components/BrowserPermissionDenied.d.ts +3 -3
- package/dist/dist-esm/react-components/src/components/BrowserPermissionDenied.js +6 -4
- package/dist/dist-esm/react-components/src/components/BrowserPermissionDenied.js.map +1 -1
- package/dist/dist-esm/react-components/src/components/BrowserPermissionDeniedIOS.d.ts +1 -1
- package/dist/dist-esm/react-components/src/components/BrowserPermissionDeniedIOS.js +19 -18
- package/dist/dist-esm/react-components/src/components/BrowserPermissionDeniedIOS.js.map +1 -1
- package/dist/dist-esm/react-components/src/components/DevicePermissionDropdown.d.ts +4 -0
- package/dist/dist-esm/react-components/src/components/DevicePermissionDropdown.js +3 -2
- package/dist/dist-esm/react-components/src/components/DevicePermissionDropdown.js.map +1 -1
- package/dist/dist-esm/react-components/src/components/DomainPermissions.js +2 -4
- package/dist/dist-esm/react-components/src/components/DomainPermissions.js.map +1 -1
- package/dist/dist-esm/react-components/src/components/utils.d.ts +4 -0
- package/dist/dist-esm/react-components/src/components/utils.js +7 -0
- package/dist/dist-esm/react-components/src/components/utils.js.map +1 -1
- package/dist/dist-esm/react-components/src/permissions/PermissionsProvider.d.ts +2 -1
- package/dist/dist-esm/react-components/src/permissions/PermissionsProvider.js.map +1 -1
- package/dist/dist-esm/react-components/src/types/ParticipantListParticipant.d.ts +3 -0
- package/dist/dist-esm/react-components/src/types/ParticipantListParticipant.js.map +1 -1
- package/dist/dist-esm/react-composites/src/composites/CallComposite/components/ConfigurationpageCameraDropdown.d.ts +1 -0
- package/dist/dist-esm/react-composites/src/composites/CallComposite/components/ConfigurationpageCameraDropdown.js +1 -1
- package/dist/dist-esm/react-composites/src/composites/CallComposite/components/ConfigurationpageCameraDropdown.js.map +1 -1
- package/dist/dist-esm/react-composites/src/composites/CallComposite/components/ConfigurationpageMicDropdown.d.ts +1 -0
- package/dist/dist-esm/react-composites/src/composites/CallComposite/components/ConfigurationpageMicDropdown.js +1 -1
- package/dist/dist-esm/react-composites/src/composites/CallComposite/components/ConfigurationpageMicDropdown.js.map +1 -1
- package/dist/dist-esm/react-composites/src/composites/CallComposite/components/LocalDeviceSettings.d.ts +1 -0
- package/dist/dist-esm/react-composites/src/composites/CallComposite/components/LocalDeviceSettings.js +6 -2
- package/dist/dist-esm/react-composites/src/composites/CallComposite/components/LocalDeviceSettings.js.map +1 -1
- package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/ConfigurationPage.js +20 -1
- package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/ConfigurationPage.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 +5 -0
- package/dist/dist-esm/react-composites/src/composites/CallComposite/selectors/baseSelectors.js.map +1 -1
- package/package.json +8 -8
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../../../react-components/src/components/utils.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport { IIconProps, MessageBarType } from '@fluentui/react';\nimport { ActiveErrorMessage, ErrorType } from './ErrorBar';\n\n/**\n * @private\n *\n * @param fileName\n * @param length\n * @returns string\n */\nexport const truncatedFileName = (fileName: string, length: number): string => {\n return fileName.substring(0, length).trimEnd() + (fileName.length > length ? '... ' : '');\n};\n\n/**\n * @private\n *\n * @param fileName\n * @returns string\n */\nexport const extension = (fileName: string): string => fileName.split('.').pop() || '';\n\n/**\n * @private\n */\nexport interface DismissedError {\n type: ErrorType;\n dismissedAt: Date;\n activeSince?: Date;\n}\n\n/**\n * @private\n * @param dismissedErrors\n * @param toDismiss\n * @returns DismissedError[]\n * Always returns a new Array so that the state variable is updated, trigerring a render.\n */\nexport const dismissError = (dismissedErrors: DismissedError[], toDismiss: ActiveErrorMessage): DismissedError[] => {\n const now = new Date(Date.now());\n for (const error of dismissedErrors) {\n if (error.type === toDismiss.type) {\n // Bump the timestamp for latest dismissal of this error to now.\n error.dismissedAt = now;\n error.activeSince = toDismiss.timestamp;\n return Array.from(dismissedErrors);\n }\n }\n\n // Record that this error was dismissed for the first time right now.\n return [\n ...dismissedErrors,\n {\n type: toDismiss.type,\n dismissedAt: now,\n activeSince: toDismiss.timestamp\n }\n ];\n};\n\n/**\n * @private\n * @param activeErrorMessages\n * @param dismissedErrors\n * @returns DismissedError[]\n * Returns a new Array if and only if contents change, to avoid re-rendering when nothing was dropped.\n */\nexport const dropDismissalsForInactiveErrors = (\n activeErrorMessages: ActiveErrorMessage[],\n dismissedErrors: DismissedError[]\n): DismissedError[] => {\n const active = new Map();\n for (const message of activeErrorMessages) {\n active.set(message.type, message);\n }\n\n // For an error such that:\n // * It was previously active, and dismissed.\n // * It did not have a timestamp associated with it.\n // * It is no longer active.\n //\n // We remove it from dismissals. When it becomes active again next time, it will be shown again on the UI.\n const shouldDeleteDismissal = (dismissed: DismissedError): boolean =>\n dismissed.activeSince === undefined && active.get(dismissed.type) === undefined;\n\n if (dismissedErrors.some((dismissed) => shouldDeleteDismissal(dismissed))) {\n return dismissedErrors.filter((dismissed) => !shouldDeleteDismissal(dismissed));\n }\n return dismissedErrors;\n};\n\n/**\n * @private\n * @param activeErrorMessages\n * @param dismissedErrors\n * @returns ActiveErrorMessage[]\n */\nexport const errorsToShow = (\n activeErrorMessages: ActiveErrorMessage[],\n dismissedErrors: DismissedError[]\n): ActiveErrorMessage[] => {\n const dismissed: Map<ErrorType, DismissedError> = new Map();\n for (const error of dismissedErrors) {\n dismissed.set(error.type, error);\n }\n\n return activeErrorMessages.filter((error) => {\n const dismissal = dismissed.get(error.type);\n if (!dismissal) {\n // This error was never dismissed.\n return true;\n }\n if (!error.timestamp) {\n // No timestamp associated with the error. In this case, the existence of a dismissal is enough to suppress the error.\n return false;\n }\n // Error has an associated timestamp, so compare with last dismissal.\n return error.timestamp > dismissal.dismissedAt;\n });\n};\n\n/**\n * @private\n * @param errorType\n * @returns MessageBarType\n */\nexport const messageBarType = (errorType: ErrorType): MessageBarType => {\n switch (errorType) {\n case 'callNetworkQualityLow':\n case 'callNoSpeakerFound':\n case 'callNoMicrophoneFound':\n case 'callMicrophoneAccessDenied':\n case 'callMicrophoneMutedBySystem':\n case 'callMicrophoneUnmutedBySystem':\n case 'callMacOsMicrophoneAccessDenied':\n case 'callLocalVideoFreeze':\n case 'callCameraAccessDenied':\n case 'callCameraAlreadyInUse':\n case 'callVideoStoppedBySystem':\n case 'callVideoRecoveredBySystem':\n case 'callMacOsCameraAccessDenied':\n case 'callMacOsScreenShareAccessDenied':\n return MessageBarType.warning;\n default:\n return MessageBarType.error;\n }\n};\n\n/**\n * @private\n * @param errorType\n * @returns IIconProps | undefined\n */\nexport const messageBarIconProps = (errorType: ErrorType): IIconProps | undefined => {\n const iconName = customIconName[errorType];\n return iconName ? { iconName } : undefined;\n};\n\n/**\n * @private\n */\nexport const customIconName: Partial<{ [key in ErrorType]: string }> = {\n callNetworkQualityLow: 'ErrorBarCallNetworkQualityLow',\n callNoSpeakerFound: 'ErrorBarCallNoSpeakerFound',\n callNoMicrophoneFound: 'ErrorBarCallNoMicrophoneFound',\n callMicrophoneAccessDenied: 'ErrorBarCallMicrophoneAccessDenied',\n callMicrophoneMutedBySystem: 'ErrorBarCallMicrophoneMutedBySystem',\n callMicrophoneUnmutedBySystem: 'ErrorBarCallMicrophoneUnmutedBySystem',\n callMacOsMicrophoneAccessDenied: 'ErrorBarCallMacOsMicrophoneAccessDenied',\n callLocalVideoFreeze: 'ErrorBarCallLocalVideoFreeze',\n callCameraAccessDenied: 'ErrorBarCallCameraAccessDenied',\n callCameraAlreadyInUse: 'ErrorBarCallCameraAlreadyInUse',\n callVideoStoppedBySystem: 'ErrorBarCallVideoStoppedBySystem',\n callVideoRecoveredBySystem: 'ErrorBarCallVideoRecoveredBySystem',\n callMacOsCameraAccessDenied: 'ErrorBarCallMacOsCameraAccessDenied'\n};\n"]}
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../../../react-components/src/components/utils.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport { IIconProps, MessageBarType } from '@fluentui/react';\nimport { ActiveErrorMessage, ErrorType } from './ErrorBar';\n\n/**\n * @private\n *\n * @param fileName\n * @param length\n * @returns string\n */\nexport const truncatedFileName = (fileName: string, length: number): string => {\n return fileName.substring(0, length).trimEnd() + (fileName.length > length ? '... ' : '');\n};\n\n/**\n * @private\n *\n * @param fileName\n * @returns string\n */\nexport const extension = (fileName: string): string => fileName.split('.').pop() || '';\n\n/**\n * @private\n */\nexport interface DismissedError {\n type: ErrorType;\n dismissedAt: Date;\n activeSince?: Date;\n}\n\n/**\n * @private\n * @param dismissedErrors\n * @param toDismiss\n * @returns DismissedError[]\n * Always returns a new Array so that the state variable is updated, trigerring a render.\n */\nexport const dismissError = (dismissedErrors: DismissedError[], toDismiss: ActiveErrorMessage): DismissedError[] => {\n const now = new Date(Date.now());\n for (const error of dismissedErrors) {\n if (error.type === toDismiss.type) {\n // Bump the timestamp for latest dismissal of this error to now.\n error.dismissedAt = now;\n error.activeSince = toDismiss.timestamp;\n return Array.from(dismissedErrors);\n }\n }\n\n // Record that this error was dismissed for the first time right now.\n return [\n ...dismissedErrors,\n {\n type: toDismiss.type,\n dismissedAt: now,\n activeSince: toDismiss.timestamp\n }\n ];\n};\n\n/**\n * @private\n * @param activeErrorMessages\n * @param dismissedErrors\n * @returns DismissedError[]\n * Returns a new Array if and only if contents change, to avoid re-rendering when nothing was dropped.\n */\nexport const dropDismissalsForInactiveErrors = (\n activeErrorMessages: ActiveErrorMessage[],\n dismissedErrors: DismissedError[]\n): DismissedError[] => {\n const active = new Map();\n for (const message of activeErrorMessages) {\n active.set(message.type, message);\n }\n\n // For an error such that:\n // * It was previously active, and dismissed.\n // * It did not have a timestamp associated with it.\n // * It is no longer active.\n //\n // We remove it from dismissals. When it becomes active again next time, it will be shown again on the UI.\n const shouldDeleteDismissal = (dismissed: DismissedError): boolean =>\n dismissed.activeSince === undefined && active.get(dismissed.type) === undefined;\n\n if (dismissedErrors.some((dismissed) => shouldDeleteDismissal(dismissed))) {\n return dismissedErrors.filter((dismissed) => !shouldDeleteDismissal(dismissed));\n }\n return dismissedErrors;\n};\n\n/**\n * @private\n * @param activeErrorMessages\n * @param dismissedErrors\n * @returns ActiveErrorMessage[]\n */\nexport const errorsToShow = (\n activeErrorMessages: ActiveErrorMessage[],\n dismissedErrors: DismissedError[]\n): ActiveErrorMessage[] => {\n const dismissed: Map<ErrorType, DismissedError> = new Map();\n for (const error of dismissedErrors) {\n dismissed.set(error.type, error);\n }\n\n return activeErrorMessages.filter((error) => {\n const dismissal = dismissed.get(error.type);\n if (!dismissal) {\n // This error was never dismissed.\n return true;\n }\n if (!error.timestamp) {\n // No timestamp associated with the error. In this case, the existence of a dismissal is enough to suppress the error.\n return false;\n }\n // Error has an associated timestamp, so compare with last dismissal.\n return error.timestamp > dismissal.dismissedAt;\n });\n};\n\n/**\n * @private\n * @param errorType\n * @returns MessageBarType\n */\nexport const messageBarType = (errorType: ErrorType): MessageBarType => {\n switch (errorType) {\n case 'callNetworkQualityLow':\n case 'callNoSpeakerFound':\n case 'callNoMicrophoneFound':\n case 'callMicrophoneAccessDenied':\n case 'callMicrophoneMutedBySystem':\n case 'callMicrophoneUnmutedBySystem':\n case 'callMacOsMicrophoneAccessDenied':\n case 'callLocalVideoFreeze':\n case 'callCameraAccessDenied':\n case 'callCameraAlreadyInUse':\n case 'callVideoStoppedBySystem':\n case 'callVideoRecoveredBySystem':\n case 'callMacOsCameraAccessDenied':\n case 'callMacOsScreenShareAccessDenied':\n return MessageBarType.warning;\n default:\n return MessageBarType.error;\n }\n};\n\n/**\n * @private\n * @param errorType\n * @returns IIconProps | undefined\n */\nexport const messageBarIconProps = (errorType: ErrorType): IIconProps | undefined => {\n const iconName = customIconName[errorType];\n return iconName ? { iconName } : undefined;\n};\n\n/**\n * @private\n */\nexport const customIconName: Partial<{ [key in ErrorType]: string }> = {\n callNetworkQualityLow: 'ErrorBarCallNetworkQualityLow',\n callNoSpeakerFound: 'ErrorBarCallNoSpeakerFound',\n callNoMicrophoneFound: 'ErrorBarCallNoMicrophoneFound',\n callMicrophoneAccessDenied: 'ErrorBarCallMicrophoneAccessDenied',\n callMicrophoneMutedBySystem: 'ErrorBarCallMicrophoneMutedBySystem',\n callMicrophoneUnmutedBySystem: 'ErrorBarCallMicrophoneUnmutedBySystem',\n callMacOsMicrophoneAccessDenied: 'ErrorBarCallMacOsMicrophoneAccessDenied',\n callLocalVideoFreeze: 'ErrorBarCallLocalVideoFreeze',\n callCameraAccessDenied: 'ErrorBarCallCameraAccessDenied',\n callCameraAlreadyInUse: 'ErrorBarCallCameraAlreadyInUse',\n callVideoStoppedBySystem: 'ErrorBarCallVideoStoppedBySystem',\n callVideoRecoveredBySystem: 'ErrorBarCallVideoRecoveredBySystem',\n callMacOsCameraAccessDenied: 'ErrorBarCallMacOsCameraAccessDenied'\n};\n\n/* @conditional-compile-remove(call-readiness) */\n/**\n * @private\n */\nexport const isValidString = (string: string | undefined): boolean => {\n return !!string && string.length > 0;\n};\n"]}
|
@@ -51,8 +51,9 @@ export declare const _PermissionsProvider: (props: _PermissionsProviderProps) =>
|
|
51
51
|
export declare const _usePermissions: () => _Permissions;
|
52
52
|
/**
|
53
53
|
* @beta
|
54
|
+
* The role of a call participant.
|
54
55
|
*/
|
55
|
-
export declare type Role = 'Presenter' | 'Attendee' | 'Consumer';
|
56
|
+
export declare type Role = 'Presenter' | 'Attendee' | 'Consumer' | 'Organizer';
|
56
57
|
/**
|
57
58
|
* @internal
|
58
59
|
*/
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"PermissionsProvider.js","sourceRoot":"","sources":["../../../../../../react-components/src/permissions/PermissionsProvider.tsx"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,OAAO,KAAK,EAAE,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAazD;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAiB;IAC9C,YAAY,EAAE,IAAI;IAClB,gBAAgB,EAAE,IAAI;IACtB,WAAW,EAAE,IAAI;IACjB,uBAAuB,EAAE,IAAI;CAC9B,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAiB;IAChD,IAAI,EAAE,WAAW;IACjB,YAAY,EAAE,IAAI;IAClB,gBAAgB,EAAE,IAAI;IACtB,WAAW,EAAE,IAAI;IACjB,uBAAuB,EAAE,IAAI;CAC9B,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAiB;IAC/C,IAAI,EAAE,UAAU;IAChB,YAAY,EAAE,KAAK;IACnB,gBAAgB,EAAE,KAAK;IACvB,WAAW,EAAE,KAAK;IAClB,uBAAuB,EAAE,KAAK;CAC/B,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAiB;IAC/C,IAAI,EAAE,UAAU;IAChB,YAAY,EAAE,IAAI;IAClB,gBAAgB,EAAE,IAAI;IACtB,WAAW,EAAE,KAAK;IAClB,uBAAuB,EAAE,KAAK;CAC/B,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,aAAa,CAAe,kBAAkB,CAAC,CAAC;AAclF;;GAEG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,KAAgC,EAAe,EAAE;IACpF,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC;IACxC,OAAO,oBAAC,kBAAkB,CAAC,QAAQ,IAAC,KAAK,EAAE,WAAW,IAAG,QAAQ,CAA+B,CAAC;AACnG,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,GAAiB,EAAE,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAC;
|
1
|
+
{"version":3,"file":"PermissionsProvider.js","sourceRoot":"","sources":["../../../../../../react-components/src/permissions/PermissionsProvider.tsx"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,OAAO,KAAK,EAAE,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAazD;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAiB;IAC9C,YAAY,EAAE,IAAI;IAClB,gBAAgB,EAAE,IAAI;IACtB,WAAW,EAAE,IAAI;IACjB,uBAAuB,EAAE,IAAI;CAC9B,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAiB;IAChD,IAAI,EAAE,WAAW;IACjB,YAAY,EAAE,IAAI;IAClB,gBAAgB,EAAE,IAAI;IACtB,WAAW,EAAE,IAAI;IACjB,uBAAuB,EAAE,IAAI;CAC9B,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAiB;IAC/C,IAAI,EAAE,UAAU;IAChB,YAAY,EAAE,KAAK;IACnB,gBAAgB,EAAE,KAAK;IACvB,WAAW,EAAE,KAAK;IAClB,uBAAuB,EAAE,KAAK;CAC/B,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAiB;IAC/C,IAAI,EAAE,UAAU;IAChB,YAAY,EAAE,IAAI;IAClB,gBAAgB,EAAE,IAAI;IACtB,WAAW,EAAE,KAAK;IAClB,uBAAuB,EAAE,KAAK;CAC/B,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,aAAa,CAAe,kBAAkB,CAAC,CAAC;AAclF;;GAEG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,KAAgC,EAAe,EAAE;IACpF,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC;IACxC,OAAO,oBAAC,kBAAkB,CAAC,QAAQ,IAAC,KAAK,EAAE,WAAW,IAAG,QAAQ,CAA+B,CAAC;AACnG,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,GAAiB,EAAE,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAC;AAQlF;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,IAAW,EAAgB,EAAE;IAC3D,IAAI,IAAI,KAAK,UAAU,EAAE;QACvB,OAAO,mBAAmB,CAAC;KAC5B;SAAM,IAAI,IAAI,KAAK,UAAU,EAAE;QAC9B,OAAO,mBAAmB,CAAC;KAC5B;SAAM,IAAI,IAAI,KAAK,WAAW,EAAE;QAC/B,OAAO,oBAAoB,CAAC;KAC7B;IACD,OAAO,kBAAkB,CAAC;AAC5B,CAAC,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport React, { createContext, useContext } from 'react';\n\n/**\n * @internal\n */\nexport type _Permissions = {\n cameraButton: boolean; // or 'disabled'/'hide'?\n microphoneButton: boolean;\n screenShare: boolean;\n removeParticipantButton: boolean;\n role?: Role;\n};\n\n/**\n * @internal\n */\nexport const defaultPermissions: _Permissions = {\n cameraButton: true,\n microphoneButton: true,\n screenShare: true,\n removeParticipantButton: true\n};\n\n/**\n * @internal\n */\nexport const presenterPermissions: _Permissions = {\n role: 'Presenter',\n cameraButton: true,\n microphoneButton: true,\n screenShare: true,\n removeParticipantButton: true\n};\n\n/**\n * @internal\n */\nexport const consumerPermissions: _Permissions = {\n role: 'Consumer',\n cameraButton: false,\n microphoneButton: false,\n screenShare: false,\n removeParticipantButton: false\n};\n\n/**\n * @internal\n */\nexport const attendeePermissions: _Permissions = {\n role: 'Attendee',\n cameraButton: true,\n microphoneButton: true,\n screenShare: false,\n removeParticipantButton: false\n};\n\n/**\n * @internal\n */\nexport const PermissionsContext = createContext<_Permissions>(defaultPermissions);\n\n/**\n * Props for {@link _PermissionsProviderProps}.\n *\n * @internal\n */\nexport type _PermissionsProviderProps = {\n /** Permission context to provide components */\n permissions: _Permissions;\n /** Children to provide locale context. */\n children: React.ReactNode;\n};\n\n/**\n * @internal\n */\nexport const _PermissionsProvider = (props: _PermissionsProviderProps): JSX.Element => {\n const { permissions, children } = props;\n return <PermissionsContext.Provider value={permissions}>{children}</PermissionsContext.Provider>;\n};\n\n/**\n * @internal\n * React hook to access permissions\n */\nexport const _usePermissions = (): _Permissions => useContext(PermissionsContext);\n\n/**\n * @beta\n * The role of a call participant.\n */\nexport type Role = 'Presenter' | 'Attendee' | 'Consumer' | 'Organizer';\n\n/**\n * @internal\n */\nexport const _getPermissions = (role?: Role): _Permissions => {\n if (role === 'Consumer') {\n return consumerPermissions;\n } else if (role === 'Attendee') {\n return attendeePermissions;\n } else if (role === 'Presenter') {\n return presenterPermissions;\n }\n return defaultPermissions;\n};\n"]}
|
@@ -1,3 +1,4 @@
|
|
1
|
+
import { Role } from '../permissions';
|
1
2
|
import { CommunicationParticipant } from './CommunicationParticipant';
|
2
3
|
/**
|
3
4
|
* Calling participant's state, as reflected in the UI components.
|
@@ -13,6 +14,8 @@ export declare type CallParticipantListParticipant = ParticipantListParticipant
|
|
13
14
|
isMuted?: boolean;
|
14
15
|
/** Whether calling participant is speaking */
|
15
16
|
isSpeaking?: boolean;
|
17
|
+
/** Role of participant in Rooms call */
|
18
|
+
role?: Role;
|
16
19
|
};
|
17
20
|
/**
|
18
21
|
* Participants displayed in a {@link ParticipantList}.
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"ParticipantListParticipant.js","sourceRoot":"","sources":["../../../../../../react-components/src/types/ParticipantListParticipant.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC","sourcesContent":["// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT license.\r\n\r\nimport { CommunicationParticipant } from './CommunicationParticipant';\r\n\r\n/**\r\n * Calling participant's state, as reflected in the UI components.\r\n *\r\n * @public\r\n */\r\nexport type CallParticipantListParticipant = ParticipantListParticipant & {\r\n /** State of calling participant */\r\n state: ParticipantState;\r\n /** Whether calling participant is screen sharing */\r\n isScreenSharing?: boolean;\r\n /** Whether calling participant is muted */\r\n isMuted?: boolean;\r\n /** Whether calling participant is speaking */\r\n isSpeaking?: boolean;\r\n};\r\n\r\n/**\r\n * Participants displayed in a {@link ParticipantList}.\r\n *\r\n * @public\r\n */\r\nexport type ParticipantListParticipant = CommunicationParticipant & {\r\n /**\r\n * If true, local participant can remove this participant from the roster.\r\n */\r\n isRemovable: boolean;\r\n};\r\n\r\n/**\r\n * @public\r\n * The connection state of a call participant.\r\n */\r\nexport type ParticipantState =\r\n | 'Idle'\r\n | 'Connecting'\r\n | 'Ringing'\r\n | 'Connected'\r\n | 'Hold'\r\n | 'InLobby'\r\n | 'EarlyMedia'\r\n | 'Disconnected';\r\n"]}
|
1
|
+
{"version":3,"file":"ParticipantListParticipant.js","sourceRoot":"","sources":["../../../../../../react-components/src/types/ParticipantListParticipant.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC","sourcesContent":["// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT license.\r\n\r\n/* @conditional-compile-remove(rooms) */\r\nimport { Role } from '../permissions';\r\nimport { CommunicationParticipant } from './CommunicationParticipant';\r\n\r\n/**\r\n * Calling participant's state, as reflected in the UI components.\r\n *\r\n * @public\r\n */\r\nexport type CallParticipantListParticipant = ParticipantListParticipant & {\r\n /** State of calling participant */\r\n state: ParticipantState;\r\n /** Whether calling participant is screen sharing */\r\n isScreenSharing?: boolean;\r\n /** Whether calling participant is muted */\r\n isMuted?: boolean;\r\n /** Whether calling participant is speaking */\r\n isSpeaking?: boolean;\r\n /* @conditional-compile-remove(rooms) */\r\n /** Role of participant in Rooms call */\r\n role?: Role;\r\n};\r\n\r\n/**\r\n * Participants displayed in a {@link ParticipantList}.\r\n *\r\n * @public\r\n */\r\nexport type ParticipantListParticipant = CommunicationParticipant & {\r\n /**\r\n * If true, local participant can remove this participant from the roster.\r\n */\r\n isRemovable: boolean;\r\n};\r\n\r\n/**\r\n * @public\r\n * The connection state of a call participant.\r\n */\r\nexport type ParticipantState =\r\n | 'Idle'\r\n | 'Connecting'\r\n | 'Ringing'\r\n | 'Connected'\r\n | 'Hold'\r\n | 'InLobby'\r\n | 'EarlyMedia'\r\n | 'Disconnected';\r\n"]}
|
@@ -8,6 +8,7 @@ export interface ConfigurationpageCameraDropdownProps {
|
|
8
8
|
cameraPermissionGranted: boolean;
|
9
9
|
dropdownProps?: Record<string, never> & Partial<CallingHandlers>;
|
10
10
|
callReadinessOptedIn?: boolean;
|
11
|
+
onClickEnableDevicePermission?: () => void;
|
11
12
|
}
|
12
13
|
/**
|
13
14
|
* @private
|
@@ -20,7 +20,7 @@ export const ConfigurationpageCameraDropdown = (props) => {
|
|
20
20
|
actionButtonContent: 'Allow'
|
21
21
|
};
|
22
22
|
/* @conditional-compile-remove(call-readiness) */
|
23
|
-
const cameraBlockedDropdown = (React.createElement(_DevicePermissionDropdown, Object.assign({ styles: dropDownStyles(theme), constrain: { video: true, audio: false }, strings: devicePermissionDropdownStringsCamera, icon: React.createElement(CallCompositeIcon, { iconName: "ControlButtonCameraOn", style: { height: '1.25rem', marginRight: '0.625rem' } }) }, props.dropdownProps)));
|
23
|
+
const cameraBlockedDropdown = (React.createElement(_DevicePermissionDropdown, Object.assign({ styles: dropDownStyles(theme), constrain: { video: true, audio: false }, strings: devicePermissionDropdownStringsCamera, icon: React.createElement(CallCompositeIcon, { iconName: "ControlButtonCameraOn", style: { height: '1.25rem', marginRight: '0.625rem' } }), onClick: props.onClickEnableDevicePermission }, props.dropdownProps)));
|
24
24
|
/* @conditional-compile-remove(call-readiness) */
|
25
25
|
if (props.callReadinessOptedIn) {
|
26
26
|
return React.createElement(React.Fragment, null, props.cameraPermissionGranted ? props.cameraGrantedDropdown : cameraBlockedDropdown);
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"ConfigurationpageCameraDropdown.js","sourceRoot":"","sources":["../../../../../../../../react-composites/src/composites/CallComposite/components/ConfigurationpageCameraDropdown.tsx"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAClC,iDAAiD;AACjD,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,iDAAiD;AACjD,OAAO,EACL,QAAQ,EAER,yBAAyB,EAE1B,4CAAmC;AACpC,iDAAiD;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AACtE,iDAAiD;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;
|
1
|
+
{"version":3,"file":"ConfigurationpageCameraDropdown.js","sourceRoot":"","sources":["../../../../../../../../react-composites/src/composites/CallComposite/components/ConfigurationpageCameraDropdown.tsx"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAClC,iDAAiD;AACjD,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,iDAAiD;AACjD,OAAO,EACL,QAAQ,EAER,yBAAyB,EAE1B,4CAAmC;AACpC,iDAAiD;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AACtE,iDAAiD;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAcvD;;GAEG;AACH,MAAM,CAAC,MAAM,+BAA+B,GAAG,CAAC,KAA2C,EAAe,EAAE;IAC1G,iDAAiD;IACjD,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;IAEzB,iDAAiD;IACjD,MAAM,qCAAqC,GAAqC;QAC9E,eAAe,EAAE,0BAA0B;QAC3C,mBAAmB,EAAE,OAAO;KAC7B,CAAC;IACF,iDAAiD;IACjD,MAAM,qBAAqB,GAAG,CAC5B,oBAAC,yBAAyB,kBACxB,MAAM,EAAE,cAAc,CAAC,KAAK,CAAC,EAC7B,SAAS,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,EACxC,OAAO,EAAE,qCAAqC,EAC9C,IAAI,EACF,oBAAC,iBAAiB,IAAC,QAAQ,EAAC,uBAAuB,EAAC,KAAK,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,GAAI,EAE/G,OAAO,EAAE,KAAK,CAAC,6BAA6B,IACxC,KAAK,CAAC,aAAa,EACvB,CACH,CAAC;IAEF,iDAAiD;IACjD,IAAI,KAAK,CAAC,oBAAoB,EAAE;QAC9B,OAAO,0CAAG,KAAK,CAAC,uBAAuB,CAAC,CAAC,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC,CAAC,qBAAqB,CAAI,CAAC;KACnG;IAED,OAAO,KAAK,CAAC,qBAAqB,CAAC;AACrC,CAAC,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n/* @conditional-compile-remove(call-readiness) */\nimport React from 'react';\n/* @conditional-compile-remove(call-readiness) */\nimport {\n useTheme,\n _DevicePermissionDropdownStrings,\n _DevicePermissionDropdown,\n _DevicePermissionDropdownProps\n} from '@internal/react-components';\n/* @conditional-compile-remove(call-readiness) */\nimport { dropDownStyles } from '../styles/LocalDeviceSettings.styles';\n/* @conditional-compile-remove(call-readiness) */\nimport { CallCompositeIcon } from '../../common/icons';\nimport { CallingHandlers } from '@internal/calling-component-bindings';\n\n/**\n * @private\n */\nexport interface ConfigurationpageCameraDropdownProps {\n cameraGrantedDropdown: JSX.Element;\n cameraPermissionGranted: boolean;\n dropdownProps?: Record<string, never> & Partial<CallingHandlers>;\n callReadinessOptedIn?: boolean;\n onClickEnableDevicePermission?: () => void;\n}\n\n/**\n * @private\n */\nexport const ConfigurationpageCameraDropdown = (props: ConfigurationpageCameraDropdownProps): JSX.Element => {\n /* @conditional-compile-remove(call-readiness) */\n const theme = useTheme();\n\n /* @conditional-compile-remove(call-readiness) */\n const devicePermissionDropdownStringsCamera: _DevicePermissionDropdownStrings = {\n placeHolderText: 'Enable Camera (optional)',\n actionButtonContent: 'Allow'\n };\n /* @conditional-compile-remove(call-readiness) */\n const cameraBlockedDropdown = (\n <_DevicePermissionDropdown\n styles={dropDownStyles(theme)}\n constrain={{ video: true, audio: false }}\n strings={devicePermissionDropdownStringsCamera}\n icon={\n <CallCompositeIcon iconName=\"ControlButtonCameraOn\" style={{ height: '1.25rem', marginRight: '0.625rem' }} />\n }\n onClick={props.onClickEnableDevicePermission}\n {...props.dropdownProps}\n />\n );\n\n /* @conditional-compile-remove(call-readiness) */\n if (props.callReadinessOptedIn) {\n return <>{props.cameraPermissionGranted ? props.cameraGrantedDropdown : cameraBlockedDropdown}</>;\n }\n\n return props.cameraGrantedDropdown;\n};\n\"../../../../../react-components/src\"\"../../../../../calling-component-bindings/src\""]}
|
@@ -20,7 +20,7 @@ export const ConfigurationpageMicDropdown = (props) => {
|
|
20
20
|
actionButtonContent: 'Allow'
|
21
21
|
};
|
22
22
|
/* @conditional-compile-remove(call-readiness) */
|
23
|
-
const microphoneBlockedDropdown = (React.createElement(_DevicePermissionDropdown, Object.assign({ styles: dropDownStyles(theme), constrain: { video: false, audio: true }, strings: devicePermissionDropdownStringsMicrophone, icon: React.createElement(CallCompositeIcon, { iconName: "ControlButtonMicOn", style: { height: '1.25rem', marginRight: '0.625rem' } }) }, props.dropdownProps)));
|
23
|
+
const microphoneBlockedDropdown = (React.createElement(_DevicePermissionDropdown, Object.assign({ styles: dropDownStyles(theme), constrain: { video: false, audio: true }, strings: devicePermissionDropdownStringsMicrophone, icon: React.createElement(CallCompositeIcon, { iconName: "ControlButtonMicOn", style: { height: '1.25rem', marginRight: '0.625rem' } }), onClick: props.onClickEnableDevicePermission }, props.dropdownProps)));
|
24
24
|
/* @conditional-compile-remove(call-readiness) */
|
25
25
|
if (props.callReadinessOptedIn) {
|
26
26
|
return React.createElement(React.Fragment, null,
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"ConfigurationpageMicDropdown.js","sourceRoot":"","sources":["../../../../../../../../react-composites/src/composites/CallComposite/components/ConfigurationpageMicDropdown.tsx"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAClC,iDAAiD;AACjD,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,iDAAiD;AACjD,OAAO,EACL,QAAQ,EAER,yBAAyB,EAE1B,4CAAmC;AACpC,iDAAiD;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AACtE,iDAAiD;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;
|
1
|
+
{"version":3,"file":"ConfigurationpageMicDropdown.js","sourceRoot":"","sources":["../../../../../../../../react-composites/src/composites/CallComposite/components/ConfigurationpageMicDropdown.tsx"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAClC,iDAAiD;AACjD,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,iDAAiD;AACjD,OAAO,EACL,QAAQ,EAER,yBAAyB,EAE1B,4CAAmC;AACpC,iDAAiD;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AACtE,iDAAiD;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAcvD;;GAEG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,KAAwC,EAAe,EAAE;IACpG,iDAAiD;IACjD,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;IACzB,iDAAiD;IACjD,MAAM,yCAAyC,GAAqC;QAClF,eAAe,EAAE,8BAA8B;QAC/C,mBAAmB,EAAE,OAAO;KAC7B,CAAC;IAEF,iDAAiD;IACjD,MAAM,yBAAyB,GAAG,CAChC,oBAAC,yBAAyB,kBACxB,MAAM,EAAE,cAAc,CAAC,KAAK,CAAC,EAC7B,SAAS,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,EACxC,OAAO,EAAE,yCAAyC,EAClD,IAAI,EAAE,oBAAC,iBAAiB,IAAC,QAAQ,EAAC,oBAAoB,EAAC,KAAK,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,GAAI,EAChH,OAAO,EAAE,KAAK,CAAC,6BAA6B,IACxC,KAAK,CAAC,aAAa,EACvB,CACH,CAAC;IAEF,iDAAiD;IACjD,IAAI,KAAK,CAAC,oBAAoB,EAAE;QAC9B,OAAO;;YAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,CAAC,yBAAyB,CAAI,CAAC;KAClG;IACD,OAAO,KAAK,CAAC,kBAAkB,CAAC;AAClC,CAAC,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n/* @conditional-compile-remove(call-readiness) */\nimport React from 'react';\n/* @conditional-compile-remove(call-readiness) */\nimport {\n useTheme,\n _DevicePermissionDropdownStrings,\n _DevicePermissionDropdown,\n _DevicePermissionDropdownProps\n} from '@internal/react-components';\n/* @conditional-compile-remove(call-readiness) */\nimport { dropDownStyles } from '../styles/LocalDeviceSettings.styles';\n/* @conditional-compile-remove(call-readiness) */\nimport { CallCompositeIcon } from '../../common/icons';\nimport { CallingHandlers } from '@internal/calling-component-bindings';\n\n/**\n * @private\n */\nexport interface ConfigurationpageMicDropdownProps {\n micGrantedDropdown: JSX.Element;\n micPermissionGranted: boolean;\n dropdownProps?: Record<string, never> & Partial<CallingHandlers>;\n callReadinessOptedIn?: boolean;\n onClickEnableDevicePermission?: () => void;\n}\n\n/**\n * @private\n */\nexport const ConfigurationpageMicDropdown = (props: ConfigurationpageMicDropdownProps): JSX.Element => {\n /* @conditional-compile-remove(call-readiness) */\n const theme = useTheme();\n /* @conditional-compile-remove(call-readiness) */\n const devicePermissionDropdownStringsMicrophone: _DevicePermissionDropdownStrings = {\n placeHolderText: 'Enable Microphone (required)',\n actionButtonContent: 'Allow'\n };\n\n /* @conditional-compile-remove(call-readiness) */\n const microphoneBlockedDropdown = (\n <_DevicePermissionDropdown\n styles={dropDownStyles(theme)}\n constrain={{ video: false, audio: true }}\n strings={devicePermissionDropdownStringsMicrophone}\n icon={<CallCompositeIcon iconName=\"ControlButtonMicOn\" style={{ height: '1.25rem', marginRight: '0.625rem' }} />}\n onClick={props.onClickEnableDevicePermission}\n {...props.dropdownProps}\n />\n );\n\n /* @conditional-compile-remove(call-readiness) */\n if (props.callReadinessOptedIn) {\n return <> {props.micPermissionGranted ? props.micGrantedDropdown : microphoneBlockedDropdown}</>;\n }\n return props.micGrantedDropdown;\n};\n\"../../../../../react-components/src\"\"../../../../../calling-component-bindings/src\""]}
|
@@ -17,6 +17,7 @@ export interface LocalDeviceSettingsType {
|
|
17
17
|
onSelectMicrophone: (device: AudioDeviceInfo) => Promise<void>;
|
18
18
|
onSelectSpeaker: (device: AudioDeviceInfo) => Promise<void>;
|
19
19
|
callReadinessOptedIn?: boolean;
|
20
|
+
onClickEnableDevicePermission?: () => void;
|
20
21
|
}
|
21
22
|
/**
|
22
23
|
* @private
|
@@ -119,7 +119,9 @@ export const LocalDeviceSettings = (props) => {
|
|
119
119
|
/* @conditional-compile-remove(call-readiness) */
|
120
120
|
dropdownProps: dropdownProps,
|
121
121
|
/* @conditional-compile-remove(call-readiness) */
|
122
|
-
callReadinessOptedIn: (_b = props.callReadinessOptedIn) !== null && _b !== void 0 ? _b : false
|
122
|
+
callReadinessOptedIn: (_b = props.callReadinessOptedIn) !== null && _b !== void 0 ? _b : false,
|
123
|
+
/* @conditional-compile-remove(call-readiness) */
|
124
|
+
onClickEnableDevicePermission: props.onClickEnableDevicePermission }))),
|
123
125
|
React.createElement(Stack, null,
|
124
126
|
React.createElement(Label, { id: 'call-composite-local-sound-settings-label', className: mergeStyles(dropDownStyles(theme).label), disabled: !micPermissionGranted }, soundLabel),
|
125
127
|
React.createElement(Stack, { "data-ui-id": "call-composite-sound-settings", tokens: mainStackTokens },
|
@@ -127,7 +129,9 @@ export const LocalDeviceSettings = (props) => {
|
|
127
129
|
/* @conditional-compile-remove(call-readiness) */
|
128
130
|
dropdownProps: dropdownProps,
|
129
131
|
/* @conditional-compile-remove(call-readiness) */
|
130
|
-
callReadinessOptedIn: (_c = props.callReadinessOptedIn) !== null && _c !== void 0 ? _c : false
|
132
|
+
callReadinessOptedIn: (_c = props.callReadinessOptedIn) !== null && _c !== void 0 ? _c : false,
|
133
|
+
/* @conditional-compile-remove(call-readiness) */
|
134
|
+
onClickEnableDevicePermission: props.onClickEnableDevicePermission }),
|
131
135
|
React.createElement(Dropdown, { "aria-labelledby": 'call-composite-local-sound-settings-label', placeholder: defaultPlaceHolder, styles: dropDownStyles(theme), disabled: props.speakers.length === 0, options: getDropDownList(props.speakers), defaultSelectedKey: props.selectedSpeaker ? props.selectedSpeaker.id : defaultDeviceId(props.speakers), onChange: (event, option, index) => {
|
132
136
|
props.onSelectSpeaker(props.speakers[index !== null && index !== void 0 ? index : 0]);
|
133
137
|
}, onRenderTitle: (props) => onRenderTitle('Speaker', props) })))));
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"LocalDeviceSettings.js","sourceRoot":"","sources":["../../../../../../../../react-composites/src/composites/CallComposite/components/LocalDeviceSettings.tsx"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport { AudioDeviceInfo, VideoDeviceInfo } from '@azure/communication-calling';\nimport { Dropdown, IDropdownOption, Label, mergeStyles, Stack } from '@fluentui/react';\n/* @conditional-compile-remove(call-readiness) */\nimport { useEffect } from 'react';\nimport { useTheme, VideoStreamOptions, _DevicePermissionDropdown } from '@internal/react-components';\nimport React from 'react';\nimport { CallCompositeIcon } from '../../common/icons';\nimport { useLocale } from '../../localization';\nimport {\n dropDownStyles,\n dropDownTitleIconStyles,\n mainStackTokens,\n optionIconStyles\n} from '../styles/LocalDeviceSettings.styles';\n/* @conditional-compile-remove(rooms) */\nimport { _usePermissions } from '@internal/react-components';\n/* @conditional-compile-remove(call-readiness) */\nimport { useAdapter } from '../adapter/CallAdapterProvider';\nimport { ConfigurationpageCameraDropdown } from './ConfigurationpageCameraDropdown';\nimport { ConfigurationpageMicDropdown } from './ConfigurationpageMicDropdown';\n/* @conditional-compile-remove(call-readiness) */\nimport { usePropsFor } from '../hooks/usePropsFor';\n\ntype iconType = 'Camera' | 'Microphone' | 'Speaker';\n\nconst getDropDownList = (list: Array<VideoDeviceInfo | AudioDeviceInfo>): IDropdownOption[] => {\n // Remove duplicates\n const noDuplicates = new Map<string, VideoDeviceInfo | AudioDeviceInfo>();\n for (const item of list) {\n noDuplicates.set(item.id, item);\n }\n const dropdownList: IDropdownOption[] = [];\n for (const item of noDuplicates.values()) {\n dropdownList.push({\n key: item.id,\n text: item.name === '' ? item.deviceType : item.name\n });\n }\n return dropdownList;\n};\n\nconst getOptionIcon = (type: iconType): JSX.Element | undefined => {\n if (type === 'Camera') {\n return <CallCompositeIcon iconName=\"LocalDeviceSettingsCamera\" className={optionIconStyles} />;\n } else if (type === 'Microphone') {\n return <CallCompositeIcon iconName=\"LocalDeviceSettingsMic\" className={optionIconStyles} />;\n } else if (type === 'Speaker') {\n return <CallCompositeIcon iconName=\"LocalDeviceSettingsSpeaker\" className={optionIconStyles} />;\n } else {\n return undefined;\n }\n};\n\nconst onRenderTitle = (iconType: iconType, props?: IDropdownOption[]): JSX.Element => {\n const icon = props && getOptionIcon(iconType);\n return props ? (\n <div className={dropDownTitleIconStyles}>\n {icon}\n <span>{props[0].text}</span>\n </div>\n ) : (\n <></>\n );\n};\n\nconst localVideoViewOptions = {\n scalingMode: 'Crop',\n isMirrored: true\n} as VideoStreamOptions;\n\n/**\n * @private\n */\nexport interface LocalDeviceSettingsType {\n cameras: VideoDeviceInfo[];\n microphones: AudioDeviceInfo[];\n speakers: AudioDeviceInfo[];\n selectedCamera?: VideoDeviceInfo;\n selectedMicrophone?: AudioDeviceInfo;\n selectedSpeaker?: AudioDeviceInfo;\n microphonePermissionGranted: boolean | undefined;\n cameraPermissionGranted: boolean | undefined;\n onSelectCamera: (device: VideoDeviceInfo, options?: VideoStreamOptions) => Promise<void>;\n onSelectMicrophone: (device: AudioDeviceInfo) => Promise<void>;\n onSelectSpeaker: (device: AudioDeviceInfo) => Promise<void>;\n callReadinessOptedIn?: boolean;\n}\n\n/**\n * @private\n */\nexport const LocalDeviceSettings = (props: LocalDeviceSettingsType): JSX.Element => {\n const theme = useTheme();\n const locale = useLocale();\n /* @conditional-compile-remove(call-readiness) */\n const adapter = useAdapter();\n const defaultPlaceHolder = locale.strings.call.defaultPlaceHolder;\n const cameraLabel = locale.strings.call.cameraLabel;\n const soundLabel = locale.strings.call.soundLabel;\n\n const cameraPermissionGranted = props.cameraPermissionGranted;\n const micPermissionGranted = props.microphonePermissionGranted;\n let roleCanUseCamera = true;\n let roleCanUseMic = true;\n /* @conditional-compile-remove(rooms) */\n const rolePermissions = _usePermissions();\n /* @conditional-compile-remove(rooms) */\n roleCanUseCamera = rolePermissions.cameraButton;\n /* @conditional-compile-remove(rooms) */\n roleCanUseMic = rolePermissions.microphoneButton;\n\n // TODO: speaker permission is tied to microphone permission (when you request 'audio' permission using the SDK) its\n // actually granting access to query both microphone and speaker. However the browser popup asks you explicity for\n // 'microphone'. This needs investigation on how we want to handle this and maybe needs follow up with SDK team.\n /* @conditional-compile-remove(call-readiness) */\n useEffect(() => {\n if (cameraPermissionGranted) {\n adapter.queryCameras();\n }\n if (micPermissionGranted) {\n adapter.queryMicrophones();\n }\n adapter.querySpeakers();\n }, [adapter, cameraPermissionGranted, micPermissionGranted]);\n\n /* @conditional-compile-remove(call-readiness) */\n const dropdownProps = usePropsFor(_DevicePermissionDropdown);\n\n const cameraGrantedDropdown = (\n <Dropdown\n data-ui-id=\"call-composite-local-camera-settings\"\n aria-labelledby={'call-composite-local-camera-settings-label'}\n placeholder={defaultPlaceHolder}\n options={cameraPermissionGranted ? getDropDownList(props.cameras) : [{ key: 'deniedOrUnknown', text: '' }]}\n styles={dropDownStyles(theme)}\n disabled={!cameraPermissionGranted}\n errorMessage={\n props.cameraPermissionGranted === undefined || props.cameraPermissionGranted\n ? undefined\n : locale.strings.call.cameraPermissionDenied\n }\n defaultSelectedKey={\n micPermissionGranted\n ? props.selectedCamera\n ? props.selectedCamera.id\n : props.cameras\n ? props.cameras[0]?.id\n : ''\n : 'deniedOrUnknown'\n }\n onChange={(event, option, index) => {\n props.onSelectCamera(props.cameras[index ?? 0], localVideoViewOptions);\n }}\n onRenderTitle={(props?: IDropdownOption[]) => onRenderTitle('Camera', props)}\n />\n );\n\n const micGrantedDropdown = (\n <>\n {roleCanUseMic && (\n <Dropdown\n aria-labelledby={'call-composite-local-sound-settings-label'}\n placeholder={defaultPlaceHolder}\n styles={dropDownStyles(theme)}\n disabled={!micPermissionGranted}\n errorMessage={\n props.microphonePermissionGranted === undefined || props.microphonePermissionGranted\n ? undefined\n : locale.strings.call.microphonePermissionDenied\n }\n options={micPermissionGranted ? getDropDownList(props.microphones) : [{ key: 'deniedOrUnknown', text: '' }]}\n defaultSelectedKey={\n micPermissionGranted\n ? props.selectedMicrophone\n ? props.selectedMicrophone.id\n : defaultDeviceId(props.microphones)\n : 'deniedOrUnknown'\n }\n onChange={(\n event: React.FormEvent<HTMLDivElement>,\n option?: IDropdownOption | undefined,\n index?: number | undefined\n ) => {\n props.onSelectMicrophone(props.microphones[index ?? 0]);\n }}\n onRenderTitle={(props?: IDropdownOption[]) => onRenderTitle('Microphone', props)}\n />\n )}\n </>\n );\n\n return (\n <Stack data-ui-id=\"call-composite-device-settings\" tokens={mainStackTokens}>\n {roleCanUseCamera && (\n <Stack>\n <Label\n id={'call-composite-local-camera-settings-label'}\n className={mergeStyles(dropDownStyles(theme).label)}\n disabled={!cameraPermissionGranted} // follows dropdown disabled state\n >\n {cameraLabel}\n </Label>\n <ConfigurationpageCameraDropdown\n cameraGrantedDropdown={cameraGrantedDropdown}\n cameraPermissionGranted={cameraPermissionGranted ?? false}\n /* @conditional-compile-remove(call-readiness) */\n dropdownProps={dropdownProps}\n /* @conditional-compile-remove(call-readiness) */\n callReadinessOptedIn={props.callReadinessOptedIn ?? false}\n />\n </Stack>\n )}\n <Stack>\n <Label\n id={'call-composite-local-sound-settings-label'}\n className={mergeStyles(dropDownStyles(theme).label)}\n disabled={!micPermissionGranted} // follows Start button disabled state in ConfigurationPage\n >\n {soundLabel}\n </Label>\n <Stack data-ui-id=\"call-composite-sound-settings\" tokens={mainStackTokens}>\n <ConfigurationpageMicDropdown\n micGrantedDropdown={micGrantedDropdown}\n micPermissionGranted={micPermissionGranted ?? false}\n /* @conditional-compile-remove(call-readiness) */\n dropdownProps={dropdownProps}\n /* @conditional-compile-remove(call-readiness) */\n callReadinessOptedIn={props.callReadinessOptedIn ?? false}\n />\n <Dropdown\n aria-labelledby={'call-composite-local-sound-settings-label'}\n placeholder={defaultPlaceHolder}\n styles={dropDownStyles(theme)}\n disabled={props.speakers.length === 0}\n options={getDropDownList(props.speakers)}\n defaultSelectedKey={props.selectedSpeaker ? props.selectedSpeaker.id : defaultDeviceId(props.speakers)}\n onChange={(\n event: React.FormEvent<HTMLDivElement>,\n option?: IDropdownOption | undefined,\n index?: number | undefined\n ) => {\n props.onSelectSpeaker(props.speakers[index ?? 0]);\n }}\n onRenderTitle={(props?: IDropdownOption[]) => onRenderTitle('Speaker', props)}\n />\n </Stack>\n </Stack>\n </Stack>\n );\n};\n\nconst defaultDeviceId = (devices: AudioDeviceInfo[]): string => {\n if (devices.length === 0) {\n return '';\n }\n const defaultDevice = devices.find((device) => device.isSystemDefault);\n if (defaultDevice) {\n return defaultDevice.id;\n }\n return devices[0].id;\n};\n\"../../../../../react-components/src\""]}
|
1
|
+
{"version":3,"file":"LocalDeviceSettings.js","sourceRoot":"","sources":["../../../../../../../../react-composites/src/composites/CallComposite/components/LocalDeviceSettings.tsx"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport { AudioDeviceInfo, VideoDeviceInfo } from '@azure/communication-calling';\nimport { Dropdown, IDropdownOption, Label, mergeStyles, Stack } from '@fluentui/react';\n/* @conditional-compile-remove(call-readiness) */\nimport { useEffect } from 'react';\nimport { useTheme, VideoStreamOptions, _DevicePermissionDropdown } from '@internal/react-components';\nimport React from 'react';\nimport { CallCompositeIcon } from '../../common/icons';\nimport { useLocale } from '../../localization';\nimport {\n dropDownStyles,\n dropDownTitleIconStyles,\n mainStackTokens,\n optionIconStyles\n} from '../styles/LocalDeviceSettings.styles';\n/* @conditional-compile-remove(rooms) */\nimport { _usePermissions } from '@internal/react-components';\n/* @conditional-compile-remove(call-readiness) */\nimport { useAdapter } from '../adapter/CallAdapterProvider';\nimport { ConfigurationpageCameraDropdown } from './ConfigurationpageCameraDropdown';\nimport { ConfigurationpageMicDropdown } from './ConfigurationpageMicDropdown';\n/* @conditional-compile-remove(call-readiness) */\nimport { usePropsFor } from '../hooks/usePropsFor';\n\ntype iconType = 'Camera' | 'Microphone' | 'Speaker';\n\nconst getDropDownList = (list: Array<VideoDeviceInfo | AudioDeviceInfo>): IDropdownOption[] => {\n // Remove duplicates\n const noDuplicates = new Map<string, VideoDeviceInfo | AudioDeviceInfo>();\n for (const item of list) {\n noDuplicates.set(item.id, item);\n }\n const dropdownList: IDropdownOption[] = [];\n for (const item of noDuplicates.values()) {\n dropdownList.push({\n key: item.id,\n text: item.name === '' ? item.deviceType : item.name\n });\n }\n return dropdownList;\n};\n\nconst getOptionIcon = (type: iconType): JSX.Element | undefined => {\n if (type === 'Camera') {\n return <CallCompositeIcon iconName=\"LocalDeviceSettingsCamera\" className={optionIconStyles} />;\n } else if (type === 'Microphone') {\n return <CallCompositeIcon iconName=\"LocalDeviceSettingsMic\" className={optionIconStyles} />;\n } else if (type === 'Speaker') {\n return <CallCompositeIcon iconName=\"LocalDeviceSettingsSpeaker\" className={optionIconStyles} />;\n } else {\n return undefined;\n }\n};\n\nconst onRenderTitle = (iconType: iconType, props?: IDropdownOption[]): JSX.Element => {\n const icon = props && getOptionIcon(iconType);\n return props ? (\n <div className={dropDownTitleIconStyles}>\n {icon}\n <span>{props[0].text}</span>\n </div>\n ) : (\n <></>\n );\n};\n\nconst localVideoViewOptions = {\n scalingMode: 'Crop',\n isMirrored: true\n} as VideoStreamOptions;\n\n/**\n * @private\n */\nexport interface LocalDeviceSettingsType {\n cameras: VideoDeviceInfo[];\n microphones: AudioDeviceInfo[];\n speakers: AudioDeviceInfo[];\n selectedCamera?: VideoDeviceInfo;\n selectedMicrophone?: AudioDeviceInfo;\n selectedSpeaker?: AudioDeviceInfo;\n microphonePermissionGranted: boolean | undefined;\n cameraPermissionGranted: boolean | undefined;\n onSelectCamera: (device: VideoDeviceInfo, options?: VideoStreamOptions) => Promise<void>;\n onSelectMicrophone: (device: AudioDeviceInfo) => Promise<void>;\n onSelectSpeaker: (device: AudioDeviceInfo) => Promise<void>;\n callReadinessOptedIn?: boolean;\n /* @conditional-compile-remove(call-readiness) */\n onClickEnableDevicePermission?: () => void;\n}\n\n/**\n * @private\n */\nexport const LocalDeviceSettings = (props: LocalDeviceSettingsType): JSX.Element => {\n const theme = useTheme();\n const locale = useLocale();\n /* @conditional-compile-remove(call-readiness) */\n const adapter = useAdapter();\n const defaultPlaceHolder = locale.strings.call.defaultPlaceHolder;\n const cameraLabel = locale.strings.call.cameraLabel;\n const soundLabel = locale.strings.call.soundLabel;\n\n const cameraPermissionGranted = props.cameraPermissionGranted;\n const micPermissionGranted = props.microphonePermissionGranted;\n let roleCanUseCamera = true;\n let roleCanUseMic = true;\n /* @conditional-compile-remove(rooms) */\n const rolePermissions = _usePermissions();\n /* @conditional-compile-remove(rooms) */\n roleCanUseCamera = rolePermissions.cameraButton;\n /* @conditional-compile-remove(rooms) */\n roleCanUseMic = rolePermissions.microphoneButton;\n\n // TODO: speaker permission is tied to microphone permission (when you request 'audio' permission using the SDK) its\n // actually granting access to query both microphone and speaker. However the browser popup asks you explicity for\n // 'microphone'. This needs investigation on how we want to handle this and maybe needs follow up with SDK team.\n /* @conditional-compile-remove(call-readiness) */\n useEffect(() => {\n if (cameraPermissionGranted) {\n adapter.queryCameras();\n }\n if (micPermissionGranted) {\n adapter.queryMicrophones();\n }\n adapter.querySpeakers();\n }, [adapter, cameraPermissionGranted, micPermissionGranted]);\n\n /* @conditional-compile-remove(call-readiness) */\n const dropdownProps = usePropsFor(_DevicePermissionDropdown);\n\n const cameraGrantedDropdown = (\n <Dropdown\n data-ui-id=\"call-composite-local-camera-settings\"\n aria-labelledby={'call-composite-local-camera-settings-label'}\n placeholder={defaultPlaceHolder}\n options={cameraPermissionGranted ? getDropDownList(props.cameras) : [{ key: 'deniedOrUnknown', text: '' }]}\n styles={dropDownStyles(theme)}\n disabled={!cameraPermissionGranted}\n errorMessage={\n props.cameraPermissionGranted === undefined || props.cameraPermissionGranted\n ? undefined\n : locale.strings.call.cameraPermissionDenied\n }\n defaultSelectedKey={\n micPermissionGranted\n ? props.selectedCamera\n ? props.selectedCamera.id\n : props.cameras\n ? props.cameras[0]?.id\n : ''\n : 'deniedOrUnknown'\n }\n onChange={(event, option, index) => {\n props.onSelectCamera(props.cameras[index ?? 0], localVideoViewOptions);\n }}\n onRenderTitle={(props?: IDropdownOption[]) => onRenderTitle('Camera', props)}\n />\n );\n\n const micGrantedDropdown = (\n <>\n {roleCanUseMic && (\n <Dropdown\n aria-labelledby={'call-composite-local-sound-settings-label'}\n placeholder={defaultPlaceHolder}\n styles={dropDownStyles(theme)}\n disabled={!micPermissionGranted}\n errorMessage={\n props.microphonePermissionGranted === undefined || props.microphonePermissionGranted\n ? undefined\n : locale.strings.call.microphonePermissionDenied\n }\n options={micPermissionGranted ? getDropDownList(props.microphones) : [{ key: 'deniedOrUnknown', text: '' }]}\n defaultSelectedKey={\n micPermissionGranted\n ? props.selectedMicrophone\n ? props.selectedMicrophone.id\n : defaultDeviceId(props.microphones)\n : 'deniedOrUnknown'\n }\n onChange={(\n event: React.FormEvent<HTMLDivElement>,\n option?: IDropdownOption | undefined,\n index?: number | undefined\n ) => {\n props.onSelectMicrophone(props.microphones[index ?? 0]);\n }}\n onRenderTitle={(props?: IDropdownOption[]) => onRenderTitle('Microphone', props)}\n />\n )}\n </>\n );\n\n return (\n <Stack data-ui-id=\"call-composite-device-settings\" tokens={mainStackTokens}>\n {roleCanUseCamera && (\n <Stack>\n <Label\n id={'call-composite-local-camera-settings-label'}\n className={mergeStyles(dropDownStyles(theme).label)}\n disabled={!cameraPermissionGranted} // follows dropdown disabled state\n >\n {cameraLabel}\n </Label>\n <ConfigurationpageCameraDropdown\n cameraGrantedDropdown={cameraGrantedDropdown}\n cameraPermissionGranted={cameraPermissionGranted ?? false}\n /* @conditional-compile-remove(call-readiness) */\n dropdownProps={dropdownProps}\n /* @conditional-compile-remove(call-readiness) */\n callReadinessOptedIn={props.callReadinessOptedIn ?? false}\n /* @conditional-compile-remove(call-readiness) */\n onClickEnableDevicePermission={props.onClickEnableDevicePermission}\n />\n </Stack>\n )}\n <Stack>\n <Label\n id={'call-composite-local-sound-settings-label'}\n className={mergeStyles(dropDownStyles(theme).label)}\n disabled={!micPermissionGranted} // follows Start button disabled state in ConfigurationPage\n >\n {soundLabel}\n </Label>\n <Stack data-ui-id=\"call-composite-sound-settings\" tokens={mainStackTokens}>\n <ConfigurationpageMicDropdown\n micGrantedDropdown={micGrantedDropdown}\n micPermissionGranted={micPermissionGranted ?? false}\n /* @conditional-compile-remove(call-readiness) */\n dropdownProps={dropdownProps}\n /* @conditional-compile-remove(call-readiness) */\n callReadinessOptedIn={props.callReadinessOptedIn ?? false}\n /* @conditional-compile-remove(call-readiness) */\n onClickEnableDevicePermission={props.onClickEnableDevicePermission}\n />\n <Dropdown\n aria-labelledby={'call-composite-local-sound-settings-label'}\n placeholder={defaultPlaceHolder}\n styles={dropDownStyles(theme)}\n disabled={props.speakers.length === 0}\n options={getDropDownList(props.speakers)}\n defaultSelectedKey={props.selectedSpeaker ? props.selectedSpeaker.id : defaultDeviceId(props.speakers)}\n onChange={(\n event: React.FormEvent<HTMLDivElement>,\n option?: IDropdownOption | undefined,\n index?: number | undefined\n ) => {\n props.onSelectSpeaker(props.speakers[index ?? 0]);\n }}\n onRenderTitle={(props?: IDropdownOption[]) => onRenderTitle('Speaker', props)}\n />\n </Stack>\n </Stack>\n </Stack>\n );\n};\n\nconst defaultDeviceId = (devices: AudioDeviceInfo[]): string => {\n if (devices.length === 0) {\n return '';\n }\n const defaultDevice = devices.find((device) => device.isSystemDefault);\n if (defaultDevice) {\n return defaultDevice.id;\n }\n return devices[0].id;\n};\n\"../../../../../react-components/src\""]}
|
package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/ConfigurationPage.js
CHANGED
@@ -25,6 +25,8 @@ import { DomainPermissions, _DrawerSurface } from "../../../../../react-componen
|
|
25
25
|
import { _usePermissions } from "../../../../../react-components/src";
|
26
26
|
import { getCallingSelector } from "../../../../../calling-component-bindings/src";
|
27
27
|
import { Stack } from '@fluentui/react';
|
28
|
+
/* @conditional-compile-remove(call-readiness) */
|
29
|
+
import { Modal } from '@fluentui/react';
|
28
30
|
import { LocalPreview } from '../components/LocalPreview';
|
29
31
|
import { callDetailsStyleDesktop, callDetailsStyleMobile, configurationStackTokensDesktop, configurationStackTokensMobile, configurationContainerStyleDesktop, configurationContainerStyleMobile, selectionContainerStyle, startCallButtonContainerStyleDesktop, startCallButtonContainerStyleMobile, startCallButtonStyleMobile, titleContainerStyleDesktop, titleContainerStyleMobile, callDetailsContainerStylesDesktop } from '../styles/CallConfiguration.styles';
|
30
32
|
import { useLocale } from '../../localization';
|
@@ -97,6 +99,8 @@ export const ConfigurationPage = (props) => {
|
|
97
99
|
// do nothing here
|
98
100
|
// only way to dismiss this drawer is clicking on allow access which will leads to device permission prompt
|
99
101
|
};
|
102
|
+
/* @conditional-compile-remove(call-readiness) */
|
103
|
+
const [isModalShowing, setIsModalShowing] = useState(false);
|
100
104
|
return (React.createElement(Stack, { className: mobileView ? configurationContainerStyleMobile : configurationContainerStyleDesktop },
|
101
105
|
React.createElement(Stack, { styles: bannerNotificationStyles },
|
102
106
|
React.createElement(ConfigurationpageErrorBar
|
@@ -115,6 +119,17 @@ export const ConfigurationPage = (props) => {
|
|
115
119
|
/* @conditional-compile-remove(call-readiness) */
|
116
120
|
callReadinessOptedIn: callReadinessOptedIn })),
|
117
121
|
/* @conditional-compile-remove(call-readiness) */
|
122
|
+
//show this when clicking on enable camera button or enable mic button on desktop for the first time
|
123
|
+
//does not show if user has already grant mic or camera access
|
124
|
+
!mobileView && !cameraPermissionGranted && !microphonePermissionGranted && callReadinessOptedIn && (React.createElement(Modal, { isOpen: isModalShowing, isBlocking: false, onDismiss: () => {
|
125
|
+
setIsModalShowing(false);
|
126
|
+
}, overlay: { styles: { root: { background: 'rgba(0,0,0,0.9)' } } } },
|
127
|
+
React.createElement(DomainPermissions, { appName: 'app', onTroubleshootingClick: onPermissionsTroubleshootingClick
|
128
|
+
? () => {
|
129
|
+
onPermissionsTroubleshootingClick(permissionsState);
|
130
|
+
}
|
131
|
+
: undefined }))),
|
132
|
+
/* @conditional-compile-remove(call-readiness) */
|
118
133
|
mobileView && isDrawerShowing && callReadinessOptedIn && (React.createElement(_DrawerSurface, { onLightDismiss: onLightDismissTriggered, styles: drawerContainerStyles(DRAWER_HIGH_Z_BAND) },
|
119
134
|
React.createElement(DomainPermissions, { appName: 'app', onTroubleshootingClick: onPermissionsTroubleshootingClick
|
120
135
|
? () => {
|
@@ -140,7 +155,11 @@ export const ConfigurationPage = (props) => {
|
|
140
155
|
callDescription),
|
141
156
|
React.createElement(LocalDeviceSettings, Object.assign({}, options, localDeviceSettingsHandlers, { cameraPermissionGranted: cameraPermissionGranted, microphonePermissionGranted: microphonePermissionGranted,
|
142
157
|
/* @conditional-compile-remove(call-readiness) */
|
143
|
-
callReadinessOptedIn: callReadinessOptedIn
|
158
|
+
callReadinessOptedIn: callReadinessOptedIn,
|
159
|
+
/* @conditional-compile-remove(call-readiness) */
|
160
|
+
onClickEnableDevicePermission: () => {
|
161
|
+
setIsModalShowing(true);
|
162
|
+
} })))),
|
144
163
|
React.createElement(Stack, { styles: mobileWithPreview ? startCallButtonContainerStyleMobile : startCallButtonContainerStyleDesktop },
|
145
164
|
React.createElement(StartCallButton, { className: mobileWithPreview ? startCallButtonStyleMobile : undefined, onClick: startCallHandler, disabled: disableStartCallButton }))))));
|
146
165
|
};
|
package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/ConfigurationPage.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"ConfigurationPage.js","sourceRoot":"","sources":["../../../../../../../../react-composites/src/composites/CallComposite/pages/ConfigurationPage.tsx"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport React from 'react';\n/* @conditional-compile-remove(call-readiness) */\nimport { useState } from 'react';\nimport { useAdaptedSelector } from '../hooks/useAdaptedSelector';\nimport { useHandlers } from '../hooks/useHandlers';\nimport { LocalDeviceSettings } from '../components/LocalDeviceSettings';\nimport { StartCallButton } from '../components/StartCallButton';\nimport { devicePermissionSelector } from '../selectors/devicePermissionSelector';\nimport { useSelector } from '../hooks/useSelector';\nimport { DevicesButton, ErrorBar } from '@internal/react-components';\n/* @conditional-compile-remove(call-readiness) */\nimport { DomainPermissions, _DrawerSurface, _DrawerSurfaceStyles } from '@internal/react-components';\n/* @conditional-compile-remove(rooms) */\nimport { _usePermissions, _Permissions } from '@internal/react-components';\nimport { getCallingSelector } from '@internal/calling-component-bindings';\nimport { Stack } from '@fluentui/react';\nimport { LocalPreview } from '../components/LocalPreview';\nimport {\n callDetailsStyleDesktop,\n callDetailsStyleMobile,\n configurationStackTokensDesktop,\n configurationStackTokensMobile,\n configurationContainerStyleDesktop,\n configurationContainerStyleMobile,\n selectionContainerStyle,\n startCallButtonContainerStyleDesktop,\n startCallButtonContainerStyleMobile,\n startCallButtonStyleMobile,\n titleContainerStyleDesktop,\n titleContainerStyleMobile,\n callDetailsContainerStylesDesktop\n} from '../styles/CallConfiguration.styles';\nimport { useLocale } from '../../localization';\nimport { bannerNotificationStyles } from '../styles/CallPage.styles';\nimport { usePropsFor } from '../hooks/usePropsFor';\nimport { useAdapter } from '../adapter/CallAdapterProvider';\n/* @conditional-compile-remove(call-readiness) */\nimport { DevicePermissionRestrictions } from '../CallComposite';\nimport { ConfigurationpageErrorBar } from '../components/ConfigurationpageErrorBar';\n/* @conditional-compile-remove(call-readiness) */\nimport { drawerContainerStyles } from '../styles/CallComposite.styles';\n\n/* @conditional-compile-remove(call-readiness) */\nconst DRAWER_HIGH_Z_BAND = 99; // setting z index to 99 so that it sit above all components\n\n/**\n * @private\n */\nexport interface ConfigurationPageProps {\n mobileView: boolean;\n startCallHandler(): void;\n /* @conditional-compile-remove(call-readiness) */\n devicePermissions?: DevicePermissionRestrictions;\n /* @conditional-compile-remove(call-readiness) */\n onPermissionsTroubleshootingClick?: (permissionsState: {\n camera: PermissionState;\n microphone: PermissionState;\n }) => void;\n /* @conditional-compile-remove(call-readiness) */\n onNetworkingTroubleShootingClick?: () => void;\n /* @conditional-compile-remove(call-readiness) */\n callReadinessOptedIn?: boolean;\n}\n\n/**\n * @private\n */\nexport const ConfigurationPage = (props: ConfigurationPageProps): JSX.Element => {\n const {\n startCallHandler,\n mobileView,\n /* @conditional-compile-remove(call-readiness) */ devicePermissions,\n /* @conditional-compile-remove(call-readiness) */ onPermissionsTroubleshootingClick,\n /* @conditional-compile-remove(call-readiness) */ onNetworkingTroubleShootingClick,\n /* @conditional-compile-remove(call-readiness) */ callReadinessOptedIn = false\n } = props;\n\n const options = useAdaptedSelector(getCallingSelector(DevicesButton));\n const localDeviceSettingsHandlers = useHandlers(LocalDeviceSettings);\n const { video: cameraPermissionGranted, audio: microphonePermissionGranted } = useSelector(devicePermissionSelector);\n let errorBarProps = usePropsFor(ErrorBar);\n const adapter = useAdapter();\n const deviceState = adapter.getState().devices;\n\n let disableStartCallButton = !microphonePermissionGranted || deviceState.microphones?.length === 0;\n /* @conditional-compile-remove(rooms) */\n const rolePermissions = _usePermissions();\n\n /* @conditional-compile-remove(rooms) */\n // TODO: move this logic to the error bar selector once role is plumbed from the headless SDK\n if (!rolePermissions.cameraButton) {\n errorBarProps = {\n ...errorBarProps,\n activeErrorMessages: errorBarProps.activeErrorMessages.filter((e) => e.type !== 'callCameraAccessDenied')\n };\n }\n /* @conditional-compile-remove(rooms) */\n if (!rolePermissions.microphoneButton) {\n // If user's role permissions do not allow access to the microphone button then DO NOT disable the start call button\n // because microphone device permission is not needed for the user's role\n disableStartCallButton = false;\n }\n\n /* @conditional-compile-remove(call-readiness) */\n // Overrides role permissions if CallCompositeOptions devicePermissions are set\n if (devicePermissions) {\n if (\n ['doNotPrompt', 'optional'].includes(devicePermissions.camera) &&\n ['doNotPrompt', 'optional'].includes(devicePermissions.microphone)\n ) {\n disableStartCallButton = false;\n } else if (devicePermissions.camera === 'required') {\n disableStartCallButton = !cameraPermissionGranted || deviceState.cameras?.length === 0;\n }\n }\n\n const locale = useLocale();\n const title = (\n <Stack.Item className={mobileView ? titleContainerStyleMobile : titleContainerStyleDesktop}>\n {locale.strings.call.configurationPageTitle}\n </Stack.Item>\n );\n\n const callDescription = locale.strings.call.configurationPageCallDetails && (\n <Stack.Item className={mobileView ? callDetailsStyleMobile : callDetailsStyleDesktop}>\n {locale.strings.call.configurationPageCallDetails}\n </Stack.Item>\n );\n\n let mobileWithPreview = mobileView;\n /* @conditional-compile-remove(rooms) */\n mobileWithPreview = mobileWithPreview && rolePermissions.cameraButton;\n\n /* @conditional-compile-remove(call-readiness) */\n const permissionsState: {\n camera: PermissionState;\n microphone: PermissionState;\n } = {\n camera: cameraPermissionGranted ? 'granted' : 'denied',\n microphone: microphonePermissionGranted ? 'granted' : 'denied'\n };\n /* @conditional-compile-remove(call-readiness) */\n const networkErrors = errorBarProps.activeErrorMessages.filter((message) => message.type === 'callNetworkQualityLow');\n\n /* @conditional-compile-remove(call-readiness) */\n const [isDrawerShowing, setIsDrawerShowing] = useState(true);\n /* @conditional-compile-remove(call-readiness) */\n const onLightDismissTriggered = (): void => {\n // do nothing here\n // only way to dismiss this drawer is clicking on allow access which will leads to device permission prompt\n };\n\n return (\n <Stack className={mobileView ? configurationContainerStyleMobile : configurationContainerStyleDesktop}>\n <Stack styles={bannerNotificationStyles}>\n <ConfigurationpageErrorBar\n /* @conditional-compile-remove(call-readiness) */\n // show trouble shooting error bar when encountering network error/ permission error\n showTroubleShootingErrorBar={\n !cameraPermissionGranted || !microphonePermissionGranted || networkErrors.length > 0\n }\n /* @conditional-compile-remove(call-readiness) */\n permissionsState={permissionsState}\n /* @conditional-compile-remove(call-readiness) */\n onNetworkingTroubleShootingClick={onNetworkingTroubleShootingClick}\n /* @conditional-compile-remove(call-readiness) */\n onPermissionsTroubleshootingClick={onPermissionsTroubleshootingClick}\n errorBarProps={errorBarProps}\n /* @conditional-compile-remove(call-readiness) */\n callReadinessOptedIn={callReadinessOptedIn}\n />\n </Stack>\n\n {\n /* @conditional-compile-remove(call-readiness) */\n mobileView && isDrawerShowing && callReadinessOptedIn && (\n <_DrawerSurface onLightDismiss={onLightDismissTriggered} styles={drawerContainerStyles(DRAWER_HIGH_Z_BAND)}>\n <DomainPermissions\n appName={'app'}\n onTroubleshootingClick={\n onPermissionsTroubleshootingClick\n ? () => {\n onPermissionsTroubleshootingClick(permissionsState);\n }\n : undefined\n }\n onAllowAccessClick={async () => {\n await adapter.askDevicePermission({ video: true, audio: true });\n adapter.queryCameras();\n adapter.queryMicrophones();\n adapter.querySpeakers();\n setIsDrawerShowing(false);\n }}\n />\n </_DrawerSurface>\n )\n }\n <Stack\n grow\n horizontal={!mobileWithPreview}\n horizontalAlign={mobileWithPreview ? 'stretch' : 'center'}\n verticalAlign=\"center\"\n tokens={mobileWithPreview ? configurationStackTokensMobile : configurationStackTokensDesktop}\n >\n {mobileWithPreview && (\n <Stack.Item>\n {title}\n {callDescription}\n </Stack.Item>\n )}\n {localPreviewTrampoline(\n mobileWithPreview,\n /* @conditional-compile-remove(rooms) */ !rolePermissions.cameraButton\n )}\n <Stack className={mobileView ? undefined : selectionContainerStyle}>\n {!mobileWithPreview && (\n <>\n <Stack.Item styles={callDetailsContainerStylesDesktop}>\n {title}\n {callDescription}\n </Stack.Item>\n <LocalDeviceSettings\n {...options}\n {...localDeviceSettingsHandlers}\n cameraPermissionGranted={cameraPermissionGranted}\n microphonePermissionGranted={microphonePermissionGranted}\n /* @conditional-compile-remove(call-readiness) */\n callReadinessOptedIn={callReadinessOptedIn}\n />\n </>\n )}\n <Stack\n styles={mobileWithPreview ? startCallButtonContainerStyleMobile : startCallButtonContainerStyleDesktop}\n >\n <StartCallButton\n className={mobileWithPreview ? startCallButtonStyleMobile : undefined}\n onClick={startCallHandler}\n disabled={disableStartCallButton}\n />\n </Stack>\n </Stack>\n </Stack>\n </Stack>\n );\n};\n\nconst localPreviewTrampoline = (mobileView: boolean, doNotShow?: boolean): JSX.Element | undefined => {\n /* @conditional-compile-remove(rooms) */\n if (doNotShow) {\n return undefined;\n }\n return <LocalPreview mobileView={mobileView} showDevicesButton={mobileView} />;\n};\n\"../../../../../react-components/src\"\"../../../../../calling-component-bindings/src\""]}
|
1
|
+
{"version":3,"file":"ConfigurationPage.js","sourceRoot":"","sources":["../../../../../../../../react-composites/src/composites/CallComposite/pages/ConfigurationPage.tsx"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport React from 'react';\n/* @conditional-compile-remove(call-readiness) */\nimport { useState } from 'react';\nimport { useAdaptedSelector } from '../hooks/useAdaptedSelector';\nimport { useHandlers } from '../hooks/useHandlers';\nimport { LocalDeviceSettings } from '../components/LocalDeviceSettings';\nimport { StartCallButton } from '../components/StartCallButton';\nimport { devicePermissionSelector } from '../selectors/devicePermissionSelector';\nimport { useSelector } from '../hooks/useSelector';\nimport { DevicesButton, ErrorBar } from '@internal/react-components';\n/* @conditional-compile-remove(call-readiness) */\nimport { DomainPermissions, _DrawerSurface, _DrawerSurfaceStyles } from '@internal/react-components';\n/* @conditional-compile-remove(rooms) */\nimport { _usePermissions, _Permissions } from '@internal/react-components';\nimport { getCallingSelector } from '@internal/calling-component-bindings';\nimport { Stack } from '@fluentui/react';\n/* @conditional-compile-remove(call-readiness) */\nimport { Modal } from '@fluentui/react';\nimport { LocalPreview } from '../components/LocalPreview';\nimport {\n callDetailsStyleDesktop,\n callDetailsStyleMobile,\n configurationStackTokensDesktop,\n configurationStackTokensMobile,\n configurationContainerStyleDesktop,\n configurationContainerStyleMobile,\n selectionContainerStyle,\n startCallButtonContainerStyleDesktop,\n startCallButtonContainerStyleMobile,\n startCallButtonStyleMobile,\n titleContainerStyleDesktop,\n titleContainerStyleMobile,\n callDetailsContainerStylesDesktop\n} from '../styles/CallConfiguration.styles';\nimport { useLocale } from '../../localization';\nimport { bannerNotificationStyles } from '../styles/CallPage.styles';\nimport { usePropsFor } from '../hooks/usePropsFor';\nimport { useAdapter } from '../adapter/CallAdapterProvider';\n/* @conditional-compile-remove(call-readiness) */\nimport { DevicePermissionRestrictions } from '../CallComposite';\nimport { ConfigurationpageErrorBar } from '../components/ConfigurationpageErrorBar';\n/* @conditional-compile-remove(call-readiness) */\nimport { drawerContainerStyles } from '../styles/CallComposite.styles';\n\n/* @conditional-compile-remove(call-readiness) */\nconst DRAWER_HIGH_Z_BAND = 99; // setting z index to 99 so that it sit above all components\n\n/**\n * @private\n */\nexport interface ConfigurationPageProps {\n mobileView: boolean;\n startCallHandler(): void;\n /* @conditional-compile-remove(call-readiness) */\n devicePermissions?: DevicePermissionRestrictions;\n /* @conditional-compile-remove(call-readiness) */\n onPermissionsTroubleshootingClick?: (permissionsState: {\n camera: PermissionState;\n microphone: PermissionState;\n }) => void;\n /* @conditional-compile-remove(call-readiness) */\n onNetworkingTroubleShootingClick?: () => void;\n /* @conditional-compile-remove(call-readiness) */\n callReadinessOptedIn?: boolean;\n}\n\n/**\n * @private\n */\nexport const ConfigurationPage = (props: ConfigurationPageProps): JSX.Element => {\n const {\n startCallHandler,\n mobileView,\n /* @conditional-compile-remove(call-readiness) */ devicePermissions,\n /* @conditional-compile-remove(call-readiness) */ onPermissionsTroubleshootingClick,\n /* @conditional-compile-remove(call-readiness) */ onNetworkingTroubleShootingClick,\n /* @conditional-compile-remove(call-readiness) */ callReadinessOptedIn = false\n } = props;\n\n const options = useAdaptedSelector(getCallingSelector(DevicesButton));\n const localDeviceSettingsHandlers = useHandlers(LocalDeviceSettings);\n const { video: cameraPermissionGranted, audio: microphonePermissionGranted } = useSelector(devicePermissionSelector);\n let errorBarProps = usePropsFor(ErrorBar);\n const adapter = useAdapter();\n const deviceState = adapter.getState().devices;\n\n let disableStartCallButton = !microphonePermissionGranted || deviceState.microphones?.length === 0;\n /* @conditional-compile-remove(rooms) */\n const rolePermissions = _usePermissions();\n\n /* @conditional-compile-remove(rooms) */\n // TODO: move this logic to the error bar selector once role is plumbed from the headless SDK\n if (!rolePermissions.cameraButton) {\n errorBarProps = {\n ...errorBarProps,\n activeErrorMessages: errorBarProps.activeErrorMessages.filter((e) => e.type !== 'callCameraAccessDenied')\n };\n }\n /* @conditional-compile-remove(rooms) */\n if (!rolePermissions.microphoneButton) {\n // If user's role permissions do not allow access to the microphone button then DO NOT disable the start call button\n // because microphone device permission is not needed for the user's role\n disableStartCallButton = false;\n }\n\n /* @conditional-compile-remove(call-readiness) */\n // Overrides role permissions if CallCompositeOptions devicePermissions are set\n if (devicePermissions) {\n if (\n ['doNotPrompt', 'optional'].includes(devicePermissions.camera) &&\n ['doNotPrompt', 'optional'].includes(devicePermissions.microphone)\n ) {\n disableStartCallButton = false;\n } else if (devicePermissions.camera === 'required') {\n disableStartCallButton = !cameraPermissionGranted || deviceState.cameras?.length === 0;\n }\n }\n\n const locale = useLocale();\n const title = (\n <Stack.Item className={mobileView ? titleContainerStyleMobile : titleContainerStyleDesktop}>\n {locale.strings.call.configurationPageTitle}\n </Stack.Item>\n );\n\n const callDescription = locale.strings.call.configurationPageCallDetails && (\n <Stack.Item className={mobileView ? callDetailsStyleMobile : callDetailsStyleDesktop}>\n {locale.strings.call.configurationPageCallDetails}\n </Stack.Item>\n );\n\n let mobileWithPreview = mobileView;\n /* @conditional-compile-remove(rooms) */\n mobileWithPreview = mobileWithPreview && rolePermissions.cameraButton;\n\n /* @conditional-compile-remove(call-readiness) */\n const permissionsState: {\n camera: PermissionState;\n microphone: PermissionState;\n } = {\n camera: cameraPermissionGranted ? 'granted' : 'denied',\n microphone: microphonePermissionGranted ? 'granted' : 'denied'\n };\n /* @conditional-compile-remove(call-readiness) */\n const networkErrors = errorBarProps.activeErrorMessages.filter((message) => message.type === 'callNetworkQualityLow');\n\n /* @conditional-compile-remove(call-readiness) */\n const [isDrawerShowing, setIsDrawerShowing] = useState(true);\n /* @conditional-compile-remove(call-readiness) */\n const onLightDismissTriggered = (): void => {\n // do nothing here\n // only way to dismiss this drawer is clicking on allow access which will leads to device permission prompt\n };\n\n /* @conditional-compile-remove(call-readiness) */\n const [isModalShowing, setIsModalShowing] = useState(false);\n\n return (\n <Stack className={mobileView ? configurationContainerStyleMobile : configurationContainerStyleDesktop}>\n <Stack styles={bannerNotificationStyles}>\n <ConfigurationpageErrorBar\n /* @conditional-compile-remove(call-readiness) */\n // show trouble shooting error bar when encountering network error/ permission error\n showTroubleShootingErrorBar={\n !cameraPermissionGranted || !microphonePermissionGranted || networkErrors.length > 0\n }\n /* @conditional-compile-remove(call-readiness) */\n permissionsState={permissionsState}\n /* @conditional-compile-remove(call-readiness) */\n onNetworkingTroubleShootingClick={onNetworkingTroubleShootingClick}\n /* @conditional-compile-remove(call-readiness) */\n onPermissionsTroubleshootingClick={onPermissionsTroubleshootingClick}\n errorBarProps={errorBarProps}\n /* @conditional-compile-remove(call-readiness) */\n callReadinessOptedIn={callReadinessOptedIn}\n />\n </Stack>\n\n {\n /* @conditional-compile-remove(call-readiness) */\n //show this when clicking on enable camera button or enable mic button on desktop for the first time\n //does not show if user has already grant mic or camera access\n !mobileView && !cameraPermissionGranted && !microphonePermissionGranted && callReadinessOptedIn && (\n <Modal\n isOpen={isModalShowing}\n isBlocking={false}\n onDismiss={() => {\n setIsModalShowing(false);\n }}\n overlay={{ styles: { root: { background: 'rgba(0,0,0,0.9)' } } }}\n >\n <DomainPermissions\n appName={'app'}\n onTroubleshootingClick={\n onPermissionsTroubleshootingClick\n ? () => {\n onPermissionsTroubleshootingClick(permissionsState);\n }\n : undefined\n }\n />\n </Modal>\n )\n }\n\n {\n /* @conditional-compile-remove(call-readiness) */\n mobileView && isDrawerShowing && callReadinessOptedIn && (\n <_DrawerSurface onLightDismiss={onLightDismissTriggered} styles={drawerContainerStyles(DRAWER_HIGH_Z_BAND)}>\n <DomainPermissions\n appName={'app'}\n onTroubleshootingClick={\n onPermissionsTroubleshootingClick\n ? () => {\n onPermissionsTroubleshootingClick(permissionsState);\n }\n : undefined\n }\n onAllowAccessClick={async () => {\n await adapter.askDevicePermission({ video: true, audio: true });\n adapter.queryCameras();\n adapter.queryMicrophones();\n adapter.querySpeakers();\n setIsDrawerShowing(false);\n }}\n />\n </_DrawerSurface>\n )\n }\n <Stack\n grow\n horizontal={!mobileWithPreview}\n horizontalAlign={mobileWithPreview ? 'stretch' : 'center'}\n verticalAlign=\"center\"\n tokens={mobileWithPreview ? configurationStackTokensMobile : configurationStackTokensDesktop}\n >\n {mobileWithPreview && (\n <Stack.Item>\n {title}\n {callDescription}\n </Stack.Item>\n )}\n {localPreviewTrampoline(\n mobileWithPreview,\n /* @conditional-compile-remove(rooms) */ !rolePermissions.cameraButton\n )}\n <Stack className={mobileView ? undefined : selectionContainerStyle}>\n {!mobileWithPreview && (\n <>\n <Stack.Item styles={callDetailsContainerStylesDesktop}>\n {title}\n {callDescription}\n </Stack.Item>\n <LocalDeviceSettings\n {...options}\n {...localDeviceSettingsHandlers}\n cameraPermissionGranted={cameraPermissionGranted}\n microphonePermissionGranted={microphonePermissionGranted}\n /* @conditional-compile-remove(call-readiness) */\n callReadinessOptedIn={callReadinessOptedIn}\n /* @conditional-compile-remove(call-readiness) */\n onClickEnableDevicePermission={() => {\n setIsModalShowing(true);\n }}\n />\n </>\n )}\n <Stack\n styles={mobileWithPreview ? startCallButtonContainerStyleMobile : startCallButtonContainerStyleDesktop}\n >\n <StartCallButton\n className={mobileWithPreview ? startCallButtonStyleMobile : undefined}\n onClick={startCallHandler}\n disabled={disableStartCallButton}\n />\n </Stack>\n </Stack>\n </Stack>\n </Stack>\n );\n};\n\nconst localPreviewTrampoline = (mobileView: boolean, doNotShow?: boolean): JSX.Element | undefined => {\n /* @conditional-compile-remove(rooms) */\n if (doNotShow) {\n return undefined;\n }\n return <LocalPreview mobileView={mobileView} showDevicesButton={mobileView} />;\n};\n\"../../../../../react-components/src\"\"../../../../../calling-component-bindings/src\""]}
|
package/dist/dist-esm/react-composites/src/composites/CallComposite/selectors/baseSelectors.d.ts
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
import { CallState as SDKCallStatus, DominantSpeakersInfo } from '@azure/communication-calling';
|
2
|
+
import { ParticipantRole } from '@azure/communication-calling';
|
2
3
|
import { CallState, DeviceManagerState, DiagnosticsCallFeatureState, LocalVideoStreamState, RemoteParticipantState } from "../../../../../calling-stateful-client/src";
|
3
4
|
import { CallAdapterState, CallCompositePage } from '../adapter/CallAdapter';
|
4
5
|
/**
|
@@ -29,6 +30,10 @@ export declare const getIsScreenShareOn: (state: CallAdapterState) => boolean;
|
|
29
30
|
* @private
|
30
31
|
*/
|
31
32
|
export declare const getIsPreviewCameraOn: (state: CallAdapterState) => boolean;
|
33
|
+
/**
|
34
|
+
* @private
|
35
|
+
*/
|
36
|
+
export declare const getRole: (state: CallAdapterState) => ParticipantRole | undefined;
|
32
37
|
/**
|
33
38
|
* @private
|
34
39
|
*/
|
package/dist/dist-esm/react-composites/src/composites/CallComposite/selectors/baseSelectors.js
CHANGED
@@ -29,6 +29,11 @@ export const getIsScreenShareOn = (state) => { var _a, _b; return (_b = (_a = st
|
|
29
29
|
* @private
|
30
30
|
*/
|
31
31
|
export const getIsPreviewCameraOn = (state) => _isPreviewOn(state.devices);
|
32
|
+
/* @conditional-compile-remove(rooms) */
|
33
|
+
/**
|
34
|
+
* @private
|
35
|
+
*/
|
36
|
+
export const getRole = (state) => { var _a; return (_a = state.call) === null || _a === void 0 ? void 0 : _a.role; };
|
32
37
|
/**
|
33
38
|
* @private
|
34
39
|
*/
|
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":"AAAA,uCAAuC;AACvC,kCAAkC;
|
1
|
+
{"version":3,"file":"baseSelectors.js","sourceRoot":"","sources":["../../../../../../../../react-composites/src/composites/CallComposite/selectors/baseSelectors.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAalC,OAAO,EAAa,YAAY,EAA+B,sDAA6C;AAE5G;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,KAAuB,EAAsB,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC;AAEjG;;GAEG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,KAAuB,EAAsB,EAAE,WAAC,OAAA,MAAA,KAAK,CAAC,IAAI,0CAAE,EAAE,CAAA,EAAA,CAAC;AAEzF;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,KAAuB,EAAyB,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC;AAEhG;;GAEG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,KAAuB,EAAiB,EAAE,eAAC,OAAA,MAAA,MAAA,KAAK,CAAC,IAAI,0CAAE,KAAK,mCAAI,MAAM,CAAA,EAAA,CAAC;AAErG;;GAEG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,KAAuB,EAAsB,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC;AAE/F;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,KAAuB,EAAW,EAAE,eAAC,OAAA,MAAA,MAAA,KAAK,CAAC,IAAI,0CAAE,iBAAiB,mCAAI,KAAK,CAAA,EAAA,CAAC;AAE/G;;GAEG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,KAAuB,EAAW,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AAEtG,wCAAwC;AACxC;;GAEG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,KAAuB,EAA+B,EAAE,WAAC,OAAA,MAAA,KAAK,CAAC,IAAI,0CAAE,IAAI,CAAA,EAAA,CAAC;AAElG;;GAEG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,KAAuB,EAAqB,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC;AAElF;;GAEG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,KAAuB,EAAW,EAAE,CAAC,KAAK,CAAC,+BAA+B,CAAC;AAErH;;GAEG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,KAAuB,EAAuC,EAAE,WACnG,OAAA,MAAA,KAAK,CAAC,IAAI,0CAAE,iBAAiB,CAAA,EAAA,CAAC;AAEhC;;GAEG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,KAAuB,EAAW,EAAE,WAC3E,OAAA,CAAC,CAAC,CAAA,MAAA,KAAK,CAAC,IAAI,0CAAE,aAAa,CAAC,qBAAqB,CAAA,CAAA,EAAA,CAAC;AAEpD;;GAEG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,KAAuB,EAAW,EAAE,WAAC,OAAA,CAAC,CAAC,CAAA,MAAA,KAAK,CAAC,IAAI,0CAAE,SAAS,CAAC,iBAAiB,CAAA,CAAA,EAAA,CAAC;AAEpH;;GAEG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,KAAuB,EAA2C,EAAE,WAC3G,OAAA,MAAA,KAAK,CAAC,IAAI,0CAAE,WAAW,CAAA,EAAA,CAAC;AAE1B;;GAEG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,KAAuB,EAAoC,EAAE,WAClG,OAAA,MAAA,KAAK,CAAC,IAAI,0CAAE,gBAAgB,CAAA,EAAA,CAAC;AAE/B;;GAEG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CACnC,KAAuB,EAKnB,EAAE,WAAC,OAAA,MAAA,KAAK,CAAC,IAAI,0CAAE,kBAAkB,CAAA,EAAA,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport { CallState as SDKCallStatus, DominantSpeakersInfo } from '@azure/communication-calling';\n/* @conditional-compile-remove(rooms) */\nimport { ParticipantRole } from '@azure/communication-calling';\nimport {\n CallState,\n DeviceManagerState,\n DiagnosticsCallFeatureState,\n LocalVideoStreamState,\n RemoteParticipantState\n} from '@internal/calling-stateful-client';\nimport { CallAdapterState, CallCompositePage } from '../adapter/CallAdapter';\nimport { _isInCall, _isPreviewOn, _dominantSpeakersWithFlatId } from '@internal/calling-component-bindings';\n\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/**\n * @private\n */\nexport const getIsPreviewCameraOn = (state: CallAdapterState): boolean => _isPreviewOn(state.devices);\n\n/* @conditional-compile-remove(rooms) */\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/**\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\"../../../../../calling-stateful-client/src\"\"../../../../../calling-component-bindings/src\""]}
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@azure/communication-react",
|
3
|
-
"version": "1.4.2-alpha-
|
3
|
+
"version": "1.4.2-alpha-202211030017.0",
|
4
4
|
"sideEffects": false,
|
5
5
|
"description": "React library for building modern communication user experiences utilizing Azure Communication Services",
|
6
6
|
"keywords": [
|
@@ -86,13 +86,13 @@
|
|
86
86
|
"@azure/core-auth": "1.3.2",
|
87
87
|
"@babel/cli": "~7.16.0",
|
88
88
|
"@babel/core": "~7.16.0",
|
89
|
-
"@internal/calling-component-bindings": "1.4.2-alpha-
|
90
|
-
"@internal/calling-stateful-client": "1.4.2-alpha-
|
91
|
-
"@internal/chat-component-bindings": "1.4.2-alpha-
|
92
|
-
"@internal/chat-stateful-client": "1.4.2-alpha-
|
93
|
-
"@internal/fake-backends": "1.4.2-alpha-
|
94
|
-
"@internal/react-components": "1.4.2-alpha-
|
95
|
-
"@internal/react-composites": "1.4.2-alpha-
|
89
|
+
"@internal/calling-component-bindings": "1.4.2-alpha-202211030017.0",
|
90
|
+
"@internal/calling-stateful-client": "1.4.2-alpha-202211030017.0",
|
91
|
+
"@internal/chat-component-bindings": "1.4.2-alpha-202211030017.0",
|
92
|
+
"@internal/chat-stateful-client": "1.4.2-alpha-202211030017.0",
|
93
|
+
"@internal/fake-backends": "1.4.2-alpha-202211030017.0",
|
94
|
+
"@internal/react-components": "1.4.2-alpha-202211030017.0",
|
95
|
+
"@internal/react-composites": "1.4.2-alpha-202211030017.0",
|
96
96
|
"@microsoft/api-documenter": "~7.12.11",
|
97
97
|
"@microsoft/api-extractor": "~7.18.0",
|
98
98
|
"@rollup/plugin-json": "~4.1.0",
|