From cd02b9fe1f80ef3bea44fd00901942b3f9d4f3e9 Mon Sep 17 00:00:00 2001 From: David Baker Date: Thu, 19 Feb 2026 13:48:43 +0000 Subject: [PATCH 1/2] Don't show empty privacy section If all the options to display things things in it are disabled Also makes it more consistent with other areas. --- .../settings/discovery/DiscoverySettings.tsx | 4 ---- .../tabs/user/SecurityUserSettingsTab.tsx | 20 +++++++++++++++---- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/src/components/views/settings/discovery/DiscoverySettings.tsx b/src/components/views/settings/discovery/DiscoverySettings.tsx index 8bfd7d144d8..c6535188f39 100644 --- a/src/components/views/settings/discovery/DiscoverySettings.tsx +++ b/src/components/views/settings/discovery/DiscoverySettings.tsx @@ -14,8 +14,6 @@ import { Alert } from "@vector-im/compound-web"; import { getThreepidsWithBindStatus } from "../../../../boundThreepids"; import { useMatrixClientContext } from "../../../../contexts/MatrixClientContext"; import { type ThirdPartyIdentifier } from "../../../../AddThreepid"; -import SettingsStore from "../../../../settings/SettingsStore"; -import { UIFeature } from "../../../../settings/UIFeature"; import { _t } from "../../../../languageHandler"; import SetIdServer from "../SetIdServer"; import { SettingsSubsection } from "../shared/SettingsSubsection"; @@ -124,8 +122,6 @@ export const DiscoverySettings: React.FC = () => { })(); }, [client, getThreepidState]); - if (!SettingsStore.getValue(UIFeature.ThirdPartyID)) return null; - if (mustAgreeToTerms && requiredPolicyInfo.policiesAndServices) { const intro = ( diff --git a/src/components/views/settings/tabs/user/SecurityUserSettingsTab.tsx b/src/components/views/settings/tabs/user/SecurityUserSettingsTab.tsx index d301f9daab2..f94b2842f88 100644 --- a/src/components/views/settings/tabs/user/SecurityUserSettingsTab.tsx +++ b/src/components/views/settings/tabs/user/SecurityUserSettingsTab.tsx @@ -362,6 +362,21 @@ export default class SecurityUserSettingsTab extends React.Component; + } + + let privacySection; + if (discoverySection || posthogSection) { + privacySection = ( + + {discoverySection} + {posthogSection} + + ); + } + return ( {warning} @@ -370,10 +385,7 @@ export default class SecurityUserSettingsTab extends React.Component - - - {posthogSection} - + {privacySection} {advancedSection} ); From fa6a3b98af42f9eb56cfb6a9ec1d902ee95a522d Mon Sep 17 00:00:00 2001 From: David Baker Date: Thu, 19 Feb 2026 14:06:30 +0000 Subject: [PATCH 2/2] Move test --- .../settings/discovery/DiscoverySettings-test.tsx | 12 ------------ .../tabs/user/SecurityUserSettingsTab-test.tsx | 14 +++++++++++++- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/test/unit-tests/components/views/settings/discovery/DiscoverySettings-test.tsx b/test/unit-tests/components/views/settings/discovery/DiscoverySettings-test.tsx index 999029d7c75..2fd477082cc 100644 --- a/test/unit-tests/components/views/settings/discovery/DiscoverySettings-test.tsx +++ b/test/unit-tests/components/views/settings/discovery/DiscoverySettings-test.tsx @@ -15,8 +15,6 @@ import userEvent from "@testing-library/user-event"; import { DiscoverySettings } from "../../../../../../src/components/views/settings/discovery/DiscoverySettings"; import { stubClient } from "../../../../../test-utils"; import MatrixClientContext from "../../../../../../src/contexts/MatrixClientContext"; -import { UIFeature } from "../../../../../../src/settings/UIFeature"; -import SettingsStore from "../../../../../../src/settings/SettingsStore"; import defaultDispatcher from "../../../../../../src/dispatcher/dispatcher"; const mockGetAccessToken = jest.fn().mockResolvedValue("$$getAccessToken"); @@ -51,16 +49,6 @@ describe("DiscoverySettings", () => { const DiscoveryWrapper = (props = {}) => ; - it("is empty if 3pid features are disabled", async () => { - jest.spyOn(SettingsStore, "getValue").mockImplementation((key: any): any => { - if (key === UIFeature.ThirdPartyID) return false; - }); - - const { container } = render(, { wrapper: DiscoveryWrapper }); - - expect(container).toBeEmptyDOMElement(); - }); - it("displays alert if an identity server needs terms accepting", async () => { mocked(client).getIdentityServerUrl.mockReturnValue("https://example.com"); mocked(client).getTerms.mockResolvedValue(sampleTerms); diff --git a/test/unit-tests/components/views/settings/tabs/user/SecurityUserSettingsTab-test.tsx b/test/unit-tests/components/views/settings/tabs/user/SecurityUserSettingsTab-test.tsx index 454be8adaa2..73276fe15fc 100644 --- a/test/unit-tests/components/views/settings/tabs/user/SecurityUserSettingsTab-test.tsx +++ b/test/unit-tests/components/views/settings/tabs/user/SecurityUserSettingsTab-test.tsx @@ -5,7 +5,7 @@ Copyright 2022 The Matrix.org Foundation C.I.C. SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial Please see LICENSE files in the repository root for full details. */ -import { render } from "jest-matrix-react"; +import { render, screen } from "jest-matrix-react"; import React, { act } from "react"; import userEvent from "@testing-library/user-event"; @@ -21,6 +21,8 @@ import { } from "../../../../../../test-utils"; import { SDKContext, SdkContextClass } from "../../../../../../../src/contexts/SDKContext"; import defaultDispatcher from "../../../../../../../src/dispatcher/dispatcher"; +import { UIFeature } from "../../../../../../../src/settings/UIFeature"; +import SettingsStore from "../../../../../../../src/settings/SettingsStore"; describe("", () => { const defaultProps = { @@ -89,4 +91,14 @@ describe("", () => { }); expect(getByText("You have no ignored users.")).toBeVisible(); }); + + it("does not render privacy header if 3pid features are disabled", async () => { + jest.spyOn(SettingsStore, "getValue").mockImplementation((key: any): any => { + if (key === UIFeature.ThirdPartyID) return false; + }); + + render(getComponent()); + + expect(screen.queryByRole("heading", { name: "Privacy" })).toBeNull(); + }); });