summaryrefslogtreecommitdiffstats
path: root/front/odiparpack/app/components/SocialMedia/Timeline.js
diff options
context:
space:
mode:
Diffstat (limited to 'front/odiparpack/app/components/SocialMedia/Timeline.js')
-rw-r--r--front/odiparpack/app/components/SocialMedia/Timeline.js177
1 files changed, 177 insertions, 0 deletions
diff --git a/front/odiparpack/app/components/SocialMedia/Timeline.js b/front/odiparpack/app/components/SocialMedia/Timeline.js
new file mode 100644
index 0000000..e46826b
--- /dev/null
+++ b/front/odiparpack/app/components/SocialMedia/Timeline.js
@@ -0,0 +1,177 @@
+import React, { Fragment } from 'react';
+import PropTypes from 'prop-types';
+import { withStyles } from '@material-ui/core/styles';
+import FavoriteIcon from '@material-ui/icons/Favorite';
+import ShareIcon from '@material-ui/icons/Share';
+import CommentIcon from '@material-ui/icons/Comment';
+import MoreVertIcon from '@material-ui/icons/MoreVert';
+import {
+ Typography,
+ Card,
+ Menu,
+ MenuItem,
+ CardHeader,
+ CardMedia,
+ CardContent,
+ CardActions,
+ IconButton,
+ Icon,
+ Avatar,
+ Tooltip,
+} from '@material-ui/core';
+import Comment from './Comment';
+import styles from './jss/timeline-jss';
+
+
+const optionsOpt = [
+ 'Option 1',
+ 'Option 2',
+ 'Option 3',
+];
+
+const ITEM_HEIGHT = 48;
+
+class Timeline extends React.Component {
+ state = {
+ anchorElOpt: null,
+ openComment: false,
+ };
+
+ handleClickOpt = event => {
+ this.setState({ anchorElOpt: event.currentTarget });
+ };
+
+ handleCloseOpt = () => {
+ this.setState({ anchorElOpt: null });
+ };
+
+ handleOpenComment = (data) => {
+ this.props.fetchComment(data);
+ this.setState({ openComment: true });
+ };
+
+ handleCloseComment = () => {
+ this.setState({ openComment: false });
+ };
+
+ render() {
+ const {
+ classes,
+ dataTimeline,
+ onlike,
+ commentIndex,
+ submitComment,
+ } = this.props;
+ const { anchorElOpt, openComment } = this.state;
+ const getItem = dataArray => dataArray.map(data => (
+ <li key={data.get('id')}>
+ <div className={classes.iconBullet}>
+ <Tooltip id={'tooltip-icon-' + data.get('id')} title={data.get('time')}>
+ <Icon className={classes.icon}>
+ {data.get('icon')}
+ </Icon>
+ </Tooltip>
+ </div>
+ <Card className={classes.cardSocmed}>
+ <CardHeader
+ avatar={
+ <Avatar alt="avatar" src={data.get('avatar')} className={classes.avatar} />
+ }
+ action={(
+ <IconButton
+ aria-label="More"
+ aria-owns={anchorElOpt ? 'long-menu' : null}
+ aria-haspopup="true"
+ className={classes.button}
+ onClick={this.handleClickOpt}
+ >
+ <MoreVertIcon />
+ </IconButton>
+ )}
+ title={data.get('name')}
+ subheader={data.get('date')}
+ />
+ { data.get('image') !== ''
+ && (
+ <CardMedia
+ className={classes.media}
+ image={data.get('image')}
+ title={data.get('name')}
+ />
+ )
+ }
+ <CardContent>
+ <Typography component="p">
+ {data.get('content')}
+ </Typography>
+ </CardContent>
+ <CardActions className={classes.actions}>
+ <IconButton aria-label="Like this" onClick={() => onlike(data)}>
+ <FavoriteIcon className={data.get('liked') ? classes.liked : ''} />
+ </IconButton>
+ <IconButton aria-label="Share">
+ <ShareIcon />
+ </IconButton>
+ <div className={classes.rightIcon}>
+ <Typography variant="caption" component="span">
+ {data.get('comments') !== undefined ? data.get('comments').size : 0}
+ </Typography>
+ <IconButton aria-label="Comment" onClick={() => this.handleOpenComment(data)}>
+ <CommentIcon />
+ </IconButton>
+ </div>
+ </CardActions>
+ </Card>
+ </li>
+ ));
+ return (
+ <Fragment>
+ <Menu
+ id="long-menu"
+ anchorEl={anchorElOpt}
+ open={Boolean(anchorElOpt)}
+ onClose={this.handleCloseOpt}
+ PaperProps={{
+ style: {
+ maxHeight: ITEM_HEIGHT * 4.5,
+ width: 200,
+ },
+ }}
+ >
+ {optionsOpt.map(option => (
+ <MenuItem key={option} selected={option === 'Edit Profile'} onClick={this.handleCloseOpt}>
+ {option}
+ </MenuItem>
+ ))}
+ </Menu>
+ <Comment
+ open={openComment}
+ handleClose={this.handleCloseComment}
+ submitComment={submitComment}
+ dataComment={dataTimeline.getIn([commentIndex, 'comments'])}
+ />
+ <ul className={classes.timeline}>
+ {getItem(dataTimeline)}
+ </ul>
+ </Fragment>
+ );
+ }
+}
+
+Timeline.propTypes = {
+ classes: PropTypes.object.isRequired,
+ onlike: PropTypes.func,
+ dataTimeline: PropTypes.object.isRequired,
+ fetchComment: PropTypes.func,
+ submitComment: PropTypes.func,
+ commentIndex: PropTypes.number,
+};
+
+Timeline.defaultProps = {
+ onlike: () => (false),
+ fetchComment: () => {},
+ submitComment: () => {},
+ commentIndex: 0,
+};
+
+export default withStyles(styles)(Timeline);