diff --git a/src/lib/storage.js b/src/lib/storage.js index 3de36efe6..ef5d68810 100644 --- a/src/lib/storage.js +++ b/src/lib/storage.js @@ -11,9 +11,19 @@ class Storage extends ScratchStorage { super(); this.addWebSource( [this.AssetType.Project], - projectAsset => `${PROJECT_HOST}/${projectAsset.assetId}` + this.getProjectGetConfig.bind(this) ); } + + setProjectToken (projectToken) { + this.projectToken = projectToken; + } + + getProjectGetConfig (projectAsset) { + const path = `${PROJECT_HOST}/${projectAsset.assetId}`; + const qs = this.projectToken ? `?token=${this.projectToken}` : ''; + return path + qs; + } } const storage = new Storage(); diff --git a/src/views/preview/embed-view.jsx b/src/views/preview/embed-view.jsx index 783f6b712..5ef630a53 100644 --- a/src/views/preview/embed-view.jsx +++ b/src/views/preview/embed-view.jsx @@ -40,19 +40,23 @@ class EmbedView extends React.Component { ); } - return ( - - - - - ); + if (this.props.projectInfo && this.props.projectInfo.project_token){ + return ( + + + + + ); + } + return null; } } diff --git a/src/views/preview/presentation.jsx b/src/views/preview/presentation.jsx index e6cf7978b..f900fde88 100644 --- a/src/views/preview/presentation.jsx +++ b/src/views/preview/presentation.jsx @@ -359,6 +359,7 @@ const PreviewPresentation = ({ isFullScreen={isFullScreen} previewInfoVisible="false" projectHost={projectHost} + projectToken={projectInfo.project_token} projectId={projectId} onGreenFlag={onGreenFlag} onProjectLoaded={onProjectLoaded} diff --git a/src/views/preview/project-view.jsx b/src/views/preview/project-view.jsx index a68485d98..6d094340e 100644 --- a/src/views/preview/project-view.jsx +++ b/src/views/preview/project-view.jsx @@ -142,7 +142,6 @@ class Preview extends React.Component { this.props.sessionStatus === sessionActions.Status.FETCHED) || (this.state.projectId !== prevState.projectId))) { this.fetchCommunityData(); - this.getProjectData(this.state.projectId, true /* Show cloud/username alerts */); if (this.state.justShared) { this.setState({ // eslint-disable-line react/no-did-update-set-state justShared: false @@ -158,6 +157,10 @@ class Preview extends React.Component { }); } } + if (this.props.projectInfo.id !== prevProps.projectInfo.id) { + storage.setProjectToken(this.props.projectInfo.project_token); + this.loadProjectData(this.state.projectId, true /* Show cloud/username alerts */); + } if (this.props.projectInfo.id !== prevProps.projectInfo.id) { if (typeof this.props.projectInfo.id === 'undefined') { this.initCounts(0, 0); @@ -196,7 +199,8 @@ class Preview extends React.Component { // Switching out of editor mode, refresh data that comes from project json if (this.props.playerMode && !prevProps.playerMode) { - this.getProjectData( + storage.setProjectToken(this.props.projectInfo.project_token); + this.loadProjectData( this.state.projectId, false // Do not show cloud/username alerts again ); @@ -323,7 +327,7 @@ class Preview extends React.Component { } } } - getProjectData (projectId, showAlerts) { + loadProjectData (projectId, showAlerts) { if (projectId <= 0) return 0; storage .load(storage.AssetType.Project, projectId, storage.DataFormat.JSON) @@ -713,6 +717,11 @@ class Preview extends React.Component { ); } render () { + + // Only show GUI if the project has no id, is a loaded local project, or has the project token loaded + const showGUI = (!this.state.projectId || this.state.projectId === '0' || this.state.isProjectLoaded || + (this.props.projectInfo && this.props.projectInfo.project_token)); + if (this.props.projectNotAvailable || this.state.invalidProject) { return ( @@ -829,43 +838,46 @@ class Preview extends React.Component { /> : - + {showGUI && ( + + )} {this.props.registrationOpen && ( this.props.useScratch3Registration ? (