From eec0259fea3d0763d1432d73042c976bb668353c Mon Sep 17 00:00:00 2001 From: Radek Stepan Date: Mon, 18 Jan 2016 20:52:24 +0100 Subject: [PATCH] show a list of milestones for a project --- src/js/App.jsx | 2 + .../{Projects.jsx => Milestones.jsx} | 59 ++++++++----- src/js/pages/MilestonesPage.jsx | 17 +++- src/js/pages/ProjectsPage.jsx | 5 +- src/js/stores/projectsStore.js | 82 +++++++++++-------- 5 files changed, 109 insertions(+), 56 deletions(-) rename src/js/components/{Projects.jsx => Milestones.jsx} (66%) diff --git a/src/js/App.jsx b/src/js/App.jsx index 05466b4..1392475 100644 --- a/src/js/App.jsx +++ b/src/js/App.jsx @@ -92,6 +92,8 @@ export default React.createClass({ // Show project milestones. milestones(owner, name) { + document.title = `${owner}/${name}`; + process.nextTick(() => { actions.emit('projects.load', { owner, name }); }); return ; }, diff --git a/src/js/components/Projects.jsx b/src/js/components/Milestones.jsx similarity index 66% rename from src/js/components/Projects.jsx rename to src/js/components/Milestones.jsx index cf0a0c2..b48505e 100644 --- a/src/js/components/Projects.jsx +++ b/src/js/components/Milestones.jsx @@ -11,7 +11,7 @@ import Link from './Link.jsx'; export default React.createClass({ - displayName: 'Projects.jsx', + displayName: 'Milestones.jsx', mixins: [ Format ], @@ -20,7 +20,7 @@ export default React.createClass({ }, render() { - let projects = this.props.projects; + let { projects, project } = this.props; // Show the projects with errors first. let errors = _(projects.list).filter('errors').map((project, i) => { @@ -36,12 +36,16 @@ export default React.createClass({ ); }).value(); - // Now for the list of projects. - let list = _.map(projects.index, ([ pI, mI ]) => { + // Now for the list of milestones. + let list = []; + _.each(projects.index, ([ pI, mI ]) => { let { owner, name, milestones } = projects.list[pI]; let milestone = milestones[mI]; - return ( + // Filter down? + if (!(!project || (project.owner == owner && project.name == name))) return; + + list.push( @@ -74,21 +78,38 @@ export default React.createClass({ // Wait for something to show. if (!errors.length && !list.length) return false; - return ( -
-
- Sorted by {projects.sortBy} -

Projects

+ if (project) { + return ( +
+ + + + {list} + +
+
- - - {errors} - {list} - -
-
-
- ); + ); + } else { + return ( +
+ + + + {errors} + {list} + +
+
+
+ ); + } } }); diff --git a/src/js/pages/MilestonesPage.jsx b/src/js/pages/MilestonesPage.jsx index 632e10f..e3591b2 100644 --- a/src/js/pages/MilestonesPage.jsx +++ b/src/js/pages/MilestonesPage.jsx @@ -4,6 +4,8 @@ import Page from '../mixins/Page.js'; import Notify from '../components/Notify.jsx'; import Header from '../components/Header.jsx'; +import Milestones from '../components/Milestones.jsx'; +import Hero from '../components/Hero.jsx'; export default React.createClass({ @@ -12,12 +14,25 @@ export default React.createClass({ mixins: [ Page ], render() { + let content; + if (!this.state.app.loading) { + let projects = this.state.projects; + content = ; + } + return (
-
+
+
+
+

{this.props.owner}/{this.props.name}

+
+
+
{content}
+