import AddIcon from '@mui/icons-material/Add'; import CancelIcon from '@mui/icons-material/Cancel'; import DoneIcon from '@mui/icons-material/Done'; import RemoveIcon from '@mui/icons-material/RemoveCircleOutline'; import { Box, Button, Checkbox, Dialog, DialogActions, DialogContent, DialogTitle, Grid, InputAdornment, MenuItem, TextField } from '@mui/material'; import { useEffect, useState } from 'react'; import { DeviceValueUOM_s, DeviceValueType } from './types'; import type { EntityItem } from './types'; import type Schema from 'async-validator'; import type { ValidateFieldsError } from 'async-validator'; import { dialogStyle } from 'CustomTheme'; import { BlockFormControlLabel, ValidatedTextField } from 'components'; import { useI18nContext } from 'i18n/i18n-react'; import { updateValue } from 'utils'; import { validate } from 'validators'; type SettingsEntitiesDialogProps = { open: boolean; creating: boolean; onClose: () => void; onSave: (ei: EntityItem) => void; selectedItem: EntityItem; validator: Schema; }; const SettingsEntitiesDialog = ({ open, creating, onClose, onSave, selectedItem, validator }: SettingsEntitiesDialogProps) => { const { LL } = useI18nContext(); const [editItem, setEditItem] = useState(selectedItem); const [fieldErrors, setFieldErrors] = useState(); const updateFormValue = updateValue(setEditItem); useEffect(() => { if (open) { setFieldErrors(undefined); setEditItem(selectedItem); // convert to hex strings straight away setEditItem({ ...selectedItem, device_id: selectedItem.device_id.toString(16).toUpperCase(), type_id: selectedItem.type_id.toString(16).toUpperCase() }); } }, [open, selectedItem]); const close = () => { onClose(); }; const save = async () => { try { setFieldErrors(undefined); await validate(validator, editItem); if (typeof editItem.device_id === 'string') { editItem.device_id = parseInt(editItem.device_id, 16); } if (typeof editItem.type_id === 'string') { editItem.type_id = parseInt(editItem.type_id, 16); } onSave(editItem); } catch (errors: any) { setFieldErrors(errors); } }; const remove = () => { editItem.deleted = true; onSave(editItem); }; return ( {creating ? LL.ADD(1) + ' ' + LL.NEW(1) : LL.EDIT()} {LL.ENTITY()} } label={LL.WRITEABLE()} /> 0x }} /> 0x }} /> BOOL INT UINT SHORT USHORT ULONG TIME RAW {editItem.value_type !== DeviceValueType.BOOL && editItem.value_type !== DeviceValueType.STRING && ( <> {DeviceValueUOM_s.map((val, i) => ( {val} ))} )} {editItem.value_type === DeviceValueType.STRING && ( )} {!creating && ( )} ); }; export default SettingsEntitiesDialog;