LabelChange.js

 1import { withStyles } from '@material-ui/core/styles';
 2import gql from 'graphql-tag';
 3import React from 'react';
 4import Author from '../Author';
 5import Date from '../Date';
 6import Label from '../Label';
 7
 8const styles = theme => ({
 9  main: {
10    ...theme.typography.body2,
11    marginLeft: theme.spacing.unit + 40,
12  },
13  author: {
14    fontWeight: 'bold',
15  },
16});
17
18const LabelChange = ({ op, classes }) => {
19  const { added, removed } = op;
20  return (
21    <div className={classes.main}>
22      <Author author={op.author} className={classes.author} />
23      {added.length > 0 && <span> added the </span>}
24      {added.map((label, index) => (
25        <Label key={index} label={label} />
26      ))}
27      {added.length > 0 && removed.length > 0 && <span> and</span>}
28      {removed.length > 0 && <span> removed the </span>}
29      {removed.map((label, index) => (
30        <Label key={index} label={label} />
31      ))}
32      <span>
33        {' '}
34        label
35        {added.length + removed.length > 1 && 's'}{' '}
36      </span>
37      <Date date={op.date} />
38    </div>
39  );
40};
41
42LabelChange.fragment = gql`
43  fragment LabelChange on TimelineItem {
44    ... on LabelChangeTimelineItem {
45      date
46      author {
47        name
48        email
49        displayName
50      }
51      added
52      removed
53    }
54  }
55`;
56
57export default withStyles(styles)(LabelChange);