4
0
forked from crowetic/commerce
commerce/ui/Button/Button.tsx

55 lines
1.2 KiB
TypeScript
Raw Normal View History

2020-09-23 15:19:36 -03:00
import cn from "classnames";
import React, { ButtonHTMLAttributes } from "react";
import s from "./Button.module.css";
interface Props extends ButtonHTMLAttributes<HTMLButtonElement> {
href?: string;
className?: string;
variant?: "filled" | "outlined" | "flat" | "none";
active?: boolean;
type?: "submit" | "reset" | "button";
}
export default class Button extends React.Component<Props> {
public render() {
const {
className,
variant = "filled",
children,
disabled = false,
href,
active,
...rest
} = this.props;
let Component: React.ComponentType<
2020-09-23 17:28:12 -03:00
React.AnchorHTMLAttributes<
HTMLAnchorElement | HTMLButtonElement | HTMLDivElement
> &
2020-09-23 15:19:36 -03:00
React.ClassAttributes<HTMLButtonElement | HTMLAnchorElement>
2020-09-23 16:51:06 -03:00
> = "a" as any;
// Catch for buttons / span / stc.
2020-09-23 15:19:36 -03:00
const rootClassName = cn(
s.root,
{
[s.filled]: variant === "filled",
},
className
);
return (
<Component
className={rootClassName}
href={href}
aria-pressed={active}
data-variant={variant}
{...rest}
>
{children}
</Component>
);
}
}