aboutsummaryrefslogtreecommitdiffstats
path: root/webui/src/list/BugRow.js
diff options
context:
space:
mode:
authorMichael Muré <batolettre@gmail.com>2018-08-15 15:50:19 +0200
committerMichael Muré <batolettre@gmail.com>2018-08-15 15:50:19 +0200
commit2530cee1eac225924e1119554cf475cdc46ed7dc (patch)
tree4d36ca529a2e25a3fe9f1a881d037215184ec9a1 /webui/src/list/BugRow.js
parent24d862a65c603de4ea77a2688f5c90effc65be2f (diff)
downloadgit-bug-2530cee1eac225924e1119554cf475cdc46ed7dc.tar.gz
webui: reorganize the code
Diffstat (limited to 'webui/src/list/BugRow.js')
-rw-r--r--webui/src/list/BugRow.js102
1 files changed, 102 insertions, 0 deletions
diff --git a/webui/src/list/BugRow.js b/webui/src/list/BugRow.js
new file mode 100644
index 00000000..1ce5ea06
--- /dev/null
+++ b/webui/src/list/BugRow.js
@@ -0,0 +1,102 @@
+import { withStyles } from '@material-ui/core/styles'
+import TableCell from '@material-ui/core/TableCell/TableCell'
+import TableRow from '@material-ui/core/TableRow/TableRow'
+import Tooltip from '@material-ui/core/Tooltip/Tooltip'
+import Typography from '@material-ui/core/Typography'
+import ErrorOutline from '@material-ui/icons/ErrorOutline'
+import gql from 'graphql-tag'
+import * as moment from 'moment'
+import React from 'react'
+import { Link } from 'react-router-dom'
+
+const Open = ({className}) => <Tooltip title="Open">
+ <ErrorOutline nativeColor='#28a745' className={className}/>
+</Tooltip>
+
+const Closed = ({className}) => <Tooltip title="Closed">
+ <ErrorOutline nativeColor='#cb2431' className={className}/>
+</Tooltip>
+
+const Status = ({status, className}) => {
+ switch (status) {
+ case 'OPEN':
+ return <Open className={className}/>
+ case 'CLOSED':
+ return <Closed className={className}/>
+ default:
+ return 'unknown status ' + status
+ }
+}
+
+const styles = theme => ({
+ cell: {
+ display: 'flex',
+ alignItems: 'center'
+ },
+ status: {
+ margin: 10
+ },
+ expand: {
+ width: '100%'
+ },
+ title: {
+ display: 'inline-block',
+ textDecoration: 'none'
+ },
+ labels: {
+ display: 'inline-block',
+ paddingLeft: theme.spacing.unit,
+ '&>span': {
+ padding: '0 4px',
+ margin: '0 1px',
+ backgroundColor: '#da9898',
+ borderRadius: '3px'
+ }
+ }
+})
+
+const BugRow = ({bug, classes}) => (
+ <TableRow hover>
+ <TableCell className={classes.cell}>
+ <Status status={bug.status} className={classes.status}/>
+ <div className={classes.expand}>
+ <Link to={'bug/' + bug.humanId}>
+ <div className={classes.expand}>
+
+ <Typography variant={'title'} className={classes.title}>
+ {bug.title}
+ </Typography>
+ <span className={classes.labels}>
+ {bug.labels.map(l => (
+ <span key={l}>{l}</span>)
+ )}
+ </span>
+ </div>
+ </Link>
+ <Typography color={'textSecondary'}>
+ {bug.humanId} opened
+ <Tooltip title={moment(bug.createdAt).format('MMMM D, YYYY, h:mm a')}>
+ <span> {moment(bug.createdAt).fromNow()} </span>
+ </Tooltip>
+ by {bug.author.name}
+ </Typography>
+ </div>
+ </TableCell>
+ </TableRow>
+)
+
+BugRow.fragment = gql`
+ fragment BugRow on Bug {
+ id
+ humanId
+ title
+ status
+ createdAt
+ labels
+ author {
+ name
+ }
+ }
+`
+
+export default withStyles(styles)(BugRow)