179 lines
5.5 KiB
JavaScript
Raw Normal View History

2017-11-08 12:22:03 +01:00
/**
*
* PopUpForm
*
*/
import React from 'react';
import { Button, Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap';
import { FormattedMessage } from 'react-intl';
import PropTypes from 'prop-types';
2018-01-19 13:34:55 +01:00
import { get, isObject, includes, map, take, takeRight } from 'lodash';
// Translations
import en from 'translations/en.json';
2017-11-08 12:22:03 +01:00
import Input from 'components/Input';
import styles from './styles.scss';
class PopUpForm extends React.Component { // eslint-disable-line react/prefer-stateless-function
renderButton = () => {
if (this.props.showLoader) {
return (
<Button onClick={() => {}} type="submit" className={styles.primary} disabled>
<p className={styles.saving}>
<span>.</span><span>.</span><span>.</span>
</p>
</Button>
);
}
return (
<Button type="submit" onClick={this.props.onSubmit} className={styles.primary}>
2017-11-23 18:08:14 +01:00
<FormattedMessage id="users-permissions.PopUpForm.button.save" />
2017-11-08 12:22:03 +01:00
</Button>
);
}
renderForm = () => {
2018-01-19 13:34:55 +01:00
const { dataToEdit, values } = this.props;
2017-11-08 12:22:03 +01:00
if (this.props.settingType === 'providers') {
return (
<div className="row">
<Input
2017-11-08 16:06:21 +01:00
autoFocus
2017-11-23 18:08:14 +01:00
label="users-permissions.PopUpForm.inputSelect.providers.label"
2017-11-08 12:22:03 +01:00
name="provider"
2017-11-08 16:06:21 +01:00
onChange={this.props.onChange}
2017-11-08 12:22:03 +01:00
selectOptions={[{ value: 'Email'}, { value: 'Facebook' }, { value: 'Google' }]}
type="select"
validations={{ required: true }}
2017-11-08 16:06:21 +01:00
value={get(this.props.values, 'provider')}
2017-11-08 12:22:03 +01:00
/>
<div className="col-md-6" />
<Input
2017-11-23 18:08:14 +01:00
inputDescription="users-permissions.PopUpForm.inputToggle.providers.description"
label="users-permissions.PopUpForm.inputToggle.providers.label"
2017-11-08 12:22:03 +01:00
name="enabled"
2017-11-08 16:06:21 +01:00
onChange={this.props.onChange}
2017-11-08 12:22:03 +01:00
type="toggle"
validations={{}}
2017-11-08 16:06:21 +01:00
value={get(this.props.values, 'enabled')}
2017-11-08 12:22:03 +01:00
/>
</div>
);
}
2018-01-19 13:34:55 +01:00
const form = Object.keys(values.options || {}).reduce((acc, current) => {
if (isObject(get(values, ['options', current]))) {
return Object.keys(get(values, ['options', current], {}))
.reduce((acc, curr) => {
acc.push(`options.${current}.${curr}`);
return acc;
}, []).concat(acc);
} else {
acc.push(`options.${current}`);
}
return acc;
}, []);
2017-11-08 12:22:03 +01:00
return (
<div className="row">
2018-01-19 13:34:55 +01:00
{map(take(form, 3), (value, key) => (
<Input
autoFocus={key === 0}
key={value}
label={`users-permissions.PopUpForm.Email.${value}.label`}
name={`${dataToEdit}.${value}`}
onChange={this.props.onChange}
placeholder={`users-permissions.PopUpForm.Email.${value}.placeholder`}
type={includes(value, 'email') ? 'email' : 'text'}
value={get(values, value)}
validations={{}}
/>
))}
2017-11-08 12:22:03 +01:00
<div className="col-md-6" />
2018-01-19 13:34:55 +01:00
{map(takeRight(form, 2), (value) => (
<Input
key={value}
customBootstrapClass="col-md-12"
label={`users-permissions.PopUpForm.Email.${value}.label`}
name={`${dataToEdit}.${value}`}
onChange={this.props.onChange}
placeholder={`users-permissions.PopUpForm.Email.${this.props.dataToEdit}.${value}.placeholder`}
type={includes(value, 'object') ? 'text' : 'textarea'}
validations={{}}
value={get(values, value)}
/>
))}
2017-11-08 12:22:03 +01:00
</div>
);
}
render() {
2018-01-19 13:34:55 +01:00
const { actionType, dataToEdit, display, settingType } = this.props.values;
let header = <span>{dataToEdit}</span>;
if (actionType) {
header = <FormattedMessage id={`users-permissions.PopUpForm.header.${actionType}.${settingType}`} />;
}
if (display && en[display]) {
header = <FormattedMessage id={`users-permissions.${display}`} />;
}
2017-11-08 12:22:03 +01:00
return (
<div className={styles.popUpForm}>
2018-01-19 13:34:55 +01:00
<Modal isOpen={this.props.isOpen} toggle={this.context.unsetDataToEdit} className={`${styles.modalPosition}`}>
<ModalHeader toggle={this.context.unsetDataToEdit} className={styles.modalHeader} />
2017-11-08 12:22:03 +01:00
<div className={styles.headerContainer}>
<div>
2018-01-19 13:34:55 +01:00
{header}
2017-11-08 12:22:03 +01:00
</div>
</div>
2017-11-08 16:06:21 +01:00
<form onSubmit={this.props.onSubmit}>
<ModalBody className={styles.modalBody}>
<div className="container-fluid">
{this.renderForm()}
</div>
</ModalBody>
<ModalFooter className={styles.modalFooter}>
2018-01-19 13:34:55 +01:00
<Button onClick={() => this.context.unsetDataToEdit()} className={styles.secondary}>
2017-11-23 18:08:14 +01:00
<FormattedMessage id="users-permissions.PopUpForm.button.cancel" />
2017-11-08 16:06:21 +01:00
</Button>
{this.renderButton()}
</ModalFooter>
</form>
2017-11-08 12:22:03 +01:00
</Modal>
</div>
);
}
}
2018-01-19 13:34:55 +01:00
PopUpForm.contextTypes = {
unsetDataToEdit: PropTypes.func.isRequired,
};
2017-11-08 16:06:21 +01:00
PopUpForm.defaultProps = {
settingType: 'providers',
showLoader: false,
};
PopUpForm.propTypes = {
2017-11-08 12:22:03 +01:00
actionType: PropTypes.string.isRequired,
2018-01-19 13:34:55 +01:00
dataToEdit: PropTypes.string.isRequired,
2017-11-08 12:22:03 +01:00
isOpen: PropTypes.bool.isRequired,
2017-11-08 16:06:21 +01:00
onChange: PropTypes.func.isRequired,
onSubmit: PropTypes.func.isRequired,
settingType: PropTypes.string,
showLoader: PropTypes.bool,
values: PropTypes.object.isRequired,
2017-11-08 12:22:03 +01:00
};
export default PopUpForm;