import React, { Component } from "react"; import { CircularProgress, IconButton, List, ListItem, ListItemAvatar, ListItemSecondaryAction, ListItemText, ListSubheader, Paper, Tooltip, Typography, withStyles } from "@material-ui/core"; import { styles } from "./PageLayout.styles"; import { Account } from "../types/Account"; import Mastodon from "megalodon"; import { LinkableAvatar, LinkableIconButton } from "../interfaces/overrides"; import CheckIcon from "@material-ui/icons/Check"; import AccountCircleIcon from "@material-ui/icons/AccountCircle"; import CloseIcon from "@material-ui/icons/Close"; import CheckCircleIcon from "@material-ui/icons/CheckCircle"; import { withSnackbar } from "notistack"; interface IRequestsPageState { viewLoading: boolean; viewLoaded?: boolean; viewErrored?: boolean; requestedAccounts?: [Account]; } class RequestsPage extends Component { client: Mastodon; constructor(props: any) { super(props); this.client = new Mastodon( localStorage.getItem("access_token") as string, localStorage.getItem("baseurl") + "/api/v1" ); this.state = { viewLoading: true }; } componentDidMount() { this.client .get("/follow_requests") .then((resp: any) => { let requestedAccounts: [Account] = resp.data; this.setState({ requestedAccounts, viewLoading: false, viewLoaded: true }); }) .catch((err: Error) => { this.setState({ viewLoading: false, viewErrored: true }); console.error(err.message); }); } handleFollowRequest(acct: Account, type: "authorize" | "reject") { this.client .post(`/follow_requests/${acct.id}/${type}`) .then((resp: any) => { let requestedAccounts = this.state.requestedAccounts; if (requestedAccounts) { requestedAccounts.forEach( (request: Account, index: number) => { if (requestedAccounts && request.id === acct.id) { requestedAccounts.splice(index, 1); } } ); } this.setState({ requestedAccounts }); let verb: string = type; verb === "authorize" ? (verb = "authorized") : (verb = "rejected"); this.props.enqueueSnackbar(`You have ${verb} this request.`); }) .catch((err: Error) => { this.props.enqueueSnackbar( `Couldn't ${type} this request: ${err.name}`, { variant: "error" } ); console.error(err.message); }); } showFollowRequests() { const { classes } = this.props; return (
Follow requests {this.state.requestedAccounts ? this.state.requestedAccounts.map( (request: Account) => { return ( this.handleFollowRequest( request, "authorize" ) } > this.handleFollowRequest( request, "reject" ) } > ); } ) : null}
); } render() { const { classes } = this.props; return (
{this.state.viewLoaded ? (
{this.state.requestedAccounts && this.state.requestedAccounts.length > 0 ? ( this.showFollowRequests() ) : (
You don't have any follow requests.
)}
) : null} {this.state.viewLoading ? (
) : ( )}
); } } export default withStyles(styles)(withSnackbar(RequestsPage));