import React, { Component } from "react"; import { MuiThemeProvider, CssBaseline, withStyles } from "@material-ui/core"; import { setHyperspaceTheme, darkMode } from "./utilities/themes"; import AppLayout from "./components/AppLayout"; import { styles } from "./App.styles"; import { Route, withRouter } from "react-router-dom"; import AboutPage from "./pages/About"; import Settings from "./pages/Settings"; import { getUserDefaultBool, getUserDefaultTheme } from "./utilities/settings"; import ProfilePage from "./pages/ProfilePage"; import TimelinePage from "./pages/Timeline"; import Conversation from "./pages/Conversation"; import NotificationsPage from "./pages/Notifications"; import AnnouncementsPage from "./pages/Announcements"; import SearchPage from "./pages/Search"; import Composer from "./pages/Compose"; import WelcomePage from "./pages/Welcome"; import MessagesPage from "./pages/Messages"; import RecommendationsPage from "./pages/Recommendations"; import Blocked from "./pages/Blocked"; import You from "./pages/You"; import RequestsPage from "./pages/Requests"; import ActivityPage from "./pages/Activity"; import { withSnackbar } from "notistack"; import { PrivateRoute } from "./interfaces/overrides"; import { userLoggedIn } from "./utilities/accounts"; import { isDarwinApp } from "./utilities/desktop"; let theme = setHyperspaceTheme(getUserDefaultTheme()); interface IAppState { theme: any; showLayout: boolean; avatarURL?: string; } class App extends Component { offline: any; unlisten: any; constructor(props: any) { super(props); this.state = { theme: theme, showLayout: userLoggedIn() && !window.location.hash.includes("#/welcome") }; this.setAvatarURL = this.setAvatarURL.bind(this); } componentWillMount() { let newTheme = darkMode( this.state.theme, getUserDefaultBool("darkModeEnabled") ); this.setState({ theme: newTheme, showLayout: userLoggedIn() && !window.location.hash.includes("#/welcome") }); } componentDidMount() { this.removeBodyBackground(); this.unlisten = this.props.history.listen( (location: Location, action: any) => { this.setState({ showLayout: userLoggedIn() && !location.pathname.includes("/welcome") }); } ); } componentDidUpdate() { this.removeBodyBackground(); } componentWillUnmount() { this.unlisten(); } removeBodyBackground() { if (isDarwinApp()) { document.body.style.backgroundColor = "transparent"; } } setAvatarURL(avatarURL: string) { this.setState({ avatarURL }); } render() { this.removeBodyBackground(); return (
{this.state.showLayout ? ( ) : null} ( )} /> ( )} /> ( )} /> ( )} />
); } } // @ts-ignore export default withStyles(styles)(withSnackbar(withRouter(App)));