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
)
}