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 { InputGroup, InputGroupInput } from '@components/common/ui/InputGroup.js'; import { _ } from '@evershop/evershop/lib/locale/translate/_'; import React from 'react'; import { useFormContext, RegisterOptions, FieldPath, FieldValues, Controller } from 'react-hook-form'; interface DateTimeLocalFieldProps extends Omit, 'name' | 'type'> { name: FieldPath; label?: string; error?: string; helperText?: string; required?: boolean; validation?: RegisterOptions; wrapperClassName?: string; } export function DateTimeLocalField({ name, label, error, wrapperClassName, helperText, required, validation, className, min, max, step, ...props }: DateTimeLocalFieldProps) { const { control, formState: { errors } } = useFormContext(); const fieldError = getNestedError(name, errors, error); const fieldId = `field-${name}`; const { valueAsNumber, valueAsDate, ...cleanValidation } = validation || {}; const validationRules = { ...cleanValidation, ...(required && { required: _('${field} is required', { field: label || name }) }), validate: { ...validation?.validate, minDateTime: (value) => { if (!min || !value) return true; return ( value >= min || _('Date and time must be after ${min}', { min: min.toString() }) ); }, maxDateTime: (value) => { if (!max || !value) return true; return ( value <= max || _('Date and time must be before ${max}', { max: max.toString() }) ); } } }; return ( {label && ( <> {label} {required && *} {helperText && } )} ( )} /> {fieldError && {fieldError}} ); }