import React, { Component } from "react"; import { withStyles, Typography, Paper, Avatar, Button, TextField, ListItem, ListItemText, ListItemAvatar, List, Grid } from "@material-ui/core"; import { withSnackbar, withSnackbarProps } from "notistack"; import { styles } from "./PageLayout.styles"; import { Account } from "../types/Account"; import Mastodon from "megalodon"; import filedialog from "file-dialog"; import PersonIcon from "@material-ui/icons/Person"; interface IYouProps extends withSnackbarProps { classes: any; } interface IYouState { currentAccount: Account; newDisplayName?: string; newBio?: string; } class You extends Component { client: Mastodon; constructor(props: any) { super(props); this.client = new Mastodon( localStorage.getItem("access_token") as string, (localStorage.getItem("baseurl") as string) + "/api/v1" ); this.state = { currentAccount: this.getAccount() }; } getAccount() { let acct = localStorage.getItem("account"); if (acct) { return JSON.parse(acct); } } updateAvatar() { filedialog({ multiple: false, accept: "image/*" }) .then((images: FileList) => { if (images.length > 0) { this.props.enqueueSnackbar("Updating avatar...", { persist: true, key: "persistAvatar" }); let upload = new FormData(); upload.append("avatar", images[0]); this.client .patch("/accounts/update_credentials", upload) .then((acct: any) => { let currentAccount: Account = acct.data; this.setState({ currentAccount }); localStorage.setItem("account", JSON.stringify(currentAccount)); this.props.closeSnackbar("persistAvatar"); this.props.enqueueSnackbar("Avatar updated successfully."); }) .catch((err: Error) => { this.props.closeSnackbar("persistAvatar"); this.props.enqueueSnackbar( "Couldn't update avatar: " + err.name, { variant: "error" } ); }); } }) .catch((err: Error) => { this.props.enqueueSnackbar("Couldn't update avatar: " + err.name); }); } updateHeader() { filedialog({ multiple: false, accept: "image/*" }) .then((images: FileList) => { if (images.length > 0) { this.props.enqueueSnackbar("Updating header...", { persist: true, key: "persistHeader" }); let upload = new FormData(); upload.append("header", images[0]); this.client .patch("/accounts/update_credentials", upload) .then((acct: any) => { let currentAccount: Account = acct.data; this.setState({ currentAccount }); localStorage.setItem("account", JSON.stringify(currentAccount)); this.props.closeSnackbar("persistHeader"); this.props.enqueueSnackbar("Header updated successfully."); }) .catch((err: Error) => { this.props.closeSnackbar("persistHeader"); this.props.enqueueSnackbar( "Couldn't update header: " + err.name, { variant: "error" } ); }); } }) .catch((err: Error) => { this.props.enqueueSnackbar("Couldn't update header: " + err.name); }); } removeHTMLContent(text: string) { const div = document.createElement("div"); div.innerHTML = text; let innerContent = div.textContent || div.innerText || ""; return innerContent; } changeDisplayName() { this.client .patch("/accounts/update_credentials", { display_name: this.state.newDisplayName ? this.state.newDisplayName : this.state.currentAccount.display_name }) .then((acct: any) => { let currentAccount: Account = acct.data; this.setState({ currentAccount }); localStorage.setItem("account", JSON.stringify(currentAccount)); this.props.closeSnackbar("persistHeader"); this.props.enqueueSnackbar( "Display name updated to " + this.state.newDisplayName ); }) .catch((err: Error) => { console.error(err.name); this.props.closeSnackbar("persistHeader"); this.props.enqueueSnackbar( "Couldn't update display name: " + err.name, { variant: "error" } ); }); } updateDisplayname(name: string) { this.setState({ newDisplayName: name }); } changeBio() { this.client .patch("/accounts/update_credentials", { note: this.state.newBio ? this.state.newBio : this.state.currentAccount.note }) .then((acct: any) => { let currentAccount: Account = acct.data; this.setState({ currentAccount }); localStorage.setItem("account", JSON.stringify(currentAccount)); this.props.closeSnackbar("persistHeader"); this.props.enqueueSnackbar("Bio updated successfully."); }) .catch((err: Error) => { console.error(err.name); this.props.closeSnackbar("persistHeader"); this.props.enqueueSnackbar("Couldn't update bio: " + err.name, { variant: "error" }); }); } updateBio(bio: string) { this.setState({ newBio: bio }); } render() { const { classes } = this.props; return (
Edit your profile

Display Name
this.updateDisplayname(event.target.value) } >

About you
this.updateBio(event.target.value)} >
); } } export default withStyles(styles)(withSnackbar(You));