ValidLabels.tsx

 1import React, { useState } from 'react';
 2
 3import CircularProgress from '@material-ui/core/CircularProgress';
 4import { makeStyles } from '@material-ui/styles';
 5
 6import LabelBullet from './LabelBullet';
 7import { useValidLabelsQuery } from './ValidLabelsQuery.generated';
 8
 9const useStyles = makeStyles({
10  list: {
11    listStyleType: 'none',
12    padding: 0,
13  },
14});
15
16const ValidLabels: React.FC = () => {
17  const { loading, error, data } = useValidLabelsQuery();
18  const [filter, setFilter] = useState('');
19  const classes = useStyles();
20  if (loading) return <CircularProgress />;
21  if (error) return <p>Error: {error}</p>;
22  const labels = data?.repository?.validLabels.nodes.filter(
23    label =>
24      filter === '' || label.name.toLowerCase().includes(filter.toLowerCase())
25  );
26
27  return (
28    <>
29      <input
30        type="text"
31        placeholder="Filter labels…"
32        onChange={e => setFilter(e.target.value)}
33        value={filter}
34      />
35      <ul className={classes.list}>
36        {labels?.map(l => (
37          <li key={l.name}>
38            <LabelBullet label={l} />
39            {l.name}
40          </li>
41        ))}
42      </ul>
43    </>
44  );
45};
46
47export default ValidLabels;