mirror of https://github.com/vector-im/riot-web
Merge pull request #2554 from matrix-org/travis/settings/delete-the-old
Remove old user and room settingspull/21833/head
commit
8b5e4a4f52
|
@ -44,13 +44,11 @@ src/components/views/rooms/MessageComposer.js
|
||||||
src/components/views/rooms/PinnedEventTile.js
|
src/components/views/rooms/PinnedEventTile.js
|
||||||
src/components/views/rooms/RoomList.js
|
src/components/views/rooms/RoomList.js
|
||||||
src/components/views/rooms/RoomPreviewBar.js
|
src/components/views/rooms/RoomPreviewBar.js
|
||||||
src/components/views/rooms/RoomSettings.js
|
|
||||||
src/components/views/rooms/SearchableEntityList.js
|
src/components/views/rooms/SearchableEntityList.js
|
||||||
src/components/views/rooms/SearchBar.js
|
src/components/views/rooms/SearchBar.js
|
||||||
src/components/views/rooms/SearchResultTile.js
|
src/components/views/rooms/SearchResultTile.js
|
||||||
src/components/views/rooms/TopUnreadMessagesBar.js
|
src/components/views/rooms/TopUnreadMessagesBar.js
|
||||||
src/components/views/rooms/UserTile.js
|
src/components/views/rooms/UserTile.js
|
||||||
src/components/views/settings/AddPhoneNumber.js
|
|
||||||
src/components/views/settings/ChangeAvatar.js
|
src/components/views/settings/ChangeAvatar.js
|
||||||
src/components/views/settings/ChangePassword.js
|
src/components/views/settings/ChangePassword.js
|
||||||
src/components/views/settings/DevicesPanel.js
|
src/components/views/settings/DevicesPanel.js
|
||||||
|
|
|
@ -270,6 +270,20 @@ textarea {
|
||||||
opacity: 0.7;
|
opacity: 0.7;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: Review mx_GeneralButton usage to see if it can use a different class
|
||||||
|
// These classes were brought in from the old UserSettings and are included here to avoid
|
||||||
|
// breaking the app.
|
||||||
|
// Ref: https://github.com/vector-im/riot-web/issues/8420
|
||||||
|
.mx_GeneralButton {
|
||||||
|
@mixin mx_DialogButton;
|
||||||
|
display: inline;
|
||||||
|
margin: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_GeneralButton:hover {
|
||||||
|
@mixin mx_DialogButton_hover;
|
||||||
|
}
|
||||||
|
|
||||||
.mx_linkButton {
|
.mx_linkButton {
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
color: $accent-color;
|
color: $accent-color;
|
||||||
|
|
|
@ -21,7 +21,6 @@
|
||||||
@import "./structures/_TagPanel.scss";
|
@import "./structures/_TagPanel.scss";
|
||||||
@import "./structures/_TopLeftMenuButton.scss";
|
@import "./structures/_TopLeftMenuButton.scss";
|
||||||
@import "./structures/_UploadBar.scss";
|
@import "./structures/_UploadBar.scss";
|
||||||
@import "./structures/_UserSettings.scss";
|
|
||||||
@import "./structures/_ViewSource.scss";
|
@import "./structures/_ViewSource.scss";
|
||||||
@import "./structures/auth/_Login.scss";
|
@import "./structures/auth/_Login.scss";
|
||||||
@import "./views/auth/_AuthBody.scss";
|
@import "./views/auth/_AuthBody.scss";
|
||||||
|
@ -42,6 +41,7 @@
|
||||||
@import "./views/context_menus/_StatusMessageContextMenu.scss";
|
@import "./views/context_menus/_StatusMessageContextMenu.scss";
|
||||||
@import "./views/context_menus/_TagTileContextMenu.scss";
|
@import "./views/context_menus/_TagTileContextMenu.scss";
|
||||||
@import "./views/context_menus/_TopLeftMenu.scss";
|
@import "./views/context_menus/_TopLeftMenu.scss";
|
||||||
|
@import "./views/dialogs/_Analytics.scss";
|
||||||
@import "./views/dialogs/_BugReportDialog.scss";
|
@import "./views/dialogs/_BugReportDialog.scss";
|
||||||
@import "./views/dialogs/_ChangelogDialog.scss";
|
@import "./views/dialogs/_ChangelogDialog.scss";
|
||||||
@import "./views/dialogs/_ChatCreateOrReuseChatDialog.scss";
|
@import "./views/dialogs/_ChatCreateOrReuseChatDialog.scss";
|
||||||
|
@ -50,6 +50,7 @@
|
||||||
@import "./views/dialogs/_CreateGroupDialog.scss";
|
@import "./views/dialogs/_CreateGroupDialog.scss";
|
||||||
@import "./views/dialogs/_CreateRoomDialog.scss";
|
@import "./views/dialogs/_CreateRoomDialog.scss";
|
||||||
@import "./views/dialogs/_DeactivateAccountDialog.scss";
|
@import "./views/dialogs/_DeactivateAccountDialog.scss";
|
||||||
|
@import "./views/dialogs/_DeviceVerifyDialog.scss";
|
||||||
@import "./views/dialogs/_DevtoolsDialog.scss";
|
@import "./views/dialogs/_DevtoolsDialog.scss";
|
||||||
@import "./views/dialogs/_EncryptedEventDialog.scss";
|
@import "./views/dialogs/_EncryptedEventDialog.scss";
|
||||||
@import "./views/dialogs/_GroupAddressPicker.scss";
|
@import "./views/dialogs/_GroupAddressPicker.scss";
|
||||||
|
@ -77,6 +78,7 @@
|
||||||
@import "./views/elements/_HexVerify.scss";
|
@import "./views/elements/_HexVerify.scss";
|
||||||
@import "./views/elements/_ImageView.scss";
|
@import "./views/elements/_ImageView.scss";
|
||||||
@import "./views/elements/_InlineSpinner.scss";
|
@import "./views/elements/_InlineSpinner.scss";
|
||||||
|
@import "./views/elements/_ManageIntegsButton.scss";
|
||||||
@import "./views/elements/_MemberEventListSummary.scss";
|
@import "./views/elements/_MemberEventListSummary.scss";
|
||||||
@import "./views/elements/_ProgressBar.scss";
|
@import "./views/elements/_ProgressBar.scss";
|
||||||
@import "./views/elements/_ReplyThread.scss";
|
@import "./views/elements/_ReplyThread.scss";
|
||||||
|
@ -104,6 +106,8 @@
|
||||||
@import "./views/messages/_SenderProfile.scss";
|
@import "./views/messages/_SenderProfile.scss";
|
||||||
@import "./views/messages/_TextualEvent.scss";
|
@import "./views/messages/_TextualEvent.scss";
|
||||||
@import "./views/messages/_UnknownBody.scss";
|
@import "./views/messages/_UnknownBody.scss";
|
||||||
|
@import "./views/room_settings/_AliasSettings.scss";
|
||||||
|
@import "./views/room_settings/_ColorSettings.scss";
|
||||||
@import "./views/rooms/_AppsDrawer.scss";
|
@import "./views/rooms/_AppsDrawer.scss";
|
||||||
@import "./views/rooms/_Autocomplete.scss";
|
@import "./views/rooms/_Autocomplete.scss";
|
||||||
@import "./views/rooms/_AuxPanel.scss";
|
@import "./views/rooms/_AuxPanel.scss";
|
||||||
|
@ -125,7 +129,6 @@
|
||||||
@import "./views/rooms/_RoomList.scss";
|
@import "./views/rooms/_RoomList.scss";
|
||||||
@import "./views/rooms/_RoomPreviewBar.scss";
|
@import "./views/rooms/_RoomPreviewBar.scss";
|
||||||
@import "./views/rooms/_RoomRecoveryReminder.scss";
|
@import "./views/rooms/_RoomRecoveryReminder.scss";
|
||||||
@import "./views/rooms/_RoomSettings.scss";
|
|
||||||
@import "./views/rooms/_RoomTile.scss";
|
@import "./views/rooms/_RoomTile.scss";
|
||||||
@import "./views/rooms/_RoomTooltip.scss";
|
@import "./views/rooms/_RoomTooltip.scss";
|
||||||
@import "./views/rooms/_RoomUpgradeWarningBar.scss";
|
@import "./views/rooms/_RoomUpgradeWarningBar.scss";
|
||||||
|
|
|
@ -51,11 +51,6 @@ limitations under the License.
|
||||||
color: $tab-label-active-fg-color;
|
color: $tab-label-active-fg-color;
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Remove temporary hack alongside "visit old settings" tab
|
|
||||||
.mx_TabbedView_tabLabel_TEMP_HACK {
|
|
||||||
background-color: orange;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_TabbedView_maskedIcon {;
|
.mx_TabbedView_maskedIcon {;
|
||||||
margin-left: 6px;
|
margin-left: 6px;
|
||||||
margin-right: 9px;
|
margin-right: 9px;
|
||||||
|
|
|
@ -1,269 +0,0 @@
|
||||||
/*
|
|
||||||
Copyright 2015, 2016 OpenMarket Ltd
|
|
||||||
Copyright 2017 Vector Creations Ltd
|
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
you may not use this file except in compliance with the License.
|
|
||||||
You may obtain a copy of the License at
|
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
See the License for the specific language governing permissions and
|
|
||||||
limitations under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
.mx_UserSettings {
|
|
||||||
max-width: 960px;
|
|
||||||
width: 100%;
|
|
||||||
margin-left: auto;
|
|
||||||
margin-right: auto;
|
|
||||||
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_UserSettings .mx_RoomHeader {
|
|
||||||
order: 1;
|
|
||||||
|
|
||||||
flex: 0 0 70px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_UserSettings_body {
|
|
||||||
order: 2;
|
|
||||||
|
|
||||||
flex: 1 1 0;
|
|
||||||
|
|
||||||
margin-top: -20px;
|
|
||||||
overflow-y: auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_UserSettings h3 {
|
|
||||||
clear: both;
|
|
||||||
margin-left: 63px;
|
|
||||||
text-transform: uppercase;
|
|
||||||
color: $h3-color;
|
|
||||||
font-weight: 600;
|
|
||||||
font-size: 13px;
|
|
||||||
margin-top: 26px;
|
|
||||||
margin-bottom: 10px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_UserSettings_section h3 {
|
|
||||||
margin-left: 0px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_UserSettings_spinner {
|
|
||||||
display: inline-block;
|
|
||||||
vertical-align: middle;
|
|
||||||
margin-right: 12px;
|
|
||||||
width: 32px;
|
|
||||||
height: 32px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_UserSettings_button {
|
|
||||||
@mixin mx_DialogButton;
|
|
||||||
display: inline;
|
|
||||||
margin: auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_UserSettings_button:hover {
|
|
||||||
@mixin mx_DialogButton_hover;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_UserSettings_button.danger {
|
|
||||||
background-color: $warning-color;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_UserSettings_section {
|
|
||||||
margin-left: 63px;
|
|
||||||
margin-top: 28px;
|
|
||||||
margin-bottom: 28px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_UserSettings_cryptoSection ul {
|
|
||||||
display: table;
|
|
||||||
}
|
|
||||||
.mx_UserSettings_cryptoSection li {
|
|
||||||
display: table-row;
|
|
||||||
}
|
|
||||||
.mx_UserSettings_cryptoSection label,
|
|
||||||
.mx_UserSettings_cryptoSection span {
|
|
||||||
display: table-cell;
|
|
||||||
padding-right: 1em;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_UserSettings_passwordWarning {
|
|
||||||
/* To move the "Sign out" button out of the way */
|
|
||||||
clear: both;
|
|
||||||
color: $warning-color;
|
|
||||||
margin-bottom: 5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_UserSettings_importExportButtons {
|
|
||||||
padding-top: 10px;
|
|
||||||
padding-left: 40px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_UserSettings_importExportButtons .mx_UserSettings_button {
|
|
||||||
margin-right: 1em;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_UserSettings_toggle input {
|
|
||||||
width: 16px;
|
|
||||||
margin-right: 8px;
|
|
||||||
margin-bottom: 8px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_UserSettings_toggle label {
|
|
||||||
padding-bottom: 21px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_UserSettings_accountTable
|
|
||||||
.mx_UserSettings_notifTable
|
|
||||||
{
|
|
||||||
display: table;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_UserSettings_notifTable .mx_Spinner {
|
|
||||||
position: absolute;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_UserSettings_language {
|
|
||||||
width: 200px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_UserSettings_webRtcDevices_dropdown {
|
|
||||||
width: 50%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_UserSettings_profileTable
|
|
||||||
{
|
|
||||||
display: table;
|
|
||||||
float: left;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_UserSettings_profileTableRow
|
|
||||||
{
|
|
||||||
display: table-row;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_UserSettings_profileLabelCell
|
|
||||||
{
|
|
||||||
padding-bottom: 21px;
|
|
||||||
display: table-cell;
|
|
||||||
font-weight: bold;
|
|
||||||
padding-right: 24px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_UserSettings_profileInputCell {
|
|
||||||
display: table-cell;
|
|
||||||
padding-bottom: 21px;
|
|
||||||
width: 240px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_UserSettings_profileInputCell input,
|
|
||||||
.mx_UserSettings_profileInputCell .mx_EditableText
|
|
||||||
{
|
|
||||||
display: inline-block;
|
|
||||||
border: 0px;
|
|
||||||
border-bottom: 1px solid $input-underline-color;
|
|
||||||
padding: 0px;
|
|
||||||
width: 240px;
|
|
||||||
color: $input-fg-color;
|
|
||||||
font-family: $font-family;
|
|
||||||
font-size: 16px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_UserSettings_threepidButton {
|
|
||||||
display: table-cell;
|
|
||||||
padding-left: 0.5em;
|
|
||||||
position: relative;
|
|
||||||
cursor: pointer;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_UserSettings_phoneSection {
|
|
||||||
display:table;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_UserSettings_phoneCountry {
|
|
||||||
width: 70px;
|
|
||||||
display: table-cell;
|
|
||||||
}
|
|
||||||
|
|
||||||
input.mx_UserSettings_phoneNumberField {
|
|
||||||
margin-left: 3px;
|
|
||||||
width: 172px;
|
|
||||||
border: 1px solid transparent;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_UserSettings_changePasswordButton {
|
|
||||||
float: right;
|
|
||||||
margin-right: 32px;
|
|
||||||
margin-left: 32px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_UserSettings_logout {
|
|
||||||
float: right;
|
|
||||||
margin-right: 32px;
|
|
||||||
margin-left: 32px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_UserSettings_avatarPicker {
|
|
||||||
margin-left: 32px;
|
|
||||||
margin-right: 32px;
|
|
||||||
float: right;
|
|
||||||
cursor: pointer;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_UserSettings_avatarPicker_img .mx_BaseAvatar_image {
|
|
||||||
object-fit: cover;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_UserSettings_avatarPicker_edit {
|
|
||||||
text-align: center;
|
|
||||||
margin-top: 10px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_UserSettings_avatarPicker_edit img {
|
|
||||||
cursor: pointer;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_UserSettings_avatarPicker_edit > input {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_UserSettings_avatarPicker_imgContainer {
|
|
||||||
display: inline-block;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_UserSettings_avatarPicker_remove {
|
|
||||||
display: inline-block;
|
|
||||||
float: right;
|
|
||||||
margin-right: -15px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_UserSettings_advanced_spoiler,
|
|
||||||
.mx_UserSettings_link {
|
|
||||||
cursor: pointer;
|
|
||||||
color: $accent-color;
|
|
||||||
word-break: break-all;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_UserSettings_analyticsModal table {
|
|
||||||
margin: 10px 0px;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Temp styles to keep the layout moderately usable. Not perfect, but better
|
|
||||||
// than 30 options being impossible to understand.
|
|
||||||
.mx_UserSettings .mx_SettingsFlag {
|
|
||||||
height: 30px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_UserSettings .mx_SettingsFlag .mx_ToggleSwitch {
|
|
||||||
float: left;
|
|
||||||
margin-right: 5px;
|
|
||||||
}
|
|
|
@ -0,0 +1,19 @@
|
||||||
|
/*
|
||||||
|
Copyright 2019 New Vector Ltd.
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
.mx_AnalyticsModal table {
|
||||||
|
margin: 10px 0px;
|
||||||
|
}
|
|
@ -0,0 +1,29 @@
|
||||||
|
/*
|
||||||
|
Copyright 2019 New Vector Ltd.
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
.mx_DeviceVerifyDialog_cryptoSection ul {
|
||||||
|
display: table;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_DeviceVerifyDialog_cryptoSection li {
|
||||||
|
display: table-row;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_DeviceVerifyDialog_cryptoSection label,
|
||||||
|
.mx_DeviceVerifyDialog_cryptoSection span {
|
||||||
|
display: table-cell;
|
||||||
|
padding-right: 1em;
|
||||||
|
}
|
|
@ -0,0 +1,53 @@
|
||||||
|
/*
|
||||||
|
Copyright 2019 New Vector Ltd.
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
.mx_ManageIntegsButton_error {
|
||||||
|
position: relative;
|
||||||
|
cursor: not-allowed;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_ManageIntegsButton_error img {
|
||||||
|
position: absolute;
|
||||||
|
right: -5px;
|
||||||
|
top: -5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_ManageIntegsButton_error {
|
||||||
|
float: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_ManageIntegsButton_error .mx_ManageIntegsButton_errorPopup {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_ManageIntegsButton_error:hover .mx_ManageIntegsButton_errorPopup {
|
||||||
|
display: inline;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_ManageIntegsButton_errorPopup {
|
||||||
|
position: absolute;
|
||||||
|
top: 110%;
|
||||||
|
left: -275%;
|
||||||
|
width: 550%;
|
||||||
|
padding: 30%;
|
||||||
|
font-size: 10pt;
|
||||||
|
line-height: 1.5em;
|
||||||
|
border-radius: 5px;
|
||||||
|
background-color: $accent-color;
|
||||||
|
color: $accent-fg-color;
|
||||||
|
text-align: center;
|
||||||
|
z-index: 1000;
|
||||||
|
}
|
|
@ -0,0 +1,28 @@
|
||||||
|
/*
|
||||||
|
Copyright 2019 New Vector Ltd.
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
.mx_AliasSettings_editable {
|
||||||
|
border: 0px;
|
||||||
|
border-bottom: 1px solid $strong-input-border-color;
|
||||||
|
padding: 0px;
|
||||||
|
min-width: 240px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_AliasSettings_editable:focus {
|
||||||
|
border-bottom: 1px solid $accent-color;
|
||||||
|
outline: none;
|
||||||
|
box-shadow: none;
|
||||||
|
}
|
|
@ -0,0 +1,39 @@
|
||||||
|
/*
|
||||||
|
Copyright 2019 New Vector Ltd.
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
.mx_ColorSettings_roomColor {
|
||||||
|
display: inline-block;
|
||||||
|
position: relative;
|
||||||
|
width: 37px;
|
||||||
|
height: 37px;
|
||||||
|
border: 1px solid #979797;
|
||||||
|
margin-right: 13px;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_ColorSettings_roomColor_selected {
|
||||||
|
position: absolute;
|
||||||
|
left: 10px;
|
||||||
|
top: 4px;
|
||||||
|
cursor: default ! important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_ColorSettings_roomColorPrimary {
|
||||||
|
height: 10px;
|
||||||
|
position: absolute;
|
||||||
|
bottom: 0px;
|
||||||
|
width: 100%;
|
||||||
|
}
|
|
@ -1,260 +0,0 @@
|
||||||
/*
|
|
||||||
Copyright 2015, 2016 OpenMarket Ltd
|
|
||||||
Copyright 2017 Vector Creations Ltd
|
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
you may not use this file except in compliance with the License.
|
|
||||||
You may obtain a copy of the License at
|
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
See the License for the specific language governing permissions and
|
|
||||||
limitations under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
.mx_RoomSettings {
|
|
||||||
margin: 40px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_RoomSettings_upgradeButton,
|
|
||||||
.mx_RoomSettings_leaveButton,
|
|
||||||
.mx_RoomSettings_unbanButton {
|
|
||||||
@mixin mx_DialogButton;
|
|
||||||
position: relative;
|
|
||||||
margin-right: 8px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_RoomSettings_devtoolsButton {
|
|
||||||
@mixin mx_DialogButton;
|
|
||||||
position: relative;
|
|
||||||
padding: 4px 1.5em;
|
|
||||||
margin-top: 8px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_RoomSettings_upgradeButton,
|
|
||||||
.mx_RoomSettings_leaveButton:hover,
|
|
||||||
.mx_RoomSettings_unbanButton:hover {
|
|
||||||
@mixin mx_DialogButton_hover;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_RoomSettings_upgradeButton.danger {
|
|
||||||
@mixin mx_DialogButton_danger;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_RoomSettings_integrationsButton_error {
|
|
||||||
position: relative;
|
|
||||||
cursor: not-allowed;
|
|
||||||
}
|
|
||||||
.mx_RoomSettings_integrationsButton_error img {
|
|
||||||
position: absolute;
|
|
||||||
right: -5px;
|
|
||||||
top: -5px;
|
|
||||||
}
|
|
||||||
.mx_RoomSettings_leaveButton,
|
|
||||||
.mx_RoomSettings_integrationsButton_error {
|
|
||||||
float: right;
|
|
||||||
}
|
|
||||||
.mx_RoomSettings_integrationsButton_error .mx_RoomSettings_integrationsButton_errorPopup {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
.mx_RoomSettings_integrationsButton_error:hover .mx_RoomSettings_integrationsButton_errorPopup {
|
|
||||||
display: inline;
|
|
||||||
}
|
|
||||||
.mx_RoomSettings_integrationsButton_errorPopup {
|
|
||||||
position: absolute;
|
|
||||||
top: 110%;
|
|
||||||
left: -275%;
|
|
||||||
width: 550%;
|
|
||||||
padding: 30%;
|
|
||||||
font-size: 10pt;
|
|
||||||
line-height: 1.5em;
|
|
||||||
border-radius: 5px;
|
|
||||||
background-color: $accent-color;
|
|
||||||
color: $accent-fg-color;
|
|
||||||
text-align: center;
|
|
||||||
z-index: 1000;
|
|
||||||
}
|
|
||||||
.mx_RoomSettings_unbanButton {
|
|
||||||
display: inline;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_RoomSettings_e2eIcon {
|
|
||||||
padding-left: 4px;
|
|
||||||
padding-right: 7px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_RoomSettings_leaveButton {
|
|
||||||
margin-right: 32px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_RoomSettings_powerLevels {
|
|
||||||
display: table;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_RoomSettings_powerLevel {
|
|
||||||
display: table-row;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_RoomSettings_powerLevelKey,
|
|
||||||
.mx_RoomSettings_powerLevel .mx_PowerSelector {
|
|
||||||
display: table-cell;
|
|
||||||
padding-bottom: 5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_RoomSettings_powerLevelKey {
|
|
||||||
text-align: right;
|
|
||||||
padding-right: 0.3em;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_RoomSettings h3 {
|
|
||||||
text-transform: uppercase;
|
|
||||||
color: $h3-color;
|
|
||||||
font-weight: 600;
|
|
||||||
font-size: 13px;
|
|
||||||
margin-top: 36px;
|
|
||||||
margin-bottom: 10px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_RoomSettings .mx_RoomSettings_toggles label {
|
|
||||||
margin-bottom: 8px;
|
|
||||||
display: block;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_RoomSettings .mx_RoomSettings_toggles input[type="checkbox"],
|
|
||||||
.mx_RoomSettings .mx_RoomSettings_toggles input[type="radio"] {
|
|
||||||
margin-right: 7px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_RoomSettings .mx_RoomSettings_tags input[type="checkbox"] {
|
|
||||||
margin-left: 1em;
|
|
||||||
margin-right: 7px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_RoomSettings .mx_RoomSettings_tags {
|
|
||||||
margin-bottom: 8px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_RoomSettings .mx_RoomSettings_roomColor {
|
|
||||||
display: inline-block;
|
|
||||||
position: relative;
|
|
||||||
width: 37px;
|
|
||||||
height: 37px;
|
|
||||||
border: 1px solid #979797;
|
|
||||||
margin-right: 13px;
|
|
||||||
cursor: pointer;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_RoomSettings .mx_RoomSettings_roomColor_selected {
|
|
||||||
position: absolute;
|
|
||||||
left: 10px;
|
|
||||||
top: 4px;
|
|
||||||
cursor: default ! important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_RoomSettings .mx_RoomSettings_roomColorPrimary {
|
|
||||||
height: 10px;
|
|
||||||
position: absolute;
|
|
||||||
bottom: 0px;
|
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_RoomSettings .mx_RoomSettings_aliasLabel {
|
|
||||||
margin-bottom: 8px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_RoomSettings .mx_RoomSettings_aliasesTable {
|
|
||||||
margin-top: 12px;
|
|
||||||
margin-bottom: 0px;
|
|
||||||
margin-left: 56px;
|
|
||||||
display: table;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_RoomSettings .mx_RoomSettings_aliasesTableRow {
|
|
||||||
display: table-row;
|
|
||||||
margin-bottom: 16px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_RoomSettings .mx_RoomSettings_alias {
|
|
||||||
max-width: 400px;
|
|
||||||
margin-bottom: 16px;
|
|
||||||
/*
|
|
||||||
commented out so margin applies
|
|
||||||
display: table-cell; */
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_RoomSettings .mx_RoomSettings_addAlias,
|
|
||||||
.mx_RoomSettings .mx_RoomSettings_deleteAlias {
|
|
||||||
display: table-cell;
|
|
||||||
padding-left: 0.5em;
|
|
||||||
position: relative;
|
|
||||||
cursor: pointer;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_RoomSettings .mx_RoomSettings_addAlias img,
|
|
||||||
.mx_RoomSettings .mx_RoomSettings_deleteAlias img {
|
|
||||||
visibility: hidden;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_RoomSettings .mx_RoomSettings_aliasesTableRow:hover .mx_RoomSettings_addAlias img,
|
|
||||||
.mx_RoomSettings .mx_RoomSettings_aliasesTableRow:hover .mx_RoomSettings_deleteAlias img {
|
|
||||||
visibility: visible;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_RoomSettings_warning {
|
|
||||||
color: $warning-color;
|
|
||||||
font-weight: bold;
|
|
||||||
margin-top: 8px;
|
|
||||||
margin-bottom: 8px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_RoomSettings_editable {
|
|
||||||
border: 0px;
|
|
||||||
border-bottom: 1px solid $strong-input-border-color;
|
|
||||||
padding: 0px;
|
|
||||||
min-width: 240px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_RoomSettings_editable:focus {
|
|
||||||
border-bottom: 1px solid $accent-color;
|
|
||||||
outline: none;
|
|
||||||
box-shadow: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_RoomSettings_deleteAlias,
|
|
||||||
.mx_RoomSettings_addAlias {
|
|
||||||
display: table-cell;
|
|
||||||
visibility: visible;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_RoomSettings_deleteAlias:hover,
|
|
||||||
.mx_RoomSettings_addAlias:hover {
|
|
||||||
visibility: visible;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_RoomSettings_aliasPlaceholder {
|
|
||||||
color: $settings-grey-fg-color;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_RoomSettings_buttons {
|
|
||||||
text-align: right;
|
|
||||||
margin-bottom: 16px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mx_RoomSettings_button {
|
|
||||||
display: inline;
|
|
||||||
border: 0px;
|
|
||||||
height: 36px;
|
|
||||||
border-radius: 36px;
|
|
||||||
font-weight: 400;
|
|
||||||
font-size: 15px;
|
|
||||||
color: $accent-fg-color;
|
|
||||||
background-color: $accent-color;
|
|
||||||
width: auto;
|
|
||||||
margin: auto;
|
|
||||||
padding: 6px;
|
|
||||||
padding-left: 1em;
|
|
||||||
padding-right: 1em;
|
|
||||||
}
|
|
|
@ -59,10 +59,15 @@ limitations under the License.
|
||||||
color: $accent-color;
|
color: $accent-color;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mx_UserSettings_devicesTable td {
|
.mx_UserNotifSettings_devicesTable td {
|
||||||
padding-left: 20px;
|
padding-left: 20px;
|
||||||
padding-right: 20px;
|
padding-right: 20px;
|
||||||
}
|
}
|
||||||
.mx_UserSettings_devicesTable_nodevices {
|
|
||||||
font-style: italic;
|
.mx_UserNotifSettings_notifTable {
|
||||||
|
display: table;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mx_UserNotifSettings_notifTable .mx_Spinner {
|
||||||
|
position: absolute;
|
||||||
}
|
}
|
||||||
|
|
|
@ -267,7 +267,7 @@ class Analytics {
|
||||||
const ErrorDialog = sdk.getComponent('dialogs.ErrorDialog');
|
const ErrorDialog = sdk.getComponent('dialogs.ErrorDialog');
|
||||||
Modal.createTrackedDialog('Analytics Details', '', ErrorDialog, {
|
Modal.createTrackedDialog('Analytics Details', '', ErrorDialog, {
|
||||||
title: _t('Analytics'),
|
title: _t('Analytics'),
|
||||||
description: <div className="mx_UserSettings_analyticsModal">
|
description: <div className="mx_AnalyticsModal">
|
||||||
<div>
|
<div>
|
||||||
{ _t('The information being sent to us to help make Riot.im better includes:') }
|
{ _t('The information being sent to us to help make Riot.im better includes:') }
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -19,7 +19,6 @@ limitations under the License.
|
||||||
export default {
|
export default {
|
||||||
HomePage: "home_page",
|
HomePage: "home_page",
|
||||||
RoomView: "room_view",
|
RoomView: "room_view",
|
||||||
UserSettings: "user_settings",
|
|
||||||
RoomDirectory: "room_directory",
|
RoomDirectory: "room_directory",
|
||||||
UserView: "user_view",
|
UserView: "user_view",
|
||||||
GroupView: "group_view",
|
GroupView: "group_view",
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
Copyright 2015, 2016 OpenMarket Ltd
|
Copyright 2015, 2016 OpenMarket Ltd
|
||||||
Copyright 2017 New Vector Ltd
|
Copyright 2017, 2019 New Vector Ltd
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
you may not use this file except in compliance with the License.
|
you may not use this file except in compliance with the License.
|
||||||
|
@ -15,47 +15,11 @@ See the License for the specific language governing permissions and
|
||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import Promise from 'bluebird';
|
|
||||||
import MatrixClientPeg from './MatrixClientPeg';
|
import MatrixClientPeg from './MatrixClientPeg';
|
||||||
|
|
||||||
/*
|
// TODO: Decommission.
|
||||||
* TODO: Make things use this. This is all WIP - see UserSettings.js for usage.
|
// Ref: https://github.com/vector-im/riot-web/issues/8424
|
||||||
*/
|
|
||||||
export default {
|
export default {
|
||||||
loadProfileInfo: function() {
|
|
||||||
const cli = MatrixClientPeg.get();
|
|
||||||
return cli.getProfileInfo(cli.credentials.userId);
|
|
||||||
},
|
|
||||||
|
|
||||||
saveDisplayName: function(newDisplayname) {
|
|
||||||
return MatrixClientPeg.get().setDisplayName(newDisplayname);
|
|
||||||
},
|
|
||||||
|
|
||||||
loadThreePids: function() {
|
|
||||||
if (MatrixClientPeg.get().isGuest()) {
|
|
||||||
return Promise.resolve({
|
|
||||||
threepids: [],
|
|
||||||
}); // guests can't poke 3pid endpoint
|
|
||||||
}
|
|
||||||
return MatrixClientPeg.get().getThreePids();
|
|
||||||
},
|
|
||||||
|
|
||||||
saveThreePids: function(threePids) {
|
|
||||||
// TODO
|
|
||||||
},
|
|
||||||
|
|
||||||
changePassword: function(oldPassword, newPassword) {
|
|
||||||
const cli = MatrixClientPeg.get();
|
|
||||||
|
|
||||||
const authDict = {
|
|
||||||
type: 'm.login.password',
|
|
||||||
user: cli.credentials.userId,
|
|
||||||
password: oldPassword,
|
|
||||||
};
|
|
||||||
|
|
||||||
return cli.setPassword(authDict, newPassword);
|
|
||||||
},
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Returns the email pusher (pusher of type 'email') for a given
|
* Returns the email pusher (pusher of type 'email') for a given
|
||||||
* email address. Email pushers all have the same app ID, so since
|
* email address. Email pushers all have the same app ID, so since
|
||||||
|
@ -74,10 +38,6 @@ export default {
|
||||||
return undefined;
|
return undefined;
|
||||||
},
|
},
|
||||||
|
|
||||||
hasEmailPusher: function(pushers, address) {
|
|
||||||
return this.getEmailPusher(pushers, address) !== undefined;
|
|
||||||
},
|
|
||||||
|
|
||||||
addEmailPusher: function(address, data) {
|
addEmailPusher: function(address, data) {
|
||||||
return MatrixClientPeg.get().setPusher({
|
return MatrixClientPeg.get().setPusher({
|
||||||
kind: 'email',
|
kind: 'email',
|
||||||
|
|
|
@ -57,7 +57,6 @@ const LoggedInView = React.createClass({
|
||||||
matrixClient: PropTypes.instanceOf(Matrix.MatrixClient).isRequired,
|
matrixClient: PropTypes.instanceOf(Matrix.MatrixClient).isRequired,
|
||||||
page_type: PropTypes.string.isRequired,
|
page_type: PropTypes.string.isRequired,
|
||||||
onRoomCreated: PropTypes.func,
|
onRoomCreated: PropTypes.func,
|
||||||
onUserSettingsClose: PropTypes.func,
|
|
||||||
|
|
||||||
// Called with the credentials of a registered user (if they were a ROU that
|
// Called with the credentials of a registered user (if they were a ROU that
|
||||||
// transitioned to PWLU)
|
// transitioned to PWLU)
|
||||||
|
@ -421,7 +420,6 @@ const LoggedInView = React.createClass({
|
||||||
render: function() {
|
render: function() {
|
||||||
const LeftPanel = sdk.getComponent('structures.LeftPanel');
|
const LeftPanel = sdk.getComponent('structures.LeftPanel');
|
||||||
const RoomView = sdk.getComponent('structures.RoomView');
|
const RoomView = sdk.getComponent('structures.RoomView');
|
||||||
const UserSettings = sdk.getComponent('structures.UserSettings');
|
|
||||||
const HomePage = sdk.getComponent('structures.HomePage');
|
const HomePage = sdk.getComponent('structures.HomePage');
|
||||||
const GroupView = sdk.getComponent('structures.GroupView');
|
const GroupView = sdk.getComponent('structures.GroupView');
|
||||||
const MyGroups = sdk.getComponent('structures.MyGroups');
|
const MyGroups = sdk.getComponent('structures.MyGroups');
|
||||||
|
@ -451,13 +449,6 @@ const LoggedInView = React.createClass({
|
||||||
/>;
|
/>;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case PageTypes.UserSettings:
|
|
||||||
pageElement = <UserSettings
|
|
||||||
onClose={this.props.onCloseAllSettings}
|
|
||||||
brand={this.props.config.brand}
|
|
||||||
/>;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case PageTypes.MyGroups:
|
case PageTypes.MyGroups:
|
||||||
pageElement = <MyGroups />;
|
pageElement = <MyGroups />;
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -136,10 +136,6 @@ export default React.createClass({
|
||||||
appConfig: PropTypes.object,
|
appConfig: PropTypes.object,
|
||||||
},
|
},
|
||||||
|
|
||||||
AuxPanel: {
|
|
||||||
RoomSettings: "room_settings",
|
|
||||||
},
|
|
||||||
|
|
||||||
getChildContext: function() {
|
getChildContext: function() {
|
||||||
return {
|
return {
|
||||||
appConfig: this.props.config,
|
appConfig: this.props.config,
|
||||||
|
@ -572,40 +568,16 @@ export default React.createClass({
|
||||||
this._viewIndexedRoom(payload.roomIndex);
|
this._viewIndexedRoom(payload.roomIndex);
|
||||||
break;
|
break;
|
||||||
case 'view_user_settings': {
|
case 'view_user_settings': {
|
||||||
if (true || SettingsStore.isFeatureEnabled("feature_tabbed_settings")) {
|
const UserSettingsDialog = sdk.getComponent("dialogs.UserSettingsDialog");
|
||||||
const UserSettingsDialog = sdk.getComponent("dialogs.UserSettingsDialog");
|
Modal.createTrackedDialog('User settings', '', UserSettingsDialog, {}, 'mx_SettingsDialog');
|
||||||
Modal.createTrackedDialog('User settings', '', UserSettingsDialog, {}, 'mx_SettingsDialog');
|
|
||||||
} else {
|
// View the home page if we need something to look at
|
||||||
this._setPage(PageTypes.UserSettings);
|
if (!this.state.currentGroupId && !this.state.currentRoomId) {
|
||||||
this.notifyNewScreen('settings');
|
this._setPage(PageTypes.HomePage);
|
||||||
|
this.notifyNewScreen('home');
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 'view_old_user_settings':
|
|
||||||
this._setPage(PageTypes.UserSettings);
|
|
||||||
this.notifyNewScreen('settings');
|
|
||||||
break;
|
|
||||||
case 'close_settings':
|
|
||||||
this.setState({
|
|
||||||
leftDisabled: false,
|
|
||||||
rightDisabled: false,
|
|
||||||
middleDisabled: false,
|
|
||||||
});
|
|
||||||
if (this.state.page_type === PageTypes.UserSettings) {
|
|
||||||
// We do this to get setPage and notifyNewScreen
|
|
||||||
if (this.state.currentRoomId) {
|
|
||||||
this._viewRoom({
|
|
||||||
room_id: this.state.currentRoomId,
|
|
||||||
});
|
|
||||||
} else if (this.state.currentGroupId) {
|
|
||||||
this._viewGroup({
|
|
||||||
group_id: this.state.currentGroupId,
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
this._viewHome();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 'view_create_room':
|
case 'view_create_room':
|
||||||
this._createRoom();
|
this._createRoom();
|
||||||
break;
|
break;
|
||||||
|
@ -1063,7 +1035,6 @@ export default React.createClass({
|
||||||
modal.close();
|
modal.close();
|
||||||
if (this.state.currentRoomId === roomId) {
|
if (this.state.currentRoomId === roomId) {
|
||||||
dis.dispatch({action: 'view_next_room'});
|
dis.dispatch({action: 'view_next_room'});
|
||||||
dis.dispatch({action: 'close_room_settings'});
|
|
||||||
}
|
}
|
||||||
}, (err) => {
|
}, (err) => {
|
||||||
modal.close();
|
modal.close();
|
||||||
|
|
|
@ -119,8 +119,6 @@ module.exports = React.createClass({
|
||||||
isInitialEventHighlighted: null,
|
isInitialEventHighlighted: null,
|
||||||
|
|
||||||
forwardingEvent: null,
|
forwardingEvent: null,
|
||||||
editingRoomSettings: false,
|
|
||||||
uploadingRoomSettings: false,
|
|
||||||
numUnreadMessages: 0,
|
numUnreadMessages: 0,
|
||||||
draggingFile: false,
|
draggingFile: false,
|
||||||
searching: false,
|
searching: false,
|
||||||
|
@ -229,11 +227,8 @@ module.exports = React.createClass({
|
||||||
forwardingEvent: RoomViewStore.getForwardingEvent(),
|
forwardingEvent: RoomViewStore.getForwardingEvent(),
|
||||||
shouldPeek: RoomViewStore.shouldPeek(),
|
shouldPeek: RoomViewStore.shouldPeek(),
|
||||||
showingPinned: SettingsStore.getValue("PinnedEvents.isOpen", RoomViewStore.getRoomId()),
|
showingPinned: SettingsStore.getValue("PinnedEvents.isOpen", RoomViewStore.getRoomId()),
|
||||||
editingRoomSettings: RoomViewStore.isEditingSettings(),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
if (this.state.editingRoomSettings && !newState.editingRoomSettings) dis.dispatch({action: 'focus_composer'});
|
|
||||||
|
|
||||||
// Temporary logging to diagnose https://github.com/vector-im/riot-web/issues/4307
|
// Temporary logging to diagnose https://github.com/vector-im/riot-web/issues/4307
|
||||||
console.log(
|
console.log(
|
||||||
'RVS update:',
|
'RVS update:',
|
||||||
|
@ -1117,7 +1112,7 @@ module.exports = React.createClass({
|
||||||
// favour longer (more specific) terms first
|
// favour longer (more specific) terms first
|
||||||
highlights = highlights.sort(function(a, b) {
|
highlights = highlights.sort(function(a, b) {
|
||||||
return b.length - a.length;
|
return b.length - a.length;
|
||||||
});
|
});
|
||||||
|
|
||||||
self.setState({
|
self.setState({
|
||||||
searchHighlights: highlights,
|
searchHighlights: highlights,
|
||||||
|
@ -1231,50 +1226,9 @@ module.exports = React.createClass({
|
||||||
dis.dispatch({ action: 'open_room_settings' });
|
dis.dispatch({ action: 'open_room_settings' });
|
||||||
},
|
},
|
||||||
|
|
||||||
onSettingsSaveClick: function() {
|
|
||||||
if (!this.refs.room_settings) return;
|
|
||||||
|
|
||||||
this.setState({
|
|
||||||
uploadingRoomSettings: true,
|
|
||||||
});
|
|
||||||
|
|
||||||
const newName = this.refs.header.getEditedName();
|
|
||||||
if (newName !== undefined) {
|
|
||||||
this.refs.room_settings.setName(newName);
|
|
||||||
}
|
|
||||||
const newTopic = this.refs.header.getEditedTopic();
|
|
||||||
if (newTopic !== undefined) {
|
|
||||||
this.refs.room_settings.setTopic(newTopic);
|
|
||||||
}
|
|
||||||
|
|
||||||
this.refs.room_settings.save().then((results) => {
|
|
||||||
const fails = results.filter(function(result) { return result.state !== "fulfilled"; });
|
|
||||||
console.log("Settings saved with %s errors", fails.length);
|
|
||||||
if (fails.length) {
|
|
||||||
fails.forEach(function(result) {
|
|
||||||
console.error(result.reason);
|
|
||||||
});
|
|
||||||
const ErrorDialog = sdk.getComponent("dialogs.ErrorDialog");
|
|
||||||
Modal.createTrackedDialog('Failed to save room settings', '', ErrorDialog, {
|
|
||||||
title: _t("Failed to save settings"),
|
|
||||||
description: fails.map(function(result) { return result.reason; }).join("\n"),
|
|
||||||
});
|
|
||||||
// still editing room settings
|
|
||||||
} else {
|
|
||||||
dis.dispatch({ action: 'close_settings' });
|
|
||||||
}
|
|
||||||
}).finally(() => {
|
|
||||||
this.setState({
|
|
||||||
uploadingRoomSettings: false,
|
|
||||||
});
|
|
||||||
dis.dispatch({ action: 'close_settings' });
|
|
||||||
}).done();
|
|
||||||
},
|
|
||||||
|
|
||||||
onCancelClick: function() {
|
onCancelClick: function() {
|
||||||
console.log("updateTint from onCancelClick");
|
console.log("updateTint from onCancelClick");
|
||||||
this.updateTint();
|
this.updateTint();
|
||||||
dis.dispatch({ action: 'close_settings' });
|
|
||||||
if (this.state.forwardingEvent) {
|
if (this.state.forwardingEvent) {
|
||||||
dis.dispatch({
|
dis.dispatch({
|
||||||
action: 'forward_event',
|
action: 'forward_event',
|
||||||
|
@ -1432,7 +1386,7 @@ module.exports = React.createClass({
|
||||||
(83 + // height of RoomHeader
|
(83 + // height of RoomHeader
|
||||||
36 + // height of the status area
|
36 + // height of the status area
|
||||||
72 + // minimum height of the message compmoser
|
72 + // minimum height of the message compmoser
|
||||||
(this.state.editingRoomSettings ? (window.innerHeight * 0.3) : 120)); // amount of desired scrollback
|
120); // amount of desired scrollback
|
||||||
|
|
||||||
// XXX: this is a bit of a hack and might possibly cause the video to push out the page anyway
|
// XXX: this is a bit of a hack and might possibly cause the video to push out the page anyway
|
||||||
// but it's better than the video going missing entirely
|
// but it's better than the video going missing entirely
|
||||||
|
@ -1532,7 +1486,6 @@ module.exports = React.createClass({
|
||||||
const RoomHeader = sdk.getComponent('rooms.RoomHeader');
|
const RoomHeader = sdk.getComponent('rooms.RoomHeader');
|
||||||
const MessageComposer = sdk.getComponent('rooms.MessageComposer');
|
const MessageComposer = sdk.getComponent('rooms.MessageComposer');
|
||||||
const ForwardMessage = sdk.getComponent("rooms.ForwardMessage");
|
const ForwardMessage = sdk.getComponent("rooms.ForwardMessage");
|
||||||
const RoomSettings = sdk.getComponent("rooms.RoomSettings");
|
|
||||||
const AuxPanel = sdk.getComponent("rooms.AuxPanel");
|
const AuxPanel = sdk.getComponent("rooms.AuxPanel");
|
||||||
const SearchBar = sdk.getComponent("rooms.SearchBar");
|
const SearchBar = sdk.getComponent("rooms.SearchBar");
|
||||||
const PinnedEventsPanel = sdk.getComponent("rooms.PinnedEventsPanel");
|
const PinnedEventsPanel = sdk.getComponent("rooms.PinnedEventsPanel");
|
||||||
|
@ -1690,11 +1643,7 @@ module.exports = React.createClass({
|
||||||
|
|
||||||
let aux = null;
|
let aux = null;
|
||||||
let hideCancel = false;
|
let hideCancel = false;
|
||||||
if (this.state.editingRoomSettings) {
|
if (this.state.forwardingEvent !== null) {
|
||||||
aux = <RoomSettings ref="room_settings" onSaveClick={this.onSettingsSaveClick} onCancelClick={this.onCancelClick} room={this.state.room} />;
|
|
||||||
} else if (this.state.uploadingRoomSettings) {
|
|
||||||
aux = <Loader />;
|
|
||||||
} else if (this.state.forwardingEvent !== null) {
|
|
||||||
aux = <ForwardMessage onCancelClick={this.onCancelClick} />;
|
aux = <ForwardMessage onCancelClick={this.onCancelClick} />;
|
||||||
} else if (this.state.searching) {
|
} else if (this.state.searching) {
|
||||||
hideCancel = true; // has own cancel
|
hideCancel = true; // has own cancel
|
||||||
|
@ -1736,7 +1685,7 @@ module.exports = React.createClass({
|
||||||
|
|
||||||
const auxPanel = (
|
const auxPanel = (
|
||||||
<AuxPanel ref="auxPanel" room={this.state.room}
|
<AuxPanel ref="auxPanel" room={this.state.room}
|
||||||
fullHeight={this.state.editingRoomSettings}
|
fullHeight={false}
|
||||||
userId={MatrixClientPeg.get().credentials.userId}
|
userId={MatrixClientPeg.get().credentials.userId}
|
||||||
conferenceHandler={this.props.ConferenceHandler}
|
conferenceHandler={this.props.ConferenceHandler}
|
||||||
draggingFile={this.state.draggingFile}
|
draggingFile={this.state.draggingFile}
|
||||||
|
@ -1744,7 +1693,7 @@ module.exports = React.createClass({
|
||||||
maxHeight={this.state.auxPanelMaxHeight}
|
maxHeight={this.state.auxPanelMaxHeight}
|
||||||
onResize={this.onChildResize}
|
onResize={this.onChildResize}
|
||||||
showApps={this.state.showApps}
|
showApps={this.state.showApps}
|
||||||
hideAppsDrawer={this.state.editingRoomSettings} >
|
hideAppsDrawer={false} >
|
||||||
{ aux }
|
{ aux }
|
||||||
</AuxPanel>
|
</AuxPanel>
|
||||||
);
|
);
|
||||||
|
@ -1904,14 +1853,11 @@ module.exports = React.createClass({
|
||||||
<main className={"mx_RoomView" + (inCall ? " mx_RoomView_inCall" : "")} ref="roomView">
|
<main className={"mx_RoomView" + (inCall ? " mx_RoomView_inCall" : "")} ref="roomView">
|
||||||
<RoomHeader ref="header" room={this.state.room} searchInfo={searchInfo}
|
<RoomHeader ref="header" room={this.state.room} searchInfo={searchInfo}
|
||||||
oobData={this.props.oobData}
|
oobData={this.props.oobData}
|
||||||
editing={this.state.editingRoomSettings}
|
|
||||||
saving={this.state.uploadingRoomSettings}
|
|
||||||
inRoom={myMembership === 'join'}
|
inRoom={myMembership === 'join'}
|
||||||
collapsedRhs={this.props.collapsedRhs}
|
collapsedRhs={this.props.collapsedRhs}
|
||||||
onSearchClick={this.onSearchClick}
|
onSearchClick={this.onSearchClick}
|
||||||
onSettingsClick={this.onSettingsClick}
|
onSettingsClick={this.onSettingsClick}
|
||||||
onPinnedClick={this.onPinnedClick}
|
onPinnedClick={this.onPinnedClick}
|
||||||
onSaveClick={this.onSettingsSaveClick}
|
|
||||||
onCancelClick={(aux && !hideCancel) ? this.onCancelClick : null}
|
onCancelClick={(aux && !hideCancel) ? this.onCancelClick : null}
|
||||||
onForgetClick={(myMembership === "leave") ? this.onForgetClick : null}
|
onForgetClick={(myMembership === "leave") ? this.onForgetClick : null}
|
||||||
onLeaveClick={(myMembership === "join") ? this.onLeaveClick : null}
|
onLeaveClick={(myMembership === "join") ? this.onLeaveClick : null}
|
||||||
|
|
|
@ -74,7 +74,6 @@ export class TabbedView extends React.Component {
|
||||||
|
|
||||||
const idx = this.props.tabs.indexOf(tab);
|
const idx = this.props.tabs.indexOf(tab);
|
||||||
if (idx === this._getActiveTabIndex()) classes += "mx_TabbedView_tabLabel_active";
|
if (idx === this._getActiveTabIndex()) classes += "mx_TabbedView_tabLabel_active";
|
||||||
if (tab.label === "Visit old settings") classes += "mx_TabbedView_tabLabel_TEMP_HACK";
|
|
||||||
|
|
||||||
let tabIcon = null;
|
let tabIcon = null;
|
||||||
if (tab.icon) {
|
if (tab.icon) {
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -334,7 +334,7 @@ export const TermsAuthEntry = React.createClass({
|
||||||
let submitButton;
|
let submitButton;
|
||||||
if (this.props.showContinue !== false) {
|
if (this.props.showContinue !== false) {
|
||||||
// XXX: button classes
|
// XXX: button classes
|
||||||
submitButton = <button className="mx_InteractiveAuthEntryComponents_termsSubmit mx_UserSettings_button"
|
submitButton = <button className="mx_InteractiveAuthEntryComponents_termsSubmit mx_GeneralButton"
|
||||||
onClick={this._trySubmit} disabled={!allChecked}>{_t("Accept")}</button>;
|
onClick={this._trySubmit} disabled={!allChecked}>{_t("Accept")}</button>;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -525,7 +525,7 @@ export const MsisdnAuthEntry = React.createClass({
|
||||||
const enableSubmit = Boolean(this.state.token);
|
const enableSubmit = Boolean(this.state.token);
|
||||||
const submitClasses = classnames({
|
const submitClasses = classnames({
|
||||||
mx_InteractiveAuthEntryComponents_msisdnSubmit: true,
|
mx_InteractiveAuthEntryComponents_msisdnSubmit: true,
|
||||||
mx_UserSettings_button: true, // XXX button classes
|
mx_GeneralButton: true,
|
||||||
});
|
});
|
||||||
let errorSection;
|
let errorSection;
|
||||||
if (this.state.errorText) {
|
if (this.state.errorText) {
|
||||||
|
|
|
@ -241,7 +241,7 @@ export default class DeviceVerifyDialog extends React.Component {
|
||||||
"and ask them whether the key they see in their User Settings " +
|
"and ask them whether the key they see in their User Settings " +
|
||||||
"for this device matches the key below:") }
|
"for this device matches the key below:") }
|
||||||
</p>
|
</p>
|
||||||
<div className="mx_UserSettings_cryptoSection">
|
<div className="mx_DeviceVerifyDialog_cryptoSection">
|
||||||
<ul>
|
<ul>
|
||||||
<li><label>{ _t("Device name") }:</label> <span>{ this.props.device.getDisplayName() }</span></li>
|
<li><label>{ _t("Device name") }:</label> <span>{ this.props.device.getDisplayName() }</span></li>
|
||||||
<li><label>{ _t("Device ID") }:</label> <span><code>{ this.props.device.deviceId }</code></span></li>
|
<li><label>{ _t("Device ID") }:</label> <span><code>{ this.props.device.deviceId }</code></span></li>
|
||||||
|
|
|
@ -77,7 +77,7 @@ export default React.createClass({
|
||||||
<div role="alert">{ this.state.authError.message || this.state.authError.toString() }</div>
|
<div role="alert">{ this.state.authError.message || this.state.authError.toString() }</div>
|
||||||
<br />
|
<br />
|
||||||
<AccessibleButton onClick={this._onDismissClick}
|
<AccessibleButton onClick={this._onDismissClick}
|
||||||
className="mx_UserSettings_button"
|
className="mx_GeneralButton"
|
||||||
autoFocus="true"
|
autoFocus="true"
|
||||||
>
|
>
|
||||||
{ _t("Dismiss") }
|
{ _t("Dismiss") }
|
||||||
|
|
|
@ -19,47 +19,17 @@ import PropTypes from 'prop-types';
|
||||||
import {Tab, TabbedView} from "../../structures/TabbedView";
|
import {Tab, TabbedView} from "../../structures/TabbedView";
|
||||||
import {_t, _td} from "../../../languageHandler";
|
import {_t, _td} from "../../../languageHandler";
|
||||||
import AdvancedRoomSettingsTab from "../settings/tabs/AdvancedRoomSettingsTab";
|
import AdvancedRoomSettingsTab from "../settings/tabs/AdvancedRoomSettingsTab";
|
||||||
import dis from '../../../dispatcher';
|
|
||||||
import RolesRoomSettingsTab from "../settings/tabs/RolesRoomSettingsTab";
|
import RolesRoomSettingsTab from "../settings/tabs/RolesRoomSettingsTab";
|
||||||
import GeneralRoomSettingsTab from "../settings/tabs/GeneralRoomSettingsTab";
|
import GeneralRoomSettingsTab from "../settings/tabs/GeneralRoomSettingsTab";
|
||||||
import SecurityRoomSettingsTab from "../settings/tabs/SecurityRoomSettingsTab";
|
import SecurityRoomSettingsTab from "../settings/tabs/SecurityRoomSettingsTab";
|
||||||
import sdk from "../../../index";
|
import sdk from "../../../index";
|
||||||
|
|
||||||
// TODO: Ditch this whole component
|
|
||||||
export class TempTab extends React.Component {
|
|
||||||
static propTypes = {
|
|
||||||
onClose: PropTypes.func.isRequired,
|
|
||||||
};
|
|
||||||
|
|
||||||
componentDidMount(): void {
|
|
||||||
dis.dispatch({action: "open_old_room_settings"});
|
|
||||||
this.props.onClose();
|
|
||||||
}
|
|
||||||
|
|
||||||
render() {
|
|
||||||
return <div>Hello World</div>;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export default class RoomSettingsDialog extends React.Component {
|
export default class RoomSettingsDialog extends React.Component {
|
||||||
static propTypes = {
|
static propTypes = {
|
||||||
roomId: PropTypes.string.isRequired,
|
roomId: PropTypes.string.isRequired,
|
||||||
onFinished: PropTypes.func.isRequired,
|
onFinished: PropTypes.func.isRequired,
|
||||||
};
|
};
|
||||||
|
|
||||||
componentWillMount(): void {
|
|
||||||
this.dispatcherRef = dis.register(this._onAction);
|
|
||||||
}
|
|
||||||
|
|
||||||
componentWillUnmount(): void {
|
|
||||||
dis.unregister(this.dispatcherRef);
|
|
||||||
}
|
|
||||||
|
|
||||||
_onAction = (payload) => {
|
|
||||||
if (payload.action !== 'close_room_settings') return;
|
|
||||||
this.props.onFinished();
|
|
||||||
};
|
|
||||||
|
|
||||||
_getTabs() {
|
_getTabs() {
|
||||||
const tabs = [];
|
const tabs = [];
|
||||||
|
|
||||||
|
@ -83,11 +53,6 @@ export default class RoomSettingsDialog extends React.Component {
|
||||||
"mx_RoomSettingsDialog_warningIcon",
|
"mx_RoomSettingsDialog_warningIcon",
|
||||||
<AdvancedRoomSettingsTab roomId={this.props.roomId} />,
|
<AdvancedRoomSettingsTab roomId={this.props.roomId} />,
|
||||||
));
|
));
|
||||||
// tabs.push(new Tab(
|
|
||||||
// _td("Visit old settings"),
|
|
||||||
// "mx_RoomSettingsDialog_warningIcon",
|
|
||||||
// <TempTab onClose={this.props.onFinished} />,
|
|
||||||
// ));
|
|
||||||
|
|
||||||
return tabs;
|
return tabs;
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,7 +19,6 @@ import PropTypes from 'prop-types';
|
||||||
import {Tab, TabbedView} from "../../structures/TabbedView";
|
import {Tab, TabbedView} from "../../structures/TabbedView";
|
||||||
import {_t, _td} from "../../../languageHandler";
|
import {_t, _td} from "../../../languageHandler";
|
||||||
import GeneralUserSettingsTab from "../settings/tabs/GeneralUserSettingsTab";
|
import GeneralUserSettingsTab from "../settings/tabs/GeneralUserSettingsTab";
|
||||||
import dis from '../../../dispatcher';
|
|
||||||
import SettingsStore from "../../../settings/SettingsStore";
|
import SettingsStore from "../../../settings/SettingsStore";
|
||||||
import LabsSettingsTab from "../settings/tabs/LabsSettingsTab";
|
import LabsSettingsTab from "../settings/tabs/LabsSettingsTab";
|
||||||
import SecuritySettingsTab from "../settings/tabs/SecuritySettingsTab";
|
import SecuritySettingsTab from "../settings/tabs/SecuritySettingsTab";
|
||||||
|
@ -30,22 +29,6 @@ import HelpSettingsTab from "../settings/tabs/HelpSettingsTab";
|
||||||
import FlairSettingsTab from "../settings/tabs/FlairSettingsTab";
|
import FlairSettingsTab from "../settings/tabs/FlairSettingsTab";
|
||||||
import sdk from "../../../index";
|
import sdk from "../../../index";
|
||||||
|
|
||||||
// TODO: Ditch this whole component
|
|
||||||
export class TempTab extends React.Component {
|
|
||||||
static propTypes = {
|
|
||||||
onClose: PropTypes.func.isRequired,
|
|
||||||
};
|
|
||||||
|
|
||||||
componentDidMount(): void {
|
|
||||||
dis.dispatch({action: "view_old_user_settings"});
|
|
||||||
this.props.onClose();
|
|
||||||
}
|
|
||||||
|
|
||||||
render() {
|
|
||||||
return <div>Hello World</div>;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export default class UserSettingsDialog extends React.Component {
|
export default class UserSettingsDialog extends React.Component {
|
||||||
static propTypes = {
|
static propTypes = {
|
||||||
onFinished: PropTypes.func.isRequired,
|
onFinished: PropTypes.func.isRequired,
|
||||||
|
@ -96,11 +79,6 @@ export default class UserSettingsDialog extends React.Component {
|
||||||
"mx_UserSettingsDialog_helpIcon",
|
"mx_UserSettingsDialog_helpIcon",
|
||||||
<HelpSettingsTab closeSettingsFn={this.props.onFinished} />,
|
<HelpSettingsTab closeSettingsFn={this.props.onFinished} />,
|
||||||
));
|
));
|
||||||
// tabs.push(new Tab(
|
|
||||||
// _td("Visit old settings"),
|
|
||||||
// "mx_UserSettingsDialog_helpIcon",
|
|
||||||
// <TempTab onClose={this.props.onFinished} />,
|
|
||||||
// ));
|
|
||||||
|
|
||||||
return tabs;
|
return tabs;
|
||||||
}
|
}
|
||||||
|
|
|
@ -76,7 +76,7 @@ export default class ManageIntegsButton extends React.Component {
|
||||||
if (this.scalarClient !== null) {
|
if (this.scalarClient !== null) {
|
||||||
const integrationsButtonClasses = classNames({
|
const integrationsButtonClasses = classNames({
|
||||||
mx_RoomHeader_button: true,
|
mx_RoomHeader_button: true,
|
||||||
mx_RoomSettings_integrationsButton_error: !!this.state.scalarError,
|
mx_ManageIntegsButton_error: !!this.state.scalarError,
|
||||||
});
|
});
|
||||||
|
|
||||||
if (this.state.scalarError && !this.scalarClient.hasCredentials()) {
|
if (this.state.scalarError && !this.scalarClient.hasCredentials()) {
|
||||||
|
@ -87,7 +87,7 @@ export default class ManageIntegsButton extends React.Component {
|
||||||
/>;
|
/>;
|
||||||
// Popup shown when hovering over integrationsButton_error (via CSS)
|
// Popup shown when hovering over integrationsButton_error (via CSS)
|
||||||
integrationsErrorPopup = (
|
integrationsErrorPopup = (
|
||||||
<span className="mx_RoomSettings_integrationsButton_errorPopup">
|
<span className="mx_ManageIntegsButton_errorPopup">
|
||||||
{ _t('Could not connect to the integration server') }
|
{ _t('Could not connect to the integration server') }
|
||||||
</span>
|
</span>
|
||||||
);
|
);
|
||||||
|
|
|
@ -256,16 +256,16 @@ module.exports = React.createClass({
|
||||||
if (this.state.remoteDomains.length) {
|
if (this.state.remoteDomains.length) {
|
||||||
remote_aliases_section = (
|
remote_aliases_section = (
|
||||||
<div>
|
<div>
|
||||||
<div className="mx_RoomSettings_aliasLabel">
|
<div>
|
||||||
{ _t("Remote addresses for this room:") }
|
{ _t("Remote addresses for this room:") }
|
||||||
</div>
|
</div>
|
||||||
<div className="mx_RoomSettings_aliasesTable">
|
<div>
|
||||||
{ this.state.remoteDomains.map((domain, i) => {
|
{ this.state.remoteDomains.map((domain, i) => {
|
||||||
return this.state.domainToAliases[domain].map(function(alias, j) {
|
return this.state.domainToAliases[domain].map(function(alias, j) {
|
||||||
return (
|
return (
|
||||||
<div className="mx_RoomSettings_aliasesTableRow" key={i + "_" + j}>
|
<div key={i + "_" + j}>
|
||||||
<EditableText
|
<EditableText
|
||||||
className="mx_RoomSettings_alias mx_RoomSettings_editable"
|
className="mx_AliasSettings_alias mx_AliasSettings_editable"
|
||||||
blurToCancel={false}
|
blurToCancel={false}
|
||||||
editable={false}
|
editable={false}
|
||||||
initialValue={alias} />
|
initialValue={alias} />
|
||||||
|
|
|
@ -39,6 +39,10 @@ const ROOM_COLORS = [
|
||||||
//["#595959", "#ececec"], // Grey makes everything appear disabled, so remove it for now
|
//["#595959", "#ececec"], // Grey makes everything appear disabled, so remove it for now
|
||||||
];
|
];
|
||||||
|
|
||||||
|
// Dev note: this component is not attached anywhere, but is left here as it
|
||||||
|
// has a high possibility of being used in the nearish future.
|
||||||
|
// Ref: https://github.com/vector-im/riot-web/issues/8421
|
||||||
|
|
||||||
module.exports = React.createClass({
|
module.exports = React.createClass({
|
||||||
displayName: 'ColorSettings',
|
displayName: 'ColorSettings',
|
||||||
|
|
||||||
|
@ -125,24 +129,24 @@ module.exports = React.createClass({
|
||||||
|
|
||||||
render: function() {
|
render: function() {
|
||||||
return (
|
return (
|
||||||
<div className="mx_RoomSettings_roomColors">
|
<div className="mx_ColorSettings_roomColors">
|
||||||
{ ROOM_COLORS.map((room_color, i) => {
|
{ ROOM_COLORS.map((room_color, i) => {
|
||||||
let selected;
|
let selected;
|
||||||
if (i === this.state.index) {
|
if (i === this.state.index) {
|
||||||
selected = (
|
selected = (
|
||||||
<div className="mx_RoomSettings_roomColor_selected">
|
<div className="mx_ColorSettings_roomColor_selected">
|
||||||
<img src={require("../../../../res/img/tick.svg")} width="17" height="14" alt="./" />
|
<img src={require("../../../../res/img/tick.svg")} width="17" height="14" alt="./" />
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
const boundClick = this._onColorSchemeChanged.bind(this, i);
|
const boundClick = this._onColorSchemeChanged.bind(this, i);
|
||||||
return (
|
return (
|
||||||
<div className="mx_RoomSettings_roomColor"
|
<div className="mx_ColorSettings_roomColor"
|
||||||
key={"room_color_" + i}
|
key={"room_color_" + i}
|
||||||
style={{ backgroundColor: room_color[1] }}
|
style={{ backgroundColor: room_color[1] }}
|
||||||
onClick={boundClick}>
|
onClick={boundClick}>
|
||||||
{ selected }
|
{ selected }
|
||||||
<div className="mx_RoomSettings_roomColorPrimary" style={{ backgroundColor: room_color[0] }}></div>
|
<div className="mx_ColorSettings_roomColorPrimary" style={{ backgroundColor: room_color[0] }}></div>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}) }
|
}) }
|
||||||
|
|
|
@ -43,13 +43,10 @@ module.exports = React.createClass({
|
||||||
propTypes: {
|
propTypes: {
|
||||||
room: PropTypes.object,
|
room: PropTypes.object,
|
||||||
oobData: PropTypes.object,
|
oobData: PropTypes.object,
|
||||||
editing: PropTypes.bool,
|
|
||||||
saving: PropTypes.bool,
|
|
||||||
inRoom: PropTypes.bool,
|
inRoom: PropTypes.bool,
|
||||||
collapsedRhs: PropTypes.bool,
|
collapsedRhs: PropTypes.bool,
|
||||||
onSettingsClick: PropTypes.func,
|
onSettingsClick: PropTypes.func,
|
||||||
onPinnedClick: PropTypes.func,
|
onPinnedClick: PropTypes.func,
|
||||||
onSaveClick: PropTypes.func,
|
|
||||||
onSearchClick: PropTypes.func,
|
onSearchClick: PropTypes.func,
|
||||||
onLeaveClick: PropTypes.func,
|
onLeaveClick: PropTypes.func,
|
||||||
onCancelClick: PropTypes.func,
|
onCancelClick: PropTypes.func,
|
||||||
|
@ -60,7 +57,6 @@ module.exports = React.createClass({
|
||||||
return {
|
return {
|
||||||
editing: false,
|
editing: false,
|
||||||
inRoom: false,
|
inRoom: false,
|
||||||
onSaveClick: function() {},
|
|
||||||
onCancelClick: null,
|
onCancelClick: null,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
@ -120,33 +116,6 @@ module.exports = React.createClass({
|
||||||
this.forceUpdate();
|
this.forceUpdate();
|
||||||
},
|
},
|
||||||
|
|
||||||
onAvatarPickerClick: function(ev) {
|
|
||||||
if (this.refs.file_label) {
|
|
||||||
this.refs.file_label.click();
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
onAvatarSelected: function(ev) {
|
|
||||||
const changeAvatar = this.refs.changeAvatar;
|
|
||||||
if (!changeAvatar) {
|
|
||||||
console.error("No ChangeAvatar found to upload image to!");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
changeAvatar.onFileSelected(ev).catch(function(err) {
|
|
||||||
const errMsg = (typeof err === "string") ? err : (err.error || "");
|
|
||||||
const ErrorDialog = sdk.getComponent("dialogs.ErrorDialog");
|
|
||||||
console.error("Failed to set avatar: " + errMsg);
|
|
||||||
Modal.createTrackedDialog('Failed to set avatar', '', ErrorDialog, {
|
|
||||||
title: _t("Error"),
|
|
||||||
description: _t("Failed to set avatar."),
|
|
||||||
});
|
|
||||||
}).done();
|
|
||||||
},
|
|
||||||
|
|
||||||
onAvatarRemoveClick: function() {
|
|
||||||
MatrixClientPeg.get().sendStateEvent(this.props.room.roomId, 'm.room.avatar', {url: null}, '');
|
|
||||||
},
|
|
||||||
|
|
||||||
onShareRoomClick: function(ev) {
|
onShareRoomClick: function(ev) {
|
||||||
const ShareDialog = sdk.getComponent("dialogs.ShareDialog");
|
const ShareDialog = sdk.getComponent("dialogs.ShareDialog");
|
||||||
Modal.createTrackedDialog('share room dialog', '', ShareDialog, {
|
Modal.createTrackedDialog('share room dialog', '', ShareDialog, {
|
||||||
|
@ -180,65 +149,16 @@ module.exports = React.createClass({
|
||||||
return !(currentPinEvent.getContent().pinned && currentPinEvent.getContent().pinned.length <= 0);
|
return !(currentPinEvent.getContent().pinned && currentPinEvent.getContent().pinned.length <= 0);
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
|
||||||
* After editing the settings, get the new name for the room
|
|
||||||
*
|
|
||||||
* @return {?string} newName or undefined if we didn't let the user edit the room name
|
|
||||||
*/
|
|
||||||
getEditedName: function() {
|
|
||||||
let newName;
|
|
||||||
if (this.refs.nameEditor) {
|
|
||||||
newName = this.refs.nameEditor.getRoomName();
|
|
||||||
}
|
|
||||||
return newName;
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
|
||||||
* After editing the settings, get the new topic for the room
|
|
||||||
*
|
|
||||||
* @return {?string} newTopic or undefined if we didn't let the user edit the room topic
|
|
||||||
*/
|
|
||||||
getEditedTopic: function() {
|
|
||||||
let newTopic;
|
|
||||||
if (this.refs.topicEditor) {
|
|
||||||
newTopic = this.refs.topicEditor.getTopic();
|
|
||||||
}
|
|
||||||
return newTopic;
|
|
||||||
},
|
|
||||||
|
|
||||||
render: function() {
|
render: function() {
|
||||||
const RoomAvatar = sdk.getComponent("avatars.RoomAvatar");
|
const RoomAvatar = sdk.getComponent("avatars.RoomAvatar");
|
||||||
const ChangeAvatar = sdk.getComponent("settings.ChangeAvatar");
|
|
||||||
const TintableSvg = sdk.getComponent("elements.TintableSvg");
|
const TintableSvg = sdk.getComponent("elements.TintableSvg");
|
||||||
const EmojiText = sdk.getComponent('elements.EmojiText');
|
const EmojiText = sdk.getComponent('elements.EmojiText');
|
||||||
|
|
||||||
let name = null;
|
|
||||||
let searchStatus = null;
|
let searchStatus = null;
|
||||||
let topicElement = null;
|
|
||||||
let cancelButton = null;
|
let cancelButton = null;
|
||||||
let spinner = null;
|
|
||||||
let saveButton = null;
|
|
||||||
let settingsButton = null;
|
let settingsButton = null;
|
||||||
let pinnedEventsButton = null;
|
let pinnedEventsButton = null;
|
||||||
|
|
||||||
let canSetRoomName;
|
|
||||||
let canSetRoomAvatar;
|
|
||||||
let canSetRoomTopic;
|
|
||||||
if (this.props.editing) {
|
|
||||||
// calculate permissions. XXX: this should be done on mount or something
|
|
||||||
const userId = MatrixClientPeg.get().credentials.userId;
|
|
||||||
|
|
||||||
canSetRoomName = this.props.room.currentState.maySendStateEvent('m.room.name', userId);
|
|
||||||
canSetRoomAvatar = this.props.room.currentState.maySendStateEvent('m.room.avatar', userId);
|
|
||||||
canSetRoomTopic = this.props.room.currentState.maySendStateEvent('m.room.topic', userId);
|
|
||||||
|
|
||||||
saveButton = (
|
|
||||||
<AccessibleButton className="mx_RoomHeader_textButton" onClick={this.props.onSaveClick}>
|
|
||||||
{ _t("Save") }
|
|
||||||
</AccessibleButton>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
const e2eIcon = this.props.e2eStatus ?
|
const e2eIcon = this.props.e2eStatus ?
|
||||||
<E2EIcon status={this.props.e2eStatus} /> :
|
<E2EIcon status={this.props.e2eStatus} /> :
|
||||||
undefined;
|
undefined;
|
||||||
|
@ -247,98 +167,56 @@ module.exports = React.createClass({
|
||||||
cancelButton = <CancelButton onClick={this.props.onCancelClick} />;
|
cancelButton = <CancelButton onClick={this.props.onCancelClick} />;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.props.saving) {
|
// don't display the search count until the search completes and
|
||||||
const Spinner = sdk.getComponent("elements.Spinner");
|
// gives us a valid (possibly zero) searchCount.
|
||||||
spinner = <div className="mx_RoomHeader_spinner"><Spinner /></div>;
|
if (this.props.searchInfo &&
|
||||||
|
this.props.searchInfo.searchCount !== undefined &&
|
||||||
|
this.props.searchInfo.searchCount !== null) {
|
||||||
|
searchStatus = <div className="mx_RoomHeader_searchStatus">
|
||||||
|
{ _t("(~%(count)s results)", { count: this.props.searchInfo.searchCount }) }
|
||||||
|
</div>;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (canSetRoomName) {
|
// XXX: this is a bit inefficient - we could just compare room.name for 'Empty room'...
|
||||||
const RoomNameEditor = sdk.getComponent("rooms.RoomNameEditor");
|
let settingsHint = false;
|
||||||
name = <RoomNameEditor ref="nameEditor" room={this.props.room} />;
|
const members = this.props.room ? this.props.room.getJoinedMembers() : undefined;
|
||||||
} else {
|
if (members) {
|
||||||
// don't display the search count until the search completes and
|
if (members.length === 1 && members[0].userId === MatrixClientPeg.get().credentials.userId) {
|
||||||
// gives us a valid (possibly zero) searchCount.
|
const nameEvent = this.props.room.currentState.getStateEvents('m.room.name', '');
|
||||||
if (this.props.searchInfo &&
|
if (!nameEvent || !nameEvent.getContent().name) {
|
||||||
this.props.searchInfo.searchCount !== undefined &&
|
settingsHint = true;
|
||||||
this.props.searchInfo.searchCount !== null) {
|
|
||||||
searchStatus = <div className="mx_RoomHeader_searchStatus">
|
|
||||||
{ _t("(~%(count)s results)", { count: this.props.searchInfo.searchCount }) }
|
|
||||||
</div>;
|
|
||||||
}
|
|
||||||
|
|
||||||
// XXX: this is a bit inefficient - we could just compare room.name for 'Empty room'...
|
|
||||||
let settingsHint = false;
|
|
||||||
const members = this.props.room ? this.props.room.getJoinedMembers() : undefined;
|
|
||||||
if (members) {
|
|
||||||
if (members.length === 1 && members[0].userId === MatrixClientPeg.get().credentials.userId) {
|
|
||||||
const nameEvent = this.props.room.currentState.getStateEvents('m.room.name', '');
|
|
||||||
if (!nameEvent || !nameEvent.getContent().name) {
|
|
||||||
settingsHint = true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
let roomName = _t("Join Room");
|
|
||||||
if (this.props.oobData && this.props.oobData.name) {
|
|
||||||
roomName = this.props.oobData.name;
|
|
||||||
} else if (this.props.room) {
|
|
||||||
roomName = this.props.room.name;
|
|
||||||
}
|
|
||||||
|
|
||||||
const emojiTextClasses = classNames('mx_RoomHeader_nametext', { mx_RoomHeader_settingsHint: settingsHint });
|
|
||||||
name =
|
|
||||||
<div className="mx_RoomHeader_name" onClick={this.props.onSettingsClick}>
|
|
||||||
<EmojiText dir="auto" element="div" className={emojiTextClasses} title={roomName}>{ roomName }</EmojiText>
|
|
||||||
{ searchStatus }
|
|
||||||
</div>;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (canSetRoomTopic) {
|
let roomName = _t("Join Room");
|
||||||
const RoomTopicEditor = sdk.getComponent("rooms.RoomTopicEditor");
|
if (this.props.oobData && this.props.oobData.name) {
|
||||||
topicElement = <RoomTopicEditor ref="topicEditor" room={this.props.room} />;
|
roomName = this.props.oobData.name;
|
||||||
} else {
|
} else if (this.props.room) {
|
||||||
let topic;
|
roomName = this.props.room.name;
|
||||||
if (this.props.room) {
|
|
||||||
const ev = this.props.room.currentState.getStateEvents('m.room.topic', '');
|
|
||||||
if (ev) {
|
|
||||||
topic = ev.getContent().topic;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
topicElement =
|
|
||||||
<div className="mx_RoomHeader_topic" ref="topic" title={topic} dir="auto">{ topic }</div>;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
let roomAvatar = null;
|
const emojiTextClasses = classNames('mx_RoomHeader_nametext', { mx_RoomHeader_settingsHint: settingsHint });
|
||||||
|
const name =
|
||||||
|
<div className="mx_RoomHeader_name" onClick={this.props.onSettingsClick}>
|
||||||
|
<EmojiText dir="auto" element="div" className={emojiTextClasses} title={roomName}>{ roomName }</EmojiText>
|
||||||
|
{ searchStatus }
|
||||||
|
</div>;
|
||||||
|
|
||||||
|
let topic;
|
||||||
|
if (this.props.room) {
|
||||||
|
const ev = this.props.room.currentState.getStateEvents('m.room.topic', '');
|
||||||
|
if (ev) {
|
||||||
|
topic = ev.getContent().topic;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const topicElement =
|
||||||
|
<div className="mx_RoomHeader_topic" ref="topic" title={topic} dir="auto">{ topic }</div>;
|
||||||
const avatarSize = 28;
|
const avatarSize = 28;
|
||||||
if (canSetRoomAvatar) {
|
const roomAvatar = (
|
||||||
roomAvatar = (
|
<RoomAvatar room={this.props.room} width={avatarSize} height={avatarSize} oobData={this.props.oobData}
|
||||||
<div className="mx_RoomHeader_avatarPicker">
|
viewAvatarOnClick={true} />
|
||||||
<div onClick={this.onAvatarPickerClick}>
|
);
|
||||||
<ChangeAvatar ref="changeAvatar" room={this.props.room} showUploadSection={false} width={avatarSize} height={avatarSize} />
|
|
||||||
</div>
|
|
||||||
<div className="mx_RoomHeader_avatarPicker_edit">
|
|
||||||
<label htmlFor="avatarInput" ref="file_label">
|
|
||||||
<img src={require("../../../../res/img/camera.svg")}
|
|
||||||
alt={_t("Upload avatar")} title={_t("Upload avatar")}
|
|
||||||
width="17" height="15" />
|
|
||||||
</label>
|
|
||||||
<input id="avatarInput" type="file" onChange={this.onAvatarSelected} />
|
|
||||||
</div>
|
|
||||||
<div className="mx_RoomHeader_avatarPicker_remove" onClick={this.onAvatarRemoveClick}>
|
|
||||||
<img src={require("../../../../res/img/cancel.svg")}
|
|
||||||
className="mx_filterFlipColor"
|
|
||||||
width="10"
|
|
||||||
alt={_t("Remove avatar")}
|
|
||||||
title={_t("Remove avatar")} />
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
);
|
|
||||||
} else if (this.props.room || (this.props.oobData && this.props.oobData.name)) {
|
|
||||||
roomAvatar = (
|
|
||||||
<RoomAvatar room={this.props.room} width={avatarSize} height={avatarSize} oobData={this.props.oobData}
|
|
||||||
viewAvatarOnClick={true} />
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this.props.onSettingsClick) {
|
if (this.props.onSettingsClick) {
|
||||||
settingsButton =
|
settingsButton =
|
||||||
|
@ -395,7 +273,6 @@ module.exports = React.createClass({
|
||||||
</AccessibleButton>;
|
</AccessibleButton>;
|
||||||
}
|
}
|
||||||
|
|
||||||
let rightRow;
|
|
||||||
let manageIntegsButton;
|
let manageIntegsButton;
|
||||||
if (this.props.room && this.props.room.roomId && this.props.inRoom) {
|
if (this.props.room && this.props.room.roomId && this.props.inRoom) {
|
||||||
manageIntegsButton = <ManageIntegsButton
|
manageIntegsButton = <ManageIntegsButton
|
||||||
|
@ -403,27 +280,23 @@ module.exports = React.createClass({
|
||||||
/>;
|
/>;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!this.props.editing) {
|
const rightRow =
|
||||||
rightRow =
|
<div className="mx_RoomHeader_buttons">
|
||||||
<div className="mx_RoomHeader_buttons">
|
{ settingsButton }
|
||||||
{ settingsButton }
|
{ pinnedEventsButton }
|
||||||
{ pinnedEventsButton }
|
{ shareRoomButton }
|
||||||
{ shareRoomButton }
|
{ manageIntegsButton }
|
||||||
{ manageIntegsButton }
|
{ forgetButton }
|
||||||
{ forgetButton }
|
{ searchButton }
|
||||||
{ searchButton }
|
</div>;
|
||||||
</div>;
|
|
||||||
}
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className={"mx_RoomHeader light-panel " + (this.props.editing ? "mx_RoomHeader_editing" : "")}>
|
<div className="mx_RoomHeader light-panel">
|
||||||
<div className="mx_RoomHeader_wrapper">
|
<div className="mx_RoomHeader_wrapper">
|
||||||
<div className="mx_RoomHeader_avatar">{ roomAvatar }</div>
|
<div className="mx_RoomHeader_avatar">{ roomAvatar }</div>
|
||||||
{ e2eIcon }
|
{ e2eIcon }
|
||||||
{ name }
|
{ name }
|
||||||
{ topicElement }
|
{ topicElement }
|
||||||
{ spinner }
|
|
||||||
{ saveButton }
|
|
||||||
{ cancelButton }
|
{ cancelButton }
|
||||||
{ rightRow }
|
{ rightRow }
|
||||||
<RoomHeaderButtons collapsedRhs={this.props.collapsedRhs} />
|
<RoomHeaderButtons collapsedRhs={this.props.collapsedRhs} />
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1,174 +0,0 @@
|
||||||
/*
|
|
||||||
Copyright 2017 Vector Creations Ltd
|
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
you may not use this file except in compliance with the License.
|
|
||||||
You may obtain a copy of the License at
|
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
See the License for the specific language governing permissions and
|
|
||||||
limitations under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
import React from 'react';
|
|
||||||
import PropTypes from 'prop-types';
|
|
||||||
import { _t } from '../../../languageHandler';
|
|
||||||
|
|
||||||
import sdk from '../../../index';
|
|
||||||
import AddThreepid from '../../../AddThreepid';
|
|
||||||
import withMatrixClient from '../../../wrappers/withMatrixClient';
|
|
||||||
import Modal from '../../../Modal';
|
|
||||||
|
|
||||||
export default withMatrixClient(React.createClass({
|
|
||||||
displayName: 'AddPhoneNumber',
|
|
||||||
|
|
||||||
propTypes: {
|
|
||||||
matrixClient: PropTypes.object.isRequired,
|
|
||||||
onThreepidAdded: PropTypes.func,
|
|
||||||
},
|
|
||||||
|
|
||||||
getInitialState: function() {
|
|
||||||
return {
|
|
||||||
busy: false,
|
|
||||||
phoneCountry: null,
|
|
||||||
phoneNumber: "",
|
|
||||||
msisdn_add_pending: false,
|
|
||||||
};
|
|
||||||
},
|
|
||||||
|
|
||||||
componentWillMount: function() {
|
|
||||||
this._addThreepid = null;
|
|
||||||
this._addMsisdnInput = null;
|
|
||||||
this._unmounted = false;
|
|
||||||
},
|
|
||||||
|
|
||||||
componentWillUnmount: function() {
|
|
||||||
this._unmounted = true;
|
|
||||||
},
|
|
||||||
|
|
||||||
_onPhoneCountryChange: function(phoneCountry) {
|
|
||||||
this.setState({ phoneCountry: phoneCountry.iso2 });
|
|
||||||
},
|
|
||||||
|
|
||||||
_onPhoneNumberChange: function(ev) {
|
|
||||||
this.setState({ phoneNumber: ev.target.value });
|
|
||||||
},
|
|
||||||
|
|
||||||
_onAddMsisdnEditFinished: function(value, shouldSubmit) {
|
|
||||||
if (!shouldSubmit) return;
|
|
||||||
this._addMsisdn();
|
|
||||||
},
|
|
||||||
|
|
||||||
_onAddMsisdnSubmit: function(ev) {
|
|
||||||
ev.preventDefault();
|
|
||||||
this._addMsisdn();
|
|
||||||
},
|
|
||||||
|
|
||||||
_collectAddMsisdnInput: function(e) {
|
|
||||||
this._addMsisdnInput = e;
|
|
||||||
},
|
|
||||||
|
|
||||||
_addMsisdn: function() {
|
|
||||||
const ErrorDialog = sdk.getComponent("dialogs.ErrorDialog");
|
|
||||||
|
|
||||||
this._addThreepid = new AddThreepid();
|
|
||||||
// we always bind phone numbers when registering, so let's do the
|
|
||||||
// same here.
|
|
||||||
this._addThreepid.addMsisdn(this.state.phoneCountry, this.state.phoneNumber, true).then((resp) => {
|
|
||||||
this._promptForMsisdnVerificationCode(resp.msisdn);
|
|
||||||
}).catch((err) => {
|
|
||||||
console.error("Unable to add phone number: " + err);
|
|
||||||
const msg = err.message;
|
|
||||||
Modal.createTrackedDialog('Add Phone Number Error', '', ErrorDialog, {
|
|
||||||
title: _t("Error"),
|
|
||||||
description: msg,
|
|
||||||
});
|
|
||||||
}).finally(() => {
|
|
||||||
if (this._unmounted) return;
|
|
||||||
this.setState({msisdn_add_pending: false});
|
|
||||||
}).done();
|
|
||||||
this._addMsisdnInput.blur();
|
|
||||||
this.setState({msisdn_add_pending: true});
|
|
||||||
},
|
|
||||||
|
|
||||||
_promptForMsisdnVerificationCode: function(msisdn, err) {
|
|
||||||
if (this._unmounted) return;
|
|
||||||
const TextInputDialog = sdk.getComponent("dialogs.TextInputDialog");
|
|
||||||
const msgElements = [
|
|
||||||
<div key="_static" >{ _t("A text message has been sent to +%(msisdn)s. Please enter the verification code it contains", { msisdn: msisdn} ) }</div>,
|
|
||||||
];
|
|
||||||
if (err) {
|
|
||||||
let msg = err.error;
|
|
||||||
if (err.errcode == 'M_THREEPID_AUTH_FAILED') {
|
|
||||||
msg = _t("Incorrect verification code");
|
|
||||||
}
|
|
||||||
msgElements.push(<div key="_error" className="error">{ msg }</div>);
|
|
||||||
}
|
|
||||||
Modal.createTrackedDialog('Prompt for MSISDN Verification Code', '', TextInputDialog, {
|
|
||||||
title: _t("Enter Code"),
|
|
||||||
description: <div>{ msgElements }</div>,
|
|
||||||
button: _t("Submit"),
|
|
||||||
onFinished: (should_verify, token) => {
|
|
||||||
if (!should_verify) {
|
|
||||||
this._addThreepid = null;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (this._unmounted) return;
|
|
||||||
this.setState({msisdn_add_pending: true});
|
|
||||||
this._addThreepid.haveMsisdnToken(token).then(() => {
|
|
||||||
this._addThreepid = null;
|
|
||||||
this.setState({phoneNumber: ''});
|
|
||||||
if (this.props.onThreepidAdded) this.props.onThreepidAdded();
|
|
||||||
}).catch((err) => {
|
|
||||||
this._promptForMsisdnVerificationCode(msisdn, err);
|
|
||||||
}).finally(() => {
|
|
||||||
if (this._unmounted) return;
|
|
||||||
this.setState({msisdn_add_pending: false});
|
|
||||||
}).done();
|
|
||||||
},
|
|
||||||
});
|
|
||||||
},
|
|
||||||
|
|
||||||
render: function() {
|
|
||||||
const Loader = sdk.getComponent("elements.Spinner");
|
|
||||||
if (this.state.msisdn_add_pending) {
|
|
||||||
return <Loader />;
|
|
||||||
} else if (this.props.matrixClient.isGuest()) {
|
|
||||||
return <div />;
|
|
||||||
}
|
|
||||||
|
|
||||||
const CountryDropdown = sdk.getComponent('views.auth.CountryDropdown');
|
|
||||||
// XXX: This CSS relies on the CSS surrounding it in UserSettings as its in
|
|
||||||
// a tabular format to align the submit buttons
|
|
||||||
return (
|
|
||||||
<form className="mx_UserSettings_profileTableRow" onSubmit={this._onAddMsisdnSubmit}>
|
|
||||||
<div className="mx_UserSettings_profileLabelCell">
|
|
||||||
<label>{ _t('Phone') }</label>
|
|
||||||
</div>
|
|
||||||
<div className="mx_UserSettings_profileInputCell">
|
|
||||||
<div className="mx_UserSettings_phoneSection">
|
|
||||||
<CountryDropdown onOptionChange={this._onPhoneCountryChange}
|
|
||||||
className="mx_UserSettings_phoneCountry"
|
|
||||||
value={this.state.phoneCountry}
|
|
||||||
isSmall={true}
|
|
||||||
/>
|
|
||||||
<input type="text"
|
|
||||||
ref={this._collectAddMsisdnInput}
|
|
||||||
className="mx_UserSettings_phoneNumberField"
|
|
||||||
placeholder={_t('Add phone number')}
|
|
||||||
value={this.state.phoneNumber}
|
|
||||||
onChange={this._onPhoneNumberChange}
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div className="mx_UserSettings_threepidButton mx_filterFlipColor">
|
|
||||||
<input type="image" value={_t("Add")} src={require("../../../../res/img/plus.svg")} width="14" height="14" />
|
|
||||||
</div>
|
|
||||||
</form>
|
|
||||||
);
|
|
||||||
},
|
|
||||||
}));
|
|
|
@ -235,7 +235,7 @@ export default class KeyBackupPanel extends React.PureComponent {
|
||||||
|
|
||||||
let verifyButton;
|
let verifyButton;
|
||||||
if (sig.device && !sig.device.isVerified()) {
|
if (sig.device && !sig.device.isVerified()) {
|
||||||
verifyButton = <div><br /><AccessibleButton className="mx_UserSettings_button"
|
verifyButton = <div><br /><AccessibleButton className="mx_GeneralButton"
|
||||||
onClick={this._verifyDevice} data-sigindex={i}>
|
onClick={this._verifyDevice} data-sigindex={i}>
|
||||||
{ _t("Verify...") }
|
{ _t("Verify...") }
|
||||||
</AccessibleButton></div>;
|
</AccessibleButton></div>;
|
||||||
|
|
|
@ -721,7 +721,7 @@ module.exports = React.createClass({
|
||||||
<div>
|
<div>
|
||||||
{masterPushRuleDiv}
|
{masterPushRuleDiv}
|
||||||
|
|
||||||
<div className="mx_UserSettings_notifTable">
|
<div className="mx_UserNotifSettings_notifTable">
|
||||||
{ _t('All notifications are currently disabled for all targets.') }
|
{ _t('All notifications are currently disabled for all targets.') }
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -775,7 +775,7 @@ module.exports = React.createClass({
|
||||||
<td>{this.state.pushers[i].device_display_name}</td>
|
<td>{this.state.pushers[i].device_display_name}</td>
|
||||||
</tr>);
|
</tr>);
|
||||||
}
|
}
|
||||||
devicesSection = (<table className="mx_UserSettings_devicesTable">
|
devicesSection = (<table className="mx_UserNotifSettings_devicesTable">
|
||||||
<tbody>
|
<tbody>
|
||||||
{rows}
|
{rows}
|
||||||
</tbody>
|
</tbody>
|
||||||
|
@ -807,7 +807,7 @@ module.exports = React.createClass({
|
||||||
|
|
||||||
{masterPushRuleDiv}
|
{masterPushRuleDiv}
|
||||||
|
|
||||||
<div className="mx_UserSettings_notifTable">
|
<div className="mx_UserNotifSettings_notifTable">
|
||||||
|
|
||||||
{ spinner }
|
{ spinner }
|
||||||
|
|
||||||
|
|
|
@ -262,7 +262,6 @@
|
||||||
"Please contact your homeserver administrator.": "Please contact your homeserver administrator.",
|
"Please contact your homeserver administrator.": "Please contact your homeserver administrator.",
|
||||||
"Failed to join room": "Failed to join room",
|
"Failed to join room": "Failed to join room",
|
||||||
"Message Pinning": "Message Pinning",
|
"Message Pinning": "Message Pinning",
|
||||||
"Tabbed settings": "Tabbed settings",
|
|
||||||
"Custom user status messages": "Custom user status messages",
|
"Custom user status messages": "Custom user status messages",
|
||||||
"Increase performance by only loading room members on first view": "Increase performance by only loading room members on first view",
|
"Increase performance by only loading room members on first view": "Increase performance by only loading room members on first view",
|
||||||
"Backup of encryption keys to server": "Backup of encryption keys to server",
|
"Backup of encryption keys to server": "Backup of encryption keys to server",
|
||||||
|
@ -331,13 +330,6 @@
|
||||||
"For maximum security, we recommend you do this in person or use another trusted means of communication.": "For maximum security, we recommend you do this in person or use another trusted means of communication.",
|
"For maximum security, we recommend you do this in person or use another trusted means of communication.": "For maximum security, we recommend you do this in person or use another trusted means of communication.",
|
||||||
"To continue, click on each pair to confirm it's correct.": "To continue, click on each pair to confirm it's correct.",
|
"To continue, click on each pair to confirm it's correct.": "To continue, click on each pair to confirm it's correct.",
|
||||||
"Continue": "Continue",
|
"Continue": "Continue",
|
||||||
"A text message has been sent to +%(msisdn)s. Please enter the verification code it contains": "A text message has been sent to +%(msisdn)s. Please enter the verification code it contains",
|
|
||||||
"Incorrect verification code": "Incorrect verification code",
|
|
||||||
"Enter Code": "Enter Code",
|
|
||||||
"Submit": "Submit",
|
|
||||||
"Phone": "Phone",
|
|
||||||
"Add phone number": "Add phone number",
|
|
||||||
"Add": "Add",
|
|
||||||
"Failed to upload profile picture!": "Failed to upload profile picture!",
|
"Failed to upload profile picture!": "Failed to upload profile picture!",
|
||||||
"Upload new:": "Upload new:",
|
"Upload new:": "Upload new:",
|
||||||
"No display name": "No display name",
|
"No display name": "No display name",
|
||||||
|
@ -371,6 +363,7 @@
|
||||||
"This doesn't appear to be a valid email address": "This doesn't appear to be a valid email address",
|
"This doesn't appear to be a valid email address": "This doesn't appear to be a valid email address",
|
||||||
"Unable to add email address": "Unable to add email address",
|
"Unable to add email address": "Unable to add email address",
|
||||||
"Unable to verify email address.": "Unable to verify email address.",
|
"Unable to verify email address.": "Unable to verify email address.",
|
||||||
|
"Add": "Add",
|
||||||
"We've sent you an email to verify your address. Please follow the instructions there and then click the button below.": "We've sent you an email to verify your address. Please follow the instructions there and then click the button below.",
|
"We've sent you an email to verify your address. Please follow the instructions there and then click the button below.": "We've sent you an email to verify your address. Please follow the instructions there and then click the button below.",
|
||||||
"Email Address": "Email Address",
|
"Email Address": "Email Address",
|
||||||
"Disable Notifications": "Disable Notifications",
|
"Disable Notifications": "Disable Notifications",
|
||||||
|
@ -424,6 +417,8 @@
|
||||||
"On": "On",
|
"On": "On",
|
||||||
"Noisy": "Noisy",
|
"Noisy": "Noisy",
|
||||||
"Unable to verify phone number.": "Unable to verify phone number.",
|
"Unable to verify phone number.": "Unable to verify phone number.",
|
||||||
|
"Incorrect verification code": "Incorrect verification code",
|
||||||
|
"A text message has been sent to +%(msisdn)s. Please enter the verification code it contains": "A text message has been sent to +%(msisdn)s. Please enter the verification code it contains",
|
||||||
"Verification code": "Verification code",
|
"Verification code": "Verification code",
|
||||||
"Phone Number": "Phone Number",
|
"Phone Number": "Phone Number",
|
||||||
"Profile picture": "Profile picture",
|
"Profile picture": "Profile picture",
|
||||||
|
@ -683,12 +678,9 @@
|
||||||
"Unnamed room": "Unnamed room",
|
"Unnamed room": "Unnamed room",
|
||||||
"World readable": "World readable",
|
"World readable": "World readable",
|
||||||
"Guests can join": "Guests can join",
|
"Guests can join": "Guests can join",
|
||||||
"Failed to set avatar.": "Failed to set avatar.",
|
|
||||||
"(~%(count)s results)|other": "(~%(count)s results)",
|
"(~%(count)s results)|other": "(~%(count)s results)",
|
||||||
"(~%(count)s results)|one": "(~%(count)s result)",
|
"(~%(count)s results)|one": "(~%(count)s result)",
|
||||||
"Join Room": "Join Room",
|
"Join Room": "Join Room",
|
||||||
"Upload avatar": "Upload avatar",
|
|
||||||
"Remove avatar": "Remove avatar",
|
|
||||||
"Settings": "Settings",
|
"Settings": "Settings",
|
||||||
"Forget room": "Forget room",
|
"Forget room": "Forget room",
|
||||||
"Search": "Search",
|
"Search": "Search",
|
||||||
|
@ -732,20 +724,6 @@
|
||||||
"If you log out or use another device, you'll lose your secure message history. To prevent this, set up Secure Message Recovery.": "If you log out or use another device, you'll lose your secure message history. To prevent this, set up Secure Message Recovery.",
|
"If you log out or use another device, you'll lose your secure message history. To prevent this, set up Secure Message Recovery.": "If you log out or use another device, you'll lose your secure message history. To prevent this, set up Secure Message Recovery.",
|
||||||
"Secure Message Recovery": "Secure Message Recovery",
|
"Secure Message Recovery": "Secure Message Recovery",
|
||||||
"Don't ask again": "Don't ask again",
|
"Don't ask again": "Don't ask again",
|
||||||
"Privacy warning": "Privacy warning",
|
|
||||||
"Changes to who can read history will only apply to future messages in this room": "Changes to who can read history will only apply to future messages in this room",
|
|
||||||
"The visibility of existing history will be unchanged": "The visibility of existing history will be unchanged",
|
|
||||||
"unknown error code": "unknown error code",
|
|
||||||
"Failed to forget room %(errCode)s": "Failed to forget room %(errCode)s",
|
|
||||||
"Enable encryption": "Enable encryption",
|
|
||||||
"(warning: cannot be disabled again!)": "(warning: cannot be disabled again!)",
|
|
||||||
"Encryption is enabled in this room": "Encryption is enabled in this room",
|
|
||||||
"Encryption is not enabled in this room": "Encryption is not enabled in this room",
|
|
||||||
"Favourite": "Favourite",
|
|
||||||
"Tagged as: ": "Tagged as: ",
|
|
||||||
"To link to a room it must have <a>an address</a>.": "To link to a room it must have <a>an address</a>.",
|
|
||||||
"Internal room ID: ": "Internal room ID: ",
|
|
||||||
"Room version number: ": "Room version number: ",
|
|
||||||
"Add a topic": "Add a topic",
|
"Add a topic": "Add a topic",
|
||||||
"This room is using an unstable room version. If you aren't expecting this, please upgrade the room.": "This room is using an unstable room version. If you aren't expecting this, please upgrade the room.",
|
"This room is using an unstable room version. If you aren't expecting this, please upgrade the room.": "This room is using an unstable room version. If you aren't expecting this, please upgrade the room.",
|
||||||
"Click here to upgrade to the latest room version.": "Click here to upgrade to the latest room version.",
|
"Click here to upgrade to the latest room version.": "Click here to upgrade to the latest room version.",
|
||||||
|
@ -1154,11 +1132,14 @@
|
||||||
"Source URL": "Source URL",
|
"Source URL": "Source URL",
|
||||||
"Collapse Reply Thread": "Collapse Reply Thread",
|
"Collapse Reply Thread": "Collapse Reply Thread",
|
||||||
"Failed to set Direct Message status of room": "Failed to set Direct Message status of room",
|
"Failed to set Direct Message status of room": "Failed to set Direct Message status of room",
|
||||||
|
"unknown error code": "unknown error code",
|
||||||
|
"Failed to forget room %(errCode)s": "Failed to forget room %(errCode)s",
|
||||||
"All messages (noisy)": "All messages (noisy)",
|
"All messages (noisy)": "All messages (noisy)",
|
||||||
"All messages": "All messages",
|
"All messages": "All messages",
|
||||||
"Mentions only": "Mentions only",
|
"Mentions only": "Mentions only",
|
||||||
"Leave": "Leave",
|
"Leave": "Leave",
|
||||||
"Forget": "Forget",
|
"Forget": "Forget",
|
||||||
|
"Favourite": "Favourite",
|
||||||
"Low Priority": "Low Priority",
|
"Low Priority": "Low Priority",
|
||||||
"Direct Chat": "Direct Chat",
|
"Direct Chat": "Direct Chat",
|
||||||
"Clear status": "Clear status",
|
"Clear status": "Clear status",
|
||||||
|
@ -1183,6 +1164,7 @@
|
||||||
"A text message has been sent to %(msisdn)s": "A text message has been sent to %(msisdn)s",
|
"A text message has been sent to %(msisdn)s": "A text message has been sent to %(msisdn)s",
|
||||||
"Please enter the code it contains:": "Please enter the code it contains:",
|
"Please enter the code it contains:": "Please enter the code it contains:",
|
||||||
"Code": "Code",
|
"Code": "Code",
|
||||||
|
"Submit": "Submit",
|
||||||
"Start authentication": "Start authentication",
|
"Start authentication": "Start authentication",
|
||||||
"Your Modular server": "Your Modular server",
|
"Your Modular server": "Your Modular server",
|
||||||
"Enter the location of your Modular homeserver. It may use your own domain name or be a subdomain of <a>modular.im</a>.": "Enter the location of your Modular homeserver. It may use your own domain name or be a subdomain of <a>modular.im</a>.",
|
"Enter the location of your Modular homeserver. It may use your own domain name or be a subdomain of <a>modular.im</a>.": "Enter the location of your Modular homeserver. It may use your own domain name or be a subdomain of <a>modular.im</a>.",
|
||||||
|
@ -1199,6 +1181,7 @@
|
||||||
"Sign in to %(serverName)s": "Sign in to %(serverName)s",
|
"Sign in to %(serverName)s": "Sign in to %(serverName)s",
|
||||||
"Change": "Change",
|
"Change": "Change",
|
||||||
"Sign in with": "Sign in with",
|
"Sign in with": "Sign in with",
|
||||||
|
"Phone": "Phone",
|
||||||
"If you don't specify an email address, you won't be able to reset your password. Are you sure?": "If you don't specify an email address, you won't be able to reset your password. Are you sure?",
|
"If you don't specify an email address, you won't be able to reset your password. Are you sure?": "If you don't specify an email address, you won't be able to reset your password. Are you sure?",
|
||||||
"Create your account": "Create your account",
|
"Create your account": "Create your account",
|
||||||
"Create your %(serverName)s account": "Create your %(serverName)s account",
|
"Create your %(serverName)s account": "Create your %(serverName)s account",
|
||||||
|
@ -1262,6 +1245,7 @@
|
||||||
"Everyone": "Everyone",
|
"Everyone": "Everyone",
|
||||||
"Your community hasn't got a Long Description, a HTML page to show to community members.<br />Click here to open settings and give it one!": "Your community hasn't got a Long Description, a HTML page to show to community members.<br />Click here to open settings and give it one!",
|
"Your community hasn't got a Long Description, a HTML page to show to community members.<br />Click here to open settings and give it one!": "Your community hasn't got a Long Description, a HTML page to show to community members.<br />Click here to open settings and give it one!",
|
||||||
"Long Description (HTML)": "Long Description (HTML)",
|
"Long Description (HTML)": "Long Description (HTML)",
|
||||||
|
"Upload avatar": "Upload avatar",
|
||||||
"Description": "Description",
|
"Description": "Description",
|
||||||
"Community %(groupId)s not found": "Community %(groupId)s not found",
|
"Community %(groupId)s not found": "Community %(groupId)s not found",
|
||||||
"This homeserver does not support communities": "This homeserver does not support communities",
|
"This homeserver does not support communities": "This homeserver does not support communities",
|
||||||
|
@ -1330,7 +1314,6 @@
|
||||||
"No more results": "No more results",
|
"No more results": "No more results",
|
||||||
"Unknown room %(roomId)s": "Unknown room %(roomId)s",
|
"Unknown room %(roomId)s": "Unknown room %(roomId)s",
|
||||||
"Room": "Room",
|
"Room": "Room",
|
||||||
"Failed to save settings": "Failed to save settings",
|
|
||||||
"Failed to reject invite": "Failed to reject invite",
|
"Failed to reject invite": "Failed to reject invite",
|
||||||
"Fill screen": "Fill screen",
|
"Fill screen": "Fill screen",
|
||||||
"Click to unmute video": "Click to unmute video",
|
"Click to unmute video": "Click to unmute video",
|
||||||
|
@ -1346,29 +1329,6 @@
|
||||||
"Uploading %(filename)s and %(count)s others|other": "Uploading %(filename)s and %(count)s others",
|
"Uploading %(filename)s and %(count)s others|other": "Uploading %(filename)s and %(count)s others",
|
||||||
"Uploading %(filename)s and %(count)s others|zero": "Uploading %(filename)s",
|
"Uploading %(filename)s and %(count)s others|zero": "Uploading %(filename)s",
|
||||||
"Uploading %(filename)s and %(count)s others|one": "Uploading %(filename)s and %(count)s other",
|
"Uploading %(filename)s and %(count)s others|one": "Uploading %(filename)s and %(count)s other",
|
||||||
"Can't load user settings": "Can't load user settings",
|
|
||||||
"Server may be unavailable or overloaded": "Server may be unavailable or overloaded",
|
|
||||||
"Remove Contact Information?": "Remove Contact Information?",
|
|
||||||
"Remove %(threePid)s?": "Remove %(threePid)s?",
|
|
||||||
"Interface Language": "Interface Language",
|
|
||||||
"User Interface": "User Interface",
|
|
||||||
"Autocomplete Delay (ms):": "Autocomplete Delay (ms):",
|
|
||||||
"Key Backup": "Key Backup",
|
|
||||||
"Ignored Users": "Ignored Users",
|
|
||||||
"Submit Debug Logs": "Submit Debug Logs",
|
|
||||||
"These are experimental features that may break in unexpected ways": "These are experimental features that may break in unexpected ways",
|
|
||||||
"Use with caution": "Use with caution",
|
|
||||||
"Deactivate my account": "Deactivate my account",
|
|
||||||
"Clear Cache": "Clear Cache",
|
|
||||||
"Updates": "Updates",
|
|
||||||
"Bulk Options": "Bulk Options",
|
|
||||||
"Desktop specific": "Desktop specific",
|
|
||||||
"Missing Media Permissions, click here to request.": "Missing Media Permissions, click here to request.",
|
|
||||||
"VoIP": "VoIP",
|
|
||||||
"Add email address": "Add email address",
|
|
||||||
"Display name": "Display name",
|
|
||||||
"To return to your account in future you need to set a password": "To return to your account in future you need to set a password",
|
|
||||||
"Logged in as:": "Logged in as:",
|
|
||||||
"Failed to send email": "Failed to send email",
|
"Failed to send email": "Failed to send email",
|
||||||
"The email address linked to your account must be entered.": "The email address linked to your account must be entered.",
|
"The email address linked to your account must be entered.": "The email address linked to your account must be entered.",
|
||||||
"A new password must be entered.": "A new password must be entered.",
|
"A new password must be entered.": "A new password must be entered.",
|
||||||
|
|
|
@ -93,12 +93,6 @@ export const SETTINGS = {
|
||||||
supportedLevels: LEVELS_FEATURE,
|
supportedLevels: LEVELS_FEATURE,
|
||||||
default: false,
|
default: false,
|
||||||
},
|
},
|
||||||
"feature_tabbed_settings": {
|
|
||||||
isFeature: true,
|
|
||||||
displayName: _td("Tabbed settings"),
|
|
||||||
supportedLevels: LEVELS_FEATURE,
|
|
||||||
default: false,
|
|
||||||
},
|
|
||||||
"feature_custom_status": {
|
"feature_custom_status": {
|
||||||
isFeature: true,
|
isFeature: true,
|
||||||
displayName: _td("Custom user status messages"),
|
displayName: _td("Custom user status messages"),
|
||||||
|
|
|
@ -20,7 +20,6 @@ import MatrixClientPeg from '../MatrixClientPeg';
|
||||||
import sdk from '../index';
|
import sdk from '../index';
|
||||||
import Modal from '../Modal';
|
import Modal from '../Modal';
|
||||||
import { _t } from '../languageHandler';
|
import { _t } from '../languageHandler';
|
||||||
import SettingsStore from "../settings/SettingsStore";
|
|
||||||
|
|
||||||
const INITIAL_STATE = {
|
const INITIAL_STATE = {
|
||||||
// Whether we're joining the currently viewed room (see isJoining())
|
// Whether we're joining the currently viewed room (see isJoining())
|
||||||
|
@ -45,8 +44,6 @@ const INITIAL_STATE = {
|
||||||
forwardingEvent: null,
|
forwardingEvent: null,
|
||||||
|
|
||||||
quotingEvent: null,
|
quotingEvent: null,
|
||||||
|
|
||||||
isEditingSettings: false,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -119,28 +116,13 @@ class RoomViewStore extends Store {
|
||||||
replyingToEvent: payload.event,
|
replyingToEvent: payload.event,
|
||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
case 'open_room_settings':
|
case 'open_room_settings': {
|
||||||
if (true || SettingsStore.isFeatureEnabled("feature_tabbed_settings")) {
|
const RoomSettingsDialog = sdk.getComponent("dialogs.RoomSettingsDialog");
|
||||||
const RoomSettingsDialog = sdk.getComponent("dialogs.RoomSettingsDialog");
|
Modal.createTrackedDialog('Room settings', '', RoomSettingsDialog, {
|
||||||
Modal.createTrackedDialog('Room settings', '', RoomSettingsDialog, {
|
roomId: this._state.roomId,
|
||||||
roomId: this._state.roomId,
|
}, 'mx_SettingsDialog');
|
||||||
}, 'mx_SettingsDialog');
|
|
||||||
} else {
|
|
||||||
this._setState({
|
|
||||||
isEditingSettings: true,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 'open_old_room_settings':
|
|
||||||
this._setState({
|
|
||||||
isEditingSettings: true,
|
|
||||||
});
|
|
||||||
break;
|
|
||||||
case 'close_settings':
|
|
||||||
this._setState({
|
|
||||||
isEditingSettings: false,
|
|
||||||
});
|
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -339,10 +321,6 @@ class RoomViewStore extends Store {
|
||||||
return this._state.replyingToEvent;
|
return this._state.replyingToEvent;
|
||||||
}
|
}
|
||||||
|
|
||||||
isEditingSettings() {
|
|
||||||
return this._state.isEditingSettings;
|
|
||||||
}
|
|
||||||
|
|
||||||
shouldPeek() {
|
shouldPeek() {
|
||||||
return this._state.shouldPeek;
|
return this._state.shouldPeek;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue