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 { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@components/common/ui/Select.js'; import { _ } from '@evershop/evershop/lib/locale/translate/_'; import React from 'react'; import { useFormContext, RegisterOptions, FieldPath, FieldValues, Controller } from 'react-hook-form'; interface SelectOption { value: string | number; label: string; disabled?: boolean; } interface SelectFieldProps { name: FieldPath; label?: string; error?: string; helperText?: string; required?: boolean; validation?: RegisterOptions; options: SelectOption[]; placeholder?: string; wrapperClassName?: string; className?: string; disabled?: boolean; defaultValue?: string | number; id?: string; onChange?: (value: string | number) => void; } export function SelectField({ name, label, error, helperText, required, validation, options, placeholder, wrapperClassName, className, defaultValue, disabled, id, onChange: onChangeCallback }: SelectFieldProps) { const { control, formState: { errors } } = useFormContext(); const fieldError = getNestedError(name, errors, error); const fieldId = id || `field-${name}`; const hasDefaultValue = defaultValue !== undefined && defaultValue !== null && defaultValue !== ''; const validationRules = { ...validation, ...(required && !validation?.required && { required: { value: true, message: _('${field} is required', { field: label || name }) }, validate: { ...validation?.validate, notEmpty: (value) => { if ( required && (value === '' || value === null || value === undefined) ) { return _('${field} is required', { field: label || name }); } return true; } } }) }; return ( {label && ( <> {label} {required && *} {helperText && } )} ( )} /> {fieldError && {fieldError}} ); }