Skip to content
Snippets Groups Projects
Commit f1163634 authored by Ray Schamp's avatar Ray Schamp
Browse files

Add dividers

It's a cleaner API IMO but ended up being a messy implementation...
parent 56b431da
No related branches found
No related tags found
No related merge requests found
...@@ -10,7 +10,7 @@ import {ComingSoonTooltip} from '../coming-soon/coming-soon.jsx'; ...@@ -10,7 +10,7 @@ import {ComingSoonTooltip} from '../coming-soon/coming-soon.jsx';
import LanguageSelector from '../../containers/language-selector.jsx'; import LanguageSelector from '../../containers/language-selector.jsx';
import LoadButton from '../../containers/load-button.jsx'; import LoadButton from '../../containers/load-button.jsx';
import Menu from '../../containers/menu.jsx'; import Menu from '../../containers/menu.jsx';
import {MenuItem} from '../menu/menu.jsx'; import {MenuItem, MenuSection} from '../menu/menu.jsx';
import SaveButton from '../../containers/save-button.jsx'; import SaveButton from '../../containers/save-button.jsx';
import {openFeedbackForm} from '../../reducers/modals'; import {openFeedbackForm} from '../../reducers/modals';
...@@ -25,9 +25,14 @@ import communityIcon from './icon--see-community.svg'; ...@@ -25,9 +25,14 @@ import communityIcon from './icon--see-community.svg';
import dropdownCaret from '../language-selector/dropdown-caret.svg'; import dropdownCaret from '../language-selector/dropdown-caret.svg';
import scratchLogo from './scratch-logo.svg'; import scratchLogo from './scratch-logo.svg';
const MenuBarItemTooltip = ({id, place = 'bottom', children}) => ( const MenuBarItemTooltip = ({
children,
className,
id,
place = 'bottom'
}) => (
<ComingSoonTooltip <ComingSoonTooltip
className={styles.comingSoon} className={classNames(styles.comingSoon, className)}
place={place} place={place}
tooltipClassName={styles.comingSoonTooltip} tooltipClassName={styles.comingSoonTooltip}
tooltipId={id} tooltipId={id}
...@@ -38,13 +43,14 @@ const MenuBarItemTooltip = ({id, place = 'bottom', children}) => ( ...@@ -38,13 +43,14 @@ const MenuBarItemTooltip = ({id, place = 'bottom', children}) => (
MenuBarItemTooltip.propTypes = { MenuBarItemTooltip.propTypes = {
children: PropTypes.node, children: PropTypes.node,
className: PropTypes.string,
id: PropTypes.string, id: PropTypes.string,
place: PropTypes.oneOf(['top', 'bottom', 'left', 'right']) place: PropTypes.oneOf(['top', 'bottom', 'left', 'right'])
}; };
const MenuItemTooltip = ({id, children}) => ( const MenuItemTooltip = ({id, children, className}) => (
<ComingSoonTooltip <ComingSoonTooltip
className={styles.comingSoon} className={classNames(styles.comingSoon, className)}
place="right" place="right"
tooltipClassName={styles.comingSoonTooltip} tooltipClassName={styles.comingSoonTooltip}
tooltipId={id} tooltipId={id}
...@@ -55,6 +61,7 @@ const MenuItemTooltip = ({id, children}) => ( ...@@ -55,6 +61,7 @@ const MenuItemTooltip = ({id, children}) => (
MenuItemTooltip.propTypes = { MenuItemTooltip.propTypes = {
children: PropTypes.node, children: PropTypes.node,
className: PropTypes.string,
id: PropTypes.string id: PropTypes.string
}; };
...@@ -115,23 +122,33 @@ const MenuBar = props => ( ...@@ -115,23 +122,33 @@ const MenuBar = props => (
<MenuItemTooltip id="new"> <MenuItemTooltip id="new">
<MenuItem>New</MenuItem> <MenuItem>New</MenuItem>
</MenuItemTooltip> </MenuItemTooltip>
<MenuItemTooltip id="save"> <MenuSection>
<MenuItem>Save now</MenuItem> <MenuItemTooltip id="save">
</MenuItemTooltip> <MenuItem>Save now</MenuItem>
<MenuItemTooltip id="copy"> </MenuItemTooltip>
<MenuItem>Save as a copy</MenuItem> <MenuItemTooltip id="copy">
</MenuItemTooltip> <MenuItem>Save as a copy</MenuItem>
<LoadButton>{(renderFileInput, loadProject) => ( </MenuItemTooltip>
<MenuItem onClick={loadProject}> </MenuSection>
Upload from your computer <MenuSection>
{renderFileInput()} <LoadButton>{(renderFileInput, loadProject, loadProps) => (
</MenuItem> <MenuItem
)}</LoadButton> onClick={loadProject}
<SaveButton>{saveProject => ( {...loadProps}
<MenuItem onClick={saveProject}> >
Download to your computer Upload from your computer
</MenuItem> {renderFileInput()}
)}</SaveButton> </MenuItem>
)}</LoadButton>
<SaveButton>{(saveProject, saveProps) => (
<MenuItem
onClick={saveProject}
{...saveProps}
>
Download to your computer
</MenuItem>
)}</SaveButton>
</MenuSection>
</MenuBarMenu> </MenuBarMenu>
</div> </div>
<div className={classNames(styles.menuBarItem)}> <div className={classNames(styles.menuBarItem)}>
......
...@@ -33,8 +33,7 @@ ...@@ -33,8 +33,7 @@
background-color: $ui-black-transparent; background-color: $ui-black-transparent;
} }
.divider { .menu-section {
margin-top: 10px;
border-top: 1px solid $ui-black-transparent; border-top: 1px solid $ui-black-transparent;
} }
......
...@@ -59,7 +59,27 @@ MenuItem.propTypes = { ...@@ -59,7 +59,27 @@ MenuItem.propTypes = {
onClick: PropTypes.func onClick: PropTypes.func
}; };
const addDividerClassToFirstChild = (child, id) => (
React.cloneElement(child, {
className: classNames(child.className, {
[styles.menuSection]: id === 0
}),
key: id
})
);
const MenuSection = ({children}) => (
<React.Fragment>{
children.map(addDividerClassToFirstChild)
}</React.Fragment>
);
MenuSection.propTypes = {
children: PropTypes.node
};
export { export {
MenuComponent as default, MenuComponent as default,
MenuItem MenuItem,
MenuSection
}; };
...@@ -61,7 +61,16 @@ class LoadButton extends React.Component { ...@@ -61,7 +61,16 @@ class LoadButton extends React.Component {
} }
render () { render () {
if (this.state.loadingError) throw new Error(`Failed to load project: ${this.state.errorMessage}`); if (this.state.loadingError) throw new Error(`Failed to load project: ${this.state.errorMessage}`);
return this.props.children(this.renderFileInput, this.handleClick); const {
/* eslint-disable no-unused-vars */
children,
closeLoadingState,
openLoadingState,
vm,
/* eslint-enable no-unused-vars */
...props
} = this.props;
return this.props.children(this.renderFileInput, this.handleClick, props);
} }
} }
......
...@@ -30,7 +30,14 @@ class SaveButton extends React.Component { ...@@ -30,7 +30,14 @@ class SaveButton extends React.Component {
}); });
} }
render () { render () {
return this.props.children(this.saveProject); const {
/* eslint-disable no-unused-vars */
children,
vm,
/* eslint-enable no-unused-vars */
...props
} = this.props;
return this.props.children(this.saveProject, props);
} }
} }
......
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