diff --git a/web/app/components/base/switch/index.tsx b/web/app/components/base/switch/index.tsx index 8bf32b1311..48e5c0cd8c 100644 --- a/web/app/components/base/switch/index.tsx +++ b/web/app/components/base/switch/index.tsx @@ -11,59 +11,62 @@ type SwitchProps = { className?: string } -const Switch = ({ onChange, size = 'md', defaultValue = false, disabled = false, className }: SwitchProps) => { - const [enabled, setEnabled] = useState(defaultValue) - useEffect(() => { - setEnabled(defaultValue) - }, [defaultValue]) - const wrapStyle = { - lg: 'h-6 w-11', - l: 'h-5 w-9', - md: 'h-4 w-7', - sm: 'h-3 w-5', - } +const Switch = React.forwardRef( + ({ onChange, size = 'md', defaultValue = false, disabled = false, className }: SwitchProps, + propRef: React.Ref) => { + const [enabled, setEnabled] = useState(defaultValue) + useEffect(() => { + setEnabled(defaultValue) + }, [defaultValue]) + const wrapStyle = { + lg: 'h-6 w-11', + l: 'h-5 w-9', + md: 'h-4 w-7', + sm: 'h-3 w-5', + } - const circleStyle = { - lg: 'h-5 w-5', - l: 'h-4 w-4', - md: 'h-3 w-3', - sm: 'h-2 w-2', - } + const circleStyle = { + lg: 'h-5 w-5', + l: 'h-4 w-4', + md: 'h-3 w-3', + sm: 'h-2 w-2', + } - const translateLeft = { - lg: 'translate-x-5', - l: 'translate-x-4', - md: 'translate-x-3', - sm: 'translate-x-2', - } - return ( - { - if (disabled) - return - setEnabled(checked) - onChange?.(checked) - }} - className={classNames( - wrapStyle[size], - enabled ? 'bg-components-toggle-bg' : 'bg-components-toggle-bg-unchecked', - 'relative inline-flex flex-shrink-0 cursor-pointer rounded-[5px] border-2 border-transparent transition-colors duration-200 ease-in-out', - disabled ? '!opacity-50 !cursor-not-allowed' : '', - className, - )} - > - - ) -} + > +