import React from 'react';
import PropTypes from 'prop-types';
import {
TextField,
Grid,
InputBase,
Button,
NativeSelect,
Box,
Typography,
GridList,
GridListTile,
TableContainer,
Table,
TableHead,
TableRow,
TableBody,
TableCell,
Dialog,
DialogTitle,
DialogContent,
} from '@material-ui/core';
import AddIcon from '@material-ui/icons/Add';
import { withStyles, makeStyles } from '@material-ui/core/styles';
import Autocomplete, { createFilterOptions } from '@material-ui/lab/Autocomplete';
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({
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"
}
},
actionButton: props => ({
backgroundColor: props.primaryColor === undefined ? 'grey' : props.primaryColor,
color: props.actionTextColor === undefined ? 'white' : props.actionTextColor
})
});
function MButton(props) {
const { action, onCallback, buttonStyle } = props;
const handleAction = (e) => {
e.preventDefault();
onCallback(e);
}
return (
);
}
MButton.propTypes = {
history: PropTypes.object,
buttonStyle: PropTypes.any,
action: PropTypes.object.isRequired,
onCallback: PropTypes.func.isRequired
};
function MkForm(props) {
const styles = useStyles(props.styles);
const {
fields = [],
data = {},
onDropdownCreateNew,
actions = [],
partHeaders
} = props;
const [_data, setDataField] = React.useState(data !== undefined ? data : {});
const [open, setOpen] = React.useState(false);
// const [imgCollection, setImageCollection] = React.useState([]);
const [selectedPhoto, setSelectedPhoto] = React.useState("#");
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 handleCanCreateNew = (data) => {
onDropdownCreateNew(data);
}
const onChangeValue = (fieldName, value) => {
setDataField({ ..._data, [fieldName]: value });
}
const onFileChange = (e, f) => {
}
const handleSelectItemDialog = () => {
}
return (
{fields.map((f, i) => {
if (f.type === 'text_string') {
return
{f.label}
handleTextString(e, f.field_name)}
/>
;
}
else if (f.type === 'text_number') {
return
{f.label}
handleTextNumber(e, f.field_name)}
/>
;
}
else if (f.type === 'text_multiline') {
return
{f.label}
handleTextMultiline(e, f.field_name)}
/>
;
}
else if (f.type === 'date') {
return
{f.label}
handleDate(e, f.field_name)}
/>
;
}
else if (f.type === 'dropdown') {
if (f.options !== undefined && f.option_label_field !== undefined) {
if (f.field_name === 'priority') {
return
{f.label}
handleDropDownChange(e, f.field_name)}
id={f.field_name}
input={}
style={{ width: '100%' }}
>
{f.options.map((d, i) => {
return ();
})}
;
} else {
return
{f.label}
{
if (typeof option === 'string') {
return option;
}
return option[f.option_label_field];
}}
style={{ width: '100%' }}
size='small'
value={_data !== undefined ? _data[f.field_name] ? _data[f.field_name] : " " : " "}
filterOptions={(options, params) => {
console.log("Autocomplete", f.can_create);
if (f.can_create) {
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.field_name', f.field_name, " f.can_create", f.can_create);
var d = {
"canCreate": f.can_create,
"fields": f.fields,
"name": f.name,
"fieldName": f.field_name
}
handleCanCreateNew(d);
} else {
if (newValue != null && newValue.inputValue !== '' && newValue.product_desc !== "") {
onChangeValue(f.field_name, newValue[f.option_label_field]);
}
}
}}
renderInput={(params) => }
/>
;
}
}
}
else if (f.type === 'photo_list') {
console.log('photo_list:', _data);
return
{f.label}
{_data[f.field_name] !== undefined && _data[f.field_name].length !== 0 ?
{_data[f.field_name] === undefined ? : _data[f.field_name].map((tile) => (
{
// setSelectedPhoto(tile);
setOpen(true);
}
} />
))}
:
}
;
}
else if (f.type === 'list') {
console.log('list', _data[f.field_name]);
return
{f.label}
{partHeaders.map((h, i) => {
return ({h.label});
})}
{_data[f.field_name].length > 0 ? _data[f.field_name].map((row) => (
{partHeaders.map((h, i) => {
return ({row[h.id]});
})}
)) :
}
;
}
else if (f.type === 'time') {
return
{f.label}
handleTime(e, f.field_name)}
/>
;
}
})}
{/* display actions buttons */}
{actions.length > 0 ?
{actions.map((a) => {
if (a.status === _data.status) {
return a.callback(event, _data)} buttonStyle={styles} />;
}
})}
: }
);
}
MkForm.propTypes = {
history: PropTypes.object,
fields: PropTypes.array.isRequired,
data: PropTypes.object,
isNew: PropTypes.bool,
actions: PropTypes.array,
onDropdownCreateNew: PropTypes.func,
styles: PropTypes.any
};
export default (MkForm);