import { FieldPath, FieldValues, useController, UseControllerProps } from 'react-hook-form'; import { LatLngLiteral } from 'leaflet'; import { isBoolean, isString } from 'lodash'; import { useDefaultProps } from '../../hooks'; import { useLocalization } from '../../localization'; import { LocationPicker, LocationPickerProps } from '../map'; export type RHFLocationPickerProps< TFieldValues extends FieldValues = FieldValues, TName extends FieldPath = FieldPath > = Omit & UseControllerProps & { onChange?: (lanlng: LatLngLiteral) => void; }; const RHFLocationPicker = < TName extends FieldPath, TFieldValues extends FieldValues = Record >( inProps: RHFLocationPickerProps ) => { const { onChange, helperText, label, required, name, control, defaultValue, disabled, rules, shouldUnregister, ...locationPickerProps } = useDefaultProps({ name: 'ReevolveRHFLocationPicker', props: inProps }); const { translate } = useLocalization(); const { field, fieldState: { error } } = useController({ name, control, defaultValue, shouldUnregister, disabled, rules: rules && { ...rules, required: rules?.required === true ? translate('validation.required', { label }) : rules?.required } }); function onChangeHandler(value: LatLngLiteral) { field.onChange(value); onChange?.(value); } return ( ); }; declare module '@mui/material' { interface Components { ReevolveRHFLocationPicker?: { defaultProps?: Partial; }; } } export default RHFLocationPicker;