Skip to content

Commit 040a6f9

Browse files
committed
Merge pull request code-dot-org#8429 from code-dot-org/connectedComponents
Connected components
2 parents a2b02d3 + 1e2b14d commit 040a6f9

File tree

19 files changed

+79
-183
lines changed

19 files changed

+79
-183
lines changed

apps/src/StudioApp.js

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ var annotationList = require('./acemode/annotationList');
2929
var processMarkdown = require('marked');
3030
var shareWarnings = require('./shareWarnings');
3131
var experiments = require('./experiments');
32+
import { setPageConstants } from './redux/pageConstants';
3233

3334
var redux = require('./redux');
3435
var runState = require('./redux/runState');
@@ -2709,3 +2710,29 @@ StudioApp.prototype.polishGeneratedCodeString = function (code) {
27092710
return code;
27102711
}
27112712
};
2713+
2714+
/**
2715+
* Sets a bunch of common page constants used by all of our apps in our redux
2716+
* store based on our app options config.
2717+
* @param {AppOptionsConfig}
2718+
* @param {object} appSpecificConstants - Optional additional constants that
2719+
* are app specific.
2720+
*/
2721+
StudioApp.prototype.setPageConstants = function (config, appSpecificConstants) {
2722+
const level = config.level;
2723+
const combined = Object.assign({
2724+
localeDirection: this.localeDirection(),
2725+
assetUrl: this.assetUrl,
2726+
isReadOnlyWorkspace: !!config.readonlyWorkspace,
2727+
isDroplet: !!level.editCode,
2728+
hideSource: !!config.hideSource,
2729+
isEmbedView: !!config.embed,
2730+
isShareView: !!config.share,
2731+
instructionsMarkdown: level.markdownInstructions,
2732+
instructionsInTopPane: config.showInstructionsInTopPane,
2733+
puzzleNumber: level.puzzle_number,
2734+
stageTotal: level.stage_total
2735+
}, appSpecificConstants);
2736+
2737+
this.reduxStore.dispatch(setPageConstants(combined));
2738+
};

apps/src/applab/AppLabView.jsx

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
var ApplabVisualizationColumn = require('./ApplabVisualizationColumn');
55
var ProtectedStatefulDiv = require('../templates/ProtectedStatefulDiv');
6-
var ConnectedStudioAppWrapper = require('../templates/ConnectedStudioAppWrapper');
6+
var StudioAppWrapper = require('../templates/StudioAppWrapper');
77
var InstructionsWithWorkspace = require('../templates/instructions/InstructionsWithWorkspace');
88

99
/**
@@ -12,7 +12,6 @@ var InstructionsWithWorkspace = require('../templates/instructions/InstructionsW
1212
var AppLabView = React.createClass({
1313
propTypes: {
1414
isEditingProject: React.PropTypes.bool.isRequired,
15-
hideSource: React.PropTypes.bool.isRequired,
1615

1716
screenIds: React.PropTypes.arrayOf(React.PropTypes.string).isRequired,
1817
onScreenCreate: React.PropTypes.func.isRequired,
@@ -26,7 +25,7 @@ var AppLabView = React.createClass({
2625

2726
render: function () {
2827
return (
29-
<ConnectedStudioAppWrapper>
28+
<StudioAppWrapper>
3029
<ApplabVisualizationColumn
3130
isEditingProject={this.props.isEditingProject}
3231
screenIds={this.props.screenIds}
@@ -36,7 +35,7 @@ var AppLabView = React.createClass({
3635
className="fa fa-ellipsis-v" />
3736
<InstructionsWithWorkspace
3837
hideSource={this.props.hideSource}/>
39-
</ConnectedStudioAppWrapper>
38+
</StudioAppWrapper>
4039
);
4140
}
4241
});

apps/src/applab/applab.js

Lines changed: 2 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -741,38 +741,25 @@ Applab.init = function (config) {
741741
}.bind(this);
742742

743743
// Push initial level properties into the Redux store
744-
studioApp.reduxStore.dispatch(setPageConstants({
745-
assetUrl: studioApp.assetUrl,
744+
studioApp.setPageConstants(config, {
746745
channelId: config.channel,
747746
visualizationHasPadding: !config.noPadding,
748-
hideSource: !!config.hideSource,
749747
isDesignModeHidden: !!config.level.hideDesignMode,
750-
isEmbedView: !!config.embed,
751748
isIframeEmbed: !!config.level.iframeEmbed,
752-
isReadOnlyWorkspace: !!config.readonlyWorkspace,
753-
isShareView: !!config.share,
754749
isViewDataButtonHidden: !!config.level.hideViewDataButton,
755750
isProjectLevel: !!config.level.isProjectLevel,
756751
isSubmittable: !!config.level.submittable,
757752
isSubmitted: !!config.level.submitted,
758-
instructionsMarkdown: config.level.markdownInstructions,
759-
instructionsInTopPane: config.showInstructionsInTopPane,
760-
puzzleNumber: config.level.puzzle_number,
761-
stageTotal: config.level.stage_total,
762753
showDebugButtons: showDebugButtons,
763754
showDebugConsole: showDebugConsole,
764755
showDebugWatch: false,
765-
localeDirection: studioApp.localeDirection(),
766-
isDroplet: true,
767756
playspacePhoneFrame: !config.share && experiments.isEnabled('phoneFrame')
768-
}));
757+
});
769758

770759
studioApp.reduxStore.dispatch(changeInterfaceMode(
771760
Applab.startInDesignMode() ? ApplabInterfaceMode.DESIGN : ApplabInterfaceMode.CODE));
772761

773-
// TODO (brent) hideSource should probably be part of initialLevelProps
774762
Applab.reactInitialProps_ = {
775-
hideSource: !!config.hideSource,
776763
onMount: onMount
777764
};
778765

apps/src/bounce/bounce.js

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ var api = require('./api');
1717
var Provider = require('react-redux').Provider;
1818
var AppView = require('../templates/AppView');
1919
var BounceVisualizationColumn = require('./BounceVisualizationColumn');
20-
var setPageConstants = require('../redux/pageConstants').setPageConstants;
2120
var dom = require('../dom');
2221
var Hammer = require('../hammer');
2322
var utils = require('../utils');
@@ -779,22 +778,11 @@ Bounce.init = function (config) {
779778
dom.addClickTouchEvent(finishButton, Bounce.onPuzzleComplete);
780779
};
781780

782-
// Push initial level properties into the Redux store
783-
studioApp.reduxStore.dispatch(setPageConstants({
784-
localeDirection: studioApp.localeDirection(),
785-
isReadOnlyWorkspace: !!config.readonlyWorkspace,
786-
isDroplet: !!level.editCode
787-
}));
781+
studioApp.setPageConstants(config);
788782

789783
ReactDOM.render(
790784
<Provider store={studioApp.reduxStore}>
791785
<AppView
792-
assetUrl={studioApp.assetUrl}
793-
isEmbedView={!!config.embed}
794-
isShareView={!!config.share}
795-
hideSource={!!config.hideSource}
796-
noVisualization={false}
797-
isRtl={studioApp.isRtl()}
798786
visualizationColumn={<BounceVisualizationColumn/>}
799787
onMount={onMount}
800788
/>

apps/src/calc/calc.js

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@ var levels = require('./levels');
3030
var Provider = require('react-redux').Provider;
3131
var AppView = require('../templates/AppView');
3232
var CalcVisualizationColumn = require('./CalcVisualizationColumn');
33-
var setPageConstants = require('../redux/pageConstants').setPageConstants;
3433
var dom = require('../dom');
3534
var blockUtils = require('../block_utils');
3635
var utils = require('../utils');
@@ -200,24 +199,13 @@ Calc.init = function (config) {
200199
}
201200
};
202201

203-
// Push initial level properties into the Redux store
204-
studioApp.reduxStore.dispatch(setPageConstants({
205-
localeDirection: studioApp.localeDirection(),
206-
isReadOnlyWorkspace: !!config.readonlyWorkspace,
207-
isDroplet: !!level.editCode
208-
}));
202+
studioApp.setPageConstants(config);
209203

210204
var visualizationColumn = <CalcVisualizationColumn inputOutputTable={level.inputOutputTable}/>;
211205

212206
ReactDOM.render(
213207
<Provider store={studioApp.reduxStore}>
214208
<AppView
215-
assetUrl={studioApp.assetUrl}
216-
isEmbedView={!!config.embed}
217-
isShareView={!!config.share}
218-
hideSource={!!config.hideSource}
219-
noVisualization={false}
220-
isRtl={studioApp.isRtl()}
221209
visualizationColumn={visualizationColumn}
222210
onMount={studioApp.init.bind(studioApp, config)}
223211
/>

apps/src/craft/craft.js

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ var MusicController = require('../MusicController');
1515
var Provider = require('react-redux').Provider;
1616
var AppView = require('../templates/AppView');
1717
var CraftVisualizationColumn = require('./CraftVisualizationColumn');
18-
var setPageConstants = require('../redux/pageConstants').setPageConstants;
1918

2019
var ResultType = studioApp.ResultType;
2120
var TestResults = studioApp.TestResults;
@@ -307,22 +306,13 @@ Craft.init = function (config) {
307306
};
308307

309308
// Push initial level properties into the Redux store
310-
studioApp.reduxStore.dispatch(setPageConstants({
311-
localeDirection: studioApp.localeDirection(),
312-
isReadOnlyWorkspace: !!config.readonlyWorkspace,
313-
isDroplet: !!config.level.editCode,
309+
studioApp.setPageConstants(config, {
314310
isMinecraft: true
315-
}));
311+
});
316312

317313
ReactDOM.render(
318314
<Provider store={studioApp.reduxStore}>
319315
<AppView
320-
assetUrl={studioApp.assetUrl}
321-
isEmbedView={!!config.embed}
322-
isShareView={!!config.share}
323-
hideSource={!!config.hideSource}
324-
noVisualization={false}
325-
isRtl={studioApp.isRtl()}
326316
visualizationColumn={<CraftVisualizationColumn/>}
327317
onMount={onMount}
328318
/>

apps/src/eval/eval.js

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@ var api = require('./api');
3131
var Provider = require('react-redux').Provider;
3232
var AppView = require('../templates/AppView');
3333
var EvalVisualizationColumn = require('./EvalVisualizationColumn');
34-
var setPageConstants = require('../redux/pageConstants').setPageConstants;
3534
var dom = require('../dom');
3635
var blockUtils = require('../block_utils');
3736
var CustomEvalError = require('./evalError');
@@ -147,22 +146,11 @@ Eval.init = function (config) {
147146
}
148147
};
149148

150-
// Push initial level properties into the Redux store
151-
studioApp.reduxStore.dispatch(setPageConstants({
152-
localeDirection: studioApp.localeDirection(),
153-
isReadOnlyWorkspace: !!config.readonlyWorkspace,
154-
isDroplet: !!level.editCode
155-
}));
149+
studioApp.setPageConstants(config);
156150

157151
ReactDOM.render(
158152
<Provider store={studioApp.reduxStore}>
159153
<AppView
160-
assetUrl={studioApp.assetUrl}
161-
isEmbedView={!!config.embed}
162-
isShareView={!!config.share}
163-
hideSource={!!config.hideSource}
164-
noVisualization={false}
165-
isRtl={studioApp.isRtl()}
166154
visualizationColumn={<EvalVisualizationColumn/>}
167155
onMount={studioApp.init.bind(studioApp, config)}
168156
/>

apps/src/flappy/flappy.js

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ var api = require('./api');
1616
var Provider = require('react-redux').Provider;
1717
var AppView = require('../templates/AppView');
1818
var FlappyVisualizationColumn = require('./FlappyVisualizationColumn');
19-
var setPageConstants = require('../redux/pageConstants').setPageConstants;
2019
var dom = require('../dom');
2120
var constants = require('./constants');
2221
var utils = require('../utils');
@@ -584,21 +583,11 @@ Flappy.init = function (config) {
584583
dom.addClickTouchEvent(rightButton, Flappy.onPuzzleComplete);
585584
};
586585

587-
// Push initial level properties into the Redux store
588-
studioApp.reduxStore.dispatch(setPageConstants({
589-
localeDirection: studioApp.localeDirection(),
590-
isReadOnlyWorkspace: !!config.readonlyWorkspace,
591-
isDroplet: !!level.editCode
592-
}));
586+
studioApp.setPageConstants(config);
593587

594588
ReactDOM.render(
595589
<Provider store={studioApp.reduxStore}>
596590
<AppView
597-
assetUrl={studioApp.assetUrl}
598-
isEmbedView={!!config.embed}
599-
isShareView={!!config.share}
600-
hideSource={!!config.hideSource}
601-
noVisualization={false}
602591
isRtl={studioApp.isRtl()}
603592
visualizationColumn={<FlappyVisualizationColumn/>}
604593
onMount={onMount}

apps/src/gamelab/GameLab.js

Lines changed: 3 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@ var dom = require('../dom');
2727
var experiments = require('../experiments');
2828

2929
var actions = require('./actions');
30-
var setPageConstants = require('../redux/pageConstants').setPageConstants;
3130
var reducers = require('./reducers');
3231
var GameLabView = require('./GameLabView');
3332
var Provider = require('react-redux').Provider;
@@ -208,22 +207,11 @@ GameLab.prototype.init = function (config) {
208207
this.debugger_ = new JsDebuggerUi(this.runButtonClick.bind(this));
209208
}
210209

211-
this.studioApp_.reduxStore.dispatch(setPageConstants({
212-
assetUrl: this.studioApp_.assetUrl,
213-
hideSource: !!config.hideSource,
214-
isEmbedView: !!config.embed,
215-
isReadOnlyWorkspace: !!config.readonlyWorkspace,
216-
isShareView: !!config.share,
217-
instructionsMarkdown: config.level.markdownInstructions,
218-
instructionsInTopPane: config.showInstructionsInTopPane,
219-
puzzleNumber: config.level.puzzle_number,
220-
stageTotal: config.level.stage_total,
210+
this.studioApp_.setPageConstants(config, {
221211
showDebugButtons: showDebugButtons,
222212
showDebugConsole: showDebugConsole,
223-
showDebugWatch: true,
224-
localeDirection: this.studioApp_.localeDirection(),
225-
isDroplet: true
226-
}));
213+
showDebugWatch: true
214+
});
227215

228216
// Push project-sourced animation metadata into store
229217
if (typeof config.initialAnimationMetadata !== 'undefined') {

apps/src/gamelab/GameLabView.jsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import classNames from 'classnames';
66
import {connect} from 'react-redux';
77
var _ = require('../lodash');
88
var AnimationTab = require('./AnimationTab/AnimationTab');
9-
var ConnectedStudioAppWrapper = require('../templates/ConnectedStudioAppWrapper');
9+
var StudioAppWrapper = require('../templates/StudioAppWrapper');
1010
var ErrorDialogStack = require('./ErrorDialogStack');
1111
var gameLabConstants = require('./constants');
1212
var GameLabVisualizationHeader = require('./GameLabVisualizationHeader');
@@ -94,11 +94,11 @@ var GameLabView = React.createClass({
9494

9595
render: function () {
9696
return (
97-
<ConnectedStudioAppWrapper>
97+
<StudioAppWrapper>
9898
{this.renderCodeMode()}
9999
{this.renderAnimationMode()}
100100
<ErrorDialogStack/>
101-
</ConnectedStudioAppWrapper>
101+
</StudioAppWrapper>
102102
);
103103
}
104104
});

0 commit comments

Comments
 (0)