1import React from 'react';
2
3import Paper from '@material-ui/core/Paper';
4import { makeStyles } from '@material-ui/core/styles';
5
6import Author, { Avatar } from 'src/components/Author';
7import Content from 'src/components/Content';
8import Date from 'src/components/Date';
9
10import { AddCommentFragment } from './MessageCommentFragment.generated';
11import { CreateFragment } from './MessageCreateFragment.generated';
12
13const useStyles = makeStyles(theme => ({
14 author: {
15 fontWeight: 'bold',
16 },
17 container: {
18 display: 'flex',
19 },
20 avatar: {
21 marginTop: 2,
22 },
23 bubble: {
24 flex: 1,
25 marginLeft: theme.spacing(1),
26 minWidth: 0,
27 },
28 header: {
29 ...theme.typography.body1,
30 color: '#444',
31 padding: '0.5rem 1rem',
32 borderBottom: '1px solid #ddd',
33 display: 'flex',
34 backgroundColor: '#e2f1ff',
35 },
36 title: {
37 flex: 1,
38 },
39 tag: {
40 ...theme.typography.button,
41 color: '#888',
42 border: '#ddd solid 1px',
43 padding: '0 0.5rem',
44 fontSize: '0.75rem',
45 borderRadius: 2,
46 marginLeft: '0.5rem',
47 },
48 body: {
49 ...theme.typography.body2,
50 padding: '0 1rem',
51 },
52}));
53
54type Props = {
55 op: AddCommentFragment | CreateFragment;
56};
57
58function Message({ op }: Props) {
59 const classes = useStyles();
60 return (
61 <article className={classes.container}>
62 <Avatar author={op.author} className={classes.avatar} />
63 <Paper elevation={1} className={classes.bubble}>
64 <header className={classes.header}>
65 <div className={classes.title}>
66 <Author className={classes.author} author={op.author} />
67 <span> commented </span>
68 <Date date={op.createdAt} />
69 </div>
70 {op.edited && <div className={classes.tag}>Edited</div>}
71 </header>
72 <section className={classes.body}>
73 <Content markdown={op.message} />
74 </section>
75 </Paper>
76 </article>
77 );
78}
79
80export default Message;