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