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..7dd2e71 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -6076,8 +6076,7 @@
},
"ansi-regex": {
"version": "2.1.1",
- "bundled": true,
- "optional": true
+ "bundled": true
},
"aproba": {
"version": "1.2.0",
@@ -6429,8 +6428,7 @@
},
"safe-buffer": {
"version": "5.1.1",
- "bundled": true,
- "optional": true
+ "bundled": true
},
"safer-buffer": {
"version": "2.1.2",
@@ -6477,7 +6475,6 @@
"strip-ansi": {
"version": "3.0.1",
"bundled": true,
- "optional": true,
"requires": {
"ansi-regex": "^2.0.0"
}
@@ -6516,13 +6513,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 +11866,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 e2ef165..6c5de72 100644
--- a/package.json
+++ b/package.json
@@ -10,6 +10,7 @@
"google-maps-react": "^2.0.2",
"react": "^16.5.1",
"react-dom": "^16.5.1",
+ "react-quiz-component": "0.2.0",
"react-router": "^4.3.1",
"react-router-dom": "^4.3.1",
"react-scripts": "1.1.5"
diff --git a/public/quizimages/question1.jpg b/public/quizimages/question1.jpg
new file mode 100644
index 0000000..8ce9a50
Binary files /dev/null and b/public/quizimages/question1.jpg differ
diff --git a/public/quizimages/question2.jpg b/public/quizimages/question2.jpg
new file mode 100644
index 0000000..8f6d931
Binary files /dev/null and b/public/quizimages/question2.jpg differ
diff --git a/public/quizimages/question3.jpg b/public/quizimages/question3.jpg
new file mode 100644
index 0000000..c518c5e
Binary files /dev/null and b/public/quizimages/question3.jpg differ
diff --git a/public/quizimages/question4.jpg b/public/quizimages/question4.jpg
new file mode 100644
index 0000000..0e52c59
Binary files /dev/null and b/public/quizimages/question4.jpg differ
diff --git a/public/quizimages/question5.jpg b/public/quizimages/question5.jpg
new file mode 100644
index 0000000..c49d92f
Binary files /dev/null and b/public/quizimages/question5.jpg differ
diff --git a/src/App.css b/src/App.css
index 145ee45..8c70ed8 100644
--- a/src/App.css
+++ b/src/App.css
@@ -2,12 +2,23 @@ body {
margin: 0;
}
-.report-google-map-container > div {
- width: 50% !important;
+/* #root > div > div {
+ overflow: scroll !important;
+} */
+
+div[class="ResponsiveDrawer-root-1"] {
+ overflow: scroll !important;
+ overflow-x: hidden !important;
}
@media (min-width: 960px) {
.sighting-google-map-container > div {
width: calc(100% - 241px) !important;
}
+}
+
+@media (min-width: 960px) {
+ .report-google-map-container > div {
+ width: 50% !important;
+ }
}
\ No newline at end of file
diff --git a/src/components/Main.js b/src/components/Main.js
index 815ea15..baafcb8 100644
--- a/src/components/Main.js
+++ b/src/components/Main.js
@@ -20,7 +20,7 @@ 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 Quiz from '../pages/Quiz';
+import QuizPage from '../pages/QuizPage';
import SightingList from '../pages/SightingList';
import Report from '../pages/Report';
@@ -159,7 +159,7 @@ class ResponsiveDrawer extends React.Component {
{this.state.key === 'Report' && }
{this.state.key === 'Map' && }
{this.state.key === 'List' && }
- {this.state.key === 'Quiz' && }
+ {this.state.key === 'Quiz' && }
);
}
diff --git a/src/components/QuizGame.js b/src/components/QuizGame.js
new file mode 100644
index 0000000..b620991
--- /dev/null
+++ b/src/components/QuizGame.js
@@ -0,0 +1,160 @@
+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';
+
+/**
+ * Shuffles a given array.
+ * @param {*} array The array passed in.
+ */
+function shuffleArray(array) {
+ var j, x, i;
+ for (i = array.length - 1; i > 0; i--) {
+ j = Math.floor(Math.random() * (i + 1));
+ x = array[i];
+ array[i] = array[j];
+ array[j] = x;
+ }
+ return array;
+}
+
+function TabContainer(props) {
+ return (
+
+ {props.children}
+
+ );
+}
+
+TabContainer.propTypes = {
+ children: PropTypes.node.isRequired,
+};
+
+// Style for the tabs.
+const styles = theme => ({
+ root: {
+ flexGrow: 1,
+ backgroundColor: theme.palette.background.paper,
+ marginTop: '64px',
+ overflow: 'scroll',
+ height: '95%',
+ },
+});
+
+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 = {
+ "quizTitle": "Trail Cam Quiz: Easy",
+ "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"
+ },
+ ])
+ };
+
+ // 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}
+
+ );
+ }
+}
+
+QuizGame.propTypes = {
+ classes: PropTypes.object.isRequired
+};
+
+export default withStyles(styles)(QuizGame);
\ No newline at end of file
diff --git a/src/components/ReportForm.js b/src/components/ReportForm.js
index f3a7d3b..7e7d0c0 100644
--- a/src/components/ReportForm.js
+++ b/src/components/ReportForm.js
@@ -1,4 +1,4 @@
-import React, {Fragment} from 'react';
+import React, { Fragment } from 'react';
import PropTypes from 'prop-types';
import Grid from '@material-ui/core/Grid';
import { withStyles } from '@material-ui/core/styles';
@@ -41,22 +41,15 @@ const styles = theme => ({
/**
* Function for formatting the
- * date as a string that
- * Material UI can use. We'll
- * also store the date like
- * this string in the database.
+ * year as a string that
+ * Material UI can use.
* @param {*} date, Date passed in.
*/
-function formatDate(date) {
- var d = new Date(date),
- month = '' + (d.getMonth() + 1),
- day = '' + d.getDate(),
- year = d.getFullYear();
+function getYear(date) {
+ var d = new Date(date),
+ year = d.getFullYear();
- if (month.length < 2) month = '0' + month;
- if (day.length < 2) day = '0' + day;
-
- return [year, month, day].join('-');
+ return year;
}
/**
@@ -91,33 +84,117 @@ const sightingTypes = [
},
];
+/**
+ * Types of sightings. Label is what is
+ * viewed in the application, value is
+ * what is stored in the database.
+*/
+const monthTypes = [
+ {
+ value: '01',
+ label: 'January',
+ },
+ {
+ value: '02',
+ label: 'February',
+ },
+ {
+ value: '03',
+ label: 'March',
+ },
+ {
+ value: '04',
+ label: 'April',
+ },
+ {
+ value: '05',
+ label: 'May',
+ },
+ {
+ value: '06',
+ label: 'June',
+ },
+ {
+ value: '07',
+ label: 'July',
+ },
+ {
+ value: '08',
+ label: 'August',
+ },
+ {
+ value: '09',
+ label: 'September',
+ },
+ {
+ value: '10',
+ label: 'October',
+ },
+ {
+ value: '11',
+ label: 'November',
+ },
+ {
+ value: '12',
+ label: 'December',
+ },
+];
+
+/**
+ * Types of sightings. Label is what is
+ * viewed in the application, value is
+ * what is stored in the database.
+*/
+const timeTypes = [
+ {
+ value: 'unknown',
+ label: 'Unknown',
+ },
+ {
+ value: 'morning',
+ label: 'Morning',
+ },
+ {
+ value: 'midday',
+ label: 'Midday',
+ },
+ {
+ value: 'evening',
+ label: 'Evening',
+ },
+ {
+ value: 'night',
+ label: 'Night',
+ },
+];
+
/**
* Levels of confidence. Label is what is
* viewed in the application, value is
* what is stored in the database.
*/
const confidenceLevels = [
- {
- value: '1',
- label: '1 - Strongly unconfident',
- },
- {
- value: '2',
- label: '2 - Unconfident',
- },
- {
- value: '3',
- label: '3 - Somewhat confident',
- },
- {
- value: '4',
- label: '4 - Confident',
- },
- {
- value: '5',
- label: '5 - Very confident',
- },
- ];
+ {
+ value: '1',
+ label: '1 - Strongly disagree',
+ },
+ {
+ value: '2',
+ label: '2 - Disagree',
+ },
+ {
+ value: '3',
+ label: '3 - Neutral',
+ },
+ {
+ value: '4',
+ label: '4 - Agree',
+ },
+ {
+ value: '5',
+ label: '5 - Strongly agree',
+ },
+];
/**
* The form component.
@@ -137,8 +214,9 @@ class ReportForm extends React.Component {
* State of form components.
*/
state = {
- date: formatDate(new Date()),
- time: '00:00',
+ month: '01',
+ year: getYear(new Date()),
+ time: 'unknown',
type: 'visual',
confidence: '1',
desc: '',
@@ -160,13 +238,13 @@ class ReportForm extends React.Component {
* Get the coordinates
*
*/
- getCoordinates = (lat,lng) => {
+ getCoordinates = (lat, lng) => {
let latitude = lat;
let longitude = lng;
this.setState({
- lat: latitude,
- lng: longitude
+ lat: latitude,
+ lng: longitude
});
}
@@ -182,7 +260,7 @@ class ReportForm extends React.Component {
const sighting = {
type: this.state.type,
confidence: this.state.confidence,
- date: this.state.date,
+ date: this.state.year + '-' + this.state.month,
time: this.state.time,
desc: this.state.desc,
lat: this.state.lat,
@@ -190,8 +268,9 @@ class ReportForm extends React.Component {
}
sightingsRef.push(sighting);
this.setState({
- date: formatDate(new Date()),
- time: '00:00',
+ year: getYear(new Date()),
+ month: '01',
+ time: 'unknown',
type: 'visual',
confidence: '1',
desc: '',
@@ -199,7 +278,7 @@ class ReportForm extends React.Component {
lng: ''
});
};
-
+
/**
* The render method for this component.
@@ -211,129 +290,160 @@ class ReportForm extends React.Component {
* The actual form.
*/
return (
-
-
+
);
- }
+ }
}
ReportForm.propTypes = {
diff --git a/src/firebase.js b/src/firebase.js
index 8d01e36..6e6b6b2 100644
--- a/src/firebase.js
+++ b/src/firebase.js
@@ -1,5 +1,6 @@
import firebase from 'firebase/app';
import 'firebase/database';
+import 'firebase/storage';
const config = {
apiKey: "AIzaSyAYf9AbeYwLY892NRiQfn0AMtG9xIFAJbo",
diff --git a/src/pages/Quiz.js b/src/pages/Quiz.js
deleted file mode 100644
index 28b9f15..0000000
--- a/src/pages/Quiz.js
+++ /dev/null
@@ -1,14 +0,0 @@
-import React, { Component } from 'react';
-import Typography from '@material-ui/core/Typography';
-
-class Quiz extends Component {
- render() {
- return (
-
- Quiz
-
- );
- }
-}
-
-export default Quiz;
diff --git a/src/pages/QuizPage.js b/src/pages/QuizPage.js
new file mode 100644
index 0000000..4c36a98
--- /dev/null
+++ b/src/pages/QuizPage.js
@@ -0,0 +1,13 @@
+import React, { Component } from 'react';
+import QuizGame from '../components/QuizGame';
+
+
+class QuizPage extends Component {
+ render() {
+ return (
+
+ );
+ }
+}
+
+export default QuizPage;