move room publish toggle below canonical alias
also to own component to not contaminate alias settings too much with this
This commit is contained in:
parent
8d56fb4c35
commit
57b2dd92f5
3 changed files with 62 additions and 31 deletions
|
@ -25,6 +25,7 @@ import Field from "../elements/Field";
|
||||||
import ErrorDialog from "../dialogs/ErrorDialog";
|
import ErrorDialog from "../dialogs/ErrorDialog";
|
||||||
import AccessibleButton from "../elements/AccessibleButton";
|
import AccessibleButton from "../elements/AccessibleButton";
|
||||||
import Modal from "../../../Modal";
|
import Modal from "../../../Modal";
|
||||||
|
import RoomPublishSetting from "./RoomPublishSetting";
|
||||||
|
|
||||||
class EditableAliasesList extends EditableItemList {
|
class EditableAliasesList extends EditableItemList {
|
||||||
constructor(props) {
|
constructor(props) {
|
||||||
|
@ -350,6 +351,7 @@ export default class AliasSettings extends React.Component {
|
||||||
return (
|
return (
|
||||||
<div className='mx_AliasSettings'>
|
<div className='mx_AliasSettings'>
|
||||||
{canonicalAliasSection}
|
{canonicalAliasSection}
|
||||||
|
<RoomPublishSetting roomId={this.props.roomId} canSetCanonicalAlias={this.props.canSetCanonicalAlias} />
|
||||||
<datalist id="mx_AliasSettings_altRecommendations">
|
<datalist id="mx_AliasSettings_altRecommendations">
|
||||||
{this._getLocalNonAltAliases().map(alias => {
|
{this._getLocalNonAltAliases().map(alias => {
|
||||||
return <option value={alias} key={alias} />;
|
return <option value={alias} key={alias} />;
|
||||||
|
|
60
src/components/views/room_settings/RoomPublishSetting.js
Normal file
60
src/components/views/room_settings/RoomPublishSetting.js
Normal file
|
@ -0,0 +1,60 @@
|
||||||
|
/*
|
||||||
|
Copyright 2020 The Matrix.org Foundation C.I.C.
|
||||||
|
|
||||||
|
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 LabelledToggleSwitch from "../elements/LabelledToggleSwitch";
|
||||||
|
import {_t} from "../../../languageHandler";
|
||||||
|
import {MatrixClientPeg} from "../../../MatrixClientPeg";
|
||||||
|
|
||||||
|
export default class RoomPublishSetting extends React.PureComponent {
|
||||||
|
constructor(props) {
|
||||||
|
super(props);
|
||||||
|
this.state = {isRoomPublished: false};
|
||||||
|
}
|
||||||
|
|
||||||
|
onRoomPublishChange = (e) => {
|
||||||
|
const valueBefore = this.state.isRoomPublished;
|
||||||
|
const newValue = !valueBefore;
|
||||||
|
this.setState({isRoomPublished: newValue});
|
||||||
|
const client = MatrixClientPeg.get();
|
||||||
|
|
||||||
|
client.setRoomDirectoryVisibility(
|
||||||
|
this.props.roomId,
|
||||||
|
newValue ? 'public' : 'private',
|
||||||
|
).catch(() => {
|
||||||
|
// Roll back the local echo on the change
|
||||||
|
this.setState({isRoomPublished: valueBefore});
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
componentDidMount() {
|
||||||
|
const client = MatrixClientPeg.get();
|
||||||
|
client.getRoomDirectoryVisibility(this.props.roomId).then((result => {
|
||||||
|
this.setState({isRoomPublished: result.visibility === 'public'});
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
|
||||||
|
render() {
|
||||||
|
const client = MatrixClientPeg.get();
|
||||||
|
|
||||||
|
return (<LabelledToggleSwitch value={this.state.isRoomPublished}
|
||||||
|
onChange={this.onRoomPublishChange}
|
||||||
|
disabled={!this.props.canSetCanonicalAlias}
|
||||||
|
label={_t("Publish this room to the public in %(domain)s's room directory?", {
|
||||||
|
domain: client.getDomain(),
|
||||||
|
})} />);
|
||||||
|
}
|
||||||
|
}
|
|
@ -21,7 +21,6 @@ import RoomProfileSettings from "../../../room_settings/RoomProfileSettings";
|
||||||
import * as sdk from "../../../../..";
|
import * as sdk from "../../../../..";
|
||||||
import AccessibleButton from "../../../elements/AccessibleButton";
|
import AccessibleButton from "../../../elements/AccessibleButton";
|
||||||
import dis from "../../../../../dispatcher";
|
import dis from "../../../../../dispatcher";
|
||||||
import LabelledToggleSwitch from "../../../elements/LabelledToggleSwitch";
|
|
||||||
import MatrixClientContext from "../../../../../contexts/MatrixClientContext";
|
import MatrixClientContext from "../../../../../contexts/MatrixClientContext";
|
||||||
|
|
||||||
export default class GeneralRoomSettingsTab extends React.Component {
|
export default class GeneralRoomSettingsTab extends React.Component {
|
||||||
|
@ -39,26 +38,6 @@ export default class GeneralRoomSettingsTab extends React.Component {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
componentWillMount() {
|
|
||||||
this.context.getRoomDirectoryVisibility(this.props.roomId).then((result => {
|
|
||||||
this.setState({isRoomPublished: result.visibility === 'public'});
|
|
||||||
}));
|
|
||||||
}
|
|
||||||
|
|
||||||
onRoomPublishChange = (e) => {
|
|
||||||
const valueBefore = this.state.isRoomPublished;
|
|
||||||
const newValue = !valueBefore;
|
|
||||||
this.setState({isRoomPublished: newValue});
|
|
||||||
|
|
||||||
this.context.setRoomDirectoryVisibility(
|
|
||||||
this.props.roomId,
|
|
||||||
newValue ? 'public' : 'private',
|
|
||||||
).catch(() => {
|
|
||||||
// Roll back the local echo on the change
|
|
||||||
this.setState({isRoomPublished: valueBefore});
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
_onLeaveClick = () => {
|
_onLeaveClick = () => {
|
||||||
dis.dispatch({
|
dis.dispatch({
|
||||||
action: 'leave_room',
|
action: 'leave_room',
|
||||||
|
@ -75,7 +54,6 @@ export default class GeneralRoomSettingsTab extends React.Component {
|
||||||
const room = client.getRoom(this.props.roomId);
|
const room = client.getRoom(this.props.roomId);
|
||||||
|
|
||||||
const canSetAliases = true; // Previously, we arbitrarily only allowed admins to do this
|
const canSetAliases = true; // Previously, we arbitrarily only allowed admins to do this
|
||||||
const canActuallySetAliases = room.currentState.mayClientSendStateEvent("m.room.aliases", client);
|
|
||||||
const canSetCanonical = room.currentState.mayClientSendStateEvent("m.room.canonical_alias", client);
|
const canSetCanonical = room.currentState.mayClientSendStateEvent("m.room.canonical_alias", client);
|
||||||
const canonicalAliasEv = room.currentState.getStateEvents("m.room.canonical_alias", '');
|
const canonicalAliasEv = room.currentState.getStateEvents("m.room.canonical_alias", '');
|
||||||
const aliasEvents = room.currentState.getStateEvents("m.room.aliases");
|
const aliasEvents = room.currentState.getStateEvents("m.room.aliases");
|
||||||
|
@ -96,15 +74,6 @@ export default class GeneralRoomSettingsTab extends React.Component {
|
||||||
canSetCanonicalAlias={canSetCanonical} canSetAliases={canSetAliases}
|
canSetCanonicalAlias={canSetCanonical} canSetAliases={canSetAliases}
|
||||||
canonicalAliasEvent={canonicalAliasEv} aliasEvents={aliasEvents} />
|
canonicalAliasEvent={canonicalAliasEv} aliasEvents={aliasEvents} />
|
||||||
</div>
|
</div>
|
||||||
<div className='mx_SettingsTab_section'>
|
|
||||||
<LabelledToggleSwitch value={this.state.isRoomPublished}
|
|
||||||
onChange={this.onRoomPublishChange}
|
|
||||||
disabled={!canActuallySetAliases}
|
|
||||||
label={_t("Publish this room to the public in %(domain)s's room directory?", {
|
|
||||||
domain: client.getDomain(),
|
|
||||||
})} />
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<span className='mx_SettingsTab_subheading'>{_t("Flair")}</span>
|
<span className='mx_SettingsTab_subheading'>{_t("Flair")}</span>
|
||||||
<div className='mx_SettingsTab_section mx_SettingsTab_subsectionText'>
|
<div className='mx_SettingsTab_section mx_SettingsTab_subsectionText'>
|
||||||
<RelatedGroupSettings roomId={room.roomId}
|
<RelatedGroupSettings roomId={room.roomId}
|
||||||
|
|
Loading…
Reference in a new issue