chore(ui-components): minor adjustments in Button component (#45480)

This commit is contained in:
Huyen Nguyen
2022-03-23 15:23:26 +07:00
committed by GitHub
parent f975837442
commit 06a1aa39b2
4 changed files with 42 additions and 20 deletions

View File

@ -34,7 +34,8 @@
"import/named": 2, "import/named": 2,
"import/no-named-as-default": 0, "import/no-named-as-default": 0,
"import/no-named-as-default-member": 0, "import/no-named-as-default-member": 0,
"import/order": 2 "import/order": 2,
"react/prop-types": "off"
}, },
"overrides": [ "overrides": [
{ {

View File

@ -5,7 +5,20 @@ import { Button, ButtonProps } from '.';
const story = { const story = {
title: 'Example/Button', title: 'Example/Button',
component: Button component: Button,
parameters: {
controls: {
include: ['children', 'variant', 'size']
}
},
argTypes: {
variant: {
options: ['primary', 'danger']
},
size: {
options: ['small', 'medium', 'large']
}
}
}; };
const Template: Story<ButtonProps> = args => { const Template: Story<ButtonProps> = args => {

View File

@ -45,21 +45,28 @@ const computeClassNames = ({
return classNames.join(' '); return classNames.join(' ');
}; };
export const Button = ({ export const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(
(
{
variant = 'primary', variant = 'primary',
size = 'medium', size = 'medium',
type = 'button', type = 'button',
onClick, onClick,
children children
}: ButtonProps) => { },
ref
) => {
const classes = useMemo( const classes = useMemo(
() => computeClassNames({ size, variant }), () => computeClassNames({ size, variant }),
[size, variant] [size, variant]
); );
return ( return (
<button className={classes} type={type} onClick={onClick}> <button ref={ref} className={classes} type={type} onClick={onClick}>
{children} {children}
</button> </button>
); );
}; }
);
Button.displayName = 'Button';

View File

@ -4,7 +4,8 @@ export type ButtonVariant = 'primary' | 'danger';
export type ButtonSize = 'small' | 'medium' | 'large'; export type ButtonSize = 'small' | 'medium' | 'large';
export interface ButtonProps extends React.HTMLAttributes<HTMLButtonElement> { export interface ButtonProps
extends React.ButtonHTMLAttributes<HTMLButtonElement> {
children: React.ReactNode; children: React.ReactNode;
variant?: ButtonVariant; variant?: ButtonVariant;
size?: ButtonSize; size?: ButtonSize;