mirror of
https://github.com/fleetdm/fleet
synced 2026-05-23 00:49:03 +00:00
57 lines
1.1 KiB
TypeScript
57 lines
1.1 KiB
TypeScript
import * as React from 'react';
|
|
const classnames = require('classnames');
|
|
|
|
const baseClass = 'button';
|
|
|
|
interface IButtonProps {
|
|
className: string;
|
|
disabled: boolean;
|
|
onClick: (evt: React.MouseEvent<HTMLButtonElement>) => boolean;
|
|
text: string;
|
|
type: string;
|
|
variant: string;
|
|
}
|
|
|
|
interface IButtonState {}
|
|
|
|
class Button extends React.Component<IButtonProps, IButtonState> {
|
|
static defaultProps = {
|
|
variant: 'default',
|
|
};
|
|
|
|
handleClick = (evt: React.MouseEvent<HTMLButtonElement>) => {
|
|
const { disabled, onClick } = this.props;
|
|
|
|
if (disabled) {
|
|
return false;
|
|
}
|
|
|
|
if (onClick) {
|
|
onClick(evt);
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
render () {
|
|
const { handleClick } = this;
|
|
const { className, disabled, text, type, variant } = this.props;
|
|
const fullClassName = classnames(`${baseClass}--${variant}`, className, {
|
|
[baseClass]: variant !== 'unstyled',
|
|
[`${baseClass}--disabled`]: disabled,
|
|
});
|
|
|
|
return (
|
|
<button
|
|
className={fullClassName}
|
|
disabled={disabled}
|
|
onClick={handleClick}
|
|
type={type}
|
|
>
|
|
{text}
|
|
</button>
|
|
);
|
|
}
|
|
}
|
|
|
|
export default Button;
|