import React, { Component } from "react"; import axios from "axios"; import PropTypes from "prop-types"; // TODO: Add a read-only '@' in the left side of the handle input // TODO: Add a cancel button, that takes the user back to their profile page // Material-UI stuff import Button from "@material-ui/core/Button"; import { Link } from 'react-router-dom'; import CircularProgress from "@material-ui/core/CircularProgress"; import Grid from "@material-ui/core/Grid"; import TextField from "@material-ui/core/TextField"; import Typography from "@material-ui/core/Typography"; import withStyles from "@material-ui/core/styles/withStyles"; const styles = { form: { textAlign: "center" }, textField: { marginBottom: 30 }, pageTitle: { // marginTop: 20, marginBottom: 40 }, button: { positon: "relative", marginBottom: 30 }, progress: { position: "absolute" } }; export class edit extends Component { // Runs as soon as the page loads. // Sets the default values of all the textboxes to the data // that is stored in the database for the user. componentDidMount() { axios .get("/getProfileInfo") .then((res) => { this.setState({ firstName: res.data.firstName, lastName: res.data.lastName, email: res.data.email, handle: res.data.handle, bio: res.data.bio }); }) .catch((err) => { console.error(err); if (err.response.status === 403) { alert("You are not logged in"); // TODO: Redirect them, to the profile they are trying to edit // If they are on /itsjimmy/edit, they will be redirected to /itsjimmy this.props.history.push('../'); } }); } // Constructor for the state constructor() { super(); this.state = { firstName: "", lastName: "", email: "", handle: "", bio: "", loading: false, errors: {} }; } // Runs whenever the submit button is clicked. // Updates the database entry of the signed in user with the // data stored in the state. handleSubmit = (event) => { event.preventDefault(); this.setState({ loading: true }); const newProfileData = { firstName: this.state.firstName, lastName: this.state.lastName, email: this.state.email, handle: this.state.handle, bio: this.state.bio }; // Removes all keys from newProfileData that are empty, undefined, or null Object.keys(newProfileData).forEach(key => { if (newProfileData[key] === "" || newProfileData[key] === undefined || newProfileData[key] === null) { delete newProfileData[key]; } }) axios .post("/updateProfileInfo", newProfileData) .then((res) => { console.log(res); this.setState({ loading: false }); // this.props.history.push('/'); // TODO: Need to redirect user to their profile page }) .catch((err) => { console.log(err); this.setState({ errors: err.response.data, loading: false }); }); }; // Updates the state whenever one of the textboxes changes. // The key is the name of the textbox and the value is the // value in the text box. // Also sets errors to null of textboxes that have been edited handleChange = (event) => { this.setState({ [event.target.name]: event.target.value, errors: { [event.target.name]: null } }); }; render() { const { classes } = this.props; const { errors, loading } = this.state; return ( Edit Profile


); } } edit.propTypes = { classes: PropTypes.object.isRequired }; export default withStyles(styles)(edit);