/** * @file Button * @author fex */ import React from 'react'; import TooltipWrapper, {TooltipObject, Trigger} from './TooltipWrapper'; import {pickEventsProps} from '../utils/helper'; import {ClassNamesFn, themeable} from '../theme'; interface ButtonProps extends React.DOMAttributes { id?: string; className?: string; href?: string; size?: 'xs' | 'sm' | 'md' | 'lg'; type: 'button' | 'reset' | 'submit'; level: string; // 'link' | 'primary' | 'secondary' | 'info' | 'success' | 'warning' | 'danger' | 'light' | 'dark' | 'default'; tooltip?: string | TooltipObject; placement: 'top' | 'right' | 'bottom' | 'left'; tooltipContainer?: any; tooltipTrigger: Trigger | Array; tooltipRootClose: boolean; disabled?: boolean; active?: boolean; block?: boolean; iconOnly?: boolean; disabledTip?: string | TooltipObject; classPrefix: string; classnames: ClassNamesFn; componentClass: React.ReactType; overrideClassName?: boolean; } export class Button extends React.Component { static defaultProps: Pick< ButtonProps, | 'componentClass' | 'level' | 'type' | 'placement' | 'tooltipTrigger' | 'tooltipRootClose' > = { componentClass: 'button', level: 'default', type: 'button', placement: 'top', tooltipTrigger: ['hover', 'focus'], tooltipRootClose: false }; renderButton() { let { level, size, disabled, className, componentClass: Comp, classnames: cx, children, disabledTip, block, type, active, iconOnly, href, overrideClassName, ...rest } = this.props; if (href) { Comp = 'a'; } else if (Comp === 'button' && disabled) { Comp = 'div'; } return ( {children} ); } render() { const { tooltip, placement, tooltipContainer, tooltipTrigger, tooltipRootClose, disabled, disabledTip, classnames: cx } = this.props; return ( {this.renderButton()} ); } } export default themeable(Button);