diff --git a/react-app/src/components/form/TextFormField.tsx b/react-app/src/components/form/TextFormField.tsx index 73bad2975d..63ae1bdbe2 100644 --- a/react-app/src/components/form/TextFormField.tsx +++ b/react-app/src/components/form/TextFormField.tsx @@ -17,7 +17,7 @@ type TextFormFieldProps = { const TextFormField = (props: TextFormFieldProps) => { const { control, setValue } = useFormContext(); - const { name, label, rules, numeric, isPid, defaultVal, disabled, ...restProps } = props; + const { name, label, rules, numeric, isPid, defaultVal, disabled, onBlur, ...restProps } = props; return ( { if (numeric && parseFloat(event.currentTarget.value)) { setValue(name, parseFloat(event.currentTarget.value)); } - }} - onChange={(event) => { if (isPid) { + setValue(name, event.target.value.replace(/-/g, '')); event.target.value = pidFormatter(parseInt(event.target.value.replace(/-/g, ''))); onChange(event); + } + if (onBlur) onBlur(event); + }} + onChange={(event) => { + if (isPid && (event.target.value === '' || /^[0-9-]*$/.test(event.target.value))) { + onChange(event); return; } else if ( numeric && (event.target.value === '' || /^[0-9]*\.?[0-9]{0,2}$/.test(event.target.value)) ) { onChange(event); - } else if (numeric === undefined) { + } else if (numeric === undefined && isPid === undefined) { onChange(event); return; } diff --git a/react-app/src/utilities/formatters.tsx b/react-app/src/utilities/formatters.tsx index b5f6eed3c4..1187349e62 100644 --- a/react-app/src/utilities/formatters.tsx +++ b/react-app/src/utilities/formatters.tsx @@ -105,7 +105,7 @@ export const zeroPadPID = (pid: number | string): string => { export const pidFormatter = (pid: number | string): string => { if (pid == null) return ''; - return zeroPadPID(pid).match(/\d{3}/g).join('-'); + return zeroPadPID(pid).match(/\d{3}/g).join('-').slice(0, 11); }; export const formatNumber = (num: number) => num.toLocaleString();