166 lines
4.3 KiB
JavaScript
Raw Normal View History

2017-11-06 18:15:53 +01:00
/**
*
* ListRow
*
*/
import React from 'react';
import cn from 'classnames';
import PropTypes from 'prop-types';
import { router } from 'app';
2017-11-06 18:15:53 +01:00
// Design
import IcoContainer from 'components/IcoContainer';
2017-11-06 18:25:40 +01:00
import PopUpWarning from 'components/PopUpWarning';
2017-11-06 18:15:53 +01:00
import styles from './styles.scss';
class ListRow extends React.Component { // eslint-disable-line react/prefer-stateless-function
2017-11-06 18:25:40 +01:00
state = { showModalDelete: false };
componentWillReceiveProps(nextProps) {
if (nextProps.deleteActionSucceeded !== this.props.deleteActionSucceeded) {
this.setState({ showModalDelete: false });
}
}
2017-11-06 18:15:53 +01:00
generateContent = () => {
let icons = [
{
icoType: 'pencil',
onClick: this.handleClick,
2017-11-06 18:15:53 +01:00
},
{
icoType: 'trash',
2017-11-08 16:06:21 +01:00
onClick: () => { this.setState({ showModalDelete: true }); },
2017-11-06 18:15:53 +01:00
},
];
switch (this.props.settingType) {
case 'roles':
return (
<div className={cn('row', styles.wrapper)}>
<div className="col-md-2">
<b>{this.props.item.name}</b>
</div>
<div className="col-md-7">
{this.props.item.description}
</div>
<div className="col-md-1">
<b>{this.props.item.nb_users}</b>&nbsp;
{this.props.item.nb_users > 1 ? (
'users'
) : (
'user'
)}
</div>
<div className="col-md-2">
<IcoContainer icons={icons} />
</div>
</div>
);
case 'providers':
return (
<div className={cn('row', styles.wrapper)}>
<div className="col-md-4">
<div className={styles.flex}>
<div>
<i className={`fa fa-${this.props.item.ico}`} />
</div>
<div>
{this.props.item.name}
</div>
</div>
</div>
2017-11-14 10:31:18 +01:00
<div className="col-md-6" style={{ fontWeight: '500' }}>
2017-11-06 18:15:53 +01:00
{this.props.item.enabled ? (
<span style={{ color: '#5A9E06' }}>Enabled</span>
) : (
<span style={{ color: '#F64D0A' }}>Disabled</span>
)}
</div>
<div className="col-md-2">
<IcoContainer icons={icons} />
</div>
</div>
);
case 'email-templates':
icons = [
{
icoType: 'pencil',
onClick: this.handleClick,
2017-11-06 18:15:53 +01:00
},
];
return (
<div className={cn('row', styles.wrapper)}>
<div className="col-md-4">
<div className={styles.flex}>
<div>
<i className={`fa fa-${this.props.item.ico}`} />
</div>
<div>
{this.props.item.name}
</div>
</div>
</div>
<div className="col-md-8">
<IcoContainer icons={icons} />
</div>
</div>
);
default:
return '';
}
}
handleClick = () => {
switch (this.props.settingType) {
case 'roles':
return router.push(`${router.location.pathname}/${this.props.item.id}`);
case 'providers':
case 'email-templates':
2017-11-08 12:22:03 +01:00
return router.push(`${router.location.pathname}#edit::${this.props.settingType}::${this.props.item.id}`);
default:
return;
}
}
handleDelete = () => this.props.deleteData(this.props.item, this.props.settingType);
2017-11-06 18:15:53 +01:00
render() {
return (
<li className={styles.li} onClick={this.handleClick}>
2017-11-06 18:15:53 +01:00
<div className={styles.container}>
{this.generateContent()}
</div>
<PopUpWarning
isOpen={this.state.showModalDelete}
onConfirm={this.handleDelete}
toggleModal={() => this.setState({ showModalDelete: false })}
/>
2017-11-06 18:15:53 +01:00
</li>
);
}
}
ListRow.defaultProps = {
item: {
name: 'Owner',
description: 'Rule them all. This role can\'t be deleted',
nb_users: 1,
},
settingType: 'roles',
2017-11-08 16:06:21 +01:00
};
2017-11-06 18:15:53 +01:00
2017-11-08 16:06:21 +01:00
ListRow.propTypes = {
deleteActionSucceeded: PropTypes.bool.isRequired,
deleteData: PropTypes.func.isRequired,
2017-11-06 18:15:53 +01:00
item: PropTypes.object,
settingType: PropTypes.string,
};
export default ListRow;