diff options
author | Quentin Gliech <quentingliech@gmail.com> | 2018-07-22 01:13:06 +0200 |
---|---|---|
committer | Quentin Gliech <quentingliech@gmail.com> | 2018-07-22 01:13:06 +0200 |
commit | 6d8559048f9dcbac4ee9f65de54bda4cd1a7431c (patch) | |
tree | 4bf2bcb127924ed3265c68bd9beb4baa24def432 | |
parent | 50fd2943acac8685db92a016ee3c9dbfc95842cf (diff) | |
download | git-bug-6d8559048f9dcbac4ee9f65de54bda4cd1a7431c.tar.gz |
webui: Basic bug list
-rw-r--r-- | webui/src/App.js | 24 | ||||
-rw-r--r-- | webui/src/BugSummary.js | 4 | ||||
-rw-r--r-- | webui/src/ListPage.js | 46 |
3 files changed, 66 insertions, 8 deletions
diff --git a/webui/src/App.js b/webui/src/App.js index 9cb3cdc7..1d6382e5 100644 --- a/webui/src/App.js +++ b/webui/src/App.js @@ -1,5 +1,7 @@ import React from "react"; import { withRouter, Switch, Route } from "react-router"; +import { Link } from "react-router-dom"; +import { withStyles } from "@material-ui/core/styles"; import AppBar from "@material-ui/core/AppBar"; import CssBaseline from "@material-ui/core/CssBaseline"; @@ -7,24 +9,32 @@ import Toolbar from "@material-ui/core/Toolbar"; import Typography from "@material-ui/core/Typography"; import BugPage from "./BugPage"; +import ListPage from "./ListPage"; -const Home = () => <h1>Home</h1>; +const styles = theme => ({ + appTitle: { + color: "white", + textDecoration: "none" + } +}); -const App = ({ location }) => ( +const App = ({ location, classes }) => ( <React.Fragment> <CssBaseline /> <AppBar position="static" color="primary"> <Toolbar> - <Typography variant="title" color="inherit"> - git-bug-webui(1) - </Typography> + <Link to="/" className={classes.appTitle}> + <Typography variant="title" color="inherit"> + git-bug-webui(1) + </Typography> + </Link> </Toolbar> </AppBar> <Switch> - <Route path="/" exact component={Home} /> + <Route path="/" exact component={ListPage} /> <Route path="/bug/:id" exact component={BugPage} /> </Switch> </React.Fragment> ); -export default withRouter(App); +export default withStyles(styles)(withRouter(App)); diff --git a/webui/src/BugSummary.js b/webui/src/BugSummary.js index 461fe2d0..469ab9a8 100644 --- a/webui/src/BugSummary.js +++ b/webui/src/BugSummary.js @@ -1,4 +1,5 @@ import React from "react"; +import { Link } from "react-router-dom"; import gql from "graphql-tag"; import { withStyles } from "@material-ui/core/styles"; @@ -28,7 +29,8 @@ const BugSummary = ({ bug, classes }) => ( {bug.title} </Typography> <Typography variant="subheading" component="h3" title={bug.id}> - #{bug.id.slice(0, 8)} • {bug.status.toUpperCase()} + <Link to={"/bug/" + bug.id.slice(0, 8)}>#{bug.id.slice(0, 8)}</Link> •{" "} + {bug.status.toUpperCase()} </Typography> <div className={classes.labelList}> {bug.labels.map(label => ( diff --git a/webui/src/ListPage.js b/webui/src/ListPage.js new file mode 100644 index 00000000..c873eefa --- /dev/null +++ b/webui/src/ListPage.js @@ -0,0 +1,46 @@ +import React from "react"; +import { Query } from "react-apollo"; +import gql from "graphql-tag"; +import { withStyles } from "@material-ui/core/styles"; + +import CircularProgress from "@material-ui/core/CircularProgress"; + +import BugSummary from "./BugSummary"; + +const QUERY = gql` + { + bugs: allBugs { + ...BugSummary + } + } + + ${BugSummary.fragment} +`; + +const styles = theme => ({ + main: { + maxWidth: 600, + margin: "auto", + marginTop: theme.spacing.unit * 4 + } +}); + +const List = withStyles(styles)(({ bugs, classes }) => ( + <main className={classes.main}> + {bugs.map(bug => ( + <BugSummary bug={bug} key={bug.id} /> + ))} + </main> +)); + +const ListPage = () => ( + <Query query={QUERY}> + {({ loading, error, data }) => { + if (loading) return <CircularProgress />; + if (error) return <p>Error.</p>; + return <List bugs={data.bugs} />; + }} + </Query> +); + +export default ListPage; |