diff --git a/src/components/ScenarioParameters/components/ScenarioParametersInputs/GenericNumberInput.js b/src/components/ScenarioParameters/components/ScenarioParametersInputs/GenericNumberInput.js index f036eb07d..4cc502558 100644 --- a/src/components/ScenarioParameters/components/ScenarioParametersInputs/GenericNumberInput.js +++ b/src/components/ScenarioParameters/components/ScenarioParametersInputs/GenericNumberInput.js @@ -1,7 +1,7 @@ // Copyright (c) Cosmo Tech. // Licensed under the MIT license. -import React from 'react'; +import React, { useCallback } from 'react'; import { BasicNumberInput } from '@cosmotech/ui'; import PropTypes from 'prop-types'; import { useTranslation } from 'react-i18next'; @@ -24,7 +24,14 @@ function getMaxValue(parameterData) { return parameterData.maxValue; } -export const GenericNumberInput = ({ parameterData, context, parameterValue, setParameterValue, isDirty }) => { +export const GenericNumberInput = ({ + parameterData, + context, + parameterValue, + setParameterValue, + defaultParameterValue, + isDirty, +}) => { const { t } = useTranslation(); const inputProps = { min: getMinValue(parameterData), @@ -40,6 +47,16 @@ export const GenericNumberInput = ({ parameterData, context, parameterValue, set value = NaN; } + // Intercept value setter to prevent setting null, undefined or NaN values and fallback to parameter default value + // instead + const changeValue = useCallback( + (newValue) => { + if (newValue != null && !isNaN(newValue)) setParameterValue(newValue); + else setParameterValue(defaultParameterValue); + }, + [defaultParameterValue, setParameterValue] + ); + return (