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  },
12})
13
14const LabelChange = ({op, classes}) => {
15  const {added, removed} = op
16  return (
17    <div className={classes.main}>
18      <Author author={op.author} bold />
19      { added.length > 0 && <span> added the </span>}
20      { added.map((label, index) => <Label key={index} label={label} />)}
21      { (added.length > 0 && removed.length > 0) && <span> and</span>}
22      { removed.length > 0 && <span> removed the </span>}
23      { removed.map((label, index) => <Label key={index} label={label} />)}
24      <span> label{ (added.length + removed.length > 1) && 's'} </span>
25      <Date date={op.date} />
26    </div>
27  )
28}
29
30LabelChange.fragment = gql`
31  fragment LabelChange on Operation {
32    ... on LabelChangeOperation {
33      date
34      author {
35        name
36        email
37      }
38      added
39      removed
40    }
41  }
42`
43
44export default withStyles(styles)(LabelChange)