LabelChange.tsx

 1import { makeStyles } from '@material-ui/core/styles';
 2import React from 'react';
 3
 4import Author from '../Author';
 5import Date from '../Date';
 6import Label from '../Label';
 7import { LabelChangeFragment } from './LabelChangeFragment.generated';
 8
 9const useStyles = makeStyles(theme => ({
10  main: {
11    ...theme.typography.body1,
12    marginLeft: theme.spacing(1) + 40,
13  },
14  author: {
15    fontWeight: 'bold',
16  },
17}));
18
19type Props = {
20  op: LabelChangeFragment;
21};
22
23function LabelChange({ op }: Props) {
24  const { added, removed } = op;
25  const classes = useStyles();
26  return (
27    <div className={classes.main}>
28      <Author author={op.author} className={classes.author} />
29      {added.length > 0 && <span> added the </span>}
30      {added.map((label, index) => (
31        <Label key={index} label={label} />
32      ))}
33      {added.length > 0 && removed.length > 0 && <span> and</span>}
34      {removed.length > 0 && <span> removed the </span>}
35      {removed.map((label, index) => (
36        <Label key={index} label={label} />
37      ))}
38      <span>
39        {' '}
40        label
41        {added.length + removed.length > 1 && 's'}{' '}
42      </span>
43      <Date date={op.date} />
44    </div>
45  );
46}
47
48export default LabelChange;