Commit f58a0394cb21e7ad990eb69d0c4d6a3e02fa50e7
1 parent
9f1b0a75
Exists in
master
V.0.9.1 - Added missing files from last commit
Showing
10 changed files
with
208 additions
and
0 deletions
Show diff stats
... | ... | @@ -0,0 +1,28 @@ |
1 | +.App { | |
2 | + text-align: center; | |
3 | +} | |
4 | + | |
5 | +.App-logo { | |
6 | + animation: App-logo-spin infinite 20s linear; | |
7 | + height: 80px; | |
8 | +} | |
9 | + | |
10 | +.App-header { | |
11 | + background-color: #222; | |
12 | + height: 150px; | |
13 | + padding: 20px; | |
14 | + color: white; | |
15 | +} | |
16 | + | |
17 | +.App-title { | |
18 | + font-size: 1.5em; | |
19 | +} | |
20 | + | |
21 | +.App-intro { | |
22 | + font-size: large; | |
23 | +} | |
24 | + | |
25 | +@keyframes App-logo-spin { | |
26 | + from { transform: rotate(0deg); } | |
27 | + to { transform: rotate(360deg); } | |
28 | +} | ... | ... |
... | ... | @@ -0,0 +1,37 @@ |
1 | +import React, { Component } from 'react' | |
2 | +import { BrowserRouter, Route } from 'react-router-dom' | |
3 | +import { connect } from 'react-redux' | |
4 | +import * as actions from '../actions' | |
5 | +import './App.css' | |
6 | + | |
7 | +import Header from './Header' | |
8 | +import Landing from './Landing' | |
9 | +import Dashboard from './/Dashboard' | |
10 | +// const Dashboard = () => <h2>Dashboard</h2> | |
11 | +const SurveyNew = () => <h2>SurveyNew</h2> | |
12 | + | |
13 | +class App extends Component { | |
14 | + componentDidMount () { | |
15 | + this.props.fetchUser() | |
16 | + } | |
17 | + | |
18 | + render () { | |
19 | + return ( | |
20 | + <div className='App'> | |
21 | + <div> | |
22 | + <BrowserRouter> | |
23 | + <div> | |
24 | + <Header /> | |
25 | + <Route exact path='/' component={Landing} /> | |
26 | + <Route exact path='/surveys' component={Dashboard} /> | |
27 | + <Route path='/surveys/new' component={SurveyNew} /> | |
28 | + {/* <Route path='/mapstart' component={MapStart} /> */} | |
29 | + </div> | |
30 | + </BrowserRouter> | |
31 | + </div> | |
32 | + </div> | |
33 | + ) | |
34 | + } | |
35 | +} | |
36 | + | |
37 | +export default connect(null, actions)(App) | ... | ... |
... | ... | @@ -0,0 +1,9 @@ |
1 | +import React from 'react'; | |
2 | +import ReactDOM from 'react-dom'; | |
3 | +import App from './App'; | |
4 | + | |
5 | +it('renders without crashing', () => { | |
6 | + const div = document.createElement('div'); | |
7 | + ReactDOM.render(<App />, div); | |
8 | + ReactDOM.unmountComponentAtNode(div); | |
9 | +}); | ... | ... |
... | ... | @@ -0,0 +1,18 @@ |
1 | +import React from 'react' | |
2 | +import FindConsumer from './findConsumer' | |
3 | +import Map from './map' | |
4 | + | |
5 | +const MapStart = () => { | |
6 | + return ( | |
7 | + <div className='App'> | |
8 | + <div> | |
9 | + <FindConsumer /> | |
10 | + </div> | |
11 | + <div> | |
12 | + <Map /> | |
13 | + </div> | |
14 | + </div> | |
15 | + ) | |
16 | +} | |
17 | + | |
18 | +export default MapStart | ... | ... |
... | ... | @@ -0,0 +1,70 @@ |
1 | +import React, { Component } from 'react' | |
2 | +import PropTypes from 'prop-types' | |
3 | +import AppBar from '@material-ui/core/AppBar' | |
4 | +import Toolbar from '@material-ui/core/Toolbar' | |
5 | +import IconButton from '@material-ui/core/IconButton' | |
6 | +import MenuIcon from '@material-ui/icons/Menu' | |
7 | +import Button from '@material-ui/core/Button' | |
8 | +import Typography from '@material-ui/core/Typography' | |
9 | +import { withStyles } from '@material-ui/core' | |
10 | +import { connect } from 'react-redux' | |
11 | + | |
12 | +const styles = theme => ({ | |
13 | + root: { | |
14 | + flexGrow: 1 | |
15 | + }, | |
16 | + flex: { | |
17 | + flexGrow: 1 | |
18 | + }, | |
19 | + menuButton: { | |
20 | + marginLeft: -12, | |
21 | + marginRight: 20 | |
22 | + } | |
23 | +}) | |
24 | + | |
25 | +class Header extends Component { | |
26 | + constructor (props) { | |
27 | + super(props) | |
28 | + | |
29 | + this.state = {} | |
30 | + } | |
31 | + renderContent () { | |
32 | + switch (this.props.auth) { | |
33 | + case null: | |
34 | + return 'Verificando conexão ...' | |
35 | + case false: | |
36 | + return <Button color='inherit' href='/auth/google'>Login with Google</Button> | |
37 | + default: | |
38 | + return <Button color='inherit' href="/api/logout">Logout</Button> | |
39 | + } | |
40 | + } | |
41 | + render () { | |
42 | + const { classes } = this.props | |
43 | + return ( | |
44 | + <div className={classes.root}> | |
45 | + <AppBar position='static'> | |
46 | + <Toolbar> | |
47 | + <IconButton className={classes.menuButton} color='inherit' aria-label='Menu'> | |
48 | + <MenuIcon /> | |
49 | + </IconButton> | |
50 | + <a href='http://www.nexusbr.com' target='_blank' rel='noopener noreferrer'> | |
51 | + <img src='https://nexusbr.com/images/logo.png' alt='NEXUS' width='100' height='39' /> | |
52 | + </a> | |
53 | + <Typography variant='title' color='inherit' className={classes.flex} /> | |
54 | + {this.renderContent()} | |
55 | + </Toolbar> | |
56 | + </AppBar> | |
57 | + </div> | |
58 | + ) | |
59 | + } | |
60 | +} | |
61 | + | |
62 | +Header.propTypes = { | |
63 | + classes: PropTypes.object.isRequired | |
64 | +} | |
65 | + | |
66 | +function mapStateToPropos (state) { | |
67 | + return { auth: state.auth } | |
68 | +} | |
69 | + | |
70 | +export default connect(mapStateToPropos)(withStyles(styles)(Header)) | ... | ... |
... | ... | @@ -0,0 +1,18 @@ |
1 | +import { FETCH_USER } from '../actions/types' | |
2 | + | |
3 | +/** | |
4 | + * Records whether or not the user is logged in | |
5 | + * | |
6 | + * @export | |
7 | + * @param {*} [state={}] | |
8 | + * @param {*} action | |
9 | + * @returns | |
10 | + */ | |
11 | +export default function (state = null, action) { | |
12 | + switch (action.type) { | |
13 | + case FETCH_USER: | |
14 | + return action.payload || false; // if empty string returns false | |
15 | + default: | |
16 | + return state | |
17 | + } | |
18 | +} | ... | ... |