diff --git a/src/client/app/components/admin/PreferencesComponent.tsx b/src/client/app/components/admin/PreferencesComponent.tsx index 265244c48..b911aebbd 100644 --- a/src/client/app/components/admin/PreferencesComponent.tsx +++ b/src/client/app/components/admin/PreferencesComponent.tsx @@ -10,9 +10,9 @@ import { Button, Input, FormFeedback } from 'reactstrap'; import { UnsavedWarningComponent } from '../UnsavedWarningComponent'; import { preferencesApi } from '../../redux/api/preferencesApi'; import { - MIN_DATE, MIN_DATE_MOMENT, MAX_DATE, MAX_DATE_MOMENT, MAX_VAL, MIN_VAL, MAX_ERRORS + MIN_DATE, MIN_DATE_MOMENT, MAX_DATE, MAX_DATE_MOMENT, MAX_ERRORS } from '../../redux/selectors/adminSelectors'; -import { PreferenceRequestItem, TrueFalseType } from '../../types/items'; +import { PreferenceRequestItem } from '../../types/items'; import { ChartTypes } from '../../types/redux/graph'; import { LanguageTypes } from '../../types/redux/i18n'; import { AreaUnitType } from '../../utils/getAreaUnitConversion'; @@ -53,16 +53,6 @@ export default function PreferencesComponent() { const frequency = moment.duration(localAdminPref.defaultMeterReadingFrequency); return !frequency.isValid() || frequency.asSeconds() <= 0; }, - minValue: (): boolean => { - const min = Number(localAdminPref.defaultMeterMinimumValue); - const max = Number(localAdminPref.defaultMeterMaximumValue); - return min < MIN_VAL || min > max; - }, - maxValue: (): boolean => { - const min = Number(localAdminPref.defaultMeterMinimumValue); - const max = Number(localAdminPref.defaultMeterMaximumValue); - return max > MAX_VAL || min > max; - }, minDate: (): boolean => { const minMoment = moment(localAdminPref.defaultMeterMinimumDate); const maxMoment = moment(localAdminPref.defaultMeterMaximumDate); @@ -197,40 +187,6 @@ export default function PreferencesComponent() { -
-

- {`${translate('default.meter.minimum.value')}:`} -

- makeLocalChanges('defaultMeterMinimumValue', e.target.value)} - min={MIN_VAL} - max={Number(localAdminPref.defaultMeterMaximumValue)} - maxLength={50} - invalid={invalidFuncs.minValue()} - /> - - - -
-
-

- {`${translate('default.meter.maximum.value')}:`} -

- makeLocalChanges('defaultMeterMaximumValue', e.target.value)} - min={Number(localAdminPref.defaultMeterMinimumValue)} - max={MAX_VAL} - maxLength={50} - invalid={invalidFuncs.maxValue()} - /> - - - -

{`${translate('default.meter.minimum.date')}:`} @@ -294,19 +250,6 @@ export default function PreferencesComponent() {

-
-

- {`${translate('default.meter.disable.checks')}:`} -

- makeLocalChanges('defaultMeterDisableChecks', e.target.value)}> - {Object.keys(TrueFalseType).map(key => { - return (); - })} - -

{translate('site.settings')}

diff --git a/src/client/app/components/meters/CreateMeterModalComponent.tsx b/src/client/app/components/meters/CreateMeterModalComponent.tsx index 1673b05f3..11017ca31 100644 --- a/src/client/app/components/meters/CreateMeterModalComponent.tsx +++ b/src/client/app/components/meters/CreateMeterModalComponent.tsx @@ -29,6 +29,8 @@ import { useTranslate } from '../../redux/componentHooks'; import TimeZoneSelect from '../TimeZoneSelect'; import TooltipHelpComponent from '../TooltipHelpComponent'; import TooltipMarkerComponent from '../TooltipMarkerComponent'; +import { selectUnitDataById } from '../../redux/api/unitsApi'; +import { DisableChecksType } from '../../types/redux/units'; interface CreateMeterModalProps { onCreateMeter?: (meterIdentifier: string) => void; // Define the type of the callback function @@ -52,9 +54,10 @@ export default function CreateMeterModalComponent(props: CreateMeterModalProps): const [showModal, setShowModal] = useState(false); // Handlers for each type of input change - const [meterDetails, setMeterDetails] = useState(defaultValues); + const [meterDetails, setMeterDetails] = useState({...defaultValues, minVal: MIN_VAL, maxVal: MAX_VAL, disableChecks: DisableChecksType.reject_all}); const unitIsSelected = meterDetails.unitId !== -999; const defaultGaphicUnitIsSelected = meterDetails.defaultGraphicUnit !== -999; + const unitsDataById = useAppSelector(selectUnitDataById); const { compatibleGraphicUnits, incompatibleGraphicUnits, compatibleUnits } = useAppSelector(state => // Type assertion due to conflicting GPS Property @@ -92,9 +95,25 @@ export default function CreateMeterModalComponent(props: CreateMeterModalProps): const handleTimeZoneChange = (timeZone: string) => { setMeterDetails({ ...meterDetails, ['timeZone']: timeZone }); }; + + const handleUnitChange = (e: React.ChangeEvent) => { + const selectedUnitId = Number(e.target.value); + const selectedUnit = unitsDataById[selectedUnitId]; + + if (selectedUnit) { + setMeterDetails(details => ({ + ...details, + unitId: selectedUnitId, + minVal: selectedUnit.minVal, + maxVal: selectedUnit.maxVal, + disableChecks: selectedUnit.disableChecks + })); + } + }; + // Reset the state to default values const resetState = () => { - setMeterDetails(defaultValues); + setMeterDetails({...defaultValues, minVal: MIN_VAL, maxVal: MAX_VAL, disableChecks: DisableChecksType.reject_all}); }; const handleClose = () => { @@ -242,9 +261,7 @@ export default function CreateMeterModalComponent(props: CreateMeterModalProps): { - handleNumberChange(e); - }} + onChange={handleUnitChange} invalid={!unitIsSelected}>