Paths and queries
This commit is contained in:
parent
3066651251
commit
f692f48baa
File diff suppressed because one or more lines are too long
|
@ -22,6 +22,10 @@ let routes = {
|
||||||
'/new/project': 'addProject',
|
'/new/project': 'addProject',
|
||||||
'/:owner/:name': 'milestones',
|
'/:owner/:name': 'milestones',
|
||||||
'/:owner/:name/:milestone': 'chart',
|
'/:owner/:name/:milestone': 'chart',
|
||||||
|
'/:owner/:name/projects': 'githubProjects',
|
||||||
|
'/:owner/projects': 'orgProjects',
|
||||||
|
'/:owner/project/:project': 'orgProjectChart',
|
||||||
|
'/:owner/:name/project/:project': 'projectChart',
|
||||||
'/demo': 'demo'
|
'/demo': 'demo'
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -95,6 +99,13 @@ export default React.createClass({
|
||||||
return <MilestonesPage owner={owner} name={name} />;
|
return <MilestonesPage owner={owner} name={name} />;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
// Show projects (i.e. boards) for a repo.
|
||||||
|
projects(owner, name) {
|
||||||
|
document.title = `${owner}/${name} projects`;
|
||||||
|
process.nextTick(() => actions.emit('projects.load', { owner, name }));
|
||||||
|
return <GitHubProjectsPage owner={owner} name={name} />;
|
||||||
|
},
|
||||||
|
|
||||||
// Show a project milestone chart.
|
// Show a project milestone chart.
|
||||||
chart(owner, name, milestone) {
|
chart(owner, name, milestone) {
|
||||||
document.title = `${owner}/${name}/${milestone}`;
|
document.title = `${owner}/${name}/${milestone}`;
|
||||||
|
@ -102,6 +113,13 @@ export default React.createClass({
|
||||||
return <ChartPage owner={owner} name={name} milestone={milestone} />;
|
return <ChartPage owner={owner} name={name} milestone={milestone} />;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
// Show a GitHub project (i.e. board) chart.
|
||||||
|
projectChart(owner, name, project) {
|
||||||
|
document.title = `${owner}/${name}/${project}`;
|
||||||
|
process.nextTick(() => actions.emit('projects.load', { owner, name, milestone }));
|
||||||
|
return <ProjectChartPage owner={owner} name={name} project={project} />;
|
||||||
|
},
|
||||||
|
|
||||||
// Add a project.
|
// Add a project.
|
||||||
addProject() {
|
addProject() {
|
||||||
document.title = 'Add a project';
|
document.title = 'Add a project';
|
||||||
|
|
|
@ -0,0 +1,84 @@
|
||||||
|
// GitHub GraphQL API queries.
|
||||||
|
|
||||||
|
export default {
|
||||||
|
allProjectsForOrg: `
|
||||||
|
query($login: String!) {
|
||||||
|
organization(login: $login) {
|
||||||
|
projects(first: 100) {
|
||||||
|
nodes {
|
||||||
|
name
|
||||||
|
number
|
||||||
|
createdAt
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
`,
|
||||||
|
allProjectsForRepo: `
|
||||||
|
query($owner: String!, $name: String!) {
|
||||||
|
repository(owner: $owner, name: $name){
|
||||||
|
projects(first: 100, states: OPEN) {
|
||||||
|
nodes {
|
||||||
|
name
|
||||||
|
number
|
||||||
|
createdAt
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
`,
|
||||||
|
oneProject: `
|
||||||
|
query($owner: String!, $name: String!, $project_number: Int!) {
|
||||||
|
repository(owner: $owner, name: $name) {
|
||||||
|
project(number: $project_number) {
|
||||||
|
createdAt
|
||||||
|
closedAt
|
||||||
|
columns(first: 10) {
|
||||||
|
nodes {
|
||||||
|
name
|
||||||
|
cards(first: 100) {
|
||||||
|
nodes {
|
||||||
|
content {
|
||||||
|
... on Issue {
|
||||||
|
number
|
||||||
|
title
|
||||||
|
createdAt
|
||||||
|
state
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
`,
|
||||||
|
oneOrgProject: `
|
||||||
|
query($login: String!, $project_number: Int!) {
|
||||||
|
organization(login: $login) {
|
||||||
|
project(number: $project_number) {
|
||||||
|
createdAt
|
||||||
|
closedAt
|
||||||
|
columns(first: 10) {
|
||||||
|
nodes {
|
||||||
|
name
|
||||||
|
cards(first: 100) {
|
||||||
|
nodes {
|
||||||
|
content {
|
||||||
|
... on Issue {
|
||||||
|
number
|
||||||
|
title
|
||||||
|
createdAt
|
||||||
|
state
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
`
|
||||||
|
};
|
|
@ -4,6 +4,7 @@ import superagent from 'superagent';
|
||||||
import actions from '../../actions/appActions.js';
|
import actions from '../../actions/appActions.js';
|
||||||
|
|
||||||
import config from '../../../config.js';
|
import config from '../../../config.js';
|
||||||
|
import graphqlQueries from './graphql.js';
|
||||||
|
|
||||||
// Custom JSON parser.
|
// Custom JSON parser.
|
||||||
superagent.parse = {
|
superagent.parse = {
|
||||||
|
@ -76,45 +77,6 @@ export default {
|
||||||
'headers': headers(token)
|
'headers': headers(token)
|
||||||
}, defaults.github);
|
}, defaults.github);
|
||||||
|
|
||||||
const query = `query {
|
|
||||||
repository(owner:"twbs", name:"bootstrap"){
|
|
||||||
project(number: 14) {
|
|
||||||
createdAt
|
|
||||||
closedAt
|
|
||||||
columns(first: 10) {
|
|
||||||
nodes {
|
|
||||||
name
|
|
||||||
cards(first: 100) {
|
|
||||||
nodes {
|
|
||||||
content {
|
|
||||||
... on Issue {
|
|
||||||
number
|
|
||||||
title
|
|
||||||
createdAt
|
|
||||||
state
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
`;
|
|
||||||
let graphqlReq = _.defaults({
|
|
||||||
path: '/graphql',
|
|
||||||
body: JSON.stringify({query}),
|
|
||||||
headers: {
|
|
||||||
'Authorization': `bearer ${token}`,
|
|
||||||
},
|
|
||||||
method: 'POST',
|
|
||||||
}, defaults.github);
|
|
||||||
console.log(graphqlReq);
|
|
||||||
request(graphqlReq, (err, result) => {
|
|
||||||
console.log('graphql response!', err, result);
|
|
||||||
});
|
|
||||||
|
|
||||||
request(data, function(err, data) {
|
request(data, function(err, data) {
|
||||||
console.log('oneMilestone', data);
|
console.log('oneMilestone', data);
|
||||||
cb(err, data);
|
cb(err, data);
|
||||||
|
@ -131,8 +93,66 @@ export default {
|
||||||
}, defaults.github);
|
}, defaults.github);
|
||||||
|
|
||||||
return request(data, cb);
|
return request(data, cb);
|
||||||
}
|
},
|
||||||
|
|
||||||
|
allProjects: (user, { owner, name }, cb) => {
|
||||||
|
let token = (user && user.credential != null) ? user.credential.accessToken : null;
|
||||||
|
|
||||||
|
let data = _.defaults({
|
||||||
|
path: '/graphql',
|
||||||
|
body: JSON.stringify(name ? {
|
||||||
|
query: graphqlQueries.allProjectsForRepo,
|
||||||
|
variables: {
|
||||||
|
owner,
|
||||||
|
name
|
||||||
|
}
|
||||||
|
} : {
|
||||||
|
query: graphqlQueries.allProjectsForOrg,
|
||||||
|
variables: {
|
||||||
|
login: owner
|
||||||
|
}
|
||||||
|
}),
|
||||||
|
headers: {
|
||||||
|
'Authorization': `bearer ${token}`,
|
||||||
|
},
|
||||||
|
method: 'POST',
|
||||||
|
}, defaults.github);
|
||||||
|
request(data, (err, result) => {
|
||||||
|
console.log('graphql response!', err, result);
|
||||||
|
cb(err, result);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
oneProject: (user, { owner, name, project }, cb) => {
|
||||||
|
let token = (user && user.credential != null) ? user.credential.accessToken : null;
|
||||||
|
|
||||||
|
let data = _.defaults({
|
||||||
|
path: '/graphql',
|
||||||
|
body: JSON.stringify(name ? {
|
||||||
|
query: graphqlQueries.allProjectsForRepo,
|
||||||
|
variables: {
|
||||||
|
owner,
|
||||||
|
name,
|
||||||
|
project
|
||||||
|
}
|
||||||
|
} : {
|
||||||
|
query: graphqlQueries.oneOrgProject,
|
||||||
|
variables: {
|
||||||
|
owner,
|
||||||
|
project
|
||||||
|
}
|
||||||
|
}),
|
||||||
|
headers: {
|
||||||
|
'Authorization': `bearer ${token}`,
|
||||||
|
},
|
||||||
|
method: 'POST',
|
||||||
|
}, defaults.github);
|
||||||
|
request(data, (err, result) => {
|
||||||
|
console.log('graphql response!', err, result);
|
||||||
|
// Filter down to cards that are issues (as opposed to notes) here?
|
||||||
|
cb(err, result);
|
||||||
|
});
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
// Make a request using SuperAgent.
|
// Make a request using SuperAgent.
|
||||||
|
@ -150,7 +170,6 @@ let request = ({ protocol, host, method, path, query, headers, body }, cb) => {
|
||||||
let req = method === 'POST' ? superagent.post(url) : superagent.get(url);
|
let req = method === 'POST' ? superagent.post(url) : superagent.get(url);
|
||||||
// Add headers.
|
// Add headers.
|
||||||
_.each(headers, (v, k) => { req.set(k, v); });
|
_.each(headers, (v, k) => { req.set(k, v); });
|
||||||
console.log(`Requesting ${url}`);
|
|
||||||
|
|
||||||
// Timeout for requests that do not finish... see #32.
|
// Timeout for requests that do not finish... see #32.
|
||||||
let ms = config.request.timeout;
|
let ms = config.request.timeout;
|
||||||
|
|
|
@ -76,6 +76,8 @@ class ProjectsStore extends Store {
|
||||||
'owner': args.owner,
|
'owner': args.owner,
|
||||||
'name': args.name
|
'name': args.name
|
||||||
}, args.milestone, true); // notify as well
|
}, args.milestone, true); // notify as well
|
||||||
|
} else if ('project' in args) {
|
||||||
|
// ...
|
||||||
} else {
|
} else {
|
||||||
// For a single project.
|
// For a single project.
|
||||||
_.find(this.get('list'), (obj) => {
|
_.find(this.get('list'), (obj) => {
|
||||||
|
|
Loading…
Reference in New Issue