diff options
Diffstat (limited to 'webui/src/pages/bug/Bug.tsx')
-rw-r--r-- | webui/src/pages/bug/Bug.tsx | 111 |
1 files changed, 111 insertions, 0 deletions
diff --git a/webui/src/pages/bug/Bug.tsx b/webui/src/pages/bug/Bug.tsx new file mode 100644 index 00000000..3c4bb63b --- /dev/null +++ b/webui/src/pages/bug/Bug.tsx @@ -0,0 +1,111 @@ +import React from 'react'; + +import Typography from '@material-ui/core/Typography/Typography'; +import { makeStyles } from '@material-ui/core/styles'; + +import Author from 'src/components/Author'; +import Date from 'src/components/Date'; +import Label from 'src/components/Label'; + +import { BugFragment } from './Bug.generated'; +import CommentForm from './CommentForm'; +import TimelineQuery from './TimelineQuery'; + +const useStyles = makeStyles(theme => ({ + main: { + maxWidth: 1000, + margin: 'auto', + marginTop: theme.spacing(4), + }, + header: { + marginLeft: theme.spacing(1) + 40, + }, + title: { + ...theme.typography.h5, + }, + id: { + ...theme.typography.subtitle1, + marginLeft: theme.spacing(1), + }, + container: { + display: 'flex', + marginBottom: theme.spacing(1), + }, + timeline: { + flex: 1, + marginTop: theme.spacing(2), + marginRight: theme.spacing(2), + minWidth: 0, + }, + sidebar: { + marginTop: theme.spacing(2), + flex: '0 0 200px', + }, + sidebarTitle: { + fontWeight: 'bold', + }, + labelList: { + listStyle: 'none', + padding: 0, + margin: 0, + }, + label: { + marginTop: theme.spacing(1), + marginBottom: theme.spacing(1), + '& > *': { + display: 'block', + }, + }, + noLabel: { + ...theme.typography.body2, + }, + commentForm: { + marginLeft: 48, + }, +})); + +type Props = { + bug: BugFragment; +}; + +function Bug({ bug }: Props) { + const classes = useStyles(); + return ( + <main className={classes.main}> + <div className={classes.header}> + <span className={classes.title}>{bug.title}</span> + <span className={classes.id}>{bug.humanId}</span> + + <Typography color={'textSecondary'}> + <Author author={bug.author} /> + {' opened this bug '} + <Date date={bug.createdAt} /> + </Typography> + </div> + + <div className={classes.container}> + <div className={classes.timeline}> + <TimelineQuery id={bug.id} /> + <div className={classes.commentForm}> + <CommentForm bugId={bug.id} /> + </div> + </div> + <div className={classes.sidebar}> + <span className={classes.sidebarTitle}>Labels</span> + <ul className={classes.labelList}> + {bug.labels.length === 0 && ( + <span className={classes.noLabel}>None yet</span> + )} + {bug.labels.map(l => ( + <li className={classes.label} key={l.name}> + <Label label={l} key={l.name} /> + </li> + ))} + </ul> + </div> + </div> + </main> + ); +} + +export default Bug; |