import React from 'react' import Link from 'next/link' import { getButtonColor } from '../colors' import BaseIcon from './BaseIcon' import type { ColorButtonKey } from '../interfaces' import { useAppSelector } from '../stores/hooks'; type Props = { label?: string icon?: string iconSize?: string | number href?: string target?: string type?: string color?: ColorButtonKey className?: string iconClassName?: string asAnchor?: boolean small?: boolean outline?: boolean active?: boolean disabled?: boolean roundedFull?: boolean onClick?: (e: React.MouseEvent) => void } export default function BaseButton({ label, icon, iconSize, href, target, type, color = 'white', className = '', iconClassName = '', asAnchor = false, small = false, outline = false, active = false, disabled = false, roundedFull = false, onClick, }: Props) { const corners = useAppSelector((state) => state.style.corners); const componentClass = [ 'inline-flex', 'justify-center', 'items-center', 'whitespace-nowrap', 'focus:outline-none', 'transition-colors', 'focus:ring', 'duration-150', 'border', disabled ? 'cursor-not-allowed' : 'cursor-pointer', roundedFull ? 'rounded-full' : `${corners}`, getButtonColor(color, outline, !disabled, active), className, ] if (!label && icon) { componentClass.push('p-1') } else if (small) { componentClass.push('text-sm', roundedFull ? 'px-3 py-1' : 'p-1') } else { componentClass.push('py-2', roundedFull ? 'px-6' : 'px-3') } if (disabled) { componentClass.push(outline ? 'opacity-50' : 'opacity-70') } const componentClassString = componentClass.join(' ') const componentChildren = ( <> {icon && } {label && {label}} ) if (href && !disabled) { return ( {componentChildren} ) } return React.createElement( asAnchor ? 'a' : 'button', { className: componentClassString, type: type ?? 'button', target, disabled, onClick }, componentChildren ) }