diff options
Diffstat (limited to 'webapp/components')
-rw-r--r-- | webapp/components/channel_header.jsx | 18 | ||||
-rw-r--r-- | webapp/components/code_preview.jsx | 7 | ||||
-rw-r--r-- | webapp/components/post_view/post_view_cache.jsx | 7 | ||||
-rw-r--r-- | webapp/components/post_view/post_view_controller.jsx | 9 | ||||
-rw-r--r-- | webapp/components/rhs_root_post.jsx | 2 | ||||
-rw-r--r-- | webapp/components/sidebar_header_dropdown.jsx | 7 |
6 files changed, 38 insertions, 12 deletions
diff --git a/webapp/components/channel_header.jsx b/webapp/components/channel_header.jsx index 83f667322..d8110aa5a 100644 --- a/webapp/components/channel_header.jsx +++ b/webapp/components/channel_header.jsx @@ -68,12 +68,18 @@ export default class ChannelHeader extends React.Component { const stats = ChannelStore.getStats(this.props.channelId); const users = UserStore.getProfileListInChannel(this.props.channelId); + let otherUserId = null; + if (channel && channel.type === 'D') { + otherUserId = Utils.getUserIdFromChannelName(channel); + } + return { channel, memberChannel: ChannelStore.getMyMember(this.props.channelId), users, userCount: stats.member_count, currentUser: UserStore.getCurrentUser(), + otherUserId, enableFormatting: PreferenceStore.getBool(Preferences.CATEGORY_ADVANCED_SETTINGS, 'formatting', true), isBusy: WebrtcStore.isBusy(), isFavorite: channel && ChannelUtils.isFavoriteChannel(channel) @@ -84,7 +90,6 @@ export default class ChannelHeader extends React.Component { if (!this.state.channel || !this.state.memberChannel || !this.state.users || - (Object.keys(this.state.users).length === 0 && this.state.channel.type === 'D') || !this.state.userCount || !this.state.currentUser) { return false; @@ -240,7 +245,10 @@ export default class ChannelHeader extends React.Component { const flagIcon = Constants.FLAG_ICON_SVG; if (!this.validState()) { - return null; + // Use an empty div to make sure the header's height stays constant + return ( + <div className='channel-header'/> + ); } const channel = this.state.channel; @@ -285,7 +293,7 @@ export default class ChannelHeader extends React.Component { if (isDirect) { const userMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia; - const contact = this.state.users[0]; + const otherUserId = this.state.otherUserId; const teammateId = Utils.getUserIdFromChannelName(channel); channelTitle = Utils.displayUsername(teammateId); @@ -293,7 +301,7 @@ export default class ChannelHeader extends React.Component { const webrtcEnabled = global.mm_config.EnableWebrtc === 'true' && userMedia && Utils.isFeatureEnabled(PreReleaseFeatures.WEBRTC_PREVIEW); if (webrtcEnabled) { - const isOffline = UserStore.getStatus(contact.id) === UserStatuses.OFFLINE; + const isOffline = UserStore.getStatus(otherUserId) === UserStatuses.OFFLINE; const busy = this.state.isBusy; let circleClass = ''; let webrtcMessage; @@ -332,7 +340,7 @@ export default class ChannelHeader extends React.Component { <div className='webrtc__header'> <a href='#' - onClick={() => this.initWebrtc(contact.id, !isOffline)} + onClick={() => this.initWebrtc(otherUserId, !isOffline)} disabled={isOffline} > <OverlayTrigger diff --git a/webapp/components/code_preview.jsx b/webapp/components/code_preview.jsx index 46fe51a61..6afe45c2e 100644 --- a/webapp/components/code_preview.jsx +++ b/webapp/components/code_preview.jsx @@ -51,6 +51,7 @@ export default class CodePreview extends React.Component { async: true, url: props.fileUrl, type: 'GET', + dataType: 'text', error: this.handleReceivedError, success: this.handleReceivedCode }); @@ -61,7 +62,11 @@ export default class CodePreview extends React.Component { if (data.nodeName === '#document') { code = new XMLSerializer().serializeToString(data); } - this.setState({code, loading: false, success: true}); + this.setState({ + code, + loading: false, + success: true + }); } handleReceivedError() { diff --git a/webapp/components/post_view/post_view_cache.jsx b/webapp/components/post_view/post_view_cache.jsx index c1b278c35..3b6123b09 100644 --- a/webapp/components/post_view/post_view_cache.jsx +++ b/webapp/components/post_view/post_view_cache.jsx @@ -17,11 +17,12 @@ export default class PostViewCache extends React.Component { this.onChannelChange = this.onChannelChange.bind(this); + const currentChannelId = ChannelStore.getCurrentId(); const channel = ChannelStore.getCurrent(); this.state = { - currentChannelId: channel.id, - channels: [channel] + currentChannelId, + channels: channel ? [channel] : [] }; } @@ -40,7 +41,7 @@ export default class PostViewCache extends React.Component { const channels = Object.assign([], this.state.channels); const currentChannel = ChannelStore.getCurrent(); - if (currentChannel == null) { + if (!currentChannel) { return; } diff --git a/webapp/components/post_view/post_view_controller.jsx b/webapp/components/post_view/post_view_controller.jsx index 57b488b54..53cd0b28c 100644 --- a/webapp/components/post_view/post_view_controller.jsx +++ b/webapp/components/post_view/post_view_controller.jsx @@ -202,8 +202,13 @@ export default class PostViewController extends React.Component { } } - onSetNewMessageIndicator(lastViewed, ownNewMessage) { - this.setState({lastViewed, ownNewMessage}); + onSetNewMessageIndicator() { + let lastViewed = Number.MAX_VALUE; + const member = ChannelStore.getMyMember(this.props.channel.id); + if (member != null) { + lastViewed = member.last_viewed_at; + } + this.setState({lastViewed}); } onPostListScroll(atBottom) { diff --git a/webapp/components/rhs_root_post.jsx b/webapp/components/rhs_root_post.jsx index 0dae5976f..22795967a 100644 --- a/webapp/components/rhs_root_post.jsx +++ b/webapp/components/rhs_root_post.jsx @@ -90,7 +90,7 @@ export default class RhsRootPost extends React.Component { var isOwner = this.props.currentUser.id === post.user_id; var isAdmin = TeamStore.isTeamAdminForCurrentTeam() || UserStore.isSystemAdminForCurrentUser(); const isSystemMessage = post.type && post.type.startsWith(Constants.SYSTEM_MESSAGE_PREFIX); - var timestamp = user.update_at; + var timestamp = user ? user.update_at : 0; var channel = ChannelStore.get(post.channel_id); const flagIcon = Constants.FLAG_ICON_SVG; diff --git a/webapp/components/sidebar_header_dropdown.jsx b/webapp/components/sidebar_header_dropdown.jsx index b665eef52..aa5226702 100644 --- a/webapp/components/sidebar_header_dropdown.jsx +++ b/webapp/components/sidebar_header_dropdown.jsx @@ -45,6 +45,7 @@ export default class SidebarHeaderDropdown extends React.Component { this.showGetTeamInviteLinkModal = this.showGetTeamInviteLinkModal.bind(this); this.showTeamMembersModal = this.showTeamMembersModal.bind(this); this.hideTeamMembersModal = this.hideTeamMembersModal.bind(this); + this.handleSwitchTeams = this.handleSwitchTeams.bind(this); this.onTeamChange = this.onTeamChange.bind(this); this.openAccountSettings = this.openAccountSettings.bind(this); @@ -131,6 +132,11 @@ export default class SidebarHeaderDropdown extends React.Component { }); } + handleSwitchTeams() { + // The actual switching of teams is handled by the react-router Link + this.setState({showDropdown: false}); + } + componentDidMount() { TeamStore.addChangeListener(this.onTeamChange); document.addEventListener('keydown', this.openAccountSettings); @@ -367,6 +373,7 @@ export default class SidebarHeaderDropdown extends React.Component { <li key={'team_' + team.name}> <Link to={'/' + team.name + '/channels/town-square'} + onClick={this.handleSwitchTeams} > <FormattedMessage id='navbar_dropdown.switchTo' |