import React, { useState, useEffect } from "react"; import * as Yup from "yup"; import { Formik, Form, Field } from "formik"; import { toast } from "react-toastify"; import { makeStyles } from "@material-ui/core/styles"; import { green } from "@material-ui/core/colors"; import Button from "@material-ui/core/Button"; import TextField from "@material-ui/core/TextField"; import Dialog from "@material-ui/core/Dialog"; import DialogActions from "@material-ui/core/DialogActions"; import DialogContent from "@material-ui/core/DialogContent"; import DialogTitle from "@material-ui/core/DialogTitle"; import CircularProgress from "@material-ui/core/CircularProgress"; import Select from "@material-ui/core/Select"; import InputLabel from "@material-ui/core/InputLabel"; import MenuItem from "@material-ui/core/MenuItem"; import FormControl from "@material-ui/core/FormControl"; // import { i18n } from "../../translate/i18n"; import api from "../../services/api"; const useStyles = makeStyles(theme => ({ root: { display: "flex", flexWrap: "wrap", }, textField: { // marginLeft: theme.spacing(1), marginRight: theme.spacing(1), // width: "25ch", flex: 1, }, btnWrapper: { // margin: theme.spacing(1), position: "relative", }, buttonProgress: { color: green[500], position: "absolute", top: "50%", left: "50%", marginTop: -12, marginLeft: -12, }, formControl: { margin: theme.spacing(1), minWidth: 120, }, })); const UserSchema = Yup.object().shape({ name: Yup.string() .min(2, "Too Short!") .max(50, "Too Long!") .required("Required"), password: Yup.string().min(5, "Too Short!").max(50, "Too Long!"), email: Yup.string().email("Invalid email").required("Required"), }); const UserModal = ({ open, onClose, userId }) => { const classes = useStyles(); const initialState = { name: "", email: "", password: "", profile: "user", }; const [user, setUser] = useState(initialState); useEffect(() => { const fetchUser = async () => { if (!userId) return; try { const { data } = await api.get(`/users/${userId}`); setUser(prevState => { return { ...prevState, ...data }; }); } catch (err) { console.log(err); if (err.response && err.response.data && err.response.data.error) { toast.error(err.response.data.error); } } }; fetchUser(); }, [userId, open]); const handleClose = () => { onClose(); setUser(initialState); }; const handleSaveUser = async values => { try { if (userId) { await api.put(`/users/${userId}`, values); } else { await api.post("/users", values); } toast.success("Success!"); } catch (err) { console.log(err); if (err.response && err.response.data && err.response.data.error) { toast.error(err.response.data.error); } } handleClose(); }; return (