import React from 'react'; import { Controller, useForm } from 'react-hook-form'; import { useTranslation } from 'react-i18next'; import { useDispatch, useSelector } from 'react-redux'; import i18next from 'i18next'; import { clearDnsCache } from '../../../../actions/dnsConfig'; import { CACHE_CONFIG_FIELDS, UINT32_RANGE } from '../../../../helpers/constants'; import { replaceZeroWithEmptyString } from '../../../../helpers/helpers'; import { RootState } from '../../../../initialState'; import { Checkbox } from '../../../ui/Controls/Checkbox'; const INPUTS_FIELDS = [ { name: CACHE_CONFIG_FIELDS.cache_size, title: i18next.t('cache_size'), description: i18next.t('cache_size_desc'), placeholder: i18next.t('enter_cache_size'), }, { name: CACHE_CONFIG_FIELDS.cache_ttl_min, title: i18next.t('cache_ttl_min_override'), description: i18next.t('cache_ttl_min_override_desc'), placeholder: i18next.t('enter_cache_ttl_min_override'), }, { name: CACHE_CONFIG_FIELDS.cache_ttl_max, title: i18next.t('cache_ttl_max_override'), description: i18next.t('cache_ttl_max_override_desc'), placeholder: i18next.t('enter_cache_ttl_max_override'), }, ]; type FormData = { cache_size: number; cache_ttl_min: number; cache_ttl_max: number; cache_optimistic: boolean; }; type CacheFormProps = { initialValues?: Partial; onSubmit: (data: FormData) => void; }; const Form = ({ initialValues, onSubmit }: CacheFormProps) => { const { t } = useTranslation(); const dispatch = useDispatch(); const { processingSetConfig } = useSelector((state: RootState) => state.dnsConfig); const { register, handleSubmit, watch, control, formState: { isSubmitting, isDirty }, } = useForm({ mode: 'onBlur', defaultValues: { cache_size: initialValues?.cache_size || 0, cache_ttl_min: initialValues?.cache_ttl_min || 0, cache_ttl_max: initialValues?.cache_ttl_max || 0, cache_optimistic: initialValues?.cache_optimistic || false, }, }); const cache_ttl_min = watch('cache_ttl_min'); const cache_ttl_max = watch('cache_ttl_max'); const minExceedsMax = cache_ttl_min > 0 && cache_ttl_max > 0 && cache_ttl_min > cache_ttl_max; const handleClearCache = () => { if (window.confirm(t('confirm_dns_cache_clear'))) { dispatch(clearDnsCache()); } }; return (
{INPUTS_FIELDS.map(({ name, title, description, placeholder }) => (
{description}
replaceZeroWithEmptyString(value), })} />
))} {minExceedsMax && {t('ttl_cache_validation')}}
( )} />
); }; export default Form;