element-web/src/skins/vector/views/molecules/RoomHeader.js

176 lines
7.3 KiB
JavaScript
Raw Normal View History

/*
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');
2015-09-22 20:49:04 +03:00
var sdk = require('matrix-react-sdk')
var dis = require('matrix-react-sdk/lib/dispatcher')
var CallHandler = require('matrix-react-sdk/lib/CallHandler');
2015-09-22 21:09:23 +03:00
var MatrixClientPeg = require('matrix-react-sdk/lib/MatrixClientPeg');
2015-09-22 20:17:19 +03:00
var RoomHeaderController = require('matrix-react-sdk/lib/controllers/molecules/RoomHeader')
module.exports = React.createClass({
displayName: 'RoomHeader',
mixins: [RoomHeaderController],
2015-07-16 19:42:33 +03:00
onNameChange: function(new_name) {
if (this.props.room.name != new_name && new_name) {
MatrixClientPeg.get().setRoomName(this.props.room.roomId, new_name);
}
2015-07-16 19:42:33 +03:00
},
2015-07-20 17:07:51 +03:00
getRoomName: function() {
return this.refs.name_edit.getDOMNode().value;
},
onFullscreenClick: function() {
dis.dispatch({action: 'video_fullscreen'}, true);
},
render: function() {
2015-09-22 20:49:04 +03:00
var EditableText = sdk.getComponent("atoms.EditableText");
var RoomAvatar = sdk.getComponent('atoms.RoomAvatar');
2015-07-15 06:16:38 +03:00
var header;
if (this.props.simpleHeader) {
header =
<div className="mx_RoomHeader_wrapper">
<div className="mx_RoomHeader_simpleHeader">
{ this.props.simpleHeader }
</div>
</div>
}
else {
var topic = this.props.room.currentState.getStateEvents('m.room.topic', '');
2015-07-15 06:16:38 +03:00
var call_buttons;
var zoom_button;
if (this.state && this.state.call_state != 'ended') {
var muteVideoButton;
var activeCall = (
CallHandler.getCallForRoom(this.props.room.roomId)
);
/*
if (activeCall && activeCall.type === "video") {
muteVideoButton = (
<div className="mx_RoomHeader_textButton mx_RoomHeader_voipButton"
onClick={this.onMuteVideoClick}>
{
(activeCall.isLocalVideoMuted() ?
"Unmute" : "Mute") + " video"
}
</div>
);
}
{muteVideoButton}
<div className="mx_RoomHeader_textButton mx_RoomHeader_voipButton"
onClick={this.onMuteAudioClick}>
{
(activeCall && activeCall.isMicrophoneMuted() ?
"Unmute" : "Mute") + " audio"
}
</div>
*/
call_buttons = (
<div className="mx_RoomHeader_textButton"
onClick={this.onHangupClick}>
End call
</div>
);
zoom_button = (
<div className="mx_RoomHeader_button" onClick={this.onFullscreenClick}>
2015-10-20 13:49:08 +03:00
<img src="img/zoom.png" title="Fullscreen" alt="Fullscreen" width="32" height="32" style={{ 'marginTop': '3px' }}/>
</div>
);
2015-07-15 19:36:47 +03:00
}
var name = null;
var topic_el = null;
var cancel_button = null;
var save_button = null;
var settings_button = null;
var actual_name = this.props.room.currentState.getStateEvents('m.room.name', '');
if (actual_name) actual_name = actual_name.getContent().name;
if (this.props.editing) {
2015-07-22 09:19:24 +03:00
name =
<div className="mx_RoomHeader_nameEditing">
<input className="mx_RoomHeader_nameInput" type="text" defaultValue={actual_name} placeholder="Name" ref="name_edit"/>
</div>
2015-07-22 09:19:24 +03:00
// if (topic) topic_el = <div className="mx_RoomHeader_topic"><textarea>{ topic.getContent().topic }</textarea></div>
cancel_button = <div className="mx_RoomHeader_textButton" onClick={this.props.onCancelClick}>Cancel</div>
save_button = <div className="mx_RoomHeader_textButton" onClick={this.props.onSaveClick}>Save Changes</div>
} else {
2015-07-22 09:19:24 +03:00
name =
<div className="mx_RoomHeader_name">
<EditableText label={this.props.room.name} initialValue={actual_name} placeHolder="Name" onValueChanged={this.onNameChange} />
</div>
if (topic) topic_el = <div className="mx_RoomHeader_topic" title={topic.getContent().topic}>{ topic.getContent().topic }</div>;
settings_button = (
<div className="mx_RoomHeader_button" onClick={this.props.onSettingsClick}>
<img src="img/settings.png" width="32" height="32"/>
</div>
);
}
2015-07-20 17:07:51 +03:00
var roomAvatar = null;
if (this.props.room) {
roomAvatar = (
<RoomAvatar room={this.props.room} width="48" height="48" />
);
}
header =
2015-07-13 03:51:24 +03:00
<div className="mx_RoomHeader_wrapper">
<div className="mx_RoomHeader_leftRow">
<div className="mx_RoomHeader_avatar">
{ roomAvatar }
2015-07-13 03:51:24 +03:00
</div>
2015-07-15 06:16:38 +03:00
<div className="mx_RoomHeader_info">
2015-07-22 09:19:24 +03:00
{ name }
2015-07-20 17:07:51 +03:00
{ topic_el }
2015-07-13 03:51:24 +03:00
</div>
</div>
{call_buttons}
{cancel_button}
{save_button}
2015-07-13 03:51:24 +03:00
<div className="mx_RoomHeader_rightRow">
2015-07-20 17:07:51 +03:00
{ settings_button }
{ zoom_button }
2015-07-24 05:18:12 +03:00
<div className="mx_RoomHeader_button mx_RoomHeader_search">
2015-07-24 11:57:28 +03:00
<img src="img/search.png" title="Search" alt="Search" width="32" height="32"/>
2015-07-13 03:51:24 +03:00
</div>
<div className="mx_RoomHeader_button mx_RoomHeader_video" onClick={activeCall && activeCall.type === "video" ? this.onMuteVideoClick : this.onVideoClick}>
2015-07-24 11:57:28 +03:00
<img src="img/video.png" title="Video call" alt="Video call" width="32" height="32"/>
2015-07-13 03:51:24 +03:00
</div>
<div className="mx_RoomHeader_button mx_RoomHeader_voice" onClick={activeCall ? this.onMuteAudioClick : this.onVoiceClick}>
2015-07-24 11:57:28 +03:00
<img src="img/voip.png" title="VoIP call" alt="VoIP call" width="32" height="32"/>
2015-07-13 03:51:24 +03:00
</div>
</div>
</div>
}
return (
<div className="mx_RoomHeader">
{ header }
</div>
);
},
});