extends Component {
+ /**
+ * Renders the {@code E2EELabel}.
+ *
+ * @protected
+ * @returns {React$Element}
+ */
+ _renderE2EELabel() {
+ return (
+
+ );
+ }
+
/**
* Renders the {@code LocalRecordingLabel}.
*
diff --git a/react/features/conference/components/web/Labels.js b/react/features/conference/components/web/Labels.js
index 7d09c0dd6..b2fb0b828 100644
--- a/react/features/conference/components/web/Labels.js
+++ b/react/features/conference/components/web/Labels.js
@@ -74,6 +74,9 @@ class Labels extends AbstractLabels {
return (
+ {
+ this._renderE2EELabel()
+ }
{
this._renderRecordingLabel(
JitsiRecordingConstants.mode.FILE)
@@ -96,6 +99,8 @@ class Labels extends AbstractLabels
{
);
}
+ _renderE2EELabel: () => React$Element<*>;
+
_renderLocalRecordingLabel: () => React$Element<*>;
_renderRecordingLabel: string => React$Element<*>;
diff --git a/react/features/e2ee/components/AbstractE2EELabel.js b/react/features/e2ee/components/AbstractE2EELabel.js
new file mode 100644
index 000000000..e3af399aa
--- /dev/null
+++ b/react/features/e2ee/components/AbstractE2EELabel.js
@@ -0,0 +1,30 @@
+// @flow
+
+
+export type Props = {
+
+ /**
+ * True if the label needs to be rendered, false otherwise.
+ */
+ _showLabel: boolean,
+
+ /**
+ * Invoked to obtain translated strings.
+ */
+ t: Function
+};
+
+/**
+ * Maps (parts of) the redux state to the associated props of this {@code Component}.
+ *
+ * @param {Object} state - The redux state.
+ * @private
+ * @returns {Props}
+ */
+export function _mapStateToProps(state: Object) {
+ const participants = state['features/base/participants'];
+
+ return {
+ _showLabel: participants.every(p => p.e2eeEnabled)
+ };
+}
diff --git a/react/features/e2ee/components/E2EELabel.js b/react/features/e2ee/components/E2EELabel.js
new file mode 100644
index 000000000..82d216b3d
--- /dev/null
+++ b/react/features/e2ee/components/E2EELabel.js
@@ -0,0 +1,47 @@
+// @flow
+
+import Tooltip from '@atlaskit/tooltip';
+import React, { Component } from 'react';
+
+import { translate } from '../../base/i18n';
+import { Icon, IconE2EE } from '../../base/icons';
+import { CircularLabel } from '../../base/label';
+import { connect } from '../../base/redux';
+
+import { _mapStateToProps, type Props } from './AbstractE2EELabel';
+
+
+/**
+ * React {@code Component} for displaying a label when everyone has E2EE enabled in a conferene.
+ *
+ * @extends Component
+ */
+class E2EELabel extends Component {
+
+ /**
+ * Implements React's {@link Component#render()}.
+ *
+ * @inheritdoc
+ * @returns {ReactElement}
+ */
+ render() {
+ if (!this.props._showLabel) {
+ return null;
+ }
+
+ // eslint-disable-next-line react/jsx-max-props-per-line
+ const icon = ;
+
+ return (
+
+
+
+ );
+ }
+}
+
+export default translate(connect(_mapStateToProps)(E2EELabel));
diff --git a/react/features/e2ee/components/index.native.js b/react/features/e2ee/components/index.native.js
new file mode 100644
index 000000000..f2a937042
--- /dev/null
+++ b/react/features/e2ee/components/index.native.js
@@ -0,0 +1,2 @@
+// TODO: implement later.
+export const E2EELabel = undefined;
diff --git a/react/features/e2ee/components/index.js b/react/features/e2ee/components/index.web.js
similarity index 67%
rename from react/features/e2ee/components/index.js
rename to react/features/e2ee/components/index.web.js
index c4fb0277d..97d06650a 100644
--- a/react/features/e2ee/components/index.js
+++ b/react/features/e2ee/components/index.web.js
@@ -1,2 +1,3 @@
export { default as E2EEButton } from './E2EEButton';
export { default as E2EEDialog } from './E2EEDialog';
+export { default as E2EELabel } from './E2EELabel';