import React from 'react'; import HomePage from './pages/HomePage/HomePage'; import RandomPage from './pages/RandomPage/RandomPage'; import GlobalInfos from './GlobalInfos'; // include bootstraps css import 'bootstrap/dist/css/bootstrap.min.css'; import style from './App.module.css'; import SettingsPage from './pages/SettingsPage/SettingsPage'; import CategoryPage from './pages/CategoryPage/CategoryPage'; /** * The main App handles the main tabs and which content to show */ class App extends React.Component { newElement = null; constructor(props, context) { super(props, context); this.state = { page: 'default', generalSettingsLoaded: false, passwordsupport: null, mediacentername: 'OpenMediaCenter' }; // bind this to the method for being able to call methods such as this.setstate this.changeRootElement = this.changeRootElement.bind(this); this.returnToLastElement = this.returnToLastElement.bind(this); } componentDidMount() { const updateRequest = new FormData(); updateRequest.append('action', 'loadInitialData'); fetch('/api/settings.php', {method: 'POST', body: updateRequest}) .then((response) => response.json() .then((result) => { // set theme GlobalInfos.enableDarkTheme(result.DarkMode); this.setState({ generalSettingsLoaded: true, passwordsupport: result.passwordEnabled, mediacentername: result.mediacenter_name }); // set tab title to received mediacenter name document.title = result.mediacenter_name; })); } /** * create a viewbinding to call APP functions from child elements * @returns a set of callback functions */ constructViewBinding() { return { changeRootElement: this.changeRootElement, returnToLastElement: this.returnToLastElement }; } /** * load the selected component into the main view * @returns {JSX.Element} body element of selected page */ MainBody() { let page; if (this.state.page === 'default') { page = ; this.mypage = page; } else if (this.state.page === 'random') { page = ; this.mypage = page; } else if (this.state.page === 'settings') { page = ; this.mypage = page; } else if (this.state.page === 'categories') { page = ; this.mypage = page; } else if (this.state.page === 'video') { // show videoelement if neccessary page = this.newElement; console.log(page); } else if (this.state.page === 'lastpage') { // return back to last page page = this.mypage; } else { page =
unimplemented yet!
; } return (page); } render() { const themeStyle = GlobalInfos.getThemeStyle(); // add the main theme to the page body document.body.className = themeStyle.backgroundcolor; return (
{this.state.mediacentername}
this.setState({page: 'default'})}>Home
this.setState({page: 'random'})}>Random Video
this.setState({page: 'categories'})}>Categories
this.setState({page: 'settings'})}>Settings
{this.state.generalSettingsLoaded ? this.MainBody() : 'loading'}
); } /** * render a new root element into the main body */ changeRootElement(element) { this.newElement = element; this.setState({ page: 'video' }); } /** * return from page to the previous page before a change */ returnToLastElement() { this.setState({ page: 'lastpage' }); } } export default App;