import React, {Fragment} from 'react'; import PropTypes from 'prop-types'; import Grid from '@material-ui/core/Grid'; import TextField from '@material-ui/core/TextField' import Button from '@material-ui/core/Button' import Paper from '@material-ui/core/Paper' import { withStyles } from '@material-ui/core/styles'; import Typography from '@material-ui/core/Typography'; import firebase from '../firebase.js'; const styles = theme => ({ root: { ...theme.mixins.gutters(), paddingTop: theme.spacing.unit * 2, paddingBottom: theme.spacing.unit * 2, }, container: { display: 'flex', flexWrap: 'wrap', }, textField: { marginLeft: theme.spacing.unit * 2, marginRight: theme.spacing.unit * 2, marginTop: theme.spacing.unit * 2, flexBasis: 280, }, button: { marginLeft: theme.spacing.unit * 3, marginRight: theme.spacing.unit * 3, marginTop: theme.spacing.unit * 3, }, paper: { marginLeft: theme.spacing.unit * 2, marginRight: theme.spacing.unit, marginTop: theme.spacing.unit * 2, }, }); /** * Types of sightings. Label is what is * viewed in the application, value is * what is stored in the database. */ const sightingTypes = [ { value: 'visual', label: 'Visual', }, { value: 'roadkill', label: 'Roadkill', }, { value: 'trapped', label: 'Trapped', }, { value: 'viewed_tracks', label: 'Viewed Tracks', }, { value: 'photo', label: 'Photo', }, { value: 'other', label: 'Other', }, ]; /** * 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', }, ]; /** * Gets formatted confidence value. */ function getConfidence(item) { for (var i = 0; i < confidenceLevels.length; i++) { if (confidenceLevels[i].value === item) { return confidenceLevels[i].label; } } } /** * Gets formatted type value. */ function getType(item) { for (var i = 0; i < sightingTypes.length; i++) { if (sightingTypes[i].value === item) { return sightingTypes[i].label; } } } class ViewSightings extends React.Component { constructor(props){ super(props); this.handleSubmit = this.handleSubmit.bind(this); } state = { id: '', type: 'N/A', confidence: 'N/A', date: 'N/A', time: 'N/A', desc: 'N/A', lat: 'N/A', lng: 'N/A' }; /** * Handles state change. */ handleChange = name => event => { this.setState({ [name]: event.target.value, }); }; /** * Handles submit on search. */ handleSubmit(e){ e.preventDefault(); const itemSighting = firebase.database().ref("sightings/" + this.state.id); itemSighting.once("value").then((snapshot) => { // Die if there's no data for that ID. if (!snapshot.exists()) { return; } let data = snapshot.val(); this.setState({ date: data.date, time: data.time, type: getType(data.type), confidence: getConfidence(data.confidence), desc: data.desc, lat: data.lat, lng: data.lng }); }); }; render(){ const { classes } = this.props; return ( /** * The below houses the search * and submit button along with * the sighting information * it pulls. */
Sighting Type: {this.state.type} {
} Confidence: {this.state.confidence} {
} Date: {this.state.date} {
} Time: {this.state.time} {
} Latitude: {this.state.lat} {
} Longitude: {this.state.lng} {
} Description: {this.state.desc}
) } } ViewSightings.propTypes = { classes: PropTypes.object.isRequired, }; export default withStyles(styles)(ViewSightings);