diff --git a/src/components/gui/gui.jsx b/src/components/gui/gui.jsx index d39e2283320384f35a81e0185c6d7d01f59fbe92..e3f32958d7daa6736188132fe23a0a6c7fed20f3 100644 --- a/src/components/gui/gui.jsx +++ b/src/components/gui/gui.jsx @@ -61,6 +61,12 @@ const GUIComponent = props => { backpackOptions, blocksTabVisible, cardsVisible, + canCreateNew, + canRemix, + canReport, + canSave, + canSaveAsCopy, + canShare, children, costumeLibraryVisible, costumesTabVisible, @@ -164,6 +170,12 @@ const GUIComponent = props => { ) : null} <MenuBar accountNavOpen={accountNavOpen} + canCreateNew={canCreateNew} + canRemix={canRemix} + canReport={canReport} + canSave={canSave} + canSaveAsCopy={canSaveAsCopy} + canShare={canShare} className={styles.menuBarPosition} enableCommunity={enableCommunity} renderLogin={renderLogin} @@ -305,6 +317,12 @@ GUIComponent.propTypes = { }), basePath: PropTypes.string, blocksTabVisible: PropTypes.bool, + canCreateNew: PropTypes.bool, + canRemix: PropTypes.bool, + canReport: PropTypes.bool, + canSave: PropTypes.bool, + canSaveAsCopy: PropTypes.bool, + canShare: PropTypes.bool, cardsVisible: PropTypes.bool, children: PropTypes.node, costumeLibraryVisible: PropTypes.bool, @@ -344,6 +362,12 @@ GUIComponent.defaultProps = { visible: false }, basePath: './', + canCreateNew: false, + canRemix: false, + canReport: false, + canSave: false, + canSaveAsCopy: false, + canShare: false, stageSizeMode: STAGE_SIZE_MODES.large }; diff --git a/src/components/menu-bar/menu-bar.jsx b/src/components/menu-bar/menu-bar.jsx index 81715e607114e540fce495bbbd7e3f06288930f9..4e332ab48d28969e18def653a4f681ecec7f53bd 100644 --- a/src/components/menu-bar/menu-bar.jsx +++ b/src/components/menu-bar/menu-bar.jsx @@ -145,12 +145,11 @@ class MenuBar extends React.Component { } } handleClickNew () { - const canSave = this.props.canUpdateProject; // logged in // if canSave===true, it's safe to replace current project, since we will auto-save first const readyToReplaceProject = - canSave || confirm('Replace contents of the current project?'); // eslint-disable-line no-alert + this.props.canSave || confirm('Replace contents of the current project?'); // eslint-disable-line no-alert if (readyToReplaceProject) { - this.props.onClickNew(canSave); + this.props.onClickNew(this.props.canSave); } } handleClickSave () { @@ -210,6 +209,13 @@ class MenuBar extends React.Component { id="gui.menuBar.saveNow" /> ); + const saveAsCopyMessage = ( + <FormattedMessage + defaultMessage="Save as a copy" + description="Menu bar item for saving as a copy" + id="gui.menuBar.saveAsCopy" + /> + ); const newProjectMessage = ( <FormattedMessage defaultMessage="New" @@ -285,24 +291,23 @@ class MenuBar extends React.Component { place={this.props.isRtl ? 'left' : 'right'} onRequestClose={this.props.onRequestCloseFile} > - {/* for now, only enable New when there is no session */} - {this.props.sessionExists ? ( - <MenuItemTooltip - id="new" - isRtl={this.props.isRtl} - > - <MenuItem>{newProjectMessage}</MenuItem> - </MenuItemTooltip> - ) : ( + {this.props.canCreateNew ? ( <MenuItem isRtl={this.props.isRtl} onClick={this.handleClickNew} > {newProjectMessage} </MenuItem> + ) : ( + <MenuItemTooltip + id="new" + isRtl={this.props.isRtl} + > + <MenuItem>{newProjectMessage}</MenuItem> + </MenuItemTooltip> )} <MenuSection> - {this.props.canUpdateProject ? ( + {this.props.canSave ? ( <MenuItem onClick={this.handleClickSave}> {saveNowMessage} </MenuItem> @@ -314,18 +319,18 @@ class MenuBar extends React.Component { <MenuItem>{saveNowMessage}</MenuItem> </MenuItemTooltip> )} - <MenuItemTooltip - id="copy" - isRtl={this.props.isRtl} - > - <MenuItem> - <FormattedMessage - defaultMessage="Save as a copy" - description="Menu bar item for saving as a copy" - id="gui.menuBar.saveAsCopy" - /> + {this.props.canSaveAsCopy ? ( + <MenuItem onClick={this.handleClickSaveAsCopy}> + {saveAsCopyMessage} </MenuItem> - </MenuItemTooltip> + ) : ( + <MenuItemTooltip + id="copy" + isRtl={this.props.isRtl} + > + <MenuItem>{saveAsCopyMessage}</MenuItem> + </MenuItemTooltip> + )} </MenuSection> <MenuSection> <SBFileUploader> @@ -432,7 +437,7 @@ class MenuBar extends React.Component { </MenuBarItemTooltip> </div> <div className={classNames(styles.menuBarItem)}> - {this.props.onShare ? shareButton : ( + {this.props.canShare ? shareButton : ( <MenuBarItemTooltip id="share-button"> {shareButton} </MenuBarItemTooltip> @@ -615,7 +620,12 @@ class MenuBar extends React.Component { MenuBar.propTypes = { accountMenuOpen: PropTypes.bool, - canUpdateProject: PropTypes.bool, + canCreateNew: PropTypes.bool, + canRemix: PropTypes.bool, + canReport: PropTypes.bool, + canSave: PropTypes.bool, + canSaveAsCopy: PropTypes.bool, + canShare: PropTypes.bool, className: PropTypes.string, editMenuOpen: PropTypes.bool, enableCommunity: PropTypes.bool, @@ -651,12 +661,15 @@ MenuBar.propTypes = { username: PropTypes.string }; +MenuBar.defaultProps = { + onShare: () => {} +}; + const mapStateToProps = state => { const loadingState = state.scratchGui.projectState.loadingState; const user = state.session && state.session.session && state.session.session.user; return { accountMenuOpen: accountMenuOpen(state), - canUpdateProject: typeof user !== 'undefined', fileMenuOpen: fileMenuOpen(state), editMenuOpen: editMenuOpen(state), isRtl: state.locales.isRtl, diff --git a/src/playground/render-gui.jsx b/src/playground/render-gui.jsx index c5be243d113a20c53e99d0cd3861fd6ebe640911..c4c8c86eb824f6ec4e7ec8749a462516e2172795 100644 --- a/src/playground/render-gui.jsx +++ b/src/playground/render-gui.jsx @@ -37,5 +37,14 @@ export default appTarget => { window.onbeforeunload = () => true; } - ReactDOM.render(<WrappedGui backpackOptions={backpackOptions} />, appTarget); + ReactDOM.render( + <WrappedGui + canCreateNew + backpackOptions={backpackOptions} + canRemix={false} + canSave={false} + canSaveAsCopy={false} + canShare={false} + />, + appTarget); };