Allow creating public knock rooms (#11481)
* Allow creating public knock rooms Signed-off-by: Charly Nguyen <charly.nguyen@nordeck.net> * Apply PR feedback Signed-off-by: Charly Nguyen <charly.nguyen@nordeck.net> * Apply PR feedback Signed-off-by: Charly Nguyen <charly.nguyen@nordeck.net> --------- Signed-off-by: Charly Nguyen <charly.nguyen@nordeck.net>
This commit is contained in:
parent
f8ff95349a
commit
2ff1056cb2
6 changed files with 133 additions and 34 deletions
|
@ -33,6 +33,7 @@ import { getKeyBindingsManager } from "../../../KeyBindingsManager";
|
|||
import { KeyBindingAction } from "../../../accessibility/KeyboardShortcuts";
|
||||
import { privateShouldBeEncrypted } from "../../../utils/rooms";
|
||||
import SettingsStore from "../../../settings/SettingsStore";
|
||||
import LabelledCheckbox from "../elements/LabelledCheckbox";
|
||||
|
||||
interface IProps {
|
||||
type?: RoomType;
|
||||
|
@ -45,15 +46,46 @@ interface IProps {
|
|||
}
|
||||
|
||||
interface IState {
|
||||
/**
|
||||
* The selected room join rule.
|
||||
*/
|
||||
joinRule: JoinRule;
|
||||
isPublic: boolean;
|
||||
/**
|
||||
* Indicates whether the created room should have public visibility (ie, it should be
|
||||
* shown in the public room list). Only applicable if `joinRule` == `JoinRule.Knock`.
|
||||
*/
|
||||
isPublicKnockRoom: boolean;
|
||||
/**
|
||||
* Indicates whether end-to-end encryption is enabled for the room.
|
||||
*/
|
||||
isEncrypted: boolean;
|
||||
/**
|
||||
* The room name.
|
||||
*/
|
||||
name: string;
|
||||
/**
|
||||
* The room topic.
|
||||
*/
|
||||
topic: string;
|
||||
/**
|
||||
* The room alias.
|
||||
*/
|
||||
alias: string;
|
||||
/**
|
||||
* Indicates whether the details section is open.
|
||||
*/
|
||||
detailsOpen: boolean;
|
||||
/**
|
||||
* Indicates whether federation is disabled for the room.
|
||||
*/
|
||||
noFederate: boolean;
|
||||
/**
|
||||
* Indicates whether the room name is valid.
|
||||
*/
|
||||
nameIsValid: boolean;
|
||||
/**
|
||||
* Indicates whether the user can change encryption settings for the room.
|
||||
*/
|
||||
canChangeEncryption: boolean;
|
||||
}
|
||||
|
||||
|
@ -78,7 +110,7 @@ export default class CreateRoomDialog extends React.Component<IProps, IState> {
|
|||
|
||||
const cli = MatrixClientPeg.safeGet();
|
||||
this.state = {
|
||||
isPublic: this.props.defaultPublic || false,
|
||||
isPublicKnockRoom: this.props.defaultPublic || false,
|
||||
isEncrypted: this.props.defaultEncrypted ?? privateShouldBeEncrypted(cli),
|
||||
joinRule,
|
||||
name: this.props.defaultName || "",
|
||||
|
@ -129,6 +161,7 @@ export default class CreateRoomDialog extends React.Component<IProps, IState> {
|
|||
|
||||
if (this.state.joinRule === JoinRule.Knock) {
|
||||
opts.joinRule = JoinRule.Knock;
|
||||
createOpts.visibility = this.state.isPublicKnockRoom ? Visibility.Public : Visibility.Private;
|
||||
}
|
||||
|
||||
return opts;
|
||||
|
@ -215,6 +248,10 @@ export default class CreateRoomDialog extends React.Component<IProps, IState> {
|
|||
return result;
|
||||
};
|
||||
|
||||
private onIsPublicKnockRoomChange = (isPublicKnockRoom: boolean): void => {
|
||||
this.setState({ isPublicKnockRoom });
|
||||
};
|
||||
|
||||
private static validateRoomName = withValidation({
|
||||
rules: [
|
||||
{
|
||||
|
@ -298,6 +335,18 @@ export default class CreateRoomDialog extends React.Component<IProps, IState> {
|
|||
);
|
||||
}
|
||||
|
||||
let visibilitySection: JSX.Element | undefined;
|
||||
if (this.state.joinRule === JoinRule.Knock) {
|
||||
visibilitySection = (
|
||||
<LabelledCheckbox
|
||||
className="mx_CreateRoomDialog_labelledCheckbox"
|
||||
label={_t("Make this room visible in the public room directory.")}
|
||||
onChange={this.onIsPublicKnockRoomChange}
|
||||
value={this.state.isPublicKnockRoom}
|
||||
/>
|
||||
);
|
||||
}
|
||||
|
||||
let e2eeSection: JSX.Element | undefined;
|
||||
if (this.state.joinRule !== JoinRule.Public) {
|
||||
let microcopy: string;
|
||||
|
@ -383,6 +432,7 @@ export default class CreateRoomDialog extends React.Component<IProps, IState> {
|
|||
/>
|
||||
|
||||
{publicPrivateLabel}
|
||||
{visibilitySection}
|
||||
{e2eeSection}
|
||||
{aliasField}
|
||||
<details onToggle={this.onDetailsToggled} className="mx_CreateRoomDialog_details">
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue