Message.js

 1import { makeStyles } from '@material-ui/styles';
 2import Paper from '@material-ui/core/Paper';
 3import gql from 'graphql-tag';
 4import React from 'react';
 5import Author from '../Author';
 6import { Avatar } from '../Author';
 7import Date from '../Date';
 8import Content from '../Content';
 9
10const useStyles = makeStyles(theme => ({
11  author: {
12    fontWeight: 'bold',
13  },
14  container: {
15    display: 'flex',
16  },
17  avatar: {
18    marginTop: 2,
19  },
20  bubble: {
21    flex: 1,
22    marginLeft: theme.spacing.unit,
23  },
24  header: {
25    ...theme.typography.body2,
26    color: '#444',
27    padding: '0.5rem 1rem',
28    borderBottom: '1px solid #ddd',
29    display: 'flex',
30  },
31  title: {
32    flex: 1,
33  },
34  tag: {
35    ...theme.typography.button,
36    color: '#888',
37    border: '#ddd solid 1px',
38    padding: '0 0.5rem',
39    fontSize: '0.75rem',
40    borderRadius: 2,
41    marginLeft: '0.5rem',
42  },
43  body: {
44    ...theme.typography.body1,
45    padding: '0 1rem',
46  },
47}));
48
49function Message({ op }) {
50  const classes = useStyles();
51  return (
52    <article className={classes.container}>
53      <Avatar author={op.author} className={classes.avatar} />
54      <Paper elevation={1} className={classes.bubble}>
55        <header className={classes.header}>
56          <div className={classes.title}>
57            <Author className={classes.author} author={op.author} />
58            <span> commented </span>
59            <Date date={op.createdAt} />
60          </div>
61          {op.edited && <div className={classes.tag}>Edited</div>}
62        </header>
63        <section className={classes.body}>
64          <Content markdown={op.message} />
65        </section>
66      </Paper>
67    </article>
68  );
69}
70
71Message.createFragment = gql`
72  fragment Create on TimelineItem {
73    ... on CreateTimelineItem {
74      createdAt
75      ...authored
76      edited
77      message
78    }
79  }
80
81  ${Author.fragment}
82`;
83
84Message.commentFragment = gql`
85  fragment AddComment on TimelineItem {
86    ... on AddCommentTimelineItem {
87      createdAt
88      ...authored
89      edited
90      message
91    }
92  }
93
94  ${Author.fragment}
95`;
96
97export default Message;