import React, { useEffect, useRef } from 'react'; import PropTypes from 'prop-types'; import { TextField, Grid, InputBase, Button, NativeSelect, Box, Typography } from '@material-ui/core'; import { withStyles, makeStyles } from '@material-ui/core/styles'; import SaveIcon from '@material-ui/icons/Save'; import CancelIcon from '@material-ui/icons/Cancel'; const BootstrapInput = withStyles((theme) => ({ root: { 'label + &': { marginTop: theme.spacing(3), }, }, input: { borderRadius: 4, position: 'relative', backgroundColor: 'transparent', border: '1px solid #ced4da', fontSize: 16, padding: '10px 26px 10px 12px', transition: theme.transitions.create(['border-color', 'box-shadow']), // Use the system font instead of the default Roboto font. fontFamily: [ '-apple-system', 'BlinkMacSystemFont', '"Segoe UI"', 'Roboto', '"Helvetica Neue"', 'Arial', 'sans-serif', '"Apple Color Emoji"', '"Segoe UI Emoji"', '"Segoe UI Symbol"', ].join(','), '&:focus': { borderRadius: 4, borderColor: '#80bdff', boxShadow: '0 0 0 0.2rem rgba(0,123,255,.25)', }, }, }))(InputBase); const useStyles = makeStyles((theme) => ({ root: { width: '100%', }, paper: { width: '100%', marginBottom: theme.spacing(2), }, table: { minWidth: 750, }, visuallyHidden: { border: 0, clip: 'rect(0 0 0 0)', height: 1, margin: -1, overflow: 'hidden', padding: 0, position: 'absolute', top: 20, width: 1, }, underline: { "&&&:before": { borderBottom: "none" }, "&&:after": { borderBottom: "none" } } })); function FieldEditor(props) { const classes = useStyles(); const { fields = [], currentTabName = "account", isNew = false, buttonColor = 'blue', updateData = {}, onCreate, onUpdate, onInvite, onCancel, onApproved } = props; const [data, setDataField] = React.useState(updateData != undefined ? updateData : {}); const [imgPreview, setImgPreviewPath] = React.useState(null); const handleTextString = (e, fieldName) => { if (isNew) { setDataField({ ...data, [fieldName]: e.target.value }); } else { setDataField({ ...data, [fieldName]: e.target.value }); } } const handleTextNumber = (e, fieldName) => { if (isNew) { setDataField({ ...data, [fieldName]: e.target.value }); } else { setDataField({ ...data, [fieldName]: e.target.value }); } } const handleTextMultiline = (e, fieldName) => { if (isNew) { setDataField({ ...data, [fieldName]: e.target.value }); } else { setDataField({ ...data, [fieldName]: e.target.value }); } } const handleDate = (e, fieldName) => { if (isNew) { setDataField({ ...data, [fieldName]: e.target.value }); } else { setDataField({ ...data, [fieldName]: e.target.value }); } } const handleDropDownChange = (e, fieldName) => { var selectedIndex = e.target.options.selectedIndex; var selectedValue = e.target.options[selectedIndex].getAttribute('name'); var fn = fieldName.split('_'); var fieldId = fn[0] + '_' + 'id'; if (isNew) { setDataField({ ...data, [fieldName]: selectedValue, [fieldId]: e.target.value }); } else { setDataField({ ...data, [fieldName]: selectedValue, [fieldId]: e.target.value }); } } const handleSave = () => { if (isNew) { onCreate(data); } else { onUpdate(data); } } const handleApproved = () => { onApproved(data); } const handleCancel = () => { onCancel(); } const handleInvite = () => { onInvite(data); } const handleImgUpload = (e, fieldName) => { e.preventDefault(); let reader = new FileReader(); let file = e.target.files[0]; reader.onloadend = () => { setImgPreviewPath(reader.result); } reader.readAsDataURL(file); // setDataField({ ...data, [fieldName]: e.target.files[0].name }); } console.log('file upload :', data); return (