diff --git a/ui/src/Layout.js b/ui/src/Layout.js new file mode 100644 index 0000000..1da1179 --- /dev/null +++ b/ui/src/Layout.js @@ -0,0 +1,124 @@ +import React, {Component} from 'react'; +import Reboot from 'material-ui/Reboot'; +import ScrollUpButton from './component/ScrollUpButton'; +import Header from './component/Header'; +import Navigation from './component/Navigation'; +import Messages from './pages/Messages'; +import Login from './pages/Login'; +import axios from 'axios'; +import {createMuiTheme, MuiThemeProvider, withStyles} from 'material-ui/styles'; +import config from 'react-global-configuration'; +import CurrentUserStore from './stores/CurrentUserStore'; +import {HashRouter, Redirect, Route, Switch} from 'react-router-dom'; +import {getToken} from './actions/defaultAxios'; +import Applications from './pages/Applications'; +import Clients from './pages/Clients'; +import Users from './pages/Users'; +import PropTypes from 'prop-types'; +import SettingsDialog from './component/SettingsDialog'; + +const lightTheme = createMuiTheme({ + palette: { + type: 'light', + }, +}); +const darkTheme = createMuiTheme({ + palette: { + type: 'dark', + }, +}); + +const styles = (theme) => ({ + content: { + marginTop: 64, + padding: theme.spacing.unit * 4, + margin: '0 auto', + width: '100%', + }, +}); + +class Layout extends Component { + static propTypes = { + classes: PropTypes.object.isRequired, + }; + + static defaultVersion = '0.0.0'; + + state = { + darkTheme: true, + redirect: false, + showSettings: false, + loggedIn: CurrentUserStore.isLoggedIn(), + admin: CurrentUserStore.isAdmin(), + name: CurrentUserStore.getName(), + version: Layout.defaultVersion, + }; + + componentDidMount() { + if (this.state.version === Layout.defaultVersion) { + axios.get(config.get('url') + 'version').then((resp) => { + this.setState({...this.state, version: resp.data.version}); + }); + } + } + + componentWillMount() { + CurrentUserStore.on('change', this.updateUser); + } + + componentWillUnmount() { + CurrentUserStore.removeListener('change', this.updateUser); + } + + toggleTheme = () => this.setState({...this.state, darkTheme: !this.state.darkTheme}); + + updateUser = () => { + this.setState({ + ...this.state, + loggedIn: CurrentUserStore.isLoggedIn(), + admin: CurrentUserStore.isAdmin(), + name: CurrentUserStore.getName(), + }); + }; + + hideSettings = () => this.setState({...this.state, showSettings: false}); + showSettings = () => this.setState({...this.state, showSettings: true}); + + render() { + const {name, admin, version, loggedIn, showSettings} = this.state; + const {classes} = this.props; + const theme = this.state.darkTheme ? darkTheme : lightTheme; + return ( + + + +
+ + +
+ + +
+ + + (loggedIn ? () : ())}/> + {(loggedIn || getToken() != null) ? null : } + + + + + + +
+ {showSettings && } + +
+
+ +
+ ); + } +} + +export default withStyles(styles, {withTheme: true})(Layout); diff --git a/ui/src/component/ScrollUpButton.js b/ui/src/component/ScrollUpButton.js new file mode 100644 index 0000000..0d47874 --- /dev/null +++ b/ui/src/component/ScrollUpButton.js @@ -0,0 +1,17 @@ +import React, {Component} from 'react'; +import Button from 'material-ui/Button'; +import KeyboardArrowUp from 'material-ui-icons/KeyboardArrowUp'; + +class ScrollUpButton extends Component { + render() { + return ( + + ); + } +} + +export default ScrollUpButton;