import React, { useState } from 'react'; import t from '../common/localization'; import { Button, Checkbox, FilledInput, FormControl, FormControlLabel, Grid, IconButton, InputAdornment, InputLabel, makeStyles } from "@material-ui/core"; import CloseIcon from '@material-ui/icons/Close'; import AddIcon from '@material-ui/icons/Add'; import AddAttributeDialog from './AddAttributeDialog'; const useStyles = makeStyles(theme => ({ addButton: { marginTop: theme.spacing(2), marginBottom: theme.spacing(1), }, removeButton: { marginRight: theme.spacing(1.5), }, })); const EditAttributesView = ({ attributes, setAttributes, definitions }) => { const classes = useStyles(); const [addDialogShown, setAddDialogShown] = useState(false); const convertToList = (attributes) => { let booleanList = []; let otherList = []; for (const key in attributes) { const value = attributes[key]; const type = getAttributeType(value); if (type === 'boolean') { booleanList.push({ key, value, type }); } else { otherList.push({ key, value, type }); } } return otherList.concat(booleanList); } const handleAddResult = (definition) => { setAddDialogShown(false); if (definition) { switch(definition.type) { case 'number': updateAttribute(definition.key, 0); break; case 'boolean': updateAttribute(definition.key, false); break; default: updateAttribute(definition.key, ""); break; } } } const updateAttribute = (key, value) => { let updatedAttributes = {...attributes}; updatedAttributes[key] = value; setAttributes(updatedAttributes); }; const deleteAttribute = (key) => { let updatedAttributes = {...attributes}; delete updatedAttributes[key]; setAttributes(updatedAttributes); }; const getAttributeName = (key) => { const definition = definitions[key]; return definition ? definition.name : key; }; const getAttributeType = (value) => { if (typeof value === 'number') { return 'number'; } else if (typeof value === 'boolean') { return 'boolean'; } else { return 'string'; } }; return ( <> {convertToList(attributes).map(({ key, value, type }) => { if (type === 'boolean') { return ( updateAttribute(key, e.target.checked)} /> } label={getAttributeName(key)} /> deleteAttribute(key)}> ); } else { return ( {getAttributeName(key)} updateAttribute(key, e.target.value)} endAdornment={ deleteAttribute(key)}> } /> ); } })} ); } export default EditAttributesView;