2025-05-06 06:45:49 +00:00
|
|
|
import { forwardRef } from 'react'
|
|
|
|
|
import classNames from 'classnames'
|
|
|
|
|
import useThemeClass from '@/utils/hooks/useThemeClass'
|
2025-08-16 21:17:18 +00:00
|
|
|
import { FaCheckCircle } from 'react-icons/fa'
|
2025-11-09 10:30:15 +00:00
|
|
|
import type { CommonProps } from '@/proxy/common'
|
2025-05-06 06:45:49 +00:00
|
|
|
|
|
|
|
|
interface SegmentItemOptionProps extends CommonProps {
|
|
|
|
|
active: boolean
|
|
|
|
|
customCheck?: string | React.ReactNode
|
|
|
|
|
defaultGutter?: boolean
|
|
|
|
|
disabled?: boolean
|
|
|
|
|
hoverable?: boolean
|
|
|
|
|
onSegmentItemClick?: (
|
|
|
|
|
event: React.MouseEvent<HTMLDivElement, MouseEvent>
|
|
|
|
|
) => void
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const SegmentItemOption = forwardRef<HTMLDivElement, SegmentItemOptionProps>(
|
|
|
|
|
(props, ref) => {
|
|
|
|
|
const {
|
|
|
|
|
active,
|
|
|
|
|
children,
|
|
|
|
|
className,
|
|
|
|
|
customCheck,
|
|
|
|
|
defaultGutter = true,
|
|
|
|
|
disabled,
|
|
|
|
|
hoverable,
|
|
|
|
|
onSegmentItemClick,
|
|
|
|
|
} = props
|
|
|
|
|
|
|
|
|
|
const { textTheme, borderTheme, ringTheme } = useThemeClass()
|
|
|
|
|
|
|
|
|
|
return (
|
|
|
|
|
<div
|
|
|
|
|
ref={ref}
|
|
|
|
|
className={classNames(
|
|
|
|
|
'flex',
|
|
|
|
|
!customCheck && 'justify-between',
|
|
|
|
|
'items-center',
|
|
|
|
|
'border',
|
|
|
|
|
'rounded-md ',
|
|
|
|
|
'border-gray-200 dark:border-gray-600',
|
|
|
|
|
defaultGutter && 'py-5 px-4',
|
|
|
|
|
'cursor-pointer',
|
|
|
|
|
'select-none',
|
|
|
|
|
'w-100',
|
|
|
|
|
active && `ring-1 ${ringTheme} ${borderTheme}`,
|
|
|
|
|
hoverable &&
|
|
|
|
|
`hover:ring-1 hover:${ringTheme} hover:${borderTheme}`,
|
|
|
|
|
disabled && 'opacity-50 cursor-not-allowed',
|
|
|
|
|
className
|
|
|
|
|
)}
|
|
|
|
|
onClick={onSegmentItemClick}
|
|
|
|
|
>
|
|
|
|
|
{children}
|
|
|
|
|
{active && !customCheck && (
|
2025-08-16 21:17:18 +00:00
|
|
|
<FaCheckCircle
|
2025-05-06 06:45:49 +00:00
|
|
|
className={classNames(textTheme, 'text-2xl')}
|
|
|
|
|
/>
|
|
|
|
|
)}
|
|
|
|
|
{active && customCheck}
|
|
|
|
|
</div>
|
|
|
|
|
)
|
|
|
|
|
}
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
SegmentItemOption.displayName = 'SegmentItemOption'
|
|
|
|
|
|
|
|
|
|
export default SegmentItemOption
|