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,176 +1,178 @@
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() {
return ( const { loadActivities, sports, updateParams } = this.props
<div className="card"> return (
<div className="card-body activity-filter"> <div className="card">
<form onSubmit={event => event.preventDefault()}> <div className="card-body activity-filter">
<div className="form-group"> <form onSubmit={event => event.preventDefault()}>
<label> <div className="form-group">
From: <label>
<input From:
className="form-control col-md" <input
name="from" className="form-control col-md"
onChange={e => updateParams(e)} name="from"
type="date" onChange={e => updateParams(e)}
/> type="date"
</label> />
<label> </label>
To: <label>
<input To:
className="form-control col-md" <input
name="to" className="form-control col-md"
onChange={e => updateParams(e)} name="to"
type="date" onChange={e => updateParams(e)}
/> type="date"
</label> />
</div> </label>
<div className="form-group"> </div>
<label> <div className="form-group">
Sport: <label>
<select Sport:
className="form-control input-lg" <select
name="sport_id" className="form-control input-lg"
onChange={e => updateParams(e)} name="sport_id"
> onChange={e => updateParams(e)}
<option value="" /> >
{sports.map(sport => ( <option value="" />
<option key={sport.id} value={sport.id}> {sports.map(sport => (
{sport.label} <option key={sport.id} value={sport.id}>
</option> {sport.label}
))} </option>
</select> ))}
</label> </select>
</div> </label>
<div className="form-group"> </div>
<label> <div className="form-group">
Distance (km): <label>
<div className="container"> Distance (km):
<div className="row"> <div className="container">
<div className="col-5"> <div className="row">
<input <div className="col-5">
className="form-control" <input
min={0} className="form-control"
name="distance_from" min={0}
onChange={e => updateParams(e)} name="distance_from"
step="1" onChange={e => updateParams(e)}
type="number" step="1"
/> type="number"
</div> />
<div className="col-2 align-middle text-center">to</div> </div>
<div className="col-5"> <div className="col-2 align-middle text-center">to</div>
<input <div className="col-5">
className="form-control" <input
min={0} className="form-control"
name="distance_to" min={0}
onChange={e => updateParams(e)} name="distance_to"
step="1" onChange={e => updateParams(e)}
type="number" step="1"
/> type="number"
/>
</div>
</div> </div>
</div> </div>
</div> </label>
</label> </div>
</div> <div className="form-group">
<div className="form-group"> <label>
<label> Duration:
Duration: <div className="container">
<div className="container"> <div className="row">
<div className="row"> <div className="col-5">
<div className="col-5"> <input
<input className="form-control"
className="form-control" name="duration_from"
name="duration_from" onChange={e => updateParams(e)}
onChange={e => updateParams(e)} pattern="^([0-9]*[0-9]):([0-5][0-9])$"
pattern="^([0-9]*[0-9]):([0-5][0-9])$" placeholder="hh:mm"
placeholder="hh:mm" type="text"
type="text" />
/> </div>
</div> <div className="col-2 align-middle text-center">to</div>
<div className="col-2 align-middle text-center">to</div> <div className="col-5">
<div className="col-5"> <input
<input className="form-control"
className="form-control" name="duration_to"
name="duration_to" onChange={e => updateParams(e)}
onChange={e => updateParams(e)} pattern="^([0-9]*[0-9]):([0-5][0-9])$"
pattern="^([0-9]*[0-9]):([0-5][0-9])$" placeholder="hh:mm"
placeholder="hh:mm" type="text"
type="text" />
/> </div>
</div> </div>
</div> </div>
</div> </label>
</label> </div>
</div> <div className="form-group">
<div className="form-group"> <label>
<label> Average speed (km/h):
Average speed (km/h): <div className="container">
<div className="container"> <div className="row">
<div className="row"> <div className="col-5">
<div className="col-5"> <input
<input className="form-control"
className="form-control" min={0}
min={0} name="ave_speed_from"
name="ave_speed_from" onChange={e => updateParams(e)}
onChange={e => updateParams(e)} step="1"
step="1" type="number"
type="number" />
/> </div>
</div> <div className="col-2 align-middle text-center">to</div>
<div className="col-2 align-middle text-center">to</div> <div className="col-5">
<div className="col-5"> <input
<input className="form-control"
className="form-control" min={0}
min={0} name="ave_speed_to"
name="ave_speed_to" onChange={e => updateParams(e)}
onChange={e => updateParams(e)} step="1"
step="1" type="number"
type="number" />
/> </div>
</div> </div>
</div> </div>
</div> </label>
</label> </div>
</div> <div className="form-group">
<div className="form-group"> <label>
<label> Max speed (km/h):
Max speed (km/h): <div className="container">
<div className="container"> <div className="row">
<div className="row"> <div className="col-5">
<div className="col-5"> <input
<input className="form-control"
className="form-control" min={0}
min={0} name="max_speed_from"
name="max_speed_from" onChange={e => updateParams(e)}
onChange={e => updateParams(e)} step="1"
step="1" type="number"
type="number" />
/> </div>
</div> <div className="col-2 align-middle text-center">to</div>
<div className="col-2 align-middle text-center">to</div> <div className="col-5">
<div className="col-5"> <input
<input className="form-control"
className="form-control" min={0}
min={0} name="max_speed_to"
name="max_speed_to" onChange={e => updateParams(e)}
onChange={e => updateParams(e)} step="1"
step="1" type="number"
type="number" />
/> </div>
</div> </div>
</div> </div>
</div> </label>
</label> </div>
</div> <input
<input className="btn btn-primary btn-lg btn-block"
className="btn btn-primary btn-lg btn-block" onClick={() => loadActivities()}
onClick={() => loadActivities()} type="submit"
type="submit" value="Filter"
value="Filter" />
/> </form>
</form> </div>
</div> </div>
</div> )
) }
} }

View File

@ -4,13 +4,14 @@ 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() {
return ( const { activities, sports, user } = this.props
<div className="card activity-card"> return (
<div className="card-body"> <div className="card activity-card">
<table className="table"> <div className="card-body">
<thead> <table className="table">
<thead>
<tr> <tr>
<th scope="col" /> <th scope="col" />
<th scope="col">Workout</th> <th scope="col">Workout</th>
@ -20,12 +21,12 @@ export default function ActivitiesList (props) {
<th scope="col">Ave. speed</th> <th scope="col">Ave. speed</th>
<th scope="col">Max. speed</th> <th scope="col">Max. speed</th>
</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,11 +35,11 @@ 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>
</td> </td>
<td> <td>
{format( {format(
getDateWithTZ(activity.activity_date, user.timezone), getDateWithTZ(activity.activity_date, user.timezone),
@ -48,14 +49,15 @@ 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>
))} ))}
</tbody> </tbody>
</table> </table>
</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,152 +4,160 @@ import { Link } from 'react-router-dom'
import { apiUrl } from '../../utils' import { apiUrl } from '../../utils'
class NavBar extends React.PureComponent {
function NavBar(props) { render() {
return ( const { id, isAuthenticated, picture, username } = this.props
<header> return (
<nav className="navbar navbar-expand-lg navbar-light bg-light"> <header>
<div className="container"> <nav className="navbar navbar-expand-lg navbar-light bg-light">
<span className="navbar-brand">FitTrackee</span> <div className="container">
<button <span className="navbar-brand">FitTrackee</span>
className="navbar-toggler" <button
type="button" className="navbar-toggler"
data-toggle="collapse" type="button"
data-target="#navbarSupportedContent" data-toggle="collapse"
aria-controls="navbarSupportedContent" data-target="#navbarSupportedContent"
aria-expanded="false" aria-controls="navbarSupportedContent"
aria-label="Toggle navigation" aria-expanded="false"
> aria-label="Toggle navigation"
<span className="navbar-toggler-icon" /> >
</button> <span className="navbar-toggler-icon" />
<div className="collapse navbar-collapse" id="navbarSupportedContent"> </button>
<ul className="navbar-nav mr-auto"> <div
<li className="nav-item"> className="collapse navbar-collapse"
<Link id="navbarSupportedContent"
className="nav-link" >
to={{ <ul className="navbar-nav mr-auto">
pathname: '/',
}}
>
Dashboard
</Link>
</li>
{props.user.isAuthenticated && (
<li className="nav-item"> <li className="nav-item">
<Link <Link
className="nav-link" className="nav-link"
to={{ to={{
pathname: '/activities/history', pathname: '/',
}} }}
> >
Workouts Dashboard
</Link> </Link>
</li> </li>
)} {isAuthenticated && (
{props.user.isAuthenticated && ( <li className="nav-item">
<li className="nav-item"> <Link
<Link className="nav-link"
className="nav-link" to={{
to={{ pathname: '/activities/history',
pathname: '/activities/statistics', }}
}} >
> Workouts
Statistics </Link>
</Link> </li>
</li> )}
)} {isAuthenticated && (
{props.user.isAuthenticated && ( <li className="nav-item">
<li className="nav-item"> <Link
<Link className="nav-link"
className="nav-link" to={{
to={{ pathname: '/activities/statistics',
pathname: '/activities/add', }}
}} >
> Statistics
<strong>Add workout</strong> </Link>
</Link> </li>
</li> )}
)} {isAuthenticated && (
{/* {props.user.admin && ( */} <li className="nav-item">
{/* <li className="nav-item"> */} <Link
{/* <Link */} className="nav-link"
{/* className="nav-link" */} to={{
{/* to={{ */} pathname: '/activities/add',
{/* pathname: '/admin', */} }}
{/* }} */} >
{/* > */} <strong>Add workout</strong>
{/* Admin */} </Link>
{/* </Link> */} </li>
{/* </li> */} )}
{/* )} */} {/* {user.admin && ( */}
</ul> {/* <li className="nav-item"> */}
<ul className="navbar-nav flex-row ml-md-auto d-none d-md-flex"> {/* <Link */}
{!props.user.isAuthenticated && ( {/* className="nav-link" */}
<li className="nav-item"> {/* to={{ */}
<Link {/* pathname: '/admin', */}
className="nav-link" {/* }} */}
to={{ {/* > */}
pathname: '/register', {/* Admin */}
}} {/* </Link> */}
> {/* </li> */}
Register {/* )} */}
</Link> </ul>
</li> <ul className="navbar-nav flex-row ml-md-auto d-none d-md-flex">
)} {!isAuthenticated && (
{!props.user.isAuthenticated && ( <li className="nav-item">
<li className="nav-item"> <Link
<Link className="nav-link"
className="nav-link" to={{
to={{ pathname: '/register',
pathname: '/login', }}
}} >
> Register
Login </Link>
</Link> </li>
</li> )}
)} {!isAuthenticated && (
{props.user.picture === true && ( <li className="nav-item">
<img <Link
alt="Avatar" className="nav-link"
src={`${apiUrl}users/${props.user.id}/picture` + to={{
`?${Date.now()}`} pathname: '/login',
className="img-fluid App-nav-profile-img" }}
/> >
)} Login
{props.user.isAuthenticated && ( </Link>
<li className="nav-item"> </li>
<Link )}
className="nav-link" {picture === true && (
to={{ <img
pathname: '/profile', alt="Avatar"
}} src={`${apiUrl}users/${id}/picture` +
> `?${Date.now()}`}
{props.user.username} className="img-fluid App-nav-profile-img"
</Link> />
</li> )}
)} {isAuthenticated && (
{props.user.isAuthenticated && ( <li className="nav-item">
<li className="nav-item"> <Link
<Link className="nav-link"
className="nav-link" to={{
to={{ pathname: '/profile',
pathname: '/logout', }}
}} >
> {username}
Logout </Link>
</Link> </li>
</li> )}
)} {isAuthenticated && (
</ul> <li className="nav-item">
<Link
className="nav-link"
to={{
pathname: '/logout',
}}
>
Logout
</Link>
</li>
)}
</ul>
</div>
</div> </div>
</div> </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==