Skip to content
Snippets Groups Projects
Commit 6fbb1a74 authored by Sam Galson's avatar Sam Galson Committed by Jure
Browse files

refactor(ui): refactor Button and PlainButton

parent 6527724c
No related branches found
No related tags found
No related merge requests found
import React from 'react' import React from 'react'
import styled from 'styled-components' import styled from 'styled-components'
const BaseButton = styled.button.attrs({ const BaseStandardButton = styled.button.attrs({
type: 'button', type: 'button',
})` })`
background: #ddd; background: #ddd;
...@@ -25,19 +25,20 @@ const BaseButton = styled.button.attrs({ ...@@ -25,19 +25,20 @@ const BaseButton = styled.button.attrs({
transform: scale(0.8); transform: scale(0.8);
} }
& ::after { &::after {
animation: 1s warning; animation: 1s warning;
opacity: 1; opacity: 1;
} }
` `
const PrimaryButton = BaseButton.extend` const PrimaryStandardButton = BaseStandardButton.extend`
background-color: var(--color-primary); background-color: var(--color-primary);
border: 2px solid transparent; border: 2px solid transparent;
border-bottom: 4px solid var(--color-primary); border-bottom: 4px solid var(--color-primary);
color: white; color: white;
&:hover { &:hover,
&:focus {
background: white; background: white;
border: 2px solid var(--color-primary); border: 2px solid var(--color-primary);
border-bottom: 4px solid var(--color-primary); border-bottom: 4px solid var(--color-primary);
...@@ -46,16 +47,11 @@ const PrimaryButton = BaseButton.extend` ...@@ -46,16 +47,11 @@ const PrimaryButton = BaseButton.extend`
} }
&:focus { &:focus {
background: white;
border: 2px solid var(--color-primary);
border-bottom: 4px solid var(--color-primary);
box-shadow: 0 2px 0 0 var(--color-primary); box-shadow: 0 2px 0 0 var(--color-primary);
color: var(--color-primary);
outline: 1px solid transparent;
} }
` `
const DisabledButton = BaseButton.extend.attrs({ const DisabledStandardButton = BaseStandardButton.extend.attrs({
disabled: true, disabled: true,
})` })`
background: white; background: white;
...@@ -87,14 +83,51 @@ const DisabledButton = BaseButton.extend.attrs({ ...@@ -87,14 +83,51 @@ const DisabledButton = BaseButton.extend.attrs({
} }
` `
const Button = ({ children, disabled, primary, ...props }) => { const plainButtonOverrides = `
if (disabled) { background: none;
return <DisabledButton {...props}>{children}</DisabledButton> border: 0;
border-bottom: 2px solid #777;
font-style: italic;
letter-spacing: 0;
padding: 0;
text-transform: none;
&:hover,
&:focus {
background: transparent;
border: 0;
border-bottom: 2px solid var(--color-primary);
color: var(--color-primary);
}
&:active {
transform: scale(0.99);
}
`
const DisabledPlainButton = DisabledStandardButton.extend`
${plainButtonOverrides};
`
const BasePlainButton = BaseStandardButton.extend`
${plainButtonOverrides};
`
const Button = ({ children, disabled, primary, plain, ...props }) => {
if (!plain && disabled) {
return (
<DisabledStandardButton {...props}>{children}</DisabledStandardButton>
)
} }
if (primary) { if (primary) {
return <PrimaryButton {...props}>{children}</PrimaryButton> return <PrimaryStandardButton {...props}>{children}</PrimaryStandardButton>
}
if (plain && disabled) {
return <DisabledPlainButton {...props}>{children}</DisabledPlainButton>
}
if (plain) {
return <BasePlainButton {...props}>{children}</BasePlainButton>
} }
return <BaseButton {...props}>{children}</BaseButton> return <BaseStandardButton {...props}>{children}</BaseStandardButton>
} }
export default Button export default Button
A button. A standard button.
```js ```js
<Button>Save</Button> <Button>Save</Button>
``` ```
A button can be disabled. A standard button can be disabled.
```js ```js
<Button disabled>Save</Button> <Button disabled>Save</Button>
``` ```
A button can be marked as the "primary" action. A standard button can be marked as the "primary" action.
```js ```js
<Button primary>Save</Button> <Button primary>Save</Button>
``` ```
A button can also be "plain" style.
```js
<Button plain>Plain button</Button>
```
Or be "plain" style and "disabled".
```js
<Button plain disabled>
Plain button
</Button>
```
import React from 'react' import React from 'react'
import classnames from 'classnames'
import Button from '../atoms/Button' import Button from '../atoms/Button'
import classes from './PlainButton.local.scss'
const PlainButton = ({ const PlainButton = ({ className, children, type, disabled, onClick }) => (
className,
children,
type,
disabled,
primary,
onClick,
}) => (
<Button <Button
className={classnames(classes.root, className)} className={className}
disabled={disabled} disabled={disabled}
onClick={onClick} onClick={onClick}
primary={primary} plain
type={type} type={type}
> >
{children} {children}
......
.root.root {
background: none;
border: 0;
border-bottom: 2px solid #777;
font-style: italic;
letter-spacing: 0;
padding: 0;
text-transform: none;
}
.root.root:hover,
.root.root:focus {
background: transparent;
border: 0;
border-bottom: 2px solid var(--color-primary);
color: var(--color-primary);
}
.root.root:active {
transform: scale(0.99);
}
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment