import React 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 Autocomplete, { createFilterOptions } from '@material-ui/lab/Autocomplete';
import { MButton } from '..';
const filter = createFilterOptions();
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 FieldList(props) {
const classes = useStyles();
const {
fields = [],
updateData = {},
isNew = false,
currentTabName,
onCancel,
onCanCreateNew,
actions = [],
} = props;
const [data, setDataField] = React.useState(updateData != undefined ? updateData : {});
const handleTextString = (e, fieldName) => {
setDataField({ ...data, [fieldName]: e.target.value });
}
const handleTextNumber = (e, fieldName) => {
setDataField({ ...data, [fieldName]: e.target.value });
}
const handleTextMultiline = (e, fieldName) => {
setDataField({ ...data, [fieldName]: e.target.value });
}
const handleDate = (e, fieldName) => {
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';
setDataField({ ...data, [fieldName]: selectedValue, [fieldId]: e.target.value });
}
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 });
}
const handleCancel = () => {
onCancel();
}
const handleCanCreateNew = (data) => {
onCanCreateNew(data);
}
const onChangeValue = (fieldName, value) => {
var fn = fieldName.split('_');
var fieldId = fn[0] + '_' + 'id';
var d = value['name'] != undefined ? value['name'] : value['product_desc']
if (isNew) {
setDataField({ ...data, [fieldName]: d, [fieldId]: value['id'] });
} else {
setDataField({ ...data, [fieldName]: d, [fieldId]: value['id'] });
}
}
return (
{fields.map((f, i) => {
if (f.type == 'text_string') {
return
{f.label}
handleTextString(e, f.fieldName)}
/>
;
}
else if (f.type == 'text_number') {
return
{f.label}
handleTextNumber(e, f.fieldName)}
/>
;
}
else if (f.type == 'text_multiline') {
return
{f.label}
handleTextMultiline(e, f.fieldName)}
/>
;
}
else if (f.type == 'date') {
return
{f.label}
handleDate(e, f.fieldName)}
/>
;
}
else if (f.type == 'dropdown') {
if (f.options != undefined) {
if (f.fieldName == 'priority') {
return
{f.label}
handleDropDownChange(e, f.fieldName)}
id={f.fieldName}
input={}
style={{ width: '100%' }}
>
{f.options.map((d, i) => {
return ;
})}
;
} else {
var fn = f.fieldName.split('_');
var fieldId = fn[0] + '_' + 'id';
if (isNew) {
return
{f.label}
{
if (typeof option === 'string') {
return option;
}
return option[f.fieldName] != undefined ? option[f.fieldName] : option.name != undefined ? option.name : option.product_desc != undefined ? option.product_desc : '';
}}
style={{ width: '100%' }}
size='small'
value={data != undefined ? data[f.fieldName] ? data[f.fieldName] : " " : " "}
filterOptions={(options, params) => {
console.log("Autocomplete", f.canCreate);
if (f.canCreate) {
var newFilter = ['+ Add New']
var filtered = filter(options, params);
return [...newFilter, ...filtered];
} else {
var filtered = filter(options, params);
return filtered;
}
}}
onChange={(event, newValue) => {
if (typeof newValue === 'string') {
console.log('f.fieldName', f.fieldName, " f.canCreate", f.canCreate);
var d = {
"canCreate": f.canCreate,
"fields": f.fields,
"name": f.name,
"fieldName": f.fieldName
}
handleCanCreateNew(d);
} else {
if (newValue != null && newValue.inputValue != '' && newValue.product_desc != "") {
onChangeValue(f.fieldName, newValue);
}
}
}}
renderInput={(params) => }
/>
;
}
else {
return
{f.label}
handleDropDownChange(e, f.fieldName)}
id={f.fieldName}
input={}
style={{ width: '100%' }}
>
{f.options.map((d, i) => {
var name = d[f.fieldName] != undefined ? d[f.fieldName] : d.name;
return ;
})}
;
}
}
}
}
else if (f.type == 'photo_list') {
console.log('photo_list:', data);
return
{f.label}
{data[f.fieldName] != undefined && data[f.fieldName].length != 0 ?
{data[f.fieldName] == undefined ? : data[f.fieldName].map((tile) => (
{
setSelectedPhoto(tile);
setOpen(true);
}
} />
))}
:
}
;
}
else if (f.type == 'list') {
console.log('list', data[f.fieldName]);
return
{f.label}
{partHeaders.map((h, i) => {
return ({h.label});
})}
{data[f.fieldName].length > 0 ? data[f.fieldName].map((row) => (
{partHeaders.map((h, i) => {
return ({row[h.id]});
})}
)) :
}
;
}
else if (f.type == 'time') {
return
{f.label}
handleTime(e, f.fieldName)}
/>
;
}
})}
{/* display actions buttons */}
{actions.length > 0 ?
currentTabName === 'account' ?
{data != undefined ?
actions.map((a) => {
if (a.status === data.status) {
return ;
}
})
:
}
:
{actions.map((a) => {
if (a.status === data.status && currentTabName !== 'account') {
return ;
}
})}
: }
);
}
FieldList.propTypes = {
history: PropTypes.object,
fields: PropTypes.array.isRequired,
updateData: PropTypes.object,
isNew: PropTypes.bool,
currentTabName: PropTypes.string,
onCancel: PropTypes.func,
actions: PropTypes.array,
onCanCreateNew: PropTypes.func
};
export default (FieldList);