Skip to content

Commit f6d7325

Browse files
committed
renamed many properties and functions of project-state
1 parent 74b4e55 commit f6d7325

File tree

8 files changed

+205
-220
lines changed

8 files changed

+205
-220
lines changed

src/components/menu-bar/menu-bar.jsx

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import Button from '../button/button.jsx';
1010
import {ComingSoonTooltip} from '../coming-soon/coming-soon.jsx';
1111
import Divider from '../divider/divider.jsx';
1212
import LanguageSelector from '../../containers/language-selector.jsx';
13-
import FileLoaderFromLocal from '../../containers/file-loader-from-local.jsx';
13+
import SBFileUploader from '../../containers/sb-file-uploader.jsx';
1414
import MenuBarMenu from './menu-bar-menu.jsx';
1515
import {MenuItem, MenuSection} from '../menu/menu.jsx';
1616
import ProjectTitleInput from './project-title-input.jsx';
@@ -23,9 +23,8 @@ import TurboMode from '../../containers/turbo-mode.jsx';
2323
import {openTipsLibrary} from '../../reducers/modals';
2424
import {setPlayer} from '../../reducers/mode';
2525
import {
26-
doneLoadingFileUpload,
27-
isUpdating,
28-
isShowingProject,
26+
getIsUpdating,
27+
getIsShowingProject,
2928
newProjectRequested,
3029
saveRequested
3130
} from '../../reducers/project-state';
@@ -329,7 +328,7 @@ class MenuBar extends React.Component {
329328
</MenuItemTooltip>
330329
</MenuSection>
331330
<MenuSection>
332-
<FileLoaderFromLocal
331+
<SBFileUploader
333332
onUpdateProjectTitle={this.props.onUpdateProjectTitle}
334333
>
335334
{(renderFileInput, loadProject) => (
@@ -346,7 +345,7 @@ class MenuBar extends React.Component {
346345
{renderFileInput()}
347346
</MenuItem>
348347
)}
349-
</FileLoaderFromLocal>
348+
</SBFileUploader>
350349
<SB3Downloader>{downloadProject => (
351350
<MenuItem
352351
onClick={this.handleCloseFileMenuAndThen(downloadProject)}
@@ -620,14 +619,13 @@ MenuBar.propTypes = {
620619
accountMenuOpen: PropTypes.bool,
621620
canUpdateProject: PropTypes.bool,
622621
className: PropTypes.string,
623-
doneLoadingFileUpload: PropTypes.func,
624622
editMenuOpen: PropTypes.bool,
625623
enableCommunity: PropTypes.bool,
626624
fileMenuOpen: PropTypes.bool,
627625
intl: intlShape,
628626
isRtl: PropTypes.bool,
629-
isUpdating: PropTypes.bool,
630627
isShowingProject: PropTypes.bool,
628+
isUpdating: PropTypes.bool,
631629
languageMenuOpen: PropTypes.bool,
632630
loginMenuOpen: PropTypes.bool,
633631
onClickAccount: PropTypes.func,
@@ -636,6 +634,7 @@ MenuBar.propTypes = {
636634
onClickLanguage: PropTypes.func,
637635
onClickLogin: PropTypes.func,
638636
onClickNew: PropTypes.func,
637+
onClickSave: PropTypes.func,
639638
onLogOut: PropTypes.func,
640639
onOpenRegistration: PropTypes.func,
641640
onOpenTipLibrary: PropTypes.func,
@@ -655,16 +654,16 @@ MenuBar.propTypes = {
655654
};
656655

657656
const mapStateToProps = state => {
658-
const projectState = state.scratchGui.projectId.projectState;
657+
const loadingState = state.scratchGui.projectId.loadingState;
659658
const user = state.session && state.session.session && state.session.session.user;
660659
return {
661660
accountMenuOpen: accountMenuOpen(state),
662661
canUpdateProject: typeof user !== 'undefined',
663662
fileMenuOpen: fileMenuOpen(state),
664663
editMenuOpen: editMenuOpen(state),
665664
isRtl: state.locales.isRtl,
666-
isUpdating: isUpdating(projectState),
667-
isShowingProject: isShowingProject(projectState),
665+
isUpdating: getIsUpdating(loadingState),
666+
isShowingProject: getIsShowingProject(loadingState),
668667
languageMenuOpen: languageMenuOpen(state),
669668
loginMenuOpen: loginMenuOpen(state),
670669
sessionExists: state.session && typeof state.session.session !== 'undefined',
@@ -673,7 +672,6 @@ const mapStateToProps = state => {
673672
};
674673

675674
const mapDispatchToProps = dispatch => ({
676-
doneLoadingFileUpload: () => dispatch(doneLoadingFileUpload()),
677675
onOpenTipLibrary: () => dispatch(openTipsLibrary()),
678676
onClickAccount: () => dispatch(openAccountMenu()),
679677
onRequestCloseAccount: () => dispatch(closeAccountMenu()),

src/containers/gui.jsx

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import React from 'react';
33
import {compose} from 'redux';
44
import {connect} from 'react-redux';
55
import ReactModal from 'react-modal';
6+
import VM from 'scratch-vm';
67

78
import ErrorBoundaryHOC from '../lib/error-boundary-hoc.jsx';
89
import {openExtensionLibrary} from '../reducers/modals';
@@ -85,7 +86,8 @@ GUI.propTypes = {
8586
onUpdateReduxProjectTitle: PropTypes.func,
8687
previewInfoVisible: PropTypes.bool,
8788
projectHost: PropTypes.string,
88-
projectTitle: PropTypes.string
89+
projectTitle: PropTypes.string,
90+
vm: PropTypes.instanceOf(VM).isRequired
8991
};
9092

9193
const mapStateToProps = (state, ownProps) => ({
@@ -106,7 +108,8 @@ const mapStateToProps = (state, ownProps) => ({
106108
state.scratchGui.targets.stage.id === state.scratchGui.targets.editingTarget
107109
),
108110
soundsTabVisible: state.scratchGui.editorTab.activeTabIndex === SOUNDS_TAB_INDEX,
109-
tipsLibraryVisible: state.scratchGui.modals.tipsLibrary
111+
tipsLibraryVisible: state.scratchGui.modals.tipsLibrary,
112+
vm: state.scratchGui.vm
110113
});
111114

112115
const mapDispatchToProps = dispatch => ({

src/containers/file-loader-from-local.jsx renamed to src/containers/sb-file-uploader.jsx

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -7,27 +7,27 @@ import {defineMessages, injectIntl, intlShape} from 'react-intl';
77
import analytics from '../lib/analytics';
88
import log from '../lib/log';
99
import {setProjectTitle} from '../reducers/project-title';
10-
import {startLoadingFileUpload, doneLoadingFileUpload} from '../reducers/project-state';
10+
import {onLoadedProject, onProjectUploadStarted} from '../reducers/project-state';
1111

1212
import {
1313
openLoadingProject,
1414
closeLoadingProject
1515
} from '../reducers/modals';
1616

1717
/**
18-
* FileLoaderFromLocal component passes a file input, load handler and props to its child.
18+
* SBFileUploader component passes a file input, load handler and props to its child.
1919
* It expects this child to be a function with the signature
2020
* function (renderFileInput, loadProject) {}
2121
* The component can then be used to attach project loading functionality
2222
* to any other component:
2323
*
24-
* <FileLoaderFromLocal>{(renderFileInput, loadProject) => (
24+
* <SBFileUploader>{(renderFileInput, loadProject) => (
2525
* <MyCoolComponent
2626
* onClick={loadProject}
2727
* >
2828
* {renderFileInput()}
2929
* </MyCoolComponent>
30-
* )}</FileLoaderFromLocal>
30+
* )}</SBFileUploader>
3131
*/
3232

3333
const messages = defineMessages({
@@ -38,7 +38,7 @@ const messages = defineMessages({
3838
}
3939
});
4040

41-
class FileLoaderFromLocal extends React.Component {
41+
class SBFileUploader extends React.Component {
4242
constructor (props) {
4343
super(props);
4444
bindAll(this, [
@@ -61,21 +61,21 @@ class FileLoaderFromLocal extends React.Component {
6161
action: 'Import Project File',
6262
nonInteraction: true
6363
});
64-
this.props.closeLoadingState();
64+
this.props.onLoadingFinished();
6565
// Reset the file input after project is loaded
6666
// This is necessary in case the user wants to reload a project
6767
thisFileInput.value = null;
6868
})
6969
.catch(error => {
7070
log.warn(error);
7171
alert(this.props.intl.formatMessage(messages.loadError)); // eslint-disable-line no-alert
72-
this.props.closeLoadingState();
72+
this.props.onLoadingFinished();
7373
// Reset the file input after project is loaded
7474
// This is necessary in case the user wants to reload a project
7575
thisFileInput.value = null;
7676
});
7777
if (thisFileInput.files) { // Don't attempt to load if no file was selected
78-
this.props.openLoadingState();
78+
this.props.onLoadingStarted();
7979
reader.readAsArrayBuffer(thisFileInput.files[0]);
8080
// extract the title from the file and set it as current project title
8181
if (thisFileInput.files[0].name) {
@@ -113,13 +113,13 @@ class FileLoaderFromLocal extends React.Component {
113113
}
114114
}
115115

116-
FileLoaderFromLocal.propTypes = {
116+
SBFileUploader.propTypes = {
117117
children: PropTypes.func,
118-
closeLoadingState: PropTypes.func,
119118
intl: intlShape.isRequired,
119+
onLoadingFinished: PropTypes.func,
120+
onLoadingStarted: PropTypes.func,
120121
onSetReduxProjectTitle: PropTypes.func,
121122
onUpdateProjectTitle: PropTypes.func,
122-
openLoadingState: PropTypes.func,
123123
vm: PropTypes.shape({
124124
loadProject: PropTypes.func
125125
})
@@ -129,18 +129,18 @@ const mapStateToProps = state => ({
129129
});
130130

131131
const mapDispatchToProps = dispatch => ({
132-
closeLoadingState: () => {
133-
dispatch(doneLoadingFileUpload());
132+
onLoadingFinished: () => {
133+
dispatch(onLoadedProject());
134134
dispatch(closeLoadingProject());
135135
},
136136
onSetReduxProjectTitle: title => dispatch(setProjectTitle(title)),
137-
openLoadingState: () => {
137+
onLoadingStarted: () => {
138138
dispatch(openLoadingProject());
139-
dispatch(startLoadingFileUpload());
139+
dispatch(onProjectUploadStarted());
140140
}
141141
});
142142

143143
export default connect(
144144
mapStateToProps,
145145
mapDispatchToProps
146-
)(injectIntl(FileLoaderFromLocal));
146+
)(injectIntl(SBFileUploader));

src/lib/hash-parser-hoc.jsx

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import {connect} from 'react-redux';
55

66
import {
77
defaultProjectId,
8-
isFetchingProjectWithNoURLId,
8+
getIsFetchingWithoutId,
99
setProjectId
1010
} from '../reducers/project-state';
1111

@@ -31,7 +31,7 @@ const HashParserHOC = function (WrappedComponent) {
3131
}
3232
componentDidUpdate (prevProps) {
3333
// if we are newly fetching a non-hash project...
34-
if (this.props.isFetchingProjectWithNoURLId && !prevProps.isFetchingProjectWithNoURLId) {
34+
if (this.props.isFetchingWithoutId && !prevProps.isFetchingWithoutId) {
3535
// ...clear the hash from the url
3636
history.pushState('new-project', 'new-project',
3737
window.location.pathname + window.location.search);
@@ -44,7 +44,7 @@ const HashParserHOC = function (WrappedComponent) {
4444
const hashMatch = window.location.hash.match(/#(\d+)/);
4545
const hashProjectId = hashMatch === null ? defaultProjectId : hashMatch[1];
4646
if (hashProjectId !== this.props.reduxProjectId) {
47-
this.props.setHashProjectId(hashProjectId);
47+
this.props.setProjectId(hashProjectId);
4848
}
4949
if (hashProjectId !== defaultProjectId) {
5050
this.setState({hideIntro: true});
@@ -53,9 +53,9 @@ const HashParserHOC = function (WrappedComponent) {
5353
render () {
5454
const {
5555
/* eslint-disable no-unused-vars */
56-
isFetchingProjectWithNoURLId: isFetchingProjectWithNoURLIdProp,
56+
isFetchingWithoutId: isFetchingWithoutIdProp,
5757
reduxProjectId,
58-
setHashProjectId: setHashProjectIdProp,
58+
setProjectId: setProjectIdProp,
5959
/* eslint-enable no-unused-vars */
6060
...componentProps
6161
} = this.props;
@@ -68,19 +68,19 @@ const HashParserHOC = function (WrappedComponent) {
6868
}
6969
}
7070
HashParserComponent.propTypes = {
71-
isFetchingProjectWithNoURLId: PropTypes.bool,
71+
isFetchingWithoutId: PropTypes.bool,
7272
reduxProjectId: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),
73-
setHashProjectId: PropTypes.func
73+
setProjectId: PropTypes.func
7474
};
7575
const mapStateToProps = state => {
76-
const projectState = state.scratchGui.projectId.projectState;
76+
const loadingState = state.scratchGui.projectId.loadingState;
7777
return {
78-
isFetchingProjectWithNoURLId: isFetchingProjectWithNoURLId(projectState),
78+
isFetchingWithoutId: getIsFetchingWithoutId(loadingState),
7979
reduxProjectId: state.scratchGui.projectId.projectId
8080
};
8181
};
8282
const mapDispatchToProps = dispatch => ({
83-
setHashProjectId: projectId => dispatch(setProjectId(projectId))
83+
setProjectId: projectId => dispatch(setProjectId(projectId))
8484
});
8585
return connect(
8686
mapStateToProps,

src/lib/project-fetcher-hoc.jsx

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,10 @@ import bindAll from 'lodash.bindall';
55
import {connect} from 'react-redux';
66

77
import {
8-
ProjectStates,
8+
LoadingStates,
99
defaultProjectId,
1010
onFetchedProjectData,
11-
isFetchingProjectWithId,
11+
getIsFetchingWithId,
1212
setProjectId
1313
} from '../reducers/project-state';
1414

@@ -50,16 +50,16 @@ const ProjectFetcherHOC = function (WrappedComponent) {
5050
if (prevProps.assetHost !== this.props.assetHost) {
5151
storage.setAssetHost(this.props.assetHost);
5252
}
53-
if (this.props.isFetchingProjectWithId && !prevProps.isFetchingProjectWithId) {
54-
this.fetchProject(this.props.reduxProjectId, this.props.projectState);
53+
if (this.props.isFetchingWithId && !prevProps.isFetchingWithId) {
54+
this.fetchProject(this.props.reduxProjectId, this.props.loadingState);
5555
}
5656
}
57-
fetchProject (projectId, projectState) {
57+
fetchProject (projectId, loadingState) {
5858
return storage
5959
.load(storage.AssetType.Project, projectId, storage.DataFormat.JSON)
6060
.then(projectAsset => {
6161
if (projectAsset) {
62-
this.props.onFetchedProjectData(projectAsset.data, projectState);
62+
this.props.onFetchedProjectData(projectAsset.data, loadingState);
6363
}
6464
})
6565
.then(() => {
@@ -85,16 +85,16 @@ const ProjectFetcherHOC = function (WrappedComponent) {
8585
intl,
8686
projectHost,
8787
projectId,
88-
projectState,
88+
loadingState,
8989
reduxProjectId,
9090
setProjectId: setProjectIdProp,
9191
/* eslint-enable no-unused-vars */
92-
isFetchingProjectWithId: isFetchingProjectWithIdProp,
92+
isFetchingWithId: isFetchingWithIdProp,
9393
...componentProps
9494
} = this.props;
9595
return (
9696
<WrappedComponent
97-
fetchingProject={isFetchingProjectWithIdProp}
97+
fetchingProject={isFetchingWithIdProp}
9898
{...componentProps}
9999
/>
100100
);
@@ -103,11 +103,11 @@ const ProjectFetcherHOC = function (WrappedComponent) {
103103
ProjectFetcherComponent.propTypes = {
104104
assetHost: PropTypes.string,
105105
intl: intlShape.isRequired,
106-
isFetchingProjectWithId: PropTypes.bool,
106+
isFetchingWithId: PropTypes.bool,
107+
loadingState: PropTypes.oneOf(LoadingStates),
107108
onFetchedProjectData: PropTypes.func,
108109
projectHost: PropTypes.string,
109110
projectId: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),
110-
projectState: PropTypes.oneOf(ProjectStates),
111111
reduxProjectId: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),
112112
setProjectId: PropTypes.func
113113
};
@@ -117,13 +117,13 @@ const ProjectFetcherHOC = function (WrappedComponent) {
117117
};
118118

119119
const mapStateToProps = state => ({
120-
isFetchingProjectWithId: isFetchingProjectWithId(state.scratchGui.projectId.projectState),
121-
projectState: state.scratchGui.projectId.projectState,
120+
isFetchingWithId: getIsFetchingWithId(state.scratchGui.projectId.loadingState),
121+
loadingState: state.scratchGui.projectId.loadingState,
122122
reduxProjectId: state.scratchGui.projectId.projectId
123123
});
124124
const mapDispatchToProps = dispatch => ({
125-
onFetchedProjectData: (projectData, projectState) =>
126-
dispatch(onFetchedProjectData(projectData, projectState)),
125+
onFetchedProjectData: (projectData, loadingState) =>
126+
dispatch(onFetchedProjectData(projectData, loadingState)),
127127
setProjectId: projectId => dispatch(setProjectId(projectId))
128128
});
129129
return injectIntl(connect(

0 commit comments

Comments
 (0)