Skip to content

Commit ba531b9

Browse files
authored
Remodel "Can't confirm" dialog to match designs (#35375)
1 parent 1ddb404 commit ba531b9

8 files changed

Lines changed: 113 additions & 99 deletions

File tree

‎apps/web/playwright/e2e/login/login-consent.spec.ts‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -323,7 +323,7 @@ test.describe("Login", () => {
323323
await page.getByRole("button", { name: "Can't confirm?" }).click();
324324

325325
// Then click outside the dialog and restart
326-
await page.getByRole("link", { name: "Powered by Matrix" }).click({ force: true });
326+
await page.locator("body").click({ force: true, position: { x: 1, y: 1 } });
327327
await page.getByRole("button", { name: "Can't confirm?" }).click();
328328

329329
// Finally we actually continue

‎apps/web/playwright/e2e/settings/encryption-user-tab/encryption-tab.spec.ts‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -172,7 +172,7 @@ test.describe("Encryption tab", () => {
172172
await page.getByRole("button", { name: "Can't confirm?" }).click();
173173

174174
// Then click outside the dialog and restart
175-
await page.locator("li").filter({ hasText: "Encryption" }).click({ force: true });
175+
await page.getByRole("heading", { name: "Settings" }).click({ force: true, position: { x: 0, y: 0 } });
176176
await page.getByRole("button", { name: "Can't confirm?" }).click();
177177

178178
// Finally we actually continue
749 Bytes
Loading

‎apps/web/src/components/views/dialogs/ResetIdentityDialog.tsx‎

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import React, { type JSX } from "react";
1010
import { MatrixClientPeg } from "../../../MatrixClientPeg";
1111
import MatrixClientContext from "../../../contexts/MatrixClientContext";
1212
import { ResetIdentityBody, type ResetIdentityBodyVariant } from "../settings/encryption/ResetIdentityBody";
13+
import BaseDialog from "./BaseDialog";
1314

1415
interface ResetIdentityDialogProps {
1516
/**
@@ -71,7 +72,9 @@ export function ResetIdentityDialog({
7172

7273
return (
7374
<MatrixClientContext.Provider value={matrixClient}>
74-
<ResetIdentityBody onReset={onResetWrapper} onCancelClick={onCancelOrSignOut} variant={variant} />
75+
<BaseDialog fixedWidth={true} hasCancel={false}>
76+
<ResetIdentityBody onReset={onResetWrapper} onCancelClick={onCancelOrSignOut} variant={variant} />
77+
</BaseDialog>
7578
</MatrixClientContext.Provider>
7679
);
7780
}

‎apps/web/src/components/views/settings/encryption/ResetIdentityBody.tsx‎

Lines changed: 52 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,11 @@
55
* Please see LICENSE files in the repository root for full details.
66
*/
77

8-
import { Button, InlineSpinner, VisualList, VisualListItem } from "@vector-im/compound-web";
9-
import CheckIcon from "@vector-im/compound-design-tokens/assets/web/icons/check";
10-
import InfoIcon from "@vector-im/compound-design-tokens/assets/web/icons/info";
11-
import ErrorIcon from "@vector-im/compound-design-tokens/assets/web/icons/error-solid";
8+
import { Alert, Button, InlineSpinner, VisualList, VisualListItem } from "@vector-im/compound-web";
9+
import CheckCircle from "@vector-im/compound-design-tokens/assets/web/icons/check-circle";
10+
import Group from "@vector-im/compound-design-tokens/assets/web/icons/group";
11+
import UserProfileSolid from "@vector-im/compound-design-tokens/assets/web/icons/user-profile-solid";
12+
import VisibilityOff from "@vector-im/compound-design-tokens/assets/web/icons/visibility-off";
1213
import React, { type JSX, useState } from "react";
1314

1415
import { _t } from "../../../../languageHandler";
@@ -69,24 +70,29 @@ export function ResetIdentityBody({ onCancelClick, onReset, variant }: ResetIden
6970
const [inProgress, setInProgress] = useState(false);
7071

7172
return (
72-
<EncryptionCard Icon={ErrorIcon} destructive={true} title={titleForVariant(variant)}>
73+
<EncryptionCard
74+
Icon={UserProfileSolid}
75+
title={titleForVariant(variant)}
76+
description={descriptionForVariant(variant)}
77+
>
7378
<EncryptionCardEmphasisedContent>
7479
<VisualList>
75-
<VisualListItem Icon={CheckIcon} success={true}>
80+
<VisualListItem Icon={CheckCircle} success={true}>
7681
{_t("settings|encryption|advanced|breadcrumb_first_description")}
7782
</VisualListItem>
78-
<VisualListItem Icon={InfoIcon}>
83+
<VisualListItem Icon={VisibilityOff}>
7984
{_t("settings|encryption|advanced|breadcrumb_second_description")}
8085
</VisualListItem>
81-
<VisualListItem Icon={InfoIcon}>
86+
<VisualListItem Icon={Group}>
8287
{_t("settings|encryption|advanced|breadcrumb_third_description")}
8388
</VisualListItem>
8489
</VisualList>
8590
{variant === "compromised" && <span>{_t("settings|encryption|advanced|breadcrumb_warning")}</span>}
8691
</EncryptionCardEmphasisedContent>
92+
{alertForVariant(variant)}
8793
<EncryptionCardButtons>
8894
<Button
89-
destructive={true}
95+
destructive={destructiveForVariant(variant)}
9096
disabled={inProgress}
9197
onClick={async () => {
9298
setInProgress(true);
@@ -135,6 +141,31 @@ function titleForVariant(variant: ResetIdentityBodyVariant): string {
135141
}
136142
}
137143

144+
function descriptionForVariant(variant: ResetIdentityBodyVariant): string | undefined {
145+
switch (variant) {
146+
case "no_verification_method":
147+
return _t("settings|encryption|advanced|breadcrumb_description_no_verification_method");
148+
case "confirm":
149+
return _t("settings|encryption|advanced|breadcrumb_description");
150+
case "compromised":
151+
case "sync_failed":
152+
case "forgot":
153+
return undefined;
154+
}
155+
}
156+
157+
function alertForVariant(variant: string): JSX.Element | undefined {
158+
switch (variant) {
159+
case "confirm":
160+
return <Alert type="critical" title={_t("settings|encryption|advanced|breadcrumb_alert_cant_confirm")} />;
161+
case "no_verification_method":
162+
case "compromised":
163+
case "sync_failed":
164+
case "forgot":
165+
return undefined;
166+
}
167+
}
168+
138169
function cancelTextForVariant(variant: ResetIdentityBodyVariant): string {
139170
switch (variant) {
140171
case "confirm":
@@ -146,3 +177,15 @@ function cancelTextForVariant(variant: ResetIdentityBodyVariant): string {
146177
return _t("action|sign_out_before_verify");
147178
}
148179
}
180+
181+
function destructiveForVariant(variant: ResetIdentityBodyVariant): boolean {
182+
switch (variant) {
183+
case "no_verification_method":
184+
return false;
185+
case "confirm":
186+
case "compromised":
187+
case "sync_failed":
188+
case "forgot":
189+
return true;
190+
}
191+
}

0 commit comments

Comments
 (0)