import React, { Component, PropTypes } from 'react';
import classnames from 'classnames';
import Avatar from '../../../../components/Avatar';
import Dropdown from '../../../../components/forms/fields/Dropdown';
import EditUserForm from '../../../../components/forms/admin/EditUserForm';
import userInterface from '../../../../interfaces/user';
import { userStatusLabel } from './helpers';
class UserBlock extends Component {
static propTypes = {
currentUser: userInterface,
invite: PropTypes.bool,
onEditUser: PropTypes.func,
onSelect: PropTypes.func,
user: userInterface,
userErrors: PropTypes.shape({
base: PropTypes.string,
name: PropTypes.string,
username: PropTypes.string,
}),
};
static userActionOptions = (currentUser, user, invite) => {
const disableActions = currentUser.id === user.id;
const inviteActions = [
{ label: 'Revoke Invitation', value: 'revert_invitation' },
];
const userEnableAction = user.enabled
? { disabled: disableActions, label: 'Disable Account', value: 'disable_account' }
: { label: 'Enable Account', value: 'enable_account' };
const userPromotionAction = user.admin
? { disabled: disableActions, label: 'Demote User', value: 'demote_user' }
: { label: 'Promote User', value: 'promote_user' };
if (invite) return inviteActions;
return [
userEnableAction,
userPromotionAction,
{ label: 'Require Password Reset', value: 'reset_password' },
{ label: 'Modify Details', value: 'modify_details' },
];
};
constructor (props) {
super(props);
this.state = {
isEdit: false,
};
}
onToggleEditing = (evt) => {
evt.preventDefault();
const { isEdit } = this.state;
this.setState({
isEdit: !isEdit,
});
return false;
}
onEditUserFormSubmit = (updatedUser) => {
const { user, onEditUser } = this.props;
return onEditUser(user, updatedUser)
.then(() => {
this.setState({ isEdit: false });
return false;
})
.catch(() => false);
}
onUserActionSelect = (action) => {
const { onSelect, user } = this.props;
if (action === 'modify_details') {
this.setState({
isEdit: true,
});
return false;
}
return onSelect(user, action);
}
renderCTAs = () => {
const { currentUser, invite, user } = this.props;
const { onUserActionSelect } = this;
const userActionOptions = UserBlock.userActionOptions(currentUser, user, invite);
return (
{username}
{position}
{email}
{renderCTAs()}