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}
onFileChange(e, f.field_name)} multiple />
{_data[f.field_name] !== undefined && _data[f.field_name].length !== 0 ?
{_data[f.field_name] === undefined ? : _data[f.field_name].map((tile) => ( {tile} { // setSelectedPhoto(tile); setOpen(true); } } /> ))}
setOpen(false)} > Photos logo
{_data[f.field_name].length > 0 ? _data[f.field_name].map((value) => ( logo setSelectedPhoto(value)} /> )) : }
: }
; } 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);