Merge branch 'master' into v0.2

This commit is contained in:
Sam 2019-01-13 15:35:44 +01:00
commit 031d8da512
25 changed files with 558 additions and 480 deletions

View File

@ -320,7 +320,7 @@
"react/no-unknown-property": "error", "react/no-unknown-property": "error",
"react/no-unused-prop-types": "off", "react/no-unused-prop-types": "off",
"react/prefer-es6-class": "error", "react/prefer-es6-class": "error",
"react/prefer-stateless-function": "error", "react/prefer-stateless-function": [1, { "ignorePureComponents": true }],
"react/prop-types": "off", "react/prop-types": "off",
"react/react-in-jsx-scope": "error", "react/react-in-jsx-scope": "error",
"react/react-default-props": "off", "react/react-default-props": "off",

View File

@ -1,7 +1,7 @@
language: node_js language: node_js
node_js: '10' node_js: '11'
dist: trusty dist: xenial
sudo: required sudo: required
addons: addons:

35
CHANGELOG.md Normal file
View File

@ -0,0 +1,35 @@
# Change log
## Version 0.1.1 - Fix and improvements (2019/01/xx)
### Issues Closed
#### Bugs Fixed
* [#31](https://github.com/SamR1/FitTrackee/issues/31) - Use moving duration for stats
* [#29](https://github.com/SamR1/FitTrackee/issues/29) - Pause duration calculation with segments
* [#26](https://github.com/SamR1/FitTrackee/issues/26) - Total is incorrect in tooltip when duration is displayed
* [#24](https://github.com/SamR1/FitTrackee/issues/24) - Some distances are not displayed correctly on current month statistics
#### New Features
* [#25](https://github.com/SamR1/FitTrackee/issues/25) - Display records on calendar
* [#22](https://github.com/SamR1/FitTrackee/issues/22) - Add a total on current month statistics
In this release 6 issues were closed.
## Version 0.1 - Minimal version (2018-07-04)
### Issues Closed
#### New Features
* [#11](https://github.com/SamR1/FitTrackee/issues/11) - Timezone support
* [#10](https://github.com/SamR1/FitTrackee/issues/10) - Add a note to an activity
* [#9](https://github.com/SamR1/FitTrackee/issues/9) - User statistics on dashboard
* [#8](https://github.com/SamR1/FitTrackee/issues/8) - Add weather to activities
* [#3](https://github.com/SamR1/FitTrackee/issues/3) - Search filter for activities
* [#2](https://github.com/SamR1/FitTrackee/issues/2) - Calendar to view activities
In this release 6 issues were closed.

View File

@ -14,7 +14,7 @@ This web application allows you to track your outdoor activities from gpx files
No mobile app is developed yet, but several existing mobile apps can store workouts data locally and export them into a gpx file. No mobile app is developed yet, but several existing mobile apps can store workouts data locally and export them into a gpx file.
Examples (for Android): Examples (for Android):
* [Runner Up](https://github.com/jonasoreland/runnerup) (GPL v3) * [Runner Up](https://github.com/jonasoreland/runnerup) (GPL v3)
* [ForRunners](https://github.com/brvier/ForRunners) (GPL v3) * [ForRunners](https://gitlab.com/brvier/ForRunners) (GPL v3)
* [AlpineQuest](https://www.alpinequest.net/) (Proprietary, no trackers according to [exodus privay report](https://reports.exodus-privacy.eu.org/reports/2975/)) * [AlpineQuest](https://www.alpinequest.net/) (Proprietary, no trackers according to [exodus privay report](https://reports.exodus-privacy.eu.org/reports/2975/))
Maps are displayed using [Open Street Map](https://www.openstreetmap.org). Maps are displayed using [Open Street Map](https://www.openstreetmap.org).

Binary file not shown.

Before

Width:  |  Height:  |  Size: 451 KiB

After

Width:  |  Height:  |  Size: 747 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 495 KiB

After

Width:  |  Height:  |  Size: 851 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 64 KiB

After

Width:  |  Height:  |  Size: 95 KiB

View File

@ -211,38 +211,38 @@
}, },
"pillow": { "pillow": {
"hashes": [ "hashes": [
"sha256:0cd42fe2d99ec6ce23aaf00947a7b7956ad2ed4b1695fd37545c3b8eae06d95a", "sha256:051de330a06c99d6f84bcf582960487835bcae3fc99365185dc2d4f65a390c0e",
"sha256:137bed8972089d65da63fb79b4949b0f2b99e9a58f1b494e82be43ba8b0f4226", "sha256:0ae5289948c5e0a16574750021bd8be921c27d4e3527800dc9c2c1d2abc81bf7",
"sha256:14eb2b2e4f2a14f5c89fd0edf55c5af0bf1a40fdf3838d81867f26f131cd557d", "sha256:0b1efce03619cdbf8bcc61cfae81fcda59249a469f31c6735ea59badd4a6f58a",
"sha256:1fc43ce8c4fa3754222cd6831d599ad17ca2fc9868d2fb52f4e5362dfbfaf379", "sha256:163136e09bd1d6c6c6026b0a662976e86c58b932b964f255ff384ecc8c3cefa3",
"sha256:26dfeee23a86dad6277a63d18f61f53b957cb2cd3506dbbd74b88ba2fa65b3b1", "sha256:18e912a6ccddf28defa196bd2021fe33600cbe5da1aa2f2e2c6df15f720b73d1",
"sha256:2e0e582942e025cc58f669499a8e0bffde5bcc8d42b65729f294c1dac54e4672", "sha256:24ec3dea52339a610d34401d2d53d0fb3c7fd08e34b20c95d2ad3973193591f1",
"sha256:3bb8dd3ce101dd8b0b37eaae924a5bb93abb6ffdd034bf68a066a808e11768ab", "sha256:267f8e4c0a1d7e36e97c6a604f5b03ef58e2b81c1becb4fccecddcb37e063cc7",
"sha256:3f07da3874f0b085421f1d4f979785131aa9d497501d8610d82f7378b33858f8", "sha256:3273a28734175feebbe4d0a4cde04d4ed20f620b9b506d26f44379d3c72304e1",
"sha256:429b2b5ae5f57f8fd9ec2e012c1e7b342ff10f1a8977dc291976b9a3b4c096e1", "sha256:4c678e23006798fc8b6f4cef2eaad267d53ff4c1779bd1af8725cc11b72a63f3",
"sha256:4a000fdd89d77b6b675de27e1ab91c6fba517c08f19ee83e6716b78930634e04", "sha256:4d4bc2e6bb6861103ea4655d6b6f67af8e5336e7216e20fff3e18ffa95d7a055",
"sha256:4ccbe7cce6156391a3ecf447c79a7d4a1a0ecd3de79bdec9ca5e4f7242a306d1", "sha256:505738076350a337c1740a31646e1de09a164c62c07db3b996abdc0f9d2e50cf",
"sha256:4d08034196db41acb7392e4fccfc0448e7a87192c41d3011ad4093eac2c31ffd", "sha256:5233664eadfa342c639b9b9977190d64ad7aca4edc51a966394d7e08e7f38a9f",
"sha256:6b202b1cb524bc76ed52a7eb0314f4b0a0497c7cceb9a93539b5a25800e1f2b6", "sha256:5d95cb9f6cced2628f3e4de7e795e98b2659dfcc7176ab4a01a8b48c2c2f488f",
"sha256:8563b56fa7c34f1606848c2143ea67d27cf225b9726a1b041c3d27cf85e46edc", "sha256:7eda4c737637af74bac4b23aa82ea6fbb19002552be85f0b89bc27e3a762d239",
"sha256:86d7421e8803d7bae2e594765c378a867b629d46b32fbfe5ed9fd95b30989feb", "sha256:801ddaa69659b36abf4694fed5aa9f61d1ecf2daaa6c92541bbbbb775d97b9fe",
"sha256:8d4bddedcb4ab99131d9705a75720efc48b3d006122dae1a4cc329496ac47c9a", "sha256:825aa6d222ce2c2b90d34a0ea31914e141a85edefc07e17342f1d2fdf121c07c",
"sha256:a4929c6de9590635c34533609402c9da12b22bfc2feb8c0c4f38c39bab48a9ad", "sha256:9c215442ff8249d41ff58700e91ef61d74f47dfd431a50253e1a1ca9436b0697",
"sha256:b0736e21798448cee3e663c0df7a6dfa83d805b3f3a45e67f7457a2f019e5fca", "sha256:a3d90022f2202bbb14da991f26ca7a30b7e4c62bf0f8bf9825603b22d7e87494",
"sha256:b669acba91d47395de84c9ca52a7ad393b487e5ae2e20b9b2790b22a57d479fa", "sha256:a631fd36a9823638fe700d9225f9698fb59d049c942d322d4c09544dc2115356",
"sha256:bba993443921f2d077195b425a3283357f52b07807d53704610c1249d20b183a", "sha256:a6523a23a205be0fe664b6b8747a5c86d55da960d9586db039eec9f5c269c0e6",
"sha256:bdf706a93d00547c9443b2654ae424fd54d5dece4bc4333e7035740aeb7a7cea", "sha256:a756ecf9f4b9b3ed49a680a649af45a8767ad038de39e6c030919c2f443eb000",
"sha256:c5aa93e55175b9cde95279ccd03c93d218976b376480222d37be41d2c9c54510", "sha256:b117287a5bdc81f1bac891187275ec7e829e961b8032c9e5ff38b70fd036c78f",
"sha256:cc11fd997d8ad71bb0412e983b711e49639c2ddba9b9dce04d4bdab575fe5f84", "sha256:ba04f57d1715ca5ff74bb7f8a818bf929a204b3b3c2c2826d1e1cc3b1c13398c",
"sha256:d584f1c33995c3dc16a35e30ef43e0881fa0d085f0fef29cebf154ffb5643363", "sha256:cd878195166723f30865e05d87cbaf9421614501a4bd48792c5ed28f90fd36ca",
"sha256:d88f54bdefb7ddccb68efdd710d689aa6a09b875cc3e44b7e81ef54e0751e3a7", "sha256:cee815cc62d136e96cf76771b9d3eb58e0777ec18ea50de5cfcede8a7c429aa8",
"sha256:de0d323072be72fa4d74f4e013cd594e3f8ee03b2e0eac5876a3249fa076ef7b", "sha256:d1722b7aa4b40cf93ac3c80d3edd48bf93b9208241d166a14ad8e7a20ee1d4f3",
"sha256:f139c963c6679d236b2c45369524338eabd36a853fe23abd39ba246ab0a75aec", "sha256:d7c1c06246b05529f9984435fc4fa5a545ea26606e7f450bdbe00c153f5aeaad",
"sha256:f41c0bf667c4c1c30b873eaa8d6bb894f6d721b3e38e9c993bddd1263c02fb1f", "sha256:e9c8066249c040efdda84793a2a669076f92a301ceabe69202446abb4c5c5ef9",
"sha256:fbd0ea468b4ec04270533bf5206f1cd57746fcf226520bb133318fa276de2644", "sha256:f227d7e574d050ff3996049e086e1f18c7bd2d067ef24131e50a1d3fe5831fbc",
"sha256:fe2d2850521c467c915ff0a6e27dc64c3c04c2f66612e0072672bd1bd4854b61" "sha256:fc9a12aad714af36cf3ad0275a96a733526571e52710319855628f476dcb144e"
], ],
"version": "==5.4.0" "version": "==5.4.1"
}, },
"psycopg2-binary": { "psycopg2-binary": {
"hashes": [ "hashes": [
@ -316,11 +316,11 @@
}, },
"pytz": { "pytz": {
"hashes": [ "hashes": [
"sha256:31cb35c89bd7d333cd32c5f278fca91b523b0834369e757f4c5641ea252236ca", "sha256:32b0891edff07e28efe91284ed9c31e123d84bea3fd98e1f72be2508f43ef8d9",
"sha256:8e0f8568c118d3077b46be7d654cc8167fa916092e28320cde048e54bfc9f1e6" "sha256:d5f05e487007e29e03409f9398d074e158d920d36eb82eaf66fb1136b0c5374c"
], ],
"index": "pypi", "index": "pypi",
"version": "==2018.7" "version": "==2018.9"
}, },
"requests": { "requests": {
"hashes": [ "hashes": [
@ -345,9 +345,9 @@
}, },
"sqlalchemy": { "sqlalchemy": {
"hashes": [ "hashes": [
"sha256:809547455d012734b4252081db1e6b4fc731de2299f3755708c39863625e1c77" "sha256:6af3ca2f7f00844465ab4fa78337d487b39e53f516c51328aed4ed3a719d4264"
], ],
"version": "==1.2.15" "version": "==1.2.16"
}, },
"staticmap": { "staticmap": {
"hashes": [ "hashes": [
@ -358,11 +358,11 @@
}, },
"tqdm": { "tqdm": {
"hashes": [ "hashes": [
"sha256:3c4d4a5a41ef162dd61f1edb86b0e1c7859054ab656b2e7c7b77e7fbf6d9f392", "sha256:b856be5cb6cfaee3b2733655c7c5bbc7751291bb5d1a4f54f020af4727570b3e",
"sha256:5b4d5549984503050883bc126280b386f5f4ca87e6c023c5d015655ad75bdebb" "sha256:c9b9b5eeba13994a4c266aae7eef7aeeb0ba2973e431027e942b4faea139ef49"
], ],
"index": "pypi", "index": "pypi",
"version": "==4.28.1" "version": "==4.29.1"
}, },
"urllib3": { "urllib3": {
"hashes": [ "hashes": [
@ -491,10 +491,10 @@
}, },
"pluggy": { "pluggy": {
"hashes": [ "hashes": [
"sha256:447ba94990e8014ee25ec853339faf7b0fc8050cdc3289d4d71f7f410fb90095", "sha256:8ddc32f03971bfdf900a81961a48ccf2fb677cf7715108f85295c67405798616",
"sha256:bde19360a8ec4dfd8a20dcb811780a30998101f078fc7ded6162f0076f50508f" "sha256:980710797ff6a041e9a73a5787804f848996ecaa6f8a1b1e08224a5894f2074a"
], ],
"version": "==0.8.0" "version": "==0.8.1"
}, },
"py": { "py": {
"hashes": [ "hashes": [
@ -519,19 +519,19 @@
}, },
"pytest": { "pytest": {
"hashes": [ "hashes": [
"sha256:f689bf2fc18c4585403348dd56f47d87780bf217c53ed9ae7a3e2d7faa45f8e9", "sha256:41568ea7ecb4a68d7f63837cf65b92ce8d0105e43196ff2b26622995bb3dc4b2",
"sha256:f812ea39a0153566be53d88f8de94839db1e8a05352ed8a49525d7d7f37861e9" "sha256:c3c573a29d7c9547fb90217ece8a8843aa0c1328a797e200290dc3d0b4b823be"
], ],
"index": "pypi", "index": "pypi",
"version": "==4.0.2" "version": "==4.1.1"
}, },
"pytest-cov": { "pytest-cov": {
"hashes": [ "hashes": [
"sha256:513c425e931a0344944f84ea47f3956be0e416d95acbd897a44970c8d926d5d7", "sha256:0ab664b25c6aa9716cbf203b17ddb301932383046082c081b9848a0edf5add33",
"sha256:e360f048b7dae3f2f2a9a4d067b2dd6b6a015d384d1577c994a43f3f7cbad762" "sha256:230ef817450ab0699c6cc3c9c8f7a829c34674456f2ed8df1fe1d39780f7c87f"
], ],
"index": "pypi", "index": "pypi",
"version": "==2.6.0" "version": "==2.6.1"
}, },
"pytest-flake8": { "pytest-flake8": {
"hashes": [ "hashes": [

View File

@ -56,9 +56,9 @@ def get_activities(auth_user_id):
if date_to else True, if date_to else True,
Activity.distance >= int(distance_from) if distance_from else True, Activity.distance >= int(distance_from) if distance_from else True,
Activity.distance <= int(distance_to) if distance_to else True, Activity.distance <= int(distance_to) if distance_to else True,
Activity.duration >= convert_in_duration(duration_from) Activity.moving >= convert_in_duration(duration_from)
if duration_from else True, if duration_from else True,
Activity.duration <= convert_in_duration(duration_to) Activity.moving <= convert_in_duration(duration_to)
if duration_to else True, if duration_to else True,
Activity.ave_speed >= float(ave_speed_from) Activity.ave_speed >= float(ave_speed_from)
if ave_speed_from else True, if ave_speed_from else True,

View File

@ -70,7 +70,7 @@ def get_activities(user_id, filter_type):
activities_list[sport_id]['total_distance'] += \ activities_list[sport_id]['total_distance'] += \
float(activity.distance) float(activity.distance)
activities_list[sport_id]['total_duration'] += \ activities_list[sport_id]['total_duration'] += \
convert_timedelta_to_integer(activity.duration) convert_timedelta_to_integer(activity.moving)
else: else:
if time == 'week': if time == 'week':
@ -108,7 +108,7 @@ def get_activities(user_id, filter_type):
activities_list[time_period][sport_id]['total_distance'] += \ activities_list[time_period][sport_id]['total_distance'] += \
float(activity.distance) float(activity.distance)
activities_list[time_period][sport_id]['total_duration'] += \ activities_list[time_period][sport_id]['total_duration'] += \
convert_timedelta_to_integer(activity.duration) convert_timedelta_to_integer(activity.moving)
response_object = { response_object = {
'status': 'success', 'status': 'success',

View File

@ -113,6 +113,7 @@ def activity_cycling_user_1_segment():
segment_id=0 segment_id=0
) )
activity_segment.duration = datetime.timedelta(seconds=6000) activity_segment.duration = datetime.timedelta(seconds=6000)
activity_segment.moving = activity_segment.duration
activity_segment.distance = 5 activity_segment.distance = 5
db.session.add(activity_segment) db.session.add(activity_segment)
db.session.commit() db.session.commit()
@ -128,6 +129,7 @@ def activity_running_user_1():
distance=12, distance=12,
duration=datetime.timedelta(seconds=6000) duration=datetime.timedelta(seconds=6000)
) )
activity.moving = activity.duration
db.session.add(activity) db.session.add(activity)
db.session.commit() db.session.commit()
return activity return activity
@ -143,6 +145,7 @@ def seven_activities_user_1():
duration=datetime.timedelta(seconds=1024) duration=datetime.timedelta(seconds=1024)
) )
activity.ave_speed = float(activity.distance) / (1024 / 3600) activity.ave_speed = float(activity.distance) / (1024 / 3600)
activity.moving = activity.duration
db.session.add(activity) db.session.add(activity)
db.session.flush() db.session.flush()
activity = Activity( activity = Activity(
@ -153,6 +156,7 @@ def seven_activities_user_1():
duration=datetime.timedelta(seconds=3456) duration=datetime.timedelta(seconds=3456)
) )
activity.ave_speed = float(activity.distance) / (3456 / 3600) activity.ave_speed = float(activity.distance) / (3456 / 3600)
activity.moving = activity.duration
db.session.add(activity) db.session.add(activity)
db.session.flush() db.session.flush()
activity = Activity( activity = Activity(
@ -163,6 +167,7 @@ def seven_activities_user_1():
duration=datetime.timedelta(seconds=1024) duration=datetime.timedelta(seconds=1024)
) )
activity.ave_speed = float(activity.distance) / (1024 / 3600) activity.ave_speed = float(activity.distance) / (1024 / 3600)
activity.moving = activity.duration
db.session.add(activity) db.session.add(activity)
db.session.flush() db.session.flush()
activity = Activity( activity = Activity(
@ -173,6 +178,7 @@ def seven_activities_user_1():
duration=datetime.timedelta(seconds=600) duration=datetime.timedelta(seconds=600)
) )
activity.ave_speed = float(activity.distance) / (600 / 3600) activity.ave_speed = float(activity.distance) / (600 / 3600)
activity.moving = activity.duration
db.session.add(activity) db.session.add(activity)
db.session.flush() db.session.flush()
activity = Activity( activity = Activity(
@ -183,6 +189,7 @@ def seven_activities_user_1():
duration=datetime.timedelta(seconds=1000) duration=datetime.timedelta(seconds=1000)
) )
activity.ave_speed = float(activity.distance) / (1000 / 3600) activity.ave_speed = float(activity.distance) / (1000 / 3600)
activity.moving = activity.duration
db.session.add(activity) db.session.add(activity)
db.session.flush() db.session.flush()
activity = Activity( activity = Activity(
@ -193,6 +200,7 @@ def seven_activities_user_1():
duration=datetime.timedelta(seconds=6000) duration=datetime.timedelta(seconds=6000)
) )
activity.ave_speed = float(activity.distance) / (6000 / 3600) activity.ave_speed = float(activity.distance) / (6000 / 3600)
activity.moving = activity.duration
db.session.add(activity) db.session.add(activity)
db.session.flush() db.session.flush()
activity = Activity( activity = Activity(
@ -203,6 +211,7 @@ def seven_activities_user_1():
duration=datetime.timedelta(seconds=3000) duration=datetime.timedelta(seconds=3000)
) )
activity.ave_speed = float(activity.distance) / (3000 / 3600) activity.ave_speed = float(activity.distance) / (3000 / 3600)
activity.moving = activity.duration
db.session.add(activity) db.session.add(activity)
db.session.commit() db.session.commit()
return activity return activity
@ -217,6 +226,7 @@ def activity_cycling_user_2():
distance=15, distance=15,
duration=datetime.timedelta(seconds=3600) duration=datetime.timedelta(seconds=3600)
) )
activity.moving = activity.duration
db.session.add(activity) db.session.add(activity)
db.session.commit() db.session.commit()
return activity return activity

View File

@ -1,4 +1,4 @@
FROM node:10.9.0 FROM node:11.6.0
MAINTAINER SamR1@users.noreply.github.com MAINTAINER SamR1@users.noreply.github.com

View File

@ -12,5 +12,5 @@
"display": "standalone", "display": "standalone",
"theme_color": "#000000", "theme_color": "#000000",
"background_color": "#ffffff", "background_color": "#ffffff",
"version": "0.2.0" "version": "0.2.0-beta"
} }

View File

@ -1,7 +1,8 @@
import React from 'react' import React from 'react'
export default function ActivitiesList (props) { export default class ActivitiesFilter extends React.PureComponent {
const { loadActivities, sports, updateParams } = props render() {
const { loadActivities, sports, updateParams } = this.props
return ( return (
<div className="card"> <div className="card">
<div className="card-body activity-filter"> <div className="card-body activity-filter">
@ -173,4 +174,5 @@ export default function ActivitiesList (props) {
</div> </div>
</div> </div>
) )
}
} }

View File

@ -4,8 +4,9 @@ import { Link } from 'react-router-dom'
import { getDateWithTZ } from '../../utils' import { getDateWithTZ } from '../../utils'
export default function ActivitiesList (props) { export default class ActivitiesList extends React.PureComponent {
const { activities, sports, user } = props render() {
const { activities, sports, user } = this.props
return ( return (
<div className="card activity-card"> <div className="card activity-card">
<div className="card-body"> <div className="card-body">
@ -22,10 +23,10 @@ export default function ActivitiesList (props) {
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
{ sports && activities.map((activity, idx) => ( {sports && activities.map((activity, idx) => (
// eslint-disable-next-line react/no-array-index-key // eslint-disable-next-line react/no-array-index-key
<tr key={idx}> <tr key={idx}>
<td > <td>
<img <img
className="activity-sport" className="activity-sport"
src={sports src={sports
@ -34,7 +35,7 @@ export default function ActivitiesList (props) {
alt="activity sport logo" alt="activity sport logo"
/> />
</td> </td>
<td > <td>
<Link to={`/activities/${activity.id}`}> <Link to={`/activities/${activity.id}`}>
{activity.title} {activity.title}
</Link> </Link>
@ -48,7 +49,7 @@ export default function ActivitiesList (props) {
<td className="text-right"> <td className="text-right">
{Number(activity.distance).toFixed(2)} km {Number(activity.distance).toFixed(2)} km
</td> </td>
<td className="text-right">{activity.duration}</td> <td className="text-right">{activity.moving}</td>
<td className="text-right">{activity.ave_speed} km/h</td> <td className="text-right">{activity.ave_speed} km/h</td>
<td className="text-right">{activity.max_speed} km/h</td> <td className="text-right">{activity.max_speed} km/h</td>
</tr> </tr>
@ -58,4 +59,5 @@ export default function ActivitiesList (props) {
</div> </div>
</div> </div>
) )
}
} }

View File

@ -13,15 +13,7 @@ export default function ActivityDetails(props) {
className="fa fa-clock-o custom-fa" className="fa fa-clock-o custom-fa"
aria-hidden="true" aria-hidden="true"
/> />
Duration: {activity.duration} Duration: {activity.moving}
{withPauses && (
<span>
{' '}
(pauses: {activity.pauses})
<br />
Moving duration: {activity.moving}
</span>
)}
{recordLDexists && ( {recordLDexists && (
<sup> <sup>
<i <i
@ -30,6 +22,12 @@ export default function ActivityDetails(props) {
/> />
</sup> </sup>
)} )}
{withPauses && (
<span>
<br />
(pauses: {activity.pauses}, total duration: {activity.duration})
</span>
)}
</p> </p>
<p> <p>
<i <i

View File

@ -57,7 +57,7 @@ function FormWithGpx (props) {
gpxLimit} files max): gpxLimit} files max):
<input <input
accept=".gpx, .zip" accept=".gpx, .zip"
className="form-control input-lg" className="form-control form-control-file gpx-file"
disabled={loading} disabled={loading}
name="gpxFile" name="gpxFile"
required required
@ -95,7 +95,7 @@ function FormWithGpx (props) {
<input <input
type="submit" type="submit"
className="btn btn-secondary btn-lg btn-block" className="btn btn-secondary btn-lg btn-block"
onClick={() => history.go(-1)} onClick={() => history.push('/')}
value="Cancel" value="Cancel"
/> />
</div> </div>

View File

@ -123,7 +123,7 @@ function FormWithoutGpx (props) {
<input <input
type="submit" type="submit"
className="btn btn-secondary btn-lg btn-block" className="btn btn-secondary btn-lg btn-block"
onClick={() => history.go(-1)} onClick={() => history.push('/')}
value="Cancel" value="Cancel"
/> />
</form> </form>

View File

@ -251,6 +251,10 @@ label {
width: 100%; width: 100%;
} }
.gpx-file {
height: inherit;
}
.huge { .huge {
font-size: 25px; font-size: 25px;
} }
@ -325,6 +329,10 @@ label {
max-height: 45px; max-height: 45px;
} }
.timezone-custom-height {
height: calc(2.25rem + 14px);
}
.timezone-picker { .timezone-picker {
padding: 0; padding: 0;
} }

View File

@ -49,7 +49,7 @@ export default function ActivityCard (props) {
<div className="col"> <div className="col">
<p> <p>
<i className="fa fa-clock-o" aria-hidden="true" />{' '} <i className="fa fa-clock-o" aria-hidden="true" />{' '}
Duration: {activity.duration} Duration: {activity.moving}
{activity.map ? ( {activity.map ? (
<span><br /><br /></span> <span><br /><br /></span>
) : ( ) : (

View File

@ -4,8 +4,9 @@ import { Link } from 'react-router-dom'
import { apiUrl } from '../../utils' import { apiUrl } from '../../utils'
class NavBar extends React.PureComponent {
function NavBar(props) { render() {
const { id, isAuthenticated, picture, username } = this.props
return ( return (
<header> <header>
<nav className="navbar navbar-expand-lg navbar-light bg-light"> <nav className="navbar navbar-expand-lg navbar-light bg-light">
@ -22,7 +23,10 @@ function NavBar(props) {
> >
<span className="navbar-toggler-icon" /> <span className="navbar-toggler-icon" />
</button> </button>
<div className="collapse navbar-collapse" id="navbarSupportedContent"> <div
className="collapse navbar-collapse"
id="navbarSupportedContent"
>
<ul className="navbar-nav mr-auto"> <ul className="navbar-nav mr-auto">
<li className="nav-item"> <li className="nav-item">
<Link <Link
@ -34,7 +38,7 @@ function NavBar(props) {
Dashboard Dashboard
</Link> </Link>
</li> </li>
{props.user.isAuthenticated && ( {isAuthenticated && (
<li className="nav-item"> <li className="nav-item">
<Link <Link
className="nav-link" className="nav-link"
@ -46,7 +50,7 @@ function NavBar(props) {
</Link> </Link>
</li> </li>
)} )}
{props.user.isAuthenticated && ( {isAuthenticated && (
<li className="nav-item"> <li className="nav-item">
<Link <Link
className="nav-link" className="nav-link"
@ -58,7 +62,7 @@ function NavBar(props) {
</Link> </Link>
</li> </li>
)} )}
{props.user.isAuthenticated && ( {isAuthenticated && (
<li className="nav-item"> <li className="nav-item">
<Link <Link
className="nav-link" className="nav-link"
@ -70,7 +74,7 @@ function NavBar(props) {
</Link> </Link>
</li> </li>
)} )}
{/* {props.user.admin && ( */} {/* {user.admin && ( */}
{/* <li className="nav-item"> */} {/* <li className="nav-item"> */}
{/* <Link */} {/* <Link */}
{/* className="nav-link" */} {/* className="nav-link" */}
@ -84,7 +88,7 @@ function NavBar(props) {
{/* )} */} {/* )} */}
</ul> </ul>
<ul className="navbar-nav flex-row ml-md-auto d-none d-md-flex"> <ul className="navbar-nav flex-row ml-md-auto d-none d-md-flex">
{!props.user.isAuthenticated && ( {!isAuthenticated && (
<li className="nav-item"> <li className="nav-item">
<Link <Link
className="nav-link" className="nav-link"
@ -96,7 +100,7 @@ function NavBar(props) {
</Link> </Link>
</li> </li>
)} )}
{!props.user.isAuthenticated && ( {!isAuthenticated && (
<li className="nav-item"> <li className="nav-item">
<Link <Link
className="nav-link" className="nav-link"
@ -108,15 +112,15 @@ function NavBar(props) {
</Link> </Link>
</li> </li>
)} )}
{props.user.picture === true && ( {picture === true && (
<img <img
alt="Avatar" alt="Avatar"
src={`${apiUrl}users/${props.user.id}/picture` + src={`${apiUrl}users/${id}/picture` +
`?${Date.now()}`} `?${Date.now()}`}
className="img-fluid App-nav-profile-img" className="img-fluid App-nav-profile-img"
/> />
)} )}
{props.user.isAuthenticated && ( {isAuthenticated && (
<li className="nav-item"> <li className="nav-item">
<Link <Link
className="nav-link" className="nav-link"
@ -124,11 +128,11 @@ function NavBar(props) {
pathname: '/profile', pathname: '/profile',
}} }}
> >
{props.user.username} {username}
</Link> </Link>
</li> </li>
)} )}
{props.user.isAuthenticated && ( {isAuthenticated && (
<li className="nav-item"> <li className="nav-item">
<Link <Link
className="nav-link" className="nav-link"
@ -146,10 +150,14 @@ function NavBar(props) {
</nav> </nav>
</header> </header>
) )
}
} }
export default connect( export default connect(
state => ({ ({ user }) => ({
user: state.user, id: user.id,
isAuthenticated: user.isAuthenticated,
picture: user.picture,
username: user.username,
}) })
)(NavBar) )(NavBar)

View File

@ -173,7 +173,6 @@ class ProfileEdit extends React.Component {
name="bio" name="bio"
className="form-control input-lg" className="form-control input-lg"
maxLength="200" maxLength="200"
type="text"
value={formData.bio} value={formData.bio}
onChange={e => this.handleFormChange(e)} onChange={e => this.handleFormChange(e)}
/> />
@ -183,7 +182,7 @@ class ProfileEdit extends React.Component {
<label> <label>
Timezone: Timezone:
<TimezonePicker <TimezonePicker
className="form-control" className="form-control timezone-custom-height"
onChange={tz => { onChange={tz => {
const e = { target: const e = { target:
{ {

View File

@ -1,7 +1,7 @@
import { format, parse } from 'date-fns' import { format, parse } from 'date-fns'
import { DateTime } from 'luxon' import { DateTime } from 'luxon'
export const version = '0.2.0' // version stored in 'utils' for now export const version = '0.2.0-beta' // version stored in 'utils' for now
export const apiUrl = `${process.env.REACT_APP_API_URL}/api/` export const apiUrl = `${process.env.REACT_APP_API_URL}/api/`
export const thunderforestApiKey = `${ export const thunderforestApiKey = `${
process.env.REACT_APP_THUNDERFOREST_API_KEY process.env.REACT_APP_THUNDERFOREST_API_KEY

View File

@ -4,8 +4,6 @@
"private": true, "private": true,
"dependencies": { "dependencies": {
"@mapbox/togeojson": "^0.16.0", "@mapbox/togeojson": "^0.16.0",
"add": "^2.0.6",
"chalk": "2.4.1",
"connected-react-router": "^6.1.0", "connected-react-router": "^6.1.0",
"date-fns": "^1.29.0", "date-fns": "^1.29.0",
"history": "^4.7.2", "history": "^4.7.2",

192
yarn.lock
View File

@ -1147,11 +1147,6 @@ acorn@^6.0.1, acorn@^6.0.2, acorn@^6.0.4:
resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.0.5.tgz#81730c0815f3f3b34d8efa95cb7430965f4d887a" resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.0.5.tgz#81730c0815f3f3b34d8efa95cb7430965f4d887a"
integrity sha512-i33Zgp3XWtmZBMNvCr4azvOFeWVw1Rk6p3hfi3LUDvIFraOMywb1kAtrbi+med14m4Xfpqm3zRZMT+c0FNE7kg== integrity sha512-i33Zgp3XWtmZBMNvCr4azvOFeWVw1Rk6p3hfi3LUDvIFraOMywb1kAtrbi+med14m4Xfpqm3zRZMT+c0FNE7kg==
add@^2.0.6:
version "2.0.6"
resolved "https://registry.yarnpkg.com/add/-/add-2.0.6.tgz#248f0a9f6e5a528ef2295dbeec30532130ae2235"
integrity sha1-JI8Kn25aUo7yKV2+7DBTITCuIjU=
address@1.0.3, address@^1.0.1: address@1.0.3, address@^1.0.1:
version "1.0.3" version "1.0.3"
resolved "https://registry.yarnpkg.com/address/-/address-1.0.3.tgz#b5f50631f8d6cec8bd20c963963afb55e06cbce9" resolved "https://registry.yarnpkg.com/address/-/address-1.0.3.tgz#b5f50631f8d6cec8bd20c963963afb55e06cbce9"
@ -1507,15 +1502,15 @@ atob@^2.1.1:
integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==
autoprefixer@^9.3.1: autoprefixer@^9.3.1:
version "9.4.4" version "9.4.5"
resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.4.4.tgz#40c42b335bdb22efe8cd80389ca82ffb5e32d68d" resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.4.5.tgz#a13ccb001e4bc8837f71c3354005b42f02cc03d7"
integrity sha512-7tpjBadJyHKf+gOJEmKhZIksWxdZCSrnKbbTJNsw+/zX9+f//DLELRQPWjjjVoDbbWlCuNRkN7RfmZwDVgWMLw== integrity sha512-M602C0ZxzFpJKqD4V6eq2j+K5CkzlhekCrcQupJmAOrPEZjWJyj/wSeo6qRSNoN6M3/9mtLPQqTTrABfReytQg==
dependencies: dependencies:
browserslist "^4.3.7" browserslist "^4.4.0"
caniuse-lite "^1.0.30000926" caniuse-lite "^1.0.30000928"
normalize-range "^0.1.2" normalize-range "^0.1.2"
num2fraction "^1.2.2" num2fraction "^1.2.2"
postcss "^7.0.7" postcss "^7.0.11"
postcss-value-parser "^3.3.1" postcss-value-parser "^3.3.1"
aws-sign2@~0.7.0: aws-sign2@~0.7.0:
@ -2561,13 +2556,13 @@ browserslist@^3.2.6:
caniuse-lite "^1.0.30000844" caniuse-lite "^1.0.30000844"
electron-to-chromium "^1.3.47" electron-to-chromium "^1.3.47"
browserslist@^4.0.0, browserslist@^4.1.0, browserslist@^4.3.4, browserslist@^4.3.7: browserslist@^4.0.0, browserslist@^4.1.0, browserslist@^4.3.4, browserslist@^4.4.0:
version "4.3.7" version "4.4.0"
resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.3.7.tgz#f1de479a6466ea47a0a26dcc725e7504817e624a" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.4.0.tgz#7050d1412cbfc5274aba609ed5e50359ca1a5fdf"
integrity sha512-pWQv51Ynb0MNk9JGMCZ8VkM785/4MQNXiFYtPqI7EEP0TJO+/d/NqRVn1uiAN0DNbnlUSpL2sh16Kspasv3pUQ== integrity sha512-tQkHS8VVxWbrjnNDXgt7/+SuPJ7qDvD0Y2e6bLtoQluR2SPvlmPUcfcU75L1KAalhqULlIFJlJ6BDfnYyJxJsw==
dependencies: dependencies:
caniuse-lite "^1.0.30000925" caniuse-lite "^1.0.30000928"
electron-to-chromium "^1.3.96" electron-to-chromium "^1.3.100"
node-releases "^1.1.3" node-releases "^1.1.3"
bser@^2.0.0: bser@^2.0.0:
@ -2753,10 +2748,10 @@ caniuse-api@^3.0.0:
lodash.memoize "^4.1.2" lodash.memoize "^4.1.2"
lodash.uniq "^4.5.0" lodash.uniq "^4.5.0"
caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000844, caniuse-lite@^1.0.30000884, caniuse-lite@^1.0.30000905, caniuse-lite@^1.0.30000925, caniuse-lite@^1.0.30000926: caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000844, caniuse-lite@^1.0.30000884, caniuse-lite@^1.0.30000905, caniuse-lite@^1.0.30000928:
version "1.0.30000927" version "1.0.30000928"
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000927.tgz#114a9de4ff1e01f5790fe578ecd93421c7524665" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000928.tgz#805e828dc72b06498e3683a32e61c7507fd67b88"
integrity sha512-ogq4NbUWf1uG/j66k0AmiO3GjqJAlQyF8n4w8a954cbCyFKmYGvRtgz6qkq2fWuduTXHibX7GyYL5Pg58Aks2g== integrity sha512-aSpMWRXL6ZXNnzm8hgE4QDLibG5pVJ2Ujzsuj3icazlIkxXkPXtL+BWnMx6FBkWmkZgBHGUxPZQvrbRw2ZTxhg==
capture-exit@^1.2.0: capture-exit@^1.2.0:
version "1.2.0" version "1.2.0"
@ -2787,7 +2782,7 @@ chai@^4.1.2:
pathval "^1.1.0" pathval "^1.1.0"
type-detect "^4.0.5" type-detect "^4.0.5"
chalk@2.4.1, chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.4.0, chalk@^2.4.1: chalk@2.4.1:
version "2.4.1" version "2.4.1"
resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.1.tgz#18c49ab16a037b6eb0152cc83e3471338215b66e" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.1.tgz#18c49ab16a037b6eb0152cc83e3471338215b66e"
integrity sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ== integrity sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==
@ -2807,6 +2802,15 @@ chalk@^1.1.0, chalk@^1.1.3:
strip-ansi "^3.0.0" strip-ansi "^3.0.0"
supports-color "^2.0.0" supports-color "^2.0.0"
chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.4.0, chalk@^2.4.1, chalk@^2.4.2:
version "2.4.2"
resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
dependencies:
ansi-styles "^3.2.1"
escape-string-regexp "^1.0.5"
supports-color "^5.3.0"
chardet@^0.7.0: chardet@^0.7.0:
version "0.7.0" version "0.7.0"
resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e"
@ -3111,9 +3115,9 @@ confusing-browser-globals@^1.0.5:
integrity sha512-tHo1tQL/9Ox5RELbkCAJhnViqWlzBz3MG1bB2czbHjH2mWd4aYUgNCNLfysFL7c4LoDws7pjg2tj48Gmpw4QHA== integrity sha512-tHo1tQL/9Ox5RELbkCAJhnViqWlzBz3MG1bB2czbHjH2mWd4aYUgNCNLfysFL7c4LoDws7pjg2tj48Gmpw4QHA==
connect-history-api-fallback@^1.3.0: connect-history-api-fallback@^1.3.0:
version "1.5.0" version "1.6.0"
resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz#b06873934bc5e344fef611a196a6faae0aee015a" resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz#8b32089359308d111115d81cad3fceab888f97bc"
integrity sha1-sGhzk0vF40T+9hGhlqb6rgruAVo= integrity sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==
connected-domain@^1.0.0: connected-domain@^1.0.0:
version "1.0.0" version "1.0.0"
@ -3121,9 +3125,9 @@ connected-domain@^1.0.0:
integrity sha1-v+dyOMdL5FOnnwy2BY3utPI1jpM= integrity sha1-v+dyOMdL5FOnnwy2BY3utPI1jpM=
connected-react-router@^6.1.0: connected-react-router@^6.1.0:
version "6.1.0" version "6.2.0"
resolved "https://registry.yarnpkg.com/connected-react-router/-/connected-react-router-6.1.0.tgz#a6f361313cf0a37c8c33578494bb813d09252abf" resolved "https://registry.yarnpkg.com/connected-react-router/-/connected-react-router-6.2.0.tgz#f984a5be5abf50d78a9f0c5841431077b9ca627e"
integrity sha512-sdu+rf6TvjH3/I/S6+VFV9efThSyyRVwOhTZhC7XdqqZ700PdqgzfPr3sSK635JPbBFYhFYP97/KWTFdjldL0A== integrity sha512-hgDt+NhtjKHg7m0zpD2eMs0mcgC2kqQITdTQvEWOK26vT6RXDOA8KyzzZ4H04/1zGKUrvwjqrsHHvZ4dQTo/dQ==
dependencies: dependencies:
immutable "^3.8.1" immutable "^3.8.1"
seamless-immutable "^7.1.3" seamless-immutable "^7.1.3"
@ -3205,9 +3209,9 @@ core-js@^1.0.0:
integrity sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY= integrity sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=
core-js@^2.4.0, core-js@^2.5.0: core-js@^2.4.0, core-js@^2.5.0:
version "2.6.1" version "2.6.2"
resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.1.tgz#87416ae817de957a3f249b3b5ca475d4aaed6042" resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.2.tgz#267988d7268323b349e20b4588211655f0e83944"
integrity sha512-L72mmmEayPJBejKIWe2pYtGis5r0tQ5NaJekdhyXgeMQTpJoBsH0NL4ElY2LfSoV15xeQWKQ+XTTOZdyero5Xg== integrity sha512-NdBPF/RVwPW6jr0NCILuyN9RiqLo2b1mddWHkUL+VnvcB7dzlnBJ1bXYntjpTGOgkZiiLWj2JxmOr7eGE3qK6g==
core-util-is@1.0.2, core-util-is@~1.0.0: core-util-is@1.0.2, core-util-is@~1.0.0:
version "1.0.2" version "1.0.2"
@ -3833,11 +3837,10 @@ diffie-hellman@^5.0.0:
randombytes "^2.0.0" randombytes "^2.0.0"
dir-glob@^2.0.0: dir-glob@^2.0.0:
version "2.0.0" version "2.2.1"
resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-2.0.0.tgz#0b205d2b6aef98238ca286598a8204d29d0a0034" resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-2.2.1.tgz#ce8413234ffe8452b76b7741c32f116cf2a7b1a7"
integrity sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag== integrity sha512-UN6X6XwRjllabfRhBdkVSo63uurJ8nSvMGrwl94EYVz6g+exhTV+yVSYk5VC/xl3MBFBTtC0J20uFKce4Brrng==
dependencies: dependencies:
arrify "^1.0.1"
path-type "^3.0.0" path-type "^3.0.0"
dns-equal@^1.0.0: dns-equal@^1.0.0:
@ -3994,10 +3997,10 @@ ee-first@1.1.1:
resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=
electron-to-chromium@^1.3.47, electron-to-chromium@^1.3.62, electron-to-chromium@^1.3.96: electron-to-chromium@^1.3.100, electron-to-chromium@^1.3.47, electron-to-chromium@^1.3.62:
version "1.3.98" version "1.3.102"
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.98.tgz#f200bdac84b1110d7d9904f34f4fc6d5573a8a9c" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.102.tgz#3ac43a037c8a63bca3dfa189eb3d90f097196787"
integrity sha512-WIZdNuvE3dFr6kkPgv4d/cfswNZD6XbeLBM8baOIQTsnbf4xWrVEaLvp7oNnbnMWWXDqq7Tbv+H5JfciLTJm4Q== integrity sha512-2nzZuXw/KBPnI3QX3UOCSRvJiVy7o9+VHRDQ3D/EHCvVc89X6aj/GlNmEgiR2GBIhmSWXIi4W1M5okA5ScSlNg==
elegant-spinner@^1.0.1: elegant-spinner@^1.0.1:
version "1.0.1" version "1.0.1"
@ -4571,9 +4574,9 @@ fast-deep-equal@^2.0.1:
integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk= integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=
fast-glob@^2.0.2: fast-glob@^2.0.2:
version "2.2.4" version "2.2.6"
resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-2.2.4.tgz#e54f4b66d378040e0e4d6a68ec36bbc5b04363c0" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-2.2.6.tgz#a5d5b697ec8deda468d85a74035290a025a95295"
integrity sha512-FjK2nCGI/McyzgNtTESqaWP3trPvHyRyoyY70hxjc3oKPNmDe8taohLZpoVKoUjW85tbU5txaYUZCNtVzygl1g== integrity sha512-0BvMaZc1k9F+MeWWMe8pL6YltFzZYcJsYU7D4JyDA6PAczaXvxqQQ/z+mDF7/4Mw01DeUc+i3CTKajnkANkV4w==
dependencies: dependencies:
"@mrmlnc/readdir-enhanced" "^2.2.1" "@mrmlnc/readdir-enhanced" "^2.2.1"
"@nodelib/fs.stat" "^1.1.2" "@nodelib/fs.stat" "^1.1.2"
@ -5051,9 +5054,9 @@ global-prefix@^1.0.1:
which "^1.2.14" which "^1.2.14"
globals@^11.1.0, globals@^11.7.0: globals@^11.1.0, globals@^11.7.0:
version "11.9.0" version "11.10.0"
resolved "https://registry.yarnpkg.com/globals/-/globals-11.9.0.tgz#bde236808e987f290768a93d065060d78e6ab249" resolved "https://registry.yarnpkg.com/globals/-/globals-11.10.0.tgz#1e09776dffda5e01816b3bb4077c8b59c24eaa50"
integrity sha512-5cJVtyXWH8PiJPVLZzzoIizXx944O4OmRro5MWKx5fT4MgcN7OfaMutPeaTdJCCURwbWdhhcCWcKIffPnmTzBg== integrity sha512-0GZF1RiPKU97IHUO5TORo9w1PwrH/NBPl+fS7oMLdaTRiYmYbwK4NWoZWrAdd0/abG9R2BU+OiwyQpTpE6pdfQ==
globals@^9.18.0: globals@^9.18.0:
version "9.18.0" version "9.18.0"
@ -5739,6 +5742,11 @@ ip-regex@^2.1.0:
resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9"
integrity sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk= integrity sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=
ip-regex@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-3.0.0.tgz#0a934694b4066558c46294244a23cc33116bf732"
integrity sha512-T8wDtjy+Qf2TAPDQmBp0eGKJ8GavlWlUnamr3wRn6vvdZlKVuJXXMlSncYFRYgVHOM3If5NR1H4+OvVQU9Idvg==
ip@^1.1.0, ip@^1.1.3, ip@^1.1.5: ip@^1.1.0, ip@^1.1.3, ip@^1.1.5:
version "1.1.5" version "1.1.5"
resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a"
@ -6519,9 +6527,9 @@ joi@^11.1.1:
topo "2.x.x" topo "2.x.x"
js-levenshtein@^1.1.3: js-levenshtein@^1.1.3:
version "1.1.4" version "1.1.6"
resolved "https://registry.yarnpkg.com/js-levenshtein/-/js-levenshtein-1.1.4.tgz#3a56e3cbf589ca0081eb22cd9ba0b1290a16d26e" resolved "https://registry.yarnpkg.com/js-levenshtein/-/js-levenshtein-1.1.6.tgz#c6cee58eb3550372df8deb85fad5ce66ce01d59d"
integrity sha512-PxfGzSs0ztShKrUYPIn5r0MtyAhYcCwmndozzpz8YObbPnD1jFxzlBGbRnX2mIu6Z13xN6+PTu05TQFnZFlzow== integrity sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==
js-tokens@^3.0.0, js-tokens@^3.0.2: js-tokens@^3.0.0, js-tokens@^3.0.2:
version "3.0.2" version "3.0.2"
@ -6886,11 +6894,6 @@ locate-path@^3.0.0:
p-locate "^3.0.0" p-locate "^3.0.0"
path-exists "^3.0.0" path-exists "^3.0.0"
lodash-es@^4.0.0:
version "4.17.11"
resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.11.tgz#145ab4a7ac5c5e52a3531fb4f310255a152b4be0"
integrity sha512-DHb1ub+rMjjrxqlB3H56/6MXtm1lSksDp2rA2cNWjG8mlDUYFhUj3Di2Zn5IwSU87xLv8tNIQ7sSwE/YOX/D/Q==
lodash._reinterpolate@~3.0.0: lodash._reinterpolate@~3.0.0:
version "3.0.0" version "3.0.0"
resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d"
@ -6951,7 +6954,7 @@ lodash@4.17.10:
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.10.tgz#1b7793cf7259ea38fb3661d4d38b3260af8ae4e7" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.10.tgz#1b7793cf7259ea38fb3661d4d38b3260af8ae4e7"
integrity sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg== integrity sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==
"lodash@4.6.1 || ^4.16.1", "lodash@>=3.5 <5", lodash@^4.0.0, lodash@^4.13.1, lodash@^4.14.0, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.4, lodash@^4.17.5, lodash@~4.17.4: "lodash@4.6.1 || ^4.16.1", "lodash@>=3.5 <5", lodash@^4.13.1, lodash@^4.14.0, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.4, lodash@^4.17.5, lodash@~4.17.4:
version "4.17.11" version "4.17.11"
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d"
integrity sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg== integrity sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==
@ -7004,9 +7007,9 @@ lru-cache@^5.1.1:
yallist "^3.0.2" yallist "^3.0.2"
luxon@^1.7.1: luxon@^1.7.1:
version "1.9.0" version "1.10.0"
resolved "https://registry.yarnpkg.com/luxon/-/luxon-1.9.0.tgz#0a1d56a14cfe71a71024463498933da1a4796420" resolved "https://registry.yarnpkg.com/luxon/-/luxon-1.10.0.tgz#335b55e2fed50e09f869aee828897a3f67c7044e"
integrity sha512-N1kSwtIEhM/gIRGASXPgi1CwfQZX5VTjndYFjOsZdEEtWij2uSoRrgDGWwViZCUNY9Rwh4UVG/TLcUinHM20cA== integrity sha512-ry3GKh//v3isD6oJN5pFWmdh+3GiScwv9q8VgG6fZ2j1guGOol2vVVdo4GBAWCrcq5RHOqSeipqHBnOu/u024Q==
make-dir@^1.0.0, make-dir@^1.3.0: make-dir@^1.0.0, make-dir@^1.3.0:
version "1.3.0" version "1.3.0"
@ -7064,9 +7067,9 @@ math-expression-evaluator@^1.2.14:
integrity sha1-3oGf282E3M2PrlnGrreWFbnSZqw= integrity sha1-3oGf282E3M2PrlnGrreWFbnSZqw=
math-random@^1.0.1: math-random@^1.0.1:
version "1.0.1" version "1.0.2"
resolved "https://registry.yarnpkg.com/math-random/-/math-random-1.0.1.tgz#8b3aac588b8a66e4975e3cdea67f7bb329601fac" resolved "https://registry.yarnpkg.com/math-random/-/math-random-1.0.2.tgz#8ab7f026363816c1e00b774d87dee67f61e37ad6"
integrity sha1-izqsWIuKZuSXXjzepn97sylgH6w= integrity sha512-Bp2Bx2wFaUymE7pWi0bbldiheIXMvyzC3hRkT5YAv2qiqqJO5VB8KafgYgZmGCxkTmloLuAx3Jv2OmJ66990mg==
md5.js@^1.3.4: md5.js@^1.3.4:
version "1.3.5" version "1.3.5"
@ -8172,12 +8175,12 @@ posix-character-classes@^0.1.0:
integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=
postcss-attribute-case-insensitive@^4.0.0: postcss-attribute-case-insensitive@^4.0.0:
version "4.0.0" version "4.0.1"
resolved "https://registry.yarnpkg.com/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-4.0.0.tgz#807b6a797ad8bf1c821b2d51cf641e9dd3837624" resolved "https://registry.yarnpkg.com/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-4.0.1.tgz#b2a721a0d279c2f9103a36331c88981526428cc7"
integrity sha512-K/zqdg0/UgUgC8qR0lDuxYzmowPpnvrrNC5YuoqzhHMubR9AuhsPlpVu3jjkLHgDAzR+ohD/m7//iGnN9WxbzQ== integrity sha512-L2YKB3vF4PetdTIthQVeT+7YiSzMoNMLLYxPXXppOOP7NoazEAy45sh2LvJ8leCQjfBcfkYQs8TtCcQjeZTp8A==
dependencies: dependencies:
postcss "^7.0.2" postcss "^7.0.2"
postcss-selector-parser "^5.0.0-rc.3" postcss-selector-parser "^5.0.0"
postcss-calc@^7.0.0: postcss-calc@^7.0.0:
version "7.0.1" version "7.0.1"
@ -8736,7 +8739,7 @@ postcss-selector-parser@^3.0.0:
indexes-of "^1.0.1" indexes-of "^1.0.1"
uniq "^1.0.1" uniq "^1.0.1"
postcss-selector-parser@^5.0.0-rc.3, postcss-selector-parser@^5.0.0-rc.4: postcss-selector-parser@^5.0.0, postcss-selector-parser@^5.0.0-rc.3, postcss-selector-parser@^5.0.0-rc.4:
version "5.0.0" version "5.0.0"
resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz#249044356697b33b64f1a8f7c80922dddee7195c" resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz#249044356697b33b64f1a8f7c80922dddee7195c"
integrity sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ== integrity sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==
@ -8787,14 +8790,14 @@ postcss@^6.0.1, postcss@^6.0.23:
source-map "^0.6.1" source-map "^0.6.1"
supports-color "^5.4.0" supports-color "^5.4.0"
postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.2, postcss@^7.0.5, postcss@^7.0.7: postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.11, postcss@^7.0.2, postcss@^7.0.5:
version "7.0.7" version "7.0.11"
resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.7.tgz#2754d073f77acb4ef08f1235c36c5721a7201614" resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.11.tgz#f63c513b78026d66263bb2ca995bf02e3d1a697d"
integrity sha512-HThWSJEPkupqew2fnuQMEI2YcTj/8gMV3n80cMdJsKxfIh5tHf7nM5JigNX6LxVMqo6zkgQNAI88hyFvBk41Pg== integrity sha512-9AXb//5UcjeOEof9T+yPw3XTa5SL207ZOIC/lHYP4mbUTEh4M0rDAQekQpVANCZdwQwKhBtFZCk3i3h3h2hdWg==
dependencies: dependencies:
chalk "^2.4.1" chalk "^2.4.2"
source-map "^0.6.1" source-map "^0.6.1"
supports-color "^5.5.0" supports-color "^6.1.0"
prelude-ls@~1.1.2: prelude-ls@~1.1.2:
version "1.1.2" version "1.1.2"
@ -9151,14 +9154,13 @@ react-is@^16.3.2, react-is@^16.6.3:
integrity sha512-Z0VRQdF4NPDoI0tsXVMLkJLiwEBa+RP66g0xDHxgxysxSoCUccSten4RTF/UFvZF1dZvZ9Zu1sx+MDXwcOR34g== integrity sha512-Z0VRQdF4NPDoI0tsXVMLkJLiwEBa+RP66g0xDHxgxysxSoCUccSten4RTF/UFvZF1dZvZ9Zu1sx+MDXwcOR34g==
react-leaflet@^2.1.2: react-leaflet@^2.1.2:
version "2.1.4" version "2.2.0"
resolved "https://registry.yarnpkg.com/react-leaflet/-/react-leaflet-2.1.4.tgz#44192a972892c690d4148e48dacd613168fd8cc4" resolved "https://registry.yarnpkg.com/react-leaflet/-/react-leaflet-2.2.0.tgz#9372dc74790515cef723a173833009b7709cbec6"
integrity sha512-OJvLq13ID5X6H/AM7woPmuqK7qEjT7RE81kysYU3X4HACsumAmvRuWffffxQ8Fl+m2cxkqF78eRmsWj5w9r1xw== integrity sha512-TCjqIp9ET2LMOK+rBjJTQQesk/9UrP6+zsXoSJU8ZzuyJWVQERLGadDng4yZ63XgIcB7aEAXnl93IsmF46uDyQ==
dependencies: dependencies:
"@babel/runtime" "^7.2.0" "@babel/runtime" "^7.2.0"
fast-deep-equal "^2.0.1"
hoist-non-react-statics "^3.2.1" hoist-non-react-statics "^3.2.1"
lodash "^4.0.0"
lodash-es "^4.0.0"
warning "^4.0.0" warning "^4.0.0"
react-lifecycles-compat@^3.0.4: react-lifecycles-compat@^3.0.4:
@ -9287,9 +9289,9 @@ react-smooth@~1.0.0:
react-transition-group "^2.5.0" react-transition-group "^2.5.0"
react-timezone@^2.1.0: react-timezone@^2.1.0:
version "2.1.0" version "2.2.0"
resolved "https://registry.yarnpkg.com/react-timezone/-/react-timezone-2.1.0.tgz#4e730ad5da4f74d832031effdc4cb75f88a5badd" resolved "https://registry.yarnpkg.com/react-timezone/-/react-timezone-2.2.0.tgz#baf123acfa19de6c03ea221648670608f46ca1b7"
integrity sha512-xRzlB5WMA27Y3igSDr0khKAGVFVRzuUecXIZUFndS/hUc9EOvbu3qmzs9BA0N2Mfp8GnLMbhNYA/J7BgZrCodw== integrity sha512-K0sn5Gxy21iidyY4HLqQRy6wNUUPeESygLP1Lp7UqxN+z5M1aWv0V8mdc4UZ4zqh4vgLb1c7Df/4ScmYogHiqw==
dependencies: dependencies:
prop-types "^15.6.1" prop-types "^15.6.1"
@ -9895,9 +9897,9 @@ sax@^1.2.4, sax@~1.2.4:
integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==
saxes@^3.1.4: saxes@^3.1.4:
version "3.1.4" version "3.1.5"
resolved "https://registry.yarnpkg.com/saxes/-/saxes-3.1.4.tgz#4ad5c53eb085ac0570ea1071a07aaf22ad29cebd" resolved "https://registry.yarnpkg.com/saxes/-/saxes-3.1.5.tgz#ecbba12c7ca99f87f70dbd14a6c57b2b5de8b298"
integrity sha512-GVZmLJnkS4Vl8Pe9o4nc5ALZ615VOVxCmea8Cs0l+8GZw3RQ5XGOSUomIUfuZuk4Todo44v4y+HY1EATkDDiZg== integrity sha512-2mgiX2VOarcQv8G40WdJ5QJniYdsPr0yGedkd98PqApodsS9DG29qyHl/X65OILm7Bapd1/zUUvTHVZwNLhXvQ==
dependencies: dependencies:
xmlchars "^1.3.1" xmlchars "^1.3.1"
@ -10197,9 +10199,9 @@ source-map-support@^0.4.15:
source-map "^0.5.6" source-map "^0.5.6"
source-map-support@^0.5.5, source-map-support@^0.5.6, source-map-support@~0.5.6: source-map-support@^0.5.5, source-map-support@^0.5.6, source-map-support@~0.5.6:
version "0.5.9" version "0.5.10"
resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.9.tgz#41bc953b2534267ea2d605bccfa7bfa3111ced5f" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.10.tgz#2214080bc9d51832511ee2bab96e3c2f9353120c"
integrity sha512-gR6Rw4MvUlYy83vP0vxoVNzM6t8MUXqNuRsuBmBHQDu1Fh6X015FrLdgoDKcNdkwGubozq0P4N0Q37UyFVr1EA== integrity sha512-YfQ3tQFTK/yzlGJuX8pTwa4tifQj4QS2Mj7UegOu8jAz59MqIiMGPXxQhVQiIMNzayuUSF/jEuVnfFF5JqybmQ==
dependencies: dependencies:
buffer-from "^1.0.0" buffer-from "^1.0.0"
source-map "^0.6.0" source-map "^0.6.0"
@ -10526,13 +10528,20 @@ supports-color@^3.1.2:
dependencies: dependencies:
has-flag "^1.0.0" has-flag "^1.0.0"
supports-color@^5.1.0, supports-color@^5.3.0, supports-color@^5.4.0, supports-color@^5.5.0: supports-color@^5.1.0, supports-color@^5.3.0, supports-color@^5.4.0:
version "5.5.0" version "5.5.0"
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
dependencies: dependencies:
has-flag "^3.0.0" has-flag "^3.0.0"
supports-color@^6.1.0:
version "6.1.0"
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3"
integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==
dependencies:
has-flag "^3.0.0"
svgo@^1.0.0, svgo@^1.0.5: svgo@^1.0.0, svgo@^1.0.5:
version "1.1.1" version "1.1.1"
resolved "https://registry.yarnpkg.com/svgo/-/svgo-1.1.1.tgz#12384b03335bcecd85cfa5f4e3375fed671cb985" resolved "https://registry.yarnpkg.com/svgo/-/svgo-1.1.1.tgz#12384b03335bcecd85cfa5f4e3375fed671cb985"
@ -10922,7 +10931,16 @@ tough-cookie@2.3.3:
dependencies: dependencies:
punycode "^1.4.1" punycode "^1.4.1"
tough-cookie@>=2.3.3, tough-cookie@^2.3.4, tough-cookie@^2.5.0: tough-cookie@>=2.3.3:
version "3.0.0"
resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-3.0.0.tgz#d2bceddebde633153ff20a52fa844a0dc71dacef"
integrity sha512-LHMvg+RBP/mAVNqVbOX8t+iJ+tqhBA/t49DuI7+IDAWHrASnesqSu1vWbKB7UrE2yk+HMFUBMadRGMkB4VCfog==
dependencies:
ip-regex "^3.0.0"
psl "^1.1.28"
punycode "^2.1.1"
tough-cookie@^2.3.4, tough-cookie@^2.5.0:
version "2.5.0" version "2.5.0"
resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2"
integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==