diff --git a/interface/src/project/DashboardDevicesDialog.tsx b/interface/src/project/DashboardDevicesDialog.tsx index 91bd958cb..64226c880 100644 --- a/interface/src/project/DashboardDevicesDialog.tsx +++ b/interface/src/project/DashboardDevicesDialog.tsx @@ -17,7 +17,6 @@ import { } from '@mui/material'; import { useState, useEffect } from 'react'; -import { formatValueNoUOM } from './deviceValue'; import { DeviceValueUOM, DeviceValueUOM_s } from './types'; import type { DeviceValue } from './types'; import type Schema from 'async-validator'; @@ -48,11 +47,6 @@ const DashboarDevicesDialog = ({ open, onClose, onSave, selectedItem, validator if (open) { setFieldErrors(undefined); setEditItem(selectedItem); - // format value and convert to string - setEditItem({ - ...selectedItem, - v: formatValueNoUOM(selectedItem.v, selectedItem.u) - }); } }, [open, selectedItem]); @@ -90,13 +84,20 @@ const DashboarDevicesDialog = ({ open, onClose, onSave, selectedItem, validator if (dv.l) { return '[ ' + dv.l.join(' | ') + ' ]'; } + + let helperText = '<'; if (dv.u !== DeviceValueUOM.NONE) { + helperText += 'n'; if (dv.m && dv.x) { - return ''; + helperText += ' between ' + dv.m + ' and ' + dv.x; } - return ''; + if (dv.s) { + helperText += ' , step ' + dv.s; + } + } else { + helperText += 'text'; } - return ''; + return helperText + '>'; }; return ( @@ -108,7 +109,7 @@ const DashboarDevicesDialog = ({ open, onClose, onSave, selectedItem, validator - {editItem.l && ( + {editItem.l ? ( ))} - )} - {!editItem.l && ( + ) : editItem.u !== DeviceValueUOM.NONE ? ( + {setUom(editItem.u)} + }} + /> + ) : ( {setUom(editItem.u)} - }} /> )} diff --git a/interface/src/project/deviceValue.ts b/interface/src/project/deviceValue.ts index 9b1b7ffab..ff7900340 100644 --- a/interface/src/project/deviceValue.ts +++ b/interface/src/project/deviceValue.ts @@ -54,23 +54,3 @@ export function formatValue(LL: TranslationFunctions, value: any, uom: number) { return new Intl.NumberFormat().format(value) + ' ' + DeviceValueUOM_s[uom]; } } - -export const formatValueNoUOM = (value: any, uom: number) => { - if (value === undefined) { - return ''; - } - - switch (uom) { - case DeviceValueUOM.NONE: - if (typeof value === 'number') { - return Number(value); - } - return value; - case DeviceValueUOM.DEGREES: - case DeviceValueUOM.DEGREES_R: - case DeviceValueUOM.FAHRENHEIT: - return Number(value).toFixed(1); - default: - return value; - } -}; diff --git a/interface/src/project/types.ts b/interface/src/project/types.ts index 954014dac..ba668a4e5 100644 --- a/interface/src/project/types.ts +++ b/interface/src/project/types.ts @@ -123,7 +123,7 @@ export interface Devices { export interface DeviceValue { id: string; // index, contains mask+name - v: any; // value, in any format + v: any; // value, Number or String u: number; // uom c?: string; // command, optional l?: string[]; // list, optional diff --git a/interface/src/project/validators.ts b/interface/src/project/validators.ts index 1bae952ca..5cc019ecb 100644 --- a/interface/src/project/validators.ts +++ b/interface/src/project/validators.ts @@ -168,13 +168,11 @@ export const deviceValueItemValidation = (dv: DeviceValue) => v: [ { required: true, message: 'Value is required' }, { - validator(rule: InternalRuleItem, value: string, callback: (error?: string) => void) { - if (dv.u !== DeviceValueUOM.NONE && isNaN(+value)) { - callback('Not a valid number'); + validator(rule: InternalRuleItem, value: any, callback: (error?: string) => void) { + if (typeof value === 'number' && dv.m && dv.x && (value < dv.m || value > dv.x)) { + callback('Value out of range'); } - (dv.m && Number(value) < dv.m) || (dv.x && Number(value) > dv.x) - ? callback('Value out of range') - : callback(); + callback(); } } ]