(
(props, ref) => {
const { inputProps, size, readOnly } = useFormField(props, "switch");
const {
children,
className,
description,
hideLabel = false,
loading,
checked: checkedProp,
defaultChecked,
position = "left",
...rest
} = props;
const [_checked, setChecked] = useState(
defaultChecked ?? checkedProp ?? false,
);
if (checkedProp !== undefined && checkedProp !== _checked) {
setChecked(checkedProp);
}
const checked = checkedProp ?? _checked;
return (
{
if (readOnly) {
return;
}
setChecked(event.target.checked);
props.onChange?.(event);
}}
onClick={(event) => {
if (readOnly) {
event.preventDefault();
return;
}
props.onClick?.(event);
}}
className={cl(className, "aksel-switch__input")}
/>
);
},
);
const SwitchIcon = ({
size,
checked,
loading,
}: {
size: SwitchProps["size"];
checked: SwitchProps["checked"];
loading: SwitchProps["loading"];
}) => {
if (loading) {
let baseSize = 16;
if (size === "small") {
baseSize = 12;
}
if (checked) {
baseSize += 2;
}
return (
);
}
if (!checked) {
return null;
}
if (size === "small") {
return (
);
}
return (
);
};
export default Switch;