import React from 'react';
import PropTypes from 'prop-types';
import { withStyles } from '@material-ui/core/styles';
import { bindActionCreators } from 'redux';
import { connect } from 'react-redux';
import data from 'ba-api/contactData';
import { Helmet } from 'react-helmet';
import brand from 'ba-api/brand';
import dummy from 'ba-api/dummyContents';
import {
fetchAction,
showDetailAction,
hideDetailAction,
submitAction,
editAction,
addAction,
closeAction,
removeAction,
addToFavoriteAction,
searchAction,
closeNotifAction
} from 'ba-actions/ContactActions';
import {
ContactHeader,
ContactList,
ContactDetail,
AddContact,
Notification
} from 'ba-components';
import styles from 'ba-components/Contact/contact-jss';
class Contact extends React.Component {
componentDidMount() {
this.props.fetchData(data);
}
submitContact = (item, avatar) => {
const { submit } = this.props;
const avatarBase64 = typeof avatar === 'object' ? URL.createObjectURL(avatar) : avatar;
const avatarPreview = avatar !== null ? avatarBase64 : dummy.user.avatar;
submit(item, avatarPreview);
}
render() {
const title = brand.name + ' - Contact';
const description = brand.desc;
const {
classes,
dataContact,
itemSelected,
showDetail,
hideDetail,
avatarInit,
open,
showMobileDetail,
add,
edit,
close,
remove,
favorite,
keyword,
search,
closeNotif,
messageNotif
} = this.props;
return (
{title}
closeNotif()} message={messageNotif} />
);
}
}
Contact.propTypes = {
classes: PropTypes.object.isRequired,
avatarInit: PropTypes.string.isRequired,
fetchData: PropTypes.func.isRequired,
showDetail: PropTypes.func.isRequired,
hideDetail: PropTypes.func.isRequired,
keyword: PropTypes.string.isRequired,
open: PropTypes.bool.isRequired,
showMobileDetail: PropTypes.bool.isRequired,
add: PropTypes.func.isRequired,
close: PropTypes.func.isRequired,
submit: PropTypes.func.isRequired,
edit: PropTypes.func.isRequired,
remove: PropTypes.func.isRequired,
favorite: PropTypes.func.isRequired,
search: PropTypes.func.isRequired,
dataContact: PropTypes.object.isRequired,
itemSelected: PropTypes.number.isRequired,
closeNotif: PropTypes.func.isRequired,
messageNotif: PropTypes.string.isRequired,
};
const reducer = 'contact';
const mapStateToProps = state => ({
force: state, // force state from reducer
avatarInit: state.getIn([reducer, 'avatarInit']),
dataContact: state.getIn([reducer, 'contactList']),
itemSelected: state.getIn([reducer, 'selectedIndex']),
keyword: state.getIn([reducer, 'keywordValue']),
open: state.getIn([reducer, 'openFrm']),
showMobileDetail: state.getIn([reducer, 'showMobileDetail']),
messageNotif: state.getIn([reducer, 'notifMsg']),
});
const constDispatchToProps = dispatch => ({
fetchData: bindActionCreators(fetchAction, dispatch),
showDetail: bindActionCreators(showDetailAction, dispatch),
hideDetail: () => dispatch(hideDetailAction),
submit: bindActionCreators(submitAction, dispatch),
edit: bindActionCreators(editAction, dispatch),
add: () => dispatch(addAction),
close: () => dispatch(closeAction),
remove: bindActionCreators(removeAction, dispatch),
favorite: bindActionCreators(addToFavoriteAction, dispatch),
search: bindActionCreators(searchAction, dispatch),
closeNotif: () => dispatch(closeNotifAction),
});
const ContactMapped = connect(
mapStateToProps,
constDispatchToProps
)(Contact);
export default withStyles(styles)(ContactMapped);