LabelChange.tsx

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