Skip to content

Commit 29d9bb0

Browse files
Merge branch 'develop' into bugfix/go-space-direct
2 parents 69506d9 + 9d185bd commit 29d9bb0

File tree

9 files changed

+132
-64
lines changed

9 files changed

+132
-64
lines changed

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -108,9 +108,9 @@
108108
"scratch-blocks": "0.1.0-prerelease.1555512815",
109109
"scratch-l10n": "3.2.20190417195644",
110110
"scratch-paint": "0.2.0-prerelease.20190416185326",
111-
"scratch-render": "0.1.0-prerelease.20190326161919",
111+
"scratch-render": "0.1.0-prerelease.20190419202157",
112112
"scratch-storage": "1.2.2",
113-
"scratch-svg-renderer": "0.2.0-prerelease.20190329052730",
113+
"scratch-svg-renderer": "0.2.0-prerelease.20190419183947",
114114
"scratch-vm": "0.2.0-prerelease.20190417203423",
115115
"selenium-webdriver": "3.6.0",
116116
"startaudiocontext": "1.2.1",
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
import {connect} from 'react-redux';
2+
import PropTypes from 'prop-types';
3+
import bindAll from 'lodash.bindall';
4+
import React from 'react';
5+
6+
const ConfirmReplaceHOC = function (WrappedComponent) {
7+
class ConfirmReplaceProject extends React.PureComponent {
8+
constructor (props) {
9+
super(props);
10+
11+
bindAll(this, [
12+
'confirmReadyToReplaceProject'
13+
]);
14+
}
15+
16+
confirmReadyToReplaceProject (message) {
17+
let readyToReplaceProject = true;
18+
if (this.props.projectChanged && !this.props.canCreateNew) {
19+
readyToReplaceProject = confirm(message); // eslint-disable-line no-alert
20+
}
21+
return readyToReplaceProject;
22+
}
23+
24+
render () {
25+
const {
26+
/* eslint-disable no-unused-vars */
27+
projectChanged,
28+
/* eslint-enable no-unused-vars */
29+
...props
30+
} = this.props;
31+
return (<WrappedComponent
32+
confirmReadyToReplaceProject={this.confirmReadyToReplaceProject}
33+
{...props}
34+
/>);
35+
}
36+
}
37+
38+
ConfirmReplaceProject.propTypes = {
39+
canCreateNew: PropTypes.bool,
40+
projectChanged: PropTypes.bool
41+
};
42+
43+
const _mapStateToProps = state => ({
44+
projectChanged: state.scratchGui.projectChanged
45+
});
46+
47+
return connect(_mapStateToProps)(ConfirmReplaceProject);
48+
};
49+
50+
export default ConfirmReplaceHOC;

src/components/menu-bar/icon--feedback.svg

Lines changed: 0 additions & 12 deletions
This file was deleted.

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

Lines changed: 13 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import classNames from 'classnames';
22
import {connect} from 'react-redux';
3+
import {compose} from 'redux';
34
import {defineMessages, FormattedMessage, injectIntl, intlShape} from 'react-intl';
45
import PropTypes from 'prop-types';
56
import bindAll from 'lodash.bindall';
@@ -27,6 +28,7 @@ import LoginDropdown from './login-dropdown.jsx';
2728
import SB3Downloader from '../../containers/sb3-downloader.jsx';
2829
import DeletionRestorer from '../../containers/deletion-restorer.jsx';
2930
import TurboMode from '../../containers/turbo-mode.jsx';
31+
import ConfirmReplaceHOC from './confirm-replace-hoc.jsx';
3032

3133
import {openTipsLibrary} from '../../reducers/modals';
3234
import {setPlayer} from '../../reducers/mode';
@@ -63,7 +65,6 @@ import styles from './menu-bar.css';
6365

6466
import helpIcon from '../../lib/assets/icon--tutorials.svg';
6567
import mystuffIcon from './icon--mystuff.png';
66-
import feedbackIcon from './icon--feedback.svg';
6768
import profileIcon from './icon--profile.png';
6869
import remixIcon from './icon--remix.svg';
6970
import dropdownCaret from './dropdown-caret.svg';
@@ -164,17 +165,14 @@ class MenuBar extends React.Component {
164165
document.removeEventListener('keydown', this.handleKeyPress);
165166
}
166167
handleClickNew () {
167-
let readyToReplaceProject = true;
168168
// if the project is dirty, and user owns the project, we will autosave.
169169
// but if they are not logged in and can't save, user should consider
170170
// downloading or logging in first.
171171
// Note that if user is logged in and editing someone else's project,
172172
// they'll lose their work.
173-
if (this.props.projectChanged && !this.props.canCreateNew) {
174-
readyToReplaceProject = confirm( // eslint-disable-line no-alert
175-
this.props.intl.formatMessage(sharedMessages.replaceProjectWarning)
176-
);
177-
}
173+
const readyToReplaceProject = this.props.confirmReadyToReplaceProject(
174+
this.props.intl.formatMessage(sharedMessages.replaceProjectWarning)
175+
);
178176
this.props.onRequestCloseFile();
179177
if (readyToReplaceProject) {
180178
this.props.onClickNew(this.props.canSave && this.props.canCreateNew);
@@ -644,25 +642,6 @@ class MenuBar extends React.Component {
644642
) : (
645643
// ******** no login session is available, so don't show login stuff
646644
<React.Fragment>
647-
<div className={classNames(styles.menuBarItem, styles.feedbackButtonWrapper)}>
648-
<a
649-
className={styles.feedbackLink}
650-
href="https://scratch.mit.edu/discuss/topic/312261/"
651-
rel="noopener noreferrer"
652-
target="_blank"
653-
>
654-
<Button
655-
className={styles.feedbackButton}
656-
iconSrc={feedbackIcon}
657-
>
658-
<FormattedMessage
659-
defaultMessage="Give Feedback"
660-
description="Label for feedback form modal button"
661-
id="gui.menuBar.giveFeedback"
662-
/>
663-
</Button>
664-
</a>
665-
</div>
666645
{this.props.showComingSoon ? (
667646
<React.Fragment>
668647
<MenuBarItemTooltip id="mystuff">
@@ -759,7 +738,6 @@ MenuBar.propTypes = {
759738
onShare: PropTypes.func,
760739
onToggleLoginOpen: PropTypes.func,
761740
onUpdateProjectTitle: PropTypes.func,
762-
projectChanged: PropTypes.bool,
763741
projectTitle: PropTypes.string,
764742
renderLogin: PropTypes.func,
765743
sessionExists: PropTypes.bool,
@@ -785,7 +763,6 @@ const mapStateToProps = (state, ownProps) => {
785763
languageMenuOpen: languageMenuOpen(state),
786764
locale: state.locales.locale,
787765
loginMenuOpen: loginMenuOpen(state),
788-
projectChanged: state.scratchGui.projectChanged,
789766
projectTitle: state.scratchGui.projectTitle,
790767
sessionExists: state.session && typeof state.session.session !== 'undefined',
791768
username: user ? user.username : null,
@@ -815,7 +792,11 @@ const mapDispatchToProps = dispatch => ({
815792
onSeeCommunity: () => dispatch(setPlayer(true))
816793
});
817794

818-
export default injectIntl(connect(
819-
mapStateToProps,
820-
mapDispatchToProps
821-
)(MenuBar));
795+
export default compose(
796+
injectIntl,
797+
ConfirmReplaceHOC,
798+
connect(
799+
mapStateToProps,
800+
mapDispatchToProps
801+
)
802+
)(MenuBar);

src/lib/libraries/extensions/boost/boost-button-illustration.svg

Lines changed: 1 addition & 0 deletions
Loading

0 commit comments

Comments
 (0)