-
Notifications
You must be signed in to change notification settings - Fork 7
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add button color prop and new error style button #111
Changes from 1 commit
125b7e3
70a3f68
fd8b927
a356661
a8a05c8
6e0b888
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,25 +1,19 @@ | ||
import { ButtonProps as RawButtonProps } from "@material-ui/core"; | ||
import React from "react"; | ||
import { | ||
ExtraProps, | ||
PrimaryMinimalButton, | ||
RoundedButton, | ||
SecondaryMinimalButton, | ||
SquareButton, | ||
StyledButton, | ||
} from "./style"; | ||
|
||
interface SdsProps { | ||
isAllCaps?: boolean; | ||
isRounded?: boolean; | ||
sdsStyle?: "minimal" | "rounded" | "square"; | ||
sdsType?: "primary" | "secondary"; | ||
} | ||
export type ButtonProps = RawButtonProps & SdsProps; | ||
export type ButtonProps = RawButtonProps & ExtraProps; | ||
|
||
const Button = React.forwardRef<HTMLButtonElement, ButtonProps>( | ||
(props: ButtonProps, ref): JSX.Element | null => { | ||
const sdsStyle = props?.sdsStyle; | ||
const sdsType = props?.sdsType; | ||
const { color = "primary", sdsStyle, sdsType } = props; | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. since MUI Button already accepts |
||
|
||
if (!sdsStyle || !sdsType) { | ||
// eslint-disable-next-line no-console | ||
|
@@ -44,7 +38,7 @@ const Button = React.forwardRef<HTMLButtonElement, ButtonProps>( | |
case sdsStyle === "rounded" && sdsType === "primary": | ||
return ( | ||
<RoundedButton | ||
color="primary" | ||
color={color} | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. we pass the |
||
ref={ref} | ||
variant="contained" | ||
{...propsWithDefault} | ||
|
@@ -53,7 +47,7 @@ const Button = React.forwardRef<HTMLButtonElement, ButtonProps>( | |
case sdsStyle === "rounded" && sdsType === "secondary": | ||
return ( | ||
<RoundedButton | ||
color="primary" | ||
color={color} | ||
ref={ref} | ||
variant="outlined" | ||
{...propsWithDefault} | ||
|
@@ -62,7 +56,7 @@ const Button = React.forwardRef<HTMLButtonElement, ButtonProps>( | |
case sdsStyle === "square" && sdsType === "primary": | ||
return ( | ||
<SquareButton | ||
color="primary" | ||
color={color} | ||
ref={ref} | ||
variant="contained" | ||
{...propsWithDefault} | ||
|
@@ -71,7 +65,7 @@ const Button = React.forwardRef<HTMLButtonElement, ButtonProps>( | |
case sdsStyle === "square" && sdsType === "secondary": | ||
return ( | ||
<SquareButton | ||
color="primary" | ||
color={color} | ||
ref={ref} | ||
variant="outlined" | ||
{...propsWithDefault} | ||
|
@@ -80,7 +74,7 @@ const Button = React.forwardRef<HTMLButtonElement, ButtonProps>( | |
case sdsStyle === "minimal" && sdsType === "primary": | ||
return ( | ||
<PrimaryMinimalButton | ||
color="primary" | ||
color={color} | ||
ref={ref} | ||
variant="text" | ||
{...propsWithDefault} | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -8,16 +8,31 @@ import { | |
Props, | ||
} from "../styles"; | ||
|
||
const sdsPropNames = ["isAllCaps", "isRounded", "sdsStyle", "sdsType"]; | ||
export interface ExtraProps { | ||
isAllCaps?: boolean; | ||
isRounded?: boolean; | ||
sdsStyle?: "minimal" | "rounded" | "square"; | ||
sdsType?: "primary" | "secondary"; | ||
color?: "success" | "error" | "warning" | "info"; | ||
} | ||
|
||
// Please keep this in sync with the props used in `ExtraProps` | ||
const doNotForwardProps = [ | ||
"isAllCaps", | ||
"isRounded", | ||
"sdsStyle", | ||
"sdsType", | ||
"color", | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. ok, so I think not forwarding
we did not have color so we did forward it. I'm beginning to think that the code reuse we're trying to achieve here may not be sustainable in some ways. I'll start a comment on the overall PR about that. |
||
]; | ||
|
||
const ButtonBase = styled(Button, { | ||
shouldForwardProp: (prop) => { | ||
return !sdsPropNames.includes(prop.toString()); | ||
return !doNotForwardProps.includes(prop.toString()); | ||
}, | ||
})` | ||
})<ExtraProps>` | ||
box-shadow: none; | ||
${(props) => { | ||
const { variant } = props; | ||
const { variant, color: colorProp } = props; | ||
const colors = getColors(props); | ||
const spacings = getSpaces(props); | ||
|
||
|
@@ -30,13 +45,15 @@ const ButtonBase = styled(Button, { | |
|
||
const padding = variant === "outlined" ? outlinedPadding : containedPadding; | ||
|
||
const color = colors && colors[colorProp]; | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. we pick the color object based on There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. also I haven't fixed the type error here 😂 There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. |
||
|
||
return ` | ||
padding: ${padding}; | ||
min-width: 120px; | ||
height: 34px; | ||
&:hover, &:focus { | ||
color: white; | ||
background-color: ${colors?.primary[500]}; | ||
background-color: ${color[500]}; | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. once we upgrade to MUI v5, which supports different |
||
box-shadow: none; | ||
} | ||
&:focus { | ||
|
@@ -45,7 +62,7 @@ const ButtonBase = styled(Button, { | |
} | ||
&:active { | ||
color: white; | ||
background-color: ${colors?.primary[600]}; | ||
background-color: ${color[600]}; | ||
box-shadow: none; | ||
} | ||
&:disabled { | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
moving this into
style.ts
asExtraProps