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',
|
||||
'/:owner/:name': 'milestones',
|
||||
'/:owner/:name/:milestone': 'chart',
|
||||
'/:owner/:name/projects': 'githubProjects',
|
||||
'/:owner/projects': 'orgProjects',
|
||||
'/:owner/project/:project': 'orgProjectChart',
|
||||
'/:owner/:name/project/:project': 'projectChart',
|
||||
'/demo': 'demo'
|
||||
};
|
||||
|
||||
|
@ -95,6 +99,13 @@ export default React.createClass({
|
|||
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.
|
||||
chart(owner, name, milestone) {
|
||||
document.title = `${owner}/${name}/${milestone}`;
|
||||
|
@ -102,6 +113,13 @@ export default React.createClass({
|
|||
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.
|
||||
addProject() {
|
||||
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 config from '../../../config.js';
|
||||
import graphqlQueries from './graphql.js';
|
||||
|
||||
// Custom JSON parser.
|
||||
superagent.parse = {
|
||||
|
@ -76,45 +77,6 @@ export default {
|
|||
'headers': headers(token)
|
||||
}, 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) {
|
||||
console.log('oneMilestone', data);
|
||||
cb(err, data);
|
||||
|
@ -131,8 +93,66 @@ export default {
|
|||
}, defaults.github);
|
||||
|
||||
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.
|
||||
|
@ -150,7 +170,6 @@ let request = ({ protocol, host, method, path, query, headers, body }, cb) => {
|
|||
let req = method === 'POST' ? superagent.post(url) : superagent.get(url);
|
||||
// Add headers.
|
||||
_.each(headers, (v, k) => { req.set(k, v); });
|
||||
console.log(`Requesting ${url}`);
|
||||
|
||||
// Timeout for requests that do not finish... see #32.
|
||||
let ms = config.request.timeout;
|
||||
|
|
|
@ -76,6 +76,8 @@ class ProjectsStore extends Store {
|
|||
'owner': args.owner,
|
||||
'name': args.name
|
||||
}, args.milestone, true); // notify as well
|
||||
} else if ('project' in args) {
|
||||
// ...
|
||||
} else {
|
||||
// For a single project.
|
||||
_.find(this.get('list'), (obj) => {
|
||||
|
|
Loading…
Reference in New Issue