import React, { Component } from "react"; import { withStyles, ListSubheader, Paper, List, ListItem, ListItemText, CircularProgress, ListItemAvatar, ListItemSecondaryAction, Tooltip, Typography } from "@material-ui/core"; import PersonIcon from "@material-ui/icons/Person"; import ForumIcon from "@material-ui/icons/Forum"; import MailIcon from "@material-ui/icons/Mail"; import { styles } from "./PageLayout.styles"; import Mastodon from "megalodon"; import { Status } from "../types/Status"; import { LinkableIconButton, LinkableAvatar } from "../interfaces/overrides"; interface IMessagesState { posts?: [Status]; viewIsLoading: boolean; viewDidLoad?: boolean; viewDidError?: boolean; viewDidErrorCode?: any; } class MessagesPage 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 = { viewIsLoading: true }; } componentWillMount() { this.client.get("/conversations").then(resp => { let data: any = resp.data; let messages: any = []; data.forEach((message: any) => { if (message.last_status !== null) { messages.push(message.last_status); } }); this.setState({ posts: messages, viewIsLoading: false, viewDidLoad: true }); }); } removeHTMLContent(text: string) { const div = document.createElement("div"); div.innerHTML = text; let innerContent = div.textContent || div.innerText || ""; innerContent = innerContent.slice(0, 100) + "..."; return innerContent; } renderMessage(message: Status) { return ( ); } render() { const { classes } = this.props; return (
{this.state.viewDidLoad ? (
{this.state.posts && this.state.posts.length > 0 ? (
Recent messages {this.state.posts ? this.state.posts.map( (message: Status) => this.renderMessage( message ) ) : null}
) : (
You don't have any messages. Why not interact with the fediverse a bit by sending a message?
)}
) : null} {this.state.viewIsLoading ? (
) : null}
); } } export default withStyles(styles)(MessagesPage);