import { Tooltip } from '@components/common/form/Tooltip.js'; import { getNestedError } from '@components/common/form/utils/getNestedError.js'; import { Field, FieldError, FieldLabel } from '@components/common/ui/Field.js'; import { Switch } from '@components/common/ui/Switch.js'; import { _ } from '@evershop/evershop/lib/locale/translate/_'; import React from 'react'; import { Controller, FieldPath, FieldValues, RegisterOptions, useFormContext } from 'react-hook-form'; interface ToggleFieldProps { name: FieldPath; label?: string; error?: string; helperText?: string; required?: boolean; validation?: RegisterOptions; wrapperClassName?: string; disabled?: boolean; defaultValue?: boolean | 0 | 1; trueValue?: boolean | 1; falseValue?: boolean | 0; trueLabel?: string; falseLabel?: string; size?: 'sm' | 'default'; onChange?: (value: boolean | 0 | 1) => void; } export function ToggleField({ name, label, error, helperText, required, validation, wrapperClassName, disabled = false, defaultValue = false, trueValue = true, falseValue = false, trueLabel = 'Yes', falseLabel = 'No', size = 'default', onChange }: ToggleFieldProps) { const { control, formState: { errors } } = useFormContext(); const fieldError = getNestedError(name, errors, error); const fieldId = `field-${name}`; const validationRules = { ...validation, ...(required && !validation?.required && { required: _('${field} is required', { field: label || name }) }) }; return ( {label && ( {label} {required && *} {helperText && } )} { const isActive = field.value === trueValue; return (
{ const newValue = checked ? trueValue : falseValue; field.onChange(newValue); onChange?.(newValue); }} disabled={disabled} aria-invalid={fieldError ? 'true' : 'false'} aria-describedby={fieldError ? `${fieldId}-error` : undefined} /> {isActive ? trueLabel : falseLabel}
); }} /> {fieldError && ( {fieldError} )}
); }