/* Copyright 2015, 2016 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. */ var React = require('react'); var sdk = require('../../index'); var dis = require("../../dispatcher"); var WhoIsTyping = require("../../WhoIsTyping"); var MatrixClientPeg = require("../../MatrixClientPeg"); module.exports = React.createClass({ displayName: 'RoomStatusBar', propTypes: { // the room this statusbar is representing. room: React.PropTypes.object.isRequired, // a list of TabCompleteEntries.Entry objects tabCompleteEntries: React.PropTypes.array, // the number of messages which have arrived since we've been scrolled up numUnreadMessages: React.PropTypes.number, // true if there are messages in the room which had errors on send hasUnsentMessages: React.PropTypes.bool, // this is true if we are fully scrolled-down, and are looking at // the end of the live timeline. atEndOfLiveTimeline: React.PropTypes.bool, // true if there is an active call in this room (means we show // the 'Active Call' text in the status bar if there is nothing // more interesting) hasActiveCall: React.PropTypes.bool, // callback for when the user clicks on the 'resend all' button in the // 'unsent messages' bar onResendAllClick: React.PropTypes.func, // callback for when the user clicks on the 'scroll to bottom' button onScrollToBottomClick: React.PropTypes.func, }, getInitialState: function() { return { syncState: MatrixClientPeg.get().getSyncState(), }; }, componentWillMount: function() { MatrixClientPeg.get().on("sync", this.onSyncStateChange); }, componentWillUnmount: function() { MatrixClientPeg.get().removeListener("sync", this.onSyncStateChange); }, onSyncStateChange: function(state, prevState) { if (state === "SYNCING" && prevState === "SYNCING") { return; } this.setState({ syncState: state }); }, render: function() { var TabCompleteBar = sdk.getComponent('rooms.TabCompleteBar'); var TintableSvg = sdk.getComponent("elements.TintableSvg"); // no conn bar trumps unread count since you can't get unread messages // without a connection! (technically may already have some but meh) // It also trumps the "some not sent" msg since you can't resend without // a connection! if (this.state.syncState === "ERROR") { return (