From 48c50692fcd78c66af36046808d7c0d497cb5f02 Mon Sep 17 00:00:00 2001 From: Chris Garrity Date: Fri, 28 Jun 2019 11:25:43 -0400 Subject: [PATCH 1/3] Add flags for language and file menus Show or hide the language and file menus. --- src/components/gui/gui.jsx | 8 ++ src/components/menu-bar/menu-bar.jsx | 146 ++++++++++++++------------- 2 files changed, 84 insertions(+), 70 deletions(-) diff --git a/src/components/gui/gui.jsx b/src/components/gui/gui.jsx index dfcc7d8dd..f8311e254 100644 --- a/src/components/gui/gui.jsx +++ b/src/components/gui/gui.jsx @@ -66,8 +66,10 @@ const GUIComponent = props => { backpackVisible, blocksTabVisible, cardsVisible, + canChangeLanguage, canCreateNew, canEditTitle, + canManageFiles, canRemix, canSave, canCreateCopy, @@ -202,9 +204,11 @@ const GUIComponent = props => { authorId={authorId} authorThumbnailUrl={authorThumbnailUrl} authorUsername={authorUsername} + canChangeLanguage={canChangeLanguage} canCreateCopy={canCreateCopy} canCreateNew={canCreateNew} canEditTitle={canEditTitle} + canManageFiles={canManageFiles} canRemix={canRemix} canSave={canSave} canShare={canShare} @@ -359,9 +363,11 @@ GUIComponent.propTypes = { backpackVisible: PropTypes.bool, basePath: PropTypes.string, blocksTabVisible: PropTypes.bool, + canChangeLanguage: PropTypes.bool, canCreateCopy: PropTypes.bool, canCreateNew: PropTypes.bool, canEditTitle: PropTypes.bool, + canManageFiles: PropTypes.bool, canRemix: PropTypes.bool, canSave: PropTypes.bool, canShare: PropTypes.bool, @@ -411,8 +417,10 @@ GUIComponent.defaultProps = { backpackHost: null, backpackVisible: false, basePath: './', + canChangeLanguage: true, canCreateNew: false, canEditTitle: false, + canManageFiles: true, canRemix: false, canSave: false, canCreateCopy: false, diff --git a/src/components/menu-bar/menu-bar.jsx b/src/components/menu-bar/menu-bar.jsx index 6105a60e5..d4a5393e0 100644 --- a/src/components/menu-bar/menu-bar.jsx +++ b/src/components/menu-bar/menu-bar.jsx @@ -331,7 +331,7 @@ class MenuBar extends React.Component { onClick={this.props.onClickLogo} /> -
@@ -345,82 +345,86 @@ class MenuBar extends React.Component { />
-
-
- - )} + {(this.props.canManageFiles) && ( +
- - - {newProjectMessage} - - - {(this.props.canSave || this.props.canCreateCopy || this.props.canRemix) && ( + + - {this.props.canSave ? ( - - {saveNowMessage} - - ) : []} - {this.props.canCreateCopy ? ( - - {createCopyMessage} - - ) : []} - {this.props.canRemix ? ( - - {remixMessage} - - ) : []} + + {newProjectMessage} + - )} - - - {(className, renderFileInput, loadProject) => ( + {(this.props.canSave || this.props.canCreateCopy || this.props.canRemix) && ( + + {this.props.canSave ? ( + + {saveNowMessage} + + ) : []} + {this.props.canCreateCopy ? ( + + {createCopyMessage} + + ) : []} + {this.props.canRemix ? ( + + {remixMessage} + + ) : []} + + )} + + + {(className, renderFileInput, loadProject) => ( + + {/* eslint-disable max-len */} + {this.props.intl.formatMessage(sharedMessages.loadFromComputerTitle)} + {/* eslint-enable max-len */} + {renderFileInput()} + + )} + + {(className, downloadProjectCallback) => ( - {this.props.intl.formatMessage(sharedMessages.loadFromComputerTitle)} - {renderFileInput()} + - )} - - {(className, downloadProjectCallback) => ( - - - - )} - - -
+ )} + +
+
+ )}
Date: Fri, 28 Jun 2019 11:49:01 -0400 Subject: [PATCH 2/3] Allow customized logo Show alternate logo if GUI is initialized with a different file. --- src/components/gui/gui.jsx | 3 +++ src/components/menu-bar/menu-bar.jsx | 3 ++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/components/gui/gui.jsx b/src/components/gui/gui.jsx index f8311e254..3c68eec90 100644 --- a/src/components/gui/gui.jsx +++ b/src/components/gui/gui.jsx @@ -87,6 +87,7 @@ const GUIComponent = props => { isRtl, isShared, loading, + logo, renderLogin, onClickAccountNav, onCloseAccountNav, @@ -215,6 +216,7 @@ const GUIComponent = props => { className={styles.menuBarPosition} enableCommunity={enableCommunity} isShared={isShared} + logo={logo} renderLogin={renderLogin} showComingSoon={showComingSoon} onClickAccountNav={onClickAccountNav} @@ -384,6 +386,7 @@ GUIComponent.propTypes = { isRtl: PropTypes.bool, isShared: PropTypes.bool, loading: PropTypes.bool, + logo: PropTypes.string, onActivateCostumesTab: PropTypes.func, onActivateSoundsTab: PropTypes.func, onActivateTab: PropTypes.func, diff --git a/src/components/menu-bar/menu-bar.jsx b/src/components/menu-bar/menu-bar.jsx index d4a5393e0..0222e2bab 100644 --- a/src/components/menu-bar/menu-bar.jsx +++ b/src/components/menu-bar/menu-bar.jsx @@ -327,7 +327,7 @@ class MenuBar extends React.Component { [styles.clickable]: typeof this.props.onClickLogo !== 'undefined' })} draggable={false} - src={scratchLogo} + src={this.props.logo ? this.props.logo : scratchLogo} onClick={this.props.onClickLogo} />
@@ -723,6 +723,7 @@ MenuBar.propTypes = { languageMenuOpen: PropTypes.bool, locale: PropTypes.string.isRequired, loginMenuOpen: PropTypes.bool, + logo: PropTypes.string, onClickAccount: PropTypes.func, onClickEdit: PropTypes.func, onClickFile: PropTypes.func, From 6bf9fac393c619edfd838a06cbd27c79145147e9 Mon Sep 17 00:00:00 2001 From: Chris Garrity Date: Mon, 22 Jul 2019 12:11:07 -0400 Subject: [PATCH 3/3] addressing comments MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * add scratchLogo as default for logo prop * prefer `{featureAllowed && ()} over ternary operator with a null ‘else’ * renamed `handleSaveToComputer` as `getSaveToComputerHandler` to more clearly represent what it’s doing (returning a function to be the handler) * renamed the parameter that is the function to handle clicking on the load project menu item (also updated the comments in `SBFileUploader`) --- src/components/menu-bar/menu-bar.jsx | 25 +++++++++++++------------ src/containers/sb-file-uploader.jsx | 7 ++++--- 2 files changed, 17 insertions(+), 15 deletions(-) diff --git a/src/components/menu-bar/menu-bar.jsx b/src/components/menu-bar/menu-bar.jsx index 0222e2bab..1fa7a01cc 100644 --- a/src/components/menu-bar/menu-bar.jsx +++ b/src/components/menu-bar/menu-bar.jsx @@ -154,7 +154,7 @@ class MenuBar extends React.Component { 'handleKeyPress', 'handleLanguageMouseUp', 'handleRestoreOption', - 'handleSaveToComputer', + 'getSaveToComputerHandler', 'restoreOptionMessage' ]); } @@ -225,7 +225,7 @@ class MenuBar extends React.Component { event.preventDefault(); } } - handleSaveToComputer (downloadProjectCallback) { + getSaveToComputerHandler (downloadProjectCallback) { return () => { this.props.onRequestCloseFile(); downloadProjectCallback(); @@ -327,7 +327,7 @@ class MenuBar extends React.Component { [styles.clickable]: typeof this.props.onClickLogo !== 'undefined' })} draggable={false} - src={this.props.logo ? this.props.logo : scratchLogo} + src={this.props.logo} onClick={this.props.onClickLogo} /> @@ -374,21 +374,21 @@ class MenuBar extends React.Component { {(this.props.canSave || this.props.canCreateCopy || this.props.canRemix) && ( - {this.props.canSave ? ( + {this.props.canSave && ( {saveNowMessage} - ) : []} - {this.props.canCreateCopy ? ( + )} + {this.props.canCreateCopy && ( {createCopyMessage} - ) : []} - {this.props.canRemix ? ( + )} + {this.props.canRemix && ( {remixMessage} - ) : []} + )} )} @@ -397,10 +397,10 @@ class MenuBar extends React.Component { userOwnsProject={this.props.userOwnsProject} onUpdateProjectTitle={this.props.onUpdateProjectTitle} > - {(className, renderFileInput, loadProject) => ( + {(className, renderFileInput, handleLoadProject) => ( {/* eslint-disable max-len */} {this.props.intl.formatMessage(sharedMessages.loadFromComputerTitle)} @@ -412,7 +412,7 @@ class MenuBar extends React.Component { {(className, downloadProjectCallback) => ( {} }; diff --git a/src/containers/sb-file-uploader.jsx b/src/containers/sb-file-uploader.jsx index 771ce29b4..ae5f42915 100644 --- a/src/containers/sb-file-uploader.jsx +++ b/src/containers/sb-file-uploader.jsx @@ -26,13 +26,14 @@ import { /** * SBFileUploader component passes a file input, load handler and props to its child. * It expects this child to be a function with the signature - * function (renderFileInput, loadProject) {} + * function (renderFileInput, handleLoadProject) {} * The component can then be used to attach project loading functionality * to any other component: * - * {(renderFileInput, loadProject) => ( + * {(className, renderFileInput, handleLoadProject) => ( * * {renderFileInput()} *