Sha256: 4f8a8558ceafaa19a599a1490c819f5e4237404f5c6982cd5bf8d4eaf2175a2b
Contents?: true
Size: 1.75 KB
Versions: 24
Compression:
Stored size: 1.75 KB
Contents
import { useState, useEffect } from 'react'; import { useSelector } from 'react-redux'; import { selectTemplateInputs, selectAdvancedTemplateInputs, } from './JobWizardSelectors'; import { isPositiveNumber, isValidDate } from './steps/form/FormHelpers'; import './JobWizard.scss'; export const useValidation = ({ advancedValues, templateValues }) => { const [valid, setValid] = useState({}); const templateInputs = useSelector(selectTemplateInputs); const advancedTemplateInputs = useSelector(selectAdvancedTemplateInputs); useEffect(() => { setValid({ hostsAndInputs: true, advanced: true, schedule: true, }); const inputValidation = (inputs, values, setInvalid) => { inputs.forEach(({ name, required, value_type: valueType }) => { const value = values[name]; if (required && !value) { setInvalid(); } if (value && valueType === 'date') { if (!isValidDate(value) && !isValidDate(new Date(value))) { setInvalid(); } } }); }; inputValidation(templateInputs, templateValues, () => setValid(currValid => ({ ...currValid, hostsAndInputs: false })) ); inputValidation(advancedTemplateInputs, advancedValues.templateValues, () => setValid(currValid => ({ ...currValid, advanced: false })) ); [ advancedValues.timeoutToKill, advancedValues.timeToPickup, advancedValues.concurrencyLevel, advancedValues.timeSpan, ].forEach(value => { if (value && !isPositiveNumber(value)) { setValid(currValid => ({ ...currValid, advanced: false })); } }); // eslint-disable-next-line react-hooks/exhaustive-deps }, [advancedValues, templateValues]); return [valid, setValid]; };
Version data entries
24 entries across 24 versions & 1 rubygems