diff --git a/ui/src/components/button/index.js b/ui/src/components/button/index.js index 1f73fa77..9946c935 100644 --- a/ui/src/components/button/index.js +++ b/ui/src/components/button/index.js @@ -4,6 +4,7 @@ const isString = require('lodash.isstring'); const match = require('../../shared/match'); const React = require('react'); const Styled = require('styled-components'); +const ReactRouter = require('react-router-dom'); const { base, @@ -23,6 +24,10 @@ const { css } = Styled; +const { + Link +} = ReactRouter; + const background = match({ secondary: base.white, disabled: inactive.default @@ -95,7 +100,7 @@ const style = css` border: solid ${remcalc(1)} ${border}; box-shadow: ${boxes.bottomShaddow}; - + &:focus { outline: 0; text-decoration: none; @@ -128,9 +133,9 @@ const style = css` const StyledButton = styled.button` min-width: ${remcalc(120)}; ${style} - + // Need to use HTML element selector, as adjecent buttons may have - // different class names if they are primary/secondary/disabled + // different class names if they are primary/secondary/disabled & + button { margin-left: 20px; } @@ -141,6 +146,10 @@ const StyledAnchor = styled.a` ${style} `; +const StyledLink = styled(Link)` + display: inline-block !important; + ${style} +`; const Button = (props) => { // support FormattedMessage @@ -152,15 +161,27 @@ const Button = (props) => { ); } - return props.href ? ( - - ) : ( - + const { + href = '', + rr = false + } = props; + + const Views = [ + () => !href ? StyledButton : null, + () => !rr ? StyledAnchor : null, + () => StyledLink + ]; + + const View = Views.reduce((sel, view) => sel ? sel : view(), null); + + return ( + ); }; Button.propTypes = { - href: React.PropTypes.string + href: React.PropTypes.string, + rr: React.PropTypes.bool }; module.exports = Button;