diff --git a/.gitignore b/.gitignore
index 417c6ce..d47c336 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,2 +1,3 @@
node_modules/
-.vscode/
\ No newline at end of file
+.vscode/
+.netlify
diff --git a/package-lock.json b/package-lock.json
index 39adea6..02471bb 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -392,6 +392,30 @@
"warning": "^4.0.1"
}
},
+ "@material-ui/icons": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/@material-ui/icons/-/icons-3.0.1.tgz",
+ "integrity": "sha512-1kNcxYiIT1x8iDPEAlgmKrfRTIV8UyK6fLVcZ9kMHIKGWft9I451V5mvSrbCjbf7MX1TbLWzZjph0aVCRf9MqQ==",
+ "requires": {
+ "@babel/runtime": "7.0.0",
+ "recompose": "^0.29.0"
+ },
+ "dependencies": {
+ "recompose": {
+ "version": "0.29.0",
+ "resolved": "https://registry.npmjs.org/recompose/-/recompose-0.29.0.tgz",
+ "integrity": "sha512-J/qLXNU4W+AeHCDR70ajW8eMd1uroqZaECTj6qqDLPMILz3y0EzpYlvrnxKB9DnqcngWrtGwjXY9JeXaW9kS1A==",
+ "requires": {
+ "@babel/runtime": "^7.0.0",
+ "change-emitter": "^0.1.2",
+ "fbjs": "^0.8.1",
+ "hoist-non-react-statics": "^2.3.1",
+ "react-lifecycles-compat": "^3.0.2",
+ "symbol-observable": "^1.0.4"
+ }
+ }
+ }
+ },
"@mrmlnc/readdir-enhanced": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz",
@@ -6076,8 +6100,7 @@
},
"ansi-regex": {
"version": "2.1.1",
- "bundled": true,
- "optional": true
+ "bundled": true
},
"aproba": {
"version": "1.2.0",
@@ -6429,8 +6452,7 @@
},
"safe-buffer": {
"version": "5.1.1",
- "bundled": true,
- "optional": true
+ "bundled": true
},
"safer-buffer": {
"version": "2.1.2",
@@ -6477,7 +6499,6 @@
"strip-ansi": {
"version": "3.0.1",
"bundled": true,
- "optional": true,
"requires": {
"ansi-regex": "^2.0.0"
}
@@ -6516,13 +6537,11 @@
},
"wrappy": {
"version": "1.0.2",
- "bundled": true,
- "optional": true
+ "bundled": true
},
"yallist": {
"version": "3.0.2",
- "bundled": true,
- "optional": true
+ "bundled": true
}
}
},
@@ -11871,6 +11890,11 @@
"resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz",
"integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA=="
},
+ "react-quiz-component": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/react-quiz-component/-/react-quiz-component-0.2.0.tgz",
+ "integrity": "sha512-oWUos0A4NtYNBNoSqAbjjpZC9ndEuw5SebYRDhX2EUv4I41iqWWVNMbY2Pu7qT6I7MuELfWHrpV+5p0XwaChaQ=="
+ },
"react-router": {
"version": "4.3.1",
"resolved": "https://registry.npmjs.org/react-router/-/react-router-4.3.1.tgz",
diff --git a/package.json b/package.json
index c0f13da..a8ae1ad 100644
--- a/package.json
+++ b/package.json
@@ -4,6 +4,7 @@
"private": true,
"dependencies": {
"@material-ui/core": "^3.1.0",
+ "@material-ui/icons": "^3.0.1",
"firebase": "^5.5.2",
"firebase-admin": "^6.0.0",
"flamelink": "^0.19.2",
@@ -21,4 +22,4 @@
"test": "react-scripts test --env=jsdom",
"eject": "react-scripts eject"
}
-}
\ No newline at end of file
+}
diff --git a/src/App.css b/src/App.css
index 9dd2624..9494272 100644
--- a/src/App.css
+++ b/src/App.css
@@ -2,11 +2,15 @@ body {
margin: 0;
}
-.report-google-map-container > div {
- height: 92% !important;
- width: 50% !important;
+@media (min-width: 600px) {
+ .sighting-google-map-container > div {
+ width: calc(100% - 240px) !important;
+ height: calc(100% - 64px) !important;
+ }
}
-.sighting-google-map-container > div {
- height: 92% !important;
+@media (min-width: 960px) {
+ .report-google-map-container > div {
+ width: calc(100% - 50% - 120px) !important;
+ }
}
\ No newline at end of file
diff --git a/src/components/Main.js b/src/components/Main.js
index 5d7921c..62336af 100644
--- a/src/components/Main.js
+++ b/src/components/Main.js
@@ -1,75 +1,209 @@
import React from 'react';
import PropTypes from 'prop-types';
import { withStyles } from '@material-ui/core/styles';
+import Drawer from '@material-ui/core/Drawer';
import AppBar from '@material-ui/core/AppBar';
-import Tabs from '@material-ui/core/Tabs';
-import Tab from '@material-ui/core/Tab';
+import Toolbar from '@material-ui/core/Toolbar';
+import List from '@material-ui/core/List';
+import ListItem from '@material-ui/core/ListItem';
+import ListItemIcon from '@material-ui/core/ListItemIcon';
+import ListItemText from '@material-ui/core/ListItemText';
import Typography from '@material-ui/core/Typography';
+import IconButton from '@material-ui/core/IconButton';
+import Hidden from '@material-ui/core/Hidden';
+import Divider from '@material-ui/core/Divider';
+import MenuIcon from '@material-ui/icons/Menu';
+import HomeIcon from '@material-ui/icons/Home';
+import AssignmentIcon from '@material-ui/icons/Assignment';
+import MapIcon from '@material-ui/icons/Map';
+import ListIcon from '@material-ui/icons/List';
+import SlideshowIcon from '@material-ui/icons/Slideshow';
import Home from '../pages/Home';
import ViewMap from '../pages/ViewMap';
-import QuizPage from '../pages/QuizPage';
+import Quiz from '../pages/QuizPage';
import SightingList from '../pages/SightingList';
import Report from '../pages/Report';
-import Info from '../pages/Info';
+import CssBaseline from '@material-ui/core/CssBaseline';
+import ExpandLess from '@material-ui/icons/ExpandLess';
+import ExpandMore from '@material-ui/icons/ExpandMore';
+import Collapse from '@material-ui/core/Collapse';
-function TabContainer(props) {
- return (
-
- {props.children}
-
- );
-}
-
-TabContainer.propTypes = {
- children: PropTypes.node.isRequired,
-};
+const drawerWidth = 240;
const styles = theme => ({
root: {
+ display: 'flex',
+ },
+ drawer: {
+ [theme.breakpoints.up('sm')]: {
+ width: drawerWidth,
+ flexShrink: 0,
+ },
+ },
+ nested: {
+ paddingLeft: theme.spacing.unit * 4,
+ },
+ appBar: {
+ marginLeft: drawerWidth,
+ [theme.breakpoints.up('sm')]: {
+ width: `calc(100% - ${drawerWidth}px)`,
+ },
+ },
+ menuButton: {
+ marginRight: 20,
+ [theme.breakpoints.up('sm')]: {
+ display: 'none',
+ },
+ },
+ toolbar: theme.mixins.toolbar,
+ drawerPaper: {
+ width: drawerWidth,
+ },
+ content: {
flexGrow: 1,
- backgroundColor: theme.palette.background.paper,
+ width: '60%'
},
});
-class SimpleTabs extends React.Component {
+class ResponsiveDrawer extends React.Component {
state = {
- value: 0,
+ mobileOpen: false,
+ key: '',
+ open: false
};
- handleChange = (event, value) => {
- this.setState({ value });
- };
+ handleDrawerToggle = () => {
+ this.setState(state => ({ mobileOpen: !state.mobileOpen }));
+ }
+
+ handleClick = () => {
+ this.setState(state => ({ open: !state.open }));
+ }
+
+ nav = (text) => {
+ this.setState({
+ key: text
+ })
+ }
render() {
- const { classes } = this.props;
- const { value } = this.state;
+ const { classes, theme } = this.props;
+
+ const drawer = (
+
+
+
+
+ this.nav('Home')}>
+
+
+
+ this.nav('Report')}>
+
+
+
+ this.nav('Map')}>
+
+
+
+ this.nav('List')}>
+
+
+
+
+
+
+
+
+ {this.state.open ? : }
+
+
+
+ this.nav('Easy-Quiz')}>
+
+
+ this.nav('Medium-Quiz')}>
+
+
+ this.nav('Hard-Quiz')}>
+
+
+
+
+
+
+
+ );
return (
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+ The American Marten
+
+
- {value === 0 && }
- {value === 1 && }
- {value === 2 && }
- {value === 3 && }
- {value === 4 && }
- {value === 5 && }
+
+
+
+ {this.state.key === 'Home' && }
+ {this.state.key === 'Report' && }
+ {this.state.key === 'Map' && }
+ {this.state.key === 'List' && }
+ {this.state.key === 'Easy-Quiz' && }
+ {this.state.key === 'Medium-Quiz' && }
+ {this.state.key === 'Hard-Quiz' && }
+
);
}
}
-SimpleTabs.propTypes = {
+ResponsiveDrawer.propTypes = {
classes: PropTypes.object.isRequired,
+ // Injected by the documentation to work in an iframe.
+ // You won't need it on your project.
+ container: PropTypes.object,
+ theme: PropTypes.object.isRequired,
};
-export default withStyles(styles)(SimpleTabs);
-
+export default withStyles(styles, { withTheme: true })(ResponsiveDrawer);
\ No newline at end of file
diff --git a/src/components/QuizGame.js b/src/components/QuizGame.js
index a8a1fa2..bbfe640 100644
--- a/src/components/QuizGame.js
+++ b/src/components/QuizGame.js
@@ -2,10 +2,6 @@ import React, { Fragment } from 'react';
import Grid from '@material-ui/core/Grid';
import PropTypes from 'prop-types';
import { withStyles } from '@material-ui/core/styles';
-import Typography from '@material-ui/core/Typography';
-import AppBar from '@material-ui/core/AppBar';
-import Tabs from '@material-ui/core/Tabs';
-import Tab from '@material-ui/core/Tab';
import Quiz from 'react-quiz-component';
/**
@@ -23,18 +19,6 @@ function shuffleArray(array) {
return array;
}
-function TabContainer(props) {
- return (
-
- {props.children}
-
- );
-}
-
-TabContainer.propTypes = {
- children: PropTypes.node.isRequired,
-};
-
// Style for the tabs.
const styles = theme => ({
root: {
@@ -44,18 +28,8 @@ const styles = theme => ({
});
class QuizGame extends React.Component {
- // The state of the component.
- state = {
- value: 0,
- };
- // Handles tab changes.
- handleChange = (event, value) => {
- this.setState({ value });
- };
-
- // Object that contains the easy quiz material.
- easyQuiz = {
+ easy = {
"quizTitle": "Trail Cam Quiz: Easy",
"questions": shuffleArray([
{
@@ -114,37 +88,166 @@ class QuizGame extends React.Component {
"correctAnswer": "3"
},
])
- };
+ }
+
+ medium = {
+ "quizTitle": "Trail Cam Quiz: Medium",
+ "questions": shuffleArray([
+ {
+ "question": What animal is this?
,
+ "questionType": "text",
+ "answers": [
+ "Black bear",
+ "Common wombat",
+ "Raccoon",
+ "White-tailed deer"
+ ],
+ "correctAnswer": "1"
+ },
+ {
+ "question": What animal is this?
,
+ "questionType": "text",
+ "answers": [
+ "American beaver",
+ "Muskrat",
+ "Porcupine",
+ "Woodchuck"
+ ],
+ "correctAnswer": "3"
+ },
+ {
+ "question": What animal is this?
,
+ "questionType": "text",
+ "answers": [
+ "American badger",
+ "Raccoon",
+ "Striped skunk",
+ "Virginia opossum"
+ ],
+ "correctAnswer": "2"
+ },
+ {
+ "question": What animal is this?
,
+ "questionType": "text",
+ "answers": [
+ "Eastern fox squirrel",
+ "Eastern gray squirrel",
+ "Red squirrel",
+ "Southern flying squirrel"
+ ],
+ "correctAnswer": "3"
+ },
+ {
+ "question": What animal is this?
,
+ "questionType": "text",
+ "answers": [
+ "American Crow",
+ "Black Vulture",
+ "Turkey Vulture",
+ "Northern Raven"
+ ],
+ "correctAnswer": "3"
+ },
+ ])
+ }
+
+ hard = {
+ "quizTitle": "Trail Cam Quiz: Hard",
+ "questions": shuffleArray([
+ {
+ "question": What animal is this?
,
+ "questionType": "text",
+ "answers": [
+ "Black bear",
+ "Common wombat",
+ "Raccoon",
+ "White-tailed deer"
+ ],
+ "correctAnswer": "1"
+ },
+ {
+ "question": What animal is this?
,
+ "questionType": "text",
+ "answers": [
+ "American beaver",
+ "Muskrat",
+ "Porcupine",
+ "Woodchuck"
+ ],
+ "correctAnswer": "3"
+ },
+ {
+ "question": What animal is this?
,
+ "questionType": "text",
+ "answers": [
+ "American badger",
+ "Raccoon",
+ "Striped skunk",
+ "Virginia opossum"
+ ],
+ "correctAnswer": "2"
+ },
+ {
+ "question": What animal is this?
,
+ "questionType": "text",
+ "answers": [
+ "Eastern fox squirrel",
+ "Eastern gray squirrel",
+ "Red squirrel",
+ "Southern flying squirrel"
+ ],
+ "correctAnswer": "3"
+ },
+ {
+ "question": What animal is this?
,
+ "questionType": "text",
+ "answers": [
+ "American Crow",
+ "Black Vulture",
+ "Turkey Vulture",
+ "Northern Raven"
+ ],
+ "correctAnswer": "3"
+ },
+ ])
+ }
+
+ pickDifficulty = difficulty => {
+ let level
+
+ switch (difficulty) {
+ case 'Easy':
+ level = this.easy
+ break
+ case 'Medium':
+ level = this.medium
+ break
+ case 'Hard':
+ level = this.hard
+ break
+ default:
+ break
+ }
+
+ return level
+ }
+
+ // The state of the component.
+ state = {
+ //difficulty: pickDifficulty(this.props.difficulty)
+ difficulty: this.pickDifficulty(this.props.difficulty)
+ }
// Renders the quiz component.
render() {
const { classes } = this.props;
- const { value } = this.state;
return (
// Tabs
-
-
-
-
-
-
-
- {value === 0 &&
-
-
-
-
-
- }
- {value === 1 &&
Medium Quiz}
- {value === 2 &&
Hard Quiz}
+
+
+
);
}
diff --git a/src/components/ReportForm.js b/src/components/ReportForm.js
index 9858262..9815843 100644
--- a/src/components/ReportForm.js
+++ b/src/components/ReportForm.js
@@ -16,7 +16,7 @@ import GoogleMap from '../components/ReportMap';
const styles = theme => ({
container: {
display: 'flex',
- flexWrap: 'wrap',
+ flexWrap: 'wrap'
},
textField: {
marginLeft: theme.spacing.unit * 2,
@@ -292,7 +292,7 @@ class ReportForm extends React.Component {