diff --git a/res/css/views/rooms/_E2EIconView.pcss b/res/css/views/rooms/_E2EIconView.pcss new file mode 100644 index 0000000000..19952db200 --- /dev/null +++ b/res/css/views/rooms/_E2EIconView.pcss @@ -0,0 +1,20 @@ +/* +Copyright 2024 New Vector Ltd. + +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. +*/ + +.mx_E2EIconView { + display: flex; + justify-content: center; + align-items: center; +} + +.mx_E2EIconView_warning { + color: var(--cpd-color-icon-critical-primary); +} + +.mx_E2EIconView_verified { + color: var(--cpd-color-icon-success-primary); +} diff --git a/src/components/views/rooms/E2EIcon.tsx b/src/components/views/rooms/E2EIcon.tsx index 29899e85ba..99ac07e0ec 100644 --- a/src/components/views/rooms/E2EIcon.tsx +++ b/src/components/views/rooms/E2EIcon.tsx @@ -22,7 +22,7 @@ export enum E2EState { Normal = "normal", } -const crossSigningUserTitles: { [key in E2EState]?: TranslationKey } = { +export const crossSigningUserTitles: { [key in E2EState]?: TranslationKey } = { [E2EState.Warning]: _td("encryption|cross_signing_user_warning"), [E2EState.Normal]: _td("encryption|cross_signing_user_normal"), [E2EState.Verified]: _td("encryption|cross_signing_user_verified"), diff --git a/src/components/views/rooms/MemberList/tiles/common/E2EIconView.tsx b/src/components/views/rooms/MemberList/tiles/common/E2EIconView.tsx new file mode 100644 index 0000000000..9d3212f5e7 --- /dev/null +++ b/src/components/views/rooms/MemberList/tiles/common/E2EIconView.tsx @@ -0,0 +1,47 @@ +/* +Copyright 2024 New Vector Ltd. + +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only +Please see LICENSE files in the repository root for full details. +*/ + +import React from "react"; +import { Tooltip } from "@vector-im/compound-web"; +import VerifiedIcon from "@vector-im/compound-design-tokens/assets/web/icons/verified"; +import ErrorIcon from "@vector-im/compound-design-tokens/assets/web/icons/error"; + +import { _t } from "../../../../../../languageHandler"; +import { E2EStatus } from "../../../../../../utils/ShieldUtils"; +import { E2EState, crossSigningUserTitles } from "../../../E2EIcon"; + +function getIconFromStatus(status: E2EState | E2EStatus): React.JSX.Element | undefined { + switch (status) { + case E2EState.Normal: + case E2EStatus.Normal: + return undefined; + case E2EState.Verified: + case E2EStatus.Verified: + return ; + case E2EState.Warning: + case E2EStatus.Warning: + return ; + } +} + +interface Props { + status: E2EState | E2EStatus; +} + +export const E2EIconView: React.FC = ({ status }) => { + const e2eTitle = crossSigningUserTitles[status]; + const label = e2eTitle ? _t(e2eTitle) : ""; + + const icon = getIconFromStatus(status); + if (!icon) return null; + + return ( + +
{icon}
+
+ ); +};