import { useEffect, useState } from 'react'; import CancelIcon from '@mui/icons-material/Cancel'; import RemoveIcon from '@mui/icons-material/RemoveCircleOutline'; import WarningIcon from '@mui/icons-material/Warning'; import { Box, Button, Dialog, DialogActions, DialogContent, DialogTitle, Grid, InputAdornment, MenuItem, TextField, Typography } from '@mui/material'; import { dialogStyle } from 'CustomTheme'; import type Schema from 'async-validator'; import type { ValidateFieldsError } from 'async-validator'; import { ValidatedTextField } from 'components'; import { useI18nContext } from 'i18n/i18n-react'; import { numberValue, updateValue } from 'utils'; import { validate } from 'validators'; import { AnalogType, AnalogTypeNames, DeviceValueUOM_s } from './types'; import type { AnalogSensor } from './types'; interface DashboardSensorsAnalogDialogProps { open: boolean; onClose: () => void; onSave: (as: AnalogSensor) => void; creating: boolean; selectedItem: AnalogSensor; validator: Schema; } const SensorsAnalogDialog = ({ open, onClose, onSave, creating, selectedItem, validator }: DashboardSensorsAnalogDialogProps) => { const { LL } = useI18nContext(); const [fieldErrors, setFieldErrors] = useState(); const [editItem, setEditItem] = useState(selectedItem); const updateFormValue = updateValue(setEditItem); useEffect(() => { if (open) { setFieldErrors(undefined); setEditItem(selectedItem); } }, [open, selectedItem]); const handleClose = (_event, reason: 'backdropClick' | 'escapeKeyDown') => { if (reason !== 'backdropClick') { onClose(); } }; const save = async () => { try { setFieldErrors(undefined); await validate(validator, editItem); onSave(editItem); } catch (error) { setFieldErrors(error as ValidateFieldsError); } }; const remove = () => { editItem.d = true; onSave(editItem); }; return ( {creating ? LL.ADD(1) + ' ' + LL.NEW(0) : LL.EDIT()}  {LL.ANALOG_SENSOR(0)} {creating && ( {LL.WARN_GPIO()} )} {AnalogTypeNames.map((val, i) => ( {val} ))} {((editItem.t >= AnalogType.COUNTER && editItem.t <= AnalogType.RATE) || (editItem.t >= AnalogType.FREQ_0 && editItem.t <= AnalogType.FREQ_2)) && ( {DeviceValueUOM_s.map((val, i) => ( {val} ))} )} {editItem.t === AnalogType.ADC && ( mV ) }, htmlInput: { min: '0', max: '3300', step: '1' } }} /> )} {editItem.t === AnalogType.NTC && ( °C ) }, htmlInput: { min: '-20', max: '20', step: '0.1' } }} /> )} {editItem.t === AnalogType.COUNTER && ( )} {editItem.t === AnalogType.RGB && ( )} {editItem.t >= AnalogType.COUNTER && editItem.t <= AnalogType.RATE && ( )} {editItem.t === AnalogType.DIGITAL_OUT && (editItem.g === 25 || editItem.g === 26) && ( )} {editItem.t === AnalogType.DIGITAL_OUT && editItem.g !== 25 && editItem.g !== 26 && ( <> {LL.OFF()} {LL.ON()} {LL.ACTIVEHIGH()} {LL.ACTIVELOW()} {LL.UNCHANGED()} {LL.ALWAYS()} {LL.OFF()} {LL.ALWAYS()} {LL.ON()} )} {(editItem.t === AnalogType.PWM_0 || editItem.t === AnalogType.PWM_1 || editItem.t === AnalogType.PWM_2) && ( <> Hz ) }, htmlInput: { min: '1', max: '5000', step: '1' } }} /> % ) }, htmlInput: { min: '0', max: '100', step: '0.1' } }} /> )} {editItem.t === AnalogType.PULSE && ( <> {LL.ACTIVEHIGH()} {LL.ACTIVELOW()} s ) }, htmlInput: { min: '0', max: '10000', step: '0.1' } }} /> )} {!creating && ( )} ); }; export default SensorsAnalogDialog;