Skip to content
Snippets Groups Projects
Unverified Commit 92e404b7 authored by ludovicm67's avatar ludovicm67
Browse files

webui: create label bullets in valid labels filtering

parent 4b8f9e55
Branches webui/labels
No related tags found
No related merge requests found
import React from 'react';
import { common } from '@material-ui/core/colors';
import { makeStyles } from '@material-ui/core/styles';
import {
getContrastRatio,
darken,
} from '@material-ui/core/styles/colorManipulator';
import { Color } from 'src/gqlTypes';
import { LabelFragment } from './fragments.generated';
// Minimum contrast between the background and the text color
const contrastThreshold = 2.5;
// Guess the text color based on the background color
const getTextColor = (background: string) =>
getContrastRatio(background, common.white) >= contrastThreshold
? common.white // White on dark backgrounds
: common.black; // And black on light ones
const _rgb = (color: Color) =>
'rgb(' + color.R + ',' + color.G + ',' + color.B + ')';
// Create a style object from the label RGB colors
const createStyle = (color: Color) => ({
backgroundColor: _rgb(color),
color: getTextColor(_rgb(color)),
borderBottomColor: darken(_rgb(color), 0.2),
});
const useStyles = makeStyles(theme => ({
label: {
...theme.typography.body1,
padding: '8px',
margin: '0 8px',
fontSize: '0.9em',
borderRadius: '3px',
display: 'inline-block',
borderBottom: 'solid 1.5px',
verticalAlign: 'bottom',
},
}));
type Props = { label: LabelFragment };
function LabelBullet({ label }: Props) {
const classes = useStyles();
return (
<span className={classes.label} style={createStyle(label.color)}></span>
);
}
export default LabelBullet;
import React, { useState } from 'react'; import React, { useState } from 'react';
import CircularProgress from '@material-ui/core/CircularProgress'; import CircularProgress from '@material-ui/core/CircularProgress';
import { makeStyles } from '@material-ui/styles';
import LabelBullet from './LabelBullet';
import { useValidLabelsQuery } from './ValidLabelsQuery.generated'; import { useValidLabelsQuery } from './ValidLabelsQuery.generated';
const useStyles = makeStyles({
list: {
listStyleType: 'none',
padding: 0,
},
});
const ValidLabels: React.FC = () => { const ValidLabels: React.FC = () => {
const { loading, error, data } = useValidLabelsQuery(); const { loading, error, data } = useValidLabelsQuery();
const [filter, setFilter] = useState(''); const [filter, setFilter] = useState('');
const classes = useStyles();
if (loading) return <CircularProgress />; if (loading) return <CircularProgress />;
if (error) return <p>Error: {error}</p>; if (error) return <p>Error: {error}</p>;
const labels = data?.repository?.validLabels.nodes.filter( const labels = data?.repository?.validLabels.nodes.filter(
...@@ -22,9 +32,12 @@ const ValidLabels: React.FC = () => { ...@@ -22,9 +32,12 @@ const ValidLabels: React.FC = () => {
onChange={e => setFilter(e.target.value)} onChange={e => setFilter(e.target.value)}
value={filter} value={filter}
/> />
<ul> <ul className={classes.list}>
{labels?.map(l => ( {labels?.map(l => (
<li>{l.name}</li> <li key={l.name}>
<LabelBullet label={l} />
{l.name}
</li>
))} ))}
</ul> </ul>
</> </>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment