parent
							
								
									610dcb1274
								
							
						
					
					
						commit
						dd29c1d258
					
				
					 5 changed files with 99 additions and 6 deletions
				
			
		| 
						 | 
				
			
			@ -0,0 +1,66 @@
 | 
			
		|||
import React from 'react';
 | 
			
		||||
import ImmutablePropTypes from 'react-immutable-proptypes';
 | 
			
		||||
import PropTypes from 'prop-types';
 | 
			
		||||
import DropdownMenuContainer from '../../../containers/dropdown_menu_container';
 | 
			
		||||
import { defineMessages, injectIntl } from 'react-intl';
 | 
			
		||||
import { preferencesLink, profileLink } from 'flavours/glitch/utils/backend_links';
 | 
			
		||||
 | 
			
		||||
const messages = defineMessages({
 | 
			
		||||
  edit_profile: { id: 'account.edit_profile', defaultMessage: 'Edit profile' },
 | 
			
		||||
  pins: { id: 'navigation_bar.pins', defaultMessage: 'Pinned posts' },
 | 
			
		||||
  preferences: { id: 'navigation_bar.preferences', defaultMessage: 'Preferences' },
 | 
			
		||||
  follow_requests: { id: 'navigation_bar.follow_requests', defaultMessage: 'Follow requests' },
 | 
			
		||||
  favourites: { id: 'navigation_bar.favourites', defaultMessage: 'Favourites' },
 | 
			
		||||
  lists: { id: 'navigation_bar.lists', defaultMessage: 'Lists' },
 | 
			
		||||
  blocks: { id: 'navigation_bar.blocks', defaultMessage: 'Blocked users' },
 | 
			
		||||
  domain_blocks: { id: 'navigation_bar.domain_blocks', defaultMessage: 'Hidden domains' },
 | 
			
		||||
  mutes: { id: 'navigation_bar.mutes', defaultMessage: 'Muted users' },
 | 
			
		||||
  filters: { id: 'navigation_bar.filters', defaultMessage: 'Muted words' },
 | 
			
		||||
  logout: { id: 'navigation_bar.logout', defaultMessage: 'Logout' },
 | 
			
		||||
  bookmarks: { id: 'navigation_bar.bookmarks', defaultMessage: 'Bookmarks' },
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
export default @injectIntl
 | 
			
		||||
class ActionBar extends React.PureComponent {
 | 
			
		||||
 | 
			
		||||
  static propTypes = {
 | 
			
		||||
    account: ImmutablePropTypes.map.isRequired,
 | 
			
		||||
    onLogout: PropTypes.func.isRequired,
 | 
			
		||||
    intl: PropTypes.object.isRequired,
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  handleLogout = () => {
 | 
			
		||||
    this.props.onLogout();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  render () {
 | 
			
		||||
    const { intl } = this.props;
 | 
			
		||||
 | 
			
		||||
    let menu = [];
 | 
			
		||||
 | 
			
		||||
    menu.push({ text: intl.formatMessage(messages.edit_profile), href: profileLink });
 | 
			
		||||
    menu.push({ text: intl.formatMessage(messages.preferences), href: preferencesLink });
 | 
			
		||||
    menu.push({ text: intl.formatMessage(messages.pins), to: '/pinned' });
 | 
			
		||||
    menu.push(null);
 | 
			
		||||
    menu.push({ text: intl.formatMessage(messages.follow_requests), to: '/follow_requests' });
 | 
			
		||||
    menu.push({ text: intl.formatMessage(messages.favourites), to: '/favourites' });
 | 
			
		||||
    menu.push({ text: intl.formatMessage(messages.bookmarks), to: '/bookmarks' });
 | 
			
		||||
    menu.push({ text: intl.formatMessage(messages.lists), to: '/lists' });
 | 
			
		||||
    menu.push(null);
 | 
			
		||||
    menu.push({ text: intl.formatMessage(messages.mutes), to: '/mutes' });
 | 
			
		||||
    menu.push({ text: intl.formatMessage(messages.blocks), to: '/blocks' });
 | 
			
		||||
    menu.push({ text: intl.formatMessage(messages.domain_blocks), to: '/domain_blocks' });
 | 
			
		||||
    menu.push({ text: intl.formatMessage(messages.filters), href: '/filters' });
 | 
			
		||||
    menu.push(null);
 | 
			
		||||
    menu.push({ text: intl.formatMessage(messages.logout), action: this.handleLogout });
 | 
			
		||||
 | 
			
		||||
    return (
 | 
			
		||||
      <div className='compose__action-bar'>
 | 
			
		||||
        <div className='compose__action-bar-dropdown'>
 | 
			
		||||
          <DropdownMenuContainer items={menu} icon='ellipsis-v' size={18} direction='right' />
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
    );
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,5 +1,7 @@
 | 
			
		|||
import React from 'react';
 | 
			
		||||
import PropTypes from 'prop-types';
 | 
			
		||||
import ImmutablePropTypes from 'react-immutable-proptypes';
 | 
			
		||||
import ActionBar from './action_bar';
 | 
			
		||||
import Avatar from 'flavours/glitch/components/avatar';
 | 
			
		||||
import Permalink from 'flavours/glitch/components/permalink';
 | 
			
		||||
import { FormattedMessage } from 'react-intl';
 | 
			
		||||
| 
						 | 
				
			
			@ -10,11 +12,12 @@ export default class NavigationBar extends ImmutablePureComponent {
 | 
			
		|||
 | 
			
		||||
  static propTypes = {
 | 
			
		||||
    account: ImmutablePropTypes.map.isRequired,
 | 
			
		||||
    onLogout: PropTypes.func.isRequired,
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  render () {
 | 
			
		||||
    return (
 | 
			
		||||
      <div className='drawer--account'>
 | 
			
		||||
      <div className='navigation-bar'>
 | 
			
		||||
        <Permalink className='avatar' href={this.props.account.get('url')} to={`/@${this.props.account.get('acct')}`}>
 | 
			
		||||
          <span style={{ display: 'none' }}>{this.props.account.get('acct')}</span>
 | 
			
		||||
          <Avatar account={this.props.account} size={48} />
 | 
			
		||||
| 
						 | 
				
			
			@ -28,11 +31,16 @@ export default class NavigationBar extends ImmutablePureComponent {
 | 
			
		|||
          { profileLink !== undefined && (
 | 
			
		||||
            <a
 | 
			
		||||
              className='edit'
 | 
			
		||||
              href={ profileLink }
 | 
			
		||||
              href={profileLink}
 | 
			
		||||
            ><FormattedMessage id='navigation_bar.edit_profile' defaultMessage='Edit profile' /></a>
 | 
			
		||||
          )}
 | 
			
		||||
        </div>
 | 
			
		||||
 | 
			
		||||
        <div className='navigation-bar__actions'>
 | 
			
		||||
          <ActionBar account={this.props.account} onLogout={this.props.onLogout} />
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
    );
 | 
			
		||||
  };
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,11 +1,30 @@
 | 
			
		|||
import { connect }   from 'react-redux';
 | 
			
		||||
import { defineMessages, injectIntl } from 'react-intl';
 | 
			
		||||
import NavigationBar from '../components/navigation_bar';
 | 
			
		||||
import { logOut } from 'flavours/glitch/utils/log_out';
 | 
			
		||||
import { openModal } from 'flavours/glitch/actions/modal';
 | 
			
		||||
import { me } from 'flavours/glitch/initial_state';
 | 
			
		||||
 | 
			
		||||
const messages = defineMessages({
 | 
			
		||||
  logoutMessage: { id: 'confirmations.logout.message', defaultMessage: 'Are you sure you want to log out?' },
 | 
			
		||||
  logoutConfirm: { id: 'confirmations.logout.confirm', defaultMessage: 'Log out' },
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
const mapStateToProps = state => {
 | 
			
		||||
  return {
 | 
			
		||||
    account: state.getIn(['accounts', me]),
 | 
			
		||||
  };
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
export default connect(mapStateToProps)(NavigationBar);
 | 
			
		||||
const mapDispatchToProps = (dispatch, { intl }) => ({
 | 
			
		||||
  onLogout () {
 | 
			
		||||
    dispatch(openModal('CONFIRM', {
 | 
			
		||||
      message: intl.formatMessage(messages.logoutMessage),
 | 
			
		||||
      confirm: intl.formatMessage(messages.logoutConfirm),
 | 
			
		||||
      closeWhenConfirm: false,
 | 
			
		||||
      onConfirm: () => logOut(),
 | 
			
		||||
    }));
 | 
			
		||||
  },
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
export default injectIntl(connect(mapStateToProps, mapDispatchToProps)(NavigationBar));
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -92,7 +92,7 @@
 | 
			
		|||
  @include search-popout();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.drawer--account {
 | 
			
		||||
.navigation-bar {
 | 
			
		||||
  padding: 10px;
 | 
			
		||||
  color: $darker-text-color;
 | 
			
		||||
  display: flex;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -37,7 +37,7 @@
 | 
			
		|||
    top: 15px;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .drawer--account {
 | 
			
		||||
  .navigation-bar {
 | 
			
		||||
    flex: 0 1 48px;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue