From d3c84e25f5287f7793f9faa723bf88520d6a861a Mon Sep 17 00:00:00 2001
From: Michael Telatynski <7t3chguy@gmail.com>
Date: Wed, 16 Sep 2020 14:45:34 +0100
Subject: [PATCH 1/5] UI Feature Flag: Identity server
---
src/components/views/dialogs/InviteDialog.js | 85 ++++++++++++++-----
.../tabs/user/GeneralUserSettingsTab.js | 11 ++-
src/settings/Settings.ts | 4 +
src/settings/UIFeature.ts | 1 +
4 files changed, 76 insertions(+), 25 deletions(-)
diff --git a/src/components/views/dialogs/InviteDialog.js b/src/components/views/dialogs/InviteDialog.js
index 80d8f1fc2c..3347a1381f 100644
--- a/src/components/views/dialogs/InviteDialog.js
+++ b/src/components/views/dialogs/InviteDialog.js
@@ -38,6 +38,8 @@ import {Action} from "../../../dispatcher/actions";
import {DefaultTagID} from "../../../stores/room-list/models";
import RoomListStore from "../../../stores/room-list/RoomListStore";
import {CommunityPrototypeStore} from "../../../stores/CommunityPrototypeStore";
+import SettingsStore from "../../../settings/SettingsStore";
+import {UIFeature} from "../../../settings/UIFeature";
// we have a number of types defined from the Matrix spec which can't reasonably be altered here.
/* eslint-disable camelcase */
@@ -549,7 +551,7 @@ export default class InviteDialog extends React.PureComponent {
if (this.state.filterText.startsWith('@')) {
// Assume mxid
newMember = new DirectoryMember({user_id: this.state.filterText, display_name: null, avatar_url: null});
- } else {
+ } else if (SettingsStore.getValue(UIFeature.IdentityServer)) {
// Assume email
newMember = new ThreepidMember(this.state.filterText);
}
@@ -734,7 +736,7 @@ export default class InviteDialog extends React.PureComponent {
this.setState({tryingIdentityServer: true});
return;
}
- if (term.indexOf('@') > 0 && Email.looksValid(term)) {
+ if (term.indexOf('@') > 0 && Email.looksValid(term) && SettingsStore.getValue(UIFeature.IdentityServer)) {
// Start off by suggesting the plain email while we try and resolve it
// to a real account.
this.setState({
@@ -1037,7 +1039,9 @@ export default class InviteDialog extends React.PureComponent {
}
_renderIdentityServerWarning() {
- if (!this.state.tryingIdentityServer || this.state.canUseIdentityServer) {
+ if (!this.state.tryingIdentityServer || this.state.canUseIdentityServer ||
+ !SettingsStore.getValue(UIFeature.IdentityServer)
+ ) {
return null;
}
@@ -1086,22 +1090,41 @@ export default class InviteDialog extends React.PureComponent {
let buttonText;
let goButtonFn;
+ const identityServersEnabled = SettingsStore.getValue(UIFeature.IdentityServer);
+
const userId = MatrixClientPeg.get().getUserId();
if (this.props.kind === KIND_DM) {
title = _t("Direct Messages");
- helpText = _t(
+
+ if (identityServersEnabled) {
+ helpText = _t(
"Start a conversation with someone using their name, username (like ) or email address.",
{},
{userId: () => {
- return {userId};
- }},
- );
+ return (
+ {userId}
+ );
+ }},
+ );
+ } else {
+ helpText = _t(
+ "Start a conversation with someone using their name or username (like ).",
+ {},
+ {userId: () => {
+ return (
+ {userId}
+ );
+ }},
+ );
+ }
+
if (CommunityPrototypeStore.instance.getSelectedCommunityId()) {
const communityName = CommunityPrototypeStore.instance.getSelectedCommunityName();
- helpText = _t(
- "Start a conversation with someone using their name, username (like ) or email address. " +
- "This won't invite them to %(communityName)s. To invite someone to %(communityName)s, click " +
- "here.",
+
+ helpText =
+ { helpText } {_t(
+ "This won't invite them to %(communityName)s. To invite someone to %(communityName)s, " +
+ "click here",
{communityName}, {
userId: () => {
return (
@@ -1120,23 +1143,39 @@ export default class InviteDialog extends React.PureComponent {
>{sub}
);
},
- },
- );
+ })}
+ ;
}
buttonText = _t("Go");
goButtonFn = this._startDm;
} else { // KIND_INVITE
title = _t("Invite to this room");
- helpText = _t(
- "Invite someone using their name, username (like ), email address or share this room.",
- {},
- {
- userId: () =>
- {userId},
- a: (sub) =>
- {sub},
- },
- );
+
+ if (identityServersEnabled) {
+ helpText = _t(
+ "Invite someone using their name, username (like ), email address or " +
+ "share this room.",
+ {},
+ {
+ userId: () =>
+ {userId},
+ a: (sub) =>
+ {sub},
+ },
+ );
+ } else {
+ helpText = _t(
+ "Invite someone using their name, username (like ) or share this room.",
+ {},
+ {
+ userId: () =>
+ {userId},
+ a: (sub) =>
+ {sub},
+ },
+ );
+ }
+
buttonText = _t("Invite");
goButtonFn = this._inviteUsers;
}
diff --git a/src/components/views/settings/tabs/user/GeneralUserSettingsTab.js b/src/components/views/settings/tabs/user/GeneralUserSettingsTab.js
index 42e12077f2..40fd57d311 100644
--- a/src/components/views/settings/tabs/user/GeneralUserSettingsTab.js
+++ b/src/components/views/settings/tabs/user/GeneralUserSettingsTab.js
@@ -386,14 +386,21 @@ export default class GeneralUserSettingsTab extends React.Component {
width="18" height="18" alt={_t("Warning")} />
: null;
+ let discoverySection;
+ if (SettingsStore.getValue(UIFeature.IdentityServer)) {
+ discoverySection = <>
+
{_t("General")}
{this._renderProfileSection()}
{this._renderAccountSection()}
{this._renderLanguageSection()}
-
{discoWarning} {_t("Discovery")}
- {this._renderDiscoverySection()}
+ { discoverySection }
{this._renderIntegrationManagerSection() /* Has its own title */}
{_t("Deactivate account")}
{this._renderManagementSection()}
diff --git a/src/settings/Settings.ts b/src/settings/Settings.ts
index b35fa3db13..a18d0f2187 100644
--- a/src/settings/Settings.ts
+++ b/src/settings/Settings.ts
@@ -622,4 +622,8 @@ export const SETTINGS: {[setting: string]: ISetting} = {
supportedLevels: LEVELS_UI_FEATURE,
default: true,
},
+ [UIFeature.IdentityServer]: {
+ supportedLevels: LEVELS_UI_FEATURE,
+ default: true,
+ },
};
diff --git a/src/settings/UIFeature.ts b/src/settings/UIFeature.ts
index 99196e5d30..4de1d954d1 100644
--- a/src/settings/UIFeature.ts
+++ b/src/settings/UIFeature.ts
@@ -18,4 +18,5 @@ limitations under the License.
export enum UIFeature {
URLPreviews = "UIFeature.urlPreviews",
Widgets = "UIFeature.widgets",
+ IdentityServer = "UIFeature.identityServer",
}
From 1c44f15d2d4457127852fc82ae8c2c8dc28156db Mon Sep 17 00:00:00 2001
From: Michael Telatynski <7t3chguy@gmail.com>
Date: Wed, 16 Sep 2020 14:54:30 +0100
Subject: [PATCH 2/5] i18n
---
src/components/views/dialogs/InviteDialog.js | 6 +++---
src/i18n/strings/en_EN.json | 6 ++++--
2 files changed, 7 insertions(+), 5 deletions(-)
diff --git a/src/components/views/dialogs/InviteDialog.js b/src/components/views/dialogs/InviteDialog.js
index 3347a1381f..86411c43da 100644
--- a/src/components/views/dialogs/InviteDialog.js
+++ b/src/components/views/dialogs/InviteDialog.js
@@ -1098,9 +1098,9 @@ export default class InviteDialog extends React.PureComponent {
if (identityServersEnabled) {
helpText = _t(
- "Start a conversation with someone using their name, username (like
) or email address.",
- {},
- {userId: () => {
+ "Start a conversation with someone using their name, username (like
) or email address.",
+ {},
+ {userId: () => {
return (
{userId}
);
diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json
index 4414077005..7c5212444c 100644
--- a/src/i18n/strings/en_EN.json
+++ b/src/i18n/strings/en_EN.json
@@ -832,8 +832,8 @@
"Account management": "Account management",
"Deactivating your account is a permanent action - be careful!": "Deactivating your account is a permanent action - be careful!",
"Deactivate Account": "Deactivate Account",
- "General": "General",
"Discovery": "Discovery",
+ "General": "General",
"Deactivate account": "Deactivate account",
"Legal": "Legal",
"Credits": "Credits",
@@ -1732,9 +1732,11 @@
"Recently Direct Messaged": "Recently Direct Messaged",
"Direct Messages": "Direct Messages",
"Start a conversation with someone using their name, username (like
) or email address.": "Start a conversation with someone using their name, username (like
) or email address.",
- "Start a conversation with someone using their name, username (like
) or email address. This won't invite them to %(communityName)s. To invite someone to %(communityName)s, click
here.": "Start a conversation with someone using their name, username (like
) or email address. This won't invite them to %(communityName)s. To invite someone to %(communityName)s, click
here.",
+ "Start a conversation with someone using their name or username (like
).": "Start a conversation with someone using their name or username (like
).",
+ "This won't invite them to %(communityName)s. To invite someone to %(communityName)s, click
here": "This won't invite them to %(communityName)s. To invite someone to %(communityName)s, click
here",
"Go": "Go",
"Invite someone using their name, username (like
), email address or
share this room.": "Invite someone using their name, username (like
), email address or
share this room.",
+ "Invite someone using their name, username (like
) or
share this room.": "Invite someone using their name, username (like
) or
share this room.",
"a new master key signature": "a new master key signature",
"a new cross-signing key signature": "a new cross-signing key signature",
"a device cross-signing signature": "a device cross-signing signature",
From aa25bad68955bdab93f8e83f6cb06cf66dde6c7a Mon Sep 17 00:00:00 2001
From: Michael Telatynski <7t3chguy@gmail.com>
Date: Wed, 16 Sep 2020 14:57:46 +0100
Subject: [PATCH 3/5] tidy
---
src/components/views/dialogs/InviteDialog.js | 51 ++++++++++----------
1 file changed, 25 insertions(+), 26 deletions(-)
diff --git a/src/components/views/dialogs/InviteDialog.js b/src/components/views/dialogs/InviteDialog.js
index 86411c43da..f66de67a1d 100644
--- a/src/components/views/dialogs/InviteDialog.js
+++ b/src/components/views/dialogs/InviteDialog.js
@@ -1108,9 +1108,9 @@ export default class InviteDialog extends React.PureComponent {
);
} else {
helpText = _t(
- "Start a conversation with someone using their name or username (like
).",
- {},
- {userId: () => {
+ "Start a conversation with someone using their name or username (like
).",
+ {},
+ {userId: () => {
return (
{userId}
);
@@ -1120,30 +1120,29 @@ export default class InviteDialog extends React.PureComponent {
if (CommunityPrototypeStore.instance.getSelectedCommunityId()) {
const communityName = CommunityPrototypeStore.instance.getSelectedCommunityName();
-
- helpText =
- { helpText } {_t(
- "This won't invite them to %(communityName)s. To invite someone to %(communityName)s, " +
- "click here",
+ const inviteText = _t("This won't invite them to %(communityName)s. " +
+ "To invite someone to %(communityName)s, click here",
{communityName}, {
- userId: () => {
- return (
- {userId}
- );
- },
- a: (sub) => {
- return (
- {sub}
- );
- },
- })}
+ userId: () => {
+ return (
+ {userId}
+ );
+ },
+ a: (sub) => {
+ return (
+ {sub}
+ );
+ },
+ });
+ helpText =
+ { helpText } {inviteText}
;
}
buttonText = _t("Go");
From feb37878d85f723039d737f8ffdf451706c9b9f4 Mon Sep 17 00:00:00 2001
From: Michael Telatynski <7t3chguy@gmail.com>
Date: Wed, 16 Sep 2020 15:04:13 +0100
Subject: [PATCH 4/5] tidy
---
src/components/views/dialogs/InviteDialog.js | 35 ++++++++++----------
1 file changed, 18 insertions(+), 17 deletions(-)
diff --git a/src/components/views/dialogs/InviteDialog.js b/src/components/views/dialogs/InviteDialog.js
index f66de67a1d..73101056f3 100644
--- a/src/components/views/dialogs/InviteDialog.js
+++ b/src/components/views/dialogs/InviteDialog.js
@@ -1123,24 +1123,25 @@ export default class InviteDialog extends React.PureComponent {
const inviteText = _t("This won't invite them to %(communityName)s. " +
"To invite someone to %(communityName)s, click here",
{communityName}, {
- userId: () => {
- return (
- {userId}
- );
+ userId: () => {
+ return (
+ {userId}
+ );
+ },
+ a: (sub) => {
+ return (
+ {sub}
+ );
+ },
},
- a: (sub) => {
- return (
- {sub}
- );
- },
- });
+ );
helpText =
{ helpText } {inviteText}
;
From 25171347a094074e93a6ff0184fd4b40f7060ee0 Mon Sep 17 00:00:00 2001
From: Michael Telatynski <7t3chguy@gmail.com>
Date: Thu, 17 Sep 2020 13:57:47 +0100
Subject: [PATCH 5/5] i18n
---
src/i18n/strings/en_EN.json | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json
index d91fe475df..4c2a55d09e 100644
--- a/src/i18n/strings/en_EN.json
+++ b/src/i18n/strings/en_EN.json
@@ -833,8 +833,8 @@
"Deactivating your account is a permanent action - be careful!": "Deactivating your account is a permanent action - be careful!",
"Deactivate Account": "Deactivate Account",
"Deactivate account": "Deactivate account",
- "General": "General",
"Discovery": "Discovery",
+ "General": "General",
"Legal": "Legal",
"Credits": "Credits",
"For help with using %(brand)s, click here.": "For help with using %(brand)s, click here.",
@@ -1732,9 +1732,11 @@
"Recently Direct Messaged": "Recently Direct Messaged",
"Direct Messages": "Direct Messages",
"Start a conversation with someone using their name, username (like ) or email address.": "Start a conversation with someone using their name, username (like ) or email address.",
- "Start a conversation with someone using their name, username (like ) or email address. This won't invite them to %(communityName)s. To invite someone to %(communityName)s, click here.": "Start a conversation with someone using their name, username (like ) or email address. This won't invite them to %(communityName)s. To invite someone to %(communityName)s, click here.",
+ "Start a conversation with someone using their name or username (like ).": "Start a conversation with someone using their name or username (like ).",
+ "This won't invite them to %(communityName)s. To invite someone to %(communityName)s, click here": "This won't invite them to %(communityName)s. To invite someone to %(communityName)s, click here",
"Go": "Go",
"Invite someone using their name, username (like ), email address or share this room.": "Invite someone using their name, username (like ), email address or share this room.",
+ "Invite someone using their name, username (like ) or share this room.": "Invite someone using their name, username (like ) or share this room.",
"a new master key signature": "a new master key signature",
"a new cross-signing key signature": "a new cross-signing key signature",
"a device cross-signing signature": "a device cross-signing signature",