import React, { Fragment } from 'react'; import PropTypes from 'prop-types'; import { withStyles } from '@material-ui/core/styles'; import Bookmark from '@material-ui/icons/Bookmark'; import Delete from '@material-ui/icons/Delete'; import ExpandMoreIcon from '@material-ui/icons/ExpandMore'; import classNames from 'classnames'; import Flag from '@material-ui/icons/Flag'; import People from '@material-ui/icons/People'; import QuestionAnswer from '@material-ui/icons/QuestionAnswer'; import ReportIcon from '@material-ui/icons/Report'; import LabelIcon from '@material-ui/icons/Label'; import FileIcon from '@material-ui/icons/Description'; import Download from '@material-ui/icons/CloudDownload'; import StarBorder from '@material-ui/icons/StarBorder'; import Star from '@material-ui/icons/Star'; import { List, Typography, ExpansionPanel, ExpansionPanelDetails, ExpansionPanelSummary, ExpansionPanelActions, Tooltip, IconButton, Avatar, Button, ListSubheader, Menu, MenuItem, Divider, } from '@material-ui/core'; import isImage from '../Forms/helpers/helpers.js'; import styles from './email-jss'; const ITEM_HEIGHT = 80; class EmailList extends React.Component { state = { anchorElOpt: null, itemToMove: null }; handleClickOpt = (event, item) => { this.setState({ anchorElOpt: event.currentTarget, itemToMove: item }); }; handleCloseOpt = () => { this.setState({ anchorElOpt: null }); }; handleMoveTo = (item, category) => { this.props.moveTo(item, category); this.setState({ anchorElOpt: null }); } render() { const { classes, emailData, openMail, filterPage, keyword, remove, toggleStar, reply } = this.props; const { anchorElOpt, itemToMove } = this.state; /* Basic Filter */ const inbox = emailData.filter(item => item.get('category') !== 'sent' && item.get('category') !== 'spam'); const stared = emailData.filter(item => item.get('stared')); const sent = emailData.filter(item => item.get('category') === 'sent'); const spam = emailData.filter(item => item.get('category') === 'spam'); /* Category Filter */ const updates = emailData.filter(item => item.get('category') === 'updates'); const social = emailData.filter(item => item.get('category') === 'social'); const forums = emailData.filter(item => item.get('category') === 'forums'); const promos = emailData.filter(item => item.get('category') === 'promos'); const getCategory = cat => { switch (cat) { case 'updates': return ( {' '} Updates ); case 'social': return ( {' '} Social ); case 'promos': return ( {' '} Promos ); case 'forums': return ( {' '} Forums ); default: return false; } }; const attachmentPreview = filesArray => filesArray.map((file, index) => { const base64File = URL.createObjectURL(file); if (isImage(file)) { return (
preview
{file.name}
); } return (
{file.name}
); }); const getEmail = dataArray => dataArray.map(mail => { const renderHTML = { __html: mail.get('content') }; if (mail.get('subject').toLowerCase().indexOf(keyword) === -1) { return false; } return ( openMail(mail)}> }>
toggleStar(mail)} className={classes.starBtn}>{mail.get('stared') ? () : () } {mail.get('category') !== 'spam' ? () : () } {mail.get('category') === 'sent' && ('To ')} {mail.get('name')} {mail.get('date')}
{mail.get('subject')} {getCategory(mail.get('category'))}
{mail.get('category') !== 'sent' && ( From {mail.get('name')} {' '} to me )}
toggleStar(mail)}>{mail.get('stared') ? () : () } this.handleClickOpt(event, mail)} > remove(mail)}>
{mail.get('subject')}
{attachmentPreview(mail.get('attachment'))}
); }); const showEmail = category => { switch (category) { case 'inbox': return getEmail(inbox); case 'stared': return getEmail(stared); case 'sent': return getEmail(sent); case 'spam': return getEmail(spam); case 'updates': return getEmail(updates); case 'social': return getEmail(social); case 'promos': return getEmail(promos); case 'forums': return getEmail(forums); default: return getEmail(inbox); } }; return (
Mark to... } /> this.handleMoveTo(itemToMove, 'updates')}> {' '} Updates this.handleMoveTo(itemToMove, 'social')}> {' '} Social this.handleMoveTo(itemToMove, 'promos')}> {' '} Promos this.handleMoveTo(itemToMove, 'forums')}> {' '} Forums this.handleMoveTo(itemToMove, 'spam')}> {' '} Spam {showEmail(filterPage)}
); } } EmailList.propTypes = { classes: PropTypes.object.isRequired, emailData: PropTypes.object.isRequired, openMail: PropTypes.func.isRequired, moveTo: PropTypes.func.isRequired, remove: PropTypes.func.isRequired, toggleStar: PropTypes.func.isRequired, reply: PropTypes.func.isRequired, filterPage: PropTypes.string.isRequired, keyword: PropTypes.string.isRequired, }; export default withStyles(styles)(EmailList);