taller-web/material-table/src/views/form/FormComponent.js

209 lines
7.2 KiB
JavaScript

import React, { Fragment, useEffect, useState, forwardRef } from 'react';
import axios from 'axios';
import MaterialTable from "material-table";
import AddBox from '@material-ui/icons/AddBox';
import ArrowDownward from '@material-ui/icons/ArrowDownward';
import Check from '@material-ui/icons/Check';
import ChevronLeft from '@material-ui/icons/ChevronLeft';
import ChevronRight from '@material-ui/icons/ChevronRight';
import Clear from '@material-ui/icons/Clear';
import DeleteOutline from '@material-ui/icons/DeleteOutline';
import Edit from '@material-ui/icons/Edit';
import FilterList from '@material-ui/icons/FilterList';
import FirstPage from '@material-ui/icons/FirstPage';
import LastPage from '@material-ui/icons/LastPage';
import Remove from '@material-ui/icons/Remove';
import SaveAlt from '@material-ui/icons/SaveAlt';
import Search from '@material-ui/icons/Search';
import ViewColumn from '@material-ui/icons/ViewColumn';
const tableIcons = {
Add: forwardRef((props, ref) => <AddBox {...props} ref={ref} />),
Check: forwardRef((props, ref) => <Check {...props} ref={ref} />),
Clear: forwardRef((props, ref) => <Clear {...props} ref={ref} />),
Delete: forwardRef((props, ref) => <DeleteOutline {...props} ref={ref} />),
DetailPanel: forwardRef((props, ref) => <ChevronRight {...props} ref={ref} />),
Edit: forwardRef((props, ref) => <Edit {...props} ref={ref} />),
Export: forwardRef((props, ref) => <SaveAlt {...props} ref={ref} />),
Filter: forwardRef((props, ref) => <FilterList {...props} ref={ref} />),
FirstPage: forwardRef((props, ref) => <FirstPage {...props} ref={ref} />),
LastPage: forwardRef((props, ref) => <LastPage {...props} ref={ref} />),
NextPage: forwardRef((props, ref) => <ChevronRight {...props} ref={ref} />),
PreviousPage: forwardRef((props, ref) => <ChevronLeft {...props} ref={ref} />),
ResetSearch: forwardRef((props, ref) => <Clear {...props} ref={ref} />),
Search: forwardRef((props, ref) => <Search {...props} ref={ref} />),
SortArrow: forwardRef((props, ref) => <ArrowDownward {...props} ref={ref} />),
ThirdStateCheck: forwardRef((props, ref) => <Remove {...props} ref={ref} />),
ViewColumn: forwardRef((props, ref) => <ViewColumn {...props} ref={ref} />)
};
const FormComponent = () => {
const divStyle = {
padding: "5px",
margin: "5px",
maxWidth: "100%"
};
const[datos, setDatos] = useState("");
const[people, setPeople] = useState([]);
const handleInputChange = (event) => {
setDatos({
...datos,
[event.target.name] : event.target.value
});
};
const sendDatos = () => {
console.log("Sending datos First Name: " + datos.firstName + " and Last Name " + datos.lastName);
savePerson();
};
async function getPeople() {
try {
const response = await axios.get('http://192.99.144.232:5000/api/personas?grupo=12');
if (response.status === 200) {
setPeople(response.data.persona)
console.log(response.data);
}
}
catch (error) {
console.error(error);
}
}
function savePerson() {
axios.post('http://192.99.144.232:5000/api/personas', {
nombre: datos.firstName,
apellido: datos.lastName,
grupo: 12
})
.then(function (response) {
if (response.status === 200) {
alert("Saved!");
getPeople();
setDatos({
firstName: "",
lastName: ""
});
}
else {
alert("Could not save!");
}
})
.catch(function (error) {
console.log(error);
});
}
useEffect(()=>{
getPeople();
},[]);
const columns = [
{
title: "First Name",
field: "nombre",
options: {
filter: true,
sort: true,
}
},
{
title: "Last Name",
field: "apellido",
options: {
filter: true,
sort: true,
}
}
];
const handleRowClick = (rowData, rowMeta) => {
console.log(rowData.name)
};
const options = {
exportButton: true,
selection: true,
onlyOneRowCanBeSelected: true,
onRowClick: handleRowClick
};
const actions = [
{
icon: 'edit',
tooltip: 'Edit Index',
onClick: (event, rowData) => {
this.onEditClick(null, rowData._id);
}
},
{
icon: 'delete',
tooltip: 'Delete Index',
onClick: (event, rowData) => {
this.onDeleteClick(null, rowData._id);
}
},
];
return (
<Fragment>
<div align="center" style={divStyle}>
<div style={divStyle}>
<h1>Form</h1>
<input type="text" placeholder="First Name" name="firstName" onChange={handleInputChange}></input>
</div>
<div style={divStyle}>
<input type="text" placeholder="Last Name" name="lastName" onChange={handleInputChange}></input>
</div>
<div style={divStyle}>
<button onClick={sendDatos} value="send">Send</button>
</div>
</div>
<MaterialTable
icons={tableIcons}
columns={columns}
data={people}
title="People"
options={{exportButton: true}}
editable={{
onRowAdd: newData =>
new Promise((resolve, reject) => {
setTimeout(() => {
//setData([...data, newData]);
resolve();
}, 1000)
}),
onRowUpdate: (newData, oldData) =>
new Promise((resolve, reject) => {
setTimeout(() => {
//const dataUpdate = [...data];
const index = oldData.tableData.id;
//dataUpdate[index] = newData;
//setData([...dataUpdate]);
resolve();
}, 1000)
}),
onRowDelete: oldData =>
new Promise((resolve, reject) => {
setTimeout(() => {
//const dataDelete = [...data];
const index = oldData.tableData.id;
//dataDelete.splice(index, 1);
//setData([...dataDelete]);
resolve()
}, 1000)
}),
}}
/>
</Fragment>
);
};
export default FormComponent;