import { forwardRef } from 'react' import { Button as BS5Button } from 'react-bootstrap' import type { ButtonProps } from '@/shared/components/types/button-props' import classNames from 'classnames' import { useTranslation } from 'react-i18next' import MaterialIcon from '@/shared/components/material-icon' import OLSpinner from '../ol/ol-spinner' const Button = forwardRef( ( { children, className, leadingIcon, isLoading = false, loadingLabel, trailingIcon, variant = 'primary', ...props }, ref ) => { const { t } = useTranslation() const buttonClassName = classNames('d-inline-grid', className, { 'button-loading': isLoading, }) const loadingSpinnerClassName = props.size === 'lg' ? 'loading-spinner-large' : 'loading-spinner-small' const materialIconClassName = props.size === 'lg' ? 'icon-large' : 'icon-small' const leadingIconComponent = leadingIcon && typeof leadingIcon === 'string' ? ( ) : ( leadingIcon ) const trailingIconComponent = trailingIcon && typeof trailingIcon === 'string' ? ( ) : ( trailingIcon ) return ( {isLoading && ( {loadingLabel ?? t('loading')} )} {leadingIconComponent} {children} {trailingIconComponent} ) } ) Button.displayName = 'Button' export default Button