- { voiceMuteButton }
- { videoMuteButton }
- { zoomButton }
- { statusBar }
-
-
- }
-
- // if we have search results, we keep the messagepanel (so that it preserves its
- // scroll state), but hide it.
- var searchResultsPanel;
- var hideMessagePanel = false;
-
- if (this.state.searchResults) {
- searchResultsPanel = (
-
-
-
- { fileDropTarget }
-
- { conferenceCallNotification }
- { aux }
-
- { messagePanel }
- { searchResultsPanel }
-
- { messageComposer }
+ conferenceCallNotification = (
+
+ Ongoing conference call {supportedText}
);
}
+
+ var fileDropTarget = null;
+ if (this.state.draggingFile) {
+ fileDropTarget =
+
+
+ Drop file here to upload
+
+
;
+ }
+
+ var messageComposer, searchInfo;
+ var canSpeak = (
+ // joined and not showing search results
+ myMember && (myMember.membership == 'join') && !this.state.searchResults
+ );
+ if (canSpeak) {
+ messageComposer =
+
+ }
+
+ // TODO: Why aren't we storing the term/scope/count in this format
+ // in this.state if this is what RoomHeader desires?
+ if (this.state.searchResults) {
+ searchInfo = {
+ searchTerm : this.state.searchTerm,
+ searchScope : this.state.searchScope,
+ searchCount : this.state.searchResults.count,
+ };
+ }
+
+ var call = CallHandler.getCallForRoom(this.props.roomId);
+ //var call = CallHandler.getAnyActiveCall();
+ var inCall = false;
+ if (call && (this.state.callState !== 'ended' && this.state.callState !== 'ringing')) {
+ inCall = true;
+ var zoomButton, voiceMuteButton, videoMuteButton;
+
+ if (call.type === "video") {
+ zoomButton = (
+
+
+
+ );
+
+ videoMuteButton =
+
+
+
+ }
+ voiceMuteButton =
+
+
+
+
+ if (!statusBar) {
+ statusBar =
+
+
+
Active call
+
;
+ }
+
+ statusBar =
+
+ { voiceMuteButton }
+ { videoMuteButton }
+ { zoomButton }
+ { statusBar }
+
+
+ }
+
+ // if we have search results, we keep the messagepanel (so that it preserves its
+ // scroll state), but hide it.
+ var searchResultsPanel;
+ var hideMessagePanel = false;
+
+ if (this.state.searchResults) {
+ searchResultsPanel = (
+
+
+ {this.getSearchResultTiles()}
+
+ );
+ hideMessagePanel = true;
+ }
+
+ var messagePanel;
+
+ // just show a spinner while the timeline loads.
+ //
+ // put it in a div of the right class (mx_RoomView_messagePanel) so
+ // that the order in the roomview flexbox is correct, and
+ // mx_RoomView_messageListWrapper to position the inner div in the
+ // right place.
+ //
+ // Note that the click-on-search-result functionality relies on the
+ // fact that the messagePanel is hidden while the timeline reloads,
+ // but that the RoomHeader (complete with search term) continues to
+ // exist.
+ if (this.state.timelineLoading) {
+ messagePanel = (
+
+
+
+ );
+ } else {
+ // it's important that stickyBottom = false on this, otherwise if somebody hits the
+ // bottom of the loaded events when viewing historical messages, we get stuck in a
+ // loop of paginating our way through the entire history of the room.
+ messagePanel = (
+
+
+ {this.getEventTiles()}
+
+ );
+ }
+
+ return (
+
+
+
+ { fileDropTarget }
+
+ { conferenceCallNotification }
+ { aux }
+
+ { messagePanel }
+ { searchResultsPanel }
+
+ { messageComposer }
+
+ );
},
});