Fix cloud connection logic so that cloud connections are made and cleared out appropriately. This fixes a bug where we were making two cloud connections when creating a new project and not clearing out previous connections when switching between editor and preview/player mode.

This commit is contained in:
Karishma Chadha committed 2018-11-16 18:09:46 -05:00
1 parent 00c421d16b
commit b080874364
1 file changed
+31 -25
+31 -25
View File
@@ -21,48 +21,48 @@ const cloudManagerHOC = function (WrappedComponent) {
this.cloudProvider = null;
}
componentDidMount () {
if (this.canUseCloud(this.props)) {
if (this.shouldConnect(this.props)) {
this.connectToCloud();
}
}
componentDidUpdate (prevProps) {
// TODO add disconnection logic when loading a new project
// TODO need to add cloud provider disconnection logic and cloud data clearing logic
// when loading a new project e.g. via file upload
// (and eventually move it out of the vm.clear function)
// e.g. was previously showingWithId but no longer, but we need
// to check that we don't disconnect when saving a project to the
// server.
// If we couldn't use cloud data before, but now we can, try opening a cloud connection
if (this.canUseCloud(this.props) && !this.canUseCloud(prevProps)) {
if (this.shouldConnect(this.props) && !this.shouldConnect(prevProps)) {
this.connectToCloud();
return;
}
// TODO add scratcher check
if ((this.props.username !== prevProps.username) ||
(this.props.projectId !== prevProps.projectId)) {
this.connectToCloud();
if (this.shouldDisconnect(this.props) && !this.shouldDisconnect(prevProps)) {
this.disconnectFromCloud();
}
}
componentWillUnmount () {
if (this.cloudProvider) {
this.cloudProvider.requestCloseConnection();
this.cloudProvider = null;
}
this.disconnectFromCloud();
}
canUseCloud (props) {
return props.cloudHost && props.username && props.isShowingWithId &&
props.vm && props.username && props.projectId;
// TODO add a canUseCloud to pass down to this HOC (e.g. from www) and also check that here.
// This should cover info about the website specifically, like scrather status
return !!(props.cloudHost && props.username && props.vm && props.projectId);
}
connectToCloud () {
if (this.cloudProvider && this.cloudProvider.connection) {
// Already connected
return;
}
shouldConnect (props) {
return !this.isConnected() && this.canUseCloud(props) && props.isShowingWithId;
}
shouldDisconnect (props) {
return this.isConnected() &&
( // Can no longer use cloud or cloud provider info is now stale
!this.canUseCloud(this.props) ||
(this.cloudProvider.projectId !== props.projectId) ||
(this.cloudProvider.username !== props.username)
);
// TODO need to add provisions for viewing someone
// else's project in editor mode
}
isConnected () {
return this.cloudProvider && !!this.cloudProvider.connection;
}
connectToCloud () {
this.cloudProvider = new CloudProvider(
this.props.cloudHost,
this.props.vm,
@@ -70,6 +70,12 @@ const cloudManagerHOC = function (WrappedComponent) {
this.props.projectId);
this.props.vm.setCloudProvider(this.cloudProvider);
}
disconnectFromCloud () {
if (this.cloudProvider) {
this.cloudProvider.requestCloseConnection();
this.cloudProvider = null;
}
}
render () {
const {
/* eslint-disable no-unused-vars */