Add basic CreateRoom organism. Supports setting room name and selecting preset
This commit is contained in:
parent
98baa0cb0a
commit
ed52cdf6df
9 changed files with 315 additions and 0 deletions
32
skins/base/views/atoms/create_room/CreateRoomButton.js
Normal file
32
skins/base/views/atoms/create_room/CreateRoomButton.js
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
/*
|
||||||
|
Copyright 2015 OpenMarket 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
var React = require('react');
|
||||||
|
|
||||||
|
var CreateRoomButtonController = require("../../../../../src/controllers/atoms/create_room/CreateRoomButton");
|
||||||
|
|
||||||
|
module.exports = React.createClass({
|
||||||
|
displayName: 'CreateRoomButton',
|
||||||
|
mixins: [CreateRoomButtonController],
|
||||||
|
|
||||||
|
render: function() {
|
||||||
|
return (
|
||||||
|
<button className="mx_CreateRoomButton" onClick={this.onClick}>Create Room</button>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
});
|
35
skins/base/views/atoms/create_room/Presets.js
Normal file
35
skins/base/views/atoms/create_room/Presets.js
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
/*
|
||||||
|
Copyright 2015 OpenMarket 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
var React = require('react');
|
||||||
|
|
||||||
|
var PresetsController = require("../../../../../src/controllers/atoms/create_room/Presets");
|
||||||
|
|
||||||
|
module.exports = React.createClass({
|
||||||
|
displayName: 'CreateRoomPresets',
|
||||||
|
mixins: [PresetsController],
|
||||||
|
|
||||||
|
render: function() {
|
||||||
|
return (
|
||||||
|
<select className="mx_PresetOption" onChange={this.onValueChanged} defaultValue={this.state.preset}>
|
||||||
|
<option value="private_chat">Private Chat</option>
|
||||||
|
<option value="public_chat">Public Chat</option>
|
||||||
|
</select>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
});
|
32
skins/base/views/atoms/create_room/RoomNameTextbox.js
Normal file
32
skins/base/views/atoms/create_room/RoomNameTextbox.js
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
/*
|
||||||
|
Copyright 2015 OpenMarket 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
var React = require('react');
|
||||||
|
|
||||||
|
var RoomNameTextboxController = require("../../../../../src/controllers/atoms/create_room/RoomNameTextbox");
|
||||||
|
|
||||||
|
module.exports = React.createClass({
|
||||||
|
displayName: 'CreateRoomButton',
|
||||||
|
mixins: [RoomNameTextboxController],
|
||||||
|
|
||||||
|
render: function() {
|
||||||
|
return (
|
||||||
|
<input type="text" className="mx_RoomNameTextbox" placeholder="ex. MyNewRoom" onChange={this.onValueChanged}/>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
});
|
43
skins/base/views/organisms/CreateRoom.js
Normal file
43
skins/base/views/organisms/CreateRoom.js
Normal file
|
@ -0,0 +1,43 @@
|
||||||
|
/*
|
||||||
|
Copyright 2015 OpenMarket 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
var React = require('react');
|
||||||
|
|
||||||
|
var CreateRoomController = require("../../../../src/controllers/organisms/CreateRoom");
|
||||||
|
|
||||||
|
var ComponentBroker = require('../../../../src/ComponentBroker');
|
||||||
|
|
||||||
|
var CreateRoomButton = ComponentBroker.get("atoms/create_room/CreateRoomButton");
|
||||||
|
var RoomNameTextbox = ComponentBroker.get("atoms/create_room/RoomNameTextbox");
|
||||||
|
var Presets = ComponentBroker.get("atoms/create_room/Presets");
|
||||||
|
|
||||||
|
|
||||||
|
module.exports = React.createClass({
|
||||||
|
displayName: 'CreateRoom',
|
||||||
|
mixins: [CreateRoomController],
|
||||||
|
|
||||||
|
render: function() {
|
||||||
|
return (
|
||||||
|
<div className="mx_CreateRoom">
|
||||||
|
<label>Room Name <RoomNameTextbox ref="name_textbox" /></label>
|
||||||
|
<Presets ref="presets"/>
|
||||||
|
<CreateRoomButton onCreateRoom={this.onCreateRoom} />
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
});
|
|
@ -61,6 +61,9 @@ if (0) {
|
||||||
require('../skins/base/views/atoms/LogoutButton');
|
require('../skins/base/views/atoms/LogoutButton');
|
||||||
require('../skins/base/views/atoms/EnableNotificationsButton');
|
require('../skins/base/views/atoms/EnableNotificationsButton');
|
||||||
require('../skins/base/views/atoms/MessageTimestamp');
|
require('../skins/base/views/atoms/MessageTimestamp');
|
||||||
|
require('../skins/base/views/atoms/create_room/CreateRoomButton');
|
||||||
|
require('../skins/base/views/atoms/create_room/RoomNameTextbox');
|
||||||
|
require('../skins/base/views/atoms/create_room/Presets');
|
||||||
require('../skins/base/views/molecules/MatrixToolbar');
|
require('../skins/base/views/molecules/MatrixToolbar');
|
||||||
require('../skins/base/views/molecules/RoomTile');
|
require('../skins/base/views/molecules/RoomTile');
|
||||||
require('../skins/base/views/molecules/MessageTile');
|
require('../skins/base/views/molecules/MessageTile');
|
||||||
|
@ -82,4 +85,5 @@ require('../skins/base/views/organisms/RoomList');
|
||||||
require('../skins/base/views/organisms/RoomView');
|
require('../skins/base/views/organisms/RoomView');
|
||||||
require('../skins/base/views/templates/Login');
|
require('../skins/base/views/templates/Login');
|
||||||
require('../skins/base/views/organisms/Notifier');
|
require('../skins/base/views/organisms/Notifier');
|
||||||
|
require('../skins/base/views/organisms/CreateRoom');
|
||||||
}
|
}
|
||||||
|
|
35
src/controllers/atoms/create_room/CreateRoomButton.js
Normal file
35
src/controllers/atoms/create_room/CreateRoomButton.js
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
/*
|
||||||
|
Copyright 2015 OpenMarket 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
var React = require('react');
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
propTypes: {
|
||||||
|
onCreateRoom: React.PropTypes.func,
|
||||||
|
},
|
||||||
|
|
||||||
|
getDefaultProps: function() {
|
||||||
|
return {
|
||||||
|
onCreateRoom: function() {},
|
||||||
|
};
|
||||||
|
},
|
||||||
|
|
||||||
|
onClick: function() {
|
||||||
|
this.props.onCreateRoom();
|
||||||
|
},
|
||||||
|
};
|
45
src/controllers/atoms/create_room/Presets.js
Normal file
45
src/controllers/atoms/create_room/Presets.js
Normal file
|
@ -0,0 +1,45 @@
|
||||||
|
/*
|
||||||
|
Copyright 2015 OpenMarket 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
var React = require('react');
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
propTypes: {
|
||||||
|
default_preset: React.PropTypes.string
|
||||||
|
},
|
||||||
|
|
||||||
|
onValueChanged: function(ev) {
|
||||||
|
this.setState({preset: ev.target.value})
|
||||||
|
},
|
||||||
|
|
||||||
|
getDefaultProps: function() {
|
||||||
|
return {
|
||||||
|
default_preset: 'private_chat',
|
||||||
|
};
|
||||||
|
},
|
||||||
|
|
||||||
|
getInitialState: function() {
|
||||||
|
return {
|
||||||
|
preset: this.props.default_preset,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
getPreset: function() {
|
||||||
|
return this.state.preset;
|
||||||
|
},
|
||||||
|
};
|
45
src/controllers/atoms/create_room/RoomNameTextbox.js
Normal file
45
src/controllers/atoms/create_room/RoomNameTextbox.js
Normal file
|
@ -0,0 +1,45 @@
|
||||||
|
/*
|
||||||
|
Copyright 2015 OpenMarket 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
var React = require('react');
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
propTypes: {
|
||||||
|
default_name: React.PropTypes.string
|
||||||
|
},
|
||||||
|
|
||||||
|
onValueChanged: function(ev) {
|
||||||
|
this.setState({room_name: ev.target.value})
|
||||||
|
},
|
||||||
|
|
||||||
|
getDefaultProps: function() {
|
||||||
|
return {
|
||||||
|
default_name: '',
|
||||||
|
};
|
||||||
|
},
|
||||||
|
|
||||||
|
getInitialState: function() {
|
||||||
|
return {
|
||||||
|
room_name: this.props.default_name,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
getName: function() {
|
||||||
|
return this.state.room_name;
|
||||||
|
},
|
||||||
|
};
|
44
src/controllers/organisms/CreateRoom.js
Normal file
44
src/controllers/organisms/CreateRoom.js
Normal file
|
@ -0,0 +1,44 @@
|
||||||
|
/*
|
||||||
|
Copyright 2015 OpenMarket 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
var React = require("react");
|
||||||
|
var MatrixClientPeg = require("../../MatrixClientPeg");
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
onCreateRoom: function() {
|
||||||
|
var room_name = this.refs.name_textbox.getName();
|
||||||
|
console.log("Create room clicked. Name: " + room_name);
|
||||||
|
|
||||||
|
var options = {
|
||||||
|
preset: this.refs.presets.getPreset(),
|
||||||
|
};
|
||||||
|
|
||||||
|
if (room_name) {
|
||||||
|
options.name = room_name;
|
||||||
|
}
|
||||||
|
|
||||||
|
var cli = MatrixClientPeg.get();
|
||||||
|
if (!cli) {
|
||||||
|
// TODO: Error.
|
||||||
|
console.error("Cannot create room: No matrix client.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var deferred = MatrixClientPeg.get().createRoom(options);
|
||||||
|
}
|
||||||
|
};
|
Loading…
Reference in a new issue