2017-05-08 13:18:31 +03:00
/ *
2017-08-17 15:33:07 +03:00
Copyright 2017 Michael Telatynski < 7 t3chguy @ gmail . com >
2017-05-08 13:18:31 +03:00
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' ;
2019-08-24 13:59:46 +03:00
import createReactClass from 'create-react-class' ;
2017-12-26 04:03:18 +03:00
import PropTypes from 'prop-types' ;
2017-05-08 13:18:31 +03:00
import sdk from '../../../index' ;
2017-08-17 15:33:07 +03:00
import SdkConfig from '../../../SdkConfig' ;
2019-09-20 18:39:46 +03:00
import withValidation from '../elements/Validation' ;
2017-08-02 15:41:26 +03:00
import { _t } from '../../../languageHandler' ;
2017-05-08 13:18:31 +03:00
2019-08-24 13:59:46 +03:00
export default createReactClass ( {
2017-08-17 15:33:07 +03:00
displayName : 'CreateRoomDialog' ,
2017-05-08 13:18:31 +03:00
propTypes : {
2017-12-26 04:03:18 +03:00
onFinished : PropTypes . func . isRequired ,
2017-05-08 13:18:31 +03:00
} ,
2019-09-20 18:39:46 +03:00
getInitialState ( ) {
2017-08-17 15:33:07 +03:00
const config = SdkConfig . get ( ) ;
2019-09-20 18:39:46 +03:00
return {
name : "" ,
noFederate : config . default _federate === false ,
nameIsValid : false ,
} ;
2017-05-08 13:18:31 +03:00
} ,
2019-09-20 18:39:46 +03:00
_roomCreateOptions ( ) {
const createOpts = { } ;
createOpts . name = this . state . name ;
if ( this . state . noFederate ) {
createOpts . creation _content = { 'm.federate' : false } ;
}
return createOpts ;
} ,
componentDidMount ( ) {
this . _detailsRef . addEventListener ( "toggle" , this . onDetailsToggled ) ;
} ,
componentWillUnmount ( ) {
this . _detailsRef . removeEventListener ( "toggle" , this . onDetailsToggled ) ;
} ,
onOk : async function ( ) {
this . props . onFinished ( true , this . _roomCreateOptions ( ) ) ;
2017-05-08 13:18:31 +03:00
} ,
onCancel : function ( ) {
this . props . onFinished ( false ) ;
} ,
2019-09-20 18:39:46 +03:00
onNameChange ( ev ) {
this . setState ( { name : ev . target . value } ) ;
} ,
onDetailsToggled ( ev ) {
this . setState ( { detailsOpen : ev . target . open } ) ;
} ,
onNoFederateChange ( noFederate ) {
this . setState ( { noFederate } ) ;
} ,
collectDetailsRef ( ref ) {
this . _detailsRef = ref ;
} ,
async onNameValidate ( fieldState ) {
const result = await this . _validateRoomName ( fieldState ) ;
this . setState ( { nameIsValid : result . valid } ) ;
return result ;
} ,
_validateRoomName : withValidation ( {
rules : [
{
key : "required" ,
test : async ( { value } ) => ! ! value ,
invalid : ( ) => _t ( "Please enter a name for the room" ) ,
} ,
] ,
} ) ,
2017-05-08 13:18:31 +03:00
render : function ( ) {
const BaseDialog = sdk . getComponent ( 'views.dialogs.BaseDialog' ) ;
2017-12-23 03:42:44 +03:00
const DialogButtons = sdk . getComponent ( 'views.elements.DialogButtons' ) ;
2019-09-20 18:39:46 +03:00
const Field = sdk . getComponent ( 'views.elements.Field' ) ;
const LabelledToggleSwitch = sdk . getComponent ( 'views.elements.LabelledToggleSwitch' ) ;
2017-05-08 13:18:31 +03:00
return (
2017-08-17 15:33:07 +03:00
< BaseDialog className = "mx_CreateRoomDialog" onFinished = { this . props . onFinished }
title = { _t ( 'Create Room' ) }
2017-05-08 13:18:31 +03:00
>
2017-12-03 23:38:21 +03:00
< form onSubmit = { this . onOk } >
< div className = "mx_Dialog_content" >
2019-09-20 18:39:46 +03:00
< Field id = "name" ref = { ref => this . _nameFieldRef = ref } label = { _t ( 'Name' ) } onChange = { this . onNameChange } onValidate = { this . onNameValidate } value = { this . state . name } className = "mx_CreateRoomDialog_name" / >
< details ref = { this . collectDetailsRef } className = "mx_CreateRoomDialog_details" >
< summary className = "mx_CreateRoomDialog_details_summary" > { this . state . detailsOpen ? _t ( 'Hide advanced' ) : _t ( 'Show advanced' ) } < / s u m m a r y >
< LabelledToggleSwitch label = { _t ( 'Block users on other matrix homeservers from joining this room (This setting cannot be changed later!)' ) } onChange = { this . onNoFederateChange } value = { this . state . noFederate } / >
2018-02-08 23:16:57 +03:00
< / d e t a i l s >
2017-12-03 23:38:21 +03:00
< / d i v >
< / f o r m >
2017-12-23 03:42:44 +03:00
< DialogButtons primaryButton = { _t ( 'Create Room' ) }
onPrimaryButtonClick = { this . onOk }
onCancel = { this . onCancel } / >
2017-05-08 13:18:31 +03:00
< / B a s e D i a l o g >
) ;
} ,
} ) ;