import React, { Component, PropTypes } from 'react'; import classNames from 'classnames'; import { Link } from 'react-router'; import { FormattedMessage as Message } from 'react-intl'; import loader from 'services/loader'; import { skins, SKIN_DARK, COLOR_WHITE } from 'components/ui'; import { Button } from 'components/ui/form'; import styles from './accountSwitcher.scss'; import messages from './AccountSwitcher.intl.json'; export class AccountSwitcher extends Component { static displayName = 'AccountSwitcher'; static propTypes = { switchAccount: PropTypes.func.isRequired, removeAccount: PropTypes.func.isRequired, onAfterAction: PropTypes.func, // called after each action performed onSwitch: PropTypes.func, // called after switching an account. The active account will be passed as arg accounts: PropTypes.shape({ // TODO: accounts shape active: PropTypes.shape({ id: PropTypes.number }), available: PropTypes.arrayOf(PropTypes.shape({ id: PropTypes.number })) }), skin: PropTypes.oneOf(skins), highlightActiveAccount: PropTypes.bool, // whether active account should be expanded and shown on the top allowLogout: PropTypes.bool, // whether to show logout icon near each account allowAdd: PropTypes.bool // whether to show add account button }; static defaultProps = { skin: SKIN_DARK, highlightActiveAccount: true, allowLogout: true, allowAdd: true, onAfterAction() {}, onSwitch() {} }; render() { const { accounts, skin, allowAdd, allowLogout, highlightActiveAccount } = this.props; let {available} = accounts; if (highlightActiveAccount) { available = available.filter((account) => account.id !== accounts.active.id); } return (
); } onSwitch = (account) => (event) => { event.preventDefault(); loader.show(); this.props.switchAccount(account) .then(() => this.props.onAfterAction()) .then(() => this.props.onSwitch(account)) .finally(() => loader.hide()); }; onRemove = (account) => (event) => { event.preventDefault(); event.stopPropagation(); this.props.removeAccount(account) .then(() => this.props.onAfterAction()); }; } import { connect } from 'react-redux'; import { authenticate, revoke } from 'components/accounts/actions'; export default connect(({accounts, user}) => ({ accounts, userLang: user.lang // this is to force re-render on lang change }), { switchAccount: authenticate, removeAccount: revoke })(AccountSwitcher);