@@ -3,6 +3,7 @@ import PropTypes from 'prop-types';
33import { intlShape , injectIntl } from 'react-intl' ;
44import bindAll from 'lodash.bindall' ;
55import { connect } from 'react-redux' ;
6+ import xhr from 'xhr' ;
67
78import { setProjectUnchanged } from '../reducers/project-changed' ;
89import {
@@ -72,6 +73,41 @@ const ProjectFetcherHOC = function (WrappedComponent) {
7273 }
7374 }
7475 fetchProject ( projectId , loadingState ) {
76+ if ( ! this . props . projectToken ) {
77+ const errorHandler = err => {
78+ this . props . onError ( err ) ;
79+ log . error ( err ) ;
80+ } ;
81+ return new Promise ( ( resolve , reject ) => {
82+ const options = {
83+ method : 'GET' ,
84+ uri : `https://api.smalruby.app/scratch-api-proxy/projects/${ projectId } ` ,
85+ json : true
86+ }
87+ xhr ( options , ( error , response ) => {
88+ if ( error || response . statusCode !== 200 ) {
89+ return reject ( new Error ( response . status ) ) ;
90+ }
91+ resolve ( response . body . project_token ) ;
92+ } ) ;
93+ } )
94+ . then ( projectToken => {
95+ storage . setProjectToken ( projectToken ) ;
96+ storage
97+ . load ( storage . AssetType . Project , projectId , storage . DataFormat . JSON )
98+ . then ( projectAsset => {
99+ if ( projectAsset ) {
100+ this . props . onFetchedProjectData ( projectAsset . data , loadingState ) ;
101+ } else {
102+ // Treat failure to load as an error
103+ // Throw to be caught by catch later on
104+ throw new Error ( 'Could not find project' ) ;
105+ }
106+ } )
107+ . catch ( errorHandler ) ;
108+ } , errorHandler )
109+ . catch ( errorHandler ) ;
110+ }
75111 return storage
76112 . load ( storage . AssetType . Project , projectId , storage . DataFormat . JSON )
77113 . then ( projectAsset => {
0 commit comments