From bd54a401bc823c62dd8e9b74199161ff55a636a9 Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Fri, 22 Feb 2019 10:47:18 -0700 Subject: [PATCH 1/4] Sort settings tabs into a logical structure Fixes https://github.com/vector-im/riot-web/issues/8864 --- res/css/_components.scss | 18 ++--- .../{ => room}/_GeneralRoomSettingsTab.scss | 0 .../{ => room}/_RolesRoomSettingsTab.scss | 0 .../{ => room}/_SecurityRoomSettingsTab.scss | 0 .../{ => user}/_GeneralUserSettingsTab.scss | 0 .../_HelpUserSettingsTab.scss} | 4 +- .../_NotificationUserSettingsTab.scss} | 2 +- .../_PreferencesUserSettingsTab.scss} | 4 +- .../_SecurityUserSettingsTab.scss} | 18 ++--- .../_VoiceUserSettingsTab.scss} | 6 +- .../views/dialogs/RoomSettingsDialog.js | 8 +- .../views/dialogs/UserSettingsDialog.js | 30 +++---- .../{ => room}/AdvancedRoomSettingsTab.js | 10 +-- .../tabs/{ => room}/GeneralRoomSettingsTab.js | 14 ++-- .../tabs/{ => room}/RolesRoomSettingsTab.js | 10 +-- .../{ => room}/SecurityRoomSettingsTab.js | 14 ++-- .../FlairUserSettingsTab.js} | 8 +- .../tabs/{ => user}/GeneralUserSettingsTab.js | 30 +++---- .../HelpUserSettingsTab.js} | 32 ++++---- .../LabsUserSettingsTab.js} | 10 +-- .../NotificationUserSettingsTab.js} | 8 +- .../PreferencesUserSettingsTab.js} | 24 +++--- .../SecurityUserSettingsTab.js} | 30 +++---- .../VoiceUserSettingsTab.js} | 22 +++--- src/i18n/strings/en_EN.json | 78 +++++++++---------- 25 files changed, 190 insertions(+), 190 deletions(-) rename res/css/views/settings/tabs/{ => room}/_GeneralRoomSettingsTab.scss (100%) rename res/css/views/settings/tabs/{ => room}/_RolesRoomSettingsTab.scss (100%) rename res/css/views/settings/tabs/{ => room}/_SecurityRoomSettingsTab.scss (100%) rename res/css/views/settings/tabs/{ => user}/_GeneralUserSettingsTab.scss (100%) rename res/css/views/settings/tabs/{_HelpSettingsTab.scss => user/_HelpUserSettingsTab.scss} (87%) rename res/css/views/settings/tabs/{_NotificationSettingsTab.scss => user/_NotificationUserSettingsTab.scss} (91%) rename res/css/views/settings/tabs/{_PreferencesSettingsTab.scss => user/_PreferencesUserSettingsTab.scss} (89%) rename res/css/views/settings/tabs/{_SecuritySettingsTab.scss => user/_SecurityUserSettingsTab.scss} (67%) rename res/css/views/settings/tabs/{_VoiceSettingsTab.scss => user/_VoiceUserSettingsTab.scss} (84%) rename src/components/views/settings/tabs/{ => room}/AdvancedRoomSettingsTab.js (93%) rename src/components/views/settings/tabs/{ => room}/GeneralRoomSettingsTab.js (92%) rename src/components/views/settings/tabs/{ => room}/RolesRoomSettingsTab.js (98%) rename src/components/views/settings/tabs/{ => room}/SecurityRoomSettingsTab.js (96%) rename src/components/views/settings/tabs/{FlairSettingsTab.js => user/FlairUserSettingsTab.js} (84%) rename src/components/views/settings/tabs/{ => user}/GeneralUserSettingsTab.js (88%) rename src/components/views/settings/tabs/{HelpSettingsTab.js => user/HelpUserSettingsTab.js} (90%) rename src/components/views/settings/tabs/{LabsSettingsTab.js => user/LabsUserSettingsTab.js} (85%) rename src/components/views/settings/tabs/{NotificationSettingsTab.js => user/NotificationUserSettingsTab.js} (80%) rename src/components/views/settings/tabs/{PreferencesSettingsTab.js => user/PreferencesUserSettingsTab.js} (81%) rename src/components/views/settings/tabs/{SecuritySettingsTab.js => user/SecurityUserSettingsTab.js} (89%) rename src/components/views/settings/tabs/{VoiceSettingsTab.js => user/VoiceUserSettingsTab.js} (90%) diff --git a/res/css/_components.scss b/res/css/_components.scss index 6aed78a627..f3b07255ae 100644 --- a/res/css/_components.scss +++ b/res/css/_components.scss @@ -150,16 +150,16 @@ @import "./views/settings/_Notifications.scss"; @import "./views/settings/_PhoneNumbers.scss"; @import "./views/settings/_ProfileSettings.scss"; -@import "./views/settings/tabs/_GeneralRoomSettingsTab.scss"; -@import "./views/settings/tabs/_GeneralUserSettingsTab.scss"; -@import "./views/settings/tabs/_HelpSettingsTab.scss"; -@import "./views/settings/tabs/_NotificationSettingsTab.scss"; -@import "./views/settings/tabs/_PreferencesSettingsTab.scss"; -@import "./views/settings/tabs/_RolesRoomSettingsTab.scss"; -@import "./views/settings/tabs/_SecurityRoomSettingsTab.scss"; -@import "./views/settings/tabs/_SecuritySettingsTab.scss"; @import "./views/settings/tabs/_SettingsTab.scss"; -@import "./views/settings/tabs/_VoiceSettingsTab.scss"; +@import "./views/settings/tabs/room/_GeneralRoomSettingsTab.scss"; +@import "./views/settings/tabs/room/_RolesRoomSettingsTab.scss"; +@import "./views/settings/tabs/room/_SecurityRoomSettingsTab.scss"; +@import "./views/settings/tabs/user/_GeneralUserSettingsTab.scss"; +@import "./views/settings/tabs/user/_HelpUserSettingsTab.scss"; +@import "./views/settings/tabs/user/_NotificationUserSettingsTab.scss"; +@import "./views/settings/tabs/user/_PreferencesUserSettingsTab.scss"; +@import "./views/settings/tabs/user/_SecurityUserSettingsTab.scss"; +@import "./views/settings/tabs/user/_VoiceUserSettingsTab.scss"; @import "./views/verification/_VerificationShowSas.scss"; @import "./views/voip/_CallView.scss"; @import "./views/voip/_IncomingCallbox.scss"; diff --git a/res/css/views/settings/tabs/_GeneralRoomSettingsTab.scss b/res/css/views/settings/tabs/room/_GeneralRoomSettingsTab.scss similarity index 100% rename from res/css/views/settings/tabs/_GeneralRoomSettingsTab.scss rename to res/css/views/settings/tabs/room/_GeneralRoomSettingsTab.scss diff --git a/res/css/views/settings/tabs/_RolesRoomSettingsTab.scss b/res/css/views/settings/tabs/room/_RolesRoomSettingsTab.scss similarity index 100% rename from res/css/views/settings/tabs/_RolesRoomSettingsTab.scss rename to res/css/views/settings/tabs/room/_RolesRoomSettingsTab.scss diff --git a/res/css/views/settings/tabs/_SecurityRoomSettingsTab.scss b/res/css/views/settings/tabs/room/_SecurityRoomSettingsTab.scss similarity index 100% rename from res/css/views/settings/tabs/_SecurityRoomSettingsTab.scss rename to res/css/views/settings/tabs/room/_SecurityRoomSettingsTab.scss diff --git a/res/css/views/settings/tabs/_GeneralUserSettingsTab.scss b/res/css/views/settings/tabs/user/_GeneralUserSettingsTab.scss similarity index 100% rename from res/css/views/settings/tabs/_GeneralUserSettingsTab.scss rename to res/css/views/settings/tabs/user/_GeneralUserSettingsTab.scss diff --git a/res/css/views/settings/tabs/_HelpSettingsTab.scss b/res/css/views/settings/tabs/user/_HelpUserSettingsTab.scss similarity index 87% rename from res/css/views/settings/tabs/_HelpSettingsTab.scss rename to res/css/views/settings/tabs/user/_HelpUserSettingsTab.scss index 249f06ca95..fa0d0edeb7 100644 --- a/res/css/views/settings/tabs/_HelpSettingsTab.scss +++ b/res/css/views/settings/tabs/user/_HelpUserSettingsTab.scss @@ -14,11 +14,11 @@ See the License for the specific language governing permissions and limitations under the License. */ -.mx_HelpSettingsTab_debugButton { +.mx_HelpUserSettingsTab_debugButton { margin-bottom: 5px; margin-top: 5px; } -.mx_HelpSettingsTab span.mx_AccessibleButton { +.mx_HelpUserSettingsTab span.mx_AccessibleButton { word-break: break-word; } \ No newline at end of file diff --git a/res/css/views/settings/tabs/_NotificationSettingsTab.scss b/res/css/views/settings/tabs/user/_NotificationUserSettingsTab.scss similarity index 91% rename from res/css/views/settings/tabs/_NotificationSettingsTab.scss rename to res/css/views/settings/tabs/user/_NotificationUserSettingsTab.scss index 8fdb688496..3cebd2958e 100644 --- a/res/css/views/settings/tabs/_NotificationSettingsTab.scss +++ b/res/css/views/settings/tabs/user/_NotificationUserSettingsTab.scss @@ -14,6 +14,6 @@ See the License for the specific language governing permissions and limitations under the License. */ -.mx_NotificationSettingsTab .mx_SettingsTab_heading { +.mx_NotificationUserSettingsTab .mx_SettingsTab_heading { margin-bottom: 10px; // Give some spacing between the title and the first elements } \ No newline at end of file diff --git a/res/css/views/settings/tabs/_PreferencesSettingsTab.scss b/res/css/views/settings/tabs/user/_PreferencesUserSettingsTab.scss similarity index 89% rename from res/css/views/settings/tabs/_PreferencesSettingsTab.scss rename to res/css/views/settings/tabs/user/_PreferencesUserSettingsTab.scss index b59b69e63b..f447221b7a 100644 --- a/res/css/views/settings/tabs/_PreferencesSettingsTab.scss +++ b/res/css/views/settings/tabs/user/_PreferencesUserSettingsTab.scss @@ -14,11 +14,11 @@ See the License for the specific language governing permissions and limitations under the License. */ -.mx_PreferencesSettingsTab .mx_Field { +.mx_PreferencesUserSettingsTab .mx_Field { margin-right: 100px; // Align with the rest of the controls } -.mx_PreferencesSettingsTab .mx_Field input { +.mx_PreferencesUserSettingsTab .mx_Field input { display: block; // Subtract 10px padding on left and right diff --git a/res/css/views/settings/tabs/_SecuritySettingsTab.scss b/res/css/views/settings/tabs/user/_SecurityUserSettingsTab.scss similarity index 67% rename from res/css/views/settings/tabs/_SecuritySettingsTab.scss rename to res/css/views/settings/tabs/user/_SecurityUserSettingsTab.scss index ba357f16c3..4835640904 100644 --- a/res/css/views/settings/tabs/_SecuritySettingsTab.scss +++ b/res/css/views/settings/tabs/user/_SecurityUserSettingsTab.scss @@ -14,40 +14,40 @@ See the License for the specific language governing permissions and limitations under the License. */ -.mx_SecuritySettingsTab .mx_DevicesPanel { +.mx_SecurityUserSettingsTab .mx_DevicesPanel { // Normally the panel is 880px, however this can easily overflow the container. // TODO: Fix the table to not be squishy width: auto; max-width: 880px; } -.mx_SecuritySettingsTab_deviceInfo { +.mx_SecurityUserSettingsTab_deviceInfo { display: table; padding-left: 0; } -.mx_SecuritySettingsTab_deviceInfo > li { +.mx_SecurityUserSettingsTab_deviceInfo > li { display: table-row; } -.mx_SecuritySettingsTab_deviceInfo > li > label, -.mx_SecuritySettingsTab_deviceInfo > li > span { +.mx_SecurityUserSettingsTab_deviceInfo > li > label, +.mx_SecurityUserSettingsTab_deviceInfo > li > span { display: table-cell; padding-right: 1em; } -.mx_SecuritySettingsTab_importExportButtons .mx_AccessibleButton { +.mx_SecurityUserSettingsTab_importExportButtons .mx_AccessibleButton { margin-right: 10px; } -.mx_SecuritySettingsTab_importExportButtons { +.mx_SecurityUserSettingsTab_importExportButtons { margin-bottom: 15px; } -.mx_SecuritySettingsTab_ignoredUser { +.mx_SecurityUserSettingsTab_ignoredUser { margin-bottom: 5px; } -.mx_SecuritySettingsTab_ignoredUser .mx_AccessibleButton { +.mx_SecurityUserSettingsTab_ignoredUser .mx_AccessibleButton { margin-right: 10px; } \ No newline at end of file diff --git a/res/css/views/settings/tabs/_VoiceSettingsTab.scss b/res/css/views/settings/tabs/user/_VoiceUserSettingsTab.scss similarity index 84% rename from res/css/views/settings/tabs/_VoiceSettingsTab.scss rename to res/css/views/settings/tabs/user/_VoiceUserSettingsTab.scss index 5ddd57b0e2..f5dba9831e 100644 --- a/res/css/views/settings/tabs/_VoiceSettingsTab.scss +++ b/res/css/views/settings/tabs/user/_VoiceUserSettingsTab.scss @@ -14,15 +14,15 @@ See the License for the specific language governing permissions and limitations under the License. */ -.mx_VoiceSettingsTab .mx_Field select { +.mx_VoiceUserSettingsTab .mx_Field select { width: 100%; max-width: 100%; } -.mx_VoiceSettingsTab .mx_Field { +.mx_VoiceUserSettingsTab .mx_Field { margin-right: 100px; // align with the rest of the fields } -.mx_VoiceSettingsTab_missingMediaPermissions { +.mx_VoiceUserSettingsTab_missingMediaPermissions { margin-bottom: 15px; } diff --git a/src/components/views/dialogs/RoomSettingsDialog.js b/src/components/views/dialogs/RoomSettingsDialog.js index c73edb179c..1f319176c2 100644 --- a/src/components/views/dialogs/RoomSettingsDialog.js +++ b/src/components/views/dialogs/RoomSettingsDialog.js @@ -18,10 +18,10 @@ import React from 'react'; import PropTypes from 'prop-types'; import {Tab, TabbedView} from "../../structures/TabbedView"; import {_t, _td} from "../../../languageHandler"; -import AdvancedRoomSettingsTab from "../settings/tabs/AdvancedRoomSettingsTab"; -import RolesRoomSettingsTab from "../settings/tabs/RolesRoomSettingsTab"; -import GeneralRoomSettingsTab from "../settings/tabs/GeneralRoomSettingsTab"; -import SecurityRoomSettingsTab from "../settings/tabs/SecurityRoomSettingsTab"; +import AdvancedRoomSettingsTab from "../settings/tabs/room/AdvancedRoomSettingsTab"; +import RolesRoomSettingsTab from "../settings/tabs/room/RolesRoomSettingsTab"; +import GeneralRoomSettingsTab from "../settings/tabs/room/GeneralRoomSettingsTab"; +import SecurityRoomSettingsTab from "../settings/tabs/room/SecurityRoomSettingsTab"; import sdk from "../../../index"; export default class RoomSettingsDialog extends React.Component { diff --git a/src/components/views/dialogs/UserSettingsDialog.js b/src/components/views/dialogs/UserSettingsDialog.js index dc72acda12..1c4509eee5 100644 --- a/src/components/views/dialogs/UserSettingsDialog.js +++ b/src/components/views/dialogs/UserSettingsDialog.js @@ -18,15 +18,15 @@ import React from 'react'; import PropTypes from 'prop-types'; import {Tab, TabbedView} from "../../structures/TabbedView"; import {_t, _td} from "../../../languageHandler"; -import GeneralUserSettingsTab from "../settings/tabs/GeneralUserSettingsTab"; +import GeneralUserSettingsTab from "../settings/tabs/user/GeneralUserSettingsTab"; import SettingsStore from "../../../settings/SettingsStore"; -import LabsSettingsTab from "../settings/tabs/LabsSettingsTab"; -import SecuritySettingsTab from "../settings/tabs/SecuritySettingsTab"; -import NotificationSettingsTab from "../settings/tabs/NotificationSettingsTab"; -import PreferencesSettingsTab from "../settings/tabs/PreferencesSettingsTab"; -import VoiceSettingsTab from "../settings/tabs/VoiceSettingsTab"; -import HelpSettingsTab from "../settings/tabs/HelpSettingsTab"; -import FlairSettingsTab from "../settings/tabs/FlairSettingsTab"; +import LabsUserSettingsTab from "../settings/tabs/user/LabsUserSettingsTab"; +import SecurityUserSettingsTab from "../settings/tabs/user/SecurityUserSettingsTab"; +import NotificationUserSettingsTab from "../settings/tabs/user/NotificationUserSettingsTab"; +import PreferencesUserSettingsTab from "../settings/tabs/user/PreferencesUserSettingsTab"; +import VoiceUserSettingsTab from "../settings/tabs/user/VoiceUserSettingsTab"; +import HelpUserSettingsTab from "../settings/tabs/user/HelpUserSettingsTab"; +import FlairUserSettingsTab from "../settings/tabs/user/FlairUserSettingsTab"; import sdk from "../../../index"; export default class UserSettingsDialog extends React.Component { @@ -45,39 +45,39 @@ export default class UserSettingsDialog extends React.Component { tabs.push(new Tab( _td("Flair"), "mx_UserSettingsDialog_flairIcon", - , + , )); tabs.push(new Tab( _td("Notifications"), "mx_UserSettingsDialog_bellIcon", - , + , )); tabs.push(new Tab( _td("Preferences"), "mx_UserSettingsDialog_preferencesIcon", - , + , )); tabs.push(new Tab( _td("Voice & Video"), "mx_UserSettingsDialog_voiceIcon", - , + , )); tabs.push(new Tab( _td("Security & Privacy"), "mx_UserSettingsDialog_securityIcon", - , + , )); if (SettingsStore.getLabsFeatures().length > 0) { tabs.push(new Tab( _td("Labs"), "mx_UserSettingsDialog_labsIcon", - , + , )); } tabs.push(new Tab( _td("Help & About"), "mx_UserSettingsDialog_helpIcon", - , + , )); return tabs; diff --git a/src/components/views/settings/tabs/AdvancedRoomSettingsTab.js b/src/components/views/settings/tabs/room/AdvancedRoomSettingsTab.js similarity index 93% rename from src/components/views/settings/tabs/AdvancedRoomSettingsTab.js rename to src/components/views/settings/tabs/room/AdvancedRoomSettingsTab.js index 9b99622516..3c6a7addc3 100644 --- a/src/components/views/settings/tabs/AdvancedRoomSettingsTab.js +++ b/src/components/views/settings/tabs/room/AdvancedRoomSettingsTab.js @@ -16,11 +16,11 @@ limitations under the License. import React from 'react'; import PropTypes from 'prop-types'; -import {_t} from "../../../../languageHandler"; -import MatrixClientPeg from "../../../../MatrixClientPeg"; -import sdk from "../../../../index"; -import AccessibleButton from "../../elements/AccessibleButton"; -import Modal from "../../../../Modal"; +import {_t} from "../../../../../languageHandler"; +import MatrixClientPeg from "../../../../../MatrixClientPeg"; +import sdk from "../../../../.."; +import AccessibleButton from "../../../elements/AccessibleButton"; +import Modal from "../../../../../Modal"; export default class AdvancedRoomSettingsTab extends React.Component { static propTypes = { diff --git a/src/components/views/settings/tabs/GeneralRoomSettingsTab.js b/src/components/views/settings/tabs/room/GeneralRoomSettingsTab.js similarity index 92% rename from src/components/views/settings/tabs/GeneralRoomSettingsTab.js rename to src/components/views/settings/tabs/room/GeneralRoomSettingsTab.js index f43fc8a682..5d707fcf16 100644 --- a/src/components/views/settings/tabs/GeneralRoomSettingsTab.js +++ b/src/components/views/settings/tabs/room/GeneralRoomSettingsTab.js @@ -16,14 +16,14 @@ limitations under the License. import React from 'react'; import PropTypes from 'prop-types'; -import {_t} from "../../../../languageHandler"; -import RoomProfileSettings from "../../room_settings/RoomProfileSettings"; -import MatrixClientPeg from "../../../../MatrixClientPeg"; -import sdk from "../../../../index"; -import AccessibleButton from "../../elements/AccessibleButton"; +import {_t} from "../../../../../languageHandler"; +import RoomProfileSettings from "../../../room_settings/RoomProfileSettings"; +import MatrixClientPeg from "../../../../../MatrixClientPeg"; +import sdk from "../../../../.."; +import AccessibleButton from "../../../elements/AccessibleButton"; import {MatrixClient} from "matrix-js-sdk"; -import dis from "../../../../dispatcher"; -import LabelledToggleSwitch from "../../elements/LabelledToggleSwitch"; +import dis from "../../../../../dispatcher"; +import LabelledToggleSwitch from "../../../elements/LabelledToggleSwitch"; export default class GeneralRoomSettingsTab extends React.Component { static childContextTypes = { diff --git a/src/components/views/settings/tabs/RolesRoomSettingsTab.js b/src/components/views/settings/tabs/room/RolesRoomSettingsTab.js similarity index 98% rename from src/components/views/settings/tabs/RolesRoomSettingsTab.js rename to src/components/views/settings/tabs/room/RolesRoomSettingsTab.js index d223e8f2e9..a6dac5a147 100644 --- a/src/components/views/settings/tabs/RolesRoomSettingsTab.js +++ b/src/components/views/settings/tabs/room/RolesRoomSettingsTab.js @@ -16,11 +16,11 @@ limitations under the License. import React from 'react'; import PropTypes from 'prop-types'; -import {_t, _td} from "../../../../languageHandler"; -import MatrixClientPeg from "../../../../MatrixClientPeg"; -import sdk from "../../../../index"; -import AccessibleButton from "../../elements/AccessibleButton"; -import Modal from "../../../../Modal"; +import {_t, _td} from "../../../../../languageHandler"; +import MatrixClientPeg from "../../../../../MatrixClientPeg"; +import sdk from "../../../../.."; +import AccessibleButton from "../../../elements/AccessibleButton"; +import Modal from "../../../../../Modal"; const plEventsToLabels = { // These will be translated for us later. diff --git a/src/components/views/settings/tabs/SecurityRoomSettingsTab.js b/src/components/views/settings/tabs/room/SecurityRoomSettingsTab.js similarity index 96% rename from src/components/views/settings/tabs/SecurityRoomSettingsTab.js rename to src/components/views/settings/tabs/room/SecurityRoomSettingsTab.js index 698f67dd18..a6eca3bf19 100644 --- a/src/components/views/settings/tabs/SecurityRoomSettingsTab.js +++ b/src/components/views/settings/tabs/room/SecurityRoomSettingsTab.js @@ -16,11 +16,11 @@ limitations under the License. import React from 'react'; import PropTypes from 'prop-types'; -import {_t} from "../../../../languageHandler"; -import MatrixClientPeg from "../../../../MatrixClientPeg"; -import sdk from "../../../../index"; -import LabelledToggleSwitch from "../../elements/LabelledToggleSwitch"; -import {SettingLevel} from "../../../../settings/SettingsStore"; +import {_t} from "../../../../../languageHandler"; +import MatrixClientPeg from "../../../../../MatrixClientPeg"; +import sdk from "../../../../.."; +import LabelledToggleSwitch from "../../../elements/LabelledToggleSwitch"; +import {SettingLevel} from "../../../../../settings/SettingsStore"; export default class SecurityRoomSettingsTab extends React.Component { static propTypes = { @@ -188,7 +188,7 @@ export default class SecurityRoomSettingsTab extends React.Component { if (joinRule !== 'public' && guestAccess === 'forbidden') { guestWarning = (
- + {_t("Guests cannot join this room even if explicitly invited.")}  {_t("Click here to fix")} @@ -201,7 +201,7 @@ export default class SecurityRoomSettingsTab extends React.Component { if (joinRule === 'public' && !hasAliases) { aliasWarning = (
- + {_t("To link to this room, please add an alias.")} diff --git a/src/components/views/settings/tabs/FlairSettingsTab.js b/src/components/views/settings/tabs/user/FlairUserSettingsTab.js similarity index 84% rename from src/components/views/settings/tabs/FlairSettingsTab.js rename to src/components/views/settings/tabs/user/FlairUserSettingsTab.js index db513a161a..0daa20b8b3 100644 --- a/src/components/views/settings/tabs/FlairSettingsTab.js +++ b/src/components/views/settings/tabs/user/FlairUserSettingsTab.js @@ -15,14 +15,14 @@ limitations under the License. */ import React from 'react'; -import {_t} from "../../../../languageHandler"; +import {_t} from "../../../../../languageHandler"; import {DragDropContext} from "react-beautiful-dnd"; -import GroupUserSettings from "../../groups/GroupUserSettings"; -import MatrixClientPeg from "../../../../MatrixClientPeg"; +import GroupUserSettings from "../../../groups/GroupUserSettings"; +import MatrixClientPeg from "../../../../../MatrixClientPeg"; import PropTypes from "prop-types"; import {MatrixClient} from "matrix-js-sdk"; -export default class FlairSettingsTab extends React.Component { +export default class FlairUserSettingsTab extends React.Component { static childContextTypes = { matrixClient: PropTypes.instanceOf(MatrixClient), }; diff --git a/src/components/views/settings/tabs/GeneralUserSettingsTab.js b/src/components/views/settings/tabs/user/GeneralUserSettingsTab.js similarity index 88% rename from src/components/views/settings/tabs/GeneralUserSettingsTab.js rename to src/components/views/settings/tabs/user/GeneralUserSettingsTab.js index fd3274c9e0..093160e330 100644 --- a/src/components/views/settings/tabs/GeneralUserSettingsTab.js +++ b/src/components/views/settings/tabs/user/GeneralUserSettingsTab.js @@ -15,21 +15,21 @@ limitations under the License. */ import React from 'react'; -import {_t} from "../../../../languageHandler"; -import ProfileSettings from "../ProfileSettings"; -import EmailAddresses from "../EmailAddresses"; -import PhoneNumbers from "../PhoneNumbers"; -import Field from "../../elements/Field"; -import * as languageHandler from "../../../../languageHandler"; -import {SettingLevel} from "../../../../settings/SettingsStore"; -import SettingsStore from "../../../../settings/SettingsStore"; -import LanguageDropdown from "../../elements/LanguageDropdown"; -import AccessibleButton from "../../elements/AccessibleButton"; -import DeactivateAccountDialog from "../../dialogs/DeactivateAccountDialog"; -const PlatformPeg = require("../../../../PlatformPeg"); -const sdk = require('../../../../index'); -const Modal = require("../../../../Modal"); -const dis = require("../../../../dispatcher"); +import {_t} from "../../../../../languageHandler"; +import ProfileSettings from "../../ProfileSettings"; +import EmailAddresses from "../../EmailAddresses"; +import PhoneNumbers from "../../PhoneNumbers"; +import Field from "../../../elements/Field"; +import * as languageHandler from "../../../../../languageHandler"; +import {SettingLevel} from "../../../../../settings/SettingsStore"; +import SettingsStore from "../../../../../settings/SettingsStore"; +import LanguageDropdown from "../../../elements/LanguageDropdown"; +import AccessibleButton from "../../../elements/AccessibleButton"; +import DeactivateAccountDialog from "../../../dialogs/DeactivateAccountDialog"; +const PlatformPeg = require("../../../../../PlatformPeg"); +const sdk = require('../../../../..'); +const Modal = require("../../../../../Modal"); +const dis = require("../../../../../dispatcher"); export default class GeneralUserSettingsTab extends React.Component { constructor() { diff --git a/src/components/views/settings/tabs/HelpSettingsTab.js b/src/components/views/settings/tabs/user/HelpUserSettingsTab.js similarity index 90% rename from src/components/views/settings/tabs/HelpSettingsTab.js rename to src/components/views/settings/tabs/user/HelpUserSettingsTab.js index 4ad62451cb..d001a3f2e6 100644 --- a/src/components/views/settings/tabs/HelpSettingsTab.js +++ b/src/components/views/settings/tabs/user/HelpUserSettingsTab.js @@ -16,15 +16,15 @@ limitations under the License. import React from 'react'; import PropTypes from 'prop-types'; -import {_t, getCurrentLanguage} from "../../../../languageHandler"; -import MatrixClientPeg from "../../../../MatrixClientPeg"; -import AccessibleButton from "../../elements/AccessibleButton"; -import SdkConfig from "../../../../SdkConfig"; -import createRoom from "../../../../createRoom"; -const packageJson = require('../../../../../package.json'); -const Modal = require("../../../../Modal"); -const sdk = require("../../../../index"); -const PlatformPeg = require("../../../../PlatformPeg"); +import {_t, getCurrentLanguage} from "../../../../../languageHandler"; +import MatrixClientPeg from "../../../../../MatrixClientPeg"; +import AccessibleButton from "../../../elements/AccessibleButton"; +import SdkConfig from "../../../../../SdkConfig"; +import createRoom from "../../../../../createRoom"; +const packageJson = require('../../../../../../package.json'); +const Modal = require("../../../../../Modal"); +const sdk = require("../../../../.."); +const PlatformPeg = require("../../../../../PlatformPeg"); // if this looks like a release, use the 'version' from package.json; else use // the git sha. Prepend version with v, to look like riot-web version @@ -45,7 +45,7 @@ const ghVersionLabel = function(repo, token='') { return { token }; }; -export default class HelpSettingsTab extends React.Component { +export default class HelpUserSettingsTab extends React.Component { static propTypes = { closeSettingsFn: PropTypes.func.isRequired, }; @@ -117,7 +117,7 @@ export default class HelpSettingsTab extends React.Component { } return ( -
+
{_t("Legal")}
{legalLinks} @@ -190,7 +190,7 @@ export default class HelpSettingsTab extends React.Component { } return ( -
+
{_t("Help & About")}
{_t('Bug reporting')} @@ -203,12 +203,12 @@ export default class HelpSettingsTab extends React.Component { "other users. They do not contain messages.", ) } -
+
{_t("Submit debug logs")}
-
+
{_t("Clear Cache and Reload")} @@ -221,7 +221,7 @@ export default class HelpSettingsTab extends React.Component { {faqText}
-
+
{_t("Versions")}
{_t("matrix-react-sdk version:")} {reactSdkVersion}
@@ -232,7 +232,7 @@ export default class HelpSettingsTab extends React.Component {
{this._renderLegal()} {this._renderCredits()} -
+
{_t("Advanced")}
{_t("Homeserver is")} {MatrixClientPeg.get().getHomeserverUrl()}
diff --git a/src/components/views/settings/tabs/LabsSettingsTab.js b/src/components/views/settings/tabs/user/LabsUserSettingsTab.js similarity index 85% rename from src/components/views/settings/tabs/LabsSettingsTab.js rename to src/components/views/settings/tabs/user/LabsUserSettingsTab.js index e06f87460b..c2e62044a3 100644 --- a/src/components/views/settings/tabs/LabsSettingsTab.js +++ b/src/components/views/settings/tabs/user/LabsUserSettingsTab.js @@ -15,11 +15,11 @@ limitations under the License. */ import React from 'react'; -import {_t} from "../../../../languageHandler"; +import {_t} from "../../../../../languageHandler"; import PropTypes from "prop-types"; -import SettingsStore, {SettingLevel} from "../../../../settings/SettingsStore"; -import LabelledToggleSwitch from "../../elements/LabelledToggleSwitch"; -const sdk = require("../../../../index"); +import SettingsStore, {SettingLevel} from "../../../../../settings/SettingsStore"; +import LabelledToggleSwitch from "../../../elements/LabelledToggleSwitch"; +const sdk = require("../../../../.."); export class LabsSettingToggle extends React.Component { static propTypes = { @@ -38,7 +38,7 @@ export class LabsSettingToggle extends React.Component { } } -export default class LabsSettingsTab extends React.Component { +export default class LabsUserSettingsTab extends React.Component { constructor() { super(); } diff --git a/src/components/views/settings/tabs/NotificationSettingsTab.js b/src/components/views/settings/tabs/user/NotificationUserSettingsTab.js similarity index 80% rename from src/components/views/settings/tabs/NotificationSettingsTab.js rename to src/components/views/settings/tabs/user/NotificationUserSettingsTab.js index 42d495f6ec..970659af6e 100644 --- a/src/components/views/settings/tabs/NotificationSettingsTab.js +++ b/src/components/views/settings/tabs/user/NotificationUserSettingsTab.js @@ -15,10 +15,10 @@ limitations under the License. */ import React from 'react'; -import {_t} from "../../../../languageHandler"; -const sdk = require("../../../../index"); +import {_t} from "../../../../../languageHandler"; +const sdk = require("../../../../.."); -export default class NotificationSettingsTab extends React.Component { +export default class NotificationUserSettingsTab extends React.Component { constructor() { super(); } @@ -26,7 +26,7 @@ export default class NotificationSettingsTab extends React.Component { render() { const Notifications = sdk.getComponent("views.settings.Notifications"); return ( -
+
{_t("Notifications")}
diff --git a/src/components/views/settings/tabs/PreferencesSettingsTab.js b/src/components/views/settings/tabs/user/PreferencesUserSettingsTab.js similarity index 81% rename from src/components/views/settings/tabs/PreferencesSettingsTab.js rename to src/components/views/settings/tabs/user/PreferencesUserSettingsTab.js index d76dc8f3dd..0b472cc366 100644 --- a/src/components/views/settings/tabs/PreferencesSettingsTab.js +++ b/src/components/views/settings/tabs/user/PreferencesUserSettingsTab.js @@ -15,15 +15,15 @@ limitations under the License. */ import React from 'react'; -import {_t} from "../../../../languageHandler"; -import {SettingLevel} from "../../../../settings/SettingsStore"; -import LabelledToggleSwitch from "../../elements/LabelledToggleSwitch"; -import SettingsStore from "../../../../settings/SettingsStore"; -import Field from "../../elements/Field"; -const sdk = require("../../../../index"); -const PlatformPeg = require("../../../../PlatformPeg"); +import {_t} from "../../../../../languageHandler"; +import {SettingLevel} from "../../../../../settings/SettingsStore"; +import LabelledToggleSwitch from "../../../elements/LabelledToggleSwitch"; +import SettingsStore from "../../../../../settings/SettingsStore"; +import Field from "../../../elements/Field"; +const sdk = require("../../../../.."); +const PlatformPeg = require("../../../../../PlatformPeg"); -export default class PreferencesSettingsTab extends React.Component { +export default class PreferencesUserSettingsTab extends React.Component { static COMPOSER_SETTINGS = [ 'MessageComposerInput.autoReplaceEmoji', 'MessageComposerInput.suggestEmoji', @@ -95,17 +95,17 @@ export default class PreferencesSettingsTab extends React.Component { } return ( -
+
{_t("Preferences")}
{_t("Composer")} - {this._renderGroup(PreferencesSettingsTab.COMPOSER_SETTINGS)} + {this._renderGroup(PreferencesUserSettingsTab.COMPOSER_SETTINGS)} {_t("Timeline")} - {this._renderGroup(PreferencesSettingsTab.TIMELINE_SETTINGS)} + {this._renderGroup(PreferencesUserSettingsTab.TIMELINE_SETTINGS)} {_t("Advanced")} - {this._renderGroup(PreferencesSettingsTab.ADVANCED_SETTINGS)} + {this._renderGroup(PreferencesUserSettingsTab.ADVANCED_SETTINGS)} {autoLaunchOption} +
{_t('Unignore')} @@ -48,7 +48,7 @@ export class IgnoredUser extends React.Component { } } -export default class SecuritySettingsTab extends React.Component { +export default class SecurityUserSettingsTab extends React.Component { constructor() { super(); @@ -68,14 +68,14 @@ export default class SecuritySettingsTab extends React.Component { _onExportE2eKeysClicked = () => { Modal.createTrackedDialogAsync('Export E2E Keys', '', - import('../../../../async-components/views/dialogs/ExportE2eKeysDialog'), + import('../../../../../async-components/views/dialogs/ExportE2eKeysDialog'), {matrixClient: MatrixClientPeg.get()}, ); }; _onImportE2eKeysClicked = () => { Modal.createTrackedDialogAsync('Import E2E Keys', '', - import('../../../../async-components/views/dialogs/ImportE2eKeysDialog'), + import('../../../../../async-components/views/dialogs/ImportE2eKeysDialog'), {matrixClient: MatrixClientPeg.get()}, ); }; @@ -126,7 +126,7 @@ export default class SecuritySettingsTab extends React.Component { let importExportButtons = null; if (client.isCryptoEnabled()) { importExportButtons = ( -
+
{_t("Export E2E room keys")} @@ -140,7 +140,7 @@ export default class SecuritySettingsTab extends React.Component { return (
{_t("Cryptography")} -
    +
    • {deviceId} @@ -207,7 +207,7 @@ export default class SecuritySettingsTab extends React.Component { ); return ( -
      +
      {_t("Security & Privacy")}
      {_t("Devices")} diff --git a/src/components/views/settings/tabs/VoiceSettingsTab.js b/src/components/views/settings/tabs/user/VoiceUserSettingsTab.js similarity index 90% rename from src/components/views/settings/tabs/VoiceSettingsTab.js rename to src/components/views/settings/tabs/user/VoiceUserSettingsTab.js index aefb114dd3..31791708e0 100644 --- a/src/components/views/settings/tabs/VoiceSettingsTab.js +++ b/src/components/views/settings/tabs/user/VoiceUserSettingsTab.js @@ -15,16 +15,16 @@ limitations under the License. */ import React from 'react'; -import {_t} from "../../../../languageHandler"; -import CallMediaHandler from "../../../../CallMediaHandler"; -import Field from "../../elements/Field"; -import AccessibleButton from "../../elements/AccessibleButton"; -import {SettingLevel} from "../../../../settings/SettingsStore"; -const Modal = require("../../../../Modal"); -const sdk = require("../../../../index"); -const MatrixClientPeg = require("../../../../MatrixClientPeg"); +import {_t} from "../../../../../languageHandler"; +import CallMediaHandler from "../../../../../CallMediaHandler"; +import Field from "../../../elements/Field"; +import AccessibleButton from "../../../elements/AccessibleButton"; +import {SettingLevel} from "../../../../../settings/SettingsStore"; +const Modal = require("../../../../../Modal"); +const sdk = require("../../../../.."); +const MatrixClientPeg = require("../../../../../MatrixClientPeg"); -export default class VoiceSettingsTab extends React.Component { +export default class VoiceUserSettingsTab extends React.Component { constructor() { super(); @@ -103,7 +103,7 @@ export default class VoiceSettingsTab extends React.Component { let webcamDropdown = null; if (this.state.mediaDevices === false) { requestButton = ( -
      +

      {_t("Missing media permissions, click the button below to request.")}

      {_t("Request media permissions")} @@ -166,7 +166,7 @@ export default class VoiceSettingsTab extends React.Component { } return ( -
      +
      {_t("Voice & Video")}
      {requestButton} diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index 84c9dacd07..5e4765b3af 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -500,19 +500,7 @@ "Upload profile picture": "Upload profile picture", "Display Name": "Display Name", "Save": "Save", - "This room is not accessible by remote Matrix servers": "This room is not accessible by remote Matrix servers", - "Upgrade room to version %(ver)s": "Upgrade room to version %(ver)s", - "Room information": "Room information", - "Internal room ID:": "Internal room ID:", - "Room version": "Room version", - "Room version:": "Room version:", - "Developer options": "Developer options", - "Open Devtools": "Open Devtools", "Flair": "Flair", - "General": "General", - "Room Addresses": "Room Addresses", - "Publish this room to the public in %(domain)s's room directory?": "Publish this room to the public in %(domain)s's room directory?", - "URL Previews": "URL Previews", "Failed to change password. Is your password correct?": "Failed to change password. Is your password correct?", "Success": "Success", "Your password was successfully changed. You will not receive push notifications on other devices until you log back in to them": "Your password was successfully changed. You will not receive push notifications on other devices until you log back in to them", @@ -528,6 +516,7 @@ "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", "Legal": "Legal", "Credits": "Credits", "For help with using Riot, click here.": "For help with using Riot, click here.", @@ -555,6 +544,44 @@ "Composer": "Composer", "Timeline": "Timeline", "Autocomplete delay (ms)": "Autocomplete delay (ms)", + "Unignore": "Unignore", + "": "", + "Import E2E room keys": "Import E2E room keys", + "Cryptography": "Cryptography", + "Device ID:": "Device ID:", + "Device key:": "Device key:", + "Ignored users": "Ignored users", + "Bulk options": "Bulk options", + "Reject all %(invitedRooms)s invites": "Reject all %(invitedRooms)s invites", + "Key backup": "Key backup", + "Security & Privacy": "Security & Privacy", + "Devices": "Devices", + "Riot collects anonymous analytics to allow us to improve the application.": "Riot collects anonymous analytics to allow us to improve the application.", + "Privacy is important to us, so we don't collect any personal or identifiable data for our analytics.": "Privacy is important to us, so we don't collect any personal or identifiable data for our analytics.", + "Learn more about how we use analytics.": "Learn more about how we use analytics.", + "No media permissions": "No media permissions", + "You may need to manually permit Riot to access your microphone/webcam": "You may need to manually permit Riot to access your microphone/webcam", + "Missing media permissions, click the button below to request.": "Missing media permissions, click the button below to request.", + "Request media permissions": "Request media permissions", + "No Audio Outputs detected": "No Audio Outputs detected", + "No Microphones detected": "No Microphones detected", + "No Webcams detected": "No Webcams detected", + "Default Device": "Default Device", + "Audio Output": "Audio Output", + "Microphone": "Microphone", + "Camera": "Camera", + "Voice & Video": "Voice & Video", + "This room is not accessible by remote Matrix servers": "This room is not accessible by remote Matrix servers", + "Upgrade room to version %(ver)s": "Upgrade room to version %(ver)s", + "Room information": "Room information", + "Internal room ID:": "Internal room ID:", + "Room version": "Room version", + "Room version:": "Room version:", + "Developer options": "Developer options", + "Open Devtools": "Open Devtools", + "Room Addresses": "Room Addresses", + "Publish this room to the public in %(domain)s's room directory?": "Publish this room to the public in %(domain)s's room directory?", + "URL Previews": "URL Previews", "To change the room's avatar, you must be a": "To change the room's avatar, you must be a", "To change the room's name, you must be a": "To change the room's name, you must be a", "To change the room's main address, you must be a": "To change the room's main address, you must be a", @@ -592,38 +619,11 @@ "Members only (since the point in time of selecting this option)": "Members only (since the point in time of selecting this option)", "Members only (since they were invited)": "Members only (since they were invited)", "Members only (since they joined)": "Members only (since they joined)", - "Security & Privacy": "Security & Privacy", "Encryption": "Encryption", "Once enabled, encryption cannot be disabled.": "Once enabled, encryption cannot be disabled.", "Encrypted": "Encrypted", "Who can access this room?": "Who can access this room?", "Who can read history?": "Who can read history?", - "Unignore": "Unignore", - "": "", - "Import E2E room keys": "Import E2E room keys", - "Cryptography": "Cryptography", - "Device ID:": "Device ID:", - "Device key:": "Device key:", - "Ignored users": "Ignored users", - "Bulk options": "Bulk options", - "Reject all %(invitedRooms)s invites": "Reject all %(invitedRooms)s invites", - "Key backup": "Key backup", - "Devices": "Devices", - "Riot collects anonymous analytics to allow us to improve the application.": "Riot collects anonymous analytics to allow us to improve the application.", - "Privacy is important to us, so we don't collect any personal or identifiable data for our analytics.": "Privacy is important to us, so we don't collect any personal or identifiable data for our analytics.", - "Learn more about how we use analytics.": "Learn more about how we use analytics.", - "No media permissions": "No media permissions", - "You may need to manually permit Riot to access your microphone/webcam": "You may need to manually permit Riot to access your microphone/webcam", - "Missing media permissions, click the button below to request.": "Missing media permissions, click the button below to request.", - "Request media permissions": "Request media permissions", - "No Audio Outputs detected": "No Audio Outputs detected", - "No Microphones detected": "No Microphones detected", - "No Webcams detected": "No Webcams detected", - "Default Device": "Default Device", - "Audio Output": "Audio Output", - "Microphone": "Microphone", - "Camera": "Camera", - "Voice & Video": "Voice & Video", "Cannot add any more widgets": "Cannot add any more widgets", "The maximum permitted number of widgets have already been added to this room.": "The maximum permitted number of widgets have already been added to this room.", "Add a widget": "Add a widget", From 014e4a2ccf2bf1010e694020563f323613600c6f Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Fri, 22 Feb 2019 11:31:17 -0700 Subject: [PATCH 2/4] Remove DragDropContext from FlairSettings This also fixes a technical bug where one could drag a community from the settings to the LLP --- .../views/groups/GroupPublicityToggle.js | 4 +- src/components/views/groups/GroupTile.js | 92 ++++++++++--------- .../tabs/user/FlairUserSettingsTab.js | 5 +- 3 files changed, 51 insertions(+), 50 deletions(-) diff --git a/src/components/views/groups/GroupPublicityToggle.js b/src/components/views/groups/GroupPublicityToggle.js index e27bf9a9d5..98fa598e20 100644 --- a/src/components/views/groups/GroupPublicityToggle.js +++ b/src/components/views/groups/GroupPublicityToggle.js @@ -68,7 +68,9 @@ export default React.createClass({ render() { const GroupTile = sdk.getComponent('groups.GroupTile'); return
      - + diff --git a/src/components/views/groups/GroupTile.js b/src/components/views/groups/GroupTile.js index 509c209baa..18ef5a5637 100644 --- a/src/components/views/groups/GroupTile.js +++ b/src/components/views/groups/GroupTile.js @@ -33,6 +33,7 @@ const GroupTile = React.createClass({ showDescription: PropTypes.bool, // Height of the group avatar in pixels avatarHeight: PropTypes.number, + draggable: PropTypes.bool, }, contextTypes: { @@ -49,6 +50,7 @@ const GroupTile = React.createClass({ return { showDescription: true, avatarHeight: 50, + draggable: true, }; }, @@ -78,54 +80,54 @@ const GroupTile = React.createClass({
      { profile.shortDescription }
      :
      ; const httpUrl = profile.avatarUrl ? this.context.matrixClient.mxcUrlToHttp( - profile.avatarUrl, avatarHeight, avatarHeight, "crop", - ) : null; + profile.avatarUrl, avatarHeight, avatarHeight, "crop") : null; + + let avatarElement = ( +
      + +
      + ); + if (this.props.draggable) { + const avatarClone = avatarElement; + avatarElement = ( + + { (droppableProvided, droppableSnapshot) => ( +
      + + { (provided, snapshot) => ( +
      +
      + {avatarClone} +
      + { /* Instead of a blank placeholder, use a copy of the avatar itself. */ } + { provided.placeholder ? avatarClone :
      } +
      + ) } + +
      + ) } + + ); + } + // XXX: Use onMouseDown as a workaround for https://github.com/atlassian/react-beautiful-dnd/issues/273 // instead of onClick. Otherwise we experience https://github.com/vector-im/riot-web/issues/6156 return - - { (droppableProvided, droppableSnapshot) => ( -
      - - { (provided, snapshot) => ( -
      -
      -
      - -
      -
      - { /* Instead of a blank placeholder, use a copy of the avatar itself. */ } - { provided.placeholder ? -
      - -
      : -
      - } -
      - ) } - -
      - ) } - + { avatarElement }
      { name }
      { descElement } diff --git a/src/components/views/settings/tabs/user/FlairUserSettingsTab.js b/src/components/views/settings/tabs/user/FlairUserSettingsTab.js index 0daa20b8b3..0063a9a981 100644 --- a/src/components/views/settings/tabs/user/FlairUserSettingsTab.js +++ b/src/components/views/settings/tabs/user/FlairUserSettingsTab.js @@ -16,7 +16,6 @@ limitations under the License. import React from 'react'; import {_t} from "../../../../../languageHandler"; -import {DragDropContext} from "react-beautiful-dnd"; import GroupUserSettings from "../../../groups/GroupUserSettings"; import MatrixClientPeg from "../../../../../MatrixClientPeg"; import PropTypes from "prop-types"; @@ -42,9 +41,7 @@ export default class FlairUserSettingsTab extends React.Component {
      {_t("Flair")}
      - - - +
      ); From 5bf9f721c837cf5401a01e634feeb745ba20b16a Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Mon, 25 Feb 2019 09:43:39 -0700 Subject: [PATCH 3/4] Port minimize to tray to new settings tab (post-merge) Brings in https://github.com/matrix-org/matrix-react-sdk/commit/b02b37125014bc160767c1ac811538b922d46ee5 --- .../tabs/user/PreferencesUserSettingsTab.js | 29 +++++++++++++++++-- 1 file changed, 26 insertions(+), 3 deletions(-) diff --git a/src/components/views/settings/tabs/user/PreferencesUserSettingsTab.js b/src/components/views/settings/tabs/user/PreferencesUserSettingsTab.js index 0b472cc366..17eea49236 100644 --- a/src/components/views/settings/tabs/user/PreferencesUserSettingsTab.js +++ b/src/components/views/settings/tabs/user/PreferencesUserSettingsTab.js @@ -59,24 +59,39 @@ export default class PreferencesUserSettingsTab extends React.Component { this.state = { autoLaunch: false, autoLaunchSupported: false, + minimizeToTray: true, + minimizeToTraySupported: false, }; } async componentWillMount(): void { - const autoLaunchSupported = await PlatformPeg.get().supportsAutoLaunch(); + const platform = PlatformPeg.get(); + + const autoLaunchSupported = await platform.supportsAutoLaunch(); let autoLaunch = false; if (autoLaunchSupported) { - autoLaunch = await PlatformPeg.get().getAutoLaunchEnabled(); + autoLaunch = await platform.getAutoLaunchEnabled(); } - this.setState({autoLaunch, autoLaunchSupported}); + const minimizeToTraySupported = await platform.supportsMinimizeToTray(); + let minimizeToTray = true; + + if (minimizeToTraySupported) { + minimizeToTray = await platform.getMinimizeToTrayEnabled(); + } + + this.setState({autoLaunch, autoLaunchSupported, minimizeToTraySupported, minimizeToTray}); } _onAutoLaunchChange = (checked) => { PlatformPeg.get().setAutoLaunchEnabled(checked).then(() => this.setState({autoLaunch: checked})); }; + _onMinimizeToTrayChange = (checked) => { + PlatformPeg.get().setMinimizeToTrayEnabled(checked).then(() => this.setState({minimizeToTray: checked})); + }; + _onAutocompleteDelayChange = (e) => { SettingsStore.setValue("autocompleteDelay", null, SettingLevel.DEVICE, e.target.value); }; @@ -94,6 +109,13 @@ export default class PreferencesUserSettingsTab extends React.Component { label={_t('Start automatically after system login')} />; } + let minimizeToTrayOption = null; + if (this.state.minimizeToTraySupported) { + minimizeToTrayOption = ; + } + return (
      {_t("Preferences")}
      @@ -106,6 +128,7 @@ export default class PreferencesUserSettingsTab extends React.Component { {_t("Advanced")} {this._renderGroup(PreferencesUserSettingsTab.ADVANCED_SETTINGS)} + {minimizeToTrayOption} {autoLaunchOption} Date: Mon, 25 Feb 2019 11:52:34 -0700 Subject: [PATCH 4/4] Fix variable reference --- .../views/settings/tabs/user/PreferencesUserSettingsTab.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/views/settings/tabs/user/PreferencesUserSettingsTab.js b/src/components/views/settings/tabs/user/PreferencesUserSettingsTab.js index aab16034b6..79bf99b440 100644 --- a/src/components/views/settings/tabs/user/PreferencesUserSettingsTab.js +++ b/src/components/views/settings/tabs/user/PreferencesUserSettingsTab.js @@ -131,7 +131,7 @@ export default class PreferencesUserSettingsTab extends React.Component { {this._renderGroup(PreferencesUserSettingsTab.TIMELINE_SETTINGS)} {_t("Room list")} - {this._renderGroup(PreferencesSettingsTab.ROOM_LIST_SETTINGS)} + {this._renderGroup(PreferencesUserSettingsTab.ROOM_LIST_SETTINGS)} {_t("Advanced")} {this._renderGroup(PreferencesUserSettingsTab.ADVANCED_SETTINGS)}