import React, { useCallback } from 'react'; import { shallowEqual, useSelector } from 'react-redux'; import { Field, reduxForm } from 'redux-form'; import { useTranslation } from 'react-i18next'; import { renderInputField, toNumber } from '../../../helpers/form'; import { FORM_NAME, UINT32_RANGE } from '../../../helpers/constants'; import { validateIpv4, validateRequiredValue, validateIpv4RangeEnd, validateGatewaySubnetMask, validateIpForGatewaySubnetMask, validateNotInRange, } from '../../../helpers/validators'; import { RootState } from '../../../initialState'; interface FormDHCPv4Props { handleSubmit: (...args: unknown[]) => string; submitting: boolean; initialValues: { v4?: any }; processingConfig?: boolean; change: (field: string, value: any) => void; reset: () => void; ipv4placeholders?: { gateway_ip: string; subnet_mask: string; range_start: string; range_end: string; lease_duration: string; }; } const FormDHCPv4 = ({ handleSubmit, submitting, processingConfig, ipv4placeholders }: FormDHCPv4Props) => { const { t } = useTranslation(); const dhcp = useSelector((state: RootState) => state.form[FORM_NAME.DHCPv4], shallowEqual); const interfaces = useSelector((state: RootState) => state.form[FORM_NAME.DHCP_INTERFACES], shallowEqual); const interface_name = interfaces?.values?.interface_name; const isInterfaceIncludesIpv4 = useSelector( (state: RootState) => !!state.dhcp?.interfaces?.[interface_name]?.ipv4_addresses, ); const isEmptyConfig = !Object.values(dhcp?.values?.v4 ?? {}).some(Boolean); const invalid = dhcp?.syncErrors || interfaces?.syncErrors || !isInterfaceIncludesIpv4 || isEmptyConfig || submitting || processingConfig; const validateRequired = useCallback( (value) => { if (isEmptyConfig) { return undefined; } return validateRequiredValue(value); }, [isEmptyConfig], ); return (
); }; export default reduxForm< Record, Omit >({ form: FORM_NAME.DHCPv4, })(FormDHCPv4);