import React, { useCallback, useMemo } from "react"; import { Controller, RegisterOptions, useFormContext } from "react-hook-form"; import { getCheckedClassName } from "../../../util/stringUtil"; export type RadioButtonProps = { value: string; label: string | React.JSX.Element; subLabel?: string; name: string; id: string; labelClassName?: string; cardClassName?: string; icon?: React.JSX.Element; type: RadioType; disabled?: boolean; registerOptions?: RegisterOptions; children?: React.ReactNode; defaultBGColor?: string; }; export type RadioType = "card" | "default"; export default function RadioButton({ value, label, subLabel, name, id, labelClassName, cardClassName, children, disabled = false, registerOptions, defaultBGColor, icon, type, }: RadioButtonProps): React.JSX.Element { const [active, setActive] = React.useState(false); const bgColor = defaultBGColor ? defaultBGColor : "bg-white"; const defaultClassName = "border-akzent-zwei"; const selectedClassName = "border-interactive-primary-default bg-brand-primary-10"; const wrapperBaseClassName = "rounded-lg border cursor-pointer"; const baseClassName = `${wrapperBaseClassName} ${type === "card" ? "form-check form-check-inline" : "text-center py-2"} `; const { control, setValue, trigger, watch } = useFormContext(); // retrieve all hook methods const watchCurrentValue = watch(name); React.useEffect(() => { setActive(watchCurrentValue === value); }, [watchCurrentValue, value]); const registerReturn = useMemo( () => (!disabled ? registerOptions : undefined), [disabled] ); const renderedRadioButton = useCallback( ({ field: { onChange } }) => { return ( ); }, [name, disabled, value, id, active] ); return (
{ if (!disabled) { setValue(name, value, { shouldDirty: true }); await trigger(name); } }} >
{icon}
{active && children}
); }