summaryrefslogtreecommitdiffstats
path: root/webapp/components/channel_header.jsx
diff options
context:
space:
mode:
Diffstat (limited to 'webapp/components/channel_header.jsx')
-rw-r--r--webapp/components/channel_header.jsx63
1 files changed, 56 insertions, 7 deletions
diff --git a/webapp/components/channel_header.jsx b/webapp/components/channel_header.jsx
index 1a8625cd2..2d3de5998 100644
--- a/webapp/components/channel_header.jsx
+++ b/webapp/components/channel_header.jsx
@@ -26,7 +26,9 @@ import WebrtcStore from 'stores/webrtc_store.jsx';
import AppDispatcher from '../dispatcher/app_dispatcher.jsx';
import * as GlobalActions from 'actions/global_actions.jsx';
import * as WebrtcActions from 'actions/webrtc_actions.jsx';
+import * as ChannelActions from 'actions/channel_actions.jsx';
import * as Utils from 'utils/utils.jsx';
+import * as ChannelUtils from 'utils/channel_utils.jsx';
import * as TextFormatting from 'utils/text_formatting.jsx';
import Client from 'client/web_client.jsx';
import * as AsyncClient from 'utils/async_client.jsx';
@@ -63,18 +65,19 @@ export default class ChannelHeader extends React.Component {
}
getStateFromStores() {
+ const channel = ChannelStore.get(this.props.channelId);
const stats = ChannelStore.getStats(this.props.channelId);
-
const users = UserStore.getProfileListInChannel(this.props.channelId);
return {
- channel: ChannelStore.get(this.props.channelId),
+ channel,
memberChannel: ChannelStore.getMyMember(this.props.channelId),
users,
userCount: stats.member_count,
currentUser: UserStore.getCurrentUser(),
enableFormatting: PreferenceStore.getBool(Preferences.CATEGORY_ADVANCED_SETTINGS, 'formatting', true),
- isBusy: WebrtcStore.isBusy()
+ isBusy: WebrtcStore.isBusy(),
+ isFavorite: channel && ChannelUtils.isFavoriteChannel(channel)
};
}
@@ -125,11 +128,17 @@ export default class ChannelHeader extends React.Component {
handleLeave() {
Client.leaveChannel(this.state.channel.id,
() => {
+ const channelId = this.state.channel.id;
+
AppDispatcher.handleViewAction({
type: ActionTypes.LEAVE_CHANNEL,
- id: this.state.channel.id
+ id: channelId
});
+ if (this.state.isFavorite) {
+ ChannelActions.unmarkFavorite(channelId);
+ }
+
const townsquare = ChannelStore.getByName('town-square');
browserHistory.push(TeamStore.getCurrentTeamRelativeUrl() + '/channels/' + townsquare.name);
},
@@ -139,6 +148,16 @@ export default class ChannelHeader extends React.Component {
);
}
+ toggleFavorite = (e) => {
+ e.preventDefault();
+
+ if (this.state.isFavorite) {
+ ChannelActions.unmarkFavorite(this.state.channel.id);
+ } else {
+ ChannelActions.markFavorite(this.state.channel.id);
+ }
+ };
+
searchMentions(e) {
e.preventDefault();
const user = this.state.currentUser;
@@ -272,9 +291,9 @@ export default class ChannelHeader extends React.Component {
if (isDirect) {
const userMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia;
const contact = this.state.users[0];
- if (contact) {
- channelTitle = Utils.displayUsername(contact.id);
- }
+
+ const teammateId = Utils.getUserIdFromChannelName(channel);
+ channelTitle = Utils.displayUsername(teammateId);
const webrtcEnabled = global.mm_config.EnableWebrtc === 'true' && global.mm_license.Webrtc === 'true' &&
global.mm_config.EnableDeveloper === 'true' && userMedia && Utils.isFeatureEnabled(PreReleaseFeatures.WEBRTC_PREVIEW);
@@ -607,6 +626,35 @@ export default class ChannelHeader extends React.Component {
headerText = channel.header;
}
+ const toggleFavoriteTooltip = (
+ <Tooltip id='favoriteTooltip'>
+ {this.state.isFavorite ?
+ <FormattedMessage
+ id='channelHeader.removeFromFavorites'
+ defaultMessage='Remove from Favorites'
+ /> :
+ <FormattedMessage
+ id='channelHeader.addToFavorites'
+ defaultMessage='Add to Favorites'
+ />}
+ </Tooltip>
+ );
+ const toggleFavorite = (
+ <OverlayTrigger
+ delayShow={Constants.OVERLAY_TIME_DELAY}
+ placement='bottom'
+ overlay={toggleFavoriteTooltip}
+ >
+ <a
+ href='#'
+ onClick={this.toggleFavorite}
+ className='channel-header__favorites'
+ >
+ <i className={'icon fa ' + (this.state.isFavorite ? 'fa-star' : 'fa-star-o')}/>
+ </a>
+ </OverlayTrigger>
+ );
+
return (
<div
id='channel-header'
@@ -618,6 +666,7 @@ export default class ChannelHeader extends React.Component {
<th>
<div className='channel-header__info'>
{webrtc}
+ {toggleFavorite}
<div className='dropdown'>
<a
href='#'