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 ? (