diff --git a/lib/containers/pr-list-container.js b/lib/containers/pr-list-container.js index b9ee105ad0..c2439bdac5 100644 --- a/lib/containers/pr-list-container.js +++ b/lib/containers/pr-list-container.js @@ -12,7 +12,7 @@ export class PrList extends React.Component { render() { const repo = this.props.query.repository; - if (!repo.pullRequests.edges.length) { + if (!repo || !repo.pullRequests.edges.length) { return null; // TODO: no PRs } const pr = repo.pullRequests.edges[0].node; diff --git a/lib/controllers/pr-info-controller.js b/lib/controllers/pr-info-controller.js index f314ba0cb3..8d97ee368e 100644 --- a/lib/controllers/pr-info-controller.js +++ b/lib/controllers/pr-info-controller.js @@ -4,21 +4,26 @@ import Relay from 'react-relay'; import {RemotePropType} from '../prop-types'; import RelayRootContainer from '../containers/relay-root-container'; import PrListContainer from '../containers/pr-list-container'; +import GithubLoginView from '../views/github-login-view'; -const environmentByGithubInstance = new Map(); +const relayConfigByGithubInstance = new Map(); const getEnvironmentForInstance = (instance, endpoint, token) => { - let environment = environmentByGithubInstance.get(instance); + const config = relayConfigByGithubInstance.get(instance) || {}; + let {environment, networkLayer} = config; if (!environment) { environment = new Relay.Environment(); - environment.injectNetworkLayer( - new Relay.DefaultNetworkLayer(`${endpoint}/graphql`, { - headers: { - Authorization: `bearer ${token}`, - }, - }), - ); - environmentByGithubInstance.set(instance, environment); + networkLayer = new Relay.DefaultNetworkLayer(`${endpoint}/graphql`, { + headers: { + Authorization: `bearer ${token}`, + }, + }); + environment.injectNetworkLayer(networkLayer); + relayConfigByGithubInstance.set(instance, {environment, networkLayer}); + } else { + networkLayer._init.headers = { + Authorization: `bearer ${token}`, + }; } return environment; }; @@ -49,6 +54,8 @@ export default class PrInfoController extends React.Component { token: React.PropTypes.string.isRequired, instance: React.PropTypes.string.isRequired, currentBranch: React.PropTypes.string.isRequired, + loginModel: React.PropTypes.object.isRequired, + onLogin: React.PropTypes.func.isRequired, remote: RemotePropType.isRequired, } @@ -68,6 +75,21 @@ export default class PrInfoController extends React.Component { Component={PrListContainer} route={route} environment={environment} + renderLoading={() => { + return