aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorQuentin Gliech <quentingliech@gmail.com>2018-07-22 01:13:06 +0200
committerQuentin Gliech <quentingliech@gmail.com>2018-07-22 01:13:06 +0200
commit6d8559048f9dcbac4ee9f65de54bda4cd1a7431c (patch)
tree4bf2bcb127924ed3265c68bd9beb4baa24def432
parent50fd2943acac8685db92a016ee3c9dbfc95842cf (diff)
downloadgit-bug-6d8559048f9dcbac4ee9f65de54bda4cd1a7431c.tar.gz
webui: Basic bug list
-rw-r--r--webui/src/App.js24
-rw-r--r--webui/src/BugSummary.js4
-rw-r--r--webui/src/ListPage.js46
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;