import React, { MouseEvent, useMemo } from 'react' import useTheme from '../styles/use-theme' import withDefaults from '../utils/with-defaults' import { getColor } from './styles' import { useButtonDropdown } from './button-dropdown-context' import { getButtonSize } from '../button/styles' import Loading from '../loading' import { NormalTypes } from '../utils/prop-types' interface Props { main?: boolean type?: NormalTypes onClick?: React.MouseEventHandler className?: string } const defaultProps = { main: false, type: 'default' as NormalTypes, onClick: () => {}, className: '', } type NativeAttrs = Omit, keyof Props> export type ButtonDropdownItemProps = Props & typeof defaultProps & NativeAttrs const ButtonDropdownItem: React.FC> = ({ children, onClick, className, main, type: selfType, ...props }) => { const theme = useTheme() const { size, type: parentType, auto, disabled, loading } = useButtonDropdown() const type = main ? parentType : selfType const colors = getColor(theme.palette, type, disabled) const sizes = getButtonSize(size, auto || false) const clickHandler = (event: MouseEvent) => { if (disabled || loading) return onClick && onClick(event) } const cursor = useMemo(() => { if (loading) return 'default' return disabled ? 'not-allowed' : 'pointer' }, [loading, disabled]) return ( ) } const MemoButtonDropdownItem = React.memo(ButtonDropdownItem) export default withDefaults(MemoButtonDropdownItem, defaultProps)