From d08fbb4872fb147ae0bbb81a706d830edca4aca6 Mon Sep 17 00:00:00 2001 From: YaoiFangirl420 <48789208+YaoiFangirl420@users.noreply.github.com> Date: Sat, 6 Apr 2019 20:37:23 -0700 Subject: [PATCH] Make call buttons into separate components Make the call/voice-call/hangup buttons separate react components to reduce the amount of complexity on MessageComposer. Signed-off-by: YaoiFangirl420 <48789208+YaoiFangirl420@users.noreply.github.com> --- src/components/views/rooms/MessageComposer.js | 121 ++++++++++-------- 1 file changed, 68 insertions(+), 53 deletions(-) diff --git a/src/components/views/rooms/MessageComposer.js b/src/components/views/rooms/MessageComposer.js index 576f45a3bc..5c9ef3f15f 100644 --- a/src/components/views/rooms/MessageComposer.js +++ b/src/components/views/rooms/MessageComposer.js @@ -42,14 +42,76 @@ const formatButtonList = [ _td("numbered-list"), ]; +function CallButton(props) { + const AccessibleButton = sdk.getComponent('elements.AccessibleButton'); + const onVoiceCallClick = (ev) => { + dis.dispatch({ + action: 'place_call', + type: "voice", + room_id: props.roomId, + }); + }; + + return +} + +CallButton.propTypes = { + roomId: PropTypes.string.isRequired +} + +function VideoCallButton(props) { + const AccessibleButton = sdk.getComponent('elements.AccessibleButton'); + const onCallClick = (ev) => { + dis.dispatch({ + action: 'place_call', + type: ev.shiftKey ? "screensharing" : "video", + room_id: props.roomId, + }); + }; + + return ; +} + +VideoCallButton.propTypes = { + roomId: PropTypes.string.isRequired, +}; + +function HangupButton(props) { + const AccessibleButton = sdk.getComponent('elements.AccessibleButton'); + const onHangupClick = () => { + const call = CallHandler.getCallForRoom(props.roomId); + if (!call) { + return; + } + dis.dispatch({ + action: 'hangup', + // hangup the call for this room, which may not be the room in props + // (e.g. conferences which will hangup the 1:1 room instead) + room_id: call.roomId, + }); + }; + return ; +} + +HangupButton.propTypes = { + roomId: PropTypes.string.isRequired, +} + + export default class MessageComposer extends React.Component { constructor(props, context) { super(props, context); - this.onCallClick = this.onCallClick.bind(this); - this.onHangupClick = this.onHangupClick.bind(this); this.onUploadClick = this.onUploadClick.bind(this); this._onUploadFileInputChange = this._onUploadFileInputChange.bind(this); - this.onVoiceCallClick = this.onVoiceCallClick.bind(this); this._onAutocompleteConfirm = this._onAutocompleteConfirm.bind(this); this.onToggleFormattingClicked = this.onToggleFormattingClicked.bind(this); this.onToggleMarkdownClicked = this.onToggleMarkdownClicked.bind(this); @@ -166,35 +228,6 @@ export default class MessageComposer extends React.Component { ev.target.value = ''; } - onHangupClick() { - const call = CallHandler.getCallForRoom(this.props.room.roomId); - //var call = CallHandler.getAnyActiveCall(); - if (!call) { - return; - } - dis.dispatch({ - action: 'hangup', - // hangup the call for this room, which may not be the room in props - // (e.g. conferences which will hangup the 1:1 room instead) - room_id: call.roomId, - }); - } - - onCallClick(ev) { - dis.dispatch({ - action: 'place_call', - type: ev.shiftKey ? "screensharing" : "video", - room_id: this.props.room.roomId, - }); - } - - onVoiceCallClick(ev) { - dis.dispatch({ - action: 'place_call', - type: "voice", - room_id: this.props.room.roomId, - }); - } onInputStateChanged(inputState) { // Merge the new input state with old to support partial updates @@ -275,28 +308,10 @@ export default class MessageComposer extends React.Component { const AccessibleButton = sdk.getComponent('elements.AccessibleButton'); // Call buttons if (this.props.callState && this.props.callState !== 'ended') { - hangupButton = - - ; + hangupButton = ; } else { - callButton = - - ; - videoCallButton = - - ; + callButton = ; + videoCallButton = ; } if (!this.state.tombstone && this.state.canSendMessages) {