preact-material-components
Version:
preact wrapper for "Material Components for the web"
49 lines (44 loc) • 1.22 kB
JSX
import {h} from 'preact';
import MaterialComponent from '../MaterialComponent';
import Icon from '../Icon/';
import generateThemeClass from '../themeUtils/generateThemeClass';
/**
* @prop dense = false
* @prop raised = false
* @prop compact = false
* @prop disabled = false
* @prop unelevated = false
* @prop stroked = false
*/
class Button extends MaterialComponent {
constructor() {
super();
this.componentName = 'button';
this._mdcProps = ['dense', 'raised', 'unelevated', 'outlined'];
this.themeProps = ['primary', 'secondary'];
}
componentDidMount() {
super.attachRipple();
}
materialDom(props) {
const ButtonElement = props.href ? 'a' : 'button';
let className = '';
this.themeProps.forEach(themeProp => {
if (themeProp in props && props[themeProp] !== false)
className += generateThemeClass(themeProp) + ' ';
});
return (
<ButtonElement ref={this.setControlRef} {...props} className={className}>
{this.props.children}
</ButtonElement>
);
}
}
class ButtonIcon extends Icon {
constructor() {
super();
this.componentName = 'button__icon';
}
}
Button.Icon = ButtonIcon;
export default Button;