Skip to content
Snippets Groups Projects
Commit c182c75c authored by chrisgarrity's avatar chrisgarrity
Browse files

Move creating the store into playground examples

GUI will export a reducer to be included in the enclosing component’s redux when GUI is used as a library. The app-state-hoc is moved into the playground examples to provide a store when GUI is being used stand-alone.
parent 59e6e1d1
No related branches found
No related tags found
No related merge requests found
...@@ -5,6 +5,7 @@ import VM from 'scratch-vm'; ...@@ -5,6 +5,7 @@ import VM from 'scratch-vm';
import {connect} from 'react-redux'; import {connect} from 'react-redux';
import ReactModal from 'react-modal'; import ReactModal from 'react-modal';
import ErrorBoundary from './error-boundary.jsx';
import {openExtensionLibrary} from '../reducers/modals'; import {openExtensionLibrary} from '../reducers/modals';
import { import {
activateTab, activateTab,
...@@ -13,7 +14,6 @@ import { ...@@ -13,7 +14,6 @@ import {
SOUNDS_TAB_INDEX SOUNDS_TAB_INDEX
} from '../reducers/editor-tab'; } from '../reducers/editor-tab';
import AppStateHOC from '../lib/app-state-hoc.jsx';
import ProjectLoaderHOC from '../lib/project-loader-hoc.jsx'; import ProjectLoaderHOC from '../lib/project-loader-hoc.jsx';
import vmListenerHOC from '../lib/vm-listener-hoc.jsx'; import vmListenerHOC from '../lib/vm-listener-hoc.jsx';
...@@ -73,13 +73,15 @@ class GUI extends React.Component { ...@@ -73,13 +73,15 @@ class GUI extends React.Component {
...componentProps ...componentProps
} = this.props; } = this.props;
return ( return (
<GUIComponent <ErrorBoundary action="Top Level App">
loading={fetchingProject || this.state.loading || loadingStateVisible} <GUIComponent
vm={vm} loading={fetchingProject || this.state.loading || loadingStateVisible}
{...componentProps} vm={vm}
> {...componentProps}
{children} >
</GUIComponent> {children}
</GUIComponent>
</ErrorBoundary>
); );
} }
} }
...@@ -102,6 +104,7 @@ const mapStateToProps = state => ({ ...@@ -102,6 +104,7 @@ const mapStateToProps = state => ({
cardsVisible: state.cards.visible, cardsVisible: state.cards.visible,
costumesTabVisible: state.editorTab.activeTabIndex === COSTUMES_TAB_INDEX, costumesTabVisible: state.editorTab.activeTabIndex === COSTUMES_TAB_INDEX,
importInfoVisible: state.modals.importInfo, importInfoVisible: state.modals.importInfo,
isPlayerOnly: state.mode.isPlayerOnly,
loadingStateVisible: state.modals.loadingProject, loadingStateVisible: state.modals.loadingProject,
previewInfoVisible: state.modals.previewInfo, previewInfoVisible: state.modals.previewInfo,
targetIsStage: state.targets.stage && state.targets.stage.id === state.targets.editingTarget, targetIsStage: state.targets.stage && state.targets.stage.id === state.targets.editingTarget,
...@@ -121,7 +124,7 @@ const ConnectedGUI = connect( ...@@ -121,7 +124,7 @@ const ConnectedGUI = connect(
mapDispatchToProps, mapDispatchToProps,
)(GUI); )(GUI);
const WrappedGui = ProjectLoaderHOC(AppStateHOC(vmListenerHOC(ConnectedGUI))); const WrappedGui = ProjectLoaderHOC(vmListenerHOC(ConnectedGUI));
WrappedGui.setAppElement = ReactModal.setAppElement; WrappedGui.setAppElement = ReactModal.setAppElement;
export default WrappedGui; export default WrappedGui;
...@@ -9,7 +9,6 @@ import {IntlProvider, updateIntl} from 'react-intl-redux'; ...@@ -9,7 +9,6 @@ import {IntlProvider, updateIntl} from 'react-intl-redux';
import {intlInitialState} from '../reducers/intl.js'; import {intlInitialState} from '../reducers/intl.js';
import {initialState as modeInitialState, setPlayer, setFullScreen} from '../reducers/mode.js'; import {initialState as modeInitialState, setPlayer, setFullScreen} from '../reducers/mode.js';
import reducer from '../reducers/gui'; import reducer from '../reducers/gui';
import ErrorBoundary from '../containers/error-boundary.jsx';
const composeEnhancers = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose; const composeEnhancers = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose;
const enhancer = composeEnhancers( const enhancer = composeEnhancers(
...@@ -68,12 +67,16 @@ const AppStateHOC = function (WrappedComponent) { ...@@ -68,12 +67,16 @@ const AppStateHOC = function (WrappedComponent) {
} }
} }
render () { render () {
const {
intl, // eslint-disable-line no-unused-vars
isFullScreen, // eslint-disable-line no-unused-vars
isPlayerOnly, // eslint-disable-line no-unused-vars
...componentProps
} = this.props;
return ( return (
<Provider store={this.store}> <Provider store={this.store}>
<IntlProvider> <IntlProvider>
<ErrorBoundary action="Top Level App"> <WrappedComponent {...componentProps} />
<WrappedComponent {...this.props} />
</ErrorBoundary>
</IntlProvider> </IntlProvider>
</Provider> </Provider>
); );
......
...@@ -6,6 +6,7 @@ import Controls from '../containers/controls.jsx'; ...@@ -6,6 +6,7 @@ import Controls from '../containers/controls.jsx';
import Blocks from '../containers/blocks.jsx'; import Blocks from '../containers/blocks.jsx';
import GUI from '../containers/gui.jsx'; import GUI from '../containers/gui.jsx';
import HashParserHOC from '../lib/hash-parser-hoc.jsx'; import HashParserHOC from '../lib/hash-parser-hoc.jsx';
import AppStateHOC from '../lib/app-state-hoc.jsx';
import styles from './blocks-only.css'; import styles from './blocks-only.css';
...@@ -26,7 +27,7 @@ const BlocksOnly = props => ( ...@@ -26,7 +27,7 @@ const BlocksOnly = props => (
</GUI> </GUI>
); );
const App = HashParserHOC(BlocksOnly); const App = HashParserHOC(AppStateHOC(BlocksOnly));
const appTarget = document.createElement('div'); const appTarget = document.createElement('div');
document.body.appendChild(appTarget); document.body.appendChild(appTarget);
......
...@@ -7,6 +7,8 @@ import Stage from '../containers/stage.jsx'; ...@@ -7,6 +7,8 @@ import Stage from '../containers/stage.jsx';
import Box from '../components/box/box.jsx'; import Box from '../components/box/box.jsx';
import GUI from '../containers/gui.jsx'; import GUI from '../containers/gui.jsx';
import HashParserHOC from '../lib/hash-parser-hoc.jsx'; import HashParserHOC from '../lib/hash-parser-hoc.jsx';
import AppStateHOC from '../lib/app-state-hoc.jsx';
const WrappedGui = HashParserHOC(AppStateHOC(GUI));
const mapStateToProps = state => ({vm: state.vm}); const mapStateToProps = state => ({vm: state.vm});
...@@ -37,27 +39,12 @@ class Player extends React.Component { ...@@ -37,27 +39,12 @@ class Player extends React.Component {
this.setState({projectId: window.location.hash.substring(1)}); this.setState({projectId: window.location.hash.substring(1)});
} }
render () { render () {
const width = 480;
const height = 360;
return ( return (
<div style={{display: 'flex'}}> <div style={{display: 'flex'}}>
<GUI <WrappedGui
{...this.props} isPlayerOnly
width={width} isFullScreen={false}
> />
<Box height={40}>
<VMControls
style={{
marginRight: 10,
height: 40
}}
/>
</Box>
<VMStage
height={height}
width={width}
/>
</GUI>
<iframe <iframe
allowFullScreen allowFullScreen
allowTransparency allowTransparency
...@@ -71,9 +58,7 @@ class Player extends React.Component { ...@@ -71,9 +58,7 @@ class Player extends React.Component {
} }
} }
const App = HashParserHOC(Player);
const appTarget = document.createElement('div'); const appTarget = document.createElement('div');
document.body.appendChild(appTarget); document.body.appendChild(appTarget);
ReactDOM.render(<App />, appTarget); ReactDOM.render(<Player />, appTarget);
...@@ -5,6 +5,7 @@ import ReactDOM from 'react-dom'; ...@@ -5,6 +5,7 @@ import ReactDOM from 'react-dom';
import analytics from '../lib/analytics'; import analytics from '../lib/analytics';
import GUI from '../containers/gui.jsx'; import GUI from '../containers/gui.jsx';
import HashParserHOC from '../lib/hash-parser-hoc.jsx'; import HashParserHOC from '../lib/hash-parser-hoc.jsx';
import AppStateHOC from '../lib/app-state-hoc.jsx';
import styles from './index.css'; import styles from './index.css';
...@@ -21,6 +22,6 @@ appTarget.className = styles.app; ...@@ -21,6 +22,6 @@ appTarget.className = styles.app;
document.body.appendChild(appTarget); document.body.appendChild(appTarget);
GUI.setAppElement(appTarget); GUI.setAppElement(appTarget);
const WrappedGui = HashParserHOC(GUI); const WrappedGui = HashParserHOC(AppStateHOC(GUI));
ReactDOM.render(<WrappedGui />, appTarget); ReactDOM.render(<WrappedGui />, appTarget);
...@@ -4,7 +4,8 @@ import ReactDOM from 'react-dom'; ...@@ -4,7 +4,8 @@ import ReactDOM from 'react-dom';
import Box from '../components/box/box.jsx'; import Box from '../components/box/box.jsx';
import GUI from '../containers/gui.jsx'; import GUI from '../containers/gui.jsx';
import HashParserHOC from '../lib/hash-parser-hoc.jsx'; import HashParserHOC from '../lib/hash-parser-hoc.jsx';
const WrappedGui = HashParserHOC(GUI); import AppStateHOC from '../lib/app-state-hoc.jsx';
const WrappedGui = HashParserHOC(AppStateHOC(GUI));
if (process.env.NODE_ENV === 'production' && typeof window === 'object') { if (process.env.NODE_ENV === 'production' && typeof window === 'object') {
// Warn before navigating away // Warn before navigating away
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment