From e7052dfb5b7f8d80db33b66a540bd92f064e9865 Mon Sep 17 00:00:00 2001 From: ajmaley Date: Mon, 8 Oct 2018 15:41:05 -0400 Subject: [PATCH 01/31] Added a better demo displaying how our app communicates with Flamelink Schemas and displays schema details in the right order. --- src/components/Flamelink.js | 31 +++++++++++++++++------ src/components/Layout.js | 49 +++++++++++++++++++++++++++++++++++++ src/pages/Info.js | 5 ++-- 3 files changed, 76 insertions(+), 9 deletions(-) create mode 100644 src/components/Layout.js diff --git a/src/components/Flamelink.js b/src/components/Flamelink.js index 4033d59..d79007e 100644 --- a/src/components/Flamelink.js +++ b/src/components/Flamelink.js @@ -1,14 +1,31 @@ -import { Component } from 'react'; +import React, { Component, Fragment } from 'react'; +import Grid from '@material-ui/core/Grid'; import flamelinkApp from '../flamelink.js'; - +import Layout from './Layout'; class Flamelink extends Component { + constructor() { + super(); + + this.state = { + schemaDetails: '' + } + } + + componentDidMount() { + // fetch the project name, once it retrieves resolve the promsie and update the state. + flamelinkApp.schemas.getFields('martenSchemaDemo', { fields: [ 'title', 'key' ] }) + .then(result => this.setState({ + schemaDetails: result + })) + } + render() { - //Grabs data from text field in entry from the martenSchemaDemo - flamelinkApp.content.get('martenSchemaDemo') - .then(flameData => document.getElementById("flamelinkDemo").innerHTML = flameData.field_1538162314419); - - return(null); + return( + + + + ); } } diff --git a/src/components/Layout.js b/src/components/Layout.js new file mode 100644 index 0000000..760b0dc --- /dev/null +++ b/src/components/Layout.js @@ -0,0 +1,49 @@ +import React, { Component, Fragment } from 'react'; +import flamelinkApp from '../flamelink.js'; + +class Layout extends Component { + constructor() { + super(); + + this.state = { + contentDetails: '' + } + } + + + getData(schemaData){ + for (var val in this.props.schemaDetails){ + this.getMoreData(this.props.schemaDetails[val]); + } + } + + getMoreData(moreData){ + var tArray = document.createElement("H1"); + var kArray = document.createElement("P"); + this.getTitle(moreData.title, tArray); + this.getKey(moreData.key, kArray); + } + + getTitle(title, arr){ + var t = document.createTextNode(title); + arr.appendChild(t); + document.getElementById("demo").appendChild(arr); + } + + + getKey(key, arr){ + var k = document.createTextNode(key); + arr.appendChild(k); + document.getElementById("demo").appendChild(arr); + } + + render() { + return( +
+

{this.getData(this.props)}

+
+ ); + } +} + +export default Layout; \ No newline at end of file diff --git a/src/pages/Info.js b/src/pages/Info.js index 838a1e1..3db9d8f 100644 --- a/src/pages/Info.js +++ b/src/pages/Info.js @@ -2,16 +2,17 @@ import React, { Component } from 'react'; import Typography from '@material-ui/core/Typography'; import Flamelink from '../components/Flamelink'; + class Info extends Component { render() { return (
- + Info -

+
); From 2839943cfe21ae3d4e0e720bedb42c83aa5c5958 Mon Sep 17 00:00:00 2001 From: Al Duncanson Date: Tue, 23 Oct 2018 18:38:00 -0400 Subject: [PATCH 02/31] added custom icons --- src/components/SightingMap.js | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/src/components/SightingMap.js b/src/components/SightingMap.js index e2c3e89..6bfdbe2 100644 --- a/src/components/SightingMap.js +++ b/src/components/SightingMap.js @@ -85,6 +85,29 @@ export class MapContainer extends Component { } } + sightingIcon = (type) => { + let pinIcon + + switch(type) { + case 'visual': + pinIcon = 'https://i.postimg.cc/nhYXGQNp/marten-icon.png' + break + case 'roadkill': + pinIcon = 'https://i.postimg.cc/xdfcx1SH/tire-icon.png' + break + case 'viewed_tracks': + pinIcon = 'https://i.postimg.cc/7P761WCS/paws.png' + break + case 'trapped': + pinIcon = 'https://i.postimg.cc/Y9LSsXdK/cage.png' + break + default: + break + } + + return pinIcon + } + // Set the state of the component to contain user coordinates and initial // marker and info window information state = { @@ -99,6 +122,8 @@ export class MapContainer extends Component { } render() { + const {google} = this.props; + return ( // Render the Google Map, Marker, and InfoWindow components
@@ -117,6 +142,9 @@ export class MapContainer extends Component { /> { this.state.sightings.map((sighting) => { + + let pinIcon = this.sightingIcon(sighting.type) + return ( ) })} From 7a8e840e1bf28a9a6e28d3a3fdf816328ab9216a Mon Sep 17 00:00:00 2001 From: ajmaley Date: Sat, 27 Oct 2018 12:46:00 -0400 Subject: [PATCH 03/31] Added code to handle flamelink data. It handles schema field order, grid sizes and displays text. Getting storage bucket errors when attempting to grab media info. Need to use the firebase-admin package instead of the firebase package. This is a known issue with flamelink. I'll fix this shortly. --- src/components/Flamelink.js | 32 -------------------------- src/components/Layout.js | 46 +++++++++++-------------------------- src/firebase.js | 2 +- src/pages/Info.js | 24 +++++++++++++++---- 4 files changed, 34 insertions(+), 70 deletions(-) delete mode 100644 src/components/Flamelink.js diff --git a/src/components/Flamelink.js b/src/components/Flamelink.js deleted file mode 100644 index d79007e..0000000 --- a/src/components/Flamelink.js +++ /dev/null @@ -1,32 +0,0 @@ -import React, { Component, Fragment } from 'react'; -import Grid from '@material-ui/core/Grid'; -import flamelinkApp from '../flamelink.js'; -import Layout from './Layout'; -class Flamelink extends Component { - constructor() { - super(); - - this.state = { - schemaDetails: '' - } - } - - componentDidMount() { - // fetch the project name, once it retrieves resolve the promsie and update the state. - flamelinkApp.schemas.getFields('martenSchemaDemo', { fields: [ 'title', 'key' ] }) - .then(result => this.setState({ - schemaDetails: result - })) - } - - render() { - - return( - - - - ); - } -} - -export default Flamelink; \ No newline at end of file diff --git a/src/components/Layout.js b/src/components/Layout.js index 760b0dc..c53272a 100644 --- a/src/components/Layout.js +++ b/src/components/Layout.js @@ -1,47 +1,27 @@ -import React, { Component, Fragment } from 'react'; +import React, { Component} from 'react'; +import FlameLinkStructure from './FlameLinkStructure'; +import Grid from '@material-ui/core/Grid'; import flamelinkApp from '../flamelink.js'; class Layout extends Component { - constructor() { - super(); - this.state = { - contentDetails: '' - } - } - - - getData(schemaData){ - for (var val in this.props.schemaDetails){ - this.getMoreData(this.props.schemaDetails[val]); + getSchemaFieldData(schemaData){ + var arr = []; + for (var val in schemaData){ + arr.push(val); } + return arr.map(this.createComponents, schemaData); } - getMoreData(moreData){ - var tArray = document.createElement("H1"); - var kArray = document.createElement("P"); - this.getTitle(moreData.title, tArray); - this.getKey(moreData.key, kArray); - } - - getTitle(title, arr){ - var t = document.createTextNode(title); - arr.appendChild(t); - document.getElementById("demo").appendChild(arr); - } - - - getKey(key, arr){ - var k = document.createTextNode(key); - arr.appendChild(k); - document.getElementById("demo").appendChild(arr); + createComponents(num){ + return } render() { return( -
-

{this.getData(this.props)}

-
+ + {this.getSchemaFieldData(this.props.schemaDetails)} + ); } } diff --git a/src/firebase.js b/src/firebase.js index 8d01e36..51e4393 100644 --- a/src/firebase.js +++ b/src/firebase.js @@ -10,6 +10,6 @@ const config = { messagingSenderId: "659856510832" }; -firebase.initializeApp(config); +const firebaseApp = firebase.initializeApp(config); export default firebase; \ No newline at end of file diff --git a/src/pages/Info.js b/src/pages/Info.js index 3db9d8f..72fa1cd 100644 --- a/src/pages/Info.js +++ b/src/pages/Info.js @@ -1,9 +1,22 @@ -import React, { Component } from 'react'; +import React, { Component, Fragment } from 'react'; import Typography from '@material-ui/core/Typography'; -import Flamelink from '../components/Flamelink'; - +import Layout from '../components/Layout'; +import flamelinkApp from '../flamelink.js'; class Info extends Component { + constructor() { + super(); + + this.state = { + schemaDetails: '', + } + + flamelinkApp.schemas.getFields('martenSchemaDemo', { fields: [ 'title', 'key', 'type', 'gridColumns' ] }) + .then(result => this.setState({ + schemaDetails: result + })) + } + render() { return ( @@ -12,7 +25,10 @@ class Info extends Component { Info - + + + +
); From 0070b333e81fffe4d951d4a257fc5be4e14398b8 Mon Sep 17 00:00:00 2001 From: ajmaley Date: Sat, 27 Oct 2018 12:50:01 -0400 Subject: [PATCH 04/31] Forgot to add this file in my last commit --- src/components/FlameLinkStructure.js | 54 ++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 src/components/FlameLinkStructure.js diff --git a/src/components/FlameLinkStructure.js b/src/components/FlameLinkStructure.js new file mode 100644 index 0000000..ccf4c7d --- /dev/null +++ b/src/components/FlameLinkStructure.js @@ -0,0 +1,54 @@ +import React, { Component, Fragment} from 'react'; +import Grid from '@material-ui/core/Grid'; +import Paper from '@material-ui/core/Paper'; +import Typography from '@material-ui/core/Typography'; +import flamelinkApp from '../flamelink.js'; + +class FlameLinkStructure extends Component { + constructor() { + super(); + + this.state = { + schemaContent: '', + } + + flamelinkApp.content.get('martenSchemaDemo') + .then(result => this.setState({ + schemaContent: result + })) + } + + getContent(key, type){ + if (type == 'text'){ + return this.state.schemaContent[key] + } + if (type == 'media'){ + for (var val in this.state.schemaContent[key]){ + console.log(this.state.schemaContent[key][val]); + flamelinkApp.storage.getURL(this.state.schemaContent[key][val]) + .then(url => console.log('File URL:', url)) + } + } + } + + render() { + const lg = this.props.field.gridColumns.lg; + const md = this.props.field.gridColumns.md; + const sm = this.props.field.gridColumns.sm; + const xs = this.props.field.gridColumns.xs; + return( + + + + HEADER + + + {this.getContent(this.props.field.key, this.props.type)} + + + + ); + } +} + +export default FlameLinkStructure; \ No newline at end of file From 3566fc52529ca55541508a3984fb272d05a9e347 Mon Sep 17 00:00:00 2001 From: ajmaley Date: Sat, 27 Oct 2018 13:00:23 -0400 Subject: [PATCH 05/31] Added material UI icons package --- package-lock.json | 21 +++++++++++++++++++++ package.json | 1 + 2 files changed, 22 insertions(+) diff --git a/package-lock.json b/package-lock.json index ac8d216..94480ea 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9349,6 +9349,27 @@ "object-visit": "^1.0.0" } }, + "material-ui-icons": { + "version": "1.0.0-beta.36", + "resolved": "https://registry.npmjs.org/material-ui-icons/-/material-ui-icons-1.0.0-beta.36.tgz", + "integrity": "sha512-7rS6b2EV5QXCB/gTi/Ac9Wbxd+h9EZv1Td3rLLJe4IER8mVHRgdqZccB3EsjW2DrJ7opdY1+8X3/vyrS7CQNpg==", + "requires": { + "recompose": "^0.26.0" + }, + "dependencies": { + "recompose": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/recompose/-/recompose-0.26.0.tgz", + "integrity": "sha512-KwOu6ztO0mN5vy3+zDcc45lgnaUoaQse/a5yLVqtzTK13czSWnFGmXbQVmnoMgDkI5POd1EwIKSbjU1V7xdZog==", + "requires": { + "change-emitter": "^0.1.2", + "fbjs": "^0.8.1", + "hoist-non-react-statics": "^2.3.1", + "symbol-observable": "^1.0.4" + } + } + } + }, "math-expression-evaluator": { "version": "1.2.17", "resolved": "https://registry.npmjs.org/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz", diff --git a/package.json b/package.json index e45497e..de0dbff 100644 --- a/package.json +++ b/package.json @@ -9,6 +9,7 @@ "firebase-admin": "^6.0.0", "flamelink": "^0.19.2", "google-maps-react": "^2.0.2", + "material-ui-icons": "^1.0.0-beta.36", "moment": "^2.22.2", "react": "^16.5.1", "react-dom": "^16.5.1", From 054c67db51af3de7740cd99f60cf9ac43dec3d23 Mon Sep 17 00:00:00 2001 From: ajmaley Date: Sat, 27 Oct 2018 13:24:25 -0400 Subject: [PATCH 06/31] Merged flamelink branch with develop and added info page to menu. The content on the info page may populate the home page in the future. --- src/components/Main.js | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/components/Main.js b/src/components/Main.js index 62336af..984555e 100644 --- a/src/components/Main.js +++ b/src/components/Main.js @@ -16,10 +16,12 @@ 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 InfoIcon from '@material-ui/icons/Info'; 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 Info from '../pages/Info'; import Quiz from '../pages/QuizPage'; import SightingList from '../pages/SightingList'; import Report from '../pages/Report'; @@ -110,6 +112,10 @@ class ResponsiveDrawer extends React.Component { + this.nav('Info')}> + + + @@ -189,6 +195,7 @@ class ResponsiveDrawer extends React.Component { {this.state.key === 'Report' && } {this.state.key === 'Map' && } {this.state.key === 'List' && } + {this.state.key === 'Info' && } {this.state.key === 'Easy-Quiz' && } {this.state.key === 'Medium-Quiz' && } {this.state.key === 'Hard-Quiz' && } From 5182b92b820974ba613d37f767af235e4fd84665 Mon Sep 17 00:00:00 2001 From: wildscotsmen Date: Sat, 27 Oct 2018 15:15:47 -0400 Subject: [PATCH 07/31] Fixed issue from merge conflict. --- src/components/SightingMap.js | 38 ++++++++++++----------------------- 1 file changed, 13 insertions(+), 25 deletions(-) diff --git a/src/components/SightingMap.js b/src/components/SightingMap.js index 98b609a..72790de 100644 --- a/src/components/SightingMap.js +++ b/src/components/SightingMap.js @@ -208,7 +208,10 @@ export class MapContainer extends Component { } } -<<<<<<< HEAD + /** + * Determines marker icon based on the + * sighting type. + */ sightingIcon = (type) => { let pinIcon @@ -230,10 +233,10 @@ export class MapContainer extends Component { } return pinIcon -======= + } + formatDate = date => { return (moment(date, "YYYY-MM").format("MMMM YYYY").toString()) ->>>>>>> 48273519cbb4fe2cd134adbfa4e7814237f3021a } // Set the state of the component to contain user coordinates and initial @@ -267,30 +270,11 @@ export class MapContainer extends Component { position={this.state.myLatLng} onClick={this.onMarkerClick} type={'You are here'} - /> - -<<<<<<< HEAD - { this.state.sightings.map((sighting) => { + /> + {this.state.sightings.map((sighting) => { let pinIcon = this.sightingIcon(sighting.type) - return ( - { return ( Date: {this.formatDate(sighting.date)}} time = {Time: {getTime(sighting.time)}} description = {Description: {sighting.desc}} ->>>>>>> 48273519cbb4fe2cd134adbfa4e7814237f3021a + icon={{ + url: pinIcon, + anchor: new google.maps.Point(32,32), + scaledSize: new google.maps.Size(32,32) + }} /> ) })} From 88490b4f2d615237142d962324d0205f24ce3032 Mon Sep 17 00:00:00 2001 From: ajmaley Date: Tue, 30 Oct 2018 19:50:38 -0400 Subject: [PATCH 08/31] Add Firebase admin SDK --- package-lock.json | 1395 +++++++++++++---- package.json | 5 +- src/firebase.js | 15 +- src/flamelink.js | 2 +- ...on-firebase-adminsdk-zvjmp-c177ac648f.json | 12 + 5 files changed, 1135 insertions(+), 294 deletions(-) create mode 100644 src/keys/marten-application-firebase-adminsdk-zvjmp-c177ac648f.json diff --git a/package-lock.json b/package-lock.json index 94480ea..14f5192 100644 --- a/package-lock.json +++ b/package-lock.json @@ -76,6 +76,424 @@ "@firebase/webchannel-wrapper": "0.2.10", "grpc": "1.13.1", "tslib": "1.9.0" + }, + "dependencies": { + "grpc": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/grpc/-/grpc-1.13.1.tgz", + "integrity": "sha512-yl0xChnlUISTefOPU2NQ1cYPh5m/DTatEUV6jdRyQPE9NCrtPq7Gn6J2alMTglN7ufYbJapOd00dvhGurHH6HQ==", + "requires": { + "lodash": "^4.17.5", + "nan": "^2.0.0", + "node-pre-gyp": "^0.10.0", + "protobufjs": "^5.0.3" + }, + "dependencies": { + "abbrev": { + "version": "1.1.1", + "bundled": true + }, + "ansi-regex": { + "version": "2.1.1", + "bundled": true + }, + "aproba": { + "version": "1.2.0", + "bundled": true + }, + "are-we-there-yet": { + "version": "1.1.5", + "bundled": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "balanced-match": { + "version": "1.0.0", + "bundled": true + }, + "brace-expansion": { + "version": "1.1.11", + "bundled": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "chownr": { + "version": "1.0.1", + "bundled": true + }, + "code-point-at": { + "version": "1.1.0", + "bundled": true + }, + "concat-map": { + "version": "0.0.1", + "bundled": true + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true + }, + "core-util-is": { + "version": "1.0.2", + "bundled": true + }, + "debug": { + "version": "2.6.9", + "bundled": true, + "requires": { + "ms": "2.0.0" + } + }, + "deep-extend": { + "version": "0.6.0", + "bundled": true + }, + "delegates": { + "version": "1.0.0", + "bundled": true + }, + "detect-libc": { + "version": "1.0.3", + "bundled": true + }, + "fs-minipass": { + "version": "1.2.5", + "bundled": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true + }, + "gauge": { + "version": "2.7.4", + "bundled": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "glob": { + "version": "7.1.2", + "bundled": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "has-unicode": { + "version": "2.0.1", + "bundled": true + }, + "iconv-lite": { + "version": "0.4.23", + "bundled": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ignore-walk": { + "version": "3.0.1", + "bundled": true, + "requires": { + "minimatch": "^3.0.4" + } + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.3", + "bundled": true + }, + "ini": { + "version": "1.3.5", + "bundled": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "bundled": true + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.0", + "bundled": true + }, + "minipass": { + "version": "2.3.3", + "bundled": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + }, + "minizlib": { + "version": "1.1.0", + "bundled": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "mkdirp": { + "version": "0.5.1", + "bundled": true, + "requires": { + "minimist": "0.0.8" + }, + "dependencies": { + "minimist": { + "version": "0.0.8", + "bundled": true + } + } + }, + "ms": { + "version": "2.0.0", + "bundled": true + }, + "needle": { + "version": "2.2.1", + "bundled": true, + "requires": { + "debug": "^2.1.2", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + } + }, + "node-pre-gyp": { + "version": "0.10.3", + "bundled": true, + "requires": { + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.1", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.2.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4" + } + }, + "nopt": { + "version": "4.0.1", + "bundled": true, + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + }, + "npm-bundled": { + "version": "1.0.3", + "bundled": true + }, + "npm-packlist": { + "version": "1.1.11", + "bundled": true, + "requires": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1" + } + }, + "npmlog": { + "version": "4.1.2", + "bundled": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "bundled": true + }, + "object-assign": { + "version": "4.1.1", + "bundled": true + }, + "once": { + "version": "1.4.0", + "bundled": true, + "requires": { + "wrappy": "1" + } + }, + "os-homedir": { + "version": "1.0.2", + "bundled": true + }, + "os-tmpdir": { + "version": "1.0.2", + "bundled": true + }, + "osenv": { + "version": "0.1.5", + "bundled": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true + }, + "process-nextick-args": { + "version": "2.0.0", + "bundled": true + }, + "rc": { + "version": "1.2.8", + "bundled": true, + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + } + }, + "readable-stream": { + "version": "2.3.6", + "bundled": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "rimraf": { + "version": "2.6.2", + "bundled": true, + "requires": { + "glob": "^7.0.5" + } + }, + "safe-buffer": { + "version": "5.1.2", + "bundled": true + }, + "safer-buffer": { + "version": "2.1.2", + "bundled": true + }, + "sax": { + "version": "1.2.4", + "bundled": true + }, + "semver": { + "version": "5.5.0", + "bundled": true + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "bundled": true + }, + "tar": { + "version": "4.4.4", + "bundled": true, + "requires": { + "chownr": "^1.0.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.3.3", + "minizlib": "^1.1.0", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.2", + "yallist": "^3.0.2" + } + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true + }, + "wide-align": { + "version": "1.1.3", + "bundled": true, + "requires": { + "string-width": "^1.0.2 || 2" + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true + }, + "yallist": { + "version": "3.0.2", + "bundled": true + } + } + } } }, "@firebase/firestore-types": { @@ -207,9 +625,9 @@ } }, "@google-cloud/firestore": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/@google-cloud/firestore/-/firestore-0.16.1.tgz", - "integrity": "sha512-xHb4OdRb0OP0x/8w58WJERtCi9Pr+CsloiUlVAq6fFjSyEcmxgL0V+swE8A/2rI5NGQGwtrN57xwDcis5UM/cQ==", + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/@google-cloud/firestore/-/firestore-0.18.0.tgz", + "integrity": "sha512-lofPnXFkWjRSVfXW995k62u+x3jhJo5dKmqVemgHBWIHC8YIpyLV05VjOdhAWhOQocLSJP+SS/RN7SgcsszszA==", "optional": true, "requires": { "@google-cloud/projectify": "^0.3.0", @@ -217,8 +635,8 @@ "deep-equal": "^1.0.1", "extend": "^3.0.1", "functional-red-black-tree": "^1.0.1", - "google-gax": "^0.18.0", - "google-proto-files": "^0.16.1", + "google-gax": "^0.20.0", + "google-proto-files": "^0.17.0", "is": "^3.2.1", "lodash.merge": "^4.6.1", "protobufjs": "^6.8.6", @@ -226,9 +644,9 @@ }, "dependencies": { "@types/node": { - "version": "10.11.4", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.11.4.tgz", - "integrity": "sha512-ojnbBiKkZFYRfQpmtnnWTMw+rzGp/JiystjluW9jgN3VzRwilXddJ6aGQ9V/7iuDG06SBgn7ozW9k3zcAnYjYQ==", + "version": "10.12.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.12.1.tgz", + "integrity": "sha512-i1sl+WCX2OCHeUi9oi7PiCNUtYFrpWhpcx878vpeq/tlZTKzcFdHePlyFHVbWqeuKN0SRPl/9ZFDSTsfv9h7VQ==", "optional": true }, "long": { @@ -261,9 +679,9 @@ } }, "@google-cloud/projectify": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@google-cloud/projectify/-/projectify-0.3.0.tgz", - "integrity": "sha512-ic3vU+rBLlQ9rU6vyMcQ/GoYQX9hP0P56jdbnSkGvXrVnO1DtYrkPV3Qg/NUrpAfKnmNC4hb0O/v2hCj8uGnbQ==", + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@google-cloud/projectify/-/projectify-0.3.1.tgz", + "integrity": "sha512-HvugQ8fC87kTNGs9ZQTTEwrJt67zfero9lDQCukJvAC2IuIyS1/6h4NqHBZK9lOnsmfHTQYhPq7GD2vzWEcm6g==", "optional": true }, "@google-cloud/storage": { @@ -303,6 +721,15 @@ } } }, + "@grpc/grpc-js": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-0.2.0.tgz", + "integrity": "sha512-89xjKxo3iuc8Gsln3brtXfTUV8H2UPzWBEJ/iVD1YlSqp+LomEC1L700/PwyWRCX4rdJnOpuv4RCGE8zrOSlyA==", + "optional": true, + "requires": { + "lodash": "^4.17.4" + } + }, "@grpc/proto-loader": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.3.0.tgz", @@ -316,9 +743,9 @@ }, "dependencies": { "@types/node": { - "version": "9.6.34", - "resolved": "https://registry.npmjs.org/@types/node/-/node-9.6.34.tgz", - "integrity": "sha512-PzJpSs2afoYqBA4yLBgaKUdZRk8+1yvkxcUBW6958h4vYOC+pc4k4C+QmQ6AO5Pt7uA4EIIboFog6YNCuITD0g==", + "version": "9.6.35", + "resolved": "https://registry.npmjs.org/@types/node/-/node-9.6.35.tgz", + "integrity": "sha512-h5zvHS8wXHGa+Gcqs9K8vqCgOtqjr0+NqG/DDJmQIX1wpR9HivAfgV8bjcD3mGM4bPfQw5Aneb2Pn8355L83jA==", "optional": true }, "long": { @@ -349,9 +776,9 @@ }, "dependencies": { "@types/node": { - "version": "10.11.4", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.11.4.tgz", - "integrity": "sha512-ojnbBiKkZFYRfQpmtnnWTMw+rzGp/JiystjluW9jgN3VzRwilXddJ6aGQ9V/7iuDG06SBgn7ozW9k3zcAnYjYQ==", + "version": "10.12.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.12.1.tgz", + "integrity": "sha512-i1sl+WCX2OCHeUi9oi7PiCNUtYFrpWhpcx878vpeq/tlZTKzcFdHePlyFHVbWqeuKN0SRPl/9ZFDSTsfv9h7VQ==", "optional": true } } @@ -519,9 +946,9 @@ } }, "@types/lodash": { - "version": "4.14.116", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.116.tgz", - "integrity": "sha512-lRnAtKnxMXcYYXqOiotTmJd74uawNWuPnsnPrrO7HiFuE3npE2iQhfABatbYDyxTNqZNuXzcKGhw37R7RjBFLg==", + "version": "4.14.117", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.117.tgz", + "integrity": "sha512-xyf2m6tRbz8qQKcxYZa7PA4SllYcay+eh25DN3jmNYY6gSTL7Htc/bttVdkqj2wfJGbeWlQiX8pIyJpKU+tubw==", "optional": true }, "@types/long": { @@ -530,9 +957,9 @@ "integrity": "sha512-1w52Nyx4Gq47uuu0EVcsHBxZFJgurQ+rTKS3qMHxR1GY2T8c2AJYd6vZoZ9q1rupaDjU0yT+Jc2XTyXkjeMA+Q==" }, "@types/node": { - "version": "8.10.34", - "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.34.tgz", - "integrity": "sha512-alypNiaAEd0RBGXoWehJ2gchPYCITmw4CYBoB5nDlji8l8on7FsklfdfIs4DDmgpKLSX3OF3ha6SV+0W7cTzUA==" + "version": "8.10.36", + "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.36.tgz", + "integrity": "sha512-SL6KhfM7PTqiFmbCW3eVNwVBZ+88Mrzbuvn9olPsfv43mbiWaFY+nRcz/TGGku0/lc2FepdMbImdMY1JrQ+zbw==" }, "@types/prop-types": { "version": "15.5.5", @@ -560,9 +987,9 @@ } }, "@types/request": { - "version": "2.47.1", - "resolved": "https://registry.npmjs.org/@types/request/-/request-2.47.1.tgz", - "integrity": "sha512-TV3XLvDjQbIeVxJ1Z3oCTDk/KuYwwcNKVwz2YaT0F5u86Prgc4syDAp6P96rkTQQ4bIdh+VswQIC9zS6NjY7/g==", + "version": "2.48.0", + "resolved": "https://registry.npmjs.org/@types/request/-/request-2.48.0.tgz", + "integrity": "sha512-KnfoOtqXKllSqfXSEvGTd8KDkNlpHs+PWr6I6XiEIWk/jckH3pNmWDXNFZyPkB9wApb8vzDq2wMByM/0GFSmXg==", "optional": true, "requires": { "@types/caseless": "*", @@ -614,7 +1041,8 @@ "acorn-es7-plugin": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/acorn-es7-plugin/-/acorn-es7-plugin-1.1.7.tgz", - "integrity": "sha1-8u4fMiipDurRJF+asZIusucdM2s=" + "integrity": "sha1-8u4fMiipDurRJF+asZIusucdM2s=", + "optional": true }, "acorn-globals": { "version": "3.1.0", @@ -651,12 +1079,20 @@ "resolved": "https://registry.npmjs.org/address/-/address-1.0.3.tgz", "integrity": "sha512-z55ocwKBRLryBs394Sm3ushTtBeg6VAeuku7utSoSnsJKvKcnXFIyC6vh27n3rXyxSgkJBBCAvyOn7gSUcTYjg==" }, - "ajv": { - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", - "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", + "agent-base": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.2.1.tgz", + "integrity": "sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg==", + "optional": true, + "requires": { + "es6-promisify": "^5.0.0" + } + }, + "ajv": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.0.0.tgz", + "integrity": "sha1-CTvsTZusjkUF5UGuEOthUCaGhMI=", "requires": { - "co": "^4.6.0", "fast-deep-equal": "^1.0.0", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.3.0" @@ -2195,7 +2631,8 @@ "call-signature": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/call-signature/-/call-signature-0.0.2.tgz", - "integrity": "sha1-qEq8glpV70yysCi9dOIFpluaSZY=" + "integrity": "sha1-qEq8glpV70yysCi9dOIFpluaSZY=", + "optional": true }, "caller-path": { "version": "0.1.0", @@ -3531,7 +3968,8 @@ "diff-match-patch": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/diff-match-patch/-/diff-match-patch-1.0.4.tgz", - "integrity": "sha512-Uv3SW8bmH9nAtHKaKSanOQmj2DnlH65fUpcrMdfdaOxUG02QQ4YGZ8AE7kKOMisF7UqvOlGKVYWRvezdncW9lg==" + "integrity": "sha512-Uv3SW8bmH9nAtHKaKSanOQmj2DnlH65fUpcrMdfdaOxUG02QQ4YGZ8AE7kKOMisF7UqvOlGKVYWRvezdncW9lg==", + "optional": true }, "diffie-hellman": { "version": "5.0.3", @@ -3646,6 +4084,11 @@ "urijs": "^1.16.1" } }, + "dom-walk": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.1.tgz", + "integrity": "sha1-ZyIm3HTI95mtNTB9+TaroRrNYBg=" + }, "domain-browser": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", @@ -3702,9 +4145,9 @@ "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" }, "duplexify": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.6.0.tgz", - "integrity": "sha512-fO3Di4tBKJpYTFHAxTU00BcfWMY9w24r/x21a6rZRbsD/ToUgGxsMbiGRmB7uVAXeGKXD9MwiLZa5E97EVgIRQ==", + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.6.1.tgz", + "integrity": "sha512-vM58DwdnKmty+FSPzT14K9JXb90H+j5emaR4KYbr2KTIz00WHGbWOe5ghQTx233ZCLZtrGDALzKwcjEtSt35mA==", "requires": { "end-of-stream": "^1.0.0", "inherits": "^2.0.1", @@ -3773,6 +4216,7 @@ "version": "1.3.1", "resolved": "https://registry.npmjs.org/empower/-/empower-1.3.1.tgz", "integrity": "sha512-uB6/ViBaawOO/uujFADTK3SqdYlxYNn+N4usK9MRKZ4Hbn/1QSy8k2PezxCA2/+JGbF8vd/eOfghZ90oOSDZCA==", + "optional": true, "requires": { "core-js": "^2.0.0", "empower-core": "^1.2.0" @@ -3782,6 +4226,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/empower-core/-/empower-core-1.2.0.tgz", "integrity": "sha512-g6+K6Geyc1o6FdXs9HwrXleCFan7d66G5xSCfSF7x1mJDCes6t0om9lFQG3zOrzh3Bkb/45N0cZ5Gqsf7YrzGQ==", + "optional": true, "requires": { "call-signature": "0.0.2", "core-js": "^2.0.0" @@ -3906,6 +4351,15 @@ "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.5.tgz", "integrity": "sha512-n6wvpdE43VFtJq+lUDYDBFUwV8TZbuGXLV4D6wKafg13ldznKsyEvatubnmUe31zcvelSzOHF+XbaT+Bl9ObDg==" }, + "es6-promisify": { + "version": "5.0.0", + "resolved": "http://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", + "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", + "optional": true, + "requires": { + "es6-promise": "^4.0.3" + } + }, "es6-set": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz", @@ -4022,6 +4476,17 @@ "text-table": "~0.2.0" }, "dependencies": { + "ajv": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", + "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", + "requires": { + "co": "^4.6.0", + "fast-deep-equal": "^1.0.0", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.3.0" + } + }, "ansi-regex": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", @@ -4277,6 +4742,7 @@ "version": "1.8.1", "resolved": "https://registry.npmjs.org/espurify/-/espurify-1.8.1.tgz", "integrity": "sha512-ZDko6eY/o+D/gHCWyHTU85mKDgYcS4FJj7S+YD6WIInm7GQ6AnOjmcL4+buFV/JOztVLELi/7MmuGU5NHta0Mg==", + "optional": true, "requires": { "core-js": "^2.0.0" } @@ -4976,15 +5442,15 @@ } }, "firebase-admin": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/firebase-admin/-/firebase-admin-6.0.0.tgz", - "integrity": "sha512-ai7ensTAZx9iF6z/lMn7JzFJYSl6+uXYm53GGhWlph+npnQli10FF9YB97OjcVUghapDEWzmb6J0VMtB965nsw==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/firebase-admin/-/firebase-admin-6.1.0.tgz", + "integrity": "sha512-pleUtbaaEtqMSJYsz4kNTiYiFs0XR+NsFX+ih+80EtMrm78W3VPojm4VQ3CJXDxWYAaEv00WXgLeQypRSVV1HQ==", "requires": { "@firebase/app": "^0.3.1", "@firebase/database": "^0.3.1", - "@google-cloud/firestore": "^0.16.0", + "@google-cloud/firestore": "^0.18.0", "@google-cloud/storage": "^1.6.0", - "@types/google-cloud__storage": "^1.1.7", + "@types/google-cloud__storage": "^1.7.1", "@types/node": "^8.0.53", "jsonwebtoken": "8.1.0", "node-forge": "0.7.4" @@ -6556,9 +7022,10 @@ "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=" }, "gcp-metadata": { - "version": "0.6.3", - "resolved": "http://registry.npmjs.org/gcp-metadata/-/gcp-metadata-0.6.3.tgz", - "integrity": "sha512-MSmczZctbz91AxCvqp9GHBoZOSbJKAICV7Ow/AIWSJZRrRchUd5NL1b2P4OfP+4m490BEUPhhARfpHdqCxuCvg==", + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-0.7.0.tgz", + "integrity": "sha512-ffjC09amcDWjh3VZdkDngIo7WoluyC5Ag9PAYxZbmQLOLNI8lvPtoKTSCyU54j2gwy5roZh6sSMTfkY2ct7K3g==", + "optional": true, "requires": { "axios": "^0.18.0", "extend": "^3.0.1", @@ -6641,6 +7108,22 @@ "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz", "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=" }, + "global": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/global/-/global-4.3.2.tgz", + "integrity": "sha1-52mJJopsdMOJCLEwWxD8DjlOnQ8=", + "requires": { + "min-document": "^2.19.0", + "process": "~0.5.1" + }, + "dependencies": { + "process": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/process/-/process-0.5.2.tgz", + "integrity": "sha1-FjjYqONML0QKkduVq5rrZ3/Bhc8=" + } + } + }, "global-dirs": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", @@ -6690,17 +7173,19 @@ } }, "google-auth-library": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-1.6.1.tgz", - "integrity": "sha512-jYiWC8NA9n9OtQM7ANn0Tk464do9yhKEtaJ72pKcaBiEwn4LwcGYIYOfwtfsSm3aur/ed3tlSxbmg24IAT6gAg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-2.0.1.tgz", + "integrity": "sha512-CWLKZxqYw4SE+fE3GWbVT9r/10h75w8lB3cdmmLpLtCfccFDcsI84qI5rx7npemlrHtKJh3C2HUz4s6SihCeIQ==", + "optional": true, "requires": { "axios": "^0.18.0", - "gcp-metadata": "^0.6.3", + "gcp-metadata": "^0.7.0", "gtoken": "^2.3.0", + "https-proxy-agent": "^2.2.1", "jws": "^3.1.5", "lodash.isstring": "^4.0.1", "lru-cache": "^4.1.3", - "retry-axios": "^0.3.2" + "semver": "^5.5.0" } }, "google-auto-auth": { @@ -6712,32 +7197,153 @@ "gcp-metadata": "^0.6.1", "google-auth-library": "^1.3.1", "request": "^2.79.0" + }, + "dependencies": { + "gcp-metadata": { + "version": "0.6.3", + "resolved": "http://registry.npmjs.org/gcp-metadata/-/gcp-metadata-0.6.3.tgz", + "integrity": "sha512-MSmczZctbz91AxCvqp9GHBoZOSbJKAICV7Ow/AIWSJZRrRchUd5NL1b2P4OfP+4m490BEUPhhARfpHdqCxuCvg==", + "requires": { + "axios": "^0.18.0", + "extend": "^3.0.1", + "retry-axios": "0.3.2" + } + }, + "google-auth-library": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-1.6.1.tgz", + "integrity": "sha512-jYiWC8NA9n9OtQM7ANn0Tk464do9yhKEtaJ72pKcaBiEwn4LwcGYIYOfwtfsSm3aur/ed3tlSxbmg24IAT6gAg==", + "requires": { + "axios": "^0.18.0", + "gcp-metadata": "^0.6.3", + "gtoken": "^2.3.0", + "jws": "^3.1.5", + "lodash.isstring": "^4.0.1", + "lru-cache": "^4.1.3", + "retry-axios": "^0.3.2" + } + } } }, "google-gax": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/google-gax/-/google-gax-0.18.0.tgz", - "integrity": "sha512-cF2s3aTw1cWDHsjaYfIizJZT0KJF0FSM3laiCX4O/K0ZcdmeE9PitG2bxRH+dY+Sz094//m+JoH1hBtSyOf67A==", + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/google-gax/-/google-gax-0.20.0.tgz", + "integrity": "sha512-JoaRCQtks60zuB3c5/5y60jG+xFBP67yYIgF6UuuDDVZtj/Z6kCKqjrGWNXEzFH2jolHZcvocST3JMwA/XClvA==", "optional": true, "requires": { + "@grpc/grpc-js": "^0.2.0", "@grpc/proto-loader": "^0.3.0", "duplexify": "^3.6.0", "extend": "^3.0.1", "globby": "^8.0.1", - "google-auth-library": "^1.6.1", + "google-auth-library": "^2.0.0", "google-proto-files": "^0.16.0", "grpc": "^1.12.2", "is-stream-ended": "^0.1.4", "lodash": "^4.17.10", "protobufjs": "^6.8.8", "retry-request": "^4.0.0", + "semver": "^5.5.1", "through2": "^2.0.3" }, "dependencies": { "@types/node": { - "version": "10.11.4", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.11.4.tgz", - "integrity": "sha512-ojnbBiKkZFYRfQpmtnnWTMw+rzGp/JiystjluW9jgN3VzRwilXddJ6aGQ9V/7iuDG06SBgn7ozW9k3zcAnYjYQ==", + "version": "10.12.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.12.1.tgz", + "integrity": "sha512-i1sl+WCX2OCHeUi9oi7PiCNUtYFrpWhpcx878vpeq/tlZTKzcFdHePlyFHVbWqeuKN0SRPl/9ZFDSTsfv9h7VQ==" + }, + "globby": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/globby/-/globby-8.0.1.tgz", + "integrity": "sha512-oMrYrJERnKBLXNLVTqhm3vPEdJ/b2ZE28xN4YARiix1NOIOBPEpOUnm844K1iu/BkphCaf2WNFwMszv8Soi1pw==", + "requires": { + "array-union": "^1.0.1", + "dir-glob": "^2.0.0", + "fast-glob": "^2.0.2", + "glob": "^7.1.2", + "ignore": "^3.3.5", + "pify": "^3.0.0", + "slash": "^1.0.0" + } + }, + "google-proto-files": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/google-proto-files/-/google-proto-files-0.16.1.tgz", + "integrity": "sha512-ykdhaYDiU/jlyrkzZDPemraKwVIgLT31XMHVNSJW//R9VED56hqSDRMx1Jlxbf0O4iDZnBWQ0JQLHbM2r5+wuA==", + "optional": true, + "requires": { + "globby": "^8.0.0", + "power-assert": "^1.4.4", + "protobufjs": "^6.8.0" + } + }, + "long": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", + "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" + }, + "protobufjs": { + "version": "6.8.8", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.8.8.tgz", + "integrity": "sha512-AAmHtD5pXgZfi7GMpllpO3q1Xw1OYldr+dMUlAnffGTAhqkg72WdmSY71uKBF/JuyiKs8psYbtKrhi0ASCD8qw==", + "requires": { + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.4", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.0", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.0", + "@types/long": "^4.0.0", + "@types/node": "^10.1.0", + "long": "^4.0.0" + } + } + } + }, + "google-maps-react": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/google-maps-react/-/google-maps-react-2.0.2.tgz", + "integrity": "sha512-6cYauGwt22haDUrWxKQ6yoNOqjiuxHo8YYcmb+aBvNICokdXmZOUB6Ah4vD5VexMVlrwP2PFqA/D8sHpEB52KA==" + }, + "google-p12-pem": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-1.0.2.tgz", + "integrity": "sha512-+EuKr4CLlGsnXx4XIJIVkcKYrsa2xkAmCvxRhX2HsazJzUBAJ35wARGeApHUn4nNfPD03Vl057FskNr20VaCyg==", + "requires": { + "node-forge": "^0.7.4", + "pify": "^3.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" + } + } + }, + "google-proto-files": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/google-proto-files/-/google-proto-files-0.17.0.tgz", + "integrity": "sha512-59ZolxRM3XPNp+10dnrzAHv2PKgZUEV9p57Mi1fJED3wZN4Gk+4j1BH/YnSQeLLsWBuVGCWQW4Z2qBxSujmTag==", + "optional": true, + "requires": { + "globby": "^8.0.0", + "protobufjs": "^6.8.0" + }, + "dependencies": { + "@types/node": { + "version": "10.12.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.12.1.tgz", + "integrity": "sha512-i1sl+WCX2OCHeUi9oi7PiCNUtYFrpWhpcx878vpeq/tlZTKzcFdHePlyFHVbWqeuKN0SRPl/9ZFDSTsfv9h7VQ==", "optional": true }, "globby": { @@ -6790,88 +7396,6 @@ } } }, - "google-maps-react": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/google-maps-react/-/google-maps-react-2.0.2.tgz", - "integrity": "sha512-6cYauGwt22haDUrWxKQ6yoNOqjiuxHo8YYcmb+aBvNICokdXmZOUB6Ah4vD5VexMVlrwP2PFqA/D8sHpEB52KA==" - }, - "google-p12-pem": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-1.0.2.tgz", - "integrity": "sha512-+EuKr4CLlGsnXx4XIJIVkcKYrsa2xkAmCvxRhX2HsazJzUBAJ35wARGeApHUn4nNfPD03Vl057FskNr20VaCyg==", - "requires": { - "node-forge": "^0.7.4", - "pify": "^3.0.0" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" - } - } - }, - "google-proto-files": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/google-proto-files/-/google-proto-files-0.16.1.tgz", - "integrity": "sha512-ykdhaYDiU/jlyrkzZDPemraKwVIgLT31XMHVNSJW//R9VED56hqSDRMx1Jlxbf0O4iDZnBWQ0JQLHbM2r5+wuA==", - "requires": { - "globby": "^8.0.0", - "power-assert": "^1.4.4", - "protobufjs": "^6.8.0" - }, - "dependencies": { - "@types/node": { - "version": "10.11.4", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.11.4.tgz", - "integrity": "sha512-ojnbBiKkZFYRfQpmtnnWTMw+rzGp/JiystjluW9jgN3VzRwilXddJ6aGQ9V/7iuDG06SBgn7ozW9k3zcAnYjYQ==" - }, - "globby": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/globby/-/globby-8.0.1.tgz", - "integrity": "sha512-oMrYrJERnKBLXNLVTqhm3vPEdJ/b2ZE28xN4YARiix1NOIOBPEpOUnm844K1iu/BkphCaf2WNFwMszv8Soi1pw==", - "requires": { - "array-union": "^1.0.1", - "dir-glob": "^2.0.0", - "fast-glob": "^2.0.2", - "glob": "^7.1.2", - "ignore": "^3.3.5", - "pify": "^3.0.0", - "slash": "^1.0.0" - } - }, - "long": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", - "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" - }, - "protobufjs": { - "version": "6.8.8", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.8.8.tgz", - "integrity": "sha512-AAmHtD5pXgZfi7GMpllpO3q1Xw1OYldr+dMUlAnffGTAhqkg72WdmSY71uKBF/JuyiKs8psYbtKrhi0ASCD8qw==", - "requires": { - "@protobufjs/aspromise": "^1.1.2", - "@protobufjs/base64": "^1.1.2", - "@protobufjs/codegen": "^2.0.4", - "@protobufjs/eventemitter": "^1.1.0", - "@protobufjs/fetch": "^1.1.0", - "@protobufjs/float": "^1.0.2", - "@protobufjs/inquire": "^1.1.0", - "@protobufjs/path": "^1.1.2", - "@protobufjs/pool": "^1.1.0", - "@protobufjs/utf8": "^1.1.0", - "@types/long": "^4.0.0", - "@types/node": "^10.1.0", - "long": "^4.0.0" - } - } - } - }, "got": { "version": "6.7.1", "resolved": "http://registry.npmjs.org/got/-/got-6.7.1.tgz", @@ -6901,9 +7425,9 @@ "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=" }, "grpc": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/grpc/-/grpc-1.13.1.tgz", - "integrity": "sha512-yl0xChnlUISTefOPU2NQ1cYPh5m/DTatEUV6jdRyQPE9NCrtPq7Gn6J2alMTglN7ufYbJapOd00dvhGurHH6HQ==", + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/grpc/-/grpc-1.15.1.tgz", + "integrity": "sha512-BfJ6BpFE93xQW69oYfgVQDxSb7LqdQbnddvhFq4tUsj7s0NAIRrrN3fmN2Bi3qpGFRemsKsWPIchw3YNNq2Xjg==", "requires": { "lodash": "^4.17.5", "nan": "^2.0.0", @@ -6913,23 +7437,19 @@ "dependencies": { "abbrev": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + "bundled": true }, "ansi-regex": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + "bundled": true }, "aproba": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" + "bundled": true }, "are-we-there-yet": { "version": "1.1.5", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", - "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", + "bundled": true, "requires": { "delegates": "^1.0.0", "readable-stream": "^2.0.6" @@ -6937,13 +7457,11 @@ }, "balanced-match": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + "bundled": true }, "brace-expansion": { "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "bundled": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -6951,69 +7469,57 @@ }, "chownr": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.0.1.tgz", - "integrity": "sha1-4qdQQqlVGQi+vSW4Uj1fl2nXkYE=" + "bundled": true }, "code-point-at": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" + "bundled": true }, "concat-map": { "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + "bundled": true }, "console-control-strings": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" + "bundled": true }, "core-util-is": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + "bundled": true }, "debug": { "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "bundled": true, "requires": { "ms": "2.0.0" } }, "deep-extend": { "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" + "bundled": true }, "delegates": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" + "bundled": true }, "detect-libc": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", - "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=" + "bundled": true }, "fs-minipass": { "version": "1.2.5", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.5.tgz", - "integrity": "sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ==", + "bundled": true, "requires": { "minipass": "^2.2.1" } }, "fs.realpath": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + "bundled": true }, "gauge": { "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "bundled": true, "requires": { "aproba": "^1.0.3", "console-control-strings": "^1.0.0", @@ -7027,8 +7533,7 @@ }, "glob": { "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "bundled": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -7040,29 +7545,25 @@ }, "has-unicode": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" + "bundled": true }, "iconv-lite": { "version": "0.4.23", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", - "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", + "bundled": true, "requires": { "safer-buffer": ">= 2.1.2 < 3" } }, "ignore-walk": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.1.tgz", - "integrity": "sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==", + "bundled": true, "requires": { "minimatch": "^3.0.4" } }, "inflight": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "bundled": true, "requires": { "once": "^1.3.0", "wrappy": "1" @@ -7070,44 +7571,37 @@ }, "inherits": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + "bundled": true }, "ini": { "version": "1.3.5", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" + "bundled": true }, "is-fullwidth-code-point": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "bundled": true, "requires": { "number-is-nan": "^1.0.0" } }, "isarray": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + "bundled": true }, "minimatch": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "bundled": true, "requires": { "brace-expansion": "^1.1.7" } }, "minimist": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" + "bundled": true }, "minipass": { "version": "2.3.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.3.3.tgz", - "integrity": "sha512-/jAn9/tEX4gnpyRATxgHEOV6xbcyxgT7iUnxo9Y3+OB0zX00TgKIv/2FZCf5brBbICcwbLqVv2ImjvWWrQMSYw==", + "bundled": true, "requires": { "safe-buffer": "^5.1.2", "yallist": "^3.0.0" @@ -7115,36 +7609,31 @@ }, "minizlib": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.1.0.tgz", - "integrity": "sha512-4T6Ur/GctZ27nHfpt9THOdRZNgyJ9FZchYO1ceg5S8Q3DNLCKYy44nCZzgCJgcvx2UM8czmqak5BCxJMrq37lA==", + "bundled": true, "requires": { "minipass": "^2.2.1" } }, "mkdirp": { "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "bundled": true, "requires": { "minimist": "0.0.8" }, "dependencies": { "minimist": { "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" + "bundled": true } } }, "ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "bundled": true }, "needle": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/needle/-/needle-2.2.1.tgz", - "integrity": "sha512-t/ZswCM9JTWjAdXS9VpvqhI2Ct2sL2MdY4fUXqGJaGBk13ge99ObqRksRTbBE56K+wxUXwwfZYOuZHifFW9q+Q==", + "version": "2.2.2", + "bundled": true, "requires": { "debug": "^2.1.2", "iconv-lite": "^0.4.4", @@ -7153,8 +7642,7 @@ }, "node-pre-gyp": { "version": "0.10.3", - "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.10.3.tgz", - "integrity": "sha512-d1xFs+C/IPS8Id0qPTZ4bUT8wWryfR/OzzAFxweG+uLN85oPzyo2Iw6bVlLQ/JOdgNonXLCoRyqDzDWq4iw72A==", + "bundled": true, "requires": { "detect-libc": "^1.0.2", "mkdirp": "^0.5.1", @@ -7170,8 +7658,7 @@ }, "nopt": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz", - "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=", + "bundled": true, "requires": { "abbrev": "1", "osenv": "^0.1.4" @@ -7179,13 +7666,11 @@ }, "npm-bundled": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.0.3.tgz", - "integrity": "sha512-ByQ3oJ/5ETLyglU2+8dBObvhfWXX8dtPZDMePCahptliFX2iIuhyEszyFk401PZUNQH20vvdW5MLjJxkwU80Ow==" + "bundled": true }, "npm-packlist": { "version": "1.1.11", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.1.11.tgz", - "integrity": "sha512-CxKlZ24urLkJk+9kCm48RTQ7L4hsmgSVzEk0TLGPzzyuFxD7VNgy5Sl24tOLMzQv773a/NeJ1ce1DKeacqffEA==", + "bundled": true, "requires": { "ignore-walk": "^3.0.1", "npm-bundled": "^1.0.1" @@ -7193,8 +7678,7 @@ }, "npmlog": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "bundled": true, "requires": { "are-we-there-yet": "~1.1.2", "console-control-strings": "~1.1.0", @@ -7204,36 +7688,30 @@ }, "number-is-nan": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" + "bundled": true }, "object-assign": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + "bundled": true }, "once": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "bundled": true, "requires": { "wrappy": "1" } }, "os-homedir": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" + "bundled": true }, "os-tmpdir": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" + "bundled": true }, "osenv": { "version": "0.1.5", - "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", - "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "bundled": true, "requires": { "os-homedir": "^1.0.0", "os-tmpdir": "^1.0.0" @@ -7241,18 +7719,15 @@ }, "path-is-absolute": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + "bundled": true }, "process-nextick-args": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" + "bundled": true }, "rc": { "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "bundled": true, "requires": { "deep-extend": "^0.6.0", "ini": "~1.3.0", @@ -7262,8 +7737,7 @@ }, "readable-stream": { "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "bundled": true, "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -7276,46 +7750,38 @@ }, "rimraf": { "version": "2.6.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", - "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", + "bundled": true, "requires": { "glob": "^7.0.5" } }, "safe-buffer": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "bundled": true }, "safer-buffer": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + "bundled": true }, "sax": { "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + "bundled": true }, "semver": { "version": "5.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", - "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==" + "bundled": true }, "set-blocking": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + "bundled": true }, "signal-exit": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" + "bundled": true }, "string-width": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "bundled": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -7324,29 +7790,25 @@ }, "string_decoder": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "bundled": true, "requires": { "safe-buffer": "~5.1.0" } }, "strip-ansi": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "bundled": true, "requires": { "ansi-regex": "^2.0.0" } }, "strip-json-comments": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" + "bundled": true }, "tar": { - "version": "4.4.4", - "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.4.tgz", - "integrity": "sha512-mq9ixIYfNF9SK0IS/h2HKMu8Q2iaCuhDDsZhdEag/FHv8fOaYld4vN7ouMgcSSt5WKZzPs8atclTcJm36OTh4w==", + "version": "4.4.6", + "bundled": true, "requires": { "chownr": "^1.0.1", "fs-minipass": "^1.2.5", @@ -7359,26 +7821,22 @@ }, "util-deprecate": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + "bundled": true }, "wide-align": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "bundled": true, "requires": { "string-width": "^1.0.2 || 2" } }, "wrappy": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + "bundled": true }, "yallist": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.2.tgz", - "integrity": "sha1-hFK0u36Dx8GI2AQcGoN8dz1ti7k=" + "bundled": true } } }, @@ -7442,6 +7900,19 @@ "requires": { "ajv": "^5.3.0", "har-schema": "^2.0.0" + }, + "dependencies": { + "ajv": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", + "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", + "requires": { + "co": "^4.6.0", + "fast-deep-equal": "^1.0.0", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.3.0" + } + } } }, "has": { @@ -7800,6 +8271,33 @@ "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=" }, + "https-proxy-agent": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.1.tgz", + "integrity": "sha512-HPCTS1LW51bcyMYbxUIOO4HEOlQ1/1qRaFWcyxvwaqUS9TY88aoEuHUY33kuAh1YhVVaDQhLZsnPd+XNARWZlQ==", + "optional": true, + "requires": { + "agent-base": "^4.1.0", + "debug": "^3.1.0" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "optional": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "optional": true + } + } + }, "hyphenate-style-name": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/hyphenate-style-name/-/hyphenate-style-name-1.0.2.tgz", @@ -8960,6 +9458,14 @@ "resolved": "https://registry.npmjs.org/jss-props-sort/-/jss-props-sort-6.0.0.tgz", "integrity": "sha512-E89UDcrphmI0LzmvYk25Hp4aE5ZBsXqMWlkFXS0EtPkunJkRr+WXdCNYbXbksIPnKlBenGB9OxzQY+mVc70S+g==" }, + "jss-rtl": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/jss-rtl/-/jss-rtl-0.2.3.tgz", + "integrity": "sha512-c9yOhTWldABdx+dds0XSXIbUcEWajBv+e7fl3zaiHCwOqbq4QiAdDTw7l4l5nqHAaGV6+33zMoS//KMMGpPA1A==", + "requires": { + "rtl-css-js": "^1.8.0" + } + }, "jss-template": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/jss-template/-/jss-template-1.0.1.tgz", @@ -9349,6 +9855,187 @@ "object-visit": "^1.0.0" } }, + "material-ui": { + "version": "1.0.0-beta.16", + "resolved": "https://registry.npmjs.org/material-ui/-/material-ui-1.0.0-beta.16.tgz", + "integrity": "sha1-4THB9xcHpnYIfwYuNKyUr7hdgr8=", + "requires": { + "babel-runtime": "^6.26.0", + "brcast": "^3.0.1", + "classnames": "^2.2.5", + "deepmerge": "^1.5.2", + "dom-helpers": "^3.2.1", + "hoist-non-react-statics": "^1.2.0", + "jss": "^8.1.0", + "jss-preset-default": "^3.0.0", + "jss-rtl": "^0.2.0", + "keycode": "^2.1.9", + "lodash": "^4.17.4", + "normalize-scroll-left": "^0.1.0", + "prop-types": "^15.6.0", + "react-event-listener": "^0.5.1", + "react-flow-types": "^0.2.0-beta.2", + "react-jss": "^7.2.0", + "react-popper": "^0.7.3", + "react-scrollbar-size": "^2.0.2", + "react-transition-group": "^2.2.1", + "recompose": "^0.26.0", + "scroll": "^2.0.1", + "warning": "^3.0.0" + }, + "dependencies": { + "@babel/runtime": { + "version": "7.0.0-beta.42", + "resolved": "http://registry.npmjs.org/@babel/runtime/-/runtime-7.0.0-beta.42.tgz", + "integrity": "sha512-iOGRzUoONLOtmCvjUsZv3mZzgCT6ljHQY5fr1qG1QIiJQwtM7zbPWGGpa3QWETq+UqwWyJnoi5XZDZRwZDFciQ==", + "requires": { + "core-js": "^2.5.3", + "regenerator-runtime": "^0.11.1" + } + }, + "deepmerge": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-1.5.2.tgz", + "integrity": "sha512-95k0GDqvBjZavkuvzx/YqVLv/6YYa17fz6ILMSf7neqQITCPbnfEnQvEgMPNjH4kgobe7+WIL0yJEHku+H3qtQ==" + }, + "hoist-non-react-statics": { + "version": "1.2.0", + "resolved": "http://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-1.2.0.tgz", + "integrity": "sha1-qkSM8JhtVcxAdzsXF0t90GbLfPs=" + }, + "jss": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/jss/-/jss-8.1.0.tgz", + "integrity": "sha512-NZ4CNAoPaPlM2rqHxPG5uGQbQEFZ9n1PITn0+wGIdAk2ZtA/F6el0SphLHf8So1Sx6N34hnVFFIuc32/hdsEzw==", + "requires": { + "is-in-browser": "^1.0.2", + "warning": "^3.0.0" + } + }, + "jss-camel-case": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/jss-camel-case/-/jss-camel-case-5.0.0.tgz", + "integrity": "sha512-vz11ip5EIlGuevtlUo9xIgiuD+it4Ebbb0+Y4o0A4oA8eOWY4aY7ihi/L7WvkQ54xnGOjUvLZ6nm2VYch2ufYg==" + }, + "jss-compose": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jss-compose/-/jss-compose-4.0.0.tgz", + "integrity": "sha512-VnsEziD2Lwrfwp10wx39FNybRLW5+RX/E2qQAXPAMbS+nHc0Jf2dC6ZiCfn5FaBGrpzLfIZ9MalTJDx4CQoMAQ==", + "requires": { + "warning": "^3.0.0" + } + }, + "jss-default-unit": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/jss-default-unit/-/jss-default-unit-7.0.0.tgz", + "integrity": "sha512-U1Oi1h45vFRuISr+g1DQ3Oua7CkNKNs47fTdiT/lHkuBMc6BBDUbPv9IbPPhk9gsEaX45Iy9TX8CAuaHLPCfEA==" + }, + "jss-expand": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/jss-expand/-/jss-expand-4.0.1.tgz", + "integrity": "sha512-LRIMXXChAOgnhwSqYLJg8MS6dI98bf/sg52pAg04pbjOAtjfzyS0JTnQAiyk3PxqR3nKFR/Yv44ahpIpkdcxVA==" + }, + "jss-extend": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/jss-extend/-/jss-extend-5.0.0.tgz", + "integrity": "sha512-fUp+9KipbdmzSfTxNHoT3mrFnE7fYn7EyHg3LTUexfpWrwj5Afkwb3iCfYV7GYCpg9OKDsqc18atwjHvSPWWKg==", + "requires": { + "warning": "^3.0.0" + } + }, + "jss-global": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/jss-global/-/jss-global-2.0.0.tgz", + "integrity": "sha512-/FSOMp4lF/vg47T/w8kKvL9tu7ka9am8N4izS63W81Qlay9hAq6xe9RxrPxygLpnn4KEb8LNbkKRoUv4SJfQsQ==" + }, + "jss-nested": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/jss-nested/-/jss-nested-5.0.0.tgz", + "integrity": "sha512-9Molau+XVpSc6QEco3EC5yXmzeGMc5ZVII8+qy6jD6bvu6Y9mpfGoJ00LalR/n7xr/LC7Cxgs44UQQlLzumMBg==", + "requires": { + "warning": "^3.0.0" + } + }, + "jss-preset-default": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/jss-preset-default/-/jss-preset-default-3.0.0.tgz", + "integrity": "sha512-5wRsHsV89XjnQlUVN5jQfo6gcfcirDJmsMJL52HmWoQlV9SA+jhUtt1w3LjcJHe4e3tX4u/To/x3Btmhi+LZtQ==", + "requires": { + "jss-camel-case": "^5.0.0", + "jss-compose": "^4.0.0", + "jss-default-unit": "^7.0.0", + "jss-expand": "^4.0.0", + "jss-extend": "^5.0.0", + "jss-global": "^2.0.0", + "jss-nested": "^5.0.0", + "jss-props-sort": "^5.0.0", + "jss-vendor-prefixer": "^6.0.0" + } + }, + "jss-props-sort": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/jss-props-sort/-/jss-props-sort-5.0.0.tgz", + "integrity": "sha512-xtoVE7BlcPaMN/dzypHPYJn+QiphLPB1skypAOp9zLkOozPbR/x0JVAFdZnd7zqmmjvg+Ma/txjSg0HN/eZsGA==" + }, + "jss-vendor-prefixer": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/jss-vendor-prefixer/-/jss-vendor-prefixer-6.0.0.tgz", + "integrity": "sha512-leqW7B2QLXYsUNR3jsUZP3CkuOYcWXyfF8TSJc4XNxhVCNH7ztK5dcnF8nLoMnxT0w/ajloeJKcch2ty/viCAA==", + "requires": { + "css-vendor": "^0.3.8" + } + }, + "react-event-listener": { + "version": "0.5.10", + "resolved": "https://registry.npmjs.org/react-event-listener/-/react-event-listener-0.5.10.tgz", + "integrity": "sha512-YZklRszh9hq3WP3bdNLjFwJcTCVe7qyTf5+LWNaHfZQaZrptsefDK2B5HHpOsEEaMHvjllUPr0+qIFVTSsurow==", + "requires": { + "@babel/runtime": "7.0.0-beta.42", + "fbjs": "^0.8.16", + "prop-types": "^15.6.0", + "warning": "^3.0.0" + } + }, + "react-jss": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/react-jss/-/react-jss-7.2.0.tgz", + "integrity": "sha512-vgnNFImsjfchBloCt0BCe7MeiNEiGtTm/MGA0RVFjU/ccTt+YAlfFhSlGJ+KOC3qQ9Sl5mkl07JatGfjW2CTQQ==", + "requires": { + "hoist-non-react-statics": "^1.2.0", + "jss": "^8.1.0", + "jss-preset-default": "^3.0.0", + "prop-types": "^15.5.8", + "theming": "^1.1.0" + } + }, + "recompose": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/recompose/-/recompose-0.26.0.tgz", + "integrity": "sha512-KwOu6ztO0mN5vy3+zDcc45lgnaUoaQse/a5yLVqtzTK13czSWnFGmXbQVmnoMgDkI5POd1EwIKSbjU1V7xdZog==", + "requires": { + "change-emitter": "^0.1.2", + "fbjs": "^0.8.1", + "hoist-non-react-statics": "^2.3.1", + "symbol-observable": "^1.0.4" + }, + "dependencies": { + "hoist-non-react-statics": { + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz", + "integrity": "sha512-rqcy4pJo55FTTLWt+bU8ukscqHeE/e9KWvsOW2b/a3afxQZhwkQdT1rPPCJ0rYXdj4vNcasY8zHTH+jF/qStxw==" + } + } + }, + "warning": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/warning/-/warning-3.0.0.tgz", + "integrity": "sha1-MuU3fLVy3kqwR1O9+IIcAe1gW3w=", + "requires": { + "loose-envify": "^1.0.0" + } + } + } + }, "material-ui-icons": { "version": "1.0.0-beta.36", "resolved": "https://registry.npmjs.org/material-ui-icons/-/material-ui-icons-1.0.0-beta.36.tgz", @@ -9446,9 +10133,9 @@ "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" }, "merge2": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.2.2.tgz", - "integrity": "sha512-bgM8twH86rWni21thii6WCMQMRMmwqqdW3sGWi9IipnVAszdLXRjwDwAnyrVXo6DuP3AjRMMttZKUB48QWIFGg==" + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.2.3.tgz", + "integrity": "sha512-gdUU1Fwj5ep4kplwcmftruWofEFt6lfpkkr3h860CXbAB9c3hGb55EOL2ali0Td5oebvW0E1+3Sr+Ur7XfKpRA==" }, "methmeth": { "version": "1.1.0", @@ -9513,6 +10200,14 @@ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==" }, + "min-document": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", + "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=", + "requires": { + "dom-walk": "^0.1.0" + } + }, "minimalistic-assert": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", @@ -11379,6 +12074,7 @@ "version": "1.6.1", "resolved": "https://registry.npmjs.org/power-assert/-/power-assert-1.6.1.tgz", "integrity": "sha512-VWkkZV6Y+W8qLX/PtJu2Ur2jDPIs0a5vbP0TpKeybNcIXmT4vcKoVkyTp5lnQvTpY/DxacAZ4RZisHRHLJcAZQ==", + "optional": true, "requires": { "define-properties": "^1.1.2", "empower": "^1.3.1", @@ -11391,6 +12087,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/power-assert-context-formatter/-/power-assert-context-formatter-1.2.0.tgz", "integrity": "sha512-HLNEW8Bin+BFCpk/zbyKwkEu9W8/zThIStxGo7weYcFkKgMuGCHUJhvJeBGXDZf0Qm2xis4pbnnciGZiX0EpSg==", + "optional": true, "requires": { "core-js": "^2.0.0", "power-assert-context-traversal": "^1.2.0" @@ -11400,6 +12097,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/power-assert-context-reducer-ast/-/power-assert-context-reducer-ast-1.2.0.tgz", "integrity": "sha512-EgOxmZ/Lb7tw4EwSKX7ZnfC0P/qRZFEG28dx/690qvhmOJ6hgThYFm5TUWANDLK5NiNKlPBi5WekVGd2+5wPrw==", + "optional": true, "requires": { "acorn": "^5.0.0", "acorn-es7-plugin": "^1.0.12", @@ -11412,6 +12110,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/power-assert-context-traversal/-/power-assert-context-traversal-1.2.0.tgz", "integrity": "sha512-NFoHU6g2umNajiP2l4qb0BRWD773Aw9uWdWYH9EQsVwIZnog5bd2YYLFCVvaxWpwNzWeEfZIon2xtyc63026pQ==", + "optional": true, "requires": { "core-js": "^2.0.0", "estraverse": "^4.1.0" @@ -11421,6 +12120,7 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/power-assert-formatter/-/power-assert-formatter-1.4.1.tgz", "integrity": "sha1-XcEl7VCj37HdomwZNH879Y7CiEo=", + "optional": true, "requires": { "core-js": "^2.0.0", "power-assert-context-formatter": "^1.0.7", @@ -11435,6 +12135,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/power-assert-renderer-assertion/-/power-assert-renderer-assertion-1.2.0.tgz", "integrity": "sha512-3F7Q1ZLmV2ZCQv7aV7NJLNK9G7QsostrhOU7U0RhEQS/0vhEqrRg2jEJl1jtUL4ZyL2dXUlaaqrmPv5r9kRvIg==", + "optional": true, "requires": { "power-assert-renderer-base": "^1.1.1", "power-assert-util-string-width": "^1.2.0" @@ -11449,6 +12150,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/power-assert-renderer-comparison/-/power-assert-renderer-comparison-1.2.0.tgz", "integrity": "sha512-7c3RKPDBKK4E3JqdPtYRE9cM8AyX4LC4yfTvvTYyx8zSqmT5kJnXwzR0yWQLOavACllZfwrAGQzFiXPc5sWa+g==", + "optional": true, "requires": { "core-js": "^2.0.0", "diff-match-patch": "^1.0.0", @@ -11461,6 +12163,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/power-assert-renderer-diagram/-/power-assert-renderer-diagram-1.2.0.tgz", "integrity": "sha512-JZ6PC+DJPQqfU6dwSmpcoD7gNnb/5U77bU5KgNwPPa+i1Pxiz6UuDeM3EUBlhZ1HvH9tMjI60anqVyi5l2oNdg==", + "optional": true, "requires": { "core-js": "^2.0.0", "power-assert-renderer-base": "^1.1.1", @@ -11472,6 +12175,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/power-assert-renderer-file/-/power-assert-renderer-file-1.2.0.tgz", "integrity": "sha512-/oaVrRbeOtGoyyd7e4IdLP/jIIUFJdqJtsYzP9/88R39CMnfF/S/rUc8ZQalENfUfQ/wQHu+XZYRMaCEZmEesg==", + "optional": true, "requires": { "power-assert-renderer-base": "^1.1.1" } @@ -11721,6 +12425,14 @@ "performance-now": "^2.1.0" } }, + "rafl": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/rafl/-/rafl-1.2.2.tgz", + "integrity": "sha1-/pMPdYIRAg1H44gV9Rlqi+QVB0A=", + "requires": { + "global": "~4.3.0" + } + }, "randomatic": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.0.tgz", @@ -11899,6 +12611,11 @@ } } }, + "react-flow-types": { + "version": "0.2.0-beta.6", + "resolved": "https://registry.npmjs.org/react-flow-types/-/react-flow-types-0.2.0-beta.6.tgz", + "integrity": "sha512-I4f8oJFGxVJYrJLxG4sCPW7vWedNB8Eee1U2v+xBzRPlF7X5IBelqaDIKxBDLzDFb++AzpoU+uu1jFaKy1QssQ==" + }, "react-jss": { "version": "8.6.1", "resolved": "https://registry.npmjs.org/react-jss/-/react-jss-8.6.1.tgz", @@ -11916,6 +12633,15 @@ "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" }, + "react-popper": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/react-popper/-/react-popper-0.7.4.tgz", + "integrity": "sha512-dx1fcKYYkidq7f71I1g+YX7g3QBLZ9taqiSRdJ7wbP7v/o7F6JsrUaNWGbVNul+TqdDDIZ5/k0xPUol9baqQJQ==", + "requires": { + "popper.js": "^1.12.5", + "prop-types": "^15.5.10" + } + }, "react-quiz-component": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/react-quiz-component/-/react-quiz-component-0.2.0.tgz", @@ -11994,6 +12720,47 @@ "whatwg-fetch": "2.0.3" } }, + "react-scrollbar-size": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/react-scrollbar-size/-/react-scrollbar-size-2.1.0.tgz", + "integrity": "sha512-9dDUJvk7S48r0TRKjlKJ9e/LkLLYgc9LdQR6W21I8ZqtSrEsedPOoMji4nU3DHy7fx2l8YMScJS/N7qiloYzXQ==", + "requires": { + "babel-runtime": "^6.26.0", + "prop-types": "^15.6.0", + "react-event-listener": "^0.5.1", + "stifle": "^1.0.2" + }, + "dependencies": { + "@babel/runtime": { + "version": "7.0.0-beta.42", + "resolved": "http://registry.npmjs.org/@babel/runtime/-/runtime-7.0.0-beta.42.tgz", + "integrity": "sha512-iOGRzUoONLOtmCvjUsZv3mZzgCT6ljHQY5fr1qG1QIiJQwtM7zbPWGGpa3QWETq+UqwWyJnoi5XZDZRwZDFciQ==", + "requires": { + "core-js": "^2.5.3", + "regenerator-runtime": "^0.11.1" + } + }, + "react-event-listener": { + "version": "0.5.10", + "resolved": "https://registry.npmjs.org/react-event-listener/-/react-event-listener-0.5.10.tgz", + "integrity": "sha512-YZklRszh9hq3WP3bdNLjFwJcTCVe7qyTf5+LWNaHfZQaZrptsefDK2B5HHpOsEEaMHvjllUPr0+qIFVTSsurow==", + "requires": { + "@babel/runtime": "7.0.0-beta.42", + "fbjs": "^0.8.16", + "prop-types": "^15.6.0", + "warning": "^3.0.0" + } + }, + "warning": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/warning/-/warning-3.0.0.tgz", + "integrity": "sha1-MuU3fLVy3kqwR1O9+IIcAe1gW3w=", + "requires": { + "loose-envify": "^1.0.0" + } + } + } + }, "react-transition-group": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-2.4.0.tgz", @@ -12676,6 +13443,29 @@ "inherits": "^2.0.1" } }, + "rtl-css-js": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/rtl-css-js/-/rtl-css-js-1.11.0.tgz", + "integrity": "sha512-YnZ6jWxZxlWlcQAGF9vOmiF9bEmoQmSHE+wsrsiILkdK9HqiRPAIll4SY/QDzbvEu2lB2h62+hfg3TYzjnldbA==", + "requires": { + "@babel/runtime": "^7.1.2" + }, + "dependencies": { + "@babel/runtime": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.1.2.tgz", + "integrity": "sha512-Y3SCjmhSupzFB6wcv1KmmFucH6gDVnI30WjOcicV10ju0cZjak3Jcs67YLIXBrmZYw1xCrVeJPbycFwrqNyxpg==", + "requires": { + "regenerator-runtime": "^0.12.0" + } + }, + "regenerator-runtime": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz", + "integrity": "sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg==" + } + } + }, "run-async": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", @@ -12771,6 +13561,27 @@ "integrity": "sha1-9YdyIs4+kx7a4DnxfrNxbnE3+M8=", "requires": { "ajv": "^5.0.0" + }, + "dependencies": { + "ajv": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", + "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", + "requires": { + "co": "^4.6.0", + "fast-deep-equal": "^1.0.0", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.3.0" + } + } + } + }, + "scroll": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/scroll/-/scroll-2.0.3.tgz", + "integrity": "sha512-3ncZzf8gUW739h3LeS68nSssO60O+GGjT3SxzgofQmT8PIoyHzebql9HHPJopZX8iT6TKOdwaWFMqL6LzUN3DQ==", + "requires": { + "rafl": "~1.2.1" } }, "select-hose": { @@ -13256,6 +14067,11 @@ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" }, + "stifle": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/stifle/-/stifle-1.1.0.tgz", + "integrity": "sha1-FoC13p3gQHQWT0rA/n0022tvcik=" + }, "stream-browserify": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz", @@ -13266,9 +14082,9 @@ } }, "stream-events": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/stream-events/-/stream-events-1.0.4.tgz", - "integrity": "sha512-D243NJaYs/xBN2QnoiMDY7IesJFIK7gEhnvAYqJa5JvDdnh2dC4qDBwlCf0ohPpX2QRlA/4gnbnPd3rs3KxVcA==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/stream-events/-/stream-events-1.0.5.tgz", + "integrity": "sha512-E1GUzBSgvct8Jsb3v2X15pjzN1tYebtbLaMg+eBOUOAxgbLoSbT2NS91ckc5lJD1KfLjId+jXJRgo0qnV5Nerg==", "requires": { "stubs": "^3.0.0" } @@ -13888,6 +14704,7 @@ "version": "1.2.2", "resolved": "https://registry.npmjs.org/universal-deep-strict-equal/-/universal-deep-strict-equal-1.2.2.tgz", "integrity": "sha1-DaSsL3PP95JMgfpN4BjKViyisKc=", + "optional": true, "requires": { "array-filter": "^1.0.0", "indexof": "0.0.1", @@ -13897,7 +14714,8 @@ "array-filter": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-1.0.0.tgz", - "integrity": "sha1-uveeYubvTCpMC4MSMtr/7CUfnYM=" + "integrity": "sha1-uveeYubvTCpMC4MSMtr/7CUfnYM=", + "optional": true } } }, @@ -14210,6 +15028,17 @@ "yargs": "^8.0.2" }, "dependencies": { + "ajv": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", + "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", + "requires": { + "co": "^4.6.0", + "fast-deep-equal": "^1.0.0", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.3.0" + } + }, "ajv-keywords": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.1.tgz", diff --git a/package.json b/package.json index de0dbff..66d5b6a 100644 --- a/package.json +++ b/package.json @@ -5,10 +5,13 @@ "dependencies": { "@material-ui/core": "^3.1.0", "@material-ui/icons": "^3.0.1", + "ajv": "^6.0.0", "firebase": "^5.5.2", - "firebase-admin": "^6.0.0", + "firebase-admin": "^6.1.0", "flamelink": "^0.19.2", "google-maps-react": "^2.0.2", + "grpc": "^1.15.1", + "material-ui": "^1.0.0-beta.16", "material-ui-icons": "^1.0.0-beta.36", "moment": "^2.22.2", "react": "^16.5.1", diff --git a/src/firebase.js b/src/firebase.js index e9b517f..9649117 100644 --- a/src/firebase.js +++ b/src/firebase.js @@ -1,16 +1,13 @@ import firebase from 'firebase/app'; import 'firebase/database'; import 'firebase/storage'; +import * as admin from 'firebase-admin'; -const config = { - apiKey: "AIzaSyAYf9AbeYwLY892NRiQfn0AMtG9xIFAJbo", - authDomain: "marten-application.firebaseapp.com", - databaseURL: "https://marten-application.firebaseio.com", - projectId: "marten-application", - storageBucket: "marten-application.appspot.com", - messagingSenderId: "659856510832" -}; +var serviceAccount = require('./keys/marten-application-firebase-adminsdk-zvjmp-c177ac648f.json'); -const firebaseApp = firebase.initializeApp(config); +const firebaseApp = admin.initializeApp({ + credential: admin.credential.cert(serviceAccount), + databaseURL: 'https://marten-application.firebaseio.com' + }); export default firebase; \ No newline at end of file diff --git a/src/flamelink.js b/src/flamelink.js index 4ac805f..2e22f1d 100644 --- a/src/flamelink.js +++ b/src/flamelink.js @@ -1,6 +1,6 @@ import firebaseApp from './firebase.js'; import flamelink from 'flamelink'; -const flamelinkApp = flamelink({ firebaseApp }); +const flamelinkApp = flamelink({ firebaseApp, isAdminApp: true }); export default flamelinkApp; \ No newline at end of file diff --git a/src/keys/marten-application-firebase-adminsdk-zvjmp-c177ac648f.json b/src/keys/marten-application-firebase-adminsdk-zvjmp-c177ac648f.json new file mode 100644 index 0000000..4b5072b --- /dev/null +++ b/src/keys/marten-application-firebase-adminsdk-zvjmp-c177ac648f.json @@ -0,0 +1,12 @@ +{ + "type": "service_account", + "project_id": "marten-application", + "private_key_id": "c177ac648f803d7e5e4398e4d7302ea4e6972c79", + "private_key": "-----BEGIN PRIVATE KEY-----\nMIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDygOhbLLjSDLAd\n9B29umgVUrAn4/a1lGE04j6aQrjbgLa/NjU9u12dRiiOFDLX3QjEWFBcLYrU4Eb9\ncD48TJug+/Nc0nFjFk2GATmzlFnMzOaMCbH844TBX34h0UEgPt+iQh7g3cEH685a\nm0zlDXGOh88POvcTtez8S+2UMU6J+6mNh/ErRli3lTuD4zTGpZA3SyX8Us8aoFaG\njaC7P9T10M5kZWmGZMg6DiywX9xnjWPCI5hp1XE3SkyRQ1vpsA9lCPZPxb5QS2yM\nTYBd4Qh90kbEA0jVPIjIt8JwboFAV9UCuG4SQ44WnoSikvVYhU4esBIsmsKRD7bj\nrFATV5hxAgMBAAECggEABkfsVL22mwKm/lyd91W8V8aKr1rQP1Vcs+1i9pUBM5a8\nrPzNAdiAMQhR2TW42CZWgXrh2HRZxOAa+JobU42ep4uVCt+8vfa0OvL9zQrb7VH2\ni/SdlH2qWOWVt0+jnJ+iRFIq+XMm6nMLJwXAFuvrZ7gY5uWlpAAdl26KRJEHHive\niPK2Ri0bFqZ/xSSaNYmPKa4xRNKgpvarNcJPuiOdpzVq1G3S1TC7/DcYeWHxxHry\nPh/9RKPX5H5zzaObBw8jTMqFouh/BPw1CU5QLoHe1ApVvQ4ypkWf377/2eQArc77\ndGl0S0OI64UTb5ZQ5vE8KEVTdE/bjUhlJknQhZhZwQKBgQD6rtZEjMps0smTwfEY\nDmjuSjx6AbjiBtv1c8L3A5nmS3qz/hSqLoWp7EWvQyHRywV1nAXZJB1LNNUaFuio\nfgeC4xPgkd2Eurdj5VkAMeHpaX+Y5tBmm+U04lNjh6JsRFQYMMxgdGiySgbBFfjq\nddg67yK4uTMKlhETS1xzq+MzsQKBgQD3pahufZFdA47hEwmr0CqnwLhzXT2otNFo\ncit6rgdycEynCh2egq8Cj7cPoHmx1IRtiiNORetYb1A/6j6zDm3uXo+4Mxb13Ipe\ncgXMmLBkZurA4iNdq8wOSjHLj27IWfoG3hhmTQ2SJVRdi4bhkfWrDmAPtZ9otKgZ\nlwQ/A2+gwQKBgADNop4hnVxv6Hlyu6UKFsf8sOjrLH586yOENXG5LzsPrtr4y3Qo\nJgF/YlHHc0pKzj+sOlCRzw44ox4sSJ6RmNCQjbXAgec0+fV1/K0Fe+XVkrUYuD47\n7aYXu5CsFJcoOOTC80Sz2soHdrITsfJ+Yiz+KyxQW5uDE5buPOOZ/2ZhAoGBALdF\nxMnIaeyxNmtBgJXDn924FYljBr+02Yj3fU/0PRSnIUM5jEQDqOs3Wp3ZAFbn1P2Q\nDqLdwdcXwgcbHz26Pwb6ulfyj1py1YAh2ELa+SfEtpT6hnvLKV+l7wYb5zukwxGU\nCfCjs5hlwfLc0HxdXbczE0ps+kUt9X3CsmTD8TfBAoGBAJWU+HjJgSAOQBBy7Akw\nYY0sFrRoGlzZHFudLSloarH8csMVxWmLsz4CET6lMRmJbYipEQd5FKxhkfXJvcEn\nTc7x0+5fyAe3zBW4NgchxjWHFLjCNFX+gy4hZFpCbgSg/5EOgNzfKexqgcZR+nzv\nVjcQAU5jOlcZ6MFpDJJNK30k\n-----END PRIVATE KEY-----\n", + "client_email": "firebase-adminsdk-zvjmp@marten-application.iam.gserviceaccount.com", + "client_id": "100533957773437883097", + "auth_uri": "https://accounts.google.com/o/oauth2/auth", + "token_uri": "https://oauth2.googleapis.com/token", + "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", + "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/firebase-adminsdk-zvjmp%40marten-application.iam.gserviceaccount.com" +} From d975fbfe2af61e818a98902f071d8f44326feabc Mon Sep 17 00:00:00 2001 From: ajmaley Date: Tue, 30 Oct 2018 20:20:05 -0400 Subject: [PATCH 09/31] Initializing firebaseApp using firebase-admin sdk --- src/firebase.js | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/firebase.js b/src/firebase.js index 9649117..2dee48a 100644 --- a/src/firebase.js +++ b/src/firebase.js @@ -1,13 +1,13 @@ -import firebase from 'firebase/app'; -import 'firebase/database'; -import 'firebase/storage'; import * as admin from 'firebase-admin'; var serviceAccount = require('./keys/marten-application-firebase-adminsdk-zvjmp-c177ac648f.json'); -const firebaseApp = admin.initializeApp({ - credential: admin.credential.cert(serviceAccount), - databaseURL: 'https://marten-application.firebaseio.com' - }); +const firebaseConfig = { + credential: admin.credential.cert(serviceAccount), + databaseURL: "https://marten-application.firebaseio.com", + storageBucket: "marten-application.appspot.com" +}; -export default firebase; \ No newline at end of file +const firebaseApp = admin.initializeApp(firebaseConfig); + +export default 'firebase-admin'; \ No newline at end of file From ce0d5d2e1ebec79816aa1d1217adc0e7a2a216c6 Mon Sep 17 00:00:00 2001 From: ajmaley Date: Tue, 30 Oct 2018 23:56:24 -0400 Subject: [PATCH 10/31] Can now grab text and images from firebase using Flamelink's API. I've also included a solution for adding different header styles. Next on the agenda is styling the Info page and filling it with sponsor's data. --- src/components/FlameLinkImage.js | 30 ++++++++++++++++ src/components/FlameLinkStructure.js | 51 +++++++++++++++++----------- src/components/Layout.js | 3 +- src/firebase.js | 21 +++++++----- src/flamelink.js | 2 +- src/pages/Info.js | 2 +- 6 files changed, 77 insertions(+), 32 deletions(-) create mode 100644 src/components/FlameLinkImage.js diff --git a/src/components/FlameLinkImage.js b/src/components/FlameLinkImage.js new file mode 100644 index 0000000..08a4d03 --- /dev/null +++ b/src/components/FlameLinkImage.js @@ -0,0 +1,30 @@ +import React, { Component } from 'react'; +import flamelinkApp from '../flamelink.js'; + +class FlameLinkImage extends Component { + constructor() { + super(); + + this.state = { + mediaURL: '', + } + } + + getImage(imagePath){ + flamelinkApp.storage.getURL(imagePath) + .then(url => this.setState({ + mediaURL: url + })) + return + } + + render() { + return( +
+ {this.getImage(this.props.content)} +
+ ); + } +} + +export default FlameLinkImage; \ No newline at end of file diff --git a/src/components/FlameLinkStructure.js b/src/components/FlameLinkStructure.js index ccf4c7d..028190a 100644 --- a/src/components/FlameLinkStructure.js +++ b/src/components/FlameLinkStructure.js @@ -1,8 +1,9 @@ -import React, { Component, Fragment} from 'react'; +import React, { Component} from 'react'; import Grid from '@material-ui/core/Grid'; -import Paper from '@material-ui/core/Paper'; import Typography from '@material-ui/core/Typography'; import flamelinkApp from '../flamelink.js'; +import FlameLinkImage from './FlameLinkImage'; + class FlameLinkStructure extends Component { constructor() { @@ -16,18 +17,37 @@ class FlameLinkStructure extends Component { .then(result => this.setState({ schemaContent: result })) + } - getContent(key, type){ - if (type == 'text'){ - return this.state.schemaContent[key] - } - if (type == 'media'){ - for (var val in this.state.schemaContent[key]){ - console.log(this.state.schemaContent[key][val]); - flamelinkApp.storage.getURL(this.state.schemaContent[key][val]) - .then(url => console.log('File URL:', url)) + getContent(key, type, description){ + if (type === 'text'){ + if(description === 'h1'){ + return ( + + {this.state.schemaContent[key]} + + ) } + if(description === 'h2'){ + return ( + + {this.state.schemaContent[key]} + + ) + } + else{ + return ( + + {this.state.schemaContent[key]} + + ) + } + } + if (type === 'media'){ + for (var val in this.state.schemaContent[key]){ + return + } } } @@ -38,14 +58,7 @@ class FlameLinkStructure extends Component { const xs = this.props.field.gridColumns.xs; return( - - - HEADER - - - {this.getContent(this.props.field.key, this.props.type)} - - + {this.getContent(this.props.field.key, this.props.type, this.props.field.description)} ); } diff --git a/src/components/Layout.js b/src/components/Layout.js index c53272a..7d9ebca 100644 --- a/src/components/Layout.js +++ b/src/components/Layout.js @@ -1,7 +1,6 @@ import React, { Component} from 'react'; import FlameLinkStructure from './FlameLinkStructure'; import Grid from '@material-ui/core/Grid'; -import flamelinkApp from '../flamelink.js'; class Layout extends Component { @@ -14,7 +13,7 @@ class Layout extends Component { } createComponents(num){ - return + return } render() { diff --git a/src/firebase.js b/src/firebase.js index 2dee48a..6e6b6b2 100644 --- a/src/firebase.js +++ b/src/firebase.js @@ -1,13 +1,16 @@ -import * as admin from 'firebase-admin'; +import firebase from 'firebase/app'; +import 'firebase/database'; +import 'firebase/storage'; -var serviceAccount = require('./keys/marten-application-firebase-adminsdk-zvjmp-c177ac648f.json'); - -const firebaseConfig = { - credential: admin.credential.cert(serviceAccount), - databaseURL: "https://marten-application.firebaseio.com", - storageBucket: "marten-application.appspot.com" +const config = { + apiKey: "AIzaSyAYf9AbeYwLY892NRiQfn0AMtG9xIFAJbo", + authDomain: "marten-application.firebaseapp.com", + databaseURL: "https://marten-application.firebaseio.com", + projectId: "marten-application", + storageBucket: "marten-application.appspot.com", + messagingSenderId: "659856510832" }; -const firebaseApp = admin.initializeApp(firebaseConfig); +firebase.initializeApp(config); -export default 'firebase-admin'; \ No newline at end of file +export default firebase; \ No newline at end of file diff --git a/src/flamelink.js b/src/flamelink.js index 2e22f1d..4ac805f 100644 --- a/src/flamelink.js +++ b/src/flamelink.js @@ -1,6 +1,6 @@ import firebaseApp from './firebase.js'; import flamelink from 'flamelink'; -const flamelinkApp = flamelink({ firebaseApp, isAdminApp: true }); +const flamelinkApp = flamelink({ firebaseApp }); export default flamelinkApp; \ No newline at end of file diff --git a/src/pages/Info.js b/src/pages/Info.js index 72fa1cd..62edbe0 100644 --- a/src/pages/Info.js +++ b/src/pages/Info.js @@ -11,7 +11,7 @@ class Info extends Component { schemaDetails: '', } - flamelinkApp.schemas.getFields('martenSchemaDemo', { fields: [ 'title', 'key', 'type', 'gridColumns' ] }) + flamelinkApp.schemas.getFields('martenSchemaDemo', { fields: [ 'title', 'key', 'type', 'gridColumns', 'description' ] }) .then(result => this.setState({ schemaDetails: result })) From bfbb27842ad8f23e6f490621ac84a5f31c38805f Mon Sep 17 00:00:00 2001 From: WildScotsmen Date: Wed, 31 Oct 2018 18:52:37 -0400 Subject: [PATCH 11/31] Cleaned up code according to what we decided on. Also formatted raw database data in SightingDetail component. Finally, ordered list in reverse order. --- src/components/Flamelink.js | 1 - src/components/Main.js | 8 +- src/components/QuizGame.js | 26 ++--- src/components/ReportForm.js | 6 +- src/components/ReportMap.js | 70 +++++++------- src/components/SightingDetail.js | 142 ++++++++++++++++++++++++++-- src/components/SightingDetailMap.js | 22 ++--- src/components/SightingMap.js | 41 ++++---- src/components/ViewSightings.js | 6 +- 9 files changed, 222 insertions(+), 100 deletions(-) diff --git a/src/components/Flamelink.js b/src/components/Flamelink.js index fd3187d..3958057 100644 --- a/src/components/Flamelink.js +++ b/src/components/Flamelink.js @@ -2,7 +2,6 @@ import { Component } from 'react'; class Flamelink extends Component { render() { - return(null); } } diff --git a/src/components/Main.js b/src/components/Main.js index be9617f..cfe31d7 100644 --- a/src/components/Main.js +++ b/src/components/Main.js @@ -83,7 +83,7 @@ class ResponsiveDrawer extends React.Component { nav = (text) => { this.setState({ key: text - }) + }); } render() { @@ -189,9 +189,9 @@ class ResponsiveDrawer extends React.Component { {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' && } + {this.state.key === 'Easy-Quiz' && } + {this.state.key === 'Medium-Quiz' && } + {this.state.key === 'Hard-Quiz' && } ); diff --git a/src/components/QuizGame.js b/src/components/QuizGame.js index 1339978..88f8bbe 100644 --- a/src/components/QuizGame.js +++ b/src/components/QuizGame.js @@ -239,33 +239,33 @@ class QuizGame extends React.Component { * @param {*} difficulty The difficulty setting passed in. */ pickDifficulty = difficulty => { - let level + let level; switch (difficulty) { case 'Easy': - this.easy.questions = this.shuffleArray(this.easy.questions) - level = this.easy - break + this.easy.questions = this.shuffleArray(this.easy.questions); + level = this.easy; + break; case 'Medium': - this.medium.questions = this.shuffleArray(this.medium.questions) - level = this.medium - break + this.medium.questions = this.shuffleArray(this.medium.questions); + level = this.medium; + break; case 'Hard': - this.hard.questions = this.shuffleArray(this.hard.questions) - level = this.hard - break + this.hard.questions = this.shuffleArray(this.hard.questions); + level = this.hard; + break; default: - break + break; } - return level + return level; } // The state of the component. state = { difficulty: this.pickDifficulty(this.props.difficulty), key: Math.random() - } + }; // Renders the quiz component. render() { diff --git a/src/components/ReportForm.js b/src/components/ReportForm.js index 9068eec..d55625f 100644 --- a/src/components/ReportForm.js +++ b/src/components/ReportForm.js @@ -266,7 +266,7 @@ getMonth = date => { this.setState({ [name]: event.target.value, }); - }; + } /** * Handles closing the toast. @@ -277,7 +277,7 @@ getMonth = date => { } this.setState({ open: false }); - }; + } /* * Get the coordinates @@ -323,7 +323,7 @@ getMonth = date => { lng: '', open: true }); - }; + } /** diff --git a/src/components/ReportMap.js b/src/components/ReportMap.js index 882a49f..f4848ee 100644 --- a/src/components/ReportMap.js +++ b/src/components/ReportMap.js @@ -9,7 +9,7 @@ const API_KEY = 'AIzaSyAZ_0J01bA6wCbIPK4UBq2RUBC-hIqG4mM'; const mapStyles = { width: '100%', height: '100%' -} +}; export class MapContainer extends Component { @@ -18,22 +18,22 @@ export class MapContainer extends Component { if (navigator.geolocation) { navigator.geolocation.getCurrentPosition((position) => { this.setState({ - myLatLng: { - lat: position.coords.latitude, - lng: position.coords.longitude - } + myLatLng: { + lat: position.coords.latitude, + lng: position.coords.longitude } + } ); }) } else { // If browser doesn't support geolocation or if user does not allow it, // center map on Grand Rapids, Michigan this.setState({ - myLatLng: { - lat: 42.9634, - lng: 85.6681 - } + myLatLng: { + lat: 42.9634, + lng: 85.6681 } + } ); } } @@ -52,7 +52,7 @@ export class MapContainer extends Component { showingInfoWindow: true }); } - + // When the user clicks on the map, if a info window is visible then close it // and 'unactive' that marker onMapClick = (props, map, e) => { @@ -68,13 +68,13 @@ export class MapContainer extends Component { lat: e.latLng.lat(), lng: e.latLng.lng() } - }) + }); let lat = e.latLng.lat(); - let lng = e.latLng.lng(); + let lng = e.latLng.lng(); if (this.props.onClick) { - this.props.onClick(lat,lng); + this.props.onClick(lat, lng); } } @@ -98,36 +98,36 @@ export class MapContainer extends Component { return ( // Render the Google Map, Marker, and InfoWindow components -
+
+ style={mapStyles} + google={this.props.google} + initialCenter={this.state.myLatLng} + center={this.state.myLatLng} + defaultZoom={15} + onClick={this.onMapClick} > - - + marker={this.state.activeMarker} + visible={this.state.showingInfoWindow} > - - { this.state.selectedPlace.title } + + {this.state.selectedPlace.title} - - { this.state.selectedPlace.name } + + {this.state.selectedPlace.name} @@ -138,6 +138,4 @@ export class MapContainer extends Component { } // Send the Google Map API Key with the MapContainer component -export default GoogleApiWrapper({ - apiKey: (API_KEY) -})(MapContainer) \ No newline at end of file +export default GoogleApiWrapper({ apiKey: (API_KEY) })(MapContainer); \ No newline at end of file diff --git a/src/components/SightingDetail.js b/src/components/SightingDetail.js index 73df886..01618b8 100644 --- a/src/components/SightingDetail.js +++ b/src/components/SightingDetail.js @@ -1,24 +1,154 @@ import React, { Component, Fragment } from 'react'; import Disqus from 'disqus-react'; +import moment from 'moment'; import SightingDetailMap from './SightingDetailMap'; +/** + * 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', + }, +]; + +/** + * 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 disagree', + }, + { + value: '2', + label: '2 - Disagree', + }, + { + value: '3', + label: '3 - Neutral', + }, + { + value: '4', + label: '4 - Agree', + }, + { + value: '5', + label: '5 - Strongly agree', + }, +]; + class SightingDetail extends Component { + /** + * Gets formatted type value. + */ + getType = item => { + for (var i = 0; i < sightingTypes.length; i++) { + if (sightingTypes[i].value === item) { + return sightingTypes[i].label; + } + } + } + + + /** + * Gets formatted time value. + */ + getTime = item => { + for (var i = 0; i < timeTypes.length; i++) { + if (timeTypes[i].value === item) { + return timeTypes[i].label; + } + } + } + + /** + * Gets formatted confidence value. + */ + getConfidence = item => { + for (var i = 0; i < confidenceLevels.length; i++) { + if (confidenceLevels[i].value === item) { + return confidenceLevels[i].label; + } + } + + } + + formatDate = date => { + return (moment(date, "YYYY-MM").format("MMMM YYYY").toString()); + } + render() { const disqusShortname = 'https-marten-application-netlify-com'; const disqusConfig = { url: `http://localhost:3000/${this.props.detail.id}`, identifier: this.props.detail.id, title: this.props.detail.id - } + }; return ( - +
-

{`Confidence: ${this.props.detail.confidence}`}

-

{`When: ${this.props.detail.date}, ${this.props.detail.time}`}

-

{`Where: ${this.props.detail.lat} degrees N, and ${this.props.detail.lng} degrees E`}

+

Type: {this.getType(this.props.detail.type)}

+

When: {this.formatDate(this.props.detail.date)}, {this.getTime(this.props.detail.time)}

+

Where: {this.props.detail.lat} degrees N, and {this.props.detail.lng} degrees E

+

I am confident of my sighting: {this.getConfidence(this.props.detail.confidence)}

+

{`${this.props.detail.desc}`}

@@ -27,4 +157,4 @@ class SightingDetail extends Component { } } -export default SightingDetail; +export default SightingDetail; \ No newline at end of file diff --git a/src/components/SightingDetailMap.js b/src/components/SightingDetailMap.js index aaa4c50..775e7ee 100644 --- a/src/components/SightingDetailMap.js +++ b/src/components/SightingDetailMap.js @@ -8,23 +8,23 @@ const API_KEY = 'AIzaSyAZ_0J01bA6wCbIPK4UBq2RUBC-hIqG4mM'; const mapStyles = { width: '100%', height: '100%' -} +}; export class MapContainer extends Component { render() { return ( // Render the Google Map, Marker, and InfoWindow components -
+
+ style={mapStyles} + google={this.props.google} + initialCenter={{ lat: this.props.lat, lng: this.props.lng }} + center={{ lat: this.props.lat, lng: this.props.lng }} + defaultZoom={15}> -
@@ -33,6 +33,4 @@ export class MapContainer extends Component { } // Send the Google Map API Key with the MapContainer component -export default GoogleApiWrapper({ - apiKey: (API_KEY) -})(MapContainer) \ No newline at end of file +export default GoogleApiWrapper({ apiKey: (API_KEY) })(MapContainer); \ No newline at end of file diff --git a/src/components/SightingMap.js b/src/components/SightingMap.js index 2d00465..85b7410 100644 --- a/src/components/SightingMap.js +++ b/src/components/SightingMap.js @@ -1,6 +1,6 @@ import React, { Component, Fragment } from 'react'; import { Map, InfoWindow, Marker, GoogleApiWrapper } from 'google-maps-react'; -import moment from 'moment' +import moment from 'moment'; import Typography from '@material-ui/core/Typography'; import firebase from '../firebase.js'; @@ -11,7 +11,7 @@ const API_KEY = 'AIzaSyAZ_0J01bA6wCbIPK4UBq2RUBC-hIqG4mM'; const mapStyles = { width: '100%', height: '100%' -} +}; /** * Types of sightings. Label is what is @@ -81,23 +81,23 @@ const timeTypes = [ const confidenceLevels = [ { value: '1', - label: '1 - Strongly unconfident', + label: '1 - Strongly disagree', }, { value: '2', - label: '2 - Unconfident', + label: '2 - Disagree', }, { value: '3', - label: '3 - Somewhat confident', + label: '3 - Neutral', }, { value: '4', - label: '4 - Confident', + label: '4 - Agree', }, { value: '5', - label: '5 - Very confident', + label: '5 - Strongly agree', }, ]; @@ -112,9 +112,8 @@ export class MapContainer extends Component { lat: position.coords.latitude, lng: position.coords.longitude } - } - ); - }) + }); + }); } else { // If browser doesn't support geolocation or if user does not allow it, // center map on Grand Rapids, Michigan @@ -123,8 +122,7 @@ export class MapContainer extends Component { lat: 42.9634, lng: 85.6681 } - } - ); + }); } } @@ -210,7 +208,7 @@ export class MapContainer extends Component { } formatDate = date => { - return (moment(date, "YYYY-MM").format("MMMM YYYY").toString()) + return (moment(date, "YYYY-MM").format("MMMM YYYY").toString()); } // Set the state of the component to contain user coordinates and initial @@ -224,7 +222,7 @@ export class MapContainer extends Component { activeMarker: {}, selectedPlace: {}, sightings: [] - } + }; render() { return ( @@ -236,7 +234,8 @@ export class MapContainer extends Component { initialCenter={this.state.myLatLng} center={this.state.myLatLng} defaultZoom={15} - onClick={this.onMapClick} > + onClick={this.onMapClick} + > Confidence: {this.getConfidence(sighting.confidence)}} date={Date: {this.formatDate(sighting.date)}} time={Time: {this.getTime(sighting.time)}} + confidence={I am confident of my sighting: {this.getConfidence(sighting.confidence)}} description={Description: {sighting.desc}} /> ) @@ -267,15 +266,15 @@ export class MapContainer extends Component { {this.state.selectedPlace.type} - - {this.state.selectedPlace.confidence} - {this.state.selectedPlace.date} {this.state.selectedPlace.time} + + {this.state.selectedPlace.confidence} + {this.state.selectedPlace.description} @@ -288,6 +287,4 @@ export class MapContainer extends Component { } // Send the Google Map API Key with the MapContainer component -export default GoogleApiWrapper({ - apiKey: (API_KEY) -})(MapContainer) \ No newline at end of file +export default GoogleApiWrapper({ apiKey: (API_KEY) })(MapContainer); \ No newline at end of file diff --git a/src/components/ViewSightings.js b/src/components/ViewSightings.js index e245e6b..ec5d3c2 100644 --- a/src/components/ViewSightings.js +++ b/src/components/ViewSightings.js @@ -16,7 +16,7 @@ class ViewSightings extends Component { let newState = []; for (let sighting in sightings) { - newState.push({ + newState.unshift({ id: sighting, lat: sightings[sighting].lat, lng: sightings[sighting].lng, @@ -62,7 +62,7 @@ class ViewSightings extends Component { time: null }, clicked: false - } + }; render() { return ( @@ -77,7 +77,7 @@ class ViewSightings extends Component { this.getDetail(sighting.id, sighting.lat, sighting.lng, sighting.desc, sighting.type, sighting.confidence, sighting.date, sighting.time)}> - ) + ); }) } From 3f36ee55a19c22eb5ca49328d0e1e1c95c88eb36 Mon Sep 17 00:00:00 2001 From: WildScotsmen Date: Wed, 31 Oct 2018 19:14:24 -0400 Subject: [PATCH 12/31] Set default key of the application to Home. It was set to blank, which meant that the application wasn't on any page when the user first visits the application. --- src/components/Main.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/Main.js b/src/components/Main.js index be9617f..d93ef62 100644 --- a/src/components/Main.js +++ b/src/components/Main.js @@ -68,7 +68,7 @@ const styles = theme => ({ class ResponsiveDrawer extends React.Component { state = { mobileOpen: false, - key: '', + key: 'Home', open: false }; From 4301a3d6cd338f51f26e46da636591551ff23f0a Mon Sep 17 00:00:00 2001 From: Al Duncanson Date: Wed, 31 Oct 2018 22:18:45 -0400 Subject: [PATCH 13/31] added report map tooltip --- src/components/ReportForm.js | 937 ++++++++++++++++++----------------- 1 file changed, 488 insertions(+), 449 deletions(-) diff --git a/src/components/ReportForm.js b/src/components/ReportForm.js index 9068eec..9057b89 100644 --- a/src/components/ReportForm.js +++ b/src/components/ReportForm.js @@ -11,6 +11,8 @@ import CloseIcon from '@material-ui/icons/Close'; import Button from '@material-ui/core/Button'; import firebase from '../firebase.js'; import GoogleMap from '../components/ReportMap'; +import Modal from '@material-ui/core/Modal'; +import Typography from '@material-ui/core/Typography'; /** * Styles that the different @@ -18,39 +20,46 @@ import GoogleMap from '../components/ReportMap'; * in. Mostly used for spacing. */ const styles = theme => ({ - container: { - display: 'flex', - flexWrap: 'wrap' - }, - textField: { - marginLeft: theme.spacing.unit * 2, - marginRight: theme.spacing.unit, - marginTop: theme.spacing.unit * 2, - flexBasis: 280, - width: '90%' - }, - button: { - marginLeft: theme.spacing.unit * 2, - marginRight: theme.spacing.unit, - marginTop: theme.spacing.unit * 2, - }, - dense: { - marginTop: 30, - }, - close: { - padding: theme.spacing.unit / 2, - }, - icon: { - fontSize: 20, - marginRight: theme.spacing.unit, - }, - message: { - display: 'flex', - alignItems: 'center', - }, - menu: { - width: 200, - }, + container: { + display: 'flex', + flexWrap: 'wrap' + }, + textField: { + marginLeft: theme.spacing.unit * 2, + marginRight: theme.spacing.unit, + marginTop: theme.spacing.unit * 2, + flexBasis: 280, + width: '90%' + }, + button: { + marginLeft: theme.spacing.unit * 2, + marginRight: theme.spacing.unit, + marginTop: theme.spacing.unit * 2, + }, + dense: { + marginTop: 30, + }, + close: { + padding: theme.spacing.unit / 2, + }, + icon: { + fontSize: 20, + marginRight: theme.spacing.unit, + }, + message: { + display: 'flex', + alignItems: 'center', + }, + menu: { + width: 200, + }, + paper: { + position: 'absolute', + width: theme.spacing.unit * 50, + backgroundColor: theme.palette.background.paper, + boxShadow: theme.shadows[5], + padding: theme.spacing.unit * 4, + } }); /** @@ -59,30 +68,30 @@ const styles = theme => ({ * 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', - }, + { + 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', + }, ]; /** @@ -91,54 +100,54 @@ const sightingTypes = [ * 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', - }, + { + 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', + }, ]; /** @@ -147,26 +156,26 @@ const monthTypes = [ * 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', - }, + { + value: 'unknown', + label: 'Unknown', + }, + { + value: 'morning', + label: 'Morning', + }, + { + value: 'midday', + label: 'Midday', + }, + { + value: 'evening', + label: 'Evening', + }, + { + value: 'night', + label: 'Night', + }, ]; /** @@ -175,349 +184,379 @@ const timeTypes = [ * what is stored in the database. */ const confidenceLevels = [ - { - 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', - }, + { + 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. */ class ReportForm extends React.Component { - /** - * Component contructor. Currently - * only used to bind event - * handlers. - */ - constructor() { - super(); - this.handleSubmit = this.handleSubmit.bind(this); - } - - /** - * Function for formatting the - * year as a string that - * Material UI can use. - * @param {*} date, Date passed in. - */ - getYear = date => { - var d = new Date(date), - year = d.getFullYear(); - - return year; -} - -/** -* Function for formatting the -* month as a string that -* Material UI can use. -* @param {*} date, Date passed in. -*/ -getMonth = date => { - var d = new Date(date), - month = d.getMonth() + 1; - - month = month.toString(); - - if (month.length === 1) { - month = "0" + month; - } - - return month; -} - - /** - * State of form components. - */ - state = { - month: this.getMonth(new Date()), - year: this.getYear(new Date()), - time: 'unknown', - type: 'visual', - confidence: '1', - desc: '', - lat: '', - lng: '', - open: false - }; - - /** - * Handles state change in form - * components. - */ - handleChange = name => event => { - this.setState({ - [name]: event.target.value, - }); - }; - - /** - * Handles closing the toast. - */ - handleClose = (event, reason) => { - if (reason === 'clickaway') { - return; + /** + * Component contructor. Currently + * only used to bind event + * handlers. + */ + constructor() { + super(); + this.handleSubmit = this.handleSubmit.bind(this); } - this.setState({ open: false }); - }; - - /* - * Get the coordinates - * - */ - getCoordinates = (lat, lng) => { - let latitude = lat; - let longitude = lng; - - this.setState({ - lat: latitude, - lng: longitude - }); - } - - /** - * Event listener for form. - * When the form is submitted, - * this function passes the - * data along to Firebase. - */ - handleSubmit(e) { - e.preventDefault(); - const sightingsRef = firebase.database().ref('sightings'); - const sighting = { - type: this.state.type, - confidence: this.state.confidence, - date: this.state.year + '-' + this.state.month, - time: this.state.time, - desc: this.state.desc, - lat: this.state.lat, - lng: this.state.lng - } - sightingsRef.push(sighting); - this.setState({ - year: this.getYear(new Date()), - month: this.getMonth(new Date()), - time: 'unknown', - type: 'visual', - confidence: '1', - desc: '', - lat: '', - lng: '', - open: true - }); - }; - - - /** - * The render method for this component. - */ - render() { - const { classes } = this.props; - /** - * The actual form. + * Function for formatting the + * year as a string that + * Material UI can use. + * @param {*} date, Date passed in. + */ + getYear = date => { + var d = new Date(date), + year = d.getFullYear(); + + return year; + } + + /** + * Function for formatting the + * month as a string that + * Material UI can use. + * @param {*} date, Date passed in. + */ + getMonth = date => { + var d = new Date(date), + month = d.getMonth() + 1; + + month = month.toString(); + + if (month.length === 1) { + month = "0" + month; + } + + return month; + } + + /** + * State of form components. */ - return ( - -
- - - - - - {sightingTypes.map(option => ( - - {option.label} - - ))} - - + state = { + month: this.getMonth(new Date()), + year: this.getYear(new Date()), + time: 'unknown', + type: 'visual', + confidence: '1', + desc: '', + lat: '', + lng: '', + open: false, + openModal: false, + hasModalOpened: false + }; - - - {confidenceLevels.map(option => ( - - {option.label} - - ))} - - + handleModalOpen = () => !this.state.hasModalOpened ? this.setState({ openModal: true, hasModalOpened: true }) : null; - - - {timeTypes.map(option => ( - - {option.label} - - ))} - - + handleModalClose = () => { + this.setState({ openModal: false }); + }; - - - {monthTypes.map(option => ( - - {option.label} - - ))} - - + getModalStyle = () => { + return { + top: `25%`, + left: `75%`, + transform: `translate(-25%, -75%)`, + }; + } - - - + /** + * Handles state change in form + * components. + */ + handleChange = name => event => { + this.setState({ + [name]: event.target.value, + }); + }; - - - + /** + * Handles closing the toast. + */ + handleClose = (event, reason) => { + if (reason === 'clickaway') { + return; + } - - - - - - - - - -
- Report received.} - action={[ - - - , - ]} - /> -
- ); - } + this.setState({ open: false }); + }; + + /* + * Get the coordinates + * + */ + getCoordinates = (lat, lng) => { + let latitude = lat; + let longitude = lng; + + this.setState({ + lat: latitude, + lng: longitude + }); + } + + /** + * Event listener for form. + * When the form is submitted, + * this function passes the + * data along to Firebase. + */ + handleSubmit(e) { + e.preventDefault(); + const sightingsRef = firebase.database().ref('sightings'); + const sighting = { + type: this.state.type, + confidence: this.state.confidence, + date: this.state.year + '-' + this.state.month, + time: this.state.time, + desc: this.state.desc, + lat: this.state.lat, + lng: this.state.lng + } + sightingsRef.push(sighting); + this.setState({ + year: this.getYear(new Date()), + month: this.getMonth(new Date()), + time: 'unknown', + type: 'visual', + confidence: '1', + desc: '', + lat: '', + lng: '', + open: true + }); + }; + + + /** + * The render method for this component. + */ + render() { + const { classes } = this.props; + + /** + * The actual form. + */ + return ( + +
+ + + + + + {sightingTypes.map(option => ( + + {option.label} + + ))} + + + + + + {confidenceLevels.map(option => ( + + {option.label} + + ))} + + + + + + {timeTypes.map(option => ( + + {option.label} + + ))} + + + + + + {monthTypes.map(option => ( + + {option.label} + + ))} + + + + + + + + + + + + + + + + + + +
+ + Need a little help? + + + Click on the map to drop a pin! + +
+
+
+
+
+ Report received.} + action={[ + + + , + ]} + /> +
+ ); + } } ReportForm.propTypes = { - classes: PropTypes.object.isRequired, + classes: PropTypes.object.isRequired, }; export default withStyles(styles)(ReportForm); \ No newline at end of file From 6ecf626659817b7955eaff90010500eecc1ad0b1 Mon Sep 17 00:00:00 2001 From: ajmaley Date: Thu, 1 Nov 2018 20:59:47 -0400 Subject: [PATCH 14/31] Added ability to parse fieldset data. Added some basic stylings for content. Cleaned up code. --- ...yout.js => FlameLinkComponentCreations.js} | 6 +- src/components/FlameLinkFieldSet.js | 31 ++++++++ src/components/FlameLinkFieldSetContent.js | 43 +++++++++++ src/components/FlameLinkImage.js | 2 +- src/components/FlameLinkStructure.js | 77 ++++++++++++++++--- ...on-firebase-adminsdk-zvjmp-c177ac648f.json | 12 --- src/pages/Info.js | 8 +- 7 files changed, 148 insertions(+), 31 deletions(-) rename src/components/{Layout.js => FlameLinkComponentCreations.js} (72%) create mode 100644 src/components/FlameLinkFieldSet.js create mode 100644 src/components/FlameLinkFieldSetContent.js delete mode 100644 src/keys/marten-application-firebase-adminsdk-zvjmp-c177ac648f.json diff --git a/src/components/Layout.js b/src/components/FlameLinkComponentCreations.js similarity index 72% rename from src/components/Layout.js rename to src/components/FlameLinkComponentCreations.js index 7d9ebca..34ee9f4 100644 --- a/src/components/Layout.js +++ b/src/components/FlameLinkComponentCreations.js @@ -2,7 +2,7 @@ import React, { Component} from 'react'; import FlameLinkStructure from './FlameLinkStructure'; import Grid from '@material-ui/core/Grid'; -class Layout extends Component { +class FlameLinkComponentCreations extends Component { getSchemaFieldData(schemaData){ var arr = []; @@ -13,7 +13,7 @@ class Layout extends Component { } createComponents(num){ - return + return } render() { @@ -25,4 +25,4 @@ class Layout extends Component { } } -export default Layout; \ No newline at end of file +export default FlameLinkComponentCreations; \ No newline at end of file diff --git a/src/components/FlameLinkFieldSet.js b/src/components/FlameLinkFieldSet.js new file mode 100644 index 0000000..2954db5 --- /dev/null +++ b/src/components/FlameLinkFieldSet.js @@ -0,0 +1,31 @@ +import React, { Component} from 'react'; +import Grid from '@material-ui/core/Grid'; +import FlameLinkFieldSetContent from './FlameLinkFieldSetContent'; + + +class FlameLinkFieldSet extends Component { + + + getFieldSetContent(content1, content2){ + var arr = []; + for (var val in content2){ + arr.push(val); + } + var arrContent = [content1, content2]; + return arr.map(this.createFieldSetComponents, arrContent); + } + + createFieldSetComponents(num){ + return + } + + render() { + return( + + {this.getFieldSetContent(this.props.field, this.props.field2)} + + ); + } +} + +export default FlameLinkFieldSet; \ No newline at end of file diff --git a/src/components/FlameLinkFieldSetContent.js b/src/components/FlameLinkFieldSetContent.js new file mode 100644 index 0000000..2e32b0a --- /dev/null +++ b/src/components/FlameLinkFieldSetContent.js @@ -0,0 +1,43 @@ +import React, { Component} from 'react'; +import Grid from '@material-ui/core/Grid'; +import Typography from '@material-ui/core/Typography'; +import FlameLinkImage from './FlameLinkImage'; + +class FlameLinkFieldSetContent extends Component { + + getContent(key, type, description, fieldsetContent){ + if (type === 'text'){ + return ( + + {fieldsetContent[key]} + + ) + } + if(type === 'textarea'){ + return ( + + {fieldsetContent[key]} + + ) + } + if (type === 'media'){ + for (var val in fieldsetContent[key]){ + return + } + } + } + + render() { + const lg = this.props.field.gridColumns.lg; + const md = this.props.field.gridColumns.md; + const sm = this.props.field.gridColumns.sm; + const xs = this.props.field.gridColumns.xs; + return( + + {this.getContent(this.props.fieldKey, this.props.type, this.props.field.description, this.props.data)} + + ); + } +} + +export default FlameLinkFieldSetContent; \ No newline at end of file diff --git a/src/components/FlameLinkImage.js b/src/components/FlameLinkImage.js index 08a4d03..a40cb61 100644 --- a/src/components/FlameLinkImage.js +++ b/src/components/FlameLinkImage.js @@ -15,7 +15,7 @@ class FlameLinkImage extends Component { .then(url => this.setState({ mediaURL: url })) - return + return } render() { diff --git a/src/components/FlameLinkStructure.js b/src/components/FlameLinkStructure.js index 028190a..e1aeb7f 100644 --- a/src/components/FlameLinkStructure.js +++ b/src/components/FlameLinkStructure.js @@ -1,9 +1,18 @@ import React, { Component} from 'react'; import Grid from '@material-ui/core/Grid'; import Typography from '@material-ui/core/Typography'; +import { withStyles } from '@material-ui/core/styles'; import flamelinkApp from '../flamelink.js'; import FlameLinkImage from './FlameLinkImage'; +import FlameLinkFieldSet from './FlameLinkFieldSet'; +const styles = theme => ({ + flamelinkItem: { + paddingRight: 20, + paddingLeft: 20, + paddingTop: 20, + }, + }); class FlameLinkStructure extends Component { constructor() { @@ -13,55 +22,99 @@ class FlameLinkStructure extends Component { schemaContent: '', } - flamelinkApp.content.get('martenSchemaDemo') + flamelinkApp.content.get(global.schemaName) .then(result => this.setState({ schemaContent: result })) - } - getContent(key, type, description){ + getContent(schemaField, key, type, description){ if (type === 'text'){ if(description === 'h1'){ return ( - - {this.state.schemaContent[key]} + + {this.state.schemaContent[key]} ) } if(description === 'h2'){ return ( - - {this.state.schemaContent[key]} + + {this.state.schemaContent[key]} + + ) + } + if(description === 'h3'){ + return ( + + {this.state.schemaContent[key]} + + ) + } + if(description === 'h4'){ + return ( + + {this.state.schemaContent[key]} + + ) + } + if(description === 'h5'){ + return ( + + {this.state.schemaContent[key]} + + ) + } + if(description === 'h6'){ + return ( + + {this.state.schemaContent[key]} ) } else{ return ( - - {this.state.schemaContent[key]} + + {this.state.schemaContent[key]} ) } } + if(type === 'textarea'){ + return ( + + {this.state.schemaContent[key]} + + ) + } if (type === 'media'){ for (var val in this.state.schemaContent[key]){ return } } + if (type === 'fieldset'){ + if(this.state.schemaContent === ''){ + return + } + else{ + return + } + } } render() { + const { classes } = this.props; + const lg = this.props.field.gridColumns.lg; const md = this.props.field.gridColumns.md; const sm = this.props.field.gridColumns.sm; const xs = this.props.field.gridColumns.xs; return( - - {this.getContent(this.props.field.key, this.props.type, this.props.field.description)} + + {this.getContent(this.props.field, this.props.field.key, this.props.type, this.props.field.description)} ); } } -export default FlameLinkStructure; \ No newline at end of file +export default withStyles(styles)(FlameLinkStructure); \ No newline at end of file diff --git a/src/keys/marten-application-firebase-adminsdk-zvjmp-c177ac648f.json b/src/keys/marten-application-firebase-adminsdk-zvjmp-c177ac648f.json deleted file mode 100644 index 4b5072b..0000000 --- a/src/keys/marten-application-firebase-adminsdk-zvjmp-c177ac648f.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "type": "service_account", - "project_id": "marten-application", - "private_key_id": "c177ac648f803d7e5e4398e4d7302ea4e6972c79", - "private_key": "-----BEGIN PRIVATE KEY-----\nMIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDygOhbLLjSDLAd\n9B29umgVUrAn4/a1lGE04j6aQrjbgLa/NjU9u12dRiiOFDLX3QjEWFBcLYrU4Eb9\ncD48TJug+/Nc0nFjFk2GATmzlFnMzOaMCbH844TBX34h0UEgPt+iQh7g3cEH685a\nm0zlDXGOh88POvcTtez8S+2UMU6J+6mNh/ErRli3lTuD4zTGpZA3SyX8Us8aoFaG\njaC7P9T10M5kZWmGZMg6DiywX9xnjWPCI5hp1XE3SkyRQ1vpsA9lCPZPxb5QS2yM\nTYBd4Qh90kbEA0jVPIjIt8JwboFAV9UCuG4SQ44WnoSikvVYhU4esBIsmsKRD7bj\nrFATV5hxAgMBAAECggEABkfsVL22mwKm/lyd91W8V8aKr1rQP1Vcs+1i9pUBM5a8\nrPzNAdiAMQhR2TW42CZWgXrh2HRZxOAa+JobU42ep4uVCt+8vfa0OvL9zQrb7VH2\ni/SdlH2qWOWVt0+jnJ+iRFIq+XMm6nMLJwXAFuvrZ7gY5uWlpAAdl26KRJEHHive\niPK2Ri0bFqZ/xSSaNYmPKa4xRNKgpvarNcJPuiOdpzVq1G3S1TC7/DcYeWHxxHry\nPh/9RKPX5H5zzaObBw8jTMqFouh/BPw1CU5QLoHe1ApVvQ4ypkWf377/2eQArc77\ndGl0S0OI64UTb5ZQ5vE8KEVTdE/bjUhlJknQhZhZwQKBgQD6rtZEjMps0smTwfEY\nDmjuSjx6AbjiBtv1c8L3A5nmS3qz/hSqLoWp7EWvQyHRywV1nAXZJB1LNNUaFuio\nfgeC4xPgkd2Eurdj5VkAMeHpaX+Y5tBmm+U04lNjh6JsRFQYMMxgdGiySgbBFfjq\nddg67yK4uTMKlhETS1xzq+MzsQKBgQD3pahufZFdA47hEwmr0CqnwLhzXT2otNFo\ncit6rgdycEynCh2egq8Cj7cPoHmx1IRtiiNORetYb1A/6j6zDm3uXo+4Mxb13Ipe\ncgXMmLBkZurA4iNdq8wOSjHLj27IWfoG3hhmTQ2SJVRdi4bhkfWrDmAPtZ9otKgZ\nlwQ/A2+gwQKBgADNop4hnVxv6Hlyu6UKFsf8sOjrLH586yOENXG5LzsPrtr4y3Qo\nJgF/YlHHc0pKzj+sOlCRzw44ox4sSJ6RmNCQjbXAgec0+fV1/K0Fe+XVkrUYuD47\n7aYXu5CsFJcoOOTC80Sz2soHdrITsfJ+Yiz+KyxQW5uDE5buPOOZ/2ZhAoGBALdF\nxMnIaeyxNmtBgJXDn924FYljBr+02Yj3fU/0PRSnIUM5jEQDqOs3Wp3ZAFbn1P2Q\nDqLdwdcXwgcbHz26Pwb6ulfyj1py1YAh2ELa+SfEtpT6hnvLKV+l7wYb5zukwxGU\nCfCjs5hlwfLc0HxdXbczE0ps+kUt9X3CsmTD8TfBAoGBAJWU+HjJgSAOQBBy7Akw\nYY0sFrRoGlzZHFudLSloarH8csMVxWmLsz4CET6lMRmJbYipEQd5FKxhkfXJvcEn\nTc7x0+5fyAe3zBW4NgchxjWHFLjCNFX+gy4hZFpCbgSg/5EOgNzfKexqgcZR+nzv\nVjcQAU5jOlcZ6MFpDJJNK30k\n-----END PRIVATE KEY-----\n", - "client_email": "firebase-adminsdk-zvjmp@marten-application.iam.gserviceaccount.com", - "client_id": "100533957773437883097", - "auth_uri": "https://accounts.google.com/o/oauth2/auth", - "token_uri": "https://oauth2.googleapis.com/token", - "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", - "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/firebase-adminsdk-zvjmp%40marten-application.iam.gserviceaccount.com" -} diff --git a/src/pages/Info.js b/src/pages/Info.js index 62edbe0..1642662 100644 --- a/src/pages/Info.js +++ b/src/pages/Info.js @@ -1,17 +1,19 @@ import React, { Component, Fragment } from 'react'; import Typography from '@material-ui/core/Typography'; -import Layout from '../components/Layout'; +import FlameLinkComponentCreations from '../components/FlameLinkComponentCreations'; import flamelinkApp from '../flamelink.js'; class Info extends Component { constructor() { super(); + global.schemaName = 'martenSchemaDemo'; + this.state = { schemaDetails: '', } - flamelinkApp.schemas.getFields('martenSchemaDemo', { fields: [ 'title', 'key', 'type', 'gridColumns', 'description' ] }) + flamelinkApp.schemas.getFields(global.schemaName, { fields: [ 'title', 'key', 'type', 'gridColumns', 'description', 'options' ] }) .then(result => this.setState({ schemaDetails: result })) @@ -27,7 +29,7 @@ class Info extends Component { - +
From 035608a19b2f6d09cadd3c9025666293e65a5b41 Mon Sep 17 00:00:00 2001 From: ajmaley Date: Thu, 1 Nov 2018 21:08:50 -0400 Subject: [PATCH 15/31] Added padding for fieldset data --- src/components/FlameLinkFieldSetContent.js | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/components/FlameLinkFieldSetContent.js b/src/components/FlameLinkFieldSetContent.js index 2e32b0a..61db810 100644 --- a/src/components/FlameLinkFieldSetContent.js +++ b/src/components/FlameLinkFieldSetContent.js @@ -1,8 +1,15 @@ import React, { Component} from 'react'; import Grid from '@material-ui/core/Grid'; import Typography from '@material-ui/core/Typography'; +import { withStyles } from '@material-ui/core/styles'; import FlameLinkImage from './FlameLinkImage'; +const styles = theme => ({ + flamelinkFieldSetItem: { + paddingBottom: 10, + }, + }); + class FlameLinkFieldSetContent extends Component { getContent(key, type, description, fieldsetContent){ @@ -28,16 +35,18 @@ class FlameLinkFieldSetContent extends Component { } render() { + const { classes } = this.props; + const lg = this.props.field.gridColumns.lg; const md = this.props.field.gridColumns.md; const sm = this.props.field.gridColumns.sm; const xs = this.props.field.gridColumns.xs; return( - + {this.getContent(this.props.fieldKey, this.props.type, this.props.field.description, this.props.data)} ); } } -export default FlameLinkFieldSetContent; \ No newline at end of file +export default withStyles(styles)(FlameLinkFieldSetContent); \ No newline at end of file From 4fba3db3dbf641ab9b86f0d669a2d029e0919773 Mon Sep 17 00:00:00 2001 From: ajmaley Date: Thu, 1 Nov 2018 21:19:34 -0400 Subject: [PATCH 16/31] Added FlameLink to Homepage. --- src/pages/Home.js | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/src/pages/Home.js b/src/pages/Home.js index 76e223f..74249d8 100644 --- a/src/pages/Home.js +++ b/src/pages/Home.js @@ -1,7 +1,23 @@ -import React, { Component } from 'react'; +import React, { Component, Fragment } from 'react'; import Typography from '@material-ui/core/Typography'; +import FlameLinkComponentCreations from '../components/FlameLinkComponentCreations'; +import flamelinkApp from '../flamelink.js'; class Home extends Component { + constructor() { + super(); + + global.schemaName = 'martenInfo'; + + this.state = { + schemaDetails: '', + } + + flamelinkApp.schemas.getFields(global.schemaName, { fields: [ 'title', 'key', 'type', 'gridColumns', 'description', 'options' ] }) + .then(result => this.setState({ + schemaDetails: result + })) + } render() { return ( @@ -9,6 +25,9 @@ class Home extends Component { Home + + +
); } From 7df07ff7c418ed14df1de7c6edc11890c5476440 Mon Sep 17 00:00:00 2001 From: ajmaley Date: Thu, 1 Nov 2018 22:51:05 -0400 Subject: [PATCH 17/31] Worked on Flamelink stylings for images but didn't really get anywhere --- src/components/FlameLinkImage.js | 5 +++-- src/pages/Home.js | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/components/FlameLinkImage.js b/src/components/FlameLinkImage.js index a40cb61..07521cc 100644 --- a/src/components/FlameLinkImage.js +++ b/src/components/FlameLinkImage.js @@ -1,6 +1,7 @@ import React, { Component } from 'react'; import flamelinkApp from '../flamelink.js'; + class FlameLinkImage extends Component { constructor() { super(); @@ -15,13 +16,13 @@ class FlameLinkImage extends Component { .then(url => this.setState({ mediaURL: url })) - return + return } render() { return(
- {this.getImage(this.props.content)} + {this.getImage(this.props.content)}
); } diff --git a/src/pages/Home.js b/src/pages/Home.js index 74249d8..1a4336a 100644 --- a/src/pages/Home.js +++ b/src/pages/Home.js @@ -7,7 +7,7 @@ class Home extends Component { constructor() { super(); - global.schemaName = 'martenInfo'; + global.schemaName = 'martenHome'; this.state = { schemaDetails: '', From dea74f505909e8804e928e1bc27846801beeb5b7 Mon Sep 17 00:00:00 2001 From: wildscotsmen Date: Fri, 2 Nov 2018 00:07:48 -0400 Subject: [PATCH 18/31] Removed to-do Typography in Info page. --- src/pages/Info.js | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/pages/Info.js b/src/pages/Info.js index 1642662..d55633f 100644 --- a/src/pages/Info.js +++ b/src/pages/Info.js @@ -1,5 +1,4 @@ import React, { Component, Fragment } from 'react'; -import Typography from '@material-ui/core/Typography'; import FlameLinkComponentCreations from '../components/FlameLinkComponentCreations'; import flamelinkApp from '../flamelink.js'; @@ -23,11 +22,6 @@ class Info extends Component { return (
- - - Info - - From 58a892bfa8da0e4c181146528c764aa8664c216d Mon Sep 17 00:00:00 2001 From: ajmaley Date: Sat, 3 Nov 2018 14:28:36 -0400 Subject: [PATCH 19/31] Added ability to center images, resizing images (which I may need to revisit later), removed memory leak in FlamelinkImage.js --- src/components/FlameLinkImage.js | 14 ++++++-------- src/components/FlameLinkStructure.js | 5 ++++- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/src/components/FlameLinkImage.js b/src/components/FlameLinkImage.js index 07521cc..aede55f 100644 --- a/src/components/FlameLinkImage.js +++ b/src/components/FlameLinkImage.js @@ -1,4 +1,5 @@ import React, { Component } from 'react'; +import Typography from '@material-ui/core/Typography'; import flamelinkApp from '../flamelink.js'; @@ -9,21 +10,18 @@ class FlameLinkImage extends Component { this.state = { mediaURL: '', } - } - getImage(imagePath){ - flamelinkApp.storage.getURL(imagePath) + flamelinkApp.storage.getURL(global.mediaID) .then(url => this.setState({ mediaURL: url })) - return - } + } render() { return( -
- {this.getImage(this.props.content)} -
+ + + ); } } diff --git a/src/components/FlameLinkStructure.js b/src/components/FlameLinkStructure.js index e1aeb7f..470a592 100644 --- a/src/components/FlameLinkStructure.js +++ b/src/components/FlameLinkStructure.js @@ -17,6 +17,8 @@ const styles = theme => ({ class FlameLinkStructure extends Component { constructor() { super(); + + global.mediaID = ''; this.state = { schemaContent: '', @@ -89,7 +91,8 @@ class FlameLinkStructure extends Component { } if (type === 'media'){ for (var val in this.state.schemaContent[key]){ - return + global.mediaID = this.state.schemaContent[key][val]; + return } } if (type === 'fieldset'){ From f9186c31559e68a0a5ca6927a3b459fa08bd4598 Mon Sep 17 00:00:00 2001 From: ajmaley Date: Sat, 3 Nov 2018 15:34:11 -0400 Subject: [PATCH 20/31] Changed Info to About --- src/components/Main.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/Main.js b/src/components/Main.js index 2bf188f..d943cf2 100644 --- a/src/components/Main.js +++ b/src/components/Main.js @@ -112,9 +112,9 @@ class ResponsiveDrawer extends React.Component { - this.nav('Info')}> + this.nav('About')}> - + From 7dd2fbfeaf3bd5464f024a319858d66700f4256b Mon Sep 17 00:00:00 2001 From: WildScotsmen Date: Sat, 3 Nov 2018 15:47:13 -0400 Subject: [PATCH 21/31] Fixed merge after effect. --- src/components/Main.js | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/components/Main.js b/src/components/Main.js index d943cf2..8ecb20a 100644 --- a/src/components/Main.js +++ b/src/components/Main.js @@ -199,9 +199,6 @@ class ResponsiveDrawer extends React.Component { {this.state.key === 'Easy-Quiz' && } {this.state.key === 'Medium-Quiz' && } {this.state.key === 'Hard-Quiz' && } - {this.state.key === 'Easy-Quiz' && } - {this.state.key === 'Medium-Quiz' && } - {this.state.key === 'Hard-Quiz' && }
); From 83982d8f887c88fc1782bb1c727ee2c2cb888f1b Mon Sep 17 00:00:00 2001 From: wildscotsmen Date: Sun, 4 Nov 2018 22:04:31 -0500 Subject: [PATCH 22/31] App now loads map icons from public folder. Also added icons for the sighting types photo and other. --- public/mapicons/cage.png | Bin 0 -> 11968 bytes public/mapicons/marten-icon.png | Bin 0 -> 21199 bytes public/mapicons/other-icon.png | Bin 0 -> 3765 bytes public/mapicons/paws.png | Bin 0 -> 4215 bytes public/mapicons/photo-icon.png | Bin 0 -> 23334 bytes public/mapicons/tire-icon.png | Bin 0 -> 73969 bytes src/components/SightingMap.js | 27 +++++++++++++++++---------- 7 files changed, 17 insertions(+), 10 deletions(-) create mode 100644 public/mapicons/cage.png create mode 100644 public/mapicons/marten-icon.png create mode 100644 public/mapicons/other-icon.png create mode 100644 public/mapicons/paws.png create mode 100644 public/mapicons/photo-icon.png create mode 100644 public/mapicons/tire-icon.png diff --git a/public/mapicons/cage.png b/public/mapicons/cage.png new file mode 100644 index 0000000000000000000000000000000000000000..de9be45575a9780a32028cdab431619653cfa919 GIT binary patch literal 11968 zcmeHNi91y9+dpT9L9(SnV(cjy$y)Z^5Q#PPMcbWZxJ|XfrQ5 z^S~_0EJ;b%yvQ@R=nhi7OeAn)8*HU%VeJ&Byl|up@jIp1a&ru*3Hew1`@?<@@XvsL=*8ID7pa&3Cb1PK9Qpe>O7SOp? z_cibOAb|ZCbCFCLk^*zBmc+K1bA}8BkB{{Cw&b%#7Z4RbtnWrGZiv})8w%Fsvx)Da zcIAkPg0VpEl%sf41#C9X6;XO-`(LA$O4Q{u8?Dx4&GN6v?bN?wn@vNuwgoa+veM_7 z!-O>V8*@Z?n*vxOr4MGO%*OW7r7pO?GX8cv6fNg{)uPf-zqpdnB z;I9Rx}J=OQxap@a;?g7PSz&&8eg zVc|@{q=_b|$Tq_CK-+h^6p3=epXZ=daBeiVLG&$nd)JysuwJ!#byRSH7}yLPYKX{& z^*EY?P!Z?kZ|;LMtj(4}zunjLM>o+RJoL5rbiM)>ziRFwP~?8k=>3hpzk(=?_>Ztj zUo{N=y8?E)IpWx69P0ohqV0Cxb;#Q?vT}WBz@|VGR`s90*orL9Gd4H9&E$kOfKf66 zM!5aYZcwmfO+Ibp7$O&O$v#^ta{uBPN8^OQ;&lAxh_LV{jf;@F^d%~NCC?F zb^~P1W<3o;43>$Ytc&lot-!UBZsM=LC8r(k-z3A;m|qbr*N}@0zv9{z3ReC9wEn@~S`; zTQL>YRzRj)sGeKeX2YxHaPd<3DXZkT%GOFiQkKPkQ`-}B-DACx03O!)p z@qChIfkm;NO!*O8;;6OQO3PYz;wB}aAXB#I%h}NwXnSfz)p{j2<`8#m0Wj{&S~$y0@p%nH`)e?V zt+r;x;5O>CqsRmwS)2>wsKy-!tPi|j=HH%x!i)9J#@0bilwf5A86x&n=Jqq>DJ?<@*vHO@gUH)iwc>WnL~`XRw#1^ZN5$(PE39Lmwj7?}ZnB=3TB$cD z&9H@>Vpkrv=qX|+>g5b}him*&)2vTRc;nGmTj?U5(b|zBw4qvnW0C8%uuZZ0?fJ z((iQNyYW>p|JUu9=g6&TC$`oi=n=0pHbSO+Gss}G5~`kB7=B!=3eD}~5oJ~Xd@h(< zQ$I8c#S`;9$G?*)%y7W)^t#Yi{g46FPW0xM3ffoQu0O?ExN~`mL-Z!)YbfIdhd13? zkb}o2D=}Ea#R5$oc6cY@Q|8+F_4&ddF*jnD-tYyRee#>5&ObTLz1@JEs;vw^vDo!z ze40#&Ed?_jw(qtihpPo6gx*vgd?h~-0BM`$E?nUH^7p<(JN|gE7f(-!>)Z?!`0nio zMJy{?c~PK~Kx+8X1FYu!(m%Kdx7n~eYAh2F<9RdIRC6#|WbrtCWP?7{oE$ztU3!b_ z2vx(L8-Aks)9vHPvO7pP-n+hL4EbHM9pbriu~+bUK-Gy9n$%*ilrAfvE-|*qQkO$M zn$Ce)jMBr{hGqkJs28Qo?iA7Su!8pz7MNh_*YD@2=AG$T3OYz)K*5PLU(Ex~z6}uZ- zN_iYa(;eBe zMHD@(!~QAAhy!VA*y-H6$_<6Rk0G=Mdy%b8`7)dxIocQLF(}@)0jYvjv`}bat`gi@ zi&uANH~3(lZ2dS`)r4ezODsWiqBbTSZDGrzi5VDEeE{C z;}iam>G)gPr%y99ouxMx{*lX*(D>EXOIz*N-)yI7*32#W?!R0(b%x@K3ZTVb0IT>m zrEDDiV0JFL4x_Wta+R75qz0|U4L{-i1WTm5gQRT6f6xBPTP7Ry&t-;CFBH-QHiZAb#UoZ~-cVOv~zV{s%vl zvHZsD=fZM0-THG`Mw(ZCt=8y@FC*=rDJSy%*9o;LQIhEJ3gVBfXhV+as(egb1HqS( z`}Sm^JK>Wt4YjRO6I6k%FtHp;TT`Xbay}Qd#G<)a-Y>%?`A=U>r#MI=+>7&sn$RSj z;sAA@Gr7O{Tgj-N85;L;02{TTwb(}7HYksckuu*@ExT}Sm8nRXI-9-CZWN0=gPb}` zmiCZjoXX~SG)t~65w|V%&%s%sDU~yFZzRB1?M9h9GM+1!)}YnjFeTjVJDvy4XTch+ z?icZ$eq*zT6n@mzehKX*wkMRZB+@$esAb<^#nVuBHF5hFroM)>(&3)NsYS6_lf+Qn z7JLD&LS?}3#?&{WsE^k*8^>SLr}dWdPb+k<^wiy}?e;xOJO3#EUQlNuVnbZ3JJ8Vm z0!#;c|>X`e@*9xHz&i}$?3nMG;1Pzmcu1|;@&C~L`P^N(f{(F zP_H5Q-I)K{ifiZ2{W$JhO|X67ru=(=@;Qq)M;Ptk;c(c^FVD^Ur1ghrFOmQu*M7aE(f@of=D{UDY5)vK@ z2x;jNTCpZAqpe$akBkpj)zfc6#qK1d_rBUZq)7{_m8Hgv9u{BL)+MC>XGeEguYaEX zPGtILkj|r%ZW-lbv-w2kE`Aq#o;~(bzMGLoiE2srQrjL!X$KXK&mgC`SC?{B^Or{A z9%2GtRguEab{Wu$0)J}0G_V$WV%eg${rqW+G-_n;U~kskkv7-w7abKZ8`lVJ;_pq? zYb3w99-{hgL8!n_l)m>}?soo&Bb?Ij{=MYwI=g`OS`E9^9N*{+YRuUmkn)>eSU66n ze;_YQrpR*4@GtALpPbv8d@U7n`drnOO@a8fkh8`G?q56!JU1i0H^2C`ZD~(q-@Lmu zlJrFN>6EWnnitl34{-WvQ#46sK#GP%^Up3Eaxr9y2&o#D{4zw|K2kUy&~t8_yjh$v zd~zx=R)}Xc%u7!w(jjr`vZIwj>{{|!RKSTS$@Se=)xKL|UMk^{etkL`?AvP9CLi(l zpLkp3f4*5zAo*#^gnfm73(wu1+?i*`UI@cV-8}Y6$l5Nb6zN*$@a_VVeH#}${?EfM z!vd$mUeaXdRQ^JVbXm^ndB?UsS4mqnw8i!|e`uY?jhJM9tkg1Z_VCMPBcCZ(<_`pW zGl)BeCx^uO^sAkJS(3iDdF0nqqYH)OdSHY1YV;?}v!-~LQoV%9)rmFCbxV@MzSoCd zvCK*voUHkCYbTNl4aZGyk*WiDc$T+P`In<*B3yshXQ<^fdo|bwEnCjE_!zEWGY?v6 zLy$=Gfl^A!P+YBjq$pa!ozgOAT_82MAXdlm1L%ljP55z|!?z87YX7UFe== z=ha5^crX3iwSD??*F(~~!T3gjqOmbg8rmil+^$pQ2rASmM+mT*h7R3e!JW8Q*oK`k zcYE@{#k+U#@i>w0EvZ@qQ4cC%_iv6&Lcq8uEkd!fNO&vaO?LPIMCvCGeC~SBxtB3B z_@r@4%-+9gL8G!`mcz4)MG#?r&vY_-kOd%JMOpXo!!uU1=G*(}HFY_$qb@Hk9Ph^D zcuk7ZnvGS1gr?bU6rskQ`bt~E|)&-Iel(JF(N#vJd?JTTaniTE0I*-OePJ%{gDb;4$M zGHUK!obO=fa(=?5D=l@B^@r3?EIah8v;plH_@$c0`~1p@(TmFp5hy6tMy$F=USsCT zv)NO`*ix>3b&Ffdulp_a;?rm+fB2h(rkbu;A9!~)A?Jtw4KbMgDpw2`e+y5>&>RF{ zkYD_u(79jK$gT@%WaRQ48zo%-s(vHr@WppE*zpm0&T4PF0g`fgP_Xg-pb)XbT1Yfw zPhH}0D*xAGZmqkCFE44z8g-@T^Br4M{!37EqWC=jxa;emzr+Jx^=e`-tmwiSr0|Kv z&3CkYgH^$9O@2K>L!$fx>cZ+shI4V^lga)r7n@!ftS+7h?CUSyv4(uHwe) z(~|gG@$PA5w{!~I0&go_8`PI9`>m|og?fyvKKiih)^-sN)R-kX_wF6NRVMQN?Fl0) zPL?82b(7`)WbEswN)fGcmtNV`?=-~VbKDtdf9p|p^x;un4Wx($Fy=%}a30BUcDevh zX`bYJ>T{lASONNMZ{gOSAZ}}m0KQ9BBj^n!8)fPxcMp^NR3EP1WtwNn2tCa=PikJl^(%cHztR z4297TPYEy&Z>S)qsdwh@GtFCEZN4xwhrxRxe#-UiI}Vo@^W*+Eq%LR=B8}qP9;e^yVJdwc^;bBQ8QTiRSsUi z24|x2M!T>?3(7C%&oY}|oGG;tI~HI3lcvTg!HI-+xHbAb)D#GMM33tt=^fB&QEhhx z9gDsmn(Gu>v5IzN-th_vGq%JH>_vQd`$VN>~uOR5!*Kl80>OX2(b#~ymnp^A9 zd?|;4!YCDE-;QnQ$oK7wsYl&D9UX%!|H63us3vYmpQk27y-};F=ZB?EEjsQeS&K0U z(pc;@frl_E($kQpJgAml7fQ7YLaV`j_orDZ-t>!hWtvW=>9vFi_+TO~w8+)G9kzwL z!`p;eD`6{JO^U&G#sPO%|D|(dAN~B*x)pL6<$sA<=xnaqLfz^5Co`+g?E;m^eK5~? zeD7$ps@A9;a=Q5ijMv&IaR@bMFk<&BZ4ZboB)1Ak^74u(& ziZo_&FQWgruC=v_x#YPq_D;S)$g=(FV4mb?>5XG zT$11h7PwFoxHpvx+eB@})Z@DooY#YQHSUXafM+ut-o3U@oj?-nYYF?qlP~EoUWHAp z$9?;jr4>_)1Nkqe)~?&xC#xNHYeihnhUI2D$G_~!O16*zwfUT>Uy0LvFPndw*Kz z)oC$vOk2_4y=}#6jPpbiU*JMqe&B48zWVhz5i?zlnzqw$nBaBqdJ*C~s!p9YX-(FT zd5TkaME~k3m#)>bW_dLqiI^VT%XIY~n37(QcJLlB6NG5qU)S>J+`A{rv$X8f=F=jg zY^Ev@zPWPAhSF!L;^n8q73RFe{_qU0T=~(5@V$M3DR)0O(m0O|`y(&siSv)RVt(;| zZ?$&i5IkYSy%JxuFiv)YB5cLvS3a~qSbx`?8`#@Edhf{>0rX`mN%oCQVGpJ^4c*~3 z!$^VWWiDvUk`HYmDLHc-pi_ff8;df1FJ=U zcYG!n5mO2aa4X2T65c&+6&^!7Ozrhad-@)>D0Nz;b@M6yHBQzn5{ATWY(1zX^tj*F zB_`s2?HR8;C#V39Xx8yO{Tp{-X|IGbN{B9{M3{I<{T3oKWv9Uga5w|w#Y+%znBgl< z6gQdYxq7#Srb(I(Q6iIf>=w-!=ZF`3t_(t;Xn#MJMM1nIHBft?YWKo9wiKOQ5-=Hhej z-~*OJhym2WDMhFawvf%oQTdpMwL!+{{LT0$?1@sigE_kU1#21>^*1wX#U4zBq2pZ@ zENf6xaY4LMDjYjZxAe%H;3W=)A5+)6jwi?HuM4RszFGEJLwn?O6)f~E63!Ard!2JI z3Iw}{R%w=o8;l=NH`pF^j%iw=0h9%(@$0r7@tprySKJ0vU!Uw95C?AdIuGA0rMwi< zhhx4OHSx(*@~T4e{;)fsalp`>C+A)nnh`L8mHU29JkRhY(OQMWFKLGE)Lb zaDMdt&kox0*c!2$QWvNs5J?7-){jSJZO zfq7I{k zuU!RdF(%?>=DKrz0YJj~p4Z^w3woS5(0@PRf%Cvt0UQONbz8dvQ@TYsk*f)fq+gd$ z**6Cw$dh6=;=3nDexPYaJRtw5pn8?KAlQAy_@I7l9UHZI2rdJ*)FBP zhk3YLD+L%a-+sRs0;BZq5HjVD0==uub2s2SB*!?7NLkv)xB%1XOfrijJDD@PBjD3E z09ar6Jcq5gzWTwtgCHJ!I4%eYi&xu@Y(^a{4HDv*!~knr>!+PFNzt;dw%Iqo=%{EA z-ljGHGLzcI4lpvQG4V%KUkd>vF9)A z*YB&q8k&)r)vkO?5&{a9<^*RS!3a>;0r*FHTSB`5yr_EU)33uoG?=pkf{45Q!%@^R zpbRTAzJ2;B0oGu9i=(xZ!>gB!0H4|q6VGhT&)g-7^n$al)CBe0_iOc|Qal^rlL%i& zb70MpDc6>+hX^(dwt`D%XLyaxY3u`loMpwT3hYRMa-+LCUhUSUnokJ;zMV?YL{@vF zq;4Hf_Uc8;?Y|}785p^{pvP@|3wN;Kx+HQ%9WYMy-oZ4zltf$Wjj(11v${dBj`Id5 zBH=3li1dlEPa>+bHC+!`xg(*&lyQ8D{D*O)tJhF~mZImHk(_g;aEMyXB=Bj#8<5)= z8`!bgx3?(b%m>0{Z;8dOdc8ovL3BTO`lEgu9vXmMqof6q5@N!XJKld10jz_CRj|2? z0Dm6%6eU3&ugDOu9N&S6FP@|gbpF9JGU#zhKD}K9w6t3KMf4ZyzTmUte$pUuI|X6R zMJ%$G2P@U#=2}7=vu$4Ef_P4Y3@5aB(iPB31&j$uXxHD&xiLVuvD;n}=)X4tRA(%E z*r8RGREg>C3+YQ1XE+zHsTWD5C%9+7G84iz?&ZZhYBy7q<#~|k;e1UjSHZR=iZvf{}KJQjUEIxbu#I zKx0ZwD$&@bSKkU2V48UKXZ}0-O(d`!4aZK-(P5s!=S+K80Yw%ForBKLG=kk0sK-^prmL9_K2mlX-UjYsU1DyEHAdUw>gtzwY)E1ZsBB5(s#F5_G(VY20 z&{*Uq5^`bu3y(FV%@BVi47}lH@B-q13`Zlt>_EN%e87Bfga^1lnwMP7k_R3%{NF@u zP2&WKFaFEguuVkZXt-gx6Y3b38TaWHT*r0>fZ2J9relFX5|31?R^untm1KdRV~EE6 zPmZ{m!#*z#Ky`pjH=v0|`5_S? z%yFIwQVy*8vB?Qb4H* zJ^1L@F2p>S__=tH5d)Wn|C|`;*kSdFT*MPNQl0vDH*gFv|MCi6o0-Us4WNjWG@x36 zA?^zDAb5^R4D0wtrheR9cZ-eC8fmYCZZZxs5FTO3s2q+MWwk_a03~58{cT=v5XY^C-xri*SFCyhcZ=@CX!FCYriP4`2ZwkSzPF)OzQzk#7WWeS ziTl9zU<*5}-Ay&19Q4kdCn`LKGrhU(DjbhOITw=X8!o;0o}Ndd?AZ-G|Iz~S`*?-Q zV5jxrH#nWen~c(8JvnT#xj)a*l@D3aE9m{svtpeT&~wx+n0Ormv)b2A1bZ`05eKcu zE)S>>XC&u;xOklKQRxmPqUkO8uR$n`>L}mgLAk#XNiE`yaGn6JmOgFT42Y6G_V}C9 zKNxW8ievqmx0ogUH&ob=Z?mJMw~KM0BQhh6;~a%!%H7G$iIN`sVqSV1WlW~*f^S)1 zpOe7<7XORG|1&4}M9y$u_)^R-xL8QMsxPEl3v)rcb94Qj>+c=T1Pcb^`KxqN46>4F z0zTCGDzyV=hG~VOHew?pgfmp6R7e-~YsL(b1upQE*oYZ*$IfIc)U~++&p!x4Mt~8p zsyr%zJ@Nr4JYXQLD==7#vr;JE3p2Tn-$&D!{QMf=(7nAk@)XnF+K~?he3?HC--yC0 ziUVhx$B&GH*dtfcf$DmkcQNXq1AM{m?7zw&gG|qRd>}Z0DF}Bd;v(`BqirHC?h1!5 z&HZl$o491VQ*r)(D-5~TdgxLa2vr`K!iN;f@121Ydgw#3o+|f6{x`gh6+0r`3n>BL z?perrKK>OBw)SeHBG@C>bAf7d?c+IjBr5}BeBiSpbOjpEoKH}AtT`VJ`4NA_s->NG zj9#X$7Sg%P&kX~K8Zq19+2}j&{FioZM!KCV76zTQj1FTW?%dW|(m&OCHzBA)UnnyZBhxXFHFagz;7gncn8BSJ zUt}vL@^hqXY4N4f$zP5TS>apYfb|8FPRdlLKH)C zG^T|Pz}3AVrwWb-Sbi7&gWS2=ok9|TW=>J8lTCyvS+iD!xD~5+e=GKVarBFxZ*T~q z5)`pp)!fw*i}UKG%c3x?@TZhNg!{iT{y0~%{corOad z<(1U2S){4Vd@f8M=7^+>J~w1FEX=$%B!=O_(0FTggE1T_1a zl3qPaS14~3wOlW7uIRz`M$C goNGH`1i3}{^&UETg41aL-x~+87WU>ZO+D`X54rPUApigX literal 0 HcmV?d00001 diff --git a/public/mapicons/marten-icon.png b/public/mapicons/marten-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..268b9454e36790d6e4bc26c2e4c8cf5d522d0b7e GIT binary patch literal 21199 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 K)qSh&82dj4b{>=`7CC5;wY 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 literal 0 HcmV?d00001 diff --git a/public/mapicons/photo-icon.png b/public/mapicons/photo-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..9fa14221c157a70769bd445fb5cf5481474904dd GIT binary patch literal 23334 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 O=Q1(0FsRaVd-8vCWfRT- literal 0 HcmV?d00001 diff --git a/public/mapicons/tire-icon.png b/public/mapicons/tire-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..a2de7ac3eeac3b1755ee1e1f27a90be325594185 GIT binary patch literal 73969 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 N2|LH5)dZib{{y`hL9YM+ literal 0 HcmV?d00001 diff --git a/src/components/SightingMap.js b/src/components/SightingMap.js index 8b71c07..1e5fdd9 100644 --- a/src/components/SightingMap.js +++ b/src/components/SightingMap.js @@ -212,25 +212,32 @@ export class MapContainer extends Component { * sighting type. */ sightingIcon = (type) => { - let pinIcon + let pinIcon; switch(type) { case 'visual': - pinIcon = 'https://i.postimg.cc/nhYXGQNp/marten-icon.png' - break + pinIcon = '/mapicons/marten-icon.png'; + break; case 'roadkill': - pinIcon = 'https://i.postimg.cc/xdfcx1SH/tire-icon.png' - break + pinIcon = '/mapicons/tire-icon.png'; + break; case 'viewed_tracks': - pinIcon = 'https://i.postimg.cc/7P761WCS/paws.png' - break + pinIcon = '/mapicons/paws.png'; + break; case 'trapped': - pinIcon = 'https://i.postimg.cc/Y9LSsXdK/cage.png' - break + pinIcon = '/mapicons/cage.png'; + break; + case 'photo': + pinIcon = '/mapicons/photo-icon.png' + break; + case 'other': + pinIcon = '/mapicons/other-icon.png' + break; default: break } - return pinIcon + + return pinIcon; } formatDate = date => { From bcf5c3071880825d503bd917d36d09c4fe2203a0 Mon Sep 17 00:00:00 2001 From: wildscotsmen Date: Sun, 4 Nov 2018 22:05:41 -0500 Subject: [PATCH 23/31] Added comment I forgot. --- src/components/SightingMap.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/components/SightingMap.js b/src/components/SightingMap.js index 1e5fdd9..6d428e1 100644 --- a/src/components/SightingMap.js +++ b/src/components/SightingMap.js @@ -234,12 +234,15 @@ export class MapContainer extends Component { pinIcon = '/mapicons/other-icon.png' break; default: - break + break; } - + return pinIcon; } + /** + * Formats date using Moment.js. + */ formatDate = date => { return (moment(date, "YYYY-MM").format("MMMM YYYY").toString()) } From a98025f8bb74b64b6510284220be3880ce8740ac Mon Sep 17 00:00:00 2001 From: wildscotsmen Date: Sun, 4 Nov 2018 22:06:58 -0500 Subject: [PATCH 24/31] Added semicolons I forgot. --- src/components/SightingMap.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/SightingMap.js b/src/components/SightingMap.js index 6d428e1..3422182 100644 --- a/src/components/SightingMap.js +++ b/src/components/SightingMap.js @@ -228,10 +228,10 @@ export class MapContainer extends Component { pinIcon = '/mapicons/cage.png'; break; case 'photo': - pinIcon = '/mapicons/photo-icon.png' + pinIcon = '/mapicons/photo-icon.png'; break; case 'other': - pinIcon = '/mapicons/other-icon.png' + pinIcon = '/mapicons/other-icon.png'; break; default: break; From f015e11864caaf9725af83992aa877ca8332deb0 Mon Sep 17 00:00:00 2001 From: Al Duncanson Date: Mon, 5 Nov 2018 09:45:47 -0500 Subject: [PATCH 25/31] removed home placeholder from home page --- src/pages/Home.js | 26 +++++++++----------------- 1 file changed, 9 insertions(+), 17 deletions(-) diff --git a/src/pages/Home.js b/src/pages/Home.js index 1a4336a..60633cc 100644 --- a/src/pages/Home.js +++ b/src/pages/Home.js @@ -1,7 +1,6 @@ -import React, { Component, Fragment } from 'react'; -import Typography from '@material-ui/core/Typography'; +import React, { Component } from 'react'; import FlameLinkComponentCreations from '../components/FlameLinkComponentCreations'; -import flamelinkApp from '../flamelink.js'; +import flamelinkApp from '../flamelink'; class Home extends Component { constructor() { @@ -10,25 +9,18 @@ class Home extends Component { global.schemaName = 'martenHome'; this.state = { - schemaDetails: '', + schemaDetails: '', } - flamelinkApp.schemas.getFields(global.schemaName, { fields: [ 'title', 'key', 'type', 'gridColumns', 'description', 'options' ] }) - .then(result => this.setState({ - schemaDetails: result - })) - } + flamelinkApp.schemas.getFields(global.schemaName, { fields: ['title', 'key', 'type', 'gridColumns', 'description', 'options'] }) + .then(result => this.setState({ + schemaDetails: result + })) + } render() { return ( -
- - Home - - - - -
+ ); } } From e0e1a7e9e41c332ebfbae29c3758833fa911ceb2 Mon Sep 17 00:00:00 2001 From: Al Duncanson Date: Wed, 7 Nov 2018 17:24:43 -0500 Subject: [PATCH 26/31] new disqus --- src/components/SightingDetail.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/SightingDetail.js b/src/components/SightingDetail.js index 01618b8..fb3f6a5 100644 --- a/src/components/SightingDetail.js +++ b/src/components/SightingDetail.js @@ -133,7 +133,7 @@ class SightingDetail extends Component { } render() { - const disqusShortname = 'https-marten-application-netlify-com'; + const disqusShortname = 'marten-tracker'; const disqusConfig = { url: `http://localhost:3000/${this.props.detail.id}`, identifier: this.props.detail.id, From a343458f8cd0f18b4ade07460e30cb9b929bd632 Mon Sep 17 00:00:00 2001 From: wildscotsmen Date: Thu, 8 Nov 2018 21:53:19 -0500 Subject: [PATCH 27/31] Added page titles and modified Favicon. --- public/favicon.ico | Bin 3870 -> 21199 bytes src/pages/Home.js | 4 ++++ src/pages/Info.js | 22 +++++++++++++--------- src/pages/QuizPage.js | 4 ++++ src/pages/Report.js | 4 ++++ src/pages/SightingList.js | 4 ++++ src/pages/ViewMap.js | 4 ++++ 7 files changed, 33 insertions(+), 9 deletions(-) diff --git a/public/favicon.ico b/public/favicon.ico index a11777cc471a4344702741ab1c8a588998b1311a..268b9454e36790d6e4bc26c2e4c8cf5d522d0b7e 100644 GIT binary patch literal 21199 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
3vGa^W|sj)80f#V0@M_CAZTIO(t--xg= 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 baj7?x%VD!5Cxk2YbYLNVeiXvvpMCWYo=by@ diff --git a/src/pages/Home.js b/src/pages/Home.js index 60633cc..e8b56b2 100644 --- a/src/pages/Home.js +++ b/src/pages/Home.js @@ -18,6 +18,10 @@ class Home extends Component { })) } + componentDidMount() { + document.title = 'Marten Tracker | Home'; + } + render() { return ( diff --git a/src/pages/Info.js b/src/pages/Info.js index d55633f..c058d29 100644 --- a/src/pages/Info.js +++ b/src/pages/Info.js @@ -9,23 +9,27 @@ class Info extends Component { global.schemaName = 'martenSchemaDemo'; this.state = { - schemaDetails: '', + schemaDetails: '', } - flamelinkApp.schemas.getFields(global.schemaName, { fields: [ 'title', 'key', 'type', 'gridColumns', 'description', 'options' ] }) - .then(result => this.setState({ - schemaDetails: result - })) - } + flamelinkApp.schemas.getFields(global.schemaName, { fields: ['title', 'key', 'type', 'gridColumns', 'description', 'options'] }) + .then(result => this.setState({ + schemaDetails: result + })) + } + + componentDidMount() { + document.title = 'Marten Tracker | Info'; + } render() { - + return (
- + - +
); } diff --git a/src/pages/QuizPage.js b/src/pages/QuizPage.js index 9422b7b..9abcb0e 100644 --- a/src/pages/QuizPage.js +++ b/src/pages/QuizPage.js @@ -3,6 +3,10 @@ import QuizGame from '../components/QuizGame'; class QuizPage extends Component { + componentDidMount() { + document.title = 'Marten Tracker | Quiz'; + } + render() { return ( diff --git a/src/pages/Report.js b/src/pages/Report.js index c9042d9..3989544 100644 --- a/src/pages/Report.js +++ b/src/pages/Report.js @@ -2,6 +2,10 @@ import React, { Component } from 'react'; import ReportForm from '../components/ReportForm'; class Report extends Component { + componentDidMount() { + document.title = 'Marten Tracker | Report'; + } + render() { return ( diff --git a/src/pages/SightingList.js b/src/pages/SightingList.js index 0540527..8fb460d 100644 --- a/src/pages/SightingList.js +++ b/src/pages/SightingList.js @@ -2,6 +2,10 @@ import React, { Component } from 'react'; import ViewSightings from '../components/ViewSightings.js'; class Sighting extends Component { + componentDidMount() { + document.title = 'Marten Tracker | List'; + } + render() { return ( diff --git a/src/pages/ViewMap.js b/src/pages/ViewMap.js index 6187d45..d5e75c6 100644 --- a/src/pages/ViewMap.js +++ b/src/pages/ViewMap.js @@ -2,6 +2,10 @@ import React, { Component } from 'react'; import GoogleMap from '../components/SightingMap'; class Sighting extends Component { + componentDidMount() { + document.title = 'Marten Tracker | Map'; + } + render() { return (
From 691f96506b6dec3fa9f98d16afb5c7a5e33c9620 Mon Sep 17 00:00:00 2001 From: wildscotsmen Date: Thu, 8 Nov 2018 21:57:00 -0500 Subject: [PATCH 28/31] Added page title to App.js --- src/App.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/App.js b/src/App.js index 8e4c4da..bd3131f 100644 --- a/src/App.js +++ b/src/App.js @@ -3,6 +3,10 @@ import Main from './components/Main'; import './App.css'; class App extends Component { + componentDidMount() { + document.title = 'Marten Tracker'; + } + render() { return (
From 2cb53178df77f91dd035c447cdd3a53857951828 Mon Sep 17 00:00:00 2001 From: wildscotsmen Date: Thu, 8 Nov 2018 21:59:38 -0500 Subject: [PATCH 29/31] Fixed issue. --- src/index.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/index.js b/src/index.js index e84d275..b960731 100644 --- a/src/index.js +++ b/src/index.js @@ -4,6 +4,8 @@ import './index.css'; import App from './App'; import registerServiceWorker from './registerServiceWorker'; +document.title = 'Marten Tracker'; + ReactDOM.render(, document.getElementById('root')); registerServiceWorker(); From 86580d4a4018436c3570b292168a3bb3f158aeb8 Mon Sep 17 00:00:00 2001 From: wildscotsmen Date: Thu, 8 Nov 2018 22:01:29 -0500 Subject: [PATCH 30/31] Made title in index.js more specific to first page. --- src/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/index.js b/src/index.js index b960731..0a895e7 100644 --- a/src/index.js +++ b/src/index.js @@ -4,7 +4,7 @@ import './index.css'; import App from './App'; import registerServiceWorker from './registerServiceWorker'; -document.title = 'Marten Tracker'; +document.title = 'Marten Tracker | Home'; ReactDOM.render(, document.getElementById('root')); From 4b56907006ebba8df89ef7ec7765bd9c20239859 Mon Sep 17 00:00:00 2001 From: wildscotsmen Date: Thu, 8 Nov 2018 22:11:08 -0500 Subject: [PATCH 31/31] Rearranged code. --- src/index.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/index.js b/src/index.js index 0a895e7..6efd2d7 100644 --- a/src/index.js +++ b/src/index.js @@ -4,8 +4,8 @@ import './index.css'; import App from './App'; import registerServiceWorker from './registerServiceWorker'; -document.title = 'Marten Tracker | Home'; - ReactDOM.render(, document.getElementById('root')); +document.title = "Marten Tracker | Home"; + registerServiceWorker();