From 8f5e6afdfa9d8cfa2df0d5be40431b3a8a7bce98 Mon Sep 17 00:00:00 2001 From: Sam Date: Wed, 7 Apr 2021 10:00:16 +0200 Subject: [PATCH] bump version to 0.4.7 --- VERSION | 2 +- docs/.buildinfo | 2 +- docs/_images/fittrackee_screenshot-01.png | Bin 619840 -> 619967 bytes docs/_images/fittrackee_screenshot-02.png | Bin 400752 -> 400878 bytes docs/_images/fittrackee_screenshot-03.png | Bin 211794 -> 211889 bytes docs/_images/fittrackee_screenshot-04.png | Bin 64094 -> 64181 bytes docs/_images/fittrackee_screenshot-05.png | Bin 78486 -> 78579 bytes docs/_static/documentation_options.js | 2 +- docs/api/auth.html | 4 ++-- docs/api/configuration.html | 4 ++-- docs/api/index.html | 4 ++-- docs/api/records.html | 4 ++-- docs/api/sports.html | 4 ++-- docs/api/stats.html | 4 ++-- docs/api/users.html | 4 ++-- docs/api/workouts.html | 4 ++-- docs/changelog.html | 4 ++-- docs/features.html | 4 ++-- docs/genindex.html | 4 ++-- docs/http-routingtable.html | 4 ++-- docs/index.html | 4 ++-- docs/installation.html | 4 ++-- docs/objects.inv | Bin 1276 -> 1276 bytes docs/search.html | 4 ++-- docs/troubleshooting/administrator.html | 4 ++-- docs/troubleshooting/index.html | 4 ++-- docs/troubleshooting/user.html | 4 ++-- .../_images/fittrackee_screenshot-01.png | Bin 619840 -> 619967 bytes .../_images/fittrackee_screenshot-02.png | Bin 400752 -> 400878 bytes .../_images/fittrackee_screenshot-03.png | Bin 211794 -> 211889 bytes .../_images/fittrackee_screenshot-04.png | Bin 64094 -> 64181 bytes .../_images/fittrackee_screenshot-05.png | Bin 78486 -> 78579 bytes fittrackee/dist/asset-manifest.json | 6 +++--- fittrackee/dist/index.html | 2 +- ...a4bcc7.chunk.js => main.06d7be5e.chunk.js} | 4 ++-- ...hunk.js.map => main.06d7be5e.chunk.js.map} | 2 +- fittrackee_client/package.json | 2 +- fittrackee_client/src/utils/index.js | 2 +- pyproject.toml | 2 +- 39 files changed, 49 insertions(+), 49 deletions(-) rename fittrackee/dist/static/js/{main.e5a4bcc7.chunk.js => main.06d7be5e.chunk.js} (99%) rename fittrackee/dist/static/js/{main.e5a4bcc7.chunk.js.map => main.06d7be5e.chunk.js.map} (99%) diff --git a/VERSION b/VERSION index ef52a648..f9056827 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.4.6 +0.4.7 diff --git a/docs/.buildinfo b/docs/.buildinfo index 5abef9ed..186b47f5 100644 --- a/docs/.buildinfo +++ b/docs/.buildinfo @@ -1,4 +1,4 @@ # Sphinx build info version 1 # This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. -config: 59f40d0441f81e30af406562b2ac47c5 +config: d49f7bbcf1ff39f8ffb8e2d9167800e5 tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/docs/_images/fittrackee_screenshot-01.png b/docs/_images/fittrackee_screenshot-01.png index c90c5364d35c906e3a4852b7426bf6e2070caba0..c66a98b4e1802414875f408c1c244d88fd28a86c 100644 GIT binary patch delta 26218 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�RRWI$!R+I_3Dxgq(1uQ%tP)l? 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 diff --git a/docs/_images/fittrackee_screenshot-03.png b/docs/_images/fittrackee_screenshot-03.png index 328faa27c985147324f124f6feac7a9a54c79d96..b588c520cd56de747fb03274e44642b59bac2f8d 100644 GIT binary patch delta 12161 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 y{7CD8W7=9qc7@vohyD*wCZcHo diff --git a/docs/_images/fittrackee_screenshot-04.png b/docs/_images/fittrackee_screenshot-04.png index 2df02eb32156ae0e84f500769eb4bf08bd4e1da1..36d627f04211e943b5deea692326668a65d94c4d 100644 GIT binary patch delta 11637 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 L_@MCqi+BGEI5Gy$ diff --git a/docs/_images/fittrackee_screenshot-05.png b/docs/_images/fittrackee_screenshot-05.png index 97b8b85abedb9338a9183030bce67bf4b7ff9f7b..6a0418cf073b5aa9819b76a84bfc361313509ebd 100644 GIT binary patch delta 11124 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 - Authentication — FitTrackee 0.4.6 + <title>Authentication — FitTrackee 0.4.7 documentation @@ -40,7 +40,7 @@ FitTrackee - 0.4.6 + 0.4.7 diff --git a/docs/api/configuration.html b/docs/api/configuration.html index a5a24aac..ab85ccef 100644 --- a/docs/api/configuration.html +++ b/docs/api/configuration.html @@ -5,7 +5,7 @@ - Configuration — FitTrackee 0.4.6 + <title>Configuration — FitTrackee 0.4.7 documentation @@ -40,7 +40,7 @@ FitTrackee - 0.4.6 + 0.4.7 diff --git a/docs/api/index.html b/docs/api/index.html index 7fcd2467..bfc575d4 100644 --- a/docs/api/index.html +++ b/docs/api/index.html @@ -5,7 +5,7 @@ - API documentation — FitTrackee 0.4.6 + <title>API documentation — FitTrackee 0.4.7 documentation @@ -40,7 +40,7 @@ FitTrackee - 0.4.6 + 0.4.7 diff --git a/docs/api/records.html b/docs/api/records.html index 977afe87..65a3be61 100644 --- a/docs/api/records.html +++ b/docs/api/records.html @@ -5,7 +5,7 @@ - Records — FitTrackee 0.4.6 + <title>Records — FitTrackee 0.4.7 documentation @@ -40,7 +40,7 @@ FitTrackee - 0.4.6 + 0.4.7 diff --git a/docs/api/sports.html b/docs/api/sports.html index cfadddf4..32122078 100644 --- a/docs/api/sports.html +++ b/docs/api/sports.html @@ -5,7 +5,7 @@ - Sports — FitTrackee 0.4.6 + <title>Sports — FitTrackee 0.4.7 documentation @@ -40,7 +40,7 @@ FitTrackee - 0.4.6 + 0.4.7 diff --git a/docs/api/stats.html b/docs/api/stats.html index ad581ad3..acbfa4e2 100644 --- a/docs/api/stats.html +++ b/docs/api/stats.html @@ -5,7 +5,7 @@ - Statistics — FitTrackee 0.4.6 + <title>Statistics — FitTrackee 0.4.7 documentation @@ -40,7 +40,7 @@ FitTrackee - 0.4.6 + 0.4.7 diff --git a/docs/api/users.html b/docs/api/users.html index 3c7d652e..7aecb12e 100644 --- a/docs/api/users.html +++ b/docs/api/users.html @@ -5,7 +5,7 @@ - Users — FitTrackee 0.4.6 + <title>Users — FitTrackee 0.4.7 documentation @@ -40,7 +40,7 @@ FitTrackee - 0.4.6 + 0.4.7 diff --git a/docs/api/workouts.html b/docs/api/workouts.html index ba4ccda3..4d72b1ee 100644 --- a/docs/api/workouts.html +++ b/docs/api/workouts.html @@ -5,7 +5,7 @@ - Workouts — FitTrackee 0.4.6 + <title>Workouts — FitTrackee 0.4.7 documentation @@ -40,7 +40,7 @@ FitTrackee - 0.4.6 + 0.4.7 diff --git a/docs/changelog.html b/docs/changelog.html index 5c314047..343eb7af 100644 --- a/docs/changelog.html +++ b/docs/changelog.html @@ -5,7 +5,7 @@ - Change log — FitTrackee 0.4.6 + <title>Change log — FitTrackee 0.4.7 documentation @@ -39,7 +39,7 @@ FitTrackee - 0.4.6 + 0.4.7 diff --git a/docs/features.html b/docs/features.html index 1b5ef6a3..b3968f2e 100644 --- a/docs/features.html +++ b/docs/features.html @@ -5,7 +5,7 @@ - Features — FitTrackee 0.4.6 + <title>Features — FitTrackee 0.4.7 documentation @@ -40,7 +40,7 @@ FitTrackee - 0.4.6 + 0.4.7 diff --git a/docs/genindex.html b/docs/genindex.html index 5f577790..5348a338 100644 --- a/docs/genindex.html +++ b/docs/genindex.html @@ -4,7 +4,7 @@ - Index — FitTrackee 0.4.6 + <title>Index — FitTrackee 0.4.7 documentation @@ -37,7 +37,7 @@ FitTrackee - 0.4.6 + 0.4.7 diff --git a/docs/http-routingtable.html b/docs/http-routingtable.html index a7fb2bcd..3de4afe6 100644 --- a/docs/http-routingtable.html +++ b/docs/http-routingtable.html @@ -4,7 +4,7 @@ - HTTP Routing Table — FitTrackee 0.4.6 + <title>HTTP Routing Table — FitTrackee 0.4.7 documentation @@ -44,7 +44,7 @@ FitTrackee - 0.4.6 + 0.4.7 diff --git a/docs/index.html b/docs/index.html index 841a4838..6486ed4e 100644 --- a/docs/index.html +++ b/docs/index.html @@ -5,7 +5,7 @@ - FitTrackee — FitTrackee 0.4.6 + <title>FitTrackee — FitTrackee 0.4.7 documentation @@ -39,7 +39,7 @@ FitTrackee - 0.4.6 + 0.4.7 diff --git a/docs/installation.html b/docs/installation.html index 9eba2e9c..b2067856 100644 --- a/docs/installation.html +++ b/docs/installation.html @@ -5,7 +5,7 @@ - Installation — FitTrackee 0.4.6 + <title>Installation — FitTrackee 0.4.7 documentation @@ -40,7 +40,7 @@ FitTrackee - 0.4.6 + 0.4.7 diff --git a/docs/objects.inv b/docs/objects.inv index 5986cc2ee8dd93fe6b4ccce6d91e8fa2790d4fba..086068bfa8e4ca891fbdd7b6fe6d321e70039aa5 100644 GIT binary patch delta 12 Tcmeyv`G<3Y6QlV?=bbD7BGLrL delta 12 Tcmeyv`G<3Y6QkKi=bbD7BFzNF diff --git a/docs/search.html b/docs/search.html index d7c20a34..8b05062b 100644 --- a/docs/search.html +++ b/docs/search.html @@ -4,7 +4,7 @@ - Search — FitTrackee 0.4.6 + <title>Search — FitTrackee 0.4.7 documentation @@ -43,7 +43,7 @@ FitTrackee - 0.4.6 + 0.4.7 diff --git a/docs/troubleshooting/administrator.html b/docs/troubleshooting/administrator.html index e8b3e377..60c678e2 100644 --- a/docs/troubleshooting/administrator.html +++ b/docs/troubleshooting/administrator.html @@ -5,7 +5,7 @@ - Administrator — FitTrackee 0.4.6 + <title>Administrator — FitTrackee 0.4.7 documentation @@ -40,7 +40,7 @@ FitTrackee - 0.4.6 + 0.4.7 diff --git a/docs/troubleshooting/index.html b/docs/troubleshooting/index.html index 55667752..e09b2ff5 100644 --- a/docs/troubleshooting/index.html +++ b/docs/troubleshooting/index.html @@ -5,7 +5,7 @@ - Troubleshooting — FitTrackee 0.4.6 + <title>Troubleshooting — FitTrackee 0.4.7 documentation @@ -40,7 +40,7 @@ FitTrackee - 0.4.6 + 0.4.7 diff --git a/docs/troubleshooting/user.html b/docs/troubleshooting/user.html index b16fbf69..d802a586 100644 --- a/docs/troubleshooting/user.html +++ b/docs/troubleshooting/user.html @@ -5,7 +5,7 @@ - User — FitTrackee 0.4.6 + <title>User — FitTrackee 0.4.7 documentation @@ -40,7 +40,7 @@ FitTrackee - 0.4.6 + 0.4.7 diff --git a/docsrc/source/_images/fittrackee_screenshot-01.png b/docsrc/source/_images/fittrackee_screenshot-01.png index c90c5364d35c906e3a4852b7426bf6e2070caba0..c66a98b4e1802414875f408c1c244d88fd28a86c 100644 GIT binary patch delta 26218 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�RRWI$!R+I_3Dxgq(1uQ%tP)l? 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 diff --git a/docsrc/source/_images/fittrackee_screenshot-03.png b/docsrc/source/_images/fittrackee_screenshot-03.png index 328faa27c985147324f124f6feac7a9a54c79d96..b588c520cd56de747fb03274e44642b59bac2f8d 100644 GIT binary patch delta 12161 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 y{7CD8W7=9qc7@vohyD*wCZcHo diff --git a/docsrc/source/_images/fittrackee_screenshot-04.png b/docsrc/source/_images/fittrackee_screenshot-04.png index 2df02eb32156ae0e84f500769eb4bf08bd4e1da1..36d627f04211e943b5deea692326668a65d94c4d 100644 GIT binary patch delta 11637 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 L_@MCqi+BGEI5Gy$ diff --git a/docsrc/source/_images/fittrackee_screenshot-05.png b/docsrc/source/_images/fittrackee_screenshot-05.png index 97b8b85abedb9338a9183030bce67bf4b7ff9f7b..6a0418cf073b5aa9819b76a84bfc361313509ebd 100644 GIT binary patch delta 11124 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
      \ No newline at end of file +FitTrackee
      \ No newline at end of file diff --git a/fittrackee/dist/static/js/main.e5a4bcc7.chunk.js b/fittrackee/dist/static/js/main.06d7be5e.chunk.js similarity index 99% rename from fittrackee/dist/static/js/main.e5a4bcc7.chunk.js rename to fittrackee/dist/static/js/main.06d7be5e.chunk.js index 4a65a036..c34965ab 100644 --- a/fittrackee/dist/static/js/main.e5a4bcc7.chunk.js +++ b/fittrackee/dist/static/js/main.06d7be5e.chunk.js @@ -1,2 +1,2 @@ -(this.webpackJsonpfittrackee_client=this.webpackJsonpfittrackee_client||[]).push([[0],{206:function(e){e.exports=JSON.parse('{"Workouts":"Workouts","Workout":"Workout","Workout Date":"Workout Date","Add a workout":"Add a workout","Are you sure you want to delete this workout?":"Are you sure you want to delete this workout?","Ave. speed":"Ave. speed","Ascent":"Ascent","Average speed":"Average speed","Chart":"Chart","data from gpx, without any cleaning":"data from gpx, without any cleaning","Date":"Date","Delete workout":"Delete workout","Descent":"Descent","Distance":"Distance","distance":"distance","Duration":"Duration","duration":"duration","Edit a workout":"Edit a workout","Edit workout":"Edit workout","elevation":"elevation","End":"End","Farest distance":"Farest distance","Filter":"Filter","From":"From","gpxFile":"gpx file","Longest duration":"Longest duration","Max. altitude":"Max. altitude","Max. speed":"Max. speed","Min. altitude":"Min. altitude","no folder inside":"no folder inside","files max":"files max","max size":"max size","No data to display":"No data to display","No Map":"No Map","No next workout":"No next workout","No next segment":"No next segment","No notes":"No notes","No previous workout":"No previous workout","No previous segment":"No previous segment","Notes":"Notes","pauses":"pauses","Personal records":"Personal records","See next workout":"See next workout","See next segment":"See next segment","See previous workout":"See previous workout","See previous segment":"See previous segment","segment":"segment","Segments":"Segments","speed":"speed","Start":"Start","Title":"Title","To":"To","total duration":"total duration","with gpx file":"with gpx file","without gpx file":"without gpx file","zipFile":"or zip file containing gpx files"}')},207:function(e){e.exports=JSON.parse('{"Actions":"Actions","Active":"Active","workouts exist":"workouts exist","Add admin rights":"Add admin rights","Add/remove admin rights, delete user account.":"Add/remove admin rights, delete user account.","Administration":"Administration","Application":"Application","Application configuration":"Application configuration","Back":"Back","Disable":"Disable","Enable":"Enable","Enable/disable sports.":"Enable/disable sports.","FitTrackee administration":"FitTrackee administration","id":"id","if 0, no limitation":"if 0, no limitation","Image":"Image","Label":"Label","Max. number of active users":"Max. number of active users","Max. files of zip archive":"Max. files of zip archive","Max. size of uploaded files":"Max. size of uploaded files","Max. size of uploaded files (in Mb)":"Max. size of uploaded files (in Mb)","Max. size of zip archive":"Max. size of zip archive","Max. size of zip archive (in Mb)":"Max. size of zip archive (in Mb)","Registration is currently disabled.":"Registration is currently disabled.","Registration is currently enabled.":"Registration is currently enabled.","Remove admin rights":"Remove admin rights","Sports":"Sports","Update application configuration (maximum number of registered users, maximum files size).":"Update application configuration (maximum number of registered users, maximum files size).","uploads":"uploads","user":"user","Users":"Users","users":"users"}')},208:function(e){e.exports=JSON.parse('{"workouts count":"workouts count","Add workout":"Add workout","admin rights":"admin rights","ascending":"ascending","Back":"Back","Back to home":"Back to home","Cancel":"Cancel","Confirmation":"Confirmation","Dashboard":"Dashboard","descending":"descending","Edit":"Edit","day":"day","days":"days","Next":"Next","No":"No","no":"no","No records.":"No records.","No workouts.":"No workouts.","Page not found":"Page not found","Previous":"Prev","registration date":"registration date","Sort":"Sort","Sort by":"Sort by","Sport":"Sport","sport":"sport","Sports":"Sports","sports":"sports","Statistics":"Statistics","Submit":"Submit","to":"to","user name":"user name","Workout":"Workout","Workouts":"Workouts","workout":"workout","workouts":"workouts","Yes":"Yes","yes":"yes"}')},209:function(e){e.exports=JSON.parse('{"Personal records":"Personal records","This month":"This month","Upload one !":"Upload one !"}')},210:function(e){e.exports=JSON.parse('{"3 to 12 characters required for username.":"3 to 12 characters required for username.","8 characters required for password.":"8 characters required for password.","An error occurred. Please contact the administrator.":"An error occurred. Please contact the administrator.","application":"application","Error during picture deletion.":"Error during picture deletion.","Error during picture update.":"Error during picture update.","Error during picture update, file size exceeds max size.":"Error during picture update, file size exceeds max size.","Error. Registration is disabled.":"Error. Registration is disabled.","Error. Please try again or contact the administrator.":"Error. Please try again or contact the administrator.","File extension not allowed.":"File extension not allowed.","File size is greater than the allowed size":"File size is greater than the allowed size","Incorrect id":"Incorrect id","Invalid credentials.":"Invalid credentials.","Invalid payload.":"Invalid payload.","Invalid token. Please log in again.":"Invalid token. Please log in again.","Max. files in a zip archive must be greater than 0":"Max. files in a zip archive must be greater than 0","Max. size of uploaded files must be greater than 0":"Max. size of uploaded files must be greater than 0","Max. size of zip archive must be equal or greater than max. size of uploaded files":"Max. size of zip archive must be equal or greater than max. size of uploaded files","Max. size of zip archive must be greater than 0":"Max. size of zip archive must be greater than 0","No file part.":"No file part.","No picture.":"No picture.","No selected file.":"No selected file.","no correct file.":"no correct file.","no gpx file for this workout":"no gpx file for this workout","Password and password confirmation don\'t match.":"Password and password confirmation don\'t match.","Provide a valid auth token":"Provide a valid auth token","records":"records","Signature expired. Please log in again.":"Signature expired. Please log in again.","Sorry. That user already exists.":"Sorry. That user already exists.","Sport can not be disabled, workouts exist.":"Sport can not be disabled, workouts exist.","Sport does not exist.":"Sport does not exist.","sports":"sports","statistics":"statistiques","User does not exist.":"User does not exist.","Valid email must be provided.\\n":"Valid email must be provided.","workouts":"workouts","You can not delete your account, no other user has admin rights.":"You can not delete your account, no other user has admin rights.","You do not have permissions.":"You do not have permissions."}')},211:function(e){e.exports=JSON.parse('{"Cycling (Sport)":"Cycling (Sport)","Cycling (Transport)":"Cycling (Transport)","Hiking":"Hiking","Mountain Biking":"Mountain Biking","Running":"Running","Walking":"Walking"}')},212:function(e){e.exports=JSON.parse('{"workouts":"workouts","distance":"distance","duration":"duration","month":"month","Statistics":"Statistics","year":"year","week":"week"}')},213:function(e){e.exports=JSON.parse('{"Admin":"Admin","Are you sure you want to delete this account? All data will be deleted, this cannot be undone.":"Are you sure you want to delete this account? All data will be deleted, this cannot be undone.","Are you sure you want to delete your account? All data will be deleted, this cannot be undone.":"Are you sure you want to delete your account? All data will be deleted, this cannot be undone.","Bio":"Bio","Birth Date":"Birth Date","Check your email. If your address is in our database, you\'ll received an email with a link to reset your password.":"Check your email. If your address is in our database, you\'ll received an email with a link to reset your password.","Delete my account":"Delete my account","Delete picture":"Delete picture","Delete user account":"Delete user account","Edit Profile":"Edit Profile","Email":"Email","Enter a username":"Enter a username","Enter an email address":"Enter an email address","Enter a password":"Enter a password","Enter the password confirmation":"Enter the password confirmation","First day of week":"First day of week","First Name":"First Name","Forgot password?":"Forgot password?","Invalid token. Please request a new token.":"Invalid token. Please request a new token.","Language":"Language","Last Name":"Last Name","Location":"Location","loggedOut":"You are now logged out. Click <1>here to log back in.","Login":"Login","login":"login","Logout":"Logout","Monday":"Monday","Password":"Password","Password Confirmation":"Password Confirmation","Password reset":"Password reset","password reset":"password reset","Profile":"Profile","Profile Edition":"Profile Edition","Register":"Register","register":"register","Registration Date":"Registration Date","Reset your password":"Reset your password","reset your password":"reset your password","Send":"Send","Sunday":"Sunday","Timezone":"Timezone","updatedPasswordText":"Your password have been updated. Click <1>here to log in.","Username":"Username"}')},214:function(e){e.exports=JSON.parse('{"Workouts":"S\xe9ances","Workout":"S\xe9ance","Workout Date":"Date de l\'s\xe9ance","Add a workout":"Ajouter une s\xe9ance","Are you sure you want to delete this workout?":"Etes-vous s\xfbr de vouloir supprimer cette s\xe9ance ?","Ave. speed":"Vitesse moyenne","Ascent":"D\xe9nivel\xe9 positif","Average speed":"Vitesse moyenne","Chart":"Analyse","data from gpx, without any cleaning":"donn\xe9es issues du fichier gpx, sans correction","Date":"Date","Delete workout":"Supprimer l\'s\xe9ance","Descent":"D\xe9nivel\xe9 n\xe9gatif","Distance":"Distance","distance":"distance","Duration":"Dur\xe9e","duration":"dur\xe9e","Edit a workout":"Editer une s\xe9ance","Edit workout":"Editer une workout","elevation":"altitude","End":"Arriv\xe9e","Farest distance":"Distance la + longue","Filter":"Filtrer","From":"A partir de","gpxFile":"fichier gpx","Longest duration":"Dur\xe9e la + longue","Max. altitude":"Altitude max","Max. speed":"Vitesse max","Min. altitude":"Altitude min","no folder inside":"pas de r\xe9pertoire","files max":" fichiers max","max size":"taille max","No data to display":"Pas de donn\xe9es \xe0 afficher","No Map":"Pas de carte","No next workout":"Pas d\'s\xe9ance suivante","No next segment":"Pas de segment suivant","No notes":"Pas de notes","No previous workout":"Pas d\'s\xe9ance pr\xe9c\xe9dente","No previous segment":"Pas de segment pr\xe9c\xe9dent","Notes":"Notes","pauses":"pauses","Personal records":"Records personnels","See next workout":"Voir l\'s\xe9ance suivante","See next segment":"Voir le segment suivant","See previous workout":"Voir l\'s\xe9ance pr\xe9c\xe9dente","See previous segment":"Voir le segment pr\xe9c\xe9dent","segment":"segment","Segments":"Segments","Start":"D\xe9part","speed":"vitesse","Title":"Titre","To":"Jusqu\'au","total duration":"dur\xe9e totale","with gpx file":"avec un fichier gpx","without gpx file":"sans fichier gpx","zipFile":"ou un fichier zip contenant des fichiers gpx"}')},215:function(e){e.exports=JSON.parse('{"Actions":"Actions","Active":"Active","Add admin rights":"Ajouter des droits d\'admin","Add/remove admin rights, delete user account.":"Ajouter/retirer des droits d\'adminsitration, supprimer des comptes utilisateurs.","Administration":"Administration","workouts exist":"des s\xe9ances existent","Application":"Application","Application configuration":"Configuration de l\'application","Back":"Retour","Disable":"d\xe9sactiver","Enable":"activer","Enable/disable sports.":"Activer/d\xe9sactiver des sports.","FitTrackee administration":"Administration de FitTrackee","id":"id","if 0, no limitation":"si \xe9gal \xe0 0, pas limite d\'inscription","Image":"Image","Label":"Label","Max. number of active users":"Nombre maximum d\'utilisateurs actifs","Max. files of zip archive":"Nombre max. de fichiers dans une archive zip","Max. size of uploaded files":"Taille max. des fichiers","Max. size of uploaded files (in Mb)":"Taille max. des fichiers (en Mo)","Max. size of zip archive":"Taille max. des archives zip","Max. size of zip archive (in Mb)":"Taille max. des archives zip (en Mo)","Registration is currently disabled.":"Les inscriptions sont actuellement d\xe9sactiv\xe9es.","Registration is currently enabled.":"Les inscriptions sont actuellement activ\xe9es.","Remove admin rights":"Retirer des droits d\'admin","Sports":"Sports","Update application configuration (maximum number of registered users, maximum files size).":"Configurer l\'application (nombre maximum d\'utilisateurs inscrits, taille maximale des fichers).","uploads":"fichiers","user":"user","Users":"Utilisateurs","users":"utilisateurs"}')},216:function(e){e.exports=JSON.parse('{"workouts count":"nombre d\'s\xe9ances","Add workout":"Ajouter une s\xe9ance","admin rights":"droits d\'admin","ascending":"ascendant","Back":"Revenir \xe0 la page pr\xe9c\xe9dente","Back to home":"Retour \xe0 l\'accueil","Cancel":"Annuler","Confirmation":"Confirmation","Dashboard":"Tableau de Bord","descending":"descendant","Edit":"Modifier","day":"jour","days":"jours","Next":"Page suivante","No":"Non","no":"non","No records.":"Pas de records.","No workouts.":"Pas d\'s\xe9ances.","Page not found":"Page introuvable","Previous":"Page pr\xe9c\xe9dente","registration date":"date d\'inscription","Sort":"Tri","Sort by":"Trier par","Sport":"Sport","sport":"sport","Sports":"Sports","sports":"sports","Statistics":"Statistiques","Submit":"Valider","to":"\xe0","user name":"utilisateur","Workout":"S\xe9ance","Workouts":"S\xe9ances","workout":"s\xe9ance","workouts":"s\xe9ances","Yes":"Oui","yes":"oui"}')},217:function(e){e.exports=JSON.parse('{"Personal records":"Mes records","This month":"Ce mois","Upload one !":"Ajoutez votre premi\xe8re s\xe9ance !"}')},218:function(e){e.exports=JSON.parse('{"3 to 12 characters required for username.":"3 \xe0 12 caract\xe8res requis pour le nom.","8 characters required for password.":"8 caract\xe8res minimum pour le mot de passe.","An error occurred. Please contact the administrator.":"Une erreur s\'est produite. Merci de contacter l\'administrateur.","application":"application","Error during picture deletion.":"Erreur lors de la suppression de l\'image.","Error during picture update.":"Erreur lors de la mise \xe0 jour de l\'image.","Error during picture update, file size exceeds max size.":"Erreur lors de la mise \xe0 jour de l\'image, la taille du ficher d\xe9passe la taille maximum autoris\xe9e","Error. Registration is disabled.":"Erreur. L\'inscription est d\xe9sactiv\xe9e.","Error. Please try again or contact the administrator.":"Erreur. Veuillez r\xe9essayer ou contacter l\'administrateur","File extension not allowed.":"Extension de fichier non autoris\xe9e.","File size is greater than the allowed size":"La taille du fichier est sup\xe9rieure \xe0 la limite autoris\xe9e","Incorrect id":"Id incorrect","Invalid credentials.":"Identifiants invalides.","Invalid payload.":"Donn\xe9es incorrectes.","Invalid token. Please log in again.":"Jeton invalide. Merci de vous reconnecter.","Max. files in a zip archive must be greater than 0":"Le nombre max. de fichiers dans une archive doit \xeatre sup\xe9rieur \xe0 0","Max. size of uploaded files must be greater than 0":"La taille max. des fichiers doit \xeatre sup\xe9rieure \xe0 0","Max. size of zip archive must be equal or greater than max. size of uploaded files":"La taille max. d\'une archive doit \xeatre sup\xe9rieure ou \xe9gale \xe0 la taille max. d\'un fichier","Max. size of zip archive must be greater than 0":"La taille max. d\'une archive doit \xeatre sup\xe9rieure \xe0 0","No file part.":"Pas de fichier fourni.","No picture.":"Pas d\'image.","No selected file.":"Pas de fichier s\xe9lectionn\xe9.","no correct file.":"fichier incorrect","no gpx file for this workout":"pas de fichier gpx pour cette s\xe9ance","Password and password confirmation don\'t match.":"Les mots de passe saisis sont diff\xe9rents.","Provide a valid auth token":"Merci de fournir un jeton valide","records":"records","Signature expired. Please log in again.":"Signature expir\xe9e. Merci de vous reconnecter.","Sorry. That user already exists.":"D\xe9sol\xe9. Cet utilisateur existe d\xe9j\xe0.","Sport can not be disabled, workouts exist.":"Le sport ne peut \xeatre d\xe9sactiv\xe9, des s\xe9ancees existent","Sport does not exist.":"Le sport n\'existe pas.","sports":"sports","statistics":"statistics","User does not exist.":"L\'utilisateur n\'existe pas.","Valid email must be provided.\\n":"L\'email fourni n\'est pas valide.","workouts":"s\xe9ances","You can not delete your account, no other user has admin rights.":"Vous ne pouvez pas supprimer votre compte, aucun autre utilisateur n\'a des droits d\'administration.","You do not have permissions.":"Vous n\'avez pas les permissions n\xe9cessaires."}')},219:function(e){e.exports=JSON.parse('{"Cycling (Sport)":"V\xe9lo (Sport)","Cycling (Transport)":"V\xe9lo (Transport)","Hiking":"Randonn\xe9e","Mountain Biking":"VTT","Running":"Course","Walking":"Marche"}')},220:function(e){e.exports=JSON.parse('{"workouts":"s\xe9ances","distance":"distance","duration":"dur\xe9e","month":"mois","Statistics":"Statistiques","year":"ann\xe9e","week":"semaine"}')},221:function(e){e.exports=JSON.parse('{"Admin":"Admin","Are you sure you want to delete this account? All data will be deleted, this cannot be undone.":"Etes-vous s\xfbr de vouloir supprimer ce compte ? Toutes les donn\xe9es seront d\xe9finitivement effac\xe9s.","Are you sure you want to delete your account? All data will be deleted, this cannot be undone.":"Etes-vous s\xfbr de vouloir supprimer votre compte ? Toutes les donn\xe9es seront d\xe9finitivement effac\xe9s.","Bio":"Bio","Birth Date":"Date de naissance","Check your email. If your address is in our database, you\'ll received an email with a link to reset your password.":"V\xe9rifiez vore boite mail. Si vote adresse est dans notre base de donn\xe9es, vous recevrez un email avec un lien pour r\xe9initialiser votre mot de passe","Delete my account":"Supprimer mon compte","Delete picture":"Supprimer l\'image","Delete user account":"Supprimer le compte","Edit Profile":"Editer le profil","Email":"Email","Enter a username":"Saisir un nom","Enter an email address":"Saisir une adresse e-mail","Enter a password":"Saisir un mot de passe","Enter the password confirmation":"Confirmer le mot de passe","First day of week":"Premier jour de la semaine","First Name":"Pr\xe9nom","Forgot password?":"Mot de passe oubli\xe9 ?","Invalid token. Please request a new token.":"Token invalid. Veuillez demander un nouveau token.","Language":"Langue","Last Name":"Nom","Location":"Lieu","loggedOut":"Vous \xeates d\xe9connect\xe9. Cliquez <1>ici pour vous reconnecter.","Login":"Se connecter","login":"se connecter","Logout":"Se d\xe9connecter","Monday":"Lundi","Password":"Mot de passe","Password Confirmation":"Confirmation du mot de passe","Password reset":"R\xe9initialiser votre mot de passe","password reset":"r\xe9initialiser votre mot de passe","Profile":"Profil","Profile Edition":"Edition du profil","Register":"S\'inscrire","register":"s\'inscrire","Registration Date":"Date d\'inscription","Reset your password":"R\xe9initialiser votre mot de passe","reset your password":"r\xe9initialiser votre mot de passe","Send":"Envoyer","Sunday":"Dimanche","Timezone":"Fuseau horaire","updatedPasswordText":"Votre mot de passe a \xe9t\xe9 mis \xe0 jour. Cliquez <1>ici pour vous connecter.","Username":"Nom d\'utilisateur"}')},281:function(e,t,a){},290:function(e,t){},894:function(e,t,a){"use strict";a.r(t),a.d(t,"history",(function(){return Ws})),a.d(t,"rootNode",(function(){return qs})),a.d(t,"store",(function(){return Bs}));var s=a(34),r=a(2),n=a.n(r),o=a(913),c=a(56),i=a.n(c),l=a(202),d=a(60),u=a(203),m=a(88),j=a(204),p=a(205),h={en:{workouts:a(206),administration:a(207),common:a(208),dashboard:a(209),messages:a(210),sports:a(211),statistics:a(212),user:a(213)},fr:{workouts:a(214),administration:a(215),common:a(216),dashboard:a(217),messages:a(218),sports:a(219),statistics:a(220),user:a(221)}};m.a.use(p.a).use(j.a).init({debug:!1,lng:"en",fallbackLng:"en",keySeparator:!1,interpolation:{escapeValue:!1},resources:h,ns:["common"],defaultNS:"common"});var b=m.a,f=a(10),O=a(11),x=a(14),g=a(13),v=a(12),k=a(24),w=(a(281),a(25)),y=a(896),N=a(1),_=function(e){Object(x.a)(a,e);var t=Object(g.a)(a);function a(){return Object(f.a)(this,a),t.apply(this,arguments)}return Object(O.a)(a,[{key:"render",value:function(){var e=this.props,t=e.message,a=e.messages,s=e.t,r=""!==t&&t?t.split("|").length>1?"".concat(s("messages:".concat(t.split("|")[0])),": ").concat(s("messages:".concat(t.split("|")[1]))):s("messages:".concat(t)):"";return Object(N.jsxs)("div",{className:"error-message",children:[""!==r&&Object(N.jsx)("code",{children:r}),a&&a.length>0&&(1===a.length?Object(N.jsx)("code",{children:a[0].value}):Object(N.jsx)("code",{children:Object(N.jsx)("ul",{children:a.map((function(e){return Object(N.jsx)("li",{children:s("messages:".concat(e.value))},e.id)}))})}))]})}}]),a}(n.a.PureComponent),S=a(16),D=a(915),C=a(914),E=a(226),A=["bytes","KB","MB","GB","TB"],M=function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],a=Math.floor(Math.log(e)/Math.log(1024));if(!e)return t?"0 bytes":{size:0,suffix:"bytes"};var s=(e/Math.pow(1024,a)).toFixed(1),r=A[a];return t?"".concat(s).concat(r):{size:s,suffix:r}},T="/api/",P=[{key:"workouts_count",label:"workouts count"},{key:"admin",label:"admin rights"},{key:"created_at",label:"registration date"},{key:"username",label:"user name"}],z=[{key:"asc",label:"ascending"},{key:"desc",label:"descending"}],F=function(){return!!window.localStorage.authToken},R=function(e){var t=0;return e.map((function(e){var a={id:t,value:e};return t++,a}))},L=function(e){var t={};e.noAuthorization||(t.Authorization="Bearer ".concat(window.localStorage.getItem("authToken"))),e.type&&(t["Content-Type"]=e.type);var a={method:e.method,headers:t};"application/json"===e.type&&e.body?a.body=JSON.stringify(e.body):e.body&&(a.body=e.body);var s=new Request("".concat(T).concat(e.url),a);return fetch(s).then((function(t){return"DELETE"===e.method||413===t.status?t:t.json()})).catch((function(e){return console.error(e),new Error("An error occurred. Please contact the administrator.")}))},U=function(e,t){if(!e)return"";var a=E.DateTime.fromISO(Object(D.a)(new Date(e),"yyyy-MM-dd'T'HH:mm:ss.SSSxxx")).setZone(t);return Object(C.a)(a.toFormat("yyyy-MM-dd HH:mm:ss"),"yyyy-MM-dd HH:mm:ss",new Date)},I=function(e,t){var a=e.label.toLowerCase(),s=t.label.toLowerCase();return a>s?1:a2&&void 0!==arguments[2]?arguments[2]:"common";return t.map((function(t){return Object(S.a)(Object(S.a)({},t),{},{label:e("".concat(a,":").concat(t.label))})})).sort(I)},H=function(e,t){var a=e;return t.id||"users"===e&&t.username?a="".concat(a,"/").concat(t.username?t.username:t.id):Object.keys(t).length>0&&(a+="?",Object.keys(t).filter((function(e){return t[e]})).map((function(e,s){return a+="".concat(0===s?"":"&").concat(e,"=").concat(t[e])}))),a},q=function(){function e(){Object(f.a)(this,e)}return Object(O.a)(e,null,[{key:"getData",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},a=H(e,t),s={url:a,method:"GET",type:"application/json"};return L(s)}},{key:"addData",value:function(e,t){return L({url:e,method:"POST",body:t,type:"application/json"})}},{key:"addDataWithFile",value:function(e,t){return L({url:e,method:"POST",body:t})}},{key:"postData",value:function(e,t){var a={url:"".concat(e).concat(t.id?"/".concat(t.id):""),method:"POST",body:t,type:"application/json"};return L(a)}},{key:"updateData",value:function(e,t){var a={url:"".concat(e).concat(t.id?"/".concat(t.id):t.username?"/".concat(t.username):""),method:"PATCH",body:t,type:"application/json"};return L(a)}},{key:"deleteData",value:function(e,t){var a={url:"".concat(e,"/").concat(t),method:"DELETE",type:"application/json"};return L(a)}}]),e}(),B=function(e,t){return{type:"SET_DATA",data:t,target:e}},G=function(e,t,a){return{type:"SET_PAGINATED_DATA",data:t,pagination:a,target:e}},V=function(e){return{type:"SET_ERROR",message:e}},J=function(e){return{type:"SET_LOADING",loading:e}},K=function(e){return{type:"UPDATE_SPORT_DATA",data:e}},Y=function(e){return{type:"UPDATE_USER_DATA",data:e}},X=function(e,t,a){var s=!(arguments.length>3&&void 0!==arguments[3])||arguments[3];return function(r){return r(J(!0)),a&&a.id&&"workouts"!==t&&isNaN(a.id)?(r(J(!1)),r(V("".concat(t,"|Incorrect id")))):(r({type:"CLEAN_ALL_MESSAGES"}),q[e](t,a).then((function(a){if("success"===a.status)if(s){if("users"===t&&"getData"===e)return r(G(t,a.data,a.pagination));r(B(t,a.data))}else"updateData"===e&&"sports"===t?r(K(a.data.sports[0])):"updateData"===e&&"users"===t&&r(Y(a.data.users[0]));else r(V("".concat(t,"|").concat(a.message||a.status)));r(J(!1))})).catch((function(e){r(J(!1)),r(V("".concat(t,"|").concat(e)))})))}},$=function(e){return function(t){m.a.changeLanguage(e).then(t(function(e){return{type:"SET_LANGUAGE",language:e}}(e)))}},Z=function(e){return{type:"SET_APP_CONFIG",data:e}},Q=function(e){return function(t){return q.getData(e).then((function(a){"success"===a.status?"config"===e?t(Z(a.data)):"stats/all"===e&&t({type:"SET_APP_STATS",data:a.data}):t(V("application|".concat(a.message)))})).catch((function(e){return t(V("application|".concat(e)))}))}},ee=function(e){Object(x.a)(a,e);var t=Object(g.a)(a);function a(e,s){var r;return Object(f.a)(this,a),(r=t.call(this,e,s)).state={formData:{}},r}return Object(O.a)(a,[{key:"componentDidMount",value:function(){this.initForm()}},{key:"componentDidUpdate",value:function(e){this.props.appConfig!==e.appConfig&&this.initForm()}},{key:"initForm",value:function(){var e=this.props.appConfig,t={};Object.keys(e).map((function(a){return null===e[a]?t[a]="":["max_single_file_size","max_zip_file_size"].includes(a)?t[a]=+(e[a]/1048576).toFixed(2):t[a]=e[a]})),this.setState({formData:t})}},{key:"handleFormChange",value:function(e){var t=this.state.formData;t[e.target.name]=+e.target.value,this.setState(t)}},{key:"render",value:function(){var e=this,t=this.props,a=t.isInEdition,s=t.loadAppConfig,r=t.message,n=t.messages,o=t.onHandleConfigFormSubmit,c=t.t,i=this.state.formData;return Object(N.jsxs)("div",{children:[(r||n)&&Object(N.jsx)(_,{message:r,messages:n,t:c}),Object.keys(i).length>0&&Object(N.jsx)("div",{className:"row",children:Object(N.jsx)("div",{className:"col-md-12",children:Object(N.jsxs)("div",{className:"card",children:[Object(N.jsx)("div",{className:"card-header",children:Object(N.jsx)("strong",{children:c("administration:Application configuration")})}),Object(N.jsx)("div",{className:"card-body",children:Object(N.jsxs)("form",{className:"app-config-form ".concat(a?"":"form-disabled"),onSubmit:function(e){e.preventDefault(),o(i)},children:[Object(N.jsxs)("div",{className:"form-group row",children:[Object(N.jsxs)("label",{className:"col-sm-6 col-form-label",htmlFor:"max_users",children:[c("administration:Max. number of active users"),Object(N.jsx)("sup",{children:Object(N.jsx)("i",{className:"fa fa-question-circle","aria-hidden":"true",title:c("administration:if 0, no limitation")})}),":"]}),Object(N.jsx)("input",{className:"col-sm-5",id:"max_users",name:"max_users",type:"number",min:"0",value:i.max_users,onChange:function(t){return e.handleFormChange(t)}})]}),Object(N.jsxs)("div",{className:"form-group row",children:[Object(N.jsxs)("label",{className:"col-sm-6 col-form-label",htmlFor:"max_single_file_size",children:[c("administration:Max. size of uploaded files (in Mb)"),":"]}),Object(N.jsx)("input",{className:"col-sm-5",id:"max_single_file_size",name:"max_single_file_size",type:"number",step:"0.1",min:"0",value:i.max_single_file_size,onChange:function(t){return e.handleFormChange(t)}})]}),Object(N.jsxs)("div",{className:"form-group row",children:[Object(N.jsxs)("label",{className:"col-sm-6 col-form-label",htmlFor:"max_zip_file_size",children:[c("administration:Max. size of zip archive (in Mb)"),":"]}),Object(N.jsx)("input",{className:"col-sm-5",id:"max_zip_file_size",name:"max_zip_file_size",type:"number",step:"0.1",min:"0",value:i.max_zip_file_size,onChange:function(t){return e.handleFormChange(t)}})]}),Object(N.jsxs)("div",{className:"form-group row",children:[Object(N.jsx)("label",{className:"col-sm-6 col-form-label",htmlFor:"gpx_limit_import",children:c("administration:Max. files of zip archive")}),Object(N.jsx)("input",{className:"col-sm-5",id:"gpx_limit_import",name:"gpx_limit_import",type:"number",min:"0",value:i.gpx_limit_import,onChange:function(t){return e.handleFormChange(t)}})]}),a?Object(N.jsxs)(N.Fragment,{children:[Object(N.jsx)("input",{type:"submit",className:"btn btn-primary",value:c("common:Submit")}),Object(N.jsx)("input",{type:"submit",className:"btn btn-secondary",onClick:function(e){e.preventDefault(),s(),Ws.push("/admin/application")},value:c("common:Cancel")})]}):Object(N.jsxs)(N.Fragment,{children:[Object(N.jsx)("input",{type:"submit",className:"btn btn-primary",onClick:function(e){e.preventDefault(),Ws.push("/admin/application/edit")},value:c("common:Edit")}),Object(N.jsx)("input",{type:"submit",className:"btn btn-secondary",onClick:function(){return Ws.push("/admin")},value:c("common:Back")})]})]})})]})})})]})}}]),a}(n.a.Component),te=Object(v.c)((function(e){return{message:e.message,messages:e.messages}}),(function(e){return{loadAppConfig:function(){e(Q("config"))},onHandleConfigFormSubmit:function(t){var a=Object.assign({},t);a.max_single_file_size*=1048576,a.max_zip_file_size*=1048576,e(function(e){return function(t){t({type:"CLEAN_ALL_MESSAGES"}),q.updateData("config",e).then((function(e){"success"===e.status?(t(Z(e.data)),Ws.push("/admin/application")):Array.isArray(e.message)?t({type:"APP_ERRORS",messages:R(e.message)}):t(V(e.message))})).catch((function(e){return t(V("application|".concat(e)))}))}}(a))}}}))(ee),ae=a(19),se=function(e){Object(x.a)(a,e);var t=Object(g.a)(a);function a(){return Object(f.a)(this,a),t.apply(this,arguments)}return Object(O.a)(a,[{key:"componentDidMount",value:function(){this.props.loadAppStats()}},{key:"render",value:function(){var e=this.props,t=e.appStats,a=e.t,s=M(t.uploads_dir_size,!1);return Object(N.jsxs)("div",{className:"row",children:[Object(N.jsx)("div",{className:"col-lg-3 col-md-6 col-sm-6",children:Object(N.jsx)("div",{className:"card workout-card",children:Object(N.jsxs)("div",{className:"card-body row",children:[Object(N.jsx)("div",{className:"col-3",children:Object(N.jsx)("i",{className:"fa fa-users fa-3x fa-color"})}),Object(N.jsxs)("div",{className:"col-9 text-right",children:[Object(N.jsx)("div",{className:"huge",children:t.users?t.users:0}),Object(N.jsx)("div",{children:"".concat(1===t.users?a("administration:user"):a("administration:users"))})]})]})})}),Object(N.jsx)("div",{className:"col-lg-3 col-md-6 col-sm-6",children:Object(N.jsx)("div",{className:"card workout-card",children:Object(N.jsxs)("div",{className:"card-body row",children:[Object(N.jsx)("div",{className:"col-3",children:Object(N.jsx)("i",{className:"fa fa-tags fa-3x fa-color"})}),Object(N.jsxs)("div",{className:"col-9 text-right",children:[Object(N.jsx)("div",{className:"huge",children:t.sports?t.sports:0}),Object(N.jsx)("div",{children:"".concat(1===t.sports?a("common:sport"):a("common:sports"))})]})]})})}),Object(N.jsx)("div",{className:"col-lg-3 col-md-6 col-sm-6",children:Object(N.jsx)("div",{className:"card workout-card",children:Object(N.jsxs)("div",{className:"card-body row",children:[Object(N.jsx)("div",{className:"col-3",children:Object(N.jsx)("i",{className:"fa fa-calendar fa-3x fa-color"})}),Object(N.jsxs)("div",{className:"col-9 text-right",children:[Object(N.jsx)("div",{className:"huge",children:t.workouts?t.workouts:0}),Object(N.jsx)("div",{children:"".concat(1===t.workouts?a("common:workout"):a("common:workouts"))})]})]})})}),Object(N.jsx)("div",{className:"col-lg-3 col-md-6 col-sm-6",children:Object(N.jsx)("div",{className:"card workout-card",children:Object(N.jsxs)("div",{className:"card-body row",children:[Object(N.jsx)("div",{className:"col-3",children:Object(N.jsx)("i",{className:"fa fa-folder-open fa-3x fa-color"})}),Object(N.jsxs)("div",{className:"col-9 text-right",children:[Object(N.jsx)("div",{className:"huge",children:s.size}),Object(N.jsxs)("div",{children:[s.suffix," (",a("administration:uploads"),")"]})]})]})})})]})}}]),a}(n.a.Component),re=Object(y.a)()(Object(v.c)((function(e){return{appStats:e.application.statistics}}),(function(e){return{loadAppStats:function(){e(Q("stats/all"))}}}))(se));function ne(e){var t=e.appConfig,a=e.t;return Object(N.jsxs)("div",{className:"card workout-card",children:[Object(N.jsx)("div",{className:"card-header",children:Object(N.jsx)("strong",{children:a("administration:Administration")})}),Object(N.jsxs)("div",{className:"card-body",children:[Object(N.jsx)(re,{}),Object(N.jsx)("br",{}),Object(N.jsxs)("dl",{className:"admin-items",children:[Object(N.jsx)("dt",{children:Object(N.jsx)(ae.a,{to:{pathname:"/admin/application"},children:a("administration:Application")})}),Object(N.jsxs)("dd",{children:[a("administration:Update application configuration (maximum number of registered users, maximum files size)."),Object(N.jsx)("br",{}),Object(N.jsx)("strong",{children:a("administration:Registration is currently ".concat(t.is_registration_enabled?"enabled":"disabled","."))})]}),Object(N.jsx)("br",{}),Object(N.jsx)("dt",{children:Object(N.jsx)(ae.a,{to:{pathname:"/admin/sports"},children:a("administration:Sports")})}),Object(N.jsx)("dd",{children:a("administration:Enable/disable sports.")}),Object(N.jsx)("br",{}),Object(N.jsx)("dt",{children:Object(N.jsx)(ae.a,{to:{pathname:"/admin/users"},children:a("administration:Users")})}),Object(N.jsx)("dd",{children:a("administration:Add/remove admin rights, delete user account.")})]})]})]})}var oe=function(e){Object(x.a)(a,e);var t=Object(g.a)(a);function a(){return Object(f.a)(this,a),t.apply(this,arguments)}return Object(O.a)(a,[{key:"componentDidMount",value:function(){this.props.loadSports()}},{key:"render",value:function(){var e=this.props,t=e.message,a=e.sports,s=e.t,r=e.updateSport;return Object(N.jsxs)("div",{children:[t&&Object(N.jsx)(_,{message:t,t:s}),Object(N.jsx)("div",{className:"row",children:Object(N.jsx)("div",{className:"col",children:Object(N.jsxs)("div",{className:"card",children:[Object(N.jsx)("div",{className:"card-header",children:Object(N.jsx)("strong",{children:s("administration:Sports")})}),Object(N.jsxs)("div",{className:"card-body",children:[a.length>0&&Object(N.jsxs)("table",{className:"table",children:[Object(N.jsx)("thead",{children:Object(N.jsxs)("tr",{children:[Object(N.jsx)("th",{children:s("administration:id")}),Object(N.jsx)("th",{children:s("administration:Image")}),Object(N.jsx)("th",{children:s("administration:Label")}),Object(N.jsx)("th",{children:s("administration:Active")}),Object(N.jsx)("th",{children:s("administration:Actions")})]})}),Object(N.jsx)("tbody",{children:a.map((function(e){return Object(N.jsxs)("tr",{children:[Object(N.jsxs)("td",{children:[Object(N.jsx)("span",{className:"heading-span-absolute",children:s("administration:id")}),e.id]}),Object(N.jsxs)("td",{children:[Object(N.jsx)("span",{className:"heading-span-absolute",children:s("administration:Image")}),Object(N.jsx)("img",{className:"admin-img",src:e.img?e.img:"/img/photo.png",alt:"sport logo"})]}),Object(N.jsxs)("td",{children:[Object(N.jsx)("span",{className:"heading-span-absolute",children:s("administration:Label")}),s("sports:".concat(e.label))]}),Object(N.jsxs)("td",{children:[Object(N.jsx)("span",{className:"heading-span-absolute",children:s("administration:Active")}),e.is_active?Object(N.jsx)("i",{className:"fa fa-check-square-o custom-fa","aria-hidden":"true","data-toggle":"tooltip"}):Object(N.jsx)("i",{className:"fa fa-square-o custom-fa","aria-hidden":"true","data-toggle":"tooltip"})]}),Object(N.jsxs)("td",{children:[Object(N.jsx)("span",{className:"heading-span-absolute",children:s("administration:Actions")}),Object(N.jsx)("input",{type:"submit",className:"btn btn-".concat(e.is_active?"dark":"primary"," btn-sm"),value:e.is_active?s("administration:Disable"):s("administration:Enable"),onClick:function(){return r(e.id,!e.is_active)}}),e.has_workouts&&Object(N.jsxs)("span",{className:"admin-message",children:[Object(N.jsx)("i",{className:"fa fa-warning custom-fa","aria-hidden":"true"}),s("administration:workouts exist")]})]})]},e.id)}))})]}),Object(N.jsx)("input",{type:"submit",className:"btn btn-secondary",onClick:function(){return Ws.push("/admin/")},value:s("common:Back")})]})]})})})]})}}]),a}(n.a.Component),ce=Object(v.c)((function(e){return{message:e.message,sports:e.sports.data,user:e.user}}),(function(e){return{loadSports:function(){e(X("getData","sports"))},updateSport:function(t,a){e(X("updateData","sports",{id:t,is_active:a},!1))}}}))(oe),ie=function(e){Object(x.a)(a,e);var t=Object(g.a)(a);function a(){return Object(f.a)(this,a),t.apply(this,arguments)}return Object(O.a)(a,[{key:"getUrl",value:function(e){var t=this.props,a=t.query,s=t.pathname,r=Object.assign({},a),n=a.page?+a.page:1;switch(e){case"prev":n-=1;break;case"next":n+=1;break;default:n=+e}return r.page=n,H(s,r)}},{key:"render",value:function(){var e,t=this,a=this.props,s=a.pagination,r=a.t;return Object(N.jsx)(N.Fragment,{children:s&&Object.keys(s).length>0&&Object(N.jsx)("nav",{"aria-label":"Page navigation example",children:Object(N.jsxs)("ul",{className:"pagination justify-content-center",children:[Object(N.jsx)("li",{className:"page-item ".concat(s.has_prev?"":"disabled"),children:Object(N.jsx)(ae.a,{className:"page-link",to:this.getUrl("prev"),"aria-disabled":!s.has_prev,children:r("common:Previous")})}),(e=s.pages,Array.from({length:e},(function(e,t){return t+1}))).map((function(e){return Object(N.jsx)("li",{className:"page-item ".concat(e===s.page?"active":""),children:Object(N.jsx)(ae.a,{className:"page-link",to:t.getUrl(e),children:e})},e)})),Object(N.jsx)("li",{className:"page-item ".concat(s.has_next?"":"disabled"),children:Object(N.jsx)(ae.a,{className:"page-link",to:this.getUrl("next"),"aria-disabled":!s.has_next,children:r("common:Next")})})]})})})}}]),a}(n.a.PureComponent),le=function(e){Object(x.a)(a,e);var t=Object(g.a)(a);function a(e,s){var r;return Object(f.a)(this,a),(r=t.call(this,e,s)).state={page:null,per_page:null,order_by:"created_at",order:"asc"},r}return Object(O.a)(a,[{key:"componentDidMount",value:function(){this.props.loadUsers(this.initState())}},{key:"componentDidUpdate",value:function(e){e.location.query!==this.props.location.query&&this.props.loadUsers(this.props.location.query)}},{key:"initState",value:function(){var e=this.props.location.query,t={page:e.page,per_page:e.per_page,order_by:e.order_by?e.order_by:"created_at",order:e.order?e.order:"asc"};return this.setState(t),t}},{key:"updatePage",value:function(e,t){var a=Object.assign({},this.state);a[e]=t,this.setState(a);var s=H(this.props.location.pathname,a);Ws.push(s)}},{key:"render",value:function(){var e=this,t=this.props,a=t.authUser,s=t.location,r=t.message,n=t.t,o=t.pagination,c=t.updateUser,i=t.users,l=W(n,P),d=W(n,z);return Object(N.jsxs)("div",{children:[r&&Object(N.jsx)(_,{message:r,t:n}),Object(N.jsx)("div",{className:"container",children:Object(N.jsx)("div",{className:"row",children:Object(N.jsx)("div",{className:"col",children:Object(N.jsxs)("div",{className:"card",children:[Object(N.jsx)("div",{className:"card-header",children:Object(N.jsx)("strong",{children:n("administration:Users")})}),Object(N.jsxs)("div",{className:"card-body",children:[Object(N.jsxs)("div",{className:"row user-filters",children:[Object(N.jsx)("div",{className:"col-lg-4 col-md-6 col-sm-12",children:Object(N.jsxs)("label",{htmlFor:"order_by",children:[n("common:Sort by"),":"," ",Object(N.jsx)("select",{id:"order_by",name:"order_by",value:this.state.order_by,onChange:function(t){return e.updatePage("order_by",t.target.value)},children:l.map((function(e){return Object(N.jsx)("option",{value:e.key,children:e.label},e.key)}))})," "]})}),Object(N.jsx)("div",{className:"col-lg-4 col-md-6 col-sm-12",children:Object(N.jsxs)("label",{htmlFor:"sort",children:[n("common:Sort"),":"," ",Object(N.jsx)("select",{id:"sort",name:"sort",value:this.state.order,onChange:function(t){return e.updatePage("order",t.target.value)},children:d.map((function(e){return Object(N.jsx)("option",{value:e.key,children:e.label},e.key)}))})," "]})})]}),Object(N.jsxs)("table",{className:"table",children:[Object(N.jsx)("thead",{children:Object(N.jsxs)("tr",{children:[Object(N.jsx)("th",{children:"#"}),Object(N.jsx)("th",{children:n("user:Username")}),Object(N.jsx)("th",{children:n("user:Email")}),Object(N.jsx)("th",{children:n("user:Registration Date")}),Object(N.jsx)("th",{children:n("workouts:Workouts")}),Object(N.jsx)("th",{children:n("user:Admin")}),Object(N.jsx)("th",{children:n("administration:Actions")})]})}),Object(N.jsx)("tbody",{children:i.map((function(e){return Object(N.jsxs)("tr",{children:[Object(N.jsxs)("td",{children:[Object(N.jsx)("span",{className:"heading-span-absolute",children:"#"}),!0===e.picture?Object(N.jsx)("img",{alt:"Avatar",src:"".concat(T,"users/").concat(e.username,"/picture?").concat(Date.now()),className:"img-fluid App-nav-profile-img"}):Object(N.jsx)("i",{className:"fa fa-user-circle-o fa-2x no-picture","aria-hidden":"true"})]}),Object(N.jsxs)("td",{children:[Object(N.jsx)("span",{className:"heading-span-absolute",children:n("user:Username")}),Object(N.jsx)(ae.a,{to:"/users/".concat(e.username),children:e.username})]}),Object(N.jsxs)("td",{children:[Object(N.jsx)("span",{className:"heading-span-absolute",children:n("user:Email")}),e.email]}),Object(N.jsxs)("td",{children:[Object(N.jsx)("span",{className:"heading-span-absolute",children:n("user:Registration Date")}),Object(D.a)(new Date(e.created_at),"dd/MM/yyyy HH:mm")]}),Object(N.jsxs)("td",{children:[Object(N.jsx)("span",{className:"heading-span-absolute",children:n("workouts:Workouts")}),e.nb_workouts]}),Object(N.jsxs)("td",{children:[Object(N.jsx)("span",{className:"heading-span-absolute",children:n("user:Admin")}),e.admin?Object(N.jsx)("i",{className:"fa fa-check-square-o custom-fa","aria-hidden":"true","data-toggle":"tooltip"}):Object(N.jsx)("i",{className:"fa fa-square-o custom-fa","aria-hidden":"true","data-toggle":"tooltip"})]}),Object(N.jsxs)("td",{children:[Object(N.jsx)("span",{className:"heading-span-absolute",children:n("administration:Actions")}),Object(N.jsx)("input",{type:"submit",className:"btn btn-".concat(e.admin?"dark":"primary"," btn-sm"),disabled:e.username===a.username,value:e.admin?n("administration:Remove admin rights"):n("administration:Add admin rights"),onClick:function(){return c(e.username,!e.admin)}})]})]},e.username)}))})]}),Object(N.jsx)(ie,{pagination:o,pathname:s.pathname,query:this.state,t:n}),Object(N.jsx)("input",{type:"submit",className:"btn btn-secondary",onClick:function(){return Ws.push("/admin/")},value:n("common:Back")})]})]})})})})]})}}]),a}(n.a.Component),de=Object(v.c)((function(e){return{authUser:e.user,location:e.router.location,message:e.message,pagination:e.users.pagination,users:e.users.data}}),(function(e){return{loadUsers:function(t){e(X("getData","users",t))},updateUser:function(t,a){e(X("updateData","users",{username:t,admin:a},!1))}}}))(le),ue=a(227);function me(){var e=Object(ue.a)().t;return Object(N.jsxs)("div",{children:[Object(N.jsx)(w.a,{children:Object(N.jsx)("title",{children:"fittrackee - 404"})}),Object(N.jsx)("h1",{className:"page-title",children:e("Page not found")})]})}var je=Object(y.a)()(Object(v.c)((function(e){return{appConfig:e.application.config,user:e.user}}))((function(e){var t=e.appConfig,a=e.t,s=e.user;return Object(N.jsxs)(N.Fragment,{children:[Object(N.jsx)(w.a,{children:Object(N.jsxs)("title",{children:["FitTrackee - ",a("administration:Administration")]})}),Object(N.jsx)("div",{className:"container dashboard",children:s.admin?Object(N.jsxs)(k.d,{children:[Object(N.jsx)(k.b,{exact:!0,path:"/admin",render:function(){return Object(N.jsx)(ne,{appConfig:t,t:a})}}),Object(N.jsx)(k.b,{exact:!0,path:"/admin/application",render:function(){return Object(N.jsx)(te,{appConfig:t,t:a,isInEdition:!1})}}),Object(N.jsx)(k.b,{exact:!0,path:"/admin/application/edit",render:function(){return Object(N.jsx)(te,{appConfig:t,t:a,isInEdition:!0})}}),Object(N.jsx)(k.b,{exact:!0,path:"/admin/sports",render:function(){return Object(N.jsx)(ce,{t:a})}}),Object(N.jsx)(k.b,{exact:!0,path:"/admin/users",render:function(){return Object(N.jsx)(de,{t:a})}}),Object(N.jsx)(k.b,{component:me})]}):Object(N.jsx)(me,{})})]})}))),pe=a(897),he=a(29),be=a(916),fe=a(230),Oe=a.n(fe),xe=["#55a8a3","#98C3A9","#D0838A","#ECC77E","#926692","#929292","#428bca"],ge=[{record_type:"AS",label:"Ave. speed"},{record_type:"FD",label:"Farest distance"},{record_type:"LD",label:"Longest duration"},{record_type:"MS",label:"Max. speed"}],ve=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;return t||(t="yyyy/MM/dd"),a||(a="HH:mm"),{workout_date:e?Object(D.a)(e,t):null,workout_time:e?Object(D.a)(e,a):null}},ke=function(e){var t=new Date(0);return(t=Object(be.a)(t.setSeconds(e),1)).getTime()},we=function(e){for(var t=0;ts?1:a2&&void 0!==arguments[2]&&arguments[2];return e.filter((function(e){return!a||e.is_active})).map((function(e){return Object(S.a)(Object(S.a)({},e),{},{label:t("sports:".concat(e.label))})})).sort(ye)},_e=function(){function e(){Object(f.a)(this,e)}return Object(O.a)(e,null,[{key:"loginOrRegisterOrPasswordReset",value:function(e,t){var a={url:"auth/".concat(e),method:"POST",noAuthorization:!0,body:t,type:"application/json"};return L(a)}},{key:"deletePicture",value:function(){return L({url:"auth/picture",method:"DELETE"})}}]),e}(),Se=function(e){return{type:"PICTURE_ERROR",message:e}},De=function(e){return{type:"PROFILE_UPDATE_ERROR",message:e}},Ce=function(){return function(e){return window.localStorage.getItem("authToken")?e(Ee()):{type:"LOGOUT"}}},Ee=function(){return function(e){return q.getData("auth/profile").then((function(t){return"success"===t.status?(e(X("getData","sports")),t.data.isAuthenticated=!0,t.data.language&&e($(t.data.language)),e({type:"PROFILE_SUCCESS",profil:t.data})):e({type:"PROFILE_ERROR",message:t.message})})).catch((function(e){throw e}))}},Ae=function(e,t){return function(a){if("register"===t||"password/update"===t){var s=function(e){var t=[];return!(arguments.length>1&&void 0!==arguments[1]&&arguments[1])&&(e.username.length<3||e.username.length>12)&&t.push("3 to 12 characters required for username."),e.password!==e.password_conf&&t.push("Password and password confirmation don't match."),e.password.length<8&&t.push("8 characters required for password."),t}(e,"password/update"===t);if(s.length>0)return a({type:"AUTH_ERRORS",messages:R(s)})}return a(function(e,t){return function(a){return _e.loginOrRegisterOrPasswordReset(e,t).then((function(t){if("success"===t.status){if("password/reset-request"===e)return Ws.push({pathname:"/password-reset/sent"});if("password/update"===e)return Ws.push({pathname:"/updated-password"});if("login"===e||"register"===e)return window.localStorage.setItem("authToken",t.auth_token),"register"===e&&a(Q("config")),a(Ee())}return a({type:"AUTH_ERROR",message:t.message})})).catch((function(e){throw e}))}}(t,e))}},Me=function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return function(a){return q.deleteData("users",e).then((function(e){204===e.status?(a(Q("config")),t?Ws.push("/admin/users"):(a({type:"LOGOUT"}),Ws.push("/"))):e.json().then((function(e){return a(V("".concat(e.message)))}))})).catch((function(e){return a(V("user|".concat(e)))}))}},Te=function(e){return{type:"SET_GPX",gpxContent:e}},Pe=function(e){return{type:"SET_CHART_DATA",chartData:e}},ze=function(e){return function(t){return q.updateData("workouts",e).then((function(e){"success"===e.status?(t(Ce()),Ws.push("/workouts/".concat(e.data.workouts[0].id))):t(V("workouts|".concat(e.message))),t(J(!1))})).catch((function(e){t(J(!1)),t(V("workouts|".concat(e)))}))}},Fe=function(e){return function(t){return q.getData("workouts",e).then((function(e){"success"===e.status?e.data.workouts.length>0&&t({type:"PUSH_WORKOUTS",workouts:e.data.workouts}):t(V("workouts|".concat(e.message)))})).catch((function(e){return t(V("workouts|".concat(e)))}))}};var Re=Object(v.c)((function(e){return{appConfig:e.application.config,loading:e.loading}}),(function(e){return{onAddWorkout:function(t){e(J(!0));var a=new FormData;a.append("file",t.target.form.gpxFile.files[0]),a.append("data",'{"sport_id": '.concat(t.target.form.sport.value,', "notes": "').concat(t.target.form.notes.value,'"}')),e(function(e){return function(t){return q.addDataWithFile("workouts",e).then((function(e){"created"===e.status?0===e.data.workouts.length?t(V("workouts|no correct file.")):1===e.data.workouts.length?(t(Ce()),Ws.push("/workouts/".concat(e.data.workouts[0].id))):(t(Ce()),Ws.push("/")):413===e.status?t(V("workouts|File size is greater than the allowed size")):t(V("workouts|".concat(e.message))),t(J(!1))})).catch((function(e){t(J(!1)),t(V("workouts|".concat(e)))}))}}(a))},onEditWorkout:function(t,a){e(ze({id:a.id,notes:t.target.form.notes.value,sport_id:+t.target.form.sport.value,title:t.target.form.title.value}))}}}))((function(e){var t=e.appConfig,a=e.loading,s=e.onAddWorkout,r=e.onEditWorkout,n=e.sports,o=e.t,c=e.workout,i=c?c.sport_id:"",l=Ne(n,o,!0),d="".concat(o("workouts:no folder inside"),", ").concat(t.gpx_limit_import," ").concat(o("workouts:files max"),", ").concat(o("workouts:max size"),": ").concat(M(t.max_zip_file_size)),u=M(t.max_single_file_size);return Object(N.jsxs)("form",{encType:"multipart/form-data",method:"post",onSubmit:function(e){return e.preventDefault()},children:[Object(N.jsx)("div",{className:"form-group",children:Object(N.jsxs)("label",{children:[o("common:Sport"),":",Object(N.jsxs)("select",{className:"form-control input-lg",defaultValue:i,disabled:a,name:"sport",required:!0,children:[Object(N.jsx)("option",{value:""}),l.map((function(e){return Object(N.jsx)("option",{value:e.id,children:e.label},e.id)}))]})]})}),c?Object(N.jsx)("div",{className:"form-group",children:Object(N.jsxs)("label",{children:[o("workouts:Title"),":",Object(N.jsx)("input",{name:"title",defaultValue:c?c.title:"",disabled:a,className:"form-control input-lg"})]})}):Object(N.jsx)("div",{className:"form-group",children:Object(N.jsxs)("label",{children:[Object(N.jsxs)(pe.a,{i18nKey:"workouts:gpxFile",children:[Object(N.jsx)("strong",{children:"gpx"})," file"]}),Object(N.jsx)("sup",{children:Object(N.jsx)("i",{className:"fa fa-question-circle","aria-hidden":"true","data-toggle":"tooltip",title:"".concat(o("workouts:max size"),": ").concat(u)})})," ",Object(N.jsxs)(pe.a,{i18nKey:"workouts:zipFile",children:["or ",Object(N.jsx)("strong",{children:" zip"})," file containing ",Object(N.jsx)("strong",{children:"gpx "}),"files"]}),Object(N.jsx)("sup",{children:Object(N.jsx)("i",{className:"fa fa-question-circle","aria-hidden":"true","data-toggle":"tooltip","data-placement":"top",title:d})})," ",":",Object(N.jsx)("input",{accept:".gpx, .zip",className:"form-control form-control-file gpx-file",disabled:a,name:"gpxFile",required:!0,type:"file"})]})}),Object(N.jsx)("div",{className:"form-group",children:Object(N.jsxs)("label",{children:[o("workouts:Notes"),":",Object(N.jsx)("textarea",{name:"notes",defaultValue:c?c.notes:"",disabled:a,className:"form-control input-lg",maxLength:"500"})]})}),a?Object(N.jsx)("div",{className:"loader"}):Object(N.jsxs)("div",{children:[Object(N.jsx)("input",{type:"submit",className:"btn btn-primary",onClick:function(e){return c?r(e,c):s(e)},value:o("common:Submit")}),Object(N.jsx)("input",{type:"submit",className:"btn btn-secondary",onClick:function(){return Ws.push("/")},value:o("common:Cancel")})]})]})}));var Le=Object(v.c)((function(e){return{user:e.user}}),(function(e){return{onAddOrEdit:function(t,a){var s,r=t.target.form.duration.value.split(":"),n=60*+r[0]*60+60*+r[1]+ +r[2],o={workout_date:"".concat(t.target.form.workout_date.value," ").concat(t.target.form.workout_time.value),distance:+t.target.form.distance.value,duration:n,notes:t.target.form.notes.value,sport_id:+t.target.form.sport_id.value,title:t.target.form.title.value};a?(o.id=a.id,e(ze(o))):e((s=o,function(e){return q.addData("workouts/no_gpx",s).then((function(t){"created"===t.status?(e(Ce()),Ws.push("/workouts/".concat(t.data.workouts[0].id))):e(V("workouts|".concat(t.message)))})).catch((function(t){return e(V("workouts|".concat(t)))}))}))}}}))((function(e){var t,a,s=e.onAddOrEdit,r=e.sports,n=e.t,o=e.user,c=e.workout,i=Ne(r,n,!0),l="";if(c){var d=ve(U(c.workout_date,o.timezone),"yyyy-MM-dd");t=d.workout_date,a=d.workout_time,l=c.sport_id}return Object(N.jsxs)("form",{onSubmit:function(e){return e.preventDefault()},children:[Object(N.jsx)("div",{className:"form-group",children:Object(N.jsxs)("label",{children:[n("workouts:Title"),":",Object(N.jsx)("input",{name:"title",defaultValue:c?c.title:"",className:"form-control input-lg"})]})}),Object(N.jsx)("div",{className:"form-group",children:Object(N.jsxs)("label",{children:[n("common:Sport"),":",Object(N.jsxs)("select",{className:"form-control input-lg",defaultValue:l,name:"sport_id",required:!0,children:[Object(N.jsx)("option",{value:""}),i.map((function(e){return Object(N.jsx)("option",{value:e.id,children:e.label},e.id)}))]})]})}),Object(N.jsx)("div",{className:"form-group",children:Object(N.jsxs)("label",{children:[n("workouts:Workout Date"),":",Object(N.jsx)("div",{className:"container",children:Object(N.jsxs)("div",{className:"row",children:[Object(N.jsx)("input",{name:"workout_date",defaultValue:t,className:"form-control col-md",required:!0,type:"date"}),Object(N.jsx)("input",{name:"workout_time",defaultValue:a,className:"form-control col-md",required:!0,type:"time"})]})})]})}),Object(N.jsx)("div",{className:"form-group",children:Object(N.jsxs)("label",{children:[n("workouts:Duration"),":",Object(N.jsx)("input",{name:"duration",defaultValue:c?c.duration:"",className:"form-control col-xs-4",pattern:"^([0-9]*[0-9]):([0-5][0-9]):([0-5][0-9])$",placeholder:"hh:mm:ss",required:!0,type:"text"})]})}),Object(N.jsx)("div",{className:"form-group",children:Object(N.jsxs)("label",{children:[n("workouts:Distance")," (km):",Object(N.jsx)("input",{name:"distance",defaultValue:c?c.distance:"",className:"form-control input-lg",min:0,required:!0,step:"0.001",type:"number"})]})}),Object(N.jsx)("div",{className:"form-group",children:Object(N.jsxs)("label",{children:[n("workouts:Notes"),":",Object(N.jsx)("textarea",{name:"notes",defaultValue:c?c.notes:"",className:"form-control input-lg",maxLength:"500"})]})}),Object(N.jsx)("input",{type:"submit",className:"btn btn-primary",onClick:function(e){return s(e,c)},value:n("common:Submit")}),Object(N.jsx)("input",{type:"submit",className:"btn btn-secondary",onClick:function(){return Ws.push("/")},value:n("common:Cancel")})]})})),Ue=function(e){Object(x.a)(a,e);var t=Object(g.a)(a);function a(e,s){var r;return Object(f.a)(this,a),(r=t.call(this,e,s)).state={withGpx:!0},r}return Object(O.a)(a,[{key:"handleRadioChange",value:function(e){this.setState({withGpx:"withGpx"===e.target.name?e.target.value:!e.target.value})}},{key:"render",value:function(){var e=this,t=this.props,a=t.loading,s=t.message,r=t.sports,n=t.t,o=t.workout,c=this.state.withGpx;return Object(N.jsxs)("div",{children:[Object(N.jsx)(w.a,{children:Object(N.jsxs)("title",{children:["FitTrackee -"," ",n(o?"workouts:Edit a workout":"workouts:Add a workout")]})}),Object(N.jsx)("br",{}),Object(N.jsx)("br",{}),Object(N.jsx)(_,{message:s,t:n}),Object(N.jsx)("div",{className:"container",children:Object(N.jsxs)("div",{className:"row",children:[Object(N.jsx)("div",{className:"col-md-2"}),Object(N.jsx)("div",{className:"col-md-8",children:Object(N.jsxs)("div",{className:"card add-workout",children:[Object(N.jsx)("h2",{className:"card-header text-center",children:n(o?"workouts:Edit a workout":"workouts:Add a workout")}),Object(N.jsx)("div",{className:"card-body",children:o?o.with_gpx?Object(N.jsx)(Re,{workout:o,sports:r,t:n}):Object(N.jsx)(Le,{workout:o,sports:r,t:n}):Object(N.jsxs)("div",{children:[Object(N.jsx)("form",{children:Object(N.jsxs)("div",{className:"form-group row",children:[Object(N.jsx)("div",{className:"col",children:Object(N.jsxs)("label",{className:"radioLabel",children:[Object(N.jsx)("input",{className:"add-workout-radio",type:"radio",name:"withGpx",disabled:a,checked:c,onChange:function(t){return e.handleRadioChange(t)}}),n("workouts:with gpx file")]})}),Object(N.jsx)("div",{className:"col",children:Object(N.jsxs)("label",{className:"radioLabel",children:[Object(N.jsx)("input",{className:"add-workout-radio",type:"radio",name:"withoutGpx",disabled:a,checked:!c,onChange:function(t){return e.handleRadioChange(t)}}),n("workouts:without gpx file")]})})]})}),c?Object(N.jsx)(Re,{sports:r,t:n}):Object(N.jsx)(Le,{sports:r,t:n})]})})]})}),Object(N.jsx)("div",{className:"col-md-2"})]})})]})}}]),a}(n.a.Component),Ie=Object(y.a)()(Object(v.c)((function(e){return{loading:e.loading}}))(Ue));var We=Object(v.c)((function(e){return{message:e.message,sports:e.sports.data,user:e.user}}))((function(e){var t=e.message,a=e.sports;return Object(N.jsx)("div",{children:Object(N.jsx)(Ie,{workout:null,message:t,sports:a})})}));function He(e){var t=Object(ue.a)().t;return Object(N.jsx)("div",{className:"custom-modal-backdrop",children:Object(N.jsx)("div",{className:"custom-modal",children:Object(N.jsxs)("div",{className:"modal-content",children:[Object(N.jsxs)("div",{className:"modal-header",children:[Object(N.jsx)("h5",{className:"modal-title",children:e.title}),Object(N.jsx)("button",{type:"button",className:"close","aria-label":"Close",onClick:function(){return e.close()},children:Object(N.jsx)("span",{"aria-hidden":"true",children:"\xd7"})})]}),Object(N.jsx)("div",{className:"modal-body",children:Object(N.jsx)("p",{children:e.text})}),Object(N.jsxs)("div",{className:"modal-footer",children:[Object(N.jsx)("button",{type:"button",className:"btn btn-primary",onClick:function(){return e.confirm()},children:t("common:Yes")}),Object(N.jsx)("button",{type:"button",className:"btn btn-secondary",onClick:function(){return e.close()},children:t("common:No")})]})]})})})}function qe(e){var t=e.dataType,a=e.displayModal,s=e.segmentId,r=e.sport,n=e.t,o=e.title,c=e.user,i=e.workout,l=i?ve(U(i.workout_date,c.timezone)):null,d="segment"===t&&1!==s?"/workouts/".concat(i.id,"/segment/").concat(s-1):"workout"===t&&i.previous_workout?"/workouts/".concat(i.previous_workout):null,u="segment"===t&&s0?Object(N.jsxs)("div",{children:[Object(N.jsxs)("div",{className:"row chart-radio",children:[Object(N.jsxs)("label",{className:"radioLabel col-md-1",children:[Object(N.jsx)("input",{type:"radio",name:"distance",checked:c,onChange:function(e){return a.handleRadioChange(e)}}),n("workouts:distance")]}),Object(N.jsxs)("label",{className:"radioLabel col-md-1",children:[Object(N.jsx)("input",{type:"radio",name:"duration",checked:!c,onChange:function(e){return a.handleRadioChange(e)}}),n("workouts:duration")]})]}),Object(N.jsxs)("div",{className:"row chart-radio",children:[Object(N.jsx)("div",{className:"col-md-5"}),Object(N.jsxs)("label",{className:"radioLabel col-md-1",children:[Object(N.jsx)("input",{type:"checkbox",name:"speed",checked:this.displayData("speed"),onChange:function(e){return a.handleLegendChange(e)}}),n("workouts:speed")]}),Object(N.jsxs)("label",{className:"radioLabel col-md-1",children:[Object(N.jsx)("input",{type:"checkbox",name:"elevation",checked:this.displayData("elevation"),onChange:function(e){return a.handleLegendChange(e)}}),n("workouts:elevation")]}),Object(N.jsx)("div",{className:"col-md-5"})]}),Object(N.jsx)("div",{className:"row chart",children:Object(N.jsx)(Be.f,{height:300,children:Object(N.jsxs)(Be.d,{data:r,margin:{top:15,right:30,left:20,bottom:15},onMouseMove:function(e){return o(e.activePayload)},onMouseLeave:function(){return o(null)},children:[Object(N.jsx)(Be.h,{allowDecimals:!1,dataKey:e,label:{value:n("workouts:".concat(e)),offset:0,position:"bottom"},scale:t,interval:i,tickFormatter:function(e){return c?e:Object(D.a)(e,"HH:mm:ss")},type:"number"}),Object(N.jsx)(Be.i,{label:{value:"".concat(n("workouts:speed")," (km/h)"),angle:-90,position:"left"},yAxisId:"left"}),Object(N.jsx)(Be.i,{label:{value:"".concat(n("workouts:elevation")," (m)"),angle:-90,position:"right"},yAxisId:"right",orientation:"right"}),this.displayData("elevation")&&Object(N.jsx)(Be.a,{yAxisId:"right",type:"linear",dataKey:"elevation",name:n("workouts:elevation"),fill:"#e5e5e5",stroke:"#cccccc",dot:!1,unit:" m"}),this.displayData("speed")&&Object(N.jsx)(Be.e,{yAxisId:"left",type:"linear",dataKey:"speed",name:n("workouts:speed"),stroke:"#8884d8",strokeWidth:2,dot:!1,unit:" km/h"}),Object(N.jsx)(Be.g,{labelFormatter:function(e){return c?"".concat(n("workouts:distance"),": ").concat(e," km"):"".concat(n("workouts:duration"),": ").concat(Object(D.a)(e,"HH:mm:ss"))}})]})})}),Object(N.jsx)("div",{className:"chart-info",children:n("workouts:data from gpx, without any cleaning")})]}):n("workouts:No data to display")})}}]),a}(n.a.Component),Ve=Object(v.c)((function(e){return{chartData:e.chartData}}),(function(e){return{loadWorkoutData:function(t){e(function(e){return function(t){if(e)return q.getData("workouts/".concat(e,"/chart_data")).then((function(e){"success"===e.status?t(Pe(we(e.data.chart_data))):t(V("workouts|".concat(e.message)))})).catch((function(e){return t(V("workouts|".concat(e)))}));t(Pe(null))}}(t))},loadSegmentData:function(t,a){e(function(e,t){return function(a){if(e)return q.getData("workouts/".concat(e,"/chart_data/segment/").concat(t)).then((function(e){"success"===e.status?a(Pe(we(e.data.chart_data))):a(V("workouts|".concat(e.message)))})).catch((function(e){return a(V("workouts|".concat(e)))}));a(Pe(null))}}(t,a))}}}))(Ge);function Je(e){var t=e.t,a=e.workout;return Object(N.jsx)("div",{className:"container",children:a.weather_start&&a.weather_end&&Object(N.jsxs)("table",{className:"table table-borderless weather-table text-center",children:[Object(N.jsx)("thead",{children:Object(N.jsxs)("tr",{children:[Object(N.jsx)("th",{}),Object(N.jsxs)("th",{children:[t("workouts:Start"),Object(N.jsx)("br",{}),Object(N.jsx)("img",{className:"weather-img",src:"/img/weather/".concat(a.weather_start.icon,".png"),alt:"workout weather (".concat(a.weather_start.icon,")"),title:a.weather_start.summary})]}),Object(N.jsxs)("th",{children:[t("workouts:End"),Object(N.jsx)("br",{}),Object(N.jsx)("img",{className:"weather-img",src:"/img/weather/".concat(a.weather_end.icon,".png"),alt:"workout weather (".concat(a.weather_end.icon,")"),title:a.weather_end.summary})]})]})}),Object(N.jsxs)("tbody",{children:[Object(N.jsxs)("tr",{children:[Object(N.jsx)("td",{children:Object(N.jsx)("img",{className:"weather-img-small",src:"/img/weather/temperature.png",alt:"Temperatures"})}),Object(N.jsxs)("td",{children:[Number(a.weather_start.temperature).toFixed(1),"\xb0C"]}),Object(N.jsxs)("td",{children:[Number(a.weather_end.temperature).toFixed(1),"\xb0C"]})]}),Object(N.jsxs)("tr",{children:[Object(N.jsx)("td",{children:Object(N.jsx)("img",{className:"weather-img-small",src:"/img/weather/pour-rain.png",alt:"Temperatures"})}),Object(N.jsxs)("td",{children:[Number(100*a.weather_start.humidity).toFixed(1),"%"]}),Object(N.jsxs)("td",{children:[Number(100*a.weather_end.humidity).toFixed(1),"%"]})]}),Object(N.jsxs)("tr",{children:[Object(N.jsx)("td",{children:Object(N.jsx)("img",{className:"weather-img-small",src:"/img/weather/breeze.png",alt:"Temperatures"})}),Object(N.jsxs)("td",{children:[Number(a.weather_start.wind).toFixed(1),"m/s"]}),Object(N.jsxs)("td",{children:[Number(a.weather_end.wind).toFixed(1),"m/s"]})]})]})]})})}function Ke(e){var t=e.t,a=e.workout,s="0:00:00"!==a.pauses&&null!==a.pauses;return Object(N.jsxs)("div",{className:"workout-details",children:[Object(N.jsxs)("p",{children:[Object(N.jsx)("i",{className:"fa fa-clock-o custom-fa","aria-hidden":"true"}),t("workouts:Duration"),": ",a.moving,a.records&&a.records.find((function(e){return"LD"===e.record_type}))&&Object(N.jsx)("sup",{children:Object(N.jsx)("i",{className:"fa fa-trophy custom-fa","aria-hidden":"true"})}),s&&Object(N.jsxs)("span",{children:[Object(N.jsx)("br",{}),"(",t("workouts:pauses"),": ",a.pauses,","," ",t("workouts:total duration"),": ",a.duration,")"]})]}),Object(N.jsxs)("p",{children:[Object(N.jsx)("i",{className:"fa fa-road custom-fa","aria-hidden":"true"}),t("workouts:Distance"),": ",a.distance," km",a.records&&a.records.find((function(e){return"FD"===e.record_type}))&&Object(N.jsx)("sup",{children:Object(N.jsx)("i",{className:"fa fa-trophy custom-fa","aria-hidden":"true"})})]}),Object(N.jsxs)("p",{children:[Object(N.jsx)("i",{className:"fa fa-tachometer custom-fa","aria-hidden":"true"}),t("workouts:Average speed"),": ",a.ave_speed," km/h",a.records&&a.records.find((function(e){return"AS"===e.record_type}))&&Object(N.jsx)("sup",{children:Object(N.jsx)("i",{className:"fa fa-trophy custom-fa","aria-hidden":"true"})}),Object(N.jsx)("br",{}),t("workouts:Max. speed"),": ",a.max_speed," km/h",a.records&&a.records.find((function(e){return"MS"===e.record_type}))&&Object(N.jsx)("sup",{children:Object(N.jsx)("i",{className:"fa fa-trophy custom-fa","aria-hidden":"true"})})]}),a.min_alt&&a.max_alt&&Object(N.jsxs)("p",{children:[Object(N.jsx)("i",{className:"fi-mountains custom-fa"}),t("workouts:Min. altitude"),": ",a.min_alt,"m",Object(N.jsx)("br",{}),t("workouts:Max. altitude"),": ",a.max_alt,"m"]}),a.ascent&&a.descent&&Object(N.jsxs)("p",{children:[Object(N.jsx)("i",{className:"fa fa-location-arrow custom-fa"}),t("workouts:Ascent"),": ",a.ascent,"m",Object(N.jsx)("br",{}),t("workouts:Descent"),": ",a.descent,"m"]}),Object(N.jsx)(Je,{workout:a,t:t})]})}var Ye=a(901),Xe=a(898),$e=a(917),Ze=a(899),Qe=a(900),et=a(241),tt=a.n(et);function at(e){var t=e.bounds,a=e.coordinates,s=e.jsonData,r=e.mapAttribution;return Object(Xe.a)().fitBounds(t),Object(N.jsxs)(N.Fragment,{children:[Object(N.jsx)($e.a,{attribution:r,url:"".concat(T,"workouts/map_tile/{s}/{z}/{x}/{y}.png")}),Object(N.jsx)(Ze.a,{data:s},tt()(s)),a.latitude&&Object(N.jsx)(Qe.a,{position:[a.latitude,a.longitude]})]})}var st=function(e){Object(x.a)(a,e);var t=Object(g.a)(a);function a(e,s){var r;return Object(f.a)(this,a),(r=t.call(this,e,s)).state={zoom:13},r}return Object(O.a)(a,[{key:"componentDidMount",value:function(){"workout"===this.props.dataType?this.props.loadWorkoutGpx(this.props.workout.id):this.props.loadSegmentGpx(this.props.workout.id,this.props.segmentId)}},{key:"componentDidUpdate",value:function(e){("workout"===this.props.dataType&&e.workout.id!==this.props.workout.id||"workout"===this.props.dataType&&"segment"===e.dataType)&&this.props.loadWorkoutGpx(this.props.workout.id),"segment"===this.props.dataType&&e.segmentId!==this.props.segmentId&&this.props.loadSegmentGpx(this.props.workout.id,this.props.segmentId)}},{key:"componentWillUnmount",value:function(){this.props.loadWorkoutGpx(null)}},{key:"render",value:function(){var e=this.props,t=e.coordinates,a=e.gpxContent,s=e.mapAttribution,r=e.workout,n=function(e){var t;if(e){var a=(new DOMParser).parseFromString(e,"text/xml");t=Oe.a.gpx(a)}return{jsonData:t}}(a).jsonData,o=[[r.bounds[0],r.bounds[1]],[r.bounds[2],r.bounds[3]]];return Object(N.jsx)("div",{children:n&&Object(N.jsx)(Ye.a,{zoom:this.state.zoom,bounds:o,boundsOptions:{padding:[10,10]},children:Object(N.jsx)(at,{bounds:o,coordinates:t,jsonData:n,mapAttribution:s})})})}}]),a}(n.a.Component),rt=Object(v.c)((function(e){return{gpxContent:e.gpx,mapAttribution:e.application.config.map_attribution}}),(function(e){return{loadWorkoutGpx:function(t){e(function(e){return function(t){if(e)return q.getData("workouts/".concat(e,"/gpx")).then((function(e){"success"===e.status?t(Te(e.data.gpx)):t(V("workouts|".concat(e.message)))})).catch((function(e){return t(V("workouts|".concat(e)))}));t(Te(null))}}(t))},loadSegmentGpx:function(t,a){e(function(e,t){return function(a){if(e)return q.getData("workouts/".concat(e,"/gpx/segment/").concat(t)).then((function(e){"success"===e.status?a(Te(e.data.gpx)):a(V("workouts|".concat(e.message)))})).catch((function(e){return a(V("workouts|".concat(e)))}));a(Te(null))}}(t,a))}}}))(st);function nt(e){var t=e.t;return Object(N.jsx)("div",{className:"workout-no-map text-center",children:t("workouts:No Map")})}function ot(e){var t=e.notes,a=e.t;return Object(N.jsx)("div",{className:"row",children:Object(N.jsx)("div",{className:"col",children:Object(N.jsx)("div",{className:"card workout-card",children:Object(N.jsxs)("div",{className:"card-body",children:["Notes",Object(N.jsx)("div",{className:"workout-notes",children:t||a("workouts:No notes")})]})})})})}function ct(e){var t=e.segments,a=e.t;return Object(N.jsx)("div",{className:"row",children:Object(N.jsx)("div",{className:"col",children:Object(N.jsx)("div",{className:"card workout-card",children:Object(N.jsxs)("div",{className:"card-body",children:[a("workouts:Segments"),Object(N.jsx)("div",{className:"workout-segments",children:Object(N.jsx)("ul",{children:t.map((function(e,t){return Object(N.jsxs)("li",{className:"workout-segments-list",children:[Object(N.jsxs)(ae.a,{to:"/workouts/".concat(e.workout_id,"/segment/").concat(t+1),children:[a("workouts:segment")," ",t+1]})," ","(",a("workouts:distance"),": ",e.distance," km,"," ",a("workouts:duration"),": ",e.duration,")"]},"segment-".concat(t))}))})})]})})})})}var it=function(e){Object(x.a)(a,e);var t=Object(g.a)(a);function a(e,s){var r;return Object(f.a)(this,a),(r=t.call(this,e,s)).state={displayModal:!1,coordinates:{latitude:null,longitude:null}},r}return Object(O.a)(a,[{key:"componentDidMount",value:function(){this.props.loadWorkout(this.props.match.params.workoutId)}},{key:"componentDidUpdate",value:function(e){e.match.params.workoutId!==this.props.match.params.workoutId&&this.props.loadWorkout(this.props.match.params.workoutId)}},{key:"displayModal",value:function(e){this.setState((function(t){return Object(S.a)(Object(S.a)({},t),{},{displayModal:e})}))}},{key:"updateCoordinates",value:function(e){var t=e&&e.length>0?{latitude:e[0].payload.latitude,longitude:e[0].payload.longitude}:{latitude:null,longitude:null};this.setState((function(e){return Object(S.a)(Object(S.a)({},e),{},{coordinates:t})}))}},{key:"render",value:function(){var e=this,t=this.props,a=t.message,s=t.onDeleteWorkout,r=t.sports,n=t.t,o=t.user,c=t.workouts,i=this.state,l=i.coordinates,d=i.displayModal,u=Object(he.a)(c,1)[0],m=u?u.title:n("workouts:Workout"),j=u?r.filter((function(e){return e.id===u.sport_id})):[],p=Object(he.a)(j,1)[0],h=parseInt(this.props.match.params.segmentId),b=h>=0?"segment":"workout";return Object(N.jsxs)("div",{className:"workout-page",children:[Object(N.jsx)(w.a,{children:Object(N.jsxs)("title",{children:["FitTrackee - ",m]})}),a?Object(N.jsx)(_,{message:a,t:n}):Object(N.jsxs)("div",{className:"container",children:[d&&Object(N.jsx)(He,{title:n("common:Confirmation"),text:n("workouts:Are you sure you want to delete this workout?"),confirm:function(){s(u.id),e.displayModal(!1)},close:function(){return e.displayModal(!1)}}),u&&p&&1===c.length&&Object(N.jsxs)("div",{children:[Object(N.jsx)("div",{className:"row",children:Object(N.jsx)("div",{className:"col",children:Object(N.jsxs)("div",{className:"card workout-card",children:[Object(N.jsx)("div",{className:"card-header",children:Object(N.jsx)(qe,{workout:u,dataType:b,segmentId:h,sport:p,t:n,title:m,user:o,displayModal:function(){return e.displayModal(!0)}})}),Object(N.jsx)("div",{className:"card-body",children:Object(N.jsxs)("div",{className:"row",children:[Object(N.jsx)("div",{className:"col-md-8",children:u.with_gpx?Object(N.jsx)(rt,{workout:u,coordinates:l,dataType:b,segmentId:h}):Object(N.jsx)(nt,{t:n})}),Object(N.jsx)("div",{className:"col",children:Object(N.jsx)(Ke,{workout:"workout"===b?u:u.segments[h-1],t:n})})]})})]})})}),u.with_gpx&&Object(N.jsx)("div",{className:"row",children:Object(N.jsx)("div",{className:"col",children:Object(N.jsx)("div",{className:"card workout-card",children:Object(N.jsx)("div",{className:"card-body",children:Object(N.jsx)("div",{className:"row",children:Object(N.jsxs)("div",{className:"col",children:[Object(N.jsx)("div",{className:"chart-title",children:n("workouts:Chart")}),Object(N.jsx)(Ve,{workout:u,dataType:b,segmentId:h,t:n,updateCoordinates:function(t){return e.updateCoordinates(t)}})]})})})})})}),"workout"===b&&Object(N.jsxs)(N.Fragment,{children:[Object(N.jsx)(ot,{notes:u.notes,t:n}),u.segments.length>1&&Object(N.jsx)(ct,{segments:u.segments,t:n})]})]})]})]})}}]),a}(n.a.Component),lt=Object(y.a)()(Object(v.c)((function(e){return{workouts:e.workouts.data,message:e.message,sports:e.sports.data,user:e.user}}),(function(e){return{loadWorkout:function(t){e(X("getData","workouts",{id:t}))},onDeleteWorkout:function(t){var a;e((a=t,function(e){return q.deleteData("workouts",a).then((function(t){var s;204===t.status?Promise.resolve(e((s=a,{type:"REMOVE_WORKOUT",workoutId:s}))).then((function(){return e(Ce())})).then((function(){return Ws.push("/")})):e(V("workouts|".concat(t.status)))})).catch((function(t){return e(V("workouts|".concat(t)))}))}))}}}))(it)),dt=function(e){Object(x.a)(a,e);var t=Object(g.a)(a);function a(){return Object(f.a)(this,a),t.apply(this,arguments)}return Object(O.a)(a,[{key:"componentDidMount",value:function(){this.props.loadWorkout(this.props.match.params.workoutId)}},{key:"render",value:function(){var e=this.props,t=e.message,a=e.sports,s=e.workouts,r=Object(he.a)(s,1)[0];return Object(N.jsx)("div",{children:a.length>0&&Object(N.jsx)(Ie,{workout:r,message:t,sports:a})})}}]),a}(n.a.Component),ut=Object(v.c)((function(e){return{workouts:e.workouts.data,message:e.message,sports:e.sports.data,user:e.user}}),(function(e){return{loadWorkout:function(t){e(X("getData","workouts",{id:t}))}}}))(dt);var mt=Object(v.c)((function(e){return{user:e.user}}))((function(){return Object(N.jsx)("div",{children:F()?Object(N.jsxs)(k.d,{children:[Object(N.jsx)(k.b,{exact:!0,path:"/workouts/add",component:We}),Object(N.jsx)(k.b,{exact:!0,path:"/workouts/:workoutId",component:lt}),Object(N.jsx)(k.b,{exact:!0,path:"/workouts/:workoutId/edit",component:ut}),Object(N.jsx)(k.b,{path:"/workouts/:workoutId/segment/:segmentId",component:lt}),Object(N.jsx)(k.b,{component:me})]}):Object(N.jsx)(k.a,{to:"/login"})})})),jt=function(e){Object(x.a)(a,e);var t=Object(g.a)(a);function a(){return Object(f.a)(this,a),t.apply(this,arguments)}return Object(O.a)(a,[{key:"render",value:function(){var e=this.props.t;return Object(N.jsx)("div",{className:"card text-center",children:Object(N.jsxs)("div",{className:"card-body",children:[e("common:No workouts.")," ",Object(N.jsx)(ae.a,{to:{pathname:"/workouts/add"},children:e("dashboard:Upload one !")})]})})}}]),a}(n.a.PureComponent),pt=function(e){Object(x.a)(a,e);var t=Object(g.a)(a);function a(){return Object(f.a)(this,a),t.apply(this,arguments)}return Object(O.a)(a,[{key:"render",value:function(){var e=this.props,t=e.loadWorkouts,a=e.sports,s=e.t,r=e.updateParams,n=Ne(a,s);return Object(N.jsx)("div",{className:"card",children:Object(N.jsx)("div",{className:"card-body workout-filter",children:Object(N.jsxs)("form",{onSubmit:function(e){return e.preventDefault()},children:[Object(N.jsxs)("div",{className:"form-group",children:[Object(N.jsxs)("label",{children:[s("workouts:From"),":",Object(N.jsx)("input",{className:"form-control col-md",name:"from",onChange:function(e){return r(e)},type:"date"})]}),Object(N.jsxs)("label",{children:[s("workouts:To"),":",Object(N.jsx)("input",{className:"form-control col-md",name:"to",onChange:function(e){return r(e)},type:"date"})]})]}),Object(N.jsx)("div",{className:"form-group",children:Object(N.jsxs)("label",{children:[s("common:Sport"),":",Object(N.jsxs)("select",{className:"form-control input-lg",name:"sport_id",onChange:function(e){return r(e)},children:[Object(N.jsx)("option",{value:""}),n.map((function(e){return Object(N.jsx)("option",{value:e.id,children:e.label},e.id)}))]})]})}),Object(N.jsx)("div",{className:"form-group",children:Object(N.jsxs)("label",{children:[s("workouts:Distance")," (km):",Object(N.jsx)("div",{className:"container",children:Object(N.jsxs)("div",{className:"row",children:[Object(N.jsx)("div",{className:"col-5",children:Object(N.jsx)("input",{className:"form-control",min:0,name:"distance_from",onChange:function(e){return r(e)},step:"1",type:"number"})}),Object(N.jsx)("div",{className:"col-2 align-middle text-center",children:s("common:to")}),Object(N.jsx)("div",{className:"col-5",children:Object(N.jsx)("input",{className:"form-control",min:0,name:"distance_to",onChange:function(e){return r(e)},step:"1",type:"number"})})]})})]})}),Object(N.jsx)("div",{className:"form-group",children:Object(N.jsxs)("label",{children:[s("workouts:Duration"),":",Object(N.jsx)("div",{className:"container",children:Object(N.jsxs)("div",{className:"row",children:[Object(N.jsx)("div",{className:"col-5",children:Object(N.jsx)("input",{className:"form-control",name:"duration_from",onChange:function(e){return r(e)},pattern:"^([0-9]*[0-9]):([0-5][0-9])$",placeholder:"hh:mm",type:"text"})}),Object(N.jsx)("div",{className:"col-2 align-middle text-center",children:s("common:to")}),Object(N.jsx)("div",{className:"col-5",children:Object(N.jsx)("input",{className:"form-control",name:"duration_to",onChange:function(e){return r(e)},pattern:"^([0-9]*[0-9]):([0-5][0-9])$",placeholder:"hh:mm",type:"text"})})]})})]})}),Object(N.jsx)("div",{className:"form-group",children:Object(N.jsxs)("label",{children:[s("workouts:Average speed")," (km/h):",Object(N.jsx)("div",{className:"container",children:Object(N.jsxs)("div",{className:"row",children:[Object(N.jsx)("div",{className:"col-5",children:Object(N.jsx)("input",{className:"form-control",min:0,name:"ave_speed_from",onChange:function(e){return r(e)},step:"1",type:"number"})}),Object(N.jsx)("div",{className:"col-2 align-middle text-center",children:s("common:to")}),Object(N.jsx)("div",{className:"col-5",children:Object(N.jsx)("input",{className:"form-control",min:0,name:"ave_speed_to",onChange:function(e){return r(e)},step:"1",type:"number"})})]})})]})}),Object(N.jsx)("div",{className:"form-group",children:Object(N.jsxs)("label",{children:[s("workouts:Max. speed")," (km/h):",Object(N.jsx)("div",{className:"container",children:Object(N.jsxs)("div",{className:"row",children:[Object(N.jsx)("div",{className:"col-5",children:Object(N.jsx)("input",{className:"form-control",min:0,name:"max_speed_from",onChange:function(e){return r(e)},step:"1",type:"number"})}),Object(N.jsx)("div",{className:"col-2 align-middle text-center",children:s("common:to")}),Object(N.jsx)("div",{className:"col-5",children:Object(N.jsx)("input",{className:"form-control",min:0,name:"max_speed_to",onChange:function(e){return r(e)},step:"1",type:"number"})})]})})]})}),Object(N.jsx)("input",{className:"btn btn-primary btn-lg btn-block",onClick:function(){return t()},type:"submit",value:s("workouts:Filter")})]})})})}}]),a}(n.a.PureComponent),ht=function(e){Object(x.a)(a,e);var t=Object(g.a)(a);function a(){return Object(f.a)(this,a),t.apply(this,arguments)}return Object(O.a)(a,[{key:"render",value:function(){var e=this.props,t=e.display,a=e.workout;return Object(N.jsxs)("div",{className:"workout-map".concat("list"===t?"-list":""),children:[Object(N.jsx)("img",{src:"".concat(T,"workouts/map/").concat(a.map,"?").concat(Date.now()),alt:"workout map"}),Object(N.jsxs)("div",{className:"map-attribution".concat("list"===t?"-list":""),children:[Object(N.jsx)("span",{className:"map-attribution-text",children:"\xa9"}),Object(N.jsx)("a",{className:"map-attribution-text",href:"http://www.openstreetmap.org/copyright",target:"_blank",rel:"noopener noreferrer",children:"OpenStreetMap"})]})]})}}]),a}(n.a.PureComponent),bt=function(e){Object(x.a)(a,e);var t=Object(g.a)(a);function a(){return Object(f.a)(this,a),t.apply(this,arguments)}return Object(O.a)(a,[{key:"render",value:function(){var e=this.props,t=e.loading,a=e.sports,s=e.t,r=e.user,n=e.workouts;return Object(N.jsx)("div",{className:"card workout-card",children:Object(N.jsxs)("div",{className:"card-body",children:[Object(N.jsxs)("table",{className:"table",children:[Object(N.jsx)("thead",{children:Object(N.jsxs)("tr",{children:[Object(N.jsx)("th",{scope:"col"}),Object(N.jsx)("th",{scope:"col",children:s("common:Workout")}),Object(N.jsx)("th",{scope:"col",children:s("workouts:Date")}),Object(N.jsx)("th",{scope:"col",children:s("workouts:Distance")}),Object(N.jsx)("th",{scope:"col",children:s("workouts:Duration")}),Object(N.jsx)("th",{scope:"col",children:s("workouts:Ave. speed")}),Object(N.jsx)("th",{scope:"col",children:s("workouts:Max. speed")})]})}),Object(N.jsx)("tbody",{children:!t&&a&&n.map((function(e,t){return Object(N.jsxs)("tr",{children:[Object(N.jsxs)("td",{children:[Object(N.jsx)("span",{className:"heading-span-absolute",children:s("common:Sport")}),Object(N.jsx)("img",{className:"workout-sport",src:a.filter((function(t){return t.id===e.sport_id})).map((function(e){return e.img})),alt:"workout sport logo"})]}),Object(N.jsxs)("td",{className:"workout-title",children:[Object(N.jsx)("span",{className:"heading-span-absolute",children:s("common:Workout")}),Object(N.jsx)(ae.a,{to:"/workouts/".concat(e.id),children:e.title}),e.map&&Object(N.jsx)(ht,{workout:e,display:"list"})]}),Object(N.jsxs)("td",{children:[Object(N.jsx)("span",{className:"heading-span-absolute",children:s("workouts:Date")}),Object(D.a)(U(e.workout_date,r.timezone),"dd/MM/yyyy HH:mm")]}),Object(N.jsxs)("td",{className:"text-right",children:[Object(N.jsx)("span",{className:"heading-span-absolute",children:s("workouts:Distance")}),Number(e.distance).toFixed(2)," km"]}),Object(N.jsxs)("td",{className:"text-right",children:[Object(N.jsx)("span",{className:"heading-span-absolute",children:s("workouts:Duration")}),e.moving]}),Object(N.jsxs)("td",{className:"text-right",children:[Object(N.jsx)("span",{className:"heading-span-absolute",children:s("workouts:Ave. speed")}),e.ave_speed," km/h"]}),Object(N.jsxs)("td",{className:"text-right",children:[Object(N.jsx)("span",{className:"heading-span-absolute",children:s("workouts:Max. speed")}),e.max_speed," km/h"]})]},t)}))})]}),t&&Object(N.jsx)("div",{className:"loader"})]})})}}]),a}(n.a.PureComponent),ft=function(e){Object(x.a)(a,e);var t=Object(g.a)(a);function a(e,s){var r;return Object(f.a)(this,a),(r=t.call(this,e,s)).state={params:{page:1,per_page:10}},r}return Object(O.a)(a,[{key:"componentDidMount",value:function(){this.props.loadWorkouts(this.state.params)}},{key:"setParams",value:function(e){var t=this.state.params;""===e.target.value?delete t[e.target.name]:t[e.target.name]=e.target.value,t.page=1,this.setState(t)}},{key:"render",value:function(){var e=this,t=this.props,a=t.loading,s=t.loadWorkouts,r=t.loadMoreWorkouts,n=t.message,o=t.sports,c=t.t,i=t.user,l=t.workouts,d=this.state.params,u=!(l.length>0)||null===l[l.length-1].previous_workout;return Object(N.jsxs)("div",{children:[Object(N.jsx)(w.a,{children:Object(N.jsxs)("title",{children:["FitTrackee - ",c("common:Workouts")]})}),n?Object(N.jsx)(_,{message:n,t:c}):Object(N.jsx)("div",{className:"container history",children:Object(N.jsxs)("div",{className:"row",children:[Object(N.jsx)("div",{className:"col-md-3",children:Object(N.jsx)(pt,{sports:o,loadWorkouts:function(){return s(d)},t:c,updateParams:function(t){return e.setParams(t)}})}),Object(N.jsxs)("div",{className:"col-md-9 workouts-result",children:[Object(N.jsx)(bt,{workouts:l,loading:a,sports:o,t:c,user:i}),!u&&Object(N.jsx)("input",{type:"submit",className:"btn btn-default btn-md btn-block",value:"Load more workouts",onClick:function(){d.page+=1,r(d),e.setState(d)}}),0===l.length&&Object(N.jsx)(jt,{t:c})]})]})})]})}}]),a}(n.a.Component),Ot=Object(y.a)()(Object(v.c)((function(e){return{workouts:e.workouts.data,loading:e.loading,message:e.message,sports:e.sports.data,user:e.user}}),(function(e){return{loadWorkouts:function(t){e(X("getData","workouts",t))},loadMoreWorkouts:function(t){e(Fe(t))}}}))(ft));var xt=Object(y.a)()(Object(v.c)((function(e){return{appConfig:e.application.config,pathname:e.router.location.pathname,message:e.message}}),(function(e){return{onDeletePicture:function(){e((function(e){return _e.deletePicture().then((function(t){return 204===t.status?e(Ee()):e(Se(t.message))})).catch((function(e){throw e}))}))},onUploadPicture:function(t){e(function(e){return function(t){e.preventDefault();var a=new FormData;return a.append("file",e.target.picture.files[0]),e.target.reset(),q.addDataWithFile("auth/picture",a).then((function(e){if("success"===e.status)return t(Ee());var a=413===e.status?"Error during picture update, file size exceeds max size.":e.message;return t(Se(a))})).catch((function(e){throw e}))}}(t))}}}))((function(e){var t=e.appConfig,a=e.displayModal,s=e.editable,r=e.isDeletable,n=e.message,o=e.onDeletePicture,c=e.onUploadPicture,i=e.pathname,l=e.t,d=e.user,u=d.created_at?Object(D.a)(new Date(d.created_at),"dd/MM/yyyy HH:mm"):"",m=d.birth_date?Object(D.a)(new Date(d.birth_date),"dd/MM/yyyy"):"",j=M(t.max_single_file_size);return Object(N.jsxs)("div",{children:[Object(N.jsx)(w.a,{children:Object(N.jsxs)("title",{children:["FitTrackee - ",l("user:Profile")]})}),Object(N.jsx)(_,{message:n,t:l}),Object(N.jsxs)("div",{className:"container",children:[Object(N.jsx)("h1",{className:"page-title",children:l("user:Profile")}),Object(N.jsx)("div",{className:"row",children:Object(N.jsx)("div",{className:"col-md-12",children:Object(N.jsxs)("div",{className:"card",children:[Object(N.jsx)("div",{className:"card-header userName",children:Object(N.jsx)("strong",{children:d.username})}),Object(N.jsxs)("div",{className:"card-body",children:[Object(N.jsxs)("div",{className:"row",children:[Object(N.jsxs)("div",{className:"col-md-8",children:[Object(N.jsxs)("p",{children:[Object(N.jsx)("span",{className:"user-label",children:l("user:Email")}),": ",d.email]}),Object(N.jsxs)("p",{children:[Object(N.jsx)("span",{className:"user-label",children:l("user:Registration Date")}),": ",u]}),Object(N.jsxs)("p",{children:[Object(N.jsx)("span",{className:"user-label",children:l("user:First Name")}),": ",d.first_name]}),Object(N.jsxs)("p",{children:[Object(N.jsx)("span",{className:"user-label",children:l("user:Last Name")}),": ",d.last_name]}),Object(N.jsxs)("p",{children:[Object(N.jsx)("span",{className:"user-label",children:l("user:Birth Date")}),": ",m]}),Object(N.jsxs)("p",{children:[Object(N.jsx)("span",{className:"user-label",children:l("user:Location")}),": ",d.location]}),Object(N.jsxs)("p",{children:[Object(N.jsx)("span",{className:"user-label",children:l("user:Bio")}),":"," ",d.bio]}),Object(N.jsxs)("p",{children:[Object(N.jsx)("span",{className:"user-label",children:l("user:Language")}),": ",d.language]}),Object(N.jsxs)("p",{children:[Object(N.jsx)("span",{className:"user-label",children:l("user:Timezone")}),": ",d.timezone]}),Object(N.jsxs)("p",{children:[Object(N.jsx)("span",{className:"user-label",children:l("user:First day of week")}),": ",d.weekm?l("user:Monday"):l("user:Sunday")]})]}),Object(N.jsxs)("div",{className:"col-md-4",children:[!0===d.picture&&Object(N.jsxs)("div",{children:[Object(N.jsx)("img",{alt:"Profile",src:"".concat(T,"users/").concat(d.username,"/picture")+"?".concat(Date.now()),className:"img-fluid App-profile-img-small"}),s&&Object(N.jsxs)(N.Fragment,{children:[Object(N.jsx)("br",{}),Object(N.jsx)("button",{type:"submit",onClick:function(){return o()},children:l("user:Delete picture")}),Object(N.jsx)("br",{}),Object(N.jsx)("br",{})]})]}),s&&Object(N.jsxs)("form",{encType:"multipart/form-data",onSubmit:function(e){return c(e)},children:[Object(N.jsx)("input",{type:"file",name:"picture",accept:".png,.jpg,.gif"}),Object(N.jsx)("br",{}),Object(N.jsx)("button",{type:"submit",children:l("user:Send")})," (max. size: ".concat(j,")")]})," "]})]}),s&&Object(N.jsx)("button",{className:"btn btn-primary",onClick:function(){return Ws.push("/profile/edit")},children:l("common:Edit")}),r&&Object(N.jsx)("button",{className:"btn btn-danger",onClick:function(){return a(!0)},children:l("user:Delete user account")}),Object(N.jsx)("button",{className:"btn btn-secondary",onClick:function(){return"/profile"===i?Ws.push("/"):Ws.go(-1)},children:l("/profile"===i?"common:Back to home":"common:Back")})]})]})})})]})]})})));var gt=Object(y.a)()(Object(v.c)((function(e){return{user:e.user}}))((function(e){var t=e.t,a=e.user;return Object(N.jsx)("div",{children:Object(N.jsx)(xt,{editable:!0,t:t,user:a})})}))),vt=a(902),kt=a(903),wt=a(904),yt=a(905),Nt=a(242),_t=a(247),St=a(906),Dt=a(907),Ct=a(113),Et=a(908),At=a(150);function Mt(e){var t=e.isDisabled,a=e.isMore,s=e.sportImg,r=e.workout;return Object(N.jsx)(ae.a,{className:"calendar-workout".concat(a),to:"/workouts/".concat(r.id),children:Object(N.jsxs)(N.Fragment,{children:[Object(N.jsx)("img",{alt:"workout sport logo",className:"workout-sport ".concat(t),src:s,title:r.title}),r.records.length>0&&Object(N.jsx)("sup",{children:Object(N.jsx)("i",{className:"fa fa-trophy custom-fa-small","aria-hidden":"true",title:r.records.map((function(e){return" ".concat(ge.filter((function(t){return t.record_type===e.record_type}))[0].label)}))})})]})})}var Tt=function(e){Object(x.a)(a,e);var t=Object(g.a)(a);function a(e,s){var r;return Object(f.a)(this,a),(r=t.call(this,e,s)).state={isHidden:!0},r}return Object(O.a)(a,[{key:"handleDisplayMore",value:function(){this.setState({isHidden:!this.state.isHidden})}},{key:"render",value:function(){var e=this,t=this.props,a=t.dayWorkouts,s=t.isDisabled,r=t.sports,n=this.state.isHidden;return Object(N.jsxs)("div",{children:[a.map((function(e){return Object(N.jsx)(Mt,{workout:e,isDisabled:s,isMore:"",sportImg:r.filter((function(t){return t.id===e.sport_id})).map((function(e){return e.img}))},e.id)})),a.length>2&&Object(N.jsx)("i",{className:"fa fa-".concat(n?"plus":"times"," calendar-more"),"aria-hidden":"true",onClick:function(){return e.handleDisplayMore()},title:"show more workouts"}),!n&&Object(N.jsx)("div",{className:"calendar-display-more",children:a.map((function(e){return Object(N.jsx)(Mt,{workout:e,isDisabled:s,isMore:"-more",sportImg:r.filter((function(t){return t.id===e.sport_id})).map((function(e){return e.img}))},e.id)}))})]})}}]),a}(n.a.Component),Pt=function(e,t){var a=Object(vt.a)(e),s=Object(kt.a)(e),r=t?1:0;return{start:Object(wt.a)(a,{weekStartsOn:r}),end:Object(yt.a)(s)}},zt=function(e){Object(x.a)(a,e);var t=Object(g.a)(a);function a(e,s){var r;Object(f.a)(this,a),r=t.call(this,e,s);var n=new Date;return r.state={currentMonth:n,startDate:Pt(n,e.weekm).start,endDate:Pt(n,e.weekm).end,weekStartOnMonday:e.weekm},r}return Object(O.a)(a,[{key:"componentDidMount",value:function(){this.props.loadMonthWorkouts(this.state.startDate,this.state.endDate)}},{key:"renderHeader",value:function(e){var t=this;return Object(N.jsxs)("div",{className:"header row flex-middle",children:[Object(N.jsx)("div",{className:"col col-start",onClick:function(){return t.handlePrevMonth()},children:Object(N.jsx)("i",{className:"fa fa-chevron-left","aria-hidden":"true"})}),Object(N.jsx)("div",{className:"col col-center",children:Object(N.jsx)("span",{children:Object(D.a)(this.state.currentMonth,"MMM yyyy",e)})}),Object(N.jsx)("div",{className:"col col-end",onClick:function(){return t.handleNextMonth()},children:Object(N.jsx)("i",{className:"fa fa-chevron-right","aria-hidden":"true"})})]})}},{key:"renderDays",value:function(e){for(var t=[],a=this.state.startDate,s=0;s<7;s++)t.push(Object(N.jsx)("div",{className:"col col-center",children:Object(D.a)(Object(Nt.a)(a,s),"EEE",e)},s));return Object(N.jsx)("div",{className:"days row",children:t})}},{key:"filterWorkouts",value:function(e){var t=this.props,a=t.workouts,s=t.user;return a?a.filter((function(t){return Object(_t.a)(U(t.workout_date,s.timezone),e)})).reverse():[]}},{key:"renderCells",value:function(){for(var e=this.state,t=e.currentMonth,a=e.startDate,s=e.endDate,r=e.weekStartOnMonday,n=this.props.sports,o=[],c=[],i=a,l="";i<=s;){for(var d=0;d<7;d++){l=Object(D.a)(i,"d");var u=this.filterWorkouts(i),m=Object(St.a)(i,t)?"":"-disabled",j=r?[5,6].includes(d):[0,6].includes(d);c.push(Object(N.jsx)("div",{className:"col cell ".concat(j?" weekend":"").concat(Object(Dt.a)(i)?" today":""),children:Object(N.jsxs)("div",{className:"img".concat(m),children:[Object(N.jsx)("span",{className:"number",children:l}),Object(N.jsx)(Tt,{dayWorkouts:u,isDisabled:m,sports:n})]})},i)),i=Object(Nt.a)(i,1)}o.push(Object(N.jsx)("div",{className:"row",children:c},i)),c=[]}return Object(N.jsx)("div",{className:"body",children:o})}},{key:"updateStateDate",value:function(e){var t=Pt(e,this.state.weekStartOnMonday),a=t.start,s=t.end;this.setState({currentMonth:e,startDate:a,endDate:s}),this.props.loadMonthWorkouts(a,s)}},{key:"handleNextMonth",value:function(){var e=Object(Ct.a)(this.state.currentMonth,1);this.updateStateDate(e)}},{key:"handlePrevMonth",value:function(){var e=Object(Et.a)(this.state.currentMonth,1);this.updateStateDate(e)}},{key:"render",value:function(){var e={locale:"fr"===this.props.language?At.fr:At.enGB};return Object(N.jsx)("div",{className:"card workout-card",children:Object(N.jsxs)("div",{className:"calendar",children:[this.renderHeader(e),this.renderDays(e),this.renderCells()]})})}}]),a}(n.a.Component),Ft=Object(v.c)((function(e){return{workouts:e.calendarWorkouts.data,language:e.language,sports:e.sports.data,user:e.user}}),(function(e){return{loadMonthWorkouts:function(t,a){var s,r,n="yyyy-MM-dd";e((s=Object(D.a)(t,n),r=Object(D.a)(a,n),function(e){return q.getData("workouts",{from:s,to:r,order:"desc",per_page:100}).then((function(t){"success"===t.status?e({type:"UPDATE_CALENDAR",workouts:t.data.workouts}):e(V("workouts|".concat(t.message)))})).catch((function(t){return e(V("workouts|".concat(t)))}))}))}}}))(zt);function Rt(e){var t=e.records,a=e.sports,s=e.t,r=e.user,n=Ne(a,s),o=t.reduce((function(e,t){var a=n.find((function(e){return e.id===t.sport_id}));return void 0===e[a.label]&&(e[a.label]={img:a.img,records:[]}),e[a.label].records.push(function(e,t){var a;switch(e.record_type){case"AS":case"MS":a="".concat(e.value," km/h");break;case"FD":a="".concat(e.value," km");break;default:a=e.value}var s=ge.filter((function(t){return t.record_type===e.record_type})),r=Object(he.a)(s,1)[0];return{workout_date:ve(U(e.workout_date,t)).workout_date,workout_id:e.workout_id,id:e.id,record_type:r.label,value:a}}(t,r.timezone)),e}),{});return Object(N.jsxs)("div",{className:"card workout-card",children:[Object(N.jsx)("div",{className:"card-header",children:s("workouts:Personal records")}),Object(N.jsx)("div",{className:"card-body",children:0===Object.keys(o).length?s("common:No records."):Object.keys(o).sort().map((function(e){return Object(N.jsxs)("div",{children:[Object(N.jsxs)("span",{className:"heading-span",children:[Object(N.jsx)("img",{alt:"".concat(e," logo"),className:"record-logo",src:o[e].img}),e]}),Object(N.jsxs)("table",{className:"table table-borderless table-sm record-table",children:[Object(N.jsx)("thead",{children:Object(N.jsx)("tr",{children:Object(N.jsxs)("th",{colSpan:"3",children:[Object(N.jsx)("img",{alt:"".concat(e," logo"),className:"record-logo",src:o[e].img}),e]})})}),Object(N.jsx)("tbody",{children:o[e].records.map((function(e){return Object(N.jsxs)("tr",{className:"record-tr",children:[Object(N.jsx)("td",{className:"record-td",children:s("workouts:".concat(e.record_type))}),Object(N.jsx)("td",{className:"record-td text-right",children:e.value}),Object(N.jsx)("td",{className:"record-td text-right",children:Object(N.jsx)(ae.a,{to:"/workouts/".concat(e.workout_id),children:e.workout_date})})]},e.id)}))})]})]},e)}))})]})}var Lt=a(243),Ut=a(909),It=[{duration:"week",dateFormat:"yyyy-MM-dd",xAxis:"dd/MM"},{duration:"month",dateFormat:"yyyy-MM",xAxis:"MM/yyyy"},{duration:"year",dateFormat:"yyyy",xAxis:"yyyy"}],Wt=function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],a="0";t&&(a=String(Math.floor(e/86400)),e%=86400);var s=String(Math.floor(e/3600)).padStart(2,"0");e%=3600;var r=String(Math.floor(e/60)).padStart(2,"0"),n=String(e%60).padStart(2,"0");return t?"".concat("0"===a?"":"".concat(a,"d:")).concat("00"===s?"":"".concat(s,"h:")).concat(r,"m:").concat(n,"s"):"".concat("00"===s?"":"".concat(s,":")).concat(r,":").concat(n)},Ht=function(e,t){return 0===t?"":"distance"===e?"".concat(t.toFixed(2)," km"):"duration"===e?Wt(t):t},qt=function(e,t){switch(e){case"week":return Object(Nt.a)(t,7);case"year":return Object(Lt.a)(t,1);case"month":default:return Object(Ct.a)(t,1)}},Bt=function(e,t,a,s,r){for(var n=[],o=[],c=[],i=function(r){var i=It.filter((function(e){return e.duration===a.duration})),l=Object(he.a)(i,1)[0],d=Object(D.a)(r,l.dateFormat),u=Object(D.a)(r,l.xAxis),m={date:u},j={date:u},p={date:u};e[d]&&Object.keys(e[d]).filter((function(e){return!s||s.includes(+e)})).map((function(a){var s=t.filter((function(e){return e.id===+a}))[0].label;return m[s]=e[d][a].nb_workouts,j[s]=e[d][a].total_distance,p[s]=e[d][a].total_duration,null})),n.push(m),o.push(j),c.push(p)},l=function(e,t,a){switch(e){case"week":return Object(wt.a)(t,{weekStartsOn:a?1:0});case"year":return Object(Ut.a)(t);case"month":default:return Object(vt.a)(t)}}(a.duration,a.start,r);l<=a.end;l=qt(a.duration,l))i(l);return{workouts:n,distance:o,duration:c}},Gt=function(e,t){return"duration"===e?Wt(t,!0):"distance"===e?t.toFixed(2):t};function Vt(e){if(e.active){var t=e.displayedData,a=e.payload,s=e.label,r=0;return a.map((function(e){return r+=e.value})),Object(N.jsxs)("div",{className:"custom-tooltip",children:[Object(N.jsx)("p",{className:"custom-tooltip-label",children:s}),a.map((function(e){return Object(N.jsxs)("p",{style:{color:e.fill},children:[e.name,": ",Gt(t,e.value)," ",e.unit]},e.name)})),a.length>0&&Object(N.jsxs)("p",{children:["Total: ",Gt(t,r)]})]})}return null}function Jt(e){var t=e.displayedData,a=e.x,s=e.y,r=e.width,n=e.value;if(!n)return null;var o=Ht(t,n);return Object(N.jsx)("g",{children:Object(N.jsx)("text",{x:a+r/2,y:s-10,fill:"#666",fontSize:"11",textAnchor:"middle",dominantBaseline:"middle",children:o})})}var Kt=function(e){Object(x.a)(a,e);var t=Object(g.a)(a);function a(e,s){var r;return Object(f.a)(this,a),(r=t.call(this,e,s)).state={displayedData:"distance"},r}return Object(O.a)(a,[{key:"handleRadioChange",value:function(e){this.setState({displayedData:e.target.name})}},{key:"render",value:function(){var e=this,t=this.state.displayedData,a=this.props,s=a.sports,r=a.stats,n=a.t;return 0===Object.keys(r).length?n("common:No workouts."):Object(N.jsxs)("div",{className:"chart-stats",children:[Object(N.jsxs)("div",{className:"row chart-radio",children:[Object(N.jsxs)("label",{className:"radioLabel col",children:[Object(N.jsx)("input",{type:"radio",name:"distance",checked:"distance"===t,onChange:function(t){return e.handleRadioChange(t)}}),n("statistics:distance")]}),Object(N.jsxs)("label",{className:"radioLabel col",children:[Object(N.jsx)("input",{type:"radio",name:"duration",checked:"duration"===t,onChange:function(t){return e.handleRadioChange(t)}}),n("statistics:duration")]}),Object(N.jsxs)("label",{className:"radioLabel col",children:[Object(N.jsx)("input",{type:"radio",name:"workouts",checked:"workouts"===t,onChange:function(t){return e.handleRadioChange(t)}}),n("statistics:workouts")]})]}),Object(N.jsx)(Be.f,{height:300,children:Object(N.jsxs)(Be.c,{data:r[t],margin:{top:15,bottom:0},children:[Object(N.jsx)(Be.h,{dataKey:"date",interval:0}),Object(N.jsx)(Be.i,{tickFormatter:function(e){return Ht(t,e)}}),Object(N.jsx)(Be.g,{content:Object(N.jsx)(Vt,{displayedData:t})}),s.map((function(e,a){return Object(N.jsx)(Be.b,{isAnimationActive:!1,dataKey:e.label,stackId:"a",fill:xe[a],label:a===s.length-1?Object(N.jsx)(Jt,{displayedData:t}):"",name:n("sports:".concat(e.label))},e.id)}))]})})]})}}]),a}(n.a.PureComponent),Yt=function(e){Object(x.a)(a,e);var t=Object(g.a)(a);function a(){return Object(f.a)(this,a),t.apply(this,arguments)}return Object(O.a)(a,[{key:"componentDidMount",value:function(){this.updateData()}},{key:"componentDidUpdate",value:function(e){(this.props.user.username&&this.props.user.username!==e.user.username||this.props.statsParams!==e.statsParams)&&this.updateData()}},{key:"updateData",value:function(){this.props.user.username&&this.props.loadWorkouts(this.props.user.username,this.props.user.weekm,this.props.statsParams)}},{key:"render",value:function(){var e=this.props,t=e.displayedSports,a=e.sports,s=e.statistics,r=e.statsParams,n=e.displayEmpty,o=e.t,c=e.user;if(!n&&0===Object.keys(s).length)return Object(N.jsx)("span",{children:o("common:No workouts.")});var i=Bt(s,a,r,t,c.weekm);return Object(N.jsx)(Kt,{sports:a,stats:i,t:o})}}]),a}(n.a.PureComponent),Xt=Object(v.c)((function(e){return{sports:e.sports.data,statistics:e.statistics.data,user:e.user}}),(function(e){return{loadWorkouts:function(t,a,s){var r="yyyy-MM-dd",n="week"===s.duration?"".concat(s.duration).concat(a?"m":""):s.duration,o={from:Object(D.a)(s.start,r),to:Object(D.a)(s.end,r),time:n};e(function(e,t,a){return function(s){return q.getData("stats/".concat(e,"/").concat(t),a).then((function(e){"success"===e.status?s(B("statistics",e.data)):s(V("statistics|".concat(e.message)))})).catch((function(e){return s(V("statistics|".concat(e)))}))}}(t,s.type,o))}}}))(Yt),$t=function(e){Object(x.a)(a,e);var t=Object(g.a)(a);function a(e,s){var r;Object(f.a)(this,a),r=t.call(this,e,s);var n=new Date;return r.state={start:Object(vt.a)(n),end:Object(kt.a)(n),duration:"week",type:"by_time"},r}return Object(O.a)(a,[{key:"render",value:function(){var e=this.props.t;return Object(N.jsxs)("div",{className:"card workout-card",children:[Object(N.jsx)("div",{className:"card-header",children:e("dashboard:This month")}),Object(N.jsx)("div",{className:"card-body",children:Object(N.jsx)(Xt,{displayEmpty:!1,statsParams:this.state,t:e})})]})}}]),a}(n.a.Component);function Zt(e){var t=e.t,a=e.user,s=a.total_duration.match(/day/g)?"".concat(a.total_duration.split(" ")[0]," ").concat(a.total_duration.match(/days/g)?t("common:days"):t("common:day")):"0 ".concat(t("common:days"),","),r=a.total_duration.match(/day/g)?a.total_duration.split(", ")[1]:a.total_duration;return r="".concat(r.split(":")[0],"h ").concat(r.split(":")[1],"min"),Object(N.jsxs)("div",{className:"row",children:[Object(N.jsx)("div",{className:"col-lg-3 col-md-6 col-sm-6",children:Object(N.jsx)("div",{className:"card workout-card",children:Object(N.jsxs)("div",{className:"card-body row",children:[Object(N.jsx)("div",{className:"col-3",children:Object(N.jsx)("i",{className:"fa fa-calendar fa-3x fa-color"})}),Object(N.jsxs)("div",{className:"col-9 text-right",children:[Object(N.jsx)("div",{className:"huge",children:a.nb_workouts}),Object(N.jsx)("div",{children:"".concat(1===a.nb_workouts?t("common:workout"):t("common:workouts"))})]})]})})}),Object(N.jsx)("div",{className:"col-lg-3 col-md-6 col-sm-6",children:Object(N.jsx)("div",{className:"card workout-card",children:Object(N.jsxs)("div",{className:"card-body row",children:[Object(N.jsx)("div",{className:"col-3",children:Object(N.jsx)("i",{className:"fa fa-road fa-3x fa-color"})}),Object(N.jsxs)("div",{className:"col-9 text-right",children:[Object(N.jsx)("div",{className:"huge",children:Number(a.total_distance).toFixed(2)}),Object(N.jsx)("div",{children:"km"})]})]})})}),Object(N.jsx)("div",{className:"col-lg-3 col-md-6 col-sm-6",children:Object(N.jsx)("div",{className:"card workout-card",children:Object(N.jsxs)("div",{className:"card-body row",children:[Object(N.jsx)("div",{className:"col-3",children:Object(N.jsx)("i",{className:"fa fa-clock-o fa-3x fa-color"})}),Object(N.jsxs)("div",{className:"col-9 text-right",children:[Object(N.jsx)("div",{className:"huge",children:s}),Object(N.jsx)("div",{children:r})]})]})})}),Object(N.jsx)("div",{className:"col-lg-3 col-md-6 col-sm-6",children:Object(N.jsx)("div",{className:"card workout-card",children:Object(N.jsxs)("div",{className:"card-body row",children:[Object(N.jsx)("div",{className:"col-3",children:Object(N.jsx)("i",{className:"fa fa-tags fa-3x fa-color"})}),Object(N.jsxs)("div",{className:"col-9 text-right",children:[Object(N.jsx)("div",{className:"huge",children:a.nb_sports}),Object(N.jsx)("div",{children:"".concat(1===a.nb_sports?t("common:sport"):t("common:sports"))})]})]})})})]})}function Qt(e){var t=e.sports,a=e.t,s=e.user,r=e.workout;return Object(N.jsxs)("div",{className:"card workout-card text-center",children:[Object(N.jsx)("div",{className:"card-header",children:Object(N.jsxs)(ae.a,{to:"/workouts/".concat(r.id),children:[t.filter((function(e){return e.id===r.sport_id})).map((function(e){return a("sports:".concat(e.label))}))," ","-"," ",Object(D.a)(U(r.workout_date,s.timezone),"dd/MM/yyyy HH:mm")]})}),Object(N.jsx)("div",{className:"card-body",children:Object(N.jsxs)("div",{className:"row",children:[r.map&&Object(N.jsx)("div",{className:"col",children:Object(N.jsx)(ht,{workout:r})}),Object(N.jsx)("div",{className:"col",children:Object(N.jsxs)("p",{children:[Object(N.jsx)("i",{className:"fa fa-clock-o","aria-hidden":"true"})," ",a("workouts:Duration"),": ",r.moving,r.map?Object(N.jsxs)("span",{children:[Object(N.jsx)("br",{}),Object(N.jsx)("br",{})]}):" - ",Object(N.jsx)("i",{className:"fa fa-road","aria-hidden":"true"})," ",a("workouts:Distance"),": ",r.distance," km"]})})]})})]})}var ea=function(e){Object(x.a)(a,e);var t=Object(g.a)(a);function a(e,s){var r;return Object(f.a)(this,a),(r=t.call(this,e,s)).state={page:1},r}return Object(O.a)(a,[{key:"componentDidMount",value:function(){this.props.loadWorkouts()}},{key:"render",value:function(){var e=this,t=this.props,a=t.loadMoreWorkouts,s=t.message,r=t.records,n=t.sports,o=t.t,c=t.user,i=t.workouts,l=!(i.length>0)||null===i[i.length-1].previous_workout,d=this.state.page;return Object(N.jsxs)("div",{children:[Object(N.jsx)(w.a,{children:Object(N.jsxs)("title",{children:["FitTrackee - ",o("common:Dashboard")]})}),s?Object(N.jsx)(_,{message:s,t:o}):i&&c.total_duration&&n.length>0&&Object(N.jsxs)("div",{className:"container dashboard",children:[Object(N.jsx)(Zt,{user:c,t:o}),Object(N.jsxs)("div",{className:"row",children:[Object(N.jsxs)("div",{className:"col-md-4",children:[Object(N.jsx)($t,{t:o}),Object(N.jsx)(Rt,{t:o,records:r,sports:n,user:c})]}),Object(N.jsxs)("div",{className:"col-md-8",children:[Object(N.jsx)(Ft,{weekm:c.weekm}),i.length>0?i.map((function(e){return Object(N.jsx)(Qt,{workout:e,sports:n,t:o,user:c},e.id)})):Object(N.jsx)(jt,{t:o}),!l&&Object(N.jsx)("input",{type:"submit",className:"btn btn-default btn-md btn-block",value:"Load more workouts",onClick:function(){a(d+1),e.setState({page:d+1})}})]})]})]})]})}}]),a}(n.a.Component),ta=Object(y.a)()(Object(v.c)((function(e){return{workouts:e.workouts.data,message:e.message,records:e.records.data,sports:e.sports.data,user:e.user}}),(function(e){return{loadWorkouts:function(){e(X("getData","workouts",{page:1})),e(X("getData","records"))},loadMoreWorkouts:function(t){e(Fe({page:t}))}}}))(ea));function aa(){return Object(N.jsx)("footer",{className:"footer",children:Object(N.jsxs)("div",{className:"container",children:[Object(N.jsx)("strong",{children:"FitTrackee"})," v","0.4.6"," -"," ",Object(N.jsx)("a",{href:"https://github.com/SamR1/FitTrackee",target:"_blank",rel:"noopener noreferrer",children:"source code"})," ","under"," ",Object(N.jsx)("a",{href:"https://choosealicense.com/licenses/gpl-3.0/",target:"_blank",rel:"noopener noreferrer",children:"GPLv3"})," ","license -"," ",Object(N.jsx)("a",{href:"https://samr1.github.io/FitTrackee/",target:"_blank",rel:"noopener noreferrer",children:"documentation"})]})})}var sa,ra,na,oa,ca,ia,la,da,ua,ma,ja,pa,ha,ba=function(e){Object(x.a)(a,e);var t=Object(g.a)(a);function a(){return Object(f.a)(this,a),t.apply(this,arguments)}return Object(O.a)(a,[{key:"componentDidMount",value:function(){this.props.UserLogout()}},{key:"render",value:function(){return Object(N.jsx)("div",{className:"container dashboard",children:Object(N.jsxs)("div",{className:"row",children:[Object(N.jsx)("div",{className:"col-2"}),Object(N.jsx)("div",{className:"card col-8",children:Object(N.jsx)("div",{className:"card-body",children:Object(N.jsx)("div",{className:"text-center",children:Object(N.jsxs)(pe.a,{i18nKey:"user:loggedOut",children:["You are now logged out. Click ",Object(N.jsx)(ae.a,{to:"/login",children:"here"})," to log back in."]})})})}),Object(N.jsx)("div",{className:"col-2"})]})})}}]),a}(n.a.Component),fa=Object(v.c)((function(e){return{user:e.user}}),(function(e){return{UserLogout:function(){e({type:"LOGOUT"})}}}))(ba);function Oa(){return(Oa=Object.assign||function(e){for(var t=1;t=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(s=0;s=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}function ga(e,t){var a=e.title,s=e.titleId,n=xa(e,["title","titleId"]);return r.createElement("svg",Oa({id:"Capa_1",enableBackground:"new 0 0 512 512",height:512,viewBox:"0 0 512 512",width:512,xmlns:"http://www.w3.org/2000/svg",ref:t,"aria-labelledby":s},n),a?r.createElement("title",{id:s},a):null,sa||(sa=r.createElement("path",{d:"m466.916 27.803h-421.832c-24.859 0-45.084 20.225-45.084 45.084v366.226c0 24.859 20.225 45.084 45.084 45.084h421.832c24.859 0 45.084-20.225 45.084-45.084v-366.226c0-24.859-20.225-45.084-45.084-45.084z",fill:"#f0f9ff"})),ra||(ra=r.createElement("path",{d:"m198.58 188.334-181.344-150.862c-7.75 6.107-13.456 14.691-15.905 24.554l164.142 136.551h33.102z",fill:"#f40055"})),na||(na=r.createElement("path",{d:"m313.425 198.576h33.93l163.447-135.973c-2.325-9.923-7.93-18.592-15.613-24.796l-181.764 151.211z",fill:"#c20044"})),oa||(oa=r.createElement("path",{d:"m165.472 313.425-164.141 136.549c2.449 9.863 8.155 18.447 15.905 24.553l181.344-150.861-.005-10.241z",fill:"#f40055"})),ca||(ca=r.createElement("path",{d:"m313.425 313.425v9.557l181.765 151.211c7.683-6.204 13.288-14.874 15.613-24.796l-163.446-135.971z",fill:"#c20044"})),ia||(ia=r.createElement("path",{d:"m53.273 27.803 145.302 120.879v-120.879z",fill:"#406bd4"})),la||(la=r.createElement("path",{d:"m313.425 150.571v-122.768h148.082z",fill:"#3257b0"})),da||(da=r.createElement("path",{d:"m394.732 198.575 117.268-97.556v97.556z",fill:"#3257b0"})),ua||(ua=r.createElement("g",{fill:"#406bd4"},r.createElement("path",{d:"m0 99.317v99.258h119.313z"}),r.createElement("path",{d:"m0 313.425v97.699l117.44-97.699z"}),r.createElement("path",{d:"m50.49 484.197 148.085-122.676v122.676z"}))),ma||(ma=r.createElement("path",{d:"m313.425 484.197v-124.139l149.221 124.139z",fill:"#3257b0"})),ja||(ja=r.createElement("path",{d:"m512 409.423-115.395-95.998h115.395z",fill:"#3257b0"})),pa||(pa=r.createElement("path",{d:"m512 222.142h-222.142v-194.339h-67.716v194.339h-222.142v67.716h222.142v194.339h67.716v-194.339h222.142z",fill:"#f40055"})),ha||(ha=r.createElement("path",{d:"m289.858 222.142v-194.339h-33.858v456.394h33.858v-194.339h222.142v-67.716z",fill:"#c20044"})))}var va,ka,wa,ya,Na=r.forwardRef(ga);a.p;function _a(){return(_a=Object.assign||function(e){for(var t=1;t=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(s=0;s=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}function Da(e,t){var a=e.title,s=e.titleId,n=Sa(e,["title","titleId"]);return r.createElement("svg",_a({id:"Capa_1",enableBackground:"new 0 0 512 512",height:512,viewBox:"0 0 512 512",width:512,xmlns:"http://www.w3.org/2000/svg",ref:t,"aria-labelledby":s},n),a?r.createElement("title",{id:s},a):null,va||(va=r.createElement("path",{d:"m173.899 31.804h-8.707l-4.397-4h-115.711c-24.859-.001-45.084 20.224-45.084 45.083v366.226c0 24.859 20.225 45.084 45.084 45.084h115.711l6.348-4h6.755v-448.393z",fill:"#406bd4"})),ka||(ka=r.createElement("path",{d:"m466.916 27.803h-115.711l-4.523 4h-5.141v448.393h4.141l5.523 4h115.711c24.859 0 45.084-20.225 45.084-45.084v-366.225c0-24.859-20.225-45.084-45.084-45.084z",fill:"#c20044"})),wa||(wa=r.createElement("path",{d:"m160.795 27.803h190.409v456.394h-190.409z",fill:"#f0f9ff"})),ya||(ya=r.createElement("path",{d:"m256 27.803h95.205v456.394h-95.205z",fill:"#cee5f5"})))}var Ca,Ea,Aa,Ma,Ta,Pa,za,Fa=r.forwardRef(Da),Ra=(a.p,[{name:"en",selected:!0,flag:Object(N.jsx)(Na,{})},{name:"fr",selected:!1,flag:Object(N.jsx)(Fa,{})}]),La=function(e){Object(x.a)(a,e);var t=Object(g.a)(a);function a(e){var s;return Object(f.a)(this,a),(s=t.call(this,e)).state={isOpen:!1},s}return Object(O.a)(a,[{key:"toggleDropdown",value:function(){this.setState((function(e){return{isOpen:!e.isOpen}}))}},{key:"render",value:function(){var e=this,t=this.state.isOpen,a=this.props,s=a.language,r=a.onUpdateLanguage;return Object(N.jsx)("div",{className:"dropdown-wrapper",onClick:function(){return e.toggleDropdown()},children:Object(N.jsx)("ul",{className:"dropdown-list i18n-flag",children:Ra.filter((function(e){return t?e:e.name===s})).map((function(e){return Object(N.jsxs)("li",{className:"dropdown-item".concat(e.name===s&&t?" dropdown-item-selected":""),onClick:function(){return r(e.name,s)},children:[e.flag," ",e.name]},e.name)}))})})}}]),a}(r.Component),Ua=Object(v.c)((function(e){return{language:e.language}}),(function(e){return{onUpdateLanguage:function(t,a){t!==a&&e($(t))}}}))(La),Ia=function(e){Object(x.a)(a,e);var t=Object(g.a)(a);function a(){return Object(f.a)(this,a),t.apply(this,arguments)}return Object(O.a)(a,[{key:"render",value:function(){var e=this.props,t=e.admin,a=e.isAuthenticated,s=e.picture,r=e.t,n=e.username;return Object(N.jsx)("header",{children:Object(N.jsx)("nav",{className:"navbar navbar-expand-lg navbar-light bg-light",children:Object(N.jsxs)("div",{className:"container",children:[Object(N.jsx)("span",{className:"navbar-brand",children:"FitTrackee"}),Object(N.jsx)("button",{className:"navbar-toggler",type:"button","data-toggle":"collapse","data-target":"#navbarSupportedContent","aria-controls":"navbarSupportedContent","aria-expanded":"false","aria-label":"Toggle navigation",children:Object(N.jsx)("span",{className:"navbar-toggler-icon"})}),Object(N.jsxs)("div",{className:"collapse navbar-collapse",id:"navbarSupportedContent",children:[Object(N.jsxs)("ul",{className:"navbar-nav mr-auto",children:[Object(N.jsx)("li",{className:"nav-item",children:Object(N.jsx)(ae.a,{className:"nav-link",to:{pathname:"/"},children:r("common:Dashboard")})}),a&&Object(N.jsx)("li",{className:"nav-item",children:Object(N.jsx)(ae.a,{className:"nav-link",to:{pathname:"/workouts/history"},children:r("Workouts")})}),a&&Object(N.jsx)("li",{className:"nav-item",children:Object(N.jsx)(ae.a,{className:"nav-link",to:{pathname:"/workouts/statistics"},children:r("common:Statistics")})}),t&&Object(N.jsx)("li",{className:"nav-item",children:Object(N.jsx)(ae.a,{className:"nav-link",to:{pathname:"/admin"},children:"Admin"})}),a&&Object(N.jsx)("li",{className:"nav-item",children:Object(N.jsx)(ae.a,{className:"nav-link",to:{pathname:"/workouts/add"},children:Object(N.jsx)("strong",{children:r("common:Add workout")})})})]}),Object(N.jsxs)("ul",{className:"navbar-nav flex-row ml-md-auto d-none d-md-flex",children:[!a&&Object(N.jsx)("li",{className:"nav-item",children:Object(N.jsx)(ae.a,{className:"nav-link",to:{pathname:"/register"},children:r("user:Register")})}),!a&&Object(N.jsx)("li",{className:"nav-item",children:Object(N.jsx)(ae.a,{className:"nav-link",to:{pathname:"/login"},children:r("user:Login")})}),a&&Object(N.jsxs)(N.Fragment,{children:[!0===s?Object(N.jsx)("img",{alt:"Avatar",src:"".concat(T,"users/").concat(n,"/picture?").concat(Date.now()),className:"img-fluid App-nav-profile-img"}):Object(N.jsx)("i",{className:"fa fa-user-circle-o fa-2x no-picture","aria-hidden":"true"}),Object(N.jsx)("li",{className:"nav-item",children:Object(N.jsx)(ae.a,{className:"nav-link",to:{pathname:"/profile"},children:n})}),Object(N.jsx)("li",{className:"nav-item",children:Object(N.jsx)(ae.a,{className:"nav-link",to:{pathname:"/logout"},children:r("user:Logout")})})]}),Object(N.jsx)("li",{children:Object(N.jsx)(Ua,{})})]})]})]})})})}}]),a}(n.a.PureComponent),Wa=Object(y.a)()(Object(v.c)((function(e){var t=e.user;return{admin:t.admin,isAuthenticated:t.isAuthenticated,picture:t.picture,username:t.username}}))(Ia));function Ha(){return(Ha=Object.assign||function(e){for(var t=1;t=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(s=0;s=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}function Ba(e,t){var a=e.title,s=e.titleId,n=qa(e,["title","titleId"]);return r.createElement("svg",Ha({id:"Layer_1",xmlns:"http://www.w3.org/2000/svg",xmlnsXlink:"http://www.w3.org/1999/xlink",x:"0px",y:"0px",viewBox:"0 0 512.001 512.001",style:{enableBackground:"new 0 0 512.001 512.001"},xmlSpace:"preserve",ref:t,"aria-labelledby":s},n),a?r.createElement("title",{id:s},a):null,Ca||(Ca=r.createElement("g",null,r.createElement("g",null,r.createElement("path",{d:"M468.683,287.265h-69.07c-4.147,0-7.508,3.361-7.508,7.508c0,4.147,3.361,7.508,7.508,7.508h69.07 c4.147,0,7.508-3.361,7.508-7.508C476.191,290.626,472.83,287.265,468.683,287.265z"})))),Ea||(Ea=r.createElement("g",null,r.createElement("g",null,r.createElement("path",{d:"M105.012,268.377L85.781,256l19.231-12.376c3.487-2.243,4.495-6.888,2.251-10.376c-2.244-3.486-6.888-4.497-10.376-2.25 l-17.471,11.243v-20.776c0-4.147-3.361-7.508-7.508-7.508c-4.147,0-7.508,3.361-7.508,7.508v20.775l-17.47-11.243 c-3.486-2.245-8.132-1.238-10.376,2.25c-2.245,3.487-1.237,8.133,2.25,10.376L58.034,256l-19.231,12.376 c-3.487,2.244-4.495,6.889-2.25,10.376c1.435,2.23,3.852,3.446,6.32,3.446c1.391,0,2.799-0.386,4.056-1.196l17.47-11.243v20.775 c0,4.147,3.361,7.508,7.508,7.508c4.147,0,7.508-3.361,7.508-7.508V269.76l17.471,11.243c1.257,0.809,2.664,1.196,4.056,1.196 c2.467,0,4.885-1.216,6.32-3.446C109.507,275.266,108.499,270.62,105.012,268.377z"})))),Aa||(Aa=r.createElement("g",null,r.createElement("g",null,r.createElement("path",{d:"M194.441,268.377L175.21,256l19.231-12.376c3.487-2.244,4.495-6.889,2.25-10.376c-2.245-3.486-6.888-4.497-10.376-2.25 l-17.47,11.243v-20.775c0-4.147-3.361-7.508-7.508-7.508c-4.147,0-7.508,3.361-7.508,7.508v20.776l-17.471-11.243 c-3.487-2.245-8.133-1.238-10.376,2.25c-2.245,3.487-1.237,8.133,2.25,10.376L147.463,256l-19.231,12.376 c-3.487,2.244-4.495,6.889-2.25,10.376c1.435,2.23,3.852,3.446,6.32,3.446c1.391,0,2.799-0.386,4.056-1.196l17.471-11.243v20.776 c0,4.147,3.361,7.508,7.508,7.508c4.147,0,7.508-3.361,7.508-7.508V269.76l17.47,11.243c1.257,0.809,2.664,1.196,4.056,1.196 c2.467,0,4.885-1.216,6.32-3.446C198.936,275.266,197.928,270.62,194.441,268.377z"})))),Ma||(Ma=r.createElement("g",null,r.createElement("g",null,r.createElement("path",{d:"M283.871,268.377L264.64,256l19.231-12.376c3.487-2.243,4.495-6.888,2.251-10.376c-2.245-3.486-6.888-4.497-10.376-2.25 l-17.471,11.243v-20.775c0-4.147-3.361-7.508-7.508-7.508c-4.147,0-7.508,3.361-7.508,7.508v20.775l-17.471-11.243 c-3.486-2.245-8.134-1.238-10.376,2.25c-2.245,3.487-1.237,8.133,2.25,10.376L236.892,256l-19.231,12.376 c-3.487,2.244-4.495,6.889-2.25,10.376c1.435,2.23,3.852,3.446,6.32,3.446c1.391,0,2.799-0.386,4.056-1.196l17.471-11.243v20.775 c0,4.147,3.361,7.508,7.508,7.508c4.147,0,7.508-3.361,7.508-7.508V269.76l17.471,11.243c1.257,0.809,2.664,1.196,4.056,1.196 c2.467,0,4.886-1.216,6.32-3.446C288.366,275.266,287.358,270.62,283.871,268.377z"})))),Ta||(Ta=r.createElement("g",null,r.createElement("g",null,r.createElement("path",{d:"M373.3,268.377L354.069,256l19.231-12.376c3.487-2.244,4.495-6.889,2.25-10.376c-2.244-3.486-6.888-4.497-10.376-2.25 l-17.471,11.243v-20.776c0-4.147-3.361-7.508-7.508-7.508c-4.147,0-7.508,3.361-7.508,7.508v20.775l-17.47-11.243 c-3.486-2.245-8.132-1.238-10.376,2.25c-2.245,3.487-1.237,8.133,2.25,10.376L326.322,256l-19.231,12.376 c-3.487,2.244-4.495,6.889-2.25,10.376c1.435,2.23,3.852,3.446,6.32,3.446c1.391,0,2.799-0.386,4.056-1.196l17.47-11.243v20.776 c0,4.147,3.361,7.508,7.508,7.508c4.147,0,7.508-3.361,7.508-7.508V269.76l17.471,11.243c1.257,0.809,2.664,1.196,4.056,1.196 c2.467,0,4.885-1.216,6.32-3.446C377.795,275.266,376.787,270.62,373.3,268.377z"})))),Pa||(Pa=r.createElement("g",null,r.createElement("g",null,r.createElement("path",{d:"M271.792,330.359H15.016V181.642h93.1c4.147,0,7.508-3.361,7.508-7.508c0-4.147-3.361-7.508-7.508-7.508H12.513 C5.613,166.626,0,172.24,0,179.14v153.722c0,6.9,5.613,12.513,12.513,12.513h259.278c4.147,0,7.508-3.361,7.508-7.508 C279.299,333.72,275.939,330.359,271.792,330.359z"})))),za||(za=r.createElement("g",null,r.createElement("g",null,r.createElement("path",{d:"M499.487,166.626H162.174c-4.147,0-7.508,3.361-7.508,7.508c0,4.147,3.361,7.508,7.508,7.508h334.811v148.716H323.848 c-4.147,0-7.508,3.361-7.508,7.508c0,4.147,3.361,7.508,7.508,7.508h175.64c6.9,0,12.513-5.613,12.513-12.513V179.14 C512.001,172.24,506.387,166.626,499.487,166.626z"})))))}var Ga,Va=r.forwardRef(Ba);a.p;function Ja(){return(Ja=Object.assign||function(e){for(var t=1;t=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(s=0;s=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}function Ya(e,t){var a=e.title,s=e.titleId,n=Ka(e,["title","titleId"]);return r.createElement("svg",Ja({id:"Capa_1",xmlns:"http://www.w3.org/2000/svg",xmlnsXlink:"http://www.w3.org/1999/xlink",x:"0px",y:"0px",viewBox:"0 0 345.834 345.834",style:{enableBackground:"new 0 0 345.834 345.834"},xmlSpace:"preserve",ref:t,"aria-labelledby":s},n),a?r.createElement("title",{id:s},a):null,Ga||(Ga=r.createElement("g",null,r.createElement("path",{d:"M339.798,260.429c0.13-0.026,0.257-0.061,0.385-0.094c0.109-0.028,0.219-0.051,0.326-0.084 c0.125-0.038,0.247-0.085,0.369-0.129c0.108-0.039,0.217-0.074,0.324-0.119c0.115-0.048,0.226-0.104,0.338-0.157 c0.109-0.052,0.22-0.1,0.327-0.158c0.107-0.057,0.208-0.122,0.312-0.184c0.107-0.064,0.215-0.124,0.319-0.194 c0.111-0.074,0.214-0.156,0.321-0.236c0.09-0.067,0.182-0.13,0.27-0.202c0.162-0.133,0.316-0.275,0.466-0.421 c0.027-0.026,0.056-0.048,0.083-0.075c0.028-0.028,0.052-0.059,0.079-0.088c0.144-0.148,0.284-0.3,0.416-0.46 c0.077-0.094,0.144-0.192,0.216-0.289c0.074-0.1,0.152-0.197,0.221-0.301c0.074-0.111,0.139-0.226,0.207-0.34 c0.057-0.096,0.118-0.19,0.171-0.289c0.062-0.115,0.114-0.234,0.169-0.351c0.049-0.104,0.101-0.207,0.146-0.314 c0.048-0.115,0.086-0.232,0.128-0.349c0.041-0.114,0.085-0.227,0.12-0.343c0.036-0.118,0.062-0.238,0.092-0.358 c0.029-0.118,0.063-0.234,0.086-0.353c0.028-0.141,0.045-0.283,0.065-0.425c0.014-0.1,0.033-0.199,0.043-0.3 c0.025-0.249,0.038-0.498,0.038-0.748V92.76c0-4.143-3.357-7.5-7.5-7.5h-236.25c-0.066,0-0.13,0.008-0.196,0.01 c-0.143,0.004-0.285,0.01-0.427,0.022c-0.113,0.009-0.225,0.022-0.337,0.037c-0.128,0.016-0.255,0.035-0.382,0.058 c-0.119,0.021-0.237,0.046-0.354,0.073c-0.119,0.028-0.238,0.058-0.356,0.092c-0.117,0.033-0.232,0.069-0.346,0.107 c-0.117,0.04-0.234,0.082-0.349,0.128c-0.109,0.043-0.216,0.087-0.322,0.135c-0.118,0.053-0.235,0.11-0.351,0.169 c-0.099,0.051-0.196,0.103-0.292,0.158c-0.116,0.066-0.23,0.136-0.343,0.208c-0.093,0.06-0.184,0.122-0.274,0.185 c-0.106,0.075-0.211,0.153-0.314,0.235c-0.094,0.075-0.186,0.152-0.277,0.231c-0.09,0.079-0.179,0.158-0.266,0.242 c-0.099,0.095-0.194,0.194-0.288,0.294c-0.047,0.05-0.097,0.094-0.142,0.145c-0.027,0.03-0.048,0.063-0.074,0.093 c-0.094,0.109-0.182,0.223-0.27,0.338c-0.064,0.084-0.13,0.168-0.19,0.254c-0.078,0.112-0.15,0.227-0.222,0.343 c-0.059,0.095-0.12,0.189-0.174,0.286c-0.063,0.112-0.118,0.227-0.175,0.342c-0.052,0.105-0.106,0.21-0.153,0.317 c-0.049,0.113-0.092,0.23-0.135,0.345c-0.043,0.113-0.087,0.225-0.124,0.339c-0.037,0.115-0.067,0.232-0.099,0.349 c-0.032,0.12-0.066,0.239-0.093,0.36c-0.025,0.113-0.042,0.228-0.062,0.342c-0.022,0.13-0.044,0.26-0.06,0.39 c-0.013,0.108-0.019,0.218-0.027,0.328c-0.01,0.14-0.019,0.28-0.021,0.421c-0.001,0.041-0.006,0.081-0.006,0.122v46.252 c0,4.143,3.357,7.5,7.5,7.5s7.5-3.357,7.5-7.5v-29.595l66.681,59.037c-0.348,0.245-0.683,0.516-0.995,0.827l-65.687,65.687v-49.288 c0-4.143-3.357-7.5-7.5-7.5s-7.5,3.357-7.5,7.5v9.164h-38.75c-4.143,0-7.5,3.357-7.5,7.5s3.357,7.5,7.5,7.5h38.75v43.231 c0,4.143,3.357,7.5,7.5,7.5h236.25c0.247,0,0.494-0.013,0.74-0.037c0.115-0.011,0.226-0.033,0.339-0.049 C339.542,260.469,339.67,260.454,339.798,260.429z M330.834,234.967l-65.688-65.687c-0.042-0.042-0.087-0.077-0.13-0.117 l49.383-41.897c3.158-2.68,3.546-7.412,0.866-10.571c-2.678-3.157-7.41-3.547-10.571-0.866l-84.381,71.59l-98.444-87.158h208.965 V234.967z M185.878,179.888c0.535-0.535,0.969-1.131,1.308-1.765l28.051,24.835c1.418,1.255,3.194,1.885,4.972,1.885 c1.726,0,3.451-0.593,4.853-1.781l28.587-24.254c0.26,0.38,0.553,0.743,0.89,1.08l65.687,65.687H120.191L185.878,179.888z"}),r.createElement("path",{d:"M7.5,170.676h126.667c4.143,0,7.5-3.357,7.5-7.5s-3.357-7.5-7.5-7.5H7.5c-4.143,0-7.5,3.357-7.5,7.5 S3.357,170.676,7.5,170.676z"}),r.createElement("path",{d:"M20.625,129.345H77.5c4.143,0,7.5-3.357,7.5-7.5s-3.357-7.5-7.5-7.5H20.625c-4.143,0-7.5,3.357-7.5,7.5 S16.482,129.345,20.625,129.345z"}),r.createElement("path",{d:"M62.5,226.51h-55c-4.143,0-7.5,3.357-7.5,7.5s3.357,7.5,7.5,7.5h55c4.143,0,7.5-3.357,7.5-7.5S66.643,226.51,62.5,226.51z"}))))}var Xa=r.forwardRef(Ya);a.p;function $a(e){var t=Object(ue.a)().t,a=e.action;return Object(N.jsx)("div",{className:"container dashboard",children:Object(N.jsxs)("div",{className:"row",children:[Object(N.jsx)("div",{className:"col-2"}),Object(N.jsx)("div",{className:"card col-8",children:Object(N.jsx)("div",{className:"card-body",children:Object(N.jsxs)("div",{className:"text-center ",children:["sent"===a&&Object(N.jsxs)(N.Fragment,{children:[Object(N.jsx)("div",{className:"svg-icon",children:Object(N.jsx)(Xa,{})}),t("user:Check your email. If your address is in our database, you'll received an email with a link to reset your password.")]}),"updated"===a&&Object(N.jsxs)(N.Fragment,{children:[Object(N.jsx)("div",{className:"svg-icon",children:Object(N.jsx)(Va,{})}),Object(N.jsxs)(pe.a,{i18nKey:"user:updatedPasswordText",children:["Your password have been updated. Click",Object(N.jsx)(ae.a,{to:"/login",children:"here"})," to log in."]})]})]})})}),Object(N.jsx)("div",{className:"col-2"})]})})}var Za=a(244),Qa=a.n(Za),es=function(e){Object(x.a)(a,e);var t=Object(g.a)(a);function a(e,s){var r;return Object(f.a)(this,a),(r=t.call(this,e,s)).state={formData:{},displayModal:!1},r}return Object(O.a)(a,[{key:"componentDidMount",value:function(){this.initForm()}},{key:"componentDidUpdate",value:function(e){e.user!==this.props.user&&this.initForm()}},{key:"initForm",value:function(){var e=this.props.user,t={};Object.keys(e).map((function(a){return null===e[a]?t[a]="":t[a]="birth_date"===a?Object(D.a)(new Date(e[a]),"yyyy-MM-DD"):e[a]})),this.setState({formData:t})}},{key:"handleFormChange",value:function(e){var t=this.state.formData;"weekm"===e.target.name?t.weekm="Monday"===e.target.value:t[e.target.name]=e.target.value,this.setState(t)}},{key:"displayModal",value:function(e){this.setState((function(t){return Object(S.a)(Object(S.a)({},t),{},{displayModal:e})}))}},{key:"render",value:function(){var e=this,t=this.props,a=t.message,s=t.onDeleteUser,r=t.onHandleProfileFormSubmit,n=t.t,o=t.user,c=this.state,i=c.displayModal,l=c.formData;return Object(N.jsxs)("div",{children:[Object(N.jsx)(w.a,{children:Object(N.jsxs)("title",{children:["FitTrackee - ",n("user:Profile Edition")]})}),l.isAuthenticated&&Object(N.jsxs)("div",{className:"container",children:[i&&Object(N.jsx)(He,{title:n("common:Confirmation"),text:n("user:Are you sure you want to delete your account? All data will be deleted, this cannot be undone."),confirm:function(){s(o.username),e.displayModal(!1)},close:function(){return e.displayModal(!1)}}),Object(N.jsx)("h1",{className:"page-title",children:n("user:Profile Edition")}),Object(N.jsxs)("div",{className:"row",children:[Object(N.jsx)("div",{className:"col-md-2"}),Object(N.jsx)("div",{className:"col-md-8",children:Object(N.jsxs)("div",{className:"card",children:[Object(N.jsx)("div",{className:"card-header",children:o.username}),Object(N.jsx)("div",{className:"card-body",children:Object(N.jsx)("div",{className:"row",children:Object(N.jsxs)("div",{className:"col-md-12",children:[Object(N.jsxs)("form",{onSubmit:function(e){e.preventDefault(),r(l)},children:[Object(N.jsx)("div",{className:"form-group",children:Object(N.jsxs)("label",{children:[n("user:Email"),":",Object(N.jsx)("input",{name:"email",className:"form-control input-lg",type:"text",value:l.email,readOnly:!0})]})}),Object(N.jsx)("div",{className:"form-group",children:Object(N.jsxs)("label",{children:[n("user:Registration Date"),":",Object(N.jsx)("input",{name:"createdAt",className:"form-control input-lg",type:"text",value:l.created_at,disabled:!0})]})}),Object(N.jsx)("div",{className:"form-group",children:Object(N.jsxs)("label",{children:[n("user:Password"),":",Object(N.jsx)("input",{name:"password",className:"form-control input-lg",type:"password",onChange:function(t){return e.handleFormChange(t)}})]})}),Object(N.jsx)("div",{className:"form-group",children:Object(N.jsxs)("label",{children:[n("user:Password Confirmation"),":",Object(N.jsx)("input",{name:"password_conf",className:"form-control input-lg",type:"password",onChange:function(t){return e.handleFormChange(t)}})]})}),Object(N.jsx)("hr",{}),Object(N.jsx)("div",{className:"form-group",children:Object(N.jsxs)("label",{children:[n("user:First Name"),":",Object(N.jsx)("input",{name:"first_name",className:"form-control input-lg",type:"text",value:l.first_name,onChange:function(t){return e.handleFormChange(t)}})]})}),Object(N.jsx)("div",{className:"form-group",children:Object(N.jsxs)("label",{children:[n("user:Last Name"),":",Object(N.jsx)("input",{name:"last_name",className:"form-control input-lg",type:"text",value:l.last_name,onChange:function(t){return e.handleFormChange(t)}})]})}),Object(N.jsx)("div",{className:"form-group",children:Object(N.jsxs)("label",{children:[n("user:Birth Date"),Object(N.jsx)("input",{name:"birth_date",className:"form-control input-lg",type:"date",value:l.birth_date,onChange:function(t){return e.handleFormChange(t)}})]})}),Object(N.jsx)("div",{className:"form-group",children:Object(N.jsxs)("label",{children:[n("user:Location"),":",Object(N.jsx)("input",{name:"location",className:"form-control input-lg",type:"text",value:l.location,onChange:function(t){return e.handleFormChange(t)}})]})}),Object(N.jsx)("div",{className:"form-group",children:Object(N.jsxs)("label",{children:[n("user:Bio"),":",Object(N.jsx)("textarea",{name:"bio",className:"form-control input-lg",maxLength:"200",value:l.bio,onChange:function(t){return e.handleFormChange(t)}})]})}),Object(N.jsx)("div",{className:"form-group",children:Object(N.jsxs)("label",{children:[n("user:Language"),":",Object(N.jsx)("select",{name:"language",className:"form-control input-lg",value:l.language,onChange:function(t){return e.handleFormChange(t)},children:Ra.map((function(e){return Object(N.jsx)("option",{value:e.name,children:e.name},e.name)}))})]})}),Object(N.jsx)("div",{className:"form-group",children:Object(N.jsxs)("label",{children:[n("user:Timezone"),":",Object(N.jsx)(Qa.a,{className:"form-control timezone-custom",onChange:function(t){var a={target:{name:"timezone",value:t||"Europe/Paris"}};e.handleFormChange(a)},value:l.timezone})]})}),Object(N.jsx)("div",{className:"form-group",children:Object(N.jsxs)("label",{children:[n("user:First day of week"),":",Object(N.jsxs)("select",{name:"weekm",className:"form-control input-lg",value:l.weekm?"Monday":"Sunday",onChange:function(t){return e.handleFormChange(t)},children:[Object(N.jsx)("option",{value:"Sunday",children:n("user:Sunday")}),Object(N.jsx)("option",{value:"Monday",children:n("user:Monday")})]})]})}),Object(N.jsx)("button",{type:"submit",className:"btn btn-primary",children:n("common:Submit")}),Object(N.jsx)("button",{className:"btn btn-danger",onClick:function(t){t.preventDefault(),e.displayModal(!0)},children:n("user:Delete my account")}),Object(N.jsx)("button",{type:"submit",className:"btn btn-secondary",onClick:function(){return Ws.push("/profile")},children:n("common:Cancel")})]}),Object(N.jsx)(_,{message:a,t:n})]})})})]})}),Object(N.jsx)("div",{className:"col-md-2"})]})]})]})}}]),a}(n.a.Component),ts=Object(y.a)()(Object(v.c)((function(e){return{location:e.router.location,message:e.message,user:e.user}}),(function(e){return{onDeleteUser:function(t){e(Me(t))},onHandleProfileFormSubmit:function(t){e(function(e){return function(t){return!e.password===e.password_conf?t(De("Password and password confirmation don't match.")):(delete e.id,q.postData("auth/profile/edit",e).then((function(e){if("success"===e.status)return t(Ee()),Ws.push("/profile");t(De(e.message))})).catch((function(e){throw e})))}}(t))}}}))(es)),as=a(910),ss=a(911),rs=a(912),ns=a(245),os=["week","month","year"],cs=function(e){Object(x.a)(a,e);var t=Object(g.a)(a);function a(e,s){var r;Object(f.a)(this,a),r=t.call(this,e,s);var n=new Date;return r.state={displayedSports:e.sports.map((function(e){return e.id})),statsParams:{start:Object(vt.a)(Object(Et.a)(n,11)),end:Object(kt.a)(n),duration:"month",type:"by_time"}},r}return Object(O.a)(a,[{key:"componentDidUpdate",value:function(e){this.props.sports!==e.sports&&this.updateDisplayedSports()}},{key:"updateDisplayedSports",value:function(){var e=this.props.sports;this.setState({displayedSports:e.map((function(e){return e.id}))})}},{key:"handleOnChangeDuration",value:function(e){var t=e.target.name,a=new Date,s="year"===t?Object(Ut.a)(Object(as.a)(a,9)):"week"===t?Object(vt.a)(Object(Et.a)(a,2)):Object(vt.a)(Object(Et.a)(a,11)),r="year"===t?Object(ss.a)(a):"week"===t?Object(yt.a)(a):Object(kt.a)(a);this.setState({statsParams:{duration:t,end:r,start:s,type:"by_time"}})}},{key:"handleOnChangeSports",value:function(e){var t=this.state.displayedSports;t.includes(e)?this.setState({displayedSports:t.filter((function(t){return t!==e}))}):this.setState({displayedSports:t.concat([e])})}},{key:"handleOnClickArrows",value:function(e){var t,a,s=this.state.statsParams,r=s.start,n=s.end,o=s.duration;e?(t="year"===o?Object(Ut.a)(Object(as.a)(r,1)):"week"===o?Object(wt.a)(Object(rs.a)(r,1)):Object(vt.a)(Object(Et.a)(r,1)),a="year"===o?Object(ss.a)(Object(as.a)(n,1)):"week"===o?Object(yt.a)(Object(rs.a)(n,1)):Object(kt.a)(Object(Et.a)(n,1))):(t="year"===o?Object(Ut.a)(Object(Lt.a)(r,1)):"week"===o?Object(wt.a)(Object(ns.a)(r,1)):Object(vt.a)(Object(Ct.a)(r,1)),a="year"===o?Object(ss.a)(Object(Lt.a)(n,1)):"week"===o?Object(yt.a)(Object(ns.a)(n,1)):Object(kt.a)(Object(Ct.a)(n,1))),this.setState({statsParams:{duration:o,end:a,start:t,type:"by_time"}})}},{key:"render",value:function(){var e=this,t=this.state,a=t.displayedSports,s=t.statsParams,r=this.props,n=r.sports,o=r.t,c=r.user,i=Ne(n.filter((function(e){return c.sports_list.includes(e.id)})),o);return Object(N.jsxs)(N.Fragment,{children:[Object(N.jsx)(w.a,{children:Object(N.jsxs)("title",{children:["FitTrackee - ",o("statistics:Statistics")]})}),Object(N.jsxs)("div",{className:"container dashboard",children:[Object(N.jsxs)("div",{className:"card workout-card",children:[Object(N.jsx)("div",{className:"card-header",children:o("statistics:Statistics")}),Object(N.jsxs)("div",{className:"card-body".concat(0===c.nb_workouts?" stats-disabled":""),children:[Object(N.jsxs)("div",{className:"chart-filters row",children:[Object(N.jsx)("div",{className:"col chart-arrows",children:Object(N.jsx)("p",{className:"text-center",children:Object(N.jsx)("i",{className:"fa fa-chevron-left","aria-hidden":"true",onClick:function(){return e.handleOnClickArrows(!0)}})})}),Object(N.jsx)("div",{className:"col-md-3 time-frames justify-content-around",children:os.map((function(t){return Object(N.jsx)("div",{className:"time-frame",children:Object(N.jsxs)("label",{children:[Object(N.jsx)("input",{type:"radio",id:t,name:t,checked:t===s.duration,onChange:function(t){return e.handleOnChangeDuration(t)}}),Object(N.jsx)("span",{children:o("statistics:".concat(t))})]})},t)}))}),Object(N.jsx)("div",{className:"col chart-arrows",children:Object(N.jsx)("p",{className:"text-center",children:Object(N.jsx)("i",{className:"fa fa-chevron-right","aria-hidden":"true",onClick:function(){return e.handleOnClickArrows(!1)}})})})]}),Object(N.jsx)(Xt,{displayEmpty:!0,displayedSports:a,statsParams:s,t:o}),Object(N.jsx)("div",{className:"row chart-workouts",children:i.map((function(t){return Object(N.jsxs)("label",{className:"col workout-label",children:[Object(N.jsx)("input",{type:"checkbox",checked:a.includes(t.id),name:t.label,onChange:function(){return e.handleOnChangeSports(t.id)}}),Object(N.jsx)("span",{style:{color:xe[t.id-1]},children:" ".concat(t.label)})]},t.id)}))})]})]}),0===c.nb_workouts&&Object(N.jsx)(jt,{t:o})]})]})}}]),a}(n.a.Component),is=Object(y.a)()(Object(v.c)((function(e){return{sports:e.sports.data,user:e.user}}))(cs));function ls(e){var t=Object(ue.a)().t,a="user:".concat(e.formType.charAt(0).toUpperCase()).concat(e.formType.slice(1));return Object(N.jsxs)("div",{children:[Object(N.jsx)(w.a,{children:Object(N.jsxs)("title",{children:["FitTrackee - ",t("user:".concat(e.formType))]})}),Object(N.jsx)("h1",{className:"page-title",children:t(a)}),Object(N.jsx)("div",{className:"container",children:Object(N.jsxs)("div",{className:"row",children:[Object(N.jsx)("div",{className:"col-md-3"}),Object(N.jsxs)("div",{className:"col-md-6",children:[Object(N.jsx)("br",{}),"register"!==e.formType||e.isRegistrationAllowed?Object(N.jsxs)(N.Fragment,{children:[Object(N.jsxs)("form",{onSubmit:function(t){return e.handleUserFormSubmit(t,e.formType)},children:["register"===e.formType&&Object(N.jsx)("div",{className:"form-group",children:Object(N.jsx)("input",{className:"form-control input-lg",name:"username",placeholder:t("user:Enter a username"),required:!0,type:"text",value:e.userForm.username,onChange:e.onHandleFormChange})}),"password reset"!==e.formType&&Object(N.jsx)("div",{className:"form-group",children:Object(N.jsx)("input",{className:"form-control input-lg",name:"email",placeholder:t("user:Enter an email address"),required:!0,type:"email",value:e.userForm.email,onChange:e.onHandleFormChange})}),"reset your password"!==e.formType&&Object(N.jsxs)(N.Fragment,{children:[Object(N.jsx)("div",{className:"form-group",children:Object(N.jsx)("input",{className:"form-control input-lg",name:"password",placeholder:t("user:Enter a password"),required:!0,type:"password",value:e.userForm.password,onChange:e.onHandleFormChange})}),"login"!==e.formType&&Object(N.jsx)("div",{className:"form-group",children:Object(N.jsx)("input",{className:"form-control input-lg",name:"password_conf",placeholder:t("user:Enter the password confirmation"),required:!0,type:"password",value:e.userForm.password_conf,onChange:e.onHandleFormChange})})]}),Object(N.jsx)("input",{type:"submit",className:"btn btn-primary btn-lg btn-block",value:t("Submit")})]}),Object(N.jsx)("p",{className:"password-forget",children:"login"===e.formType&&Object(N.jsx)(ae.a,{to:{pathname:"/password-reset/request"},children:t("user:Forgot password?")})})]}):Object(N.jsxs)("div",{className:"card",children:[Object(N.jsx)("div",{className:"card-body",children:"Registration is disabled."}),Object(N.jsx)("div",{className:"card-body",children:Object(N.jsx)("button",{type:"submit",className:"btn btn-secondary btn-lg btn-block",onClick:function(){return Ws.go(-1)},children:"Back"})})]})]}),Object(N.jsx)("div",{className:"col-md-3"})]})})]})}var ds=function(e){Object(x.a)(a,e);var t=Object(g.a)(a);function a(e,s){var r;return Object(f.a)(this,a),(r=t.call(this,e,s)).state={formData:{username:"",email:"",password:"",password_conf:""}},r}return Object(O.a)(a,[{key:"componentDidUpdate",value:function(e){e.location.pathname!==this.props.location.pathname&&this.emptyForm()}},{key:"emptyForm",value:function(){var e=this.state.formData;Object.keys(e).map((function(t){return e[t]=""})),this.setState(e)}},{key:"onHandleFormChange",value:function(e){var t=this.state.formData;t[e.target.name]=e.target.value,this.setState(t)}},{key:"render",value:function(){var e=this,t=this.props,a=t.formType,s=t.isRegistrationAllowed,r=t.message,n=t.messages,o=t.onHandleUserFormSubmit,c=t.t,i=this.state.formData,l=this.props.location.query.token;return Object(N.jsx)("div",{children:F()||"password reset"===a&&!l?Object(N.jsx)(k.a,{to:"/"}):Object(N.jsxs)("div",{children:[Object(N.jsx)(_,{message:r,messages:n,t:c}),Object(N.jsx)(ls,{isRegistrationAllowed:s,formType:a,userForm:i,onHandleFormChange:function(t){return e.onHandleFormChange(t)},handleUserFormSubmit:function(e){e.preventDefault(),"password reset"===a&&(i.token=l),o(i,a)}})]})})}}]),a}(n.a.Component),us=Object(y.a)()(Object(v.c)((function(e){return{isRegistrationAllowed:e.application.config.is_registration_enabled,location:e.router.location,message:e.message,messages:e.messages}}),(function(e){return{onHandleUserFormSubmit:function(t,a){e(Ae(t,a="password reset"===a?"password/update":"reset your password"===a?"password/reset-request":a))}}}))(ds)),ms=function(e){Object(x.a)(a,e);var t=Object(g.a)(a);function a(e,s){var r;return Object(f.a)(this,a),(r=t.call(this,e,s)).state={displayModal:!1},r}return Object(O.a)(a,[{key:"componentDidMount",value:function(){this.props.loadUser(this.props.match.params.userName)}},{key:"componentDidUpdate",value:function(e){e.match.params.userName!==this.props.match.params.userName&&this.props.loadUser(this.props.match.params.userName)}},{key:"displayModal",value:function(e){this.setState((function(t){return Object(S.a)(Object(S.a)({},t),{},{displayModal:e})}))}},{key:"render",value:function(){var e=this,t=this.props,a=t.t,s=t.currentUser,r=t.onDeleteUser,n=t.users,o=this.state.displayModal,c=Object(he.a)(n,1)[0],i=!!c&&s.username===c.username;return Object(N.jsxs)("div",{children:[o&&Object(N.jsx)(He,{title:a("common:Confirmation"),text:a("user:Are you sure you want to delete this account? All data will be deleted, this cannot be undone."),confirm:function(){r(c.username),e.displayModal(!1)},close:function(){return e.displayModal(!1)}}),c&&Object(N.jsx)(xt,{editable:i,isDeletable:s.admin&&!i,onDeleteUser:r,displayModal:function(t){return e.displayModal(t)},t:a,user:c})]})}}]),a}(n.a.Component),js=Object(y.a)()(Object(v.c)((function(e){return{currentUser:e.user,users:e.users.data}}),(function(e){return{onDeleteUser:function(t){e(Me(t,!0))},loadUser:function(t){e(X("getData","users",{username:t}))}}}))(ms)),ps=function(e){Object(x.a)(a,e);var t=Object(g.a)(a);function a(e){var s;return Object(f.a)(this,a),(s=t.call(this,e)).props=e,s}return Object(O.a)(a,[{key:"componentDidMount",value:function(){this.props.loadAppConfig()}},{key:"render",value:function(){return Object(N.jsxs)("div",{className:"App",children:[Object(N.jsx)(Wa,{}),Object(N.jsxs)(k.d,{children:[Object(N.jsx)(k.b,{exact:!0,path:"/",component:ta}),Object(N.jsx)(k.b,{exact:!0,path:"/register",render:function(){return Object(N.jsx)(us,{formType:"register"})}}),Object(N.jsx)(k.b,{exact:!0,path:"/login",render:function(){return Object(N.jsx)(us,{formType:"login"})}}),Object(N.jsx)(k.b,{exact:!0,path:"/password-reset",render:function(){return Object(N.jsx)(us,{formType:"password reset"})}}),Object(N.jsx)(k.b,{exact:!0,path:"/password-reset/request",render:function(){return Object(N.jsx)(us,{formType:"reset your password"})}}),Object(N.jsx)(k.b,{exact:!0,path:"/password-reset/sent",render:function(){return Object(N.jsx)($a,{action:"sent"})}}),Object(N.jsx)(k.b,{exact:!0,path:"/updated-password",render:function(){return Object(N.jsx)($a,{action:"updated"})}}),Object(N.jsx)(k.b,{exact:!0,path:"/password-reset/sent",component:$a}),Object(N.jsx)(k.b,{exact:!0,path:"/logout",component:fa}),Object(N.jsx)(k.b,{exact:!0,path:"/profile/edit",component:ts}),Object(N.jsx)(k.b,{exact:!0,path:"/profile",component:gt}),Object(N.jsx)(k.b,{exact:!0,path:"/workouts/history",component:Ot}),Object(N.jsx)(k.b,{exact:!0,path:"/workouts/statistics",component:is}),Object(N.jsx)(k.b,{exact:!0,path:"/users/:userName",component:js}),Object(N.jsx)(k.b,{path:"/workouts",component:mt}),Object(N.jsx)(k.b,{path:"/admin",component:je}),Object(N.jsx)(k.b,{component:me})]}),Object(N.jsx)(aa,{})]})}}]),a}(n.a.Component),hs=Object(v.c)((function(){return{}}),(function(e){return{loadAppConfig:function(){e(Q("config"))}}}))(ps),bs=a(85);function fs(e){var t=e.store,a=e.history,s=e.children;return Object(N.jsx)(v.a,{store:t,children:Object(N.jsx)(bs.a,{history:a,children:s})})}var Os=Boolean("localhost"===window.location.hostname||"[::1]"===window.location.hostname||window.location.hostname.match(/^127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/));function xs(e){navigator.serviceWorker.register(e).then((function(e){e.onupdatefound=function(){var t=e.installing;t.onstatechange=function(){"installed"===t.state&&(navigator.serviceWorker.controller?console.log("New content is available; please refresh."):console.log("Content is cached for offline use."))}}})).catch((function(e){console.error("Error during service worker registration:",e)}))}var gs,vs={data:[]},ks={language:"en",message:"",messages:[],user:{isAuthenticated:!1},workouts:Object(S.a)({},vs),application:{statistics:{},config:{gpx_limit_import:null,is_registration_enabled:null,max_single_file_size:null,max_users:null,max_zip_file_size:null,registration:null}},calendarWorkouts:Object(S.a)({},vs),chartData:[],gpx:null,loading:!1,records:Object(S.a)({},vs),sports:Object(S.a)({},vs),statistics:{data:{}},users:Object(S.a)({},vs)},ws=function(e,t,a){return a.target!==t?e:"SET_DATA"===a.type?Object(S.a)(Object(S.a)({},e),{},{data:a.data[a.target]}):"SET_PAGINATED_DATA"===a.type?Object(S.a)(Object(S.a)({},e),{},{data:a.data[a.target],pagination:a.pagination}):e},ys=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:ks.workouts,t=arguments.length>1?arguments[1]:void 0;switch(t.type){case"LOGOUT":return ks.workouts;case"PUSH_WORKOUTS":return Object(S.a)(Object(S.a)({},e),{},{data:e.data.concat(t.workouts)});case"REMOVE_WORKOUT":return Object(S.a)(Object(S.a)({},e),{},{data:e.data.filter((function(e){return e.id!==t.workoutId}))});default:return ws(e,"workouts",t)}},Ns=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:ks.application,t=arguments.length>1?arguments[1]:void 0;return"SET_APP_CONFIG"===t.type?Object(S.a)(Object(S.a)({},e),{},{config:t.data}):"SET_APP_STATS"===t.type?Object(S.a)(Object(S.a)({},e),{},{statistics:t.data}):e},_s=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:ks.calendarWorkouts,t=arguments.length>1?arguments[1]:void 0;switch(t.type){case"LOGOUT":return ks.calendarWorkouts;case"UPDATE_CALENDAR":return Object(S.a)(Object(S.a)({},e),{},{data:t.workouts});default:return ws(e,"calendarWorkouts",t)}},Ss=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:ks.chartData,t=arguments.length>1?arguments[1]:void 0;return"SET_CHART_DATA"===t.type?t.chartData:e},Ds=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:ks.gpx,t=arguments.length>1?arguments[1]:void 0;return"SET_GPX"===t.type?t.gpxContent:e},Cs=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:ks.language,t=arguments.length>1?arguments[1]:void 0;return"SET_LANGUAGE"===t.type?t.language:e},Es=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:ks.loading,t=arguments.length>1?arguments[1]:void 0;return"SET_LOADING"===t.type?t.loading:e},As=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:ks.message,t=arguments.length>1?arguments[1]:void 0;switch(t.type){case"AUTH_ERROR":case"PROFILE_ERROR":case"PROFILE_UPDATE_ERROR":case"PICTURE_ERROR":case"SET_ERROR":return t.message;case"CLEAN_ALL_MESSAGES":case"LOGOUT":case"PROFILE_SUCCESS":case"SET_APP_CONFIG":case"SET_RESULTS":case"@@router/LOCATION_CHANGE":return"";default:return e}},Ms=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:ks.messages,t=arguments.length>1?arguments[1]:void 0;switch(t.type){case"AUTH_ERRORS":case"APP_ERRORS":return t.messages;case"CLEAN_ALL_MESSAGES":case"LOGOUT":case"PROFILE_SUCCESS":case"@@router/LOCATION_CHANGE":return[];default:return e}},Ts=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:ks.records,t=arguments.length>1?arguments[1]:void 0;return"LOGOUT"===t.type?ks.records:ws(e,"records",t)},Ps=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:ks.sports,t=arguments.length>1?arguments[1]:void 0;return"UPDATE_SPORT_DATA"===t.type?Object(S.a)(Object(S.a)({},e),{},{data:e.data.map((function(e){return e.id===t.data.id&&(e.is_active=t.data.is_active),e}))}):ws(e,"sports",t)},zs=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:ks.users,t=arguments.length>1?arguments[1]:void 0;return"UPDATE_USER_DATA"===t.type?Object(S.a)(Object(S.a)({},e),{},{data:e.data.map((function(e){return e.username===t.data.username&&(e.admin=t.data.admin),e}))}):ws(e,"users",t)},Fs=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:ks.user,t=arguments.length>1?arguments[1]:void 0;switch(t.type){case"AUTH_ERROR":case"PROFILE_ERROR":case"LOGOUT":return window.localStorage.removeItem("authToken"),ks.user;case"PROFILE_SUCCESS":return t.profil;default:return e}},Rs=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:ks.statistics,t=arguments.length>1?arguments[1]:void 0;return"LOGOUT"===t.type?ks.statistics:ws(e,"statistics",t)},Ls=["/login","/register","/password-reset","/password-reset/request","/password-reset/sent","/updated-password"],Us=function(e,t){return"string"===typeof e||e instanceof String?e=t:e.pathname=t,e},Is=function(e){return window.localStorage.authToken||Ls.includes(e.pathname)||(e=Us(e,"/login")),window.localStorage.authToken&&Ls.includes(e.pathname)&&(e=Us(e,"/")),e},Ws=((gs=Object(s.a)()).location=Is(gs.location),Object(S.a)(Object(S.a)({},gs),{},{push:function(e){for(var t=arguments.length,a=new Array(t>1?t-1:0),s=1;s1?t-1:0),s=1;sgpx file","Longest duration":"Longest duration","Max. altitude":"Max. altitude","Max. speed":"Max. speed","Min. altitude":"Min. altitude","no folder inside":"no folder inside","files max":"files max","max size":"max size","No data to display":"No data to display","No Map":"No Map","No next workout":"No next workout","No next segment":"No next segment","No notes":"No notes","No previous workout":"No previous workout","No previous segment":"No previous segment","Notes":"Notes","pauses":"pauses","Personal records":"Personal records","See next workout":"See next workout","See next segment":"See next segment","See previous workout":"See previous workout","See previous segment":"See previous segment","segment":"segment","Segments":"Segments","speed":"speed","Start":"Start","Title":"Title","To":"To","total duration":"total duration","with gpx file":"with gpx file","without gpx file":"without gpx file","zipFile":"or zip file containing gpx files"}')},207:function(e){e.exports=JSON.parse('{"Actions":"Actions","Active":"Active","workouts exist":"workouts exist","Add admin rights":"Add admin rights","Add/remove admin rights, delete user account.":"Add/remove admin rights, delete user account.","Administration":"Administration","Application":"Application","Application configuration":"Application configuration","Back":"Back","Disable":"Disable","Enable":"Enable","Enable/disable sports.":"Enable/disable sports.","FitTrackee administration":"FitTrackee administration","id":"id","if 0, no limitation":"if 0, no limitation","Image":"Image","Label":"Label","Max. number of active users":"Max. number of active users","Max. files of zip archive":"Max. files of zip archive","Max. size of uploaded files":"Max. size of uploaded files","Max. size of uploaded files (in Mb)":"Max. size of uploaded files (in Mb)","Max. size of zip archive":"Max. size of zip archive","Max. size of zip archive (in Mb)":"Max. size of zip archive (in Mb)","Registration is currently disabled.":"Registration is currently disabled.","Registration is currently enabled.":"Registration is currently enabled.","Remove admin rights":"Remove admin rights","Sports":"Sports","Update application configuration (maximum number of registered users, maximum files size).":"Update application configuration (maximum number of registered users, maximum files size).","uploads":"uploads","user":"user","Users":"Users","users":"users"}')},208:function(e){e.exports=JSON.parse('{"workouts count":"workouts count","Add workout":"Add workout","admin rights":"admin rights","ascending":"ascending","Back":"Back","Back to home":"Back to home","Cancel":"Cancel","Confirmation":"Confirmation","Dashboard":"Dashboard","descending":"descending","Edit":"Edit","day":"day","days":"days","Next":"Next","No":"No","no":"no","No records.":"No records.","No workouts.":"No workouts.","Page not found":"Page not found","Previous":"Prev","registration date":"registration date","Sort":"Sort","Sort by":"Sort by","Sport":"Sport","sport":"sport","Sports":"Sports","sports":"sports","Statistics":"Statistics","Submit":"Submit","to":"to","user name":"user name","Workout":"Workout","Workouts":"Workouts","workout":"workout","workouts":"workouts","Yes":"Yes","yes":"yes"}')},209:function(e){e.exports=JSON.parse('{"Personal records":"Personal records","This month":"This month","Upload one !":"Upload one !"}')},210:function(e){e.exports=JSON.parse('{"3 to 12 characters required for username.":"3 to 12 characters required for username.","8 characters required for password.":"8 characters required for password.","An error occurred. Please contact the administrator.":"An error occurred. Please contact the administrator.","application":"application","Error during picture deletion.":"Error during picture deletion.","Error during picture update.":"Error during picture update.","Error during picture update, file size exceeds max size.":"Error during picture update, file size exceeds max size.","Error. Registration is disabled.":"Error. Registration is disabled.","Error. Please try again or contact the administrator.":"Error. Please try again or contact the administrator.","File extension not allowed.":"File extension not allowed.","File size is greater than the allowed size":"File size is greater than the allowed size","Incorrect id":"Incorrect id","Invalid credentials.":"Invalid credentials.","Invalid payload.":"Invalid payload.","Invalid token. Please log in again.":"Invalid token. Please log in again.","Max. files in a zip archive must be greater than 0":"Max. files in a zip archive must be greater than 0","Max. size of uploaded files must be greater than 0":"Max. size of uploaded files must be greater than 0","Max. size of zip archive must be equal or greater than max. size of uploaded files":"Max. size of zip archive must be equal or greater than max. size of uploaded files","Max. size of zip archive must be greater than 0":"Max. size of zip archive must be greater than 0","No file part.":"No file part.","No picture.":"No picture.","No selected file.":"No selected file.","no correct file.":"no correct file.","no gpx file for this workout":"no gpx file for this workout","Password and password confirmation don\'t match.":"Password and password confirmation don\'t match.","Provide a valid auth token":"Provide a valid auth token","records":"records","Signature expired. Please log in again.":"Signature expired. Please log in again.","Sorry. That user already exists.":"Sorry. That user already exists.","Sport can not be disabled, workouts exist.":"Sport can not be disabled, workouts exist.","Sport does not exist.":"Sport does not exist.","sports":"sports","statistics":"statistiques","User does not exist.":"User does not exist.","Valid email must be provided.\\n":"Valid email must be provided.","workouts":"workouts","You can not delete your account, no other user has admin rights.":"You can not delete your account, no other user has admin rights.","You do not have permissions.":"You do not have permissions."}')},211:function(e){e.exports=JSON.parse('{"Cycling (Sport)":"Cycling (Sport)","Cycling (Transport)":"Cycling (Transport)","Hiking":"Hiking","Mountain Biking":"Mountain Biking","Running":"Running","Walking":"Walking"}')},212:function(e){e.exports=JSON.parse('{"workouts":"workouts","distance":"distance","duration":"duration","month":"month","Statistics":"Statistics","year":"year","week":"week"}')},213:function(e){e.exports=JSON.parse('{"Admin":"Admin","Are you sure you want to delete this account? All data will be deleted, this cannot be undone.":"Are you sure you want to delete this account? All data will be deleted, this cannot be undone.","Are you sure you want to delete your account? All data will be deleted, this cannot be undone.":"Are you sure you want to delete your account? All data will be deleted, this cannot be undone.","Bio":"Bio","Birth Date":"Birth Date","Check your email. If your address is in our database, you\'ll received an email with a link to reset your password.":"Check your email. If your address is in our database, you\'ll received an email with a link to reset your password.","Delete my account":"Delete my account","Delete picture":"Delete picture","Delete user account":"Delete user account","Edit Profile":"Edit Profile","Email":"Email","Enter a username":"Enter a username","Enter an email address":"Enter an email address","Enter a password":"Enter a password","Enter the password confirmation":"Enter the password confirmation","First day of week":"First day of week","First Name":"First Name","Forgot password?":"Forgot password?","Invalid token. Please request a new token.":"Invalid token. Please request a new token.","Language":"Language","Last Name":"Last Name","Location":"Location","loggedOut":"You are now logged out. Click <1>here to log back in.","Login":"Login","login":"login","Logout":"Logout","Monday":"Monday","Password":"Password","Password Confirmation":"Password Confirmation","Password reset":"Password reset","password reset":"password reset","Profile":"Profile","Profile Edition":"Profile Edition","Register":"Register","register":"register","Registration Date":"Registration Date","Reset your password":"Reset your password","reset your password":"reset your password","Send":"Send","Sunday":"Sunday","Timezone":"Timezone","updatedPasswordText":"Your password have been updated. Click <1>here to log in.","Username":"Username"}')},214:function(e){e.exports=JSON.parse('{"Workouts":"S\xe9ances","Workout":"S\xe9ance","Workout Date":"Date de l\'s\xe9ance","Add a workout":"Ajouter une s\xe9ance","Are you sure you want to delete this workout?":"Etes-vous s\xfbr de vouloir supprimer cette s\xe9ance ?","Ave. speed":"Vitesse moyenne","Ascent":"D\xe9nivel\xe9 positif","Average speed":"Vitesse moyenne","Chart":"Analyse","data from gpx, without any cleaning":"donn\xe9es issues du fichier gpx, sans correction","Date":"Date","Delete workout":"Supprimer l\'s\xe9ance","Descent":"D\xe9nivel\xe9 n\xe9gatif","Distance":"Distance","distance":"distance","Duration":"Dur\xe9e","duration":"dur\xe9e","Edit a workout":"Editer une s\xe9ance","Edit workout":"Editer une workout","elevation":"altitude","End":"Arriv\xe9e","Farest distance":"Distance la + longue","Filter":"Filtrer","From":"A partir de","gpxFile":"fichier gpx","Longest duration":"Dur\xe9e la + longue","Max. altitude":"Altitude max","Max. speed":"Vitesse max","Min. altitude":"Altitude min","no folder inside":"pas de r\xe9pertoire","files max":" fichiers max","max size":"taille max","No data to display":"Pas de donn\xe9es \xe0 afficher","No Map":"Pas de carte","No next workout":"Pas d\'s\xe9ance suivante","No next segment":"Pas de segment suivant","No notes":"Pas de notes","No previous workout":"Pas d\'s\xe9ance pr\xe9c\xe9dente","No previous segment":"Pas de segment pr\xe9c\xe9dent","Notes":"Notes","pauses":"pauses","Personal records":"Records personnels","See next workout":"Voir l\'s\xe9ance suivante","See next segment":"Voir le segment suivant","See previous workout":"Voir l\'s\xe9ance pr\xe9c\xe9dente","See previous segment":"Voir le segment pr\xe9c\xe9dent","segment":"segment","Segments":"Segments","Start":"D\xe9part","speed":"vitesse","Title":"Titre","To":"Jusqu\'au","total duration":"dur\xe9e totale","with gpx file":"avec un fichier gpx","without gpx file":"sans fichier gpx","zipFile":"ou un fichier zip contenant des fichiers gpx"}')},215:function(e){e.exports=JSON.parse('{"Actions":"Actions","Active":"Active","Add admin rights":"Ajouter des droits d\'admin","Add/remove admin rights, delete user account.":"Ajouter/retirer des droits d\'adminsitration, supprimer des comptes utilisateurs.","Administration":"Administration","workouts exist":"des s\xe9ances existent","Application":"Application","Application configuration":"Configuration de l\'application","Back":"Retour","Disable":"d\xe9sactiver","Enable":"activer","Enable/disable sports.":"Activer/d\xe9sactiver des sports.","FitTrackee administration":"Administration de FitTrackee","id":"id","if 0, no limitation":"si \xe9gal \xe0 0, pas limite d\'inscription","Image":"Image","Label":"Label","Max. number of active users":"Nombre maximum d\'utilisateurs actifs","Max. files of zip archive":"Nombre max. de fichiers dans une archive zip","Max. size of uploaded files":"Taille max. des fichiers","Max. size of uploaded files (in Mb)":"Taille max. des fichiers (en Mo)","Max. size of zip archive":"Taille max. des archives zip","Max. size of zip archive (in Mb)":"Taille max. des archives zip (en Mo)","Registration is currently disabled.":"Les inscriptions sont actuellement d\xe9sactiv\xe9es.","Registration is currently enabled.":"Les inscriptions sont actuellement activ\xe9es.","Remove admin rights":"Retirer des droits d\'admin","Sports":"Sports","Update application configuration (maximum number of registered users, maximum files size).":"Configurer l\'application (nombre maximum d\'utilisateurs inscrits, taille maximale des fichers).","uploads":"fichiers","user":"user","Users":"Utilisateurs","users":"utilisateurs"}')},216:function(e){e.exports=JSON.parse('{"workouts count":"nombre d\'s\xe9ances","Add workout":"Ajouter une s\xe9ance","admin rights":"droits d\'admin","ascending":"ascendant","Back":"Revenir \xe0 la page pr\xe9c\xe9dente","Back to home":"Retour \xe0 l\'accueil","Cancel":"Annuler","Confirmation":"Confirmation","Dashboard":"Tableau de Bord","descending":"descendant","Edit":"Modifier","day":"jour","days":"jours","Next":"Page suivante","No":"Non","no":"non","No records.":"Pas de records.","No workouts.":"Pas d\'s\xe9ances.","Page not found":"Page introuvable","Previous":"Page pr\xe9c\xe9dente","registration date":"date d\'inscription","Sort":"Tri","Sort by":"Trier par","Sport":"Sport","sport":"sport","Sports":"Sports","sports":"sports","Statistics":"Statistiques","Submit":"Valider","to":"\xe0","user name":"utilisateur","Workout":"S\xe9ance","Workouts":"S\xe9ances","workout":"s\xe9ance","workouts":"s\xe9ances","Yes":"Oui","yes":"oui"}')},217:function(e){e.exports=JSON.parse('{"Personal records":"Mes records","This month":"Ce mois","Upload one !":"Ajoutez votre premi\xe8re s\xe9ance !"}')},218:function(e){e.exports=JSON.parse('{"3 to 12 characters required for username.":"3 \xe0 12 caract\xe8res requis pour le nom.","8 characters required for password.":"8 caract\xe8res minimum pour le mot de passe.","An error occurred. Please contact the administrator.":"Une erreur s\'est produite. Merci de contacter l\'administrateur.","application":"application","Error during picture deletion.":"Erreur lors de la suppression de l\'image.","Error during picture update.":"Erreur lors de la mise \xe0 jour de l\'image.","Error during picture update, file size exceeds max size.":"Erreur lors de la mise \xe0 jour de l\'image, la taille du ficher d\xe9passe la taille maximum autoris\xe9e","Error. Registration is disabled.":"Erreur. L\'inscription est d\xe9sactiv\xe9e.","Error. Please try again or contact the administrator.":"Erreur. Veuillez r\xe9essayer ou contacter l\'administrateur","File extension not allowed.":"Extension de fichier non autoris\xe9e.","File size is greater than the allowed size":"La taille du fichier est sup\xe9rieure \xe0 la limite autoris\xe9e","Incorrect id":"Id incorrect","Invalid credentials.":"Identifiants invalides.","Invalid payload.":"Donn\xe9es incorrectes.","Invalid token. Please log in again.":"Jeton invalide. Merci de vous reconnecter.","Max. files in a zip archive must be greater than 0":"Le nombre max. de fichiers dans une archive doit \xeatre sup\xe9rieur \xe0 0","Max. size of uploaded files must be greater than 0":"La taille max. des fichiers doit \xeatre sup\xe9rieure \xe0 0","Max. size of zip archive must be equal or greater than max. size of uploaded files":"La taille max. d\'une archive doit \xeatre sup\xe9rieure ou \xe9gale \xe0 la taille max. d\'un fichier","Max. size of zip archive must be greater than 0":"La taille max. d\'une archive doit \xeatre sup\xe9rieure \xe0 0","No file part.":"Pas de fichier fourni.","No picture.":"Pas d\'image.","No selected file.":"Pas de fichier s\xe9lectionn\xe9.","no correct file.":"fichier incorrect","no gpx file for this workout":"pas de fichier gpx pour cette s\xe9ance","Password and password confirmation don\'t match.":"Les mots de passe saisis sont diff\xe9rents.","Provide a valid auth token":"Merci de fournir un jeton valide","records":"records","Signature expired. Please log in again.":"Signature expir\xe9e. Merci de vous reconnecter.","Sorry. That user already exists.":"D\xe9sol\xe9. Cet utilisateur existe d\xe9j\xe0.","Sport can not be disabled, workouts exist.":"Le sport ne peut \xeatre d\xe9sactiv\xe9, des s\xe9ancees existent","Sport does not exist.":"Le sport n\'existe pas.","sports":"sports","statistics":"statistics","User does not exist.":"L\'utilisateur n\'existe pas.","Valid email must be provided.\\n":"L\'email fourni n\'est pas valide.","workouts":"s\xe9ances","You can not delete your account, no other user has admin rights.":"Vous ne pouvez pas supprimer votre compte, aucun autre utilisateur n\'a des droits d\'administration.","You do not have permissions.":"Vous n\'avez pas les permissions n\xe9cessaires."}')},219:function(e){e.exports=JSON.parse('{"Cycling (Sport)":"V\xe9lo (Sport)","Cycling (Transport)":"V\xe9lo (Transport)","Hiking":"Randonn\xe9e","Mountain Biking":"VTT","Running":"Course","Walking":"Marche"}')},220:function(e){e.exports=JSON.parse('{"workouts":"s\xe9ances","distance":"distance","duration":"dur\xe9e","month":"mois","Statistics":"Statistiques","year":"ann\xe9e","week":"semaine"}')},221:function(e){e.exports=JSON.parse('{"Admin":"Admin","Are you sure you want to delete this account? All data will be deleted, this cannot be undone.":"Etes-vous s\xfbr de vouloir supprimer ce compte ? Toutes les donn\xe9es seront d\xe9finitivement effac\xe9s.","Are you sure you want to delete your account? All data will be deleted, this cannot be undone.":"Etes-vous s\xfbr de vouloir supprimer votre compte ? Toutes les donn\xe9es seront d\xe9finitivement effac\xe9s.","Bio":"Bio","Birth Date":"Date de naissance","Check your email. If your address is in our database, you\'ll received an email with a link to reset your password.":"V\xe9rifiez vore boite mail. Si vote adresse est dans notre base de donn\xe9es, vous recevrez un email avec un lien pour r\xe9initialiser votre mot de passe","Delete my account":"Supprimer mon compte","Delete picture":"Supprimer l\'image","Delete user account":"Supprimer le compte","Edit Profile":"Editer le profil","Email":"Email","Enter a username":"Saisir un nom","Enter an email address":"Saisir une adresse e-mail","Enter a password":"Saisir un mot de passe","Enter the password confirmation":"Confirmer le mot de passe","First day of week":"Premier jour de la semaine","First Name":"Pr\xe9nom","Forgot password?":"Mot de passe oubli\xe9 ?","Invalid token. Please request a new token.":"Token invalid. Veuillez demander un nouveau token.","Language":"Langue","Last Name":"Nom","Location":"Lieu","loggedOut":"Vous \xeates d\xe9connect\xe9. Cliquez <1>ici pour vous reconnecter.","Login":"Se connecter","login":"se connecter","Logout":"Se d\xe9connecter","Monday":"Lundi","Password":"Mot de passe","Password Confirmation":"Confirmation du mot de passe","Password reset":"R\xe9initialiser votre mot de passe","password reset":"r\xe9initialiser votre mot de passe","Profile":"Profil","Profile Edition":"Edition du profil","Register":"S\'inscrire","register":"s\'inscrire","Registration Date":"Date d\'inscription","Reset your password":"R\xe9initialiser votre mot de passe","reset your password":"r\xe9initialiser votre mot de passe","Send":"Envoyer","Sunday":"Dimanche","Timezone":"Fuseau horaire","updatedPasswordText":"Votre mot de passe a \xe9t\xe9 mis \xe0 jour. Cliquez <1>ici pour vous connecter.","Username":"Nom d\'utilisateur"}')},281:function(e,t,a){},290:function(e,t){},894:function(e,t,a){"use strict";a.r(t),a.d(t,"history",(function(){return Ws})),a.d(t,"rootNode",(function(){return qs})),a.d(t,"store",(function(){return Bs}));var s=a(34),r=a(2),n=a.n(r),o=a(913),c=a(56),i=a.n(c),l=a(202),d=a(60),u=a(203),m=a(88),j=a(204),p=a(205),h={en:{workouts:a(206),administration:a(207),common:a(208),dashboard:a(209),messages:a(210),sports:a(211),statistics:a(212),user:a(213)},fr:{workouts:a(214),administration:a(215),common:a(216),dashboard:a(217),messages:a(218),sports:a(219),statistics:a(220),user:a(221)}};m.a.use(p.a).use(j.a).init({debug:!1,lng:"en",fallbackLng:"en",keySeparator:!1,interpolation:{escapeValue:!1},resources:h,ns:["common"],defaultNS:"common"});var b=m.a,f=a(10),O=a(11),x=a(14),g=a(13),v=a(12),k=a(24),w=(a(281),a(25)),y=a(896),N=a(1),_=function(e){Object(x.a)(a,e);var t=Object(g.a)(a);function a(){return Object(f.a)(this,a),t.apply(this,arguments)}return Object(O.a)(a,[{key:"render",value:function(){var e=this.props,t=e.message,a=e.messages,s=e.t,r=""!==t&&t?t.split("|").length>1?"".concat(s("messages:".concat(t.split("|")[0])),": ").concat(s("messages:".concat(t.split("|")[1]))):s("messages:".concat(t)):"";return Object(N.jsxs)("div",{className:"error-message",children:[""!==r&&Object(N.jsx)("code",{children:r}),a&&a.length>0&&(1===a.length?Object(N.jsx)("code",{children:a[0].value}):Object(N.jsx)("code",{children:Object(N.jsx)("ul",{children:a.map((function(e){return Object(N.jsx)("li",{children:s("messages:".concat(e.value))},e.id)}))})}))]})}}]),a}(n.a.PureComponent),S=a(16),D=a(915),C=a(914),E=a(226),A=["bytes","KB","MB","GB","TB"],M=function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],a=Math.floor(Math.log(e)/Math.log(1024));if(!e)return t?"0 bytes":{size:0,suffix:"bytes"};var s=(e/Math.pow(1024,a)).toFixed(1),r=A[a];return t?"".concat(s).concat(r):{size:s,suffix:r}},T="/api/",P=[{key:"workouts_count",label:"workouts count"},{key:"admin",label:"admin rights"},{key:"created_at",label:"registration date"},{key:"username",label:"user name"}],z=[{key:"asc",label:"ascending"},{key:"desc",label:"descending"}],F=function(){return!!window.localStorage.authToken},R=function(e){var t=0;return e.map((function(e){var a={id:t,value:e};return t++,a}))},L=function(e){var t={};e.noAuthorization||(t.Authorization="Bearer ".concat(window.localStorage.getItem("authToken"))),e.type&&(t["Content-Type"]=e.type);var a={method:e.method,headers:t};"application/json"===e.type&&e.body?a.body=JSON.stringify(e.body):e.body&&(a.body=e.body);var s=new Request("".concat(T).concat(e.url),a);return fetch(s).then((function(t){return"DELETE"===e.method||413===t.status?t:t.json()})).catch((function(e){return console.error(e),new Error("An error occurred. Please contact the administrator.")}))},U=function(e,t){if(!e)return"";var a=E.DateTime.fromISO(Object(D.a)(new Date(e),"yyyy-MM-dd'T'HH:mm:ss.SSSxxx")).setZone(t);return Object(C.a)(a.toFormat("yyyy-MM-dd HH:mm:ss"),"yyyy-MM-dd HH:mm:ss",new Date)},I=function(e,t){var a=e.label.toLowerCase(),s=t.label.toLowerCase();return a>s?1:a2&&void 0!==arguments[2]?arguments[2]:"common";return t.map((function(t){return Object(S.a)(Object(S.a)({},t),{},{label:e("".concat(a,":").concat(t.label))})})).sort(I)},H=function(e,t){var a=e;return t.id||"users"===e&&t.username?a="".concat(a,"/").concat(t.username?t.username:t.id):Object.keys(t).length>0&&(a+="?",Object.keys(t).filter((function(e){return t[e]})).map((function(e,s){return a+="".concat(0===s?"":"&").concat(e,"=").concat(t[e])}))),a},q=function(){function e(){Object(f.a)(this,e)}return Object(O.a)(e,null,[{key:"getData",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},a=H(e,t),s={url:a,method:"GET",type:"application/json"};return L(s)}},{key:"addData",value:function(e,t){return L({url:e,method:"POST",body:t,type:"application/json"})}},{key:"addDataWithFile",value:function(e,t){return L({url:e,method:"POST",body:t})}},{key:"postData",value:function(e,t){var a={url:"".concat(e).concat(t.id?"/".concat(t.id):""),method:"POST",body:t,type:"application/json"};return L(a)}},{key:"updateData",value:function(e,t){var a={url:"".concat(e).concat(t.id?"/".concat(t.id):t.username?"/".concat(t.username):""),method:"PATCH",body:t,type:"application/json"};return L(a)}},{key:"deleteData",value:function(e,t){var a={url:"".concat(e,"/").concat(t),method:"DELETE",type:"application/json"};return L(a)}}]),e}(),B=function(e,t){return{type:"SET_DATA",data:t,target:e}},G=function(e,t,a){return{type:"SET_PAGINATED_DATA",data:t,pagination:a,target:e}},V=function(e){return{type:"SET_ERROR",message:e}},J=function(e){return{type:"SET_LOADING",loading:e}},K=function(e){return{type:"UPDATE_SPORT_DATA",data:e}},Y=function(e){return{type:"UPDATE_USER_DATA",data:e}},X=function(e,t,a){var s=!(arguments.length>3&&void 0!==arguments[3])||arguments[3];return function(r){return r(J(!0)),a&&a.id&&"workouts"!==t&&isNaN(a.id)?(r(J(!1)),r(V("".concat(t,"|Incorrect id")))):(r({type:"CLEAN_ALL_MESSAGES"}),q[e](t,a).then((function(a){if("success"===a.status)if(s){if("users"===t&&"getData"===e)return r(G(t,a.data,a.pagination));r(B(t,a.data))}else"updateData"===e&&"sports"===t?r(K(a.data.sports[0])):"updateData"===e&&"users"===t&&r(Y(a.data.users[0]));else r(V("".concat(t,"|").concat(a.message||a.status)));r(J(!1))})).catch((function(e){r(J(!1)),r(V("".concat(t,"|").concat(e)))})))}},$=function(e){return function(t){m.a.changeLanguage(e).then(t(function(e){return{type:"SET_LANGUAGE",language:e}}(e)))}},Z=function(e){return{type:"SET_APP_CONFIG",data:e}},Q=function(e){return function(t){return q.getData(e).then((function(a){"success"===a.status?"config"===e?t(Z(a.data)):"stats/all"===e&&t({type:"SET_APP_STATS",data:a.data}):t(V("application|".concat(a.message)))})).catch((function(e){return t(V("application|".concat(e)))}))}},ee=function(e){Object(x.a)(a,e);var t=Object(g.a)(a);function a(e,s){var r;return Object(f.a)(this,a),(r=t.call(this,e,s)).state={formData:{}},r}return Object(O.a)(a,[{key:"componentDidMount",value:function(){this.initForm()}},{key:"componentDidUpdate",value:function(e){this.props.appConfig!==e.appConfig&&this.initForm()}},{key:"initForm",value:function(){var e=this.props.appConfig,t={};Object.keys(e).map((function(a){return null===e[a]?t[a]="":["max_single_file_size","max_zip_file_size"].includes(a)?t[a]=+(e[a]/1048576).toFixed(2):t[a]=e[a]})),this.setState({formData:t})}},{key:"handleFormChange",value:function(e){var t=this.state.formData;t[e.target.name]=+e.target.value,this.setState(t)}},{key:"render",value:function(){var e=this,t=this.props,a=t.isInEdition,s=t.loadAppConfig,r=t.message,n=t.messages,o=t.onHandleConfigFormSubmit,c=t.t,i=this.state.formData;return Object(N.jsxs)("div",{children:[(r||n)&&Object(N.jsx)(_,{message:r,messages:n,t:c}),Object.keys(i).length>0&&Object(N.jsx)("div",{className:"row",children:Object(N.jsx)("div",{className:"col-md-12",children:Object(N.jsxs)("div",{className:"card",children:[Object(N.jsx)("div",{className:"card-header",children:Object(N.jsx)("strong",{children:c("administration:Application configuration")})}),Object(N.jsx)("div",{className:"card-body",children:Object(N.jsxs)("form",{className:"app-config-form ".concat(a?"":"form-disabled"),onSubmit:function(e){e.preventDefault(),o(i)},children:[Object(N.jsxs)("div",{className:"form-group row",children:[Object(N.jsxs)("label",{className:"col-sm-6 col-form-label",htmlFor:"max_users",children:[c("administration:Max. number of active users"),Object(N.jsx)("sup",{children:Object(N.jsx)("i",{className:"fa fa-question-circle","aria-hidden":"true",title:c("administration:if 0, no limitation")})}),":"]}),Object(N.jsx)("input",{className:"col-sm-5",id:"max_users",name:"max_users",type:"number",min:"0",value:i.max_users,onChange:function(t){return e.handleFormChange(t)}})]}),Object(N.jsxs)("div",{className:"form-group row",children:[Object(N.jsxs)("label",{className:"col-sm-6 col-form-label",htmlFor:"max_single_file_size",children:[c("administration:Max. size of uploaded files (in Mb)"),":"]}),Object(N.jsx)("input",{className:"col-sm-5",id:"max_single_file_size",name:"max_single_file_size",type:"number",step:"0.1",min:"0",value:i.max_single_file_size,onChange:function(t){return e.handleFormChange(t)}})]}),Object(N.jsxs)("div",{className:"form-group row",children:[Object(N.jsxs)("label",{className:"col-sm-6 col-form-label",htmlFor:"max_zip_file_size",children:[c("administration:Max. size of zip archive (in Mb)"),":"]}),Object(N.jsx)("input",{className:"col-sm-5",id:"max_zip_file_size",name:"max_zip_file_size",type:"number",step:"0.1",min:"0",value:i.max_zip_file_size,onChange:function(t){return e.handleFormChange(t)}})]}),Object(N.jsxs)("div",{className:"form-group row",children:[Object(N.jsx)("label",{className:"col-sm-6 col-form-label",htmlFor:"gpx_limit_import",children:c("administration:Max. files of zip archive")}),Object(N.jsx)("input",{className:"col-sm-5",id:"gpx_limit_import",name:"gpx_limit_import",type:"number",min:"0",value:i.gpx_limit_import,onChange:function(t){return e.handleFormChange(t)}})]}),a?Object(N.jsxs)(N.Fragment,{children:[Object(N.jsx)("input",{type:"submit",className:"btn btn-primary",value:c("common:Submit")}),Object(N.jsx)("input",{type:"submit",className:"btn btn-secondary",onClick:function(e){e.preventDefault(),s(),Ws.push("/admin/application")},value:c("common:Cancel")})]}):Object(N.jsxs)(N.Fragment,{children:[Object(N.jsx)("input",{type:"submit",className:"btn btn-primary",onClick:function(e){e.preventDefault(),Ws.push("/admin/application/edit")},value:c("common:Edit")}),Object(N.jsx)("input",{type:"submit",className:"btn btn-secondary",onClick:function(){return Ws.push("/admin")},value:c("common:Back")})]})]})})]})})})]})}}]),a}(n.a.Component),te=Object(v.c)((function(e){return{message:e.message,messages:e.messages}}),(function(e){return{loadAppConfig:function(){e(Q("config"))},onHandleConfigFormSubmit:function(t){var a=Object.assign({},t);a.max_single_file_size*=1048576,a.max_zip_file_size*=1048576,e(function(e){return function(t){t({type:"CLEAN_ALL_MESSAGES"}),q.updateData("config",e).then((function(e){"success"===e.status?(t(Z(e.data)),Ws.push("/admin/application")):Array.isArray(e.message)?t({type:"APP_ERRORS",messages:R(e.message)}):t(V(e.message))})).catch((function(e){return t(V("application|".concat(e)))}))}}(a))}}}))(ee),ae=a(19),se=function(e){Object(x.a)(a,e);var t=Object(g.a)(a);function a(){return Object(f.a)(this,a),t.apply(this,arguments)}return Object(O.a)(a,[{key:"componentDidMount",value:function(){this.props.loadAppStats()}},{key:"render",value:function(){var e=this.props,t=e.appStats,a=e.t,s=M(t.uploads_dir_size,!1);return Object(N.jsxs)("div",{className:"row",children:[Object(N.jsx)("div",{className:"col-lg-3 col-md-6 col-sm-6",children:Object(N.jsx)("div",{className:"card workout-card",children:Object(N.jsxs)("div",{className:"card-body row",children:[Object(N.jsx)("div",{className:"col-3",children:Object(N.jsx)("i",{className:"fa fa-users fa-3x fa-color"})}),Object(N.jsxs)("div",{className:"col-9 text-right",children:[Object(N.jsx)("div",{className:"huge",children:t.users?t.users:0}),Object(N.jsx)("div",{children:"".concat(1===t.users?a("administration:user"):a("administration:users"))})]})]})})}),Object(N.jsx)("div",{className:"col-lg-3 col-md-6 col-sm-6",children:Object(N.jsx)("div",{className:"card workout-card",children:Object(N.jsxs)("div",{className:"card-body row",children:[Object(N.jsx)("div",{className:"col-3",children:Object(N.jsx)("i",{className:"fa fa-tags fa-3x fa-color"})}),Object(N.jsxs)("div",{className:"col-9 text-right",children:[Object(N.jsx)("div",{className:"huge",children:t.sports?t.sports:0}),Object(N.jsx)("div",{children:"".concat(1===t.sports?a("common:sport"):a("common:sports"))})]})]})})}),Object(N.jsx)("div",{className:"col-lg-3 col-md-6 col-sm-6",children:Object(N.jsx)("div",{className:"card workout-card",children:Object(N.jsxs)("div",{className:"card-body row",children:[Object(N.jsx)("div",{className:"col-3",children:Object(N.jsx)("i",{className:"fa fa-calendar fa-3x fa-color"})}),Object(N.jsxs)("div",{className:"col-9 text-right",children:[Object(N.jsx)("div",{className:"huge",children:t.workouts?t.workouts:0}),Object(N.jsx)("div",{children:"".concat(1===t.workouts?a("common:workout"):a("common:workouts"))})]})]})})}),Object(N.jsx)("div",{className:"col-lg-3 col-md-6 col-sm-6",children:Object(N.jsx)("div",{className:"card workout-card",children:Object(N.jsxs)("div",{className:"card-body row",children:[Object(N.jsx)("div",{className:"col-3",children:Object(N.jsx)("i",{className:"fa fa-folder-open fa-3x fa-color"})}),Object(N.jsxs)("div",{className:"col-9 text-right",children:[Object(N.jsx)("div",{className:"huge",children:s.size}),Object(N.jsxs)("div",{children:[s.suffix," (",a("administration:uploads"),")"]})]})]})})})]})}}]),a}(n.a.Component),re=Object(y.a)()(Object(v.c)((function(e){return{appStats:e.application.statistics}}),(function(e){return{loadAppStats:function(){e(Q("stats/all"))}}}))(se));function ne(e){var t=e.appConfig,a=e.t;return Object(N.jsxs)("div",{className:"card workout-card",children:[Object(N.jsx)("div",{className:"card-header",children:Object(N.jsx)("strong",{children:a("administration:Administration")})}),Object(N.jsxs)("div",{className:"card-body",children:[Object(N.jsx)(re,{}),Object(N.jsx)("br",{}),Object(N.jsxs)("dl",{className:"admin-items",children:[Object(N.jsx)("dt",{children:Object(N.jsx)(ae.a,{to:{pathname:"/admin/application"},children:a("administration:Application")})}),Object(N.jsxs)("dd",{children:[a("administration:Update application configuration (maximum number of registered users, maximum files size)."),Object(N.jsx)("br",{}),Object(N.jsx)("strong",{children:a("administration:Registration is currently ".concat(t.is_registration_enabled?"enabled":"disabled","."))})]}),Object(N.jsx)("br",{}),Object(N.jsx)("dt",{children:Object(N.jsx)(ae.a,{to:{pathname:"/admin/sports"},children:a("administration:Sports")})}),Object(N.jsx)("dd",{children:a("administration:Enable/disable sports.")}),Object(N.jsx)("br",{}),Object(N.jsx)("dt",{children:Object(N.jsx)(ae.a,{to:{pathname:"/admin/users"},children:a("administration:Users")})}),Object(N.jsx)("dd",{children:a("administration:Add/remove admin rights, delete user account.")})]})]})]})}var oe=function(e){Object(x.a)(a,e);var t=Object(g.a)(a);function a(){return Object(f.a)(this,a),t.apply(this,arguments)}return Object(O.a)(a,[{key:"componentDidMount",value:function(){this.props.loadSports()}},{key:"render",value:function(){var e=this.props,t=e.message,a=e.sports,s=e.t,r=e.updateSport;return Object(N.jsxs)("div",{children:[t&&Object(N.jsx)(_,{message:t,t:s}),Object(N.jsx)("div",{className:"row",children:Object(N.jsx)("div",{className:"col",children:Object(N.jsxs)("div",{className:"card",children:[Object(N.jsx)("div",{className:"card-header",children:Object(N.jsx)("strong",{children:s("administration:Sports")})}),Object(N.jsxs)("div",{className:"card-body",children:[a.length>0&&Object(N.jsxs)("table",{className:"table",children:[Object(N.jsx)("thead",{children:Object(N.jsxs)("tr",{children:[Object(N.jsx)("th",{children:s("administration:id")}),Object(N.jsx)("th",{children:s("administration:Image")}),Object(N.jsx)("th",{children:s("administration:Label")}),Object(N.jsx)("th",{children:s("administration:Active")}),Object(N.jsx)("th",{children:s("administration:Actions")})]})}),Object(N.jsx)("tbody",{children:a.map((function(e){return Object(N.jsxs)("tr",{children:[Object(N.jsxs)("td",{children:[Object(N.jsx)("span",{className:"heading-span-absolute",children:s("administration:id")}),e.id]}),Object(N.jsxs)("td",{children:[Object(N.jsx)("span",{className:"heading-span-absolute",children:s("administration:Image")}),Object(N.jsx)("img",{className:"admin-img",src:e.img?e.img:"/img/photo.png",alt:"sport logo"})]}),Object(N.jsxs)("td",{children:[Object(N.jsx)("span",{className:"heading-span-absolute",children:s("administration:Label")}),s("sports:".concat(e.label))]}),Object(N.jsxs)("td",{children:[Object(N.jsx)("span",{className:"heading-span-absolute",children:s("administration:Active")}),e.is_active?Object(N.jsx)("i",{className:"fa fa-check-square-o custom-fa","aria-hidden":"true","data-toggle":"tooltip"}):Object(N.jsx)("i",{className:"fa fa-square-o custom-fa","aria-hidden":"true","data-toggle":"tooltip"})]}),Object(N.jsxs)("td",{children:[Object(N.jsx)("span",{className:"heading-span-absolute",children:s("administration:Actions")}),Object(N.jsx)("input",{type:"submit",className:"btn btn-".concat(e.is_active?"dark":"primary"," btn-sm"),value:e.is_active?s("administration:Disable"):s("administration:Enable"),onClick:function(){return r(e.id,!e.is_active)}}),e.has_workouts&&Object(N.jsxs)("span",{className:"admin-message",children:[Object(N.jsx)("i",{className:"fa fa-warning custom-fa","aria-hidden":"true"}),s("administration:workouts exist")]})]})]},e.id)}))})]}),Object(N.jsx)("input",{type:"submit",className:"btn btn-secondary",onClick:function(){return Ws.push("/admin/")},value:s("common:Back")})]})]})})})]})}}]),a}(n.a.Component),ce=Object(v.c)((function(e){return{message:e.message,sports:e.sports.data,user:e.user}}),(function(e){return{loadSports:function(){e(X("getData","sports"))},updateSport:function(t,a){e(X("updateData","sports",{id:t,is_active:a},!1))}}}))(oe),ie=function(e){Object(x.a)(a,e);var t=Object(g.a)(a);function a(){return Object(f.a)(this,a),t.apply(this,arguments)}return Object(O.a)(a,[{key:"getUrl",value:function(e){var t=this.props,a=t.query,s=t.pathname,r=Object.assign({},a),n=a.page?+a.page:1;switch(e){case"prev":n-=1;break;case"next":n+=1;break;default:n=+e}return r.page=n,H(s,r)}},{key:"render",value:function(){var e,t=this,a=this.props,s=a.pagination,r=a.t;return Object(N.jsx)(N.Fragment,{children:s&&Object.keys(s).length>0&&Object(N.jsx)("nav",{"aria-label":"Page navigation example",children:Object(N.jsxs)("ul",{className:"pagination justify-content-center",children:[Object(N.jsx)("li",{className:"page-item ".concat(s.has_prev?"":"disabled"),children:Object(N.jsx)(ae.a,{className:"page-link",to:this.getUrl("prev"),"aria-disabled":!s.has_prev,children:r("common:Previous")})}),(e=s.pages,Array.from({length:e},(function(e,t){return t+1}))).map((function(e){return Object(N.jsx)("li",{className:"page-item ".concat(e===s.page?"active":""),children:Object(N.jsx)(ae.a,{className:"page-link",to:t.getUrl(e),children:e})},e)})),Object(N.jsx)("li",{className:"page-item ".concat(s.has_next?"":"disabled"),children:Object(N.jsx)(ae.a,{className:"page-link",to:this.getUrl("next"),"aria-disabled":!s.has_next,children:r("common:Next")})})]})})})}}]),a}(n.a.PureComponent),le=function(e){Object(x.a)(a,e);var t=Object(g.a)(a);function a(e,s){var r;return Object(f.a)(this,a),(r=t.call(this,e,s)).state={page:null,per_page:null,order_by:"created_at",order:"asc"},r}return Object(O.a)(a,[{key:"componentDidMount",value:function(){this.props.loadUsers(this.initState())}},{key:"componentDidUpdate",value:function(e){e.location.query!==this.props.location.query&&this.props.loadUsers(this.props.location.query)}},{key:"initState",value:function(){var e=this.props.location.query,t={page:e.page,per_page:e.per_page,order_by:e.order_by?e.order_by:"created_at",order:e.order?e.order:"asc"};return this.setState(t),t}},{key:"updatePage",value:function(e,t){var a=Object.assign({},this.state);a[e]=t,this.setState(a);var s=H(this.props.location.pathname,a);Ws.push(s)}},{key:"render",value:function(){var e=this,t=this.props,a=t.authUser,s=t.location,r=t.message,n=t.t,o=t.pagination,c=t.updateUser,i=t.users,l=W(n,P),d=W(n,z);return Object(N.jsxs)("div",{children:[r&&Object(N.jsx)(_,{message:r,t:n}),Object(N.jsx)("div",{className:"container",children:Object(N.jsx)("div",{className:"row",children:Object(N.jsx)("div",{className:"col",children:Object(N.jsxs)("div",{className:"card",children:[Object(N.jsx)("div",{className:"card-header",children:Object(N.jsx)("strong",{children:n("administration:Users")})}),Object(N.jsxs)("div",{className:"card-body",children:[Object(N.jsxs)("div",{className:"row user-filters",children:[Object(N.jsx)("div",{className:"col-lg-4 col-md-6 col-sm-12",children:Object(N.jsxs)("label",{htmlFor:"order_by",children:[n("common:Sort by"),":"," ",Object(N.jsx)("select",{id:"order_by",name:"order_by",value:this.state.order_by,onChange:function(t){return e.updatePage("order_by",t.target.value)},children:l.map((function(e){return Object(N.jsx)("option",{value:e.key,children:e.label},e.key)}))})," "]})}),Object(N.jsx)("div",{className:"col-lg-4 col-md-6 col-sm-12",children:Object(N.jsxs)("label",{htmlFor:"sort",children:[n("common:Sort"),":"," ",Object(N.jsx)("select",{id:"sort",name:"sort",value:this.state.order,onChange:function(t){return e.updatePage("order",t.target.value)},children:d.map((function(e){return Object(N.jsx)("option",{value:e.key,children:e.label},e.key)}))})," "]})})]}),Object(N.jsxs)("table",{className:"table",children:[Object(N.jsx)("thead",{children:Object(N.jsxs)("tr",{children:[Object(N.jsx)("th",{children:"#"}),Object(N.jsx)("th",{children:n("user:Username")}),Object(N.jsx)("th",{children:n("user:Email")}),Object(N.jsx)("th",{children:n("user:Registration Date")}),Object(N.jsx)("th",{children:n("workouts:Workouts")}),Object(N.jsx)("th",{children:n("user:Admin")}),Object(N.jsx)("th",{children:n("administration:Actions")})]})}),Object(N.jsx)("tbody",{children:i.map((function(e){return Object(N.jsxs)("tr",{children:[Object(N.jsxs)("td",{children:[Object(N.jsx)("span",{className:"heading-span-absolute",children:"#"}),!0===e.picture?Object(N.jsx)("img",{alt:"Avatar",src:"".concat(T,"users/").concat(e.username,"/picture?").concat(Date.now()),className:"img-fluid App-nav-profile-img"}):Object(N.jsx)("i",{className:"fa fa-user-circle-o fa-2x no-picture","aria-hidden":"true"})]}),Object(N.jsxs)("td",{children:[Object(N.jsx)("span",{className:"heading-span-absolute",children:n("user:Username")}),Object(N.jsx)(ae.a,{to:"/users/".concat(e.username),children:e.username})]}),Object(N.jsxs)("td",{children:[Object(N.jsx)("span",{className:"heading-span-absolute",children:n("user:Email")}),e.email]}),Object(N.jsxs)("td",{children:[Object(N.jsx)("span",{className:"heading-span-absolute",children:n("user:Registration Date")}),Object(D.a)(new Date(e.created_at),"dd/MM/yyyy HH:mm")]}),Object(N.jsxs)("td",{children:[Object(N.jsx)("span",{className:"heading-span-absolute",children:n("workouts:Workouts")}),e.nb_workouts]}),Object(N.jsxs)("td",{children:[Object(N.jsx)("span",{className:"heading-span-absolute",children:n("user:Admin")}),e.admin?Object(N.jsx)("i",{className:"fa fa-check-square-o custom-fa","aria-hidden":"true","data-toggle":"tooltip"}):Object(N.jsx)("i",{className:"fa fa-square-o custom-fa","aria-hidden":"true","data-toggle":"tooltip"})]}),Object(N.jsxs)("td",{children:[Object(N.jsx)("span",{className:"heading-span-absolute",children:n("administration:Actions")}),Object(N.jsx)("input",{type:"submit",className:"btn btn-".concat(e.admin?"dark":"primary"," btn-sm"),disabled:e.username===a.username,value:e.admin?n("administration:Remove admin rights"):n("administration:Add admin rights"),onClick:function(){return c(e.username,!e.admin)}})]})]},e.username)}))})]}),Object(N.jsx)(ie,{pagination:o,pathname:s.pathname,query:this.state,t:n}),Object(N.jsx)("input",{type:"submit",className:"btn btn-secondary",onClick:function(){return Ws.push("/admin/")},value:n("common:Back")})]})]})})})})]})}}]),a}(n.a.Component),de=Object(v.c)((function(e){return{authUser:e.user,location:e.router.location,message:e.message,pagination:e.users.pagination,users:e.users.data}}),(function(e){return{loadUsers:function(t){e(X("getData","users",t))},updateUser:function(t,a){e(X("updateData","users",{username:t,admin:a},!1))}}}))(le),ue=a(227);function me(){var e=Object(ue.a)().t;return Object(N.jsxs)("div",{children:[Object(N.jsx)(w.a,{children:Object(N.jsx)("title",{children:"fittrackee - 404"})}),Object(N.jsx)("h1",{className:"page-title",children:e("Page not found")})]})}var je=Object(y.a)()(Object(v.c)((function(e){return{appConfig:e.application.config,user:e.user}}))((function(e){var t=e.appConfig,a=e.t,s=e.user;return Object(N.jsxs)(N.Fragment,{children:[Object(N.jsx)(w.a,{children:Object(N.jsxs)("title",{children:["FitTrackee - ",a("administration:Administration")]})}),Object(N.jsx)("div",{className:"container dashboard",children:s.admin?Object(N.jsxs)(k.d,{children:[Object(N.jsx)(k.b,{exact:!0,path:"/admin",render:function(){return Object(N.jsx)(ne,{appConfig:t,t:a})}}),Object(N.jsx)(k.b,{exact:!0,path:"/admin/application",render:function(){return Object(N.jsx)(te,{appConfig:t,t:a,isInEdition:!1})}}),Object(N.jsx)(k.b,{exact:!0,path:"/admin/application/edit",render:function(){return Object(N.jsx)(te,{appConfig:t,t:a,isInEdition:!0})}}),Object(N.jsx)(k.b,{exact:!0,path:"/admin/sports",render:function(){return Object(N.jsx)(ce,{t:a})}}),Object(N.jsx)(k.b,{exact:!0,path:"/admin/users",render:function(){return Object(N.jsx)(de,{t:a})}}),Object(N.jsx)(k.b,{component:me})]}):Object(N.jsx)(me,{})})]})}))),pe=a(897),he=a(29),be=a(916),fe=a(230),Oe=a.n(fe),xe=["#55a8a3","#98C3A9","#D0838A","#ECC77E","#926692","#929292","#428bca"],ge=[{record_type:"AS",label:"Ave. speed"},{record_type:"FD",label:"Farest distance"},{record_type:"LD",label:"Longest duration"},{record_type:"MS",label:"Max. speed"}],ve=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;return t||(t="yyyy/MM/dd"),a||(a="HH:mm"),{workout_date:e?Object(D.a)(e,t):null,workout_time:e?Object(D.a)(e,a):null}},ke=function(e){var t=new Date(0);return(t=Object(be.a)(t.setSeconds(e),1)).getTime()},we=function(e){for(var t=0;ts?1:a2&&void 0!==arguments[2]&&arguments[2];return e.filter((function(e){return!a||e.is_active})).map((function(e){return Object(S.a)(Object(S.a)({},e),{},{label:t("sports:".concat(e.label))})})).sort(ye)},_e=function(){function e(){Object(f.a)(this,e)}return Object(O.a)(e,null,[{key:"loginOrRegisterOrPasswordReset",value:function(e,t){var a={url:"auth/".concat(e),method:"POST",noAuthorization:!0,body:t,type:"application/json"};return L(a)}},{key:"deletePicture",value:function(){return L({url:"auth/picture",method:"DELETE"})}}]),e}(),Se=function(e){return{type:"PICTURE_ERROR",message:e}},De=function(e){return{type:"PROFILE_UPDATE_ERROR",message:e}},Ce=function(){return function(e){return window.localStorage.getItem("authToken")?e(Ee()):{type:"LOGOUT"}}},Ee=function(){return function(e){return q.getData("auth/profile").then((function(t){return"success"===t.status?(e(X("getData","sports")),t.data.isAuthenticated=!0,t.data.language&&e($(t.data.language)),e({type:"PROFILE_SUCCESS",profil:t.data})):e({type:"PROFILE_ERROR",message:t.message})})).catch((function(e){throw e}))}},Ae=function(e,t){return function(a){if("register"===t||"password/update"===t){var s=function(e){var t=[];return!(arguments.length>1&&void 0!==arguments[1]&&arguments[1])&&(e.username.length<3||e.username.length>12)&&t.push("3 to 12 characters required for username."),e.password!==e.password_conf&&t.push("Password and password confirmation don't match."),e.password.length<8&&t.push("8 characters required for password."),t}(e,"password/update"===t);if(s.length>0)return a({type:"AUTH_ERRORS",messages:R(s)})}return a(function(e,t){return function(a){return _e.loginOrRegisterOrPasswordReset(e,t).then((function(t){if("success"===t.status){if("password/reset-request"===e)return Ws.push({pathname:"/password-reset/sent"});if("password/update"===e)return Ws.push({pathname:"/updated-password"});if("login"===e||"register"===e)return window.localStorage.setItem("authToken",t.auth_token),"register"===e&&a(Q("config")),a(Ee())}return a({type:"AUTH_ERROR",message:t.message})})).catch((function(e){throw e}))}}(t,e))}},Me=function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return function(a){return q.deleteData("users",e).then((function(e){204===e.status?(a(Q("config")),t?Ws.push("/admin/users"):(a({type:"LOGOUT"}),Ws.push("/"))):e.json().then((function(e){return a(V("".concat(e.message)))}))})).catch((function(e){return a(V("user|".concat(e)))}))}},Te=function(e){return{type:"SET_GPX",gpxContent:e}},Pe=function(e){return{type:"SET_CHART_DATA",chartData:e}},ze=function(e){return function(t){return q.updateData("workouts",e).then((function(e){"success"===e.status?(t(Ce()),Ws.push("/workouts/".concat(e.data.workouts[0].id))):t(V("workouts|".concat(e.message))),t(J(!1))})).catch((function(e){t(J(!1)),t(V("workouts|".concat(e)))}))}},Fe=function(e){return function(t){return q.getData("workouts",e).then((function(e){"success"===e.status?e.data.workouts.length>0&&t({type:"PUSH_WORKOUTS",workouts:e.data.workouts}):t(V("workouts|".concat(e.message)))})).catch((function(e){return t(V("workouts|".concat(e)))}))}};var Re=Object(v.c)((function(e){return{appConfig:e.application.config,loading:e.loading}}),(function(e){return{onAddWorkout:function(t){e(J(!0));var a=new FormData;a.append("file",t.target.form.gpxFile.files[0]),a.append("data",'{"sport_id": '.concat(t.target.form.sport.value,', "notes": "').concat(t.target.form.notes.value,'"}')),e(function(e){return function(t){return q.addDataWithFile("workouts",e).then((function(e){"created"===e.status?0===e.data.workouts.length?t(V("workouts|no correct file.")):1===e.data.workouts.length?(t(Ce()),Ws.push("/workouts/".concat(e.data.workouts[0].id))):(t(Ce()),Ws.push("/")):413===e.status?t(V("workouts|File size is greater than the allowed size")):t(V("workouts|".concat(e.message))),t(J(!1))})).catch((function(e){t(J(!1)),t(V("workouts|".concat(e)))}))}}(a))},onEditWorkout:function(t,a){e(ze({id:a.id,notes:t.target.form.notes.value,sport_id:+t.target.form.sport.value,title:t.target.form.title.value}))}}}))((function(e){var t=e.appConfig,a=e.loading,s=e.onAddWorkout,r=e.onEditWorkout,n=e.sports,o=e.t,c=e.workout,i=c?c.sport_id:"",l=Ne(n,o,!0),d="".concat(o("workouts:no folder inside"),", ").concat(t.gpx_limit_import," ").concat(o("workouts:files max"),", ").concat(o("workouts:max size"),": ").concat(M(t.max_zip_file_size)),u=M(t.max_single_file_size);return Object(N.jsxs)("form",{encType:"multipart/form-data",method:"post",onSubmit:function(e){return e.preventDefault()},children:[Object(N.jsx)("div",{className:"form-group",children:Object(N.jsxs)("label",{children:[o("common:Sport"),":",Object(N.jsxs)("select",{className:"form-control input-lg",defaultValue:i,disabled:a,name:"sport",required:!0,children:[Object(N.jsx)("option",{value:""}),l.map((function(e){return Object(N.jsx)("option",{value:e.id,children:e.label},e.id)}))]})]})}),c?Object(N.jsx)("div",{className:"form-group",children:Object(N.jsxs)("label",{children:[o("workouts:Title"),":",Object(N.jsx)("input",{name:"title",defaultValue:c?c.title:"",disabled:a,className:"form-control input-lg"})]})}):Object(N.jsx)("div",{className:"form-group",children:Object(N.jsxs)("label",{children:[Object(N.jsxs)(pe.a,{i18nKey:"workouts:gpxFile",children:[Object(N.jsx)("strong",{children:"gpx"})," file"]}),Object(N.jsx)("sup",{children:Object(N.jsx)("i",{className:"fa fa-question-circle","aria-hidden":"true","data-toggle":"tooltip",title:"".concat(o("workouts:max size"),": ").concat(u)})})," ",Object(N.jsxs)(pe.a,{i18nKey:"workouts:zipFile",children:["or ",Object(N.jsx)("strong",{children:" zip"})," file containing ",Object(N.jsx)("strong",{children:"gpx "}),"files"]}),Object(N.jsx)("sup",{children:Object(N.jsx)("i",{className:"fa fa-question-circle","aria-hidden":"true","data-toggle":"tooltip","data-placement":"top",title:d})})," ",":",Object(N.jsx)("input",{accept:".gpx, .zip",className:"form-control form-control-file gpx-file",disabled:a,name:"gpxFile",required:!0,type:"file"})]})}),Object(N.jsx)("div",{className:"form-group",children:Object(N.jsxs)("label",{children:[o("workouts:Notes"),":",Object(N.jsx)("textarea",{name:"notes",defaultValue:c?c.notes:"",disabled:a,className:"form-control input-lg",maxLength:"500"})]})}),a?Object(N.jsx)("div",{className:"loader"}):Object(N.jsxs)("div",{children:[Object(N.jsx)("input",{type:"submit",className:"btn btn-primary",onClick:function(e){return c?r(e,c):s(e)},value:o("common:Submit")}),Object(N.jsx)("input",{type:"submit",className:"btn btn-secondary",onClick:function(){return Ws.push("/")},value:o("common:Cancel")})]})]})}));var Le=Object(v.c)((function(e){return{user:e.user}}),(function(e){return{onAddOrEdit:function(t,a){var s,r=t.target.form.duration.value.split(":"),n=60*+r[0]*60+60*+r[1]+ +r[2],o={workout_date:"".concat(t.target.form.workout_date.value," ").concat(t.target.form.workout_time.value),distance:+t.target.form.distance.value,duration:n,notes:t.target.form.notes.value,sport_id:+t.target.form.sport_id.value,title:t.target.form.title.value};a?(o.id=a.id,e(ze(o))):e((s=o,function(e){return q.addData("workouts/no_gpx",s).then((function(t){"created"===t.status?(e(Ce()),Ws.push("/workouts/".concat(t.data.workouts[0].id))):e(V("workouts|".concat(t.message)))})).catch((function(t){return e(V("workouts|".concat(t)))}))}))}}}))((function(e){var t,a,s=e.onAddOrEdit,r=e.sports,n=e.t,o=e.user,c=e.workout,i=Ne(r,n,!0),l="";if(c){var d=ve(U(c.workout_date,o.timezone),"yyyy-MM-dd");t=d.workout_date,a=d.workout_time,l=c.sport_id}return Object(N.jsxs)("form",{onSubmit:function(e){return e.preventDefault()},children:[Object(N.jsx)("div",{className:"form-group",children:Object(N.jsxs)("label",{children:[n("workouts:Title"),":",Object(N.jsx)("input",{name:"title",defaultValue:c?c.title:"",className:"form-control input-lg"})]})}),Object(N.jsx)("div",{className:"form-group",children:Object(N.jsxs)("label",{children:[n("common:Sport"),":",Object(N.jsxs)("select",{className:"form-control input-lg",defaultValue:l,name:"sport_id",required:!0,children:[Object(N.jsx)("option",{value:""}),i.map((function(e){return Object(N.jsx)("option",{value:e.id,children:e.label},e.id)}))]})]})}),Object(N.jsx)("div",{className:"form-group",children:Object(N.jsxs)("label",{children:[n("workouts:Workout Date"),":",Object(N.jsx)("div",{className:"container",children:Object(N.jsxs)("div",{className:"row",children:[Object(N.jsx)("input",{name:"workout_date",defaultValue:t,className:"form-control col-md",required:!0,type:"date"}),Object(N.jsx)("input",{name:"workout_time",defaultValue:a,className:"form-control col-md",required:!0,type:"time"})]})})]})}),Object(N.jsx)("div",{className:"form-group",children:Object(N.jsxs)("label",{children:[n("workouts:Duration"),":",Object(N.jsx)("input",{name:"duration",defaultValue:c?c.duration:"",className:"form-control col-xs-4",pattern:"^([0-9]*[0-9]):([0-5][0-9]):([0-5][0-9])$",placeholder:"hh:mm:ss",required:!0,type:"text"})]})}),Object(N.jsx)("div",{className:"form-group",children:Object(N.jsxs)("label",{children:[n("workouts:Distance")," (km):",Object(N.jsx)("input",{name:"distance",defaultValue:c?c.distance:"",className:"form-control input-lg",min:0,required:!0,step:"0.001",type:"number"})]})}),Object(N.jsx)("div",{className:"form-group",children:Object(N.jsxs)("label",{children:[n("workouts:Notes"),":",Object(N.jsx)("textarea",{name:"notes",defaultValue:c?c.notes:"",className:"form-control input-lg",maxLength:"500"})]})}),Object(N.jsx)("input",{type:"submit",className:"btn btn-primary",onClick:function(e){return s(e,c)},value:n("common:Submit")}),Object(N.jsx)("input",{type:"submit",className:"btn btn-secondary",onClick:function(){return Ws.push("/")},value:n("common:Cancel")})]})})),Ue=function(e){Object(x.a)(a,e);var t=Object(g.a)(a);function a(e,s){var r;return Object(f.a)(this,a),(r=t.call(this,e,s)).state={withGpx:!0},r}return Object(O.a)(a,[{key:"handleRadioChange",value:function(e){this.setState({withGpx:"withGpx"===e.target.name?e.target.value:!e.target.value})}},{key:"render",value:function(){var e=this,t=this.props,a=t.loading,s=t.message,r=t.sports,n=t.t,o=t.workout,c=this.state.withGpx;return Object(N.jsxs)("div",{children:[Object(N.jsx)(w.a,{children:Object(N.jsxs)("title",{children:["FitTrackee -"," ",n(o?"workouts:Edit a workout":"workouts:Add a workout")]})}),Object(N.jsx)("br",{}),Object(N.jsx)("br",{}),Object(N.jsx)(_,{message:s,t:n}),Object(N.jsx)("div",{className:"container",children:Object(N.jsxs)("div",{className:"row",children:[Object(N.jsx)("div",{className:"col-md-2"}),Object(N.jsx)("div",{className:"col-md-8",children:Object(N.jsxs)("div",{className:"card add-workout",children:[Object(N.jsx)("h2",{className:"card-header text-center",children:n(o?"workouts:Edit a workout":"workouts:Add a workout")}),Object(N.jsx)("div",{className:"card-body",children:o?o.with_gpx?Object(N.jsx)(Re,{workout:o,sports:r,t:n}):Object(N.jsx)(Le,{workout:o,sports:r,t:n}):Object(N.jsxs)("div",{children:[Object(N.jsx)("form",{children:Object(N.jsxs)("div",{className:"form-group row",children:[Object(N.jsx)("div",{className:"col",children:Object(N.jsxs)("label",{className:"radioLabel",children:[Object(N.jsx)("input",{className:"add-workout-radio",type:"radio",name:"withGpx",disabled:a,checked:c,onChange:function(t){return e.handleRadioChange(t)}}),n("workouts:with gpx file")]})}),Object(N.jsx)("div",{className:"col",children:Object(N.jsxs)("label",{className:"radioLabel",children:[Object(N.jsx)("input",{className:"add-workout-radio",type:"radio",name:"withoutGpx",disabled:a,checked:!c,onChange:function(t){return e.handleRadioChange(t)}}),n("workouts:without gpx file")]})})]})}),c?Object(N.jsx)(Re,{sports:r,t:n}):Object(N.jsx)(Le,{sports:r,t:n})]})})]})}),Object(N.jsx)("div",{className:"col-md-2"})]})})]})}}]),a}(n.a.Component),Ie=Object(y.a)()(Object(v.c)((function(e){return{loading:e.loading}}))(Ue));var We=Object(v.c)((function(e){return{message:e.message,sports:e.sports.data,user:e.user}}))((function(e){var t=e.message,a=e.sports;return Object(N.jsx)("div",{children:Object(N.jsx)(Ie,{workout:null,message:t,sports:a})})}));function He(e){var t=Object(ue.a)().t;return Object(N.jsx)("div",{className:"custom-modal-backdrop",children:Object(N.jsx)("div",{className:"custom-modal",children:Object(N.jsxs)("div",{className:"modal-content",children:[Object(N.jsxs)("div",{className:"modal-header",children:[Object(N.jsx)("h5",{className:"modal-title",children:e.title}),Object(N.jsx)("button",{type:"button",className:"close","aria-label":"Close",onClick:function(){return e.close()},children:Object(N.jsx)("span",{"aria-hidden":"true",children:"\xd7"})})]}),Object(N.jsx)("div",{className:"modal-body",children:Object(N.jsx)("p",{children:e.text})}),Object(N.jsxs)("div",{className:"modal-footer",children:[Object(N.jsx)("button",{type:"button",className:"btn btn-primary",onClick:function(){return e.confirm()},children:t("common:Yes")}),Object(N.jsx)("button",{type:"button",className:"btn btn-secondary",onClick:function(){return e.close()},children:t("common:No")})]})]})})})}function qe(e){var t=e.dataType,a=e.displayModal,s=e.segmentId,r=e.sport,n=e.t,o=e.title,c=e.user,i=e.workout,l=i?ve(U(i.workout_date,c.timezone)):null,d="segment"===t&&1!==s?"/workouts/".concat(i.id,"/segment/").concat(s-1):"workout"===t&&i.previous_workout?"/workouts/".concat(i.previous_workout):null,u="segment"===t&&s0?Object(N.jsxs)("div",{children:[Object(N.jsxs)("div",{className:"row chart-radio",children:[Object(N.jsxs)("label",{className:"radioLabel col-md-1",children:[Object(N.jsx)("input",{type:"radio",name:"distance",checked:c,onChange:function(e){return a.handleRadioChange(e)}}),n("workouts:distance")]}),Object(N.jsxs)("label",{className:"radioLabel col-md-1",children:[Object(N.jsx)("input",{type:"radio",name:"duration",checked:!c,onChange:function(e){return a.handleRadioChange(e)}}),n("workouts:duration")]})]}),Object(N.jsxs)("div",{className:"row chart-radio",children:[Object(N.jsx)("div",{className:"col-md-5"}),Object(N.jsxs)("label",{className:"radioLabel col-md-1",children:[Object(N.jsx)("input",{type:"checkbox",name:"speed",checked:this.displayData("speed"),onChange:function(e){return a.handleLegendChange(e)}}),n("workouts:speed")]}),Object(N.jsxs)("label",{className:"radioLabel col-md-1",children:[Object(N.jsx)("input",{type:"checkbox",name:"elevation",checked:this.displayData("elevation"),onChange:function(e){return a.handleLegendChange(e)}}),n("workouts:elevation")]}),Object(N.jsx)("div",{className:"col-md-5"})]}),Object(N.jsx)("div",{className:"row chart",children:Object(N.jsx)(Be.f,{height:300,children:Object(N.jsxs)(Be.d,{data:r,margin:{top:15,right:30,left:20,bottom:15},onMouseMove:function(e){return o(e.activePayload)},onMouseLeave:function(){return o(null)},children:[Object(N.jsx)(Be.h,{allowDecimals:!1,dataKey:e,label:{value:n("workouts:".concat(e)),offset:0,position:"bottom"},scale:t,interval:i,tickFormatter:function(e){return c?e:Object(D.a)(e,"HH:mm:ss")},type:"number"}),Object(N.jsx)(Be.i,{label:{value:"".concat(n("workouts:speed")," (km/h)"),angle:-90,position:"left"},yAxisId:"left"}),Object(N.jsx)(Be.i,{label:{value:"".concat(n("workouts:elevation")," (m)"),angle:-90,position:"right"},yAxisId:"right",orientation:"right"}),this.displayData("elevation")&&Object(N.jsx)(Be.a,{yAxisId:"right",type:"linear",dataKey:"elevation",name:n("workouts:elevation"),fill:"#e5e5e5",stroke:"#cccccc",dot:!1,unit:" m"}),this.displayData("speed")&&Object(N.jsx)(Be.e,{yAxisId:"left",type:"linear",dataKey:"speed",name:n("workouts:speed"),stroke:"#8884d8",strokeWidth:2,dot:!1,unit:" km/h"}),Object(N.jsx)(Be.g,{labelFormatter:function(e){return c?"".concat(n("workouts:distance"),": ").concat(e," km"):"".concat(n("workouts:duration"),": ").concat(Object(D.a)(e,"HH:mm:ss"))}})]})})}),Object(N.jsx)("div",{className:"chart-info",children:n("workouts:data from gpx, without any cleaning")})]}):n("workouts:No data to display")})}}]),a}(n.a.Component),Ve=Object(v.c)((function(e){return{chartData:e.chartData}}),(function(e){return{loadWorkoutData:function(t){e(function(e){return function(t){if(e)return q.getData("workouts/".concat(e,"/chart_data")).then((function(e){"success"===e.status?t(Pe(we(e.data.chart_data))):t(V("workouts|".concat(e.message)))})).catch((function(e){return t(V("workouts|".concat(e)))}));t(Pe(null))}}(t))},loadSegmentData:function(t,a){e(function(e,t){return function(a){if(e)return q.getData("workouts/".concat(e,"/chart_data/segment/").concat(t)).then((function(e){"success"===e.status?a(Pe(we(e.data.chart_data))):a(V("workouts|".concat(e.message)))})).catch((function(e){return a(V("workouts|".concat(e)))}));a(Pe(null))}}(t,a))}}}))(Ge);function Je(e){var t=e.t,a=e.workout;return Object(N.jsx)("div",{className:"container",children:a.weather_start&&a.weather_end&&Object(N.jsxs)("table",{className:"table table-borderless weather-table text-center",children:[Object(N.jsx)("thead",{children:Object(N.jsxs)("tr",{children:[Object(N.jsx)("th",{}),Object(N.jsxs)("th",{children:[t("workouts:Start"),Object(N.jsx)("br",{}),Object(N.jsx)("img",{className:"weather-img",src:"/img/weather/".concat(a.weather_start.icon,".png"),alt:"workout weather (".concat(a.weather_start.icon,")"),title:a.weather_start.summary})]}),Object(N.jsxs)("th",{children:[t("workouts:End"),Object(N.jsx)("br",{}),Object(N.jsx)("img",{className:"weather-img",src:"/img/weather/".concat(a.weather_end.icon,".png"),alt:"workout weather (".concat(a.weather_end.icon,")"),title:a.weather_end.summary})]})]})}),Object(N.jsxs)("tbody",{children:[Object(N.jsxs)("tr",{children:[Object(N.jsx)("td",{children:Object(N.jsx)("img",{className:"weather-img-small",src:"/img/weather/temperature.png",alt:"Temperatures"})}),Object(N.jsxs)("td",{children:[Number(a.weather_start.temperature).toFixed(1),"\xb0C"]}),Object(N.jsxs)("td",{children:[Number(a.weather_end.temperature).toFixed(1),"\xb0C"]})]}),Object(N.jsxs)("tr",{children:[Object(N.jsx)("td",{children:Object(N.jsx)("img",{className:"weather-img-small",src:"/img/weather/pour-rain.png",alt:"Temperatures"})}),Object(N.jsxs)("td",{children:[Number(100*a.weather_start.humidity).toFixed(1),"%"]}),Object(N.jsxs)("td",{children:[Number(100*a.weather_end.humidity).toFixed(1),"%"]})]}),Object(N.jsxs)("tr",{children:[Object(N.jsx)("td",{children:Object(N.jsx)("img",{className:"weather-img-small",src:"/img/weather/breeze.png",alt:"Temperatures"})}),Object(N.jsxs)("td",{children:[Number(a.weather_start.wind).toFixed(1),"m/s"]}),Object(N.jsxs)("td",{children:[Number(a.weather_end.wind).toFixed(1),"m/s"]})]})]})]})})}function Ke(e){var t=e.t,a=e.workout,s="0:00:00"!==a.pauses&&null!==a.pauses;return Object(N.jsxs)("div",{className:"workout-details",children:[Object(N.jsxs)("p",{children:[Object(N.jsx)("i",{className:"fa fa-clock-o custom-fa","aria-hidden":"true"}),t("workouts:Duration"),": ",a.moving,a.records&&a.records.find((function(e){return"LD"===e.record_type}))&&Object(N.jsx)("sup",{children:Object(N.jsx)("i",{className:"fa fa-trophy custom-fa","aria-hidden":"true"})}),s&&Object(N.jsxs)("span",{children:[Object(N.jsx)("br",{}),"(",t("workouts:pauses"),": ",a.pauses,","," ",t("workouts:total duration"),": ",a.duration,")"]})]}),Object(N.jsxs)("p",{children:[Object(N.jsx)("i",{className:"fa fa-road custom-fa","aria-hidden":"true"}),t("workouts:Distance"),": ",a.distance," km",a.records&&a.records.find((function(e){return"FD"===e.record_type}))&&Object(N.jsx)("sup",{children:Object(N.jsx)("i",{className:"fa fa-trophy custom-fa","aria-hidden":"true"})})]}),Object(N.jsxs)("p",{children:[Object(N.jsx)("i",{className:"fa fa-tachometer custom-fa","aria-hidden":"true"}),t("workouts:Average speed"),": ",a.ave_speed," km/h",a.records&&a.records.find((function(e){return"AS"===e.record_type}))&&Object(N.jsx)("sup",{children:Object(N.jsx)("i",{className:"fa fa-trophy custom-fa","aria-hidden":"true"})}),Object(N.jsx)("br",{}),t("workouts:Max. speed"),": ",a.max_speed," km/h",a.records&&a.records.find((function(e){return"MS"===e.record_type}))&&Object(N.jsx)("sup",{children:Object(N.jsx)("i",{className:"fa fa-trophy custom-fa","aria-hidden":"true"})})]}),a.min_alt&&a.max_alt&&Object(N.jsxs)("p",{children:[Object(N.jsx)("i",{className:"fi-mountains custom-fa"}),t("workouts:Min. altitude"),": ",a.min_alt,"m",Object(N.jsx)("br",{}),t("workouts:Max. altitude"),": ",a.max_alt,"m"]}),a.ascent&&a.descent&&Object(N.jsxs)("p",{children:[Object(N.jsx)("i",{className:"fa fa-location-arrow custom-fa"}),t("workouts:Ascent"),": ",a.ascent,"m",Object(N.jsx)("br",{}),t("workouts:Descent"),": ",a.descent,"m"]}),Object(N.jsx)(Je,{workout:a,t:t})]})}var Ye=a(901),Xe=a(898),$e=a(917),Ze=a(899),Qe=a(900),et=a(241),tt=a.n(et);function at(e){var t=e.bounds,a=e.coordinates,s=e.jsonData,r=e.mapAttribution;return Object(Xe.a)().fitBounds(t),Object(N.jsxs)(N.Fragment,{children:[Object(N.jsx)($e.a,{attribution:r,url:"".concat(T,"workouts/map_tile/{s}/{z}/{x}/{y}.png")}),Object(N.jsx)(Ze.a,{data:s},tt()(s)),a.latitude&&Object(N.jsx)(Qe.a,{position:[a.latitude,a.longitude]})]})}var st=function(e){Object(x.a)(a,e);var t=Object(g.a)(a);function a(e,s){var r;return Object(f.a)(this,a),(r=t.call(this,e,s)).state={zoom:13},r}return Object(O.a)(a,[{key:"componentDidMount",value:function(){"workout"===this.props.dataType?this.props.loadWorkoutGpx(this.props.workout.id):this.props.loadSegmentGpx(this.props.workout.id,this.props.segmentId)}},{key:"componentDidUpdate",value:function(e){("workout"===this.props.dataType&&e.workout.id!==this.props.workout.id||"workout"===this.props.dataType&&"segment"===e.dataType)&&this.props.loadWorkoutGpx(this.props.workout.id),"segment"===this.props.dataType&&e.segmentId!==this.props.segmentId&&this.props.loadSegmentGpx(this.props.workout.id,this.props.segmentId)}},{key:"componentWillUnmount",value:function(){this.props.loadWorkoutGpx(null)}},{key:"render",value:function(){var e=this.props,t=e.coordinates,a=e.gpxContent,s=e.mapAttribution,r=e.workout,n=function(e){var t;if(e){var a=(new DOMParser).parseFromString(e,"text/xml");t=Oe.a.gpx(a)}return{jsonData:t}}(a).jsonData,o=[[r.bounds[0],r.bounds[1]],[r.bounds[2],r.bounds[3]]];return Object(N.jsx)("div",{children:n&&Object(N.jsx)(Ye.a,{zoom:this.state.zoom,bounds:o,boundsOptions:{padding:[10,10]},children:Object(N.jsx)(at,{bounds:o,coordinates:t,jsonData:n,mapAttribution:s})})})}}]),a}(n.a.Component),rt=Object(v.c)((function(e){return{gpxContent:e.gpx,mapAttribution:e.application.config.map_attribution}}),(function(e){return{loadWorkoutGpx:function(t){e(function(e){return function(t){if(e)return q.getData("workouts/".concat(e,"/gpx")).then((function(e){"success"===e.status?t(Te(e.data.gpx)):t(V("workouts|".concat(e.message)))})).catch((function(e){return t(V("workouts|".concat(e)))}));t(Te(null))}}(t))},loadSegmentGpx:function(t,a){e(function(e,t){return function(a){if(e)return q.getData("workouts/".concat(e,"/gpx/segment/").concat(t)).then((function(e){"success"===e.status?a(Te(e.data.gpx)):a(V("workouts|".concat(e.message)))})).catch((function(e){return a(V("workouts|".concat(e)))}));a(Te(null))}}(t,a))}}}))(st);function nt(e){var t=e.t;return Object(N.jsx)("div",{className:"workout-no-map text-center",children:t("workouts:No Map")})}function ot(e){var t=e.notes,a=e.t;return Object(N.jsx)("div",{className:"row",children:Object(N.jsx)("div",{className:"col",children:Object(N.jsx)("div",{className:"card workout-card",children:Object(N.jsxs)("div",{className:"card-body",children:["Notes",Object(N.jsx)("div",{className:"workout-notes",children:t||a("workouts:No notes")})]})})})})}function ct(e){var t=e.segments,a=e.t;return Object(N.jsx)("div",{className:"row",children:Object(N.jsx)("div",{className:"col",children:Object(N.jsx)("div",{className:"card workout-card",children:Object(N.jsxs)("div",{className:"card-body",children:[a("workouts:Segments"),Object(N.jsx)("div",{className:"workout-segments",children:Object(N.jsx)("ul",{children:t.map((function(e,t){return Object(N.jsxs)("li",{className:"workout-segments-list",children:[Object(N.jsxs)(ae.a,{to:"/workouts/".concat(e.workout_id,"/segment/").concat(t+1),children:[a("workouts:segment")," ",t+1]})," ","(",a("workouts:distance"),": ",e.distance," km,"," ",a("workouts:duration"),": ",e.duration,")"]},"segment-".concat(t))}))})})]})})})})}var it=function(e){Object(x.a)(a,e);var t=Object(g.a)(a);function a(e,s){var r;return Object(f.a)(this,a),(r=t.call(this,e,s)).state={displayModal:!1,coordinates:{latitude:null,longitude:null}},r}return Object(O.a)(a,[{key:"componentDidMount",value:function(){this.props.loadWorkout(this.props.match.params.workoutId)}},{key:"componentDidUpdate",value:function(e){e.match.params.workoutId!==this.props.match.params.workoutId&&this.props.loadWorkout(this.props.match.params.workoutId)}},{key:"displayModal",value:function(e){this.setState((function(t){return Object(S.a)(Object(S.a)({},t),{},{displayModal:e})}))}},{key:"updateCoordinates",value:function(e){var t=e&&e.length>0?{latitude:e[0].payload.latitude,longitude:e[0].payload.longitude}:{latitude:null,longitude:null};this.setState((function(e){return Object(S.a)(Object(S.a)({},e),{},{coordinates:t})}))}},{key:"render",value:function(){var e=this,t=this.props,a=t.message,s=t.onDeleteWorkout,r=t.sports,n=t.t,o=t.user,c=t.workouts,i=this.state,l=i.coordinates,d=i.displayModal,u=Object(he.a)(c,1)[0],m=u?u.title:n("workouts:Workout"),j=u?r.filter((function(e){return e.id===u.sport_id})):[],p=Object(he.a)(j,1)[0],h=parseInt(this.props.match.params.segmentId),b=h>=0?"segment":"workout";return Object(N.jsxs)("div",{className:"workout-page",children:[Object(N.jsx)(w.a,{children:Object(N.jsxs)("title",{children:["FitTrackee - ",m]})}),a?Object(N.jsx)(_,{message:a,t:n}):Object(N.jsxs)("div",{className:"container",children:[d&&Object(N.jsx)(He,{title:n("common:Confirmation"),text:n("workouts:Are you sure you want to delete this workout?"),confirm:function(){s(u.id),e.displayModal(!1)},close:function(){return e.displayModal(!1)}}),u&&p&&1===c.length&&Object(N.jsxs)("div",{children:[Object(N.jsx)("div",{className:"row",children:Object(N.jsx)("div",{className:"col",children:Object(N.jsxs)("div",{className:"card workout-card",children:[Object(N.jsx)("div",{className:"card-header",children:Object(N.jsx)(qe,{workout:u,dataType:b,segmentId:h,sport:p,t:n,title:m,user:o,displayModal:function(){return e.displayModal(!0)}})}),Object(N.jsx)("div",{className:"card-body",children:Object(N.jsxs)("div",{className:"row",children:[Object(N.jsx)("div",{className:"col-md-8",children:u.with_gpx?Object(N.jsx)(rt,{workout:u,coordinates:l,dataType:b,segmentId:h}):Object(N.jsx)(nt,{t:n})}),Object(N.jsx)("div",{className:"col",children:Object(N.jsx)(Ke,{workout:"workout"===b?u:u.segments[h-1],t:n})})]})})]})})}),u.with_gpx&&Object(N.jsx)("div",{className:"row",children:Object(N.jsx)("div",{className:"col",children:Object(N.jsx)("div",{className:"card workout-card",children:Object(N.jsx)("div",{className:"card-body",children:Object(N.jsx)("div",{className:"row",children:Object(N.jsxs)("div",{className:"col",children:[Object(N.jsx)("div",{className:"chart-title",children:n("workouts:Chart")}),Object(N.jsx)(Ve,{workout:u,dataType:b,segmentId:h,t:n,updateCoordinates:function(t){return e.updateCoordinates(t)}})]})})})})})}),"workout"===b&&Object(N.jsxs)(N.Fragment,{children:[Object(N.jsx)(ot,{notes:u.notes,t:n}),u.segments.length>1&&Object(N.jsx)(ct,{segments:u.segments,t:n})]})]})]})]})}}]),a}(n.a.Component),lt=Object(y.a)()(Object(v.c)((function(e){return{workouts:e.workouts.data,message:e.message,sports:e.sports.data,user:e.user}}),(function(e){return{loadWorkout:function(t){e(X("getData","workouts",{id:t}))},onDeleteWorkout:function(t){var a;e((a=t,function(e){return q.deleteData("workouts",a).then((function(t){var s;204===t.status?Promise.resolve(e((s=a,{type:"REMOVE_WORKOUT",workoutId:s}))).then((function(){return e(Ce())})).then((function(){return Ws.push("/")})):e(V("workouts|".concat(t.status)))})).catch((function(t){return e(V("workouts|".concat(t)))}))}))}}}))(it)),dt=function(e){Object(x.a)(a,e);var t=Object(g.a)(a);function a(){return Object(f.a)(this,a),t.apply(this,arguments)}return Object(O.a)(a,[{key:"componentDidMount",value:function(){this.props.loadWorkout(this.props.match.params.workoutId)}},{key:"render",value:function(){var e=this.props,t=e.message,a=e.sports,s=e.workouts,r=Object(he.a)(s,1)[0];return Object(N.jsx)("div",{children:a.length>0&&Object(N.jsx)(Ie,{workout:r,message:t,sports:a})})}}]),a}(n.a.Component),ut=Object(v.c)((function(e){return{workouts:e.workouts.data,message:e.message,sports:e.sports.data,user:e.user}}),(function(e){return{loadWorkout:function(t){e(X("getData","workouts",{id:t}))}}}))(dt);var mt=Object(v.c)((function(e){return{user:e.user}}))((function(){return Object(N.jsx)("div",{children:F()?Object(N.jsxs)(k.d,{children:[Object(N.jsx)(k.b,{exact:!0,path:"/workouts/add",component:We}),Object(N.jsx)(k.b,{exact:!0,path:"/workouts/:workoutId",component:lt}),Object(N.jsx)(k.b,{exact:!0,path:"/workouts/:workoutId/edit",component:ut}),Object(N.jsx)(k.b,{path:"/workouts/:workoutId/segment/:segmentId",component:lt}),Object(N.jsx)(k.b,{component:me})]}):Object(N.jsx)(k.a,{to:"/login"})})})),jt=function(e){Object(x.a)(a,e);var t=Object(g.a)(a);function a(){return Object(f.a)(this,a),t.apply(this,arguments)}return Object(O.a)(a,[{key:"render",value:function(){var e=this.props.t;return Object(N.jsx)("div",{className:"card text-center",children:Object(N.jsxs)("div",{className:"card-body",children:[e("common:No workouts.")," ",Object(N.jsx)(ae.a,{to:{pathname:"/workouts/add"},children:e("dashboard:Upload one !")})]})})}}]),a}(n.a.PureComponent),pt=function(e){Object(x.a)(a,e);var t=Object(g.a)(a);function a(){return Object(f.a)(this,a),t.apply(this,arguments)}return Object(O.a)(a,[{key:"render",value:function(){var e=this.props,t=e.loadWorkouts,a=e.sports,s=e.t,r=e.updateParams,n=Ne(a,s);return Object(N.jsx)("div",{className:"card",children:Object(N.jsx)("div",{className:"card-body workout-filter",children:Object(N.jsxs)("form",{onSubmit:function(e){return e.preventDefault()},children:[Object(N.jsxs)("div",{className:"form-group",children:[Object(N.jsxs)("label",{children:[s("workouts:From"),":",Object(N.jsx)("input",{className:"form-control col-md",name:"from",onChange:function(e){return r(e)},type:"date"})]}),Object(N.jsxs)("label",{children:[s("workouts:To"),":",Object(N.jsx)("input",{className:"form-control col-md",name:"to",onChange:function(e){return r(e)},type:"date"})]})]}),Object(N.jsx)("div",{className:"form-group",children:Object(N.jsxs)("label",{children:[s("common:Sport"),":",Object(N.jsxs)("select",{className:"form-control input-lg",name:"sport_id",onChange:function(e){return r(e)},children:[Object(N.jsx)("option",{value:""}),n.map((function(e){return Object(N.jsx)("option",{value:e.id,children:e.label},e.id)}))]})]})}),Object(N.jsx)("div",{className:"form-group",children:Object(N.jsxs)("label",{children:[s("workouts:Distance")," (km):",Object(N.jsx)("div",{className:"container",children:Object(N.jsxs)("div",{className:"row",children:[Object(N.jsx)("div",{className:"col-5",children:Object(N.jsx)("input",{className:"form-control",min:0,name:"distance_from",onChange:function(e){return r(e)},step:"1",type:"number"})}),Object(N.jsx)("div",{className:"col-2 align-middle text-center",children:s("common:to")}),Object(N.jsx)("div",{className:"col-5",children:Object(N.jsx)("input",{className:"form-control",min:0,name:"distance_to",onChange:function(e){return r(e)},step:"1",type:"number"})})]})})]})}),Object(N.jsx)("div",{className:"form-group",children:Object(N.jsxs)("label",{children:[s("workouts:Duration"),":",Object(N.jsx)("div",{className:"container",children:Object(N.jsxs)("div",{className:"row",children:[Object(N.jsx)("div",{className:"col-5",children:Object(N.jsx)("input",{className:"form-control",name:"duration_from",onChange:function(e){return r(e)},pattern:"^([0-9]*[0-9]):([0-5][0-9])$",placeholder:"hh:mm",type:"text"})}),Object(N.jsx)("div",{className:"col-2 align-middle text-center",children:s("common:to")}),Object(N.jsx)("div",{className:"col-5",children:Object(N.jsx)("input",{className:"form-control",name:"duration_to",onChange:function(e){return r(e)},pattern:"^([0-9]*[0-9]):([0-5][0-9])$",placeholder:"hh:mm",type:"text"})})]})})]})}),Object(N.jsx)("div",{className:"form-group",children:Object(N.jsxs)("label",{children:[s("workouts:Average speed")," (km/h):",Object(N.jsx)("div",{className:"container",children:Object(N.jsxs)("div",{className:"row",children:[Object(N.jsx)("div",{className:"col-5",children:Object(N.jsx)("input",{className:"form-control",min:0,name:"ave_speed_from",onChange:function(e){return r(e)},step:"1",type:"number"})}),Object(N.jsx)("div",{className:"col-2 align-middle text-center",children:s("common:to")}),Object(N.jsx)("div",{className:"col-5",children:Object(N.jsx)("input",{className:"form-control",min:0,name:"ave_speed_to",onChange:function(e){return r(e)},step:"1",type:"number"})})]})})]})}),Object(N.jsx)("div",{className:"form-group",children:Object(N.jsxs)("label",{children:[s("workouts:Max. speed")," (km/h):",Object(N.jsx)("div",{className:"container",children:Object(N.jsxs)("div",{className:"row",children:[Object(N.jsx)("div",{className:"col-5",children:Object(N.jsx)("input",{className:"form-control",min:0,name:"max_speed_from",onChange:function(e){return r(e)},step:"1",type:"number"})}),Object(N.jsx)("div",{className:"col-2 align-middle text-center",children:s("common:to")}),Object(N.jsx)("div",{className:"col-5",children:Object(N.jsx)("input",{className:"form-control",min:0,name:"max_speed_to",onChange:function(e){return r(e)},step:"1",type:"number"})})]})})]})}),Object(N.jsx)("input",{className:"btn btn-primary btn-lg btn-block",onClick:function(){return t()},type:"submit",value:s("workouts:Filter")})]})})})}}]),a}(n.a.PureComponent),ht=function(e){Object(x.a)(a,e);var t=Object(g.a)(a);function a(){return Object(f.a)(this,a),t.apply(this,arguments)}return Object(O.a)(a,[{key:"render",value:function(){var e=this.props,t=e.display,a=e.workout;return Object(N.jsxs)("div",{className:"workout-map".concat("list"===t?"-list":""),children:[Object(N.jsx)("img",{src:"".concat(T,"workouts/map/").concat(a.map,"?").concat(Date.now()),alt:"workout map"}),Object(N.jsxs)("div",{className:"map-attribution".concat("list"===t?"-list":""),children:[Object(N.jsx)("span",{className:"map-attribution-text",children:"\xa9"}),Object(N.jsx)("a",{className:"map-attribution-text",href:"http://www.openstreetmap.org/copyright",target:"_blank",rel:"noopener noreferrer",children:"OpenStreetMap"})]})]})}}]),a}(n.a.PureComponent),bt=function(e){Object(x.a)(a,e);var t=Object(g.a)(a);function a(){return Object(f.a)(this,a),t.apply(this,arguments)}return Object(O.a)(a,[{key:"render",value:function(){var e=this.props,t=e.loading,a=e.sports,s=e.t,r=e.user,n=e.workouts;return Object(N.jsx)("div",{className:"card workout-card",children:Object(N.jsxs)("div",{className:"card-body",children:[Object(N.jsxs)("table",{className:"table",children:[Object(N.jsx)("thead",{children:Object(N.jsxs)("tr",{children:[Object(N.jsx)("th",{scope:"col"}),Object(N.jsx)("th",{scope:"col",children:s("common:Workout")}),Object(N.jsx)("th",{scope:"col",children:s("workouts:Date")}),Object(N.jsx)("th",{scope:"col",children:s("workouts:Distance")}),Object(N.jsx)("th",{scope:"col",children:s("workouts:Duration")}),Object(N.jsx)("th",{scope:"col",children:s("workouts:Ave. speed")}),Object(N.jsx)("th",{scope:"col",children:s("workouts:Max. speed")})]})}),Object(N.jsx)("tbody",{children:!t&&a&&n.map((function(e,t){return Object(N.jsxs)("tr",{children:[Object(N.jsxs)("td",{children:[Object(N.jsx)("span",{className:"heading-span-absolute",children:s("common:Sport")}),Object(N.jsx)("img",{className:"workout-sport",src:a.filter((function(t){return t.id===e.sport_id})).map((function(e){return e.img})),alt:"workout sport logo"})]}),Object(N.jsxs)("td",{className:"workout-title",children:[Object(N.jsx)("span",{className:"heading-span-absolute",children:s("common:Workout")}),Object(N.jsx)(ae.a,{to:"/workouts/".concat(e.id),children:e.title}),e.map&&Object(N.jsx)(ht,{workout:e,display:"list"})]}),Object(N.jsxs)("td",{children:[Object(N.jsx)("span",{className:"heading-span-absolute",children:s("workouts:Date")}),Object(D.a)(U(e.workout_date,r.timezone),"dd/MM/yyyy HH:mm")]}),Object(N.jsxs)("td",{className:"text-right",children:[Object(N.jsx)("span",{className:"heading-span-absolute",children:s("workouts:Distance")}),Number(e.distance).toFixed(2)," km"]}),Object(N.jsxs)("td",{className:"text-right",children:[Object(N.jsx)("span",{className:"heading-span-absolute",children:s("workouts:Duration")}),e.moving]}),Object(N.jsxs)("td",{className:"text-right",children:[Object(N.jsx)("span",{className:"heading-span-absolute",children:s("workouts:Ave. speed")}),e.ave_speed," km/h"]}),Object(N.jsxs)("td",{className:"text-right",children:[Object(N.jsx)("span",{className:"heading-span-absolute",children:s("workouts:Max. speed")}),e.max_speed," km/h"]})]},t)}))})]}),t&&Object(N.jsx)("div",{className:"loader"})]})})}}]),a}(n.a.PureComponent),ft=function(e){Object(x.a)(a,e);var t=Object(g.a)(a);function a(e,s){var r;return Object(f.a)(this,a),(r=t.call(this,e,s)).state={params:{page:1,per_page:10}},r}return Object(O.a)(a,[{key:"componentDidMount",value:function(){this.props.loadWorkouts(this.state.params)}},{key:"setParams",value:function(e){var t=this.state.params;""===e.target.value?delete t[e.target.name]:t[e.target.name]=e.target.value,t.page=1,this.setState(t)}},{key:"render",value:function(){var e=this,t=this.props,a=t.loading,s=t.loadWorkouts,r=t.loadMoreWorkouts,n=t.message,o=t.sports,c=t.t,i=t.user,l=t.workouts,d=this.state.params,u=!(l.length>0)||null===l[l.length-1].previous_workout;return Object(N.jsxs)("div",{children:[Object(N.jsx)(w.a,{children:Object(N.jsxs)("title",{children:["FitTrackee - ",c("common:Workouts")]})}),n?Object(N.jsx)(_,{message:n,t:c}):Object(N.jsx)("div",{className:"container history",children:Object(N.jsxs)("div",{className:"row",children:[Object(N.jsx)("div",{className:"col-md-3",children:Object(N.jsx)(pt,{sports:o,loadWorkouts:function(){return s(d)},t:c,updateParams:function(t){return e.setParams(t)}})}),Object(N.jsxs)("div",{className:"col-md-9 workouts-result",children:[Object(N.jsx)(bt,{workouts:l,loading:a,sports:o,t:c,user:i}),!u&&Object(N.jsx)("input",{type:"submit",className:"btn btn-default btn-md btn-block",value:"Load more workouts",onClick:function(){d.page+=1,r(d),e.setState(d)}}),0===l.length&&Object(N.jsx)(jt,{t:c})]})]})})]})}}]),a}(n.a.Component),Ot=Object(y.a)()(Object(v.c)((function(e){return{workouts:e.workouts.data,loading:e.loading,message:e.message,sports:e.sports.data,user:e.user}}),(function(e){return{loadWorkouts:function(t){e(X("getData","workouts",t))},loadMoreWorkouts:function(t){e(Fe(t))}}}))(ft));var xt=Object(y.a)()(Object(v.c)((function(e){return{appConfig:e.application.config,pathname:e.router.location.pathname,message:e.message}}),(function(e){return{onDeletePicture:function(){e((function(e){return _e.deletePicture().then((function(t){return 204===t.status?e(Ee()):e(Se(t.message))})).catch((function(e){throw e}))}))},onUploadPicture:function(t){e(function(e){return function(t){e.preventDefault();var a=new FormData;return a.append("file",e.target.picture.files[0]),e.target.reset(),q.addDataWithFile("auth/picture",a).then((function(e){if("success"===e.status)return t(Ee());var a=413===e.status?"Error during picture update, file size exceeds max size.":e.message;return t(Se(a))})).catch((function(e){throw e}))}}(t))}}}))((function(e){var t=e.appConfig,a=e.displayModal,s=e.editable,r=e.isDeletable,n=e.message,o=e.onDeletePicture,c=e.onUploadPicture,i=e.pathname,l=e.t,d=e.user,u=d.created_at?Object(D.a)(new Date(d.created_at),"dd/MM/yyyy HH:mm"):"",m=d.birth_date?Object(D.a)(new Date(d.birth_date),"dd/MM/yyyy"):"",j=M(t.max_single_file_size);return Object(N.jsxs)("div",{children:[Object(N.jsx)(w.a,{children:Object(N.jsxs)("title",{children:["FitTrackee - ",l("user:Profile")]})}),Object(N.jsx)(_,{message:n,t:l}),Object(N.jsxs)("div",{className:"container",children:[Object(N.jsx)("h1",{className:"page-title",children:l("user:Profile")}),Object(N.jsx)("div",{className:"row",children:Object(N.jsx)("div",{className:"col-md-12",children:Object(N.jsxs)("div",{className:"card",children:[Object(N.jsx)("div",{className:"card-header userName",children:Object(N.jsx)("strong",{children:d.username})}),Object(N.jsxs)("div",{className:"card-body",children:[Object(N.jsxs)("div",{className:"row",children:[Object(N.jsxs)("div",{className:"col-md-8",children:[Object(N.jsxs)("p",{children:[Object(N.jsx)("span",{className:"user-label",children:l("user:Email")}),": ",d.email]}),Object(N.jsxs)("p",{children:[Object(N.jsx)("span",{className:"user-label",children:l("user:Registration Date")}),": ",u]}),Object(N.jsxs)("p",{children:[Object(N.jsx)("span",{className:"user-label",children:l("user:First Name")}),": ",d.first_name]}),Object(N.jsxs)("p",{children:[Object(N.jsx)("span",{className:"user-label",children:l("user:Last Name")}),": ",d.last_name]}),Object(N.jsxs)("p",{children:[Object(N.jsx)("span",{className:"user-label",children:l("user:Birth Date")}),": ",m]}),Object(N.jsxs)("p",{children:[Object(N.jsx)("span",{className:"user-label",children:l("user:Location")}),": ",d.location]}),Object(N.jsxs)("p",{children:[Object(N.jsx)("span",{className:"user-label",children:l("user:Bio")}),":"," ",d.bio]}),Object(N.jsxs)("p",{children:[Object(N.jsx)("span",{className:"user-label",children:l("user:Language")}),": ",d.language]}),Object(N.jsxs)("p",{children:[Object(N.jsx)("span",{className:"user-label",children:l("user:Timezone")}),": ",d.timezone]}),Object(N.jsxs)("p",{children:[Object(N.jsx)("span",{className:"user-label",children:l("user:First day of week")}),": ",d.weekm?l("user:Monday"):l("user:Sunday")]})]}),Object(N.jsxs)("div",{className:"col-md-4",children:[!0===d.picture&&Object(N.jsxs)("div",{children:[Object(N.jsx)("img",{alt:"Profile",src:"".concat(T,"users/").concat(d.username,"/picture")+"?".concat(Date.now()),className:"img-fluid App-profile-img-small"}),s&&Object(N.jsxs)(N.Fragment,{children:[Object(N.jsx)("br",{}),Object(N.jsx)("button",{type:"submit",onClick:function(){return o()},children:l("user:Delete picture")}),Object(N.jsx)("br",{}),Object(N.jsx)("br",{})]})]}),s&&Object(N.jsxs)("form",{encType:"multipart/form-data",onSubmit:function(e){return c(e)},children:[Object(N.jsx)("input",{type:"file",name:"picture",accept:".png,.jpg,.gif"}),Object(N.jsx)("br",{}),Object(N.jsx)("button",{type:"submit",children:l("user:Send")})," (max. size: ".concat(j,")")]})," "]})]}),s&&Object(N.jsx)("button",{className:"btn btn-primary",onClick:function(){return Ws.push("/profile/edit")},children:l("common:Edit")}),r&&Object(N.jsx)("button",{className:"btn btn-danger",onClick:function(){return a(!0)},children:l("user:Delete user account")}),Object(N.jsx)("button",{className:"btn btn-secondary",onClick:function(){return"/profile"===i?Ws.push("/"):Ws.go(-1)},children:l("/profile"===i?"common:Back to home":"common:Back")})]})]})})})]})]})})));var gt=Object(y.a)()(Object(v.c)((function(e){return{user:e.user}}))((function(e){var t=e.t,a=e.user;return Object(N.jsx)("div",{children:Object(N.jsx)(xt,{editable:!0,t:t,user:a})})}))),vt=a(902),kt=a(903),wt=a(904),yt=a(905),Nt=a(242),_t=a(247),St=a(906),Dt=a(907),Ct=a(113),Et=a(908),At=a(150);function Mt(e){var t=e.isDisabled,a=e.isMore,s=e.sportImg,r=e.workout;return Object(N.jsx)(ae.a,{className:"calendar-workout".concat(a),to:"/workouts/".concat(r.id),children:Object(N.jsxs)(N.Fragment,{children:[Object(N.jsx)("img",{alt:"workout sport logo",className:"workout-sport ".concat(t),src:s,title:r.title}),r.records.length>0&&Object(N.jsx)("sup",{children:Object(N.jsx)("i",{className:"fa fa-trophy custom-fa-small","aria-hidden":"true",title:r.records.map((function(e){return" ".concat(ge.filter((function(t){return t.record_type===e.record_type}))[0].label)}))})})]})})}var Tt=function(e){Object(x.a)(a,e);var t=Object(g.a)(a);function a(e,s){var r;return Object(f.a)(this,a),(r=t.call(this,e,s)).state={isHidden:!0},r}return Object(O.a)(a,[{key:"handleDisplayMore",value:function(){this.setState({isHidden:!this.state.isHidden})}},{key:"render",value:function(){var e=this,t=this.props,a=t.dayWorkouts,s=t.isDisabled,r=t.sports,n=this.state.isHidden;return Object(N.jsxs)("div",{children:[a.map((function(e){return Object(N.jsx)(Mt,{workout:e,isDisabled:s,isMore:"",sportImg:r.filter((function(t){return t.id===e.sport_id})).map((function(e){return e.img}))},e.id)})),a.length>2&&Object(N.jsx)("i",{className:"fa fa-".concat(n?"plus":"times"," calendar-more"),"aria-hidden":"true",onClick:function(){return e.handleDisplayMore()},title:"show more workouts"}),!n&&Object(N.jsx)("div",{className:"calendar-display-more",children:a.map((function(e){return Object(N.jsx)(Mt,{workout:e,isDisabled:s,isMore:"-more",sportImg:r.filter((function(t){return t.id===e.sport_id})).map((function(e){return e.img}))},e.id)}))})]})}}]),a}(n.a.Component),Pt=function(e,t){var a=Object(vt.a)(e),s=Object(kt.a)(e),r=t?1:0;return{start:Object(wt.a)(a,{weekStartsOn:r}),end:Object(yt.a)(s)}},zt=function(e){Object(x.a)(a,e);var t=Object(g.a)(a);function a(e,s){var r;Object(f.a)(this,a),r=t.call(this,e,s);var n=new Date;return r.state={currentMonth:n,startDate:Pt(n,e.weekm).start,endDate:Pt(n,e.weekm).end,weekStartOnMonday:e.weekm},r}return Object(O.a)(a,[{key:"componentDidMount",value:function(){this.props.loadMonthWorkouts(this.state.startDate,this.state.endDate)}},{key:"renderHeader",value:function(e){var t=this;return Object(N.jsxs)("div",{className:"header row flex-middle",children:[Object(N.jsx)("div",{className:"col col-start",onClick:function(){return t.handlePrevMonth()},children:Object(N.jsx)("i",{className:"fa fa-chevron-left","aria-hidden":"true"})}),Object(N.jsx)("div",{className:"col col-center",children:Object(N.jsx)("span",{children:Object(D.a)(this.state.currentMonth,"MMM yyyy",e)})}),Object(N.jsx)("div",{className:"col col-end",onClick:function(){return t.handleNextMonth()},children:Object(N.jsx)("i",{className:"fa fa-chevron-right","aria-hidden":"true"})})]})}},{key:"renderDays",value:function(e){for(var t=[],a=this.state.startDate,s=0;s<7;s++)t.push(Object(N.jsx)("div",{className:"col col-center",children:Object(D.a)(Object(Nt.a)(a,s),"EEE",e)},s));return Object(N.jsx)("div",{className:"days row",children:t})}},{key:"filterWorkouts",value:function(e){var t=this.props,a=t.workouts,s=t.user;return a?a.filter((function(t){return Object(_t.a)(U(t.workout_date,s.timezone),e)})).reverse():[]}},{key:"renderCells",value:function(){for(var e=this.state,t=e.currentMonth,a=e.startDate,s=e.endDate,r=e.weekStartOnMonday,n=this.props.sports,o=[],c=[],i=a,l="";i<=s;){for(var d=0;d<7;d++){l=Object(D.a)(i,"d");var u=this.filterWorkouts(i),m=Object(St.a)(i,t)?"":"-disabled",j=r?[5,6].includes(d):[0,6].includes(d);c.push(Object(N.jsx)("div",{className:"col cell ".concat(j?" weekend":"").concat(Object(Dt.a)(i)?" today":""),children:Object(N.jsxs)("div",{className:"img".concat(m),children:[Object(N.jsx)("span",{className:"number",children:l}),Object(N.jsx)(Tt,{dayWorkouts:u,isDisabled:m,sports:n})]})},i)),i=Object(Nt.a)(i,1)}o.push(Object(N.jsx)("div",{className:"row",children:c},i)),c=[]}return Object(N.jsx)("div",{className:"body",children:o})}},{key:"updateStateDate",value:function(e){var t=Pt(e,this.state.weekStartOnMonday),a=t.start,s=t.end;this.setState({currentMonth:e,startDate:a,endDate:s}),this.props.loadMonthWorkouts(a,s)}},{key:"handleNextMonth",value:function(){var e=Object(Ct.a)(this.state.currentMonth,1);this.updateStateDate(e)}},{key:"handlePrevMonth",value:function(){var e=Object(Et.a)(this.state.currentMonth,1);this.updateStateDate(e)}},{key:"render",value:function(){var e={locale:"fr"===this.props.language?At.fr:At.enGB};return Object(N.jsx)("div",{className:"card workout-card",children:Object(N.jsxs)("div",{className:"calendar",children:[this.renderHeader(e),this.renderDays(e),this.renderCells()]})})}}]),a}(n.a.Component),Ft=Object(v.c)((function(e){return{workouts:e.calendarWorkouts.data,language:e.language,sports:e.sports.data,user:e.user}}),(function(e){return{loadMonthWorkouts:function(t,a){var s,r,n="yyyy-MM-dd";e((s=Object(D.a)(t,n),r=Object(D.a)(a,n),function(e){return q.getData("workouts",{from:s,to:r,order:"desc",per_page:100}).then((function(t){"success"===t.status?e({type:"UPDATE_CALENDAR",workouts:t.data.workouts}):e(V("workouts|".concat(t.message)))})).catch((function(t){return e(V("workouts|".concat(t)))}))}))}}}))(zt);function Rt(e){var t=e.records,a=e.sports,s=e.t,r=e.user,n=Ne(a,s),o=t.reduce((function(e,t){var a=n.find((function(e){return e.id===t.sport_id}));return void 0===e[a.label]&&(e[a.label]={img:a.img,records:[]}),e[a.label].records.push(function(e,t){var a;switch(e.record_type){case"AS":case"MS":a="".concat(e.value," km/h");break;case"FD":a="".concat(e.value," km");break;default:a=e.value}var s=ge.filter((function(t){return t.record_type===e.record_type})),r=Object(he.a)(s,1)[0];return{workout_date:ve(U(e.workout_date,t)).workout_date,workout_id:e.workout_id,id:e.id,record_type:r.label,value:a}}(t,r.timezone)),e}),{});return Object(N.jsxs)("div",{className:"card workout-card",children:[Object(N.jsx)("div",{className:"card-header",children:s("workouts:Personal records")}),Object(N.jsx)("div",{className:"card-body",children:0===Object.keys(o).length?s("common:No records."):Object.keys(o).sort().map((function(e){return Object(N.jsxs)("div",{children:[Object(N.jsxs)("span",{className:"heading-span",children:[Object(N.jsx)("img",{alt:"".concat(e," logo"),className:"record-logo",src:o[e].img}),e]}),Object(N.jsxs)("table",{className:"table table-borderless table-sm record-table",children:[Object(N.jsx)("thead",{children:Object(N.jsx)("tr",{children:Object(N.jsxs)("th",{colSpan:"3",children:[Object(N.jsx)("img",{alt:"".concat(e," logo"),className:"record-logo",src:o[e].img}),e]})})}),Object(N.jsx)("tbody",{children:o[e].records.map((function(e){return Object(N.jsxs)("tr",{className:"record-tr",children:[Object(N.jsx)("td",{className:"record-td",children:s("workouts:".concat(e.record_type))}),Object(N.jsx)("td",{className:"record-td text-right",children:e.value}),Object(N.jsx)("td",{className:"record-td text-right",children:Object(N.jsx)(ae.a,{to:"/workouts/".concat(e.workout_id),children:e.workout_date})})]},e.id)}))})]})]},e)}))})]})}var Lt=a(243),Ut=a(909),It=[{duration:"week",dateFormat:"yyyy-MM-dd",xAxis:"dd/MM"},{duration:"month",dateFormat:"yyyy-MM",xAxis:"MM/yyyy"},{duration:"year",dateFormat:"yyyy",xAxis:"yyyy"}],Wt=function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],a="0";t&&(a=String(Math.floor(e/86400)),e%=86400);var s=String(Math.floor(e/3600)).padStart(2,"0");e%=3600;var r=String(Math.floor(e/60)).padStart(2,"0"),n=String(e%60).padStart(2,"0");return t?"".concat("0"===a?"":"".concat(a,"d:")).concat("00"===s?"":"".concat(s,"h:")).concat(r,"m:").concat(n,"s"):"".concat("00"===s?"":"".concat(s,":")).concat(r,":").concat(n)},Ht=function(e,t){return 0===t?"":"distance"===e?"".concat(t.toFixed(2)," km"):"duration"===e?Wt(t):t},qt=function(e,t){switch(e){case"week":return Object(Nt.a)(t,7);case"year":return Object(Lt.a)(t,1);case"month":default:return Object(Ct.a)(t,1)}},Bt=function(e,t,a,s,r){for(var n=[],o=[],c=[],i=function(r){var i=It.filter((function(e){return e.duration===a.duration})),l=Object(he.a)(i,1)[0],d=Object(D.a)(r,l.dateFormat),u=Object(D.a)(r,l.xAxis),m={date:u},j={date:u},p={date:u};e[d]&&Object.keys(e[d]).filter((function(e){return!s||s.includes(+e)})).map((function(a){var s=t.filter((function(e){return e.id===+a}))[0].label;return m[s]=e[d][a].nb_workouts,j[s]=e[d][a].total_distance,p[s]=e[d][a].total_duration,null})),n.push(m),o.push(j),c.push(p)},l=function(e,t,a){switch(e){case"week":return Object(wt.a)(t,{weekStartsOn:a?1:0});case"year":return Object(Ut.a)(t);case"month":default:return Object(vt.a)(t)}}(a.duration,a.start,r);l<=a.end;l=qt(a.duration,l))i(l);return{workouts:n,distance:o,duration:c}},Gt=function(e,t){return"duration"===e?Wt(t,!0):"distance"===e?t.toFixed(2):t};function Vt(e){if(e.active){var t=e.displayedData,a=e.payload,s=e.label,r=0;return a.map((function(e){return r+=e.value})),Object(N.jsxs)("div",{className:"custom-tooltip",children:[Object(N.jsx)("p",{className:"custom-tooltip-label",children:s}),a.map((function(e){return Object(N.jsxs)("p",{style:{color:e.fill},children:[e.name,": ",Gt(t,e.value)," ",e.unit]},e.name)})),a.length>0&&Object(N.jsxs)("p",{children:["Total: ",Gt(t,r)]})]})}return null}function Jt(e){var t=e.displayedData,a=e.x,s=e.y,r=e.width,n=e.value;if(!n)return null;var o=Ht(t,n);return Object(N.jsx)("g",{children:Object(N.jsx)("text",{x:a+r/2,y:s-10,fill:"#666",fontSize:"11",textAnchor:"middle",dominantBaseline:"middle",children:o})})}var Kt=function(e){Object(x.a)(a,e);var t=Object(g.a)(a);function a(e,s){var r;return Object(f.a)(this,a),(r=t.call(this,e,s)).state={displayedData:"distance"},r}return Object(O.a)(a,[{key:"handleRadioChange",value:function(e){this.setState({displayedData:e.target.name})}},{key:"render",value:function(){var e=this,t=this.state.displayedData,a=this.props,s=a.sports,r=a.stats,n=a.t;return 0===Object.keys(r).length?n("common:No workouts."):Object(N.jsxs)("div",{className:"chart-stats",children:[Object(N.jsxs)("div",{className:"row chart-radio",children:[Object(N.jsxs)("label",{className:"radioLabel col",children:[Object(N.jsx)("input",{type:"radio",name:"distance",checked:"distance"===t,onChange:function(t){return e.handleRadioChange(t)}}),n("statistics:distance")]}),Object(N.jsxs)("label",{className:"radioLabel col",children:[Object(N.jsx)("input",{type:"radio",name:"duration",checked:"duration"===t,onChange:function(t){return e.handleRadioChange(t)}}),n("statistics:duration")]}),Object(N.jsxs)("label",{className:"radioLabel col",children:[Object(N.jsx)("input",{type:"radio",name:"workouts",checked:"workouts"===t,onChange:function(t){return e.handleRadioChange(t)}}),n("statistics:workouts")]})]}),Object(N.jsx)(Be.f,{height:300,children:Object(N.jsxs)(Be.c,{data:r[t],margin:{top:15,bottom:0},children:[Object(N.jsx)(Be.h,{dataKey:"date",interval:0}),Object(N.jsx)(Be.i,{tickFormatter:function(e){return Ht(t,e)}}),Object(N.jsx)(Be.g,{content:Object(N.jsx)(Vt,{displayedData:t})}),s.map((function(e,a){return Object(N.jsx)(Be.b,{isAnimationActive:!1,dataKey:e.label,stackId:"a",fill:xe[a],label:a===s.length-1?Object(N.jsx)(Jt,{displayedData:t}):"",name:n("sports:".concat(e.label))},e.id)}))]})})]})}}]),a}(n.a.PureComponent),Yt=function(e){Object(x.a)(a,e);var t=Object(g.a)(a);function a(){return Object(f.a)(this,a),t.apply(this,arguments)}return Object(O.a)(a,[{key:"componentDidMount",value:function(){this.updateData()}},{key:"componentDidUpdate",value:function(e){(this.props.user.username&&this.props.user.username!==e.user.username||this.props.statsParams!==e.statsParams)&&this.updateData()}},{key:"updateData",value:function(){this.props.user.username&&this.props.loadWorkouts(this.props.user.username,this.props.user.weekm,this.props.statsParams)}},{key:"render",value:function(){var e=this.props,t=e.displayedSports,a=e.sports,s=e.statistics,r=e.statsParams,n=e.displayEmpty,o=e.t,c=e.user;if(!n&&0===Object.keys(s).length)return Object(N.jsx)("span",{children:o("common:No workouts.")});var i=Bt(s,a,r,t,c.weekm);return Object(N.jsx)(Kt,{sports:a,stats:i,t:o})}}]),a}(n.a.PureComponent),Xt=Object(v.c)((function(e){return{sports:e.sports.data,statistics:e.statistics.data,user:e.user}}),(function(e){return{loadWorkouts:function(t,a,s){var r="yyyy-MM-dd",n="week"===s.duration?"".concat(s.duration).concat(a?"m":""):s.duration,o={from:Object(D.a)(s.start,r),to:Object(D.a)(s.end,r),time:n};e(function(e,t,a){return function(s){return q.getData("stats/".concat(e,"/").concat(t),a).then((function(e){"success"===e.status?s(B("statistics",e.data)):s(V("statistics|".concat(e.message)))})).catch((function(e){return s(V("statistics|".concat(e)))}))}}(t,s.type,o))}}}))(Yt),$t=function(e){Object(x.a)(a,e);var t=Object(g.a)(a);function a(e,s){var r;Object(f.a)(this,a),r=t.call(this,e,s);var n=new Date;return r.state={start:Object(vt.a)(n),end:Object(kt.a)(n),duration:"week",type:"by_time"},r}return Object(O.a)(a,[{key:"render",value:function(){var e=this.props.t;return Object(N.jsxs)("div",{className:"card workout-card",children:[Object(N.jsx)("div",{className:"card-header",children:e("dashboard:This month")}),Object(N.jsx)("div",{className:"card-body",children:Object(N.jsx)(Xt,{displayEmpty:!1,statsParams:this.state,t:e})})]})}}]),a}(n.a.Component);function Zt(e){var t=e.t,a=e.user,s=a.total_duration.match(/day/g)?"".concat(a.total_duration.split(" ")[0]," ").concat(a.total_duration.match(/days/g)?t("common:days"):t("common:day")):"0 ".concat(t("common:days"),","),r=a.total_duration.match(/day/g)?a.total_duration.split(", ")[1]:a.total_duration;return r="".concat(r.split(":")[0],"h ").concat(r.split(":")[1],"min"),Object(N.jsxs)("div",{className:"row",children:[Object(N.jsx)("div",{className:"col-lg-3 col-md-6 col-sm-6",children:Object(N.jsx)("div",{className:"card workout-card",children:Object(N.jsxs)("div",{className:"card-body row",children:[Object(N.jsx)("div",{className:"col-3",children:Object(N.jsx)("i",{className:"fa fa-calendar fa-3x fa-color"})}),Object(N.jsxs)("div",{className:"col-9 text-right",children:[Object(N.jsx)("div",{className:"huge",children:a.nb_workouts}),Object(N.jsx)("div",{children:"".concat(1===a.nb_workouts?t("common:workout"):t("common:workouts"))})]})]})})}),Object(N.jsx)("div",{className:"col-lg-3 col-md-6 col-sm-6",children:Object(N.jsx)("div",{className:"card workout-card",children:Object(N.jsxs)("div",{className:"card-body row",children:[Object(N.jsx)("div",{className:"col-3",children:Object(N.jsx)("i",{className:"fa fa-road fa-3x fa-color"})}),Object(N.jsxs)("div",{className:"col-9 text-right",children:[Object(N.jsx)("div",{className:"huge",children:Number(a.total_distance).toFixed(2)}),Object(N.jsx)("div",{children:"km"})]})]})})}),Object(N.jsx)("div",{className:"col-lg-3 col-md-6 col-sm-6",children:Object(N.jsx)("div",{className:"card workout-card",children:Object(N.jsxs)("div",{className:"card-body row",children:[Object(N.jsx)("div",{className:"col-3",children:Object(N.jsx)("i",{className:"fa fa-clock-o fa-3x fa-color"})}),Object(N.jsxs)("div",{className:"col-9 text-right",children:[Object(N.jsx)("div",{className:"huge",children:s}),Object(N.jsx)("div",{children:r})]})]})})}),Object(N.jsx)("div",{className:"col-lg-3 col-md-6 col-sm-6",children:Object(N.jsx)("div",{className:"card workout-card",children:Object(N.jsxs)("div",{className:"card-body row",children:[Object(N.jsx)("div",{className:"col-3",children:Object(N.jsx)("i",{className:"fa fa-tags fa-3x fa-color"})}),Object(N.jsxs)("div",{className:"col-9 text-right",children:[Object(N.jsx)("div",{className:"huge",children:a.nb_sports}),Object(N.jsx)("div",{children:"".concat(1===a.nb_sports?t("common:sport"):t("common:sports"))})]})]})})})]})}function Qt(e){var t=e.sports,a=e.t,s=e.user,r=e.workout;return Object(N.jsxs)("div",{className:"card workout-card text-center",children:[Object(N.jsx)("div",{className:"card-header",children:Object(N.jsxs)(ae.a,{to:"/workouts/".concat(r.id),children:[t.filter((function(e){return e.id===r.sport_id})).map((function(e){return a("sports:".concat(e.label))}))," ","-"," ",Object(D.a)(U(r.workout_date,s.timezone),"dd/MM/yyyy HH:mm")]})}),Object(N.jsx)("div",{className:"card-body",children:Object(N.jsxs)("div",{className:"row",children:[r.map&&Object(N.jsx)("div",{className:"col",children:Object(N.jsx)(ht,{workout:r})}),Object(N.jsx)("div",{className:"col",children:Object(N.jsxs)("p",{children:[Object(N.jsx)("i",{className:"fa fa-clock-o","aria-hidden":"true"})," ",a("workouts:Duration"),": ",r.moving,r.map?Object(N.jsxs)("span",{children:[Object(N.jsx)("br",{}),Object(N.jsx)("br",{})]}):" - ",Object(N.jsx)("i",{className:"fa fa-road","aria-hidden":"true"})," ",a("workouts:Distance"),": ",r.distance," km"]})})]})})]})}var ea=function(e){Object(x.a)(a,e);var t=Object(g.a)(a);function a(e,s){var r;return Object(f.a)(this,a),(r=t.call(this,e,s)).state={page:1},r}return Object(O.a)(a,[{key:"componentDidMount",value:function(){this.props.loadWorkouts()}},{key:"render",value:function(){var e=this,t=this.props,a=t.loadMoreWorkouts,s=t.message,r=t.records,n=t.sports,o=t.t,c=t.user,i=t.workouts,l=!(i.length>0)||null===i[i.length-1].previous_workout,d=this.state.page;return Object(N.jsxs)("div",{children:[Object(N.jsx)(w.a,{children:Object(N.jsxs)("title",{children:["FitTrackee - ",o("common:Dashboard")]})}),s?Object(N.jsx)(_,{message:s,t:o}):i&&c.total_duration&&n.length>0&&Object(N.jsxs)("div",{className:"container dashboard",children:[Object(N.jsx)(Zt,{user:c,t:o}),Object(N.jsxs)("div",{className:"row",children:[Object(N.jsxs)("div",{className:"col-md-4",children:[Object(N.jsx)($t,{t:o}),Object(N.jsx)(Rt,{t:o,records:r,sports:n,user:c})]}),Object(N.jsxs)("div",{className:"col-md-8",children:[Object(N.jsx)(Ft,{weekm:c.weekm}),i.length>0?i.map((function(e){return Object(N.jsx)(Qt,{workout:e,sports:n,t:o,user:c},e.id)})):Object(N.jsx)(jt,{t:o}),!l&&Object(N.jsx)("input",{type:"submit",className:"btn btn-default btn-md btn-block",value:"Load more workouts",onClick:function(){a(d+1),e.setState({page:d+1})}})]})]})]})]})}}]),a}(n.a.Component),ta=Object(y.a)()(Object(v.c)((function(e){return{workouts:e.workouts.data,message:e.message,records:e.records.data,sports:e.sports.data,user:e.user}}),(function(e){return{loadWorkouts:function(){e(X("getData","workouts",{page:1})),e(X("getData","records"))},loadMoreWorkouts:function(t){e(Fe({page:t}))}}}))(ea));function aa(){return Object(N.jsx)("footer",{className:"footer",children:Object(N.jsxs)("div",{className:"container",children:[Object(N.jsx)("strong",{children:"FitTrackee"})," v","0.4.7"," -"," ",Object(N.jsx)("a",{href:"https://github.com/SamR1/FitTrackee",target:"_blank",rel:"noopener noreferrer",children:"source code"})," ","under"," ",Object(N.jsx)("a",{href:"https://choosealicense.com/licenses/gpl-3.0/",target:"_blank",rel:"noopener noreferrer",children:"GPLv3"})," ","license -"," ",Object(N.jsx)("a",{href:"https://samr1.github.io/FitTrackee/",target:"_blank",rel:"noopener noreferrer",children:"documentation"})]})})}var sa,ra,na,oa,ca,ia,la,da,ua,ma,ja,pa,ha,ba=function(e){Object(x.a)(a,e);var t=Object(g.a)(a);function a(){return Object(f.a)(this,a),t.apply(this,arguments)}return Object(O.a)(a,[{key:"componentDidMount",value:function(){this.props.UserLogout()}},{key:"render",value:function(){return Object(N.jsx)("div",{className:"container dashboard",children:Object(N.jsxs)("div",{className:"row",children:[Object(N.jsx)("div",{className:"col-2"}),Object(N.jsx)("div",{className:"card col-8",children:Object(N.jsx)("div",{className:"card-body",children:Object(N.jsx)("div",{className:"text-center",children:Object(N.jsxs)(pe.a,{i18nKey:"user:loggedOut",children:["You are now logged out. Click ",Object(N.jsx)(ae.a,{to:"/login",children:"here"})," to log back in."]})})})}),Object(N.jsx)("div",{className:"col-2"})]})})}}]),a}(n.a.Component),fa=Object(v.c)((function(e){return{user:e.user}}),(function(e){return{UserLogout:function(){e({type:"LOGOUT"})}}}))(ba);function Oa(){return(Oa=Object.assign||function(e){for(var t=1;t=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(s=0;s=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}function ga(e,t){var a=e.title,s=e.titleId,n=xa(e,["title","titleId"]);return r.createElement("svg",Oa({id:"Capa_1",enableBackground:"new 0 0 512 512",height:512,viewBox:"0 0 512 512",width:512,xmlns:"http://www.w3.org/2000/svg",ref:t,"aria-labelledby":s},n),a?r.createElement("title",{id:s},a):null,sa||(sa=r.createElement("path",{d:"m466.916 27.803h-421.832c-24.859 0-45.084 20.225-45.084 45.084v366.226c0 24.859 20.225 45.084 45.084 45.084h421.832c24.859 0 45.084-20.225 45.084-45.084v-366.226c0-24.859-20.225-45.084-45.084-45.084z",fill:"#f0f9ff"})),ra||(ra=r.createElement("path",{d:"m198.58 188.334-181.344-150.862c-7.75 6.107-13.456 14.691-15.905 24.554l164.142 136.551h33.102z",fill:"#f40055"})),na||(na=r.createElement("path",{d:"m313.425 198.576h33.93l163.447-135.973c-2.325-9.923-7.93-18.592-15.613-24.796l-181.764 151.211z",fill:"#c20044"})),oa||(oa=r.createElement("path",{d:"m165.472 313.425-164.141 136.549c2.449 9.863 8.155 18.447 15.905 24.553l181.344-150.861-.005-10.241z",fill:"#f40055"})),ca||(ca=r.createElement("path",{d:"m313.425 313.425v9.557l181.765 151.211c7.683-6.204 13.288-14.874 15.613-24.796l-163.446-135.971z",fill:"#c20044"})),ia||(ia=r.createElement("path",{d:"m53.273 27.803 145.302 120.879v-120.879z",fill:"#406bd4"})),la||(la=r.createElement("path",{d:"m313.425 150.571v-122.768h148.082z",fill:"#3257b0"})),da||(da=r.createElement("path",{d:"m394.732 198.575 117.268-97.556v97.556z",fill:"#3257b0"})),ua||(ua=r.createElement("g",{fill:"#406bd4"},r.createElement("path",{d:"m0 99.317v99.258h119.313z"}),r.createElement("path",{d:"m0 313.425v97.699l117.44-97.699z"}),r.createElement("path",{d:"m50.49 484.197 148.085-122.676v122.676z"}))),ma||(ma=r.createElement("path",{d:"m313.425 484.197v-124.139l149.221 124.139z",fill:"#3257b0"})),ja||(ja=r.createElement("path",{d:"m512 409.423-115.395-95.998h115.395z",fill:"#3257b0"})),pa||(pa=r.createElement("path",{d:"m512 222.142h-222.142v-194.339h-67.716v194.339h-222.142v67.716h222.142v194.339h67.716v-194.339h222.142z",fill:"#f40055"})),ha||(ha=r.createElement("path",{d:"m289.858 222.142v-194.339h-33.858v456.394h33.858v-194.339h222.142v-67.716z",fill:"#c20044"})))}var va,ka,wa,ya,Na=r.forwardRef(ga);a.p;function _a(){return(_a=Object.assign||function(e){for(var t=1;t=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(s=0;s=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}function Da(e,t){var a=e.title,s=e.titleId,n=Sa(e,["title","titleId"]);return r.createElement("svg",_a({id:"Capa_1",enableBackground:"new 0 0 512 512",height:512,viewBox:"0 0 512 512",width:512,xmlns:"http://www.w3.org/2000/svg",ref:t,"aria-labelledby":s},n),a?r.createElement("title",{id:s},a):null,va||(va=r.createElement("path",{d:"m173.899 31.804h-8.707l-4.397-4h-115.711c-24.859-.001-45.084 20.224-45.084 45.083v366.226c0 24.859 20.225 45.084 45.084 45.084h115.711l6.348-4h6.755v-448.393z",fill:"#406bd4"})),ka||(ka=r.createElement("path",{d:"m466.916 27.803h-115.711l-4.523 4h-5.141v448.393h4.141l5.523 4h115.711c24.859 0 45.084-20.225 45.084-45.084v-366.225c0-24.859-20.225-45.084-45.084-45.084z",fill:"#c20044"})),wa||(wa=r.createElement("path",{d:"m160.795 27.803h190.409v456.394h-190.409z",fill:"#f0f9ff"})),ya||(ya=r.createElement("path",{d:"m256 27.803h95.205v456.394h-95.205z",fill:"#cee5f5"})))}var Ca,Ea,Aa,Ma,Ta,Pa,za,Fa=r.forwardRef(Da),Ra=(a.p,[{name:"en",selected:!0,flag:Object(N.jsx)(Na,{})},{name:"fr",selected:!1,flag:Object(N.jsx)(Fa,{})}]),La=function(e){Object(x.a)(a,e);var t=Object(g.a)(a);function a(e){var s;return Object(f.a)(this,a),(s=t.call(this,e)).state={isOpen:!1},s}return Object(O.a)(a,[{key:"toggleDropdown",value:function(){this.setState((function(e){return{isOpen:!e.isOpen}}))}},{key:"render",value:function(){var e=this,t=this.state.isOpen,a=this.props,s=a.language,r=a.onUpdateLanguage;return Object(N.jsx)("div",{className:"dropdown-wrapper",onClick:function(){return e.toggleDropdown()},children:Object(N.jsx)("ul",{className:"dropdown-list i18n-flag",children:Ra.filter((function(e){return t?e:e.name===s})).map((function(e){return Object(N.jsxs)("li",{className:"dropdown-item".concat(e.name===s&&t?" dropdown-item-selected":""),onClick:function(){return r(e.name,s)},children:[e.flag," ",e.name]},e.name)}))})})}}]),a}(r.Component),Ua=Object(v.c)((function(e){return{language:e.language}}),(function(e){return{onUpdateLanguage:function(t,a){t!==a&&e($(t))}}}))(La),Ia=function(e){Object(x.a)(a,e);var t=Object(g.a)(a);function a(){return Object(f.a)(this,a),t.apply(this,arguments)}return Object(O.a)(a,[{key:"render",value:function(){var e=this.props,t=e.admin,a=e.isAuthenticated,s=e.picture,r=e.t,n=e.username;return Object(N.jsx)("header",{children:Object(N.jsx)("nav",{className:"navbar navbar-expand-lg navbar-light bg-light",children:Object(N.jsxs)("div",{className:"container",children:[Object(N.jsx)("span",{className:"navbar-brand",children:"FitTrackee"}),Object(N.jsx)("button",{className:"navbar-toggler",type:"button","data-toggle":"collapse","data-target":"#navbarSupportedContent","aria-controls":"navbarSupportedContent","aria-expanded":"false","aria-label":"Toggle navigation",children:Object(N.jsx)("span",{className:"navbar-toggler-icon"})}),Object(N.jsxs)("div",{className:"collapse navbar-collapse",id:"navbarSupportedContent",children:[Object(N.jsxs)("ul",{className:"navbar-nav mr-auto",children:[Object(N.jsx)("li",{className:"nav-item",children:Object(N.jsx)(ae.a,{className:"nav-link",to:{pathname:"/"},children:r("common:Dashboard")})}),a&&Object(N.jsx)("li",{className:"nav-item",children:Object(N.jsx)(ae.a,{className:"nav-link",to:{pathname:"/workouts/history"},children:r("Workouts")})}),a&&Object(N.jsx)("li",{className:"nav-item",children:Object(N.jsx)(ae.a,{className:"nav-link",to:{pathname:"/workouts/statistics"},children:r("common:Statistics")})}),t&&Object(N.jsx)("li",{className:"nav-item",children:Object(N.jsx)(ae.a,{className:"nav-link",to:{pathname:"/admin"},children:"Admin"})}),a&&Object(N.jsx)("li",{className:"nav-item",children:Object(N.jsx)(ae.a,{className:"nav-link",to:{pathname:"/workouts/add"},children:Object(N.jsx)("strong",{children:r("common:Add workout")})})})]}),Object(N.jsxs)("ul",{className:"navbar-nav flex-row ml-md-auto d-none d-md-flex",children:[!a&&Object(N.jsx)("li",{className:"nav-item",children:Object(N.jsx)(ae.a,{className:"nav-link",to:{pathname:"/register"},children:r("user:Register")})}),!a&&Object(N.jsx)("li",{className:"nav-item",children:Object(N.jsx)(ae.a,{className:"nav-link",to:{pathname:"/login"},children:r("user:Login")})}),a&&Object(N.jsxs)(N.Fragment,{children:[!0===s?Object(N.jsx)("img",{alt:"Avatar",src:"".concat(T,"users/").concat(n,"/picture?").concat(Date.now()),className:"img-fluid App-nav-profile-img"}):Object(N.jsx)("i",{className:"fa fa-user-circle-o fa-2x no-picture","aria-hidden":"true"}),Object(N.jsx)("li",{className:"nav-item",children:Object(N.jsx)(ae.a,{className:"nav-link",to:{pathname:"/profile"},children:n})}),Object(N.jsx)("li",{className:"nav-item",children:Object(N.jsx)(ae.a,{className:"nav-link",to:{pathname:"/logout"},children:r("user:Logout")})})]}),Object(N.jsx)("li",{children:Object(N.jsx)(Ua,{})})]})]})]})})})}}]),a}(n.a.PureComponent),Wa=Object(y.a)()(Object(v.c)((function(e){var t=e.user;return{admin:t.admin,isAuthenticated:t.isAuthenticated,picture:t.picture,username:t.username}}))(Ia));function Ha(){return(Ha=Object.assign||function(e){for(var t=1;t=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(s=0;s=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}function Ba(e,t){var a=e.title,s=e.titleId,n=qa(e,["title","titleId"]);return r.createElement("svg",Ha({id:"Layer_1",xmlns:"http://www.w3.org/2000/svg",xmlnsXlink:"http://www.w3.org/1999/xlink",x:"0px",y:"0px",viewBox:"0 0 512.001 512.001",style:{enableBackground:"new 0 0 512.001 512.001"},xmlSpace:"preserve",ref:t,"aria-labelledby":s},n),a?r.createElement("title",{id:s},a):null,Ca||(Ca=r.createElement("g",null,r.createElement("g",null,r.createElement("path",{d:"M468.683,287.265h-69.07c-4.147,0-7.508,3.361-7.508,7.508c0,4.147,3.361,7.508,7.508,7.508h69.07 c4.147,0,7.508-3.361,7.508-7.508C476.191,290.626,472.83,287.265,468.683,287.265z"})))),Ea||(Ea=r.createElement("g",null,r.createElement("g",null,r.createElement("path",{d:"M105.012,268.377L85.781,256l19.231-12.376c3.487-2.243,4.495-6.888,2.251-10.376c-2.244-3.486-6.888-4.497-10.376-2.25 l-17.471,11.243v-20.776c0-4.147-3.361-7.508-7.508-7.508c-4.147,0-7.508,3.361-7.508,7.508v20.775l-17.47-11.243 c-3.486-2.245-8.132-1.238-10.376,2.25c-2.245,3.487-1.237,8.133,2.25,10.376L58.034,256l-19.231,12.376 c-3.487,2.244-4.495,6.889-2.25,10.376c1.435,2.23,3.852,3.446,6.32,3.446c1.391,0,2.799-0.386,4.056-1.196l17.47-11.243v20.775 c0,4.147,3.361,7.508,7.508,7.508c4.147,0,7.508-3.361,7.508-7.508V269.76l17.471,11.243c1.257,0.809,2.664,1.196,4.056,1.196 c2.467,0,4.885-1.216,6.32-3.446C109.507,275.266,108.499,270.62,105.012,268.377z"})))),Aa||(Aa=r.createElement("g",null,r.createElement("g",null,r.createElement("path",{d:"M194.441,268.377L175.21,256l19.231-12.376c3.487-2.244,4.495-6.889,2.25-10.376c-2.245-3.486-6.888-4.497-10.376-2.25 l-17.47,11.243v-20.775c0-4.147-3.361-7.508-7.508-7.508c-4.147,0-7.508,3.361-7.508,7.508v20.776l-17.471-11.243 c-3.487-2.245-8.133-1.238-10.376,2.25c-2.245,3.487-1.237,8.133,2.25,10.376L147.463,256l-19.231,12.376 c-3.487,2.244-4.495,6.889-2.25,10.376c1.435,2.23,3.852,3.446,6.32,3.446c1.391,0,2.799-0.386,4.056-1.196l17.471-11.243v20.776 c0,4.147,3.361,7.508,7.508,7.508c4.147,0,7.508-3.361,7.508-7.508V269.76l17.47,11.243c1.257,0.809,2.664,1.196,4.056,1.196 c2.467,0,4.885-1.216,6.32-3.446C198.936,275.266,197.928,270.62,194.441,268.377z"})))),Ma||(Ma=r.createElement("g",null,r.createElement("g",null,r.createElement("path",{d:"M283.871,268.377L264.64,256l19.231-12.376c3.487-2.243,4.495-6.888,2.251-10.376c-2.245-3.486-6.888-4.497-10.376-2.25 l-17.471,11.243v-20.775c0-4.147-3.361-7.508-7.508-7.508c-4.147,0-7.508,3.361-7.508,7.508v20.775l-17.471-11.243 c-3.486-2.245-8.134-1.238-10.376,2.25c-2.245,3.487-1.237,8.133,2.25,10.376L236.892,256l-19.231,12.376 c-3.487,2.244-4.495,6.889-2.25,10.376c1.435,2.23,3.852,3.446,6.32,3.446c1.391,0,2.799-0.386,4.056-1.196l17.471-11.243v20.775 c0,4.147,3.361,7.508,7.508,7.508c4.147,0,7.508-3.361,7.508-7.508V269.76l17.471,11.243c1.257,0.809,2.664,1.196,4.056,1.196 c2.467,0,4.886-1.216,6.32-3.446C288.366,275.266,287.358,270.62,283.871,268.377z"})))),Ta||(Ta=r.createElement("g",null,r.createElement("g",null,r.createElement("path",{d:"M373.3,268.377L354.069,256l19.231-12.376c3.487-2.244,4.495-6.889,2.25-10.376c-2.244-3.486-6.888-4.497-10.376-2.25 l-17.471,11.243v-20.776c0-4.147-3.361-7.508-7.508-7.508c-4.147,0-7.508,3.361-7.508,7.508v20.775l-17.47-11.243 c-3.486-2.245-8.132-1.238-10.376,2.25c-2.245,3.487-1.237,8.133,2.25,10.376L326.322,256l-19.231,12.376 c-3.487,2.244-4.495,6.889-2.25,10.376c1.435,2.23,3.852,3.446,6.32,3.446c1.391,0,2.799-0.386,4.056-1.196l17.47-11.243v20.776 c0,4.147,3.361,7.508,7.508,7.508c4.147,0,7.508-3.361,7.508-7.508V269.76l17.471,11.243c1.257,0.809,2.664,1.196,4.056,1.196 c2.467,0,4.885-1.216,6.32-3.446C377.795,275.266,376.787,270.62,373.3,268.377z"})))),Pa||(Pa=r.createElement("g",null,r.createElement("g",null,r.createElement("path",{d:"M271.792,330.359H15.016V181.642h93.1c4.147,0,7.508-3.361,7.508-7.508c0-4.147-3.361-7.508-7.508-7.508H12.513 C5.613,166.626,0,172.24,0,179.14v153.722c0,6.9,5.613,12.513,12.513,12.513h259.278c4.147,0,7.508-3.361,7.508-7.508 C279.299,333.72,275.939,330.359,271.792,330.359z"})))),za||(za=r.createElement("g",null,r.createElement("g",null,r.createElement("path",{d:"M499.487,166.626H162.174c-4.147,0-7.508,3.361-7.508,7.508c0,4.147,3.361,7.508,7.508,7.508h334.811v148.716H323.848 c-4.147,0-7.508,3.361-7.508,7.508c0,4.147,3.361,7.508,7.508,7.508h175.64c6.9,0,12.513-5.613,12.513-12.513V179.14 C512.001,172.24,506.387,166.626,499.487,166.626z"})))))}var Ga,Va=r.forwardRef(Ba);a.p;function Ja(){return(Ja=Object.assign||function(e){for(var t=1;t=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(s=0;s=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}function Ya(e,t){var a=e.title,s=e.titleId,n=Ka(e,["title","titleId"]);return r.createElement("svg",Ja({id:"Capa_1",xmlns:"http://www.w3.org/2000/svg",xmlnsXlink:"http://www.w3.org/1999/xlink",x:"0px",y:"0px",viewBox:"0 0 345.834 345.834",style:{enableBackground:"new 0 0 345.834 345.834"},xmlSpace:"preserve",ref:t,"aria-labelledby":s},n),a?r.createElement("title",{id:s},a):null,Ga||(Ga=r.createElement("g",null,r.createElement("path",{d:"M339.798,260.429c0.13-0.026,0.257-0.061,0.385-0.094c0.109-0.028,0.219-0.051,0.326-0.084 c0.125-0.038,0.247-0.085,0.369-0.129c0.108-0.039,0.217-0.074,0.324-0.119c0.115-0.048,0.226-0.104,0.338-0.157 c0.109-0.052,0.22-0.1,0.327-0.158c0.107-0.057,0.208-0.122,0.312-0.184c0.107-0.064,0.215-0.124,0.319-0.194 c0.111-0.074,0.214-0.156,0.321-0.236c0.09-0.067,0.182-0.13,0.27-0.202c0.162-0.133,0.316-0.275,0.466-0.421 c0.027-0.026,0.056-0.048,0.083-0.075c0.028-0.028,0.052-0.059,0.079-0.088c0.144-0.148,0.284-0.3,0.416-0.46 c0.077-0.094,0.144-0.192,0.216-0.289c0.074-0.1,0.152-0.197,0.221-0.301c0.074-0.111,0.139-0.226,0.207-0.34 c0.057-0.096,0.118-0.19,0.171-0.289c0.062-0.115,0.114-0.234,0.169-0.351c0.049-0.104,0.101-0.207,0.146-0.314 c0.048-0.115,0.086-0.232,0.128-0.349c0.041-0.114,0.085-0.227,0.12-0.343c0.036-0.118,0.062-0.238,0.092-0.358 c0.029-0.118,0.063-0.234,0.086-0.353c0.028-0.141,0.045-0.283,0.065-0.425c0.014-0.1,0.033-0.199,0.043-0.3 c0.025-0.249,0.038-0.498,0.038-0.748V92.76c0-4.143-3.357-7.5-7.5-7.5h-236.25c-0.066,0-0.13,0.008-0.196,0.01 c-0.143,0.004-0.285,0.01-0.427,0.022c-0.113,0.009-0.225,0.022-0.337,0.037c-0.128,0.016-0.255,0.035-0.382,0.058 c-0.119,0.021-0.237,0.046-0.354,0.073c-0.119,0.028-0.238,0.058-0.356,0.092c-0.117,0.033-0.232,0.069-0.346,0.107 c-0.117,0.04-0.234,0.082-0.349,0.128c-0.109,0.043-0.216,0.087-0.322,0.135c-0.118,0.053-0.235,0.11-0.351,0.169 c-0.099,0.051-0.196,0.103-0.292,0.158c-0.116,0.066-0.23,0.136-0.343,0.208c-0.093,0.06-0.184,0.122-0.274,0.185 c-0.106,0.075-0.211,0.153-0.314,0.235c-0.094,0.075-0.186,0.152-0.277,0.231c-0.09,0.079-0.179,0.158-0.266,0.242 c-0.099,0.095-0.194,0.194-0.288,0.294c-0.047,0.05-0.097,0.094-0.142,0.145c-0.027,0.03-0.048,0.063-0.074,0.093 c-0.094,0.109-0.182,0.223-0.27,0.338c-0.064,0.084-0.13,0.168-0.19,0.254c-0.078,0.112-0.15,0.227-0.222,0.343 c-0.059,0.095-0.12,0.189-0.174,0.286c-0.063,0.112-0.118,0.227-0.175,0.342c-0.052,0.105-0.106,0.21-0.153,0.317 c-0.049,0.113-0.092,0.23-0.135,0.345c-0.043,0.113-0.087,0.225-0.124,0.339c-0.037,0.115-0.067,0.232-0.099,0.349 c-0.032,0.12-0.066,0.239-0.093,0.36c-0.025,0.113-0.042,0.228-0.062,0.342c-0.022,0.13-0.044,0.26-0.06,0.39 c-0.013,0.108-0.019,0.218-0.027,0.328c-0.01,0.14-0.019,0.28-0.021,0.421c-0.001,0.041-0.006,0.081-0.006,0.122v46.252 c0,4.143,3.357,7.5,7.5,7.5s7.5-3.357,7.5-7.5v-29.595l66.681,59.037c-0.348,0.245-0.683,0.516-0.995,0.827l-65.687,65.687v-49.288 c0-4.143-3.357-7.5-7.5-7.5s-7.5,3.357-7.5,7.5v9.164h-38.75c-4.143,0-7.5,3.357-7.5,7.5s3.357,7.5,7.5,7.5h38.75v43.231 c0,4.143,3.357,7.5,7.5,7.5h236.25c0.247,0,0.494-0.013,0.74-0.037c0.115-0.011,0.226-0.033,0.339-0.049 C339.542,260.469,339.67,260.454,339.798,260.429z M330.834,234.967l-65.688-65.687c-0.042-0.042-0.087-0.077-0.13-0.117 l49.383-41.897c3.158-2.68,3.546-7.412,0.866-10.571c-2.678-3.157-7.41-3.547-10.571-0.866l-84.381,71.59l-98.444-87.158h208.965 V234.967z M185.878,179.888c0.535-0.535,0.969-1.131,1.308-1.765l28.051,24.835c1.418,1.255,3.194,1.885,4.972,1.885 c1.726,0,3.451-0.593,4.853-1.781l28.587-24.254c0.26,0.38,0.553,0.743,0.89,1.08l65.687,65.687H120.191L185.878,179.888z"}),r.createElement("path",{d:"M7.5,170.676h126.667c4.143,0,7.5-3.357,7.5-7.5s-3.357-7.5-7.5-7.5H7.5c-4.143,0-7.5,3.357-7.5,7.5 S3.357,170.676,7.5,170.676z"}),r.createElement("path",{d:"M20.625,129.345H77.5c4.143,0,7.5-3.357,7.5-7.5s-3.357-7.5-7.5-7.5H20.625c-4.143,0-7.5,3.357-7.5,7.5 S16.482,129.345,20.625,129.345z"}),r.createElement("path",{d:"M62.5,226.51h-55c-4.143,0-7.5,3.357-7.5,7.5s3.357,7.5,7.5,7.5h55c4.143,0,7.5-3.357,7.5-7.5S66.643,226.51,62.5,226.51z"}))))}var Xa=r.forwardRef(Ya);a.p;function $a(e){var t=Object(ue.a)().t,a=e.action;return Object(N.jsx)("div",{className:"container dashboard",children:Object(N.jsxs)("div",{className:"row",children:[Object(N.jsx)("div",{className:"col-2"}),Object(N.jsx)("div",{className:"card col-8",children:Object(N.jsx)("div",{className:"card-body",children:Object(N.jsxs)("div",{className:"text-center ",children:["sent"===a&&Object(N.jsxs)(N.Fragment,{children:[Object(N.jsx)("div",{className:"svg-icon",children:Object(N.jsx)(Xa,{})}),t("user:Check your email. If your address is in our database, you'll received an email with a link to reset your password.")]}),"updated"===a&&Object(N.jsxs)(N.Fragment,{children:[Object(N.jsx)("div",{className:"svg-icon",children:Object(N.jsx)(Va,{})}),Object(N.jsxs)(pe.a,{i18nKey:"user:updatedPasswordText",children:["Your password have been updated. Click",Object(N.jsx)(ae.a,{to:"/login",children:"here"})," to log in."]})]})]})})}),Object(N.jsx)("div",{className:"col-2"})]})})}var Za=a(244),Qa=a.n(Za),es=function(e){Object(x.a)(a,e);var t=Object(g.a)(a);function a(e,s){var r;return Object(f.a)(this,a),(r=t.call(this,e,s)).state={formData:{},displayModal:!1},r}return Object(O.a)(a,[{key:"componentDidMount",value:function(){this.initForm()}},{key:"componentDidUpdate",value:function(e){e.user!==this.props.user&&this.initForm()}},{key:"initForm",value:function(){var e=this.props.user,t={};Object.keys(e).map((function(a){return null===e[a]?t[a]="":t[a]="birth_date"===a?Object(D.a)(new Date(e[a]),"yyyy-MM-DD"):e[a]})),this.setState({formData:t})}},{key:"handleFormChange",value:function(e){var t=this.state.formData;"weekm"===e.target.name?t.weekm="Monday"===e.target.value:t[e.target.name]=e.target.value,this.setState(t)}},{key:"displayModal",value:function(e){this.setState((function(t){return Object(S.a)(Object(S.a)({},t),{},{displayModal:e})}))}},{key:"render",value:function(){var e=this,t=this.props,a=t.message,s=t.onDeleteUser,r=t.onHandleProfileFormSubmit,n=t.t,o=t.user,c=this.state,i=c.displayModal,l=c.formData;return Object(N.jsxs)("div",{children:[Object(N.jsx)(w.a,{children:Object(N.jsxs)("title",{children:["FitTrackee - ",n("user:Profile Edition")]})}),l.isAuthenticated&&Object(N.jsxs)("div",{className:"container",children:[i&&Object(N.jsx)(He,{title:n("common:Confirmation"),text:n("user:Are you sure you want to delete your account? All data will be deleted, this cannot be undone."),confirm:function(){s(o.username),e.displayModal(!1)},close:function(){return e.displayModal(!1)}}),Object(N.jsx)("h1",{className:"page-title",children:n("user:Profile Edition")}),Object(N.jsxs)("div",{className:"row",children:[Object(N.jsx)("div",{className:"col-md-2"}),Object(N.jsx)("div",{className:"col-md-8",children:Object(N.jsxs)("div",{className:"card",children:[Object(N.jsx)("div",{className:"card-header",children:o.username}),Object(N.jsx)("div",{className:"card-body",children:Object(N.jsx)("div",{className:"row",children:Object(N.jsxs)("div",{className:"col-md-12",children:[Object(N.jsxs)("form",{onSubmit:function(e){e.preventDefault(),r(l)},children:[Object(N.jsx)("div",{className:"form-group",children:Object(N.jsxs)("label",{children:[n("user:Email"),":",Object(N.jsx)("input",{name:"email",className:"form-control input-lg",type:"text",value:l.email,readOnly:!0})]})}),Object(N.jsx)("div",{className:"form-group",children:Object(N.jsxs)("label",{children:[n("user:Registration Date"),":",Object(N.jsx)("input",{name:"createdAt",className:"form-control input-lg",type:"text",value:l.created_at,disabled:!0})]})}),Object(N.jsx)("div",{className:"form-group",children:Object(N.jsxs)("label",{children:[n("user:Password"),":",Object(N.jsx)("input",{name:"password",className:"form-control input-lg",type:"password",onChange:function(t){return e.handleFormChange(t)}})]})}),Object(N.jsx)("div",{className:"form-group",children:Object(N.jsxs)("label",{children:[n("user:Password Confirmation"),":",Object(N.jsx)("input",{name:"password_conf",className:"form-control input-lg",type:"password",onChange:function(t){return e.handleFormChange(t)}})]})}),Object(N.jsx)("hr",{}),Object(N.jsx)("div",{className:"form-group",children:Object(N.jsxs)("label",{children:[n("user:First Name"),":",Object(N.jsx)("input",{name:"first_name",className:"form-control input-lg",type:"text",value:l.first_name,onChange:function(t){return e.handleFormChange(t)}})]})}),Object(N.jsx)("div",{className:"form-group",children:Object(N.jsxs)("label",{children:[n("user:Last Name"),":",Object(N.jsx)("input",{name:"last_name",className:"form-control input-lg",type:"text",value:l.last_name,onChange:function(t){return e.handleFormChange(t)}})]})}),Object(N.jsx)("div",{className:"form-group",children:Object(N.jsxs)("label",{children:[n("user:Birth Date"),Object(N.jsx)("input",{name:"birth_date",className:"form-control input-lg",type:"date",value:l.birth_date,onChange:function(t){return e.handleFormChange(t)}})]})}),Object(N.jsx)("div",{className:"form-group",children:Object(N.jsxs)("label",{children:[n("user:Location"),":",Object(N.jsx)("input",{name:"location",className:"form-control input-lg",type:"text",value:l.location,onChange:function(t){return e.handleFormChange(t)}})]})}),Object(N.jsx)("div",{className:"form-group",children:Object(N.jsxs)("label",{children:[n("user:Bio"),":",Object(N.jsx)("textarea",{name:"bio",className:"form-control input-lg",maxLength:"200",value:l.bio,onChange:function(t){return e.handleFormChange(t)}})]})}),Object(N.jsx)("div",{className:"form-group",children:Object(N.jsxs)("label",{children:[n("user:Language"),":",Object(N.jsx)("select",{name:"language",className:"form-control input-lg",value:l.language,onChange:function(t){return e.handleFormChange(t)},children:Ra.map((function(e){return Object(N.jsx)("option",{value:e.name,children:e.name},e.name)}))})]})}),Object(N.jsx)("div",{className:"form-group",children:Object(N.jsxs)("label",{children:[n("user:Timezone"),":",Object(N.jsx)(Qa.a,{className:"form-control timezone-custom",onChange:function(t){var a={target:{name:"timezone",value:t||"Europe/Paris"}};e.handleFormChange(a)},value:l.timezone})]})}),Object(N.jsx)("div",{className:"form-group",children:Object(N.jsxs)("label",{children:[n("user:First day of week"),":",Object(N.jsxs)("select",{name:"weekm",className:"form-control input-lg",value:l.weekm?"Monday":"Sunday",onChange:function(t){return e.handleFormChange(t)},children:[Object(N.jsx)("option",{value:"Sunday",children:n("user:Sunday")}),Object(N.jsx)("option",{value:"Monday",children:n("user:Monday")})]})]})}),Object(N.jsx)("button",{type:"submit",className:"btn btn-primary",children:n("common:Submit")}),Object(N.jsx)("button",{className:"btn btn-danger",onClick:function(t){t.preventDefault(),e.displayModal(!0)},children:n("user:Delete my account")}),Object(N.jsx)("button",{type:"submit",className:"btn btn-secondary",onClick:function(){return Ws.push("/profile")},children:n("common:Cancel")})]}),Object(N.jsx)(_,{message:a,t:n})]})})})]})}),Object(N.jsx)("div",{className:"col-md-2"})]})]})]})}}]),a}(n.a.Component),ts=Object(y.a)()(Object(v.c)((function(e){return{location:e.router.location,message:e.message,user:e.user}}),(function(e){return{onDeleteUser:function(t){e(Me(t))},onHandleProfileFormSubmit:function(t){e(function(e){return function(t){return!e.password===e.password_conf?t(De("Password and password confirmation don't match.")):(delete e.id,q.postData("auth/profile/edit",e).then((function(e){if("success"===e.status)return t(Ee()),Ws.push("/profile");t(De(e.message))})).catch((function(e){throw e})))}}(t))}}}))(es)),as=a(910),ss=a(911),rs=a(912),ns=a(245),os=["week","month","year"],cs=function(e){Object(x.a)(a,e);var t=Object(g.a)(a);function a(e,s){var r;Object(f.a)(this,a),r=t.call(this,e,s);var n=new Date;return r.state={displayedSports:e.sports.map((function(e){return e.id})),statsParams:{start:Object(vt.a)(Object(Et.a)(n,11)),end:Object(kt.a)(n),duration:"month",type:"by_time"}},r}return Object(O.a)(a,[{key:"componentDidUpdate",value:function(e){this.props.sports!==e.sports&&this.updateDisplayedSports()}},{key:"updateDisplayedSports",value:function(){var e=this.props.sports;this.setState({displayedSports:e.map((function(e){return e.id}))})}},{key:"handleOnChangeDuration",value:function(e){var t=e.target.name,a=new Date,s="year"===t?Object(Ut.a)(Object(as.a)(a,9)):"week"===t?Object(vt.a)(Object(Et.a)(a,2)):Object(vt.a)(Object(Et.a)(a,11)),r="year"===t?Object(ss.a)(a):"week"===t?Object(yt.a)(a):Object(kt.a)(a);this.setState({statsParams:{duration:t,end:r,start:s,type:"by_time"}})}},{key:"handleOnChangeSports",value:function(e){var t=this.state.displayedSports;t.includes(e)?this.setState({displayedSports:t.filter((function(t){return t!==e}))}):this.setState({displayedSports:t.concat([e])})}},{key:"handleOnClickArrows",value:function(e){var t,a,s=this.state.statsParams,r=s.start,n=s.end,o=s.duration;e?(t="year"===o?Object(Ut.a)(Object(as.a)(r,1)):"week"===o?Object(wt.a)(Object(rs.a)(r,1)):Object(vt.a)(Object(Et.a)(r,1)),a="year"===o?Object(ss.a)(Object(as.a)(n,1)):"week"===o?Object(yt.a)(Object(rs.a)(n,1)):Object(kt.a)(Object(Et.a)(n,1))):(t="year"===o?Object(Ut.a)(Object(Lt.a)(r,1)):"week"===o?Object(wt.a)(Object(ns.a)(r,1)):Object(vt.a)(Object(Ct.a)(r,1)),a="year"===o?Object(ss.a)(Object(Lt.a)(n,1)):"week"===o?Object(yt.a)(Object(ns.a)(n,1)):Object(kt.a)(Object(Ct.a)(n,1))),this.setState({statsParams:{duration:o,end:a,start:t,type:"by_time"}})}},{key:"render",value:function(){var e=this,t=this.state,a=t.displayedSports,s=t.statsParams,r=this.props,n=r.sports,o=r.t,c=r.user,i=Ne(n.filter((function(e){return c.sports_list.includes(e.id)})),o);return Object(N.jsxs)(N.Fragment,{children:[Object(N.jsx)(w.a,{children:Object(N.jsxs)("title",{children:["FitTrackee - ",o("statistics:Statistics")]})}),Object(N.jsxs)("div",{className:"container dashboard",children:[Object(N.jsxs)("div",{className:"card workout-card",children:[Object(N.jsx)("div",{className:"card-header",children:o("statistics:Statistics")}),Object(N.jsxs)("div",{className:"card-body".concat(0===c.nb_workouts?" stats-disabled":""),children:[Object(N.jsxs)("div",{className:"chart-filters row",children:[Object(N.jsx)("div",{className:"col chart-arrows",children:Object(N.jsx)("p",{className:"text-center",children:Object(N.jsx)("i",{className:"fa fa-chevron-left","aria-hidden":"true",onClick:function(){return e.handleOnClickArrows(!0)}})})}),Object(N.jsx)("div",{className:"col-md-3 time-frames justify-content-around",children:os.map((function(t){return Object(N.jsx)("div",{className:"time-frame",children:Object(N.jsxs)("label",{children:[Object(N.jsx)("input",{type:"radio",id:t,name:t,checked:t===s.duration,onChange:function(t){return e.handleOnChangeDuration(t)}}),Object(N.jsx)("span",{children:o("statistics:".concat(t))})]})},t)}))}),Object(N.jsx)("div",{className:"col chart-arrows",children:Object(N.jsx)("p",{className:"text-center",children:Object(N.jsx)("i",{className:"fa fa-chevron-right","aria-hidden":"true",onClick:function(){return e.handleOnClickArrows(!1)}})})})]}),Object(N.jsx)(Xt,{displayEmpty:!0,displayedSports:a,statsParams:s,t:o}),Object(N.jsx)("div",{className:"row chart-workouts",children:i.map((function(t){return Object(N.jsxs)("label",{className:"col workout-label",children:[Object(N.jsx)("input",{type:"checkbox",checked:a.includes(t.id),name:t.label,onChange:function(){return e.handleOnChangeSports(t.id)}}),Object(N.jsx)("span",{style:{color:xe[t.id-1]},children:" ".concat(t.label)})]},t.id)}))})]})]}),0===c.nb_workouts&&Object(N.jsx)(jt,{t:o})]})]})}}]),a}(n.a.Component),is=Object(y.a)()(Object(v.c)((function(e){return{sports:e.sports.data,user:e.user}}))(cs));function ls(e){var t=Object(ue.a)().t,a="user:".concat(e.formType.charAt(0).toUpperCase()).concat(e.formType.slice(1));return Object(N.jsxs)("div",{children:[Object(N.jsx)(w.a,{children:Object(N.jsxs)("title",{children:["FitTrackee - ",t("user:".concat(e.formType))]})}),Object(N.jsx)("h1",{className:"page-title",children:t(a)}),Object(N.jsx)("div",{className:"container",children:Object(N.jsxs)("div",{className:"row",children:[Object(N.jsx)("div",{className:"col-md-3"}),Object(N.jsxs)("div",{className:"col-md-6",children:[Object(N.jsx)("br",{}),"register"!==e.formType||e.isRegistrationAllowed?Object(N.jsxs)(N.Fragment,{children:[Object(N.jsxs)("form",{onSubmit:function(t){return e.handleUserFormSubmit(t,e.formType)},children:["register"===e.formType&&Object(N.jsx)("div",{className:"form-group",children:Object(N.jsx)("input",{className:"form-control input-lg",name:"username",placeholder:t("user:Enter a username"),required:!0,type:"text",value:e.userForm.username,onChange:e.onHandleFormChange})}),"password reset"!==e.formType&&Object(N.jsx)("div",{className:"form-group",children:Object(N.jsx)("input",{className:"form-control input-lg",name:"email",placeholder:t("user:Enter an email address"),required:!0,type:"email",value:e.userForm.email,onChange:e.onHandleFormChange})}),"reset your password"!==e.formType&&Object(N.jsxs)(N.Fragment,{children:[Object(N.jsx)("div",{className:"form-group",children:Object(N.jsx)("input",{className:"form-control input-lg",name:"password",placeholder:t("user:Enter a password"),required:!0,type:"password",value:e.userForm.password,onChange:e.onHandleFormChange})}),"login"!==e.formType&&Object(N.jsx)("div",{className:"form-group",children:Object(N.jsx)("input",{className:"form-control input-lg",name:"password_conf",placeholder:t("user:Enter the password confirmation"),required:!0,type:"password",value:e.userForm.password_conf,onChange:e.onHandleFormChange})})]}),Object(N.jsx)("input",{type:"submit",className:"btn btn-primary btn-lg btn-block",value:t("Submit")})]}),Object(N.jsx)("p",{className:"password-forget",children:"login"===e.formType&&Object(N.jsx)(ae.a,{to:{pathname:"/password-reset/request"},children:t("user:Forgot password?")})})]}):Object(N.jsxs)("div",{className:"card",children:[Object(N.jsx)("div",{className:"card-body",children:"Registration is disabled."}),Object(N.jsx)("div",{className:"card-body",children:Object(N.jsx)("button",{type:"submit",className:"btn btn-secondary btn-lg btn-block",onClick:function(){return Ws.go(-1)},children:"Back"})})]})]}),Object(N.jsx)("div",{className:"col-md-3"})]})})]})}var ds=function(e){Object(x.a)(a,e);var t=Object(g.a)(a);function a(e,s){var r;return Object(f.a)(this,a),(r=t.call(this,e,s)).state={formData:{username:"",email:"",password:"",password_conf:""}},r}return Object(O.a)(a,[{key:"componentDidUpdate",value:function(e){e.location.pathname!==this.props.location.pathname&&this.emptyForm()}},{key:"emptyForm",value:function(){var e=this.state.formData;Object.keys(e).map((function(t){return e[t]=""})),this.setState(e)}},{key:"onHandleFormChange",value:function(e){var t=this.state.formData;t[e.target.name]=e.target.value,this.setState(t)}},{key:"render",value:function(){var e=this,t=this.props,a=t.formType,s=t.isRegistrationAllowed,r=t.message,n=t.messages,o=t.onHandleUserFormSubmit,c=t.t,i=this.state.formData,l=this.props.location.query.token;return Object(N.jsx)("div",{children:F()||"password reset"===a&&!l?Object(N.jsx)(k.a,{to:"/"}):Object(N.jsxs)("div",{children:[Object(N.jsx)(_,{message:r,messages:n,t:c}),Object(N.jsx)(ls,{isRegistrationAllowed:s,formType:a,userForm:i,onHandleFormChange:function(t){return e.onHandleFormChange(t)},handleUserFormSubmit:function(e){e.preventDefault(),"password reset"===a&&(i.token=l),o(i,a)}})]})})}}]),a}(n.a.Component),us=Object(y.a)()(Object(v.c)((function(e){return{isRegistrationAllowed:e.application.config.is_registration_enabled,location:e.router.location,message:e.message,messages:e.messages}}),(function(e){return{onHandleUserFormSubmit:function(t,a){e(Ae(t,a="password reset"===a?"password/update":"reset your password"===a?"password/reset-request":a))}}}))(ds)),ms=function(e){Object(x.a)(a,e);var t=Object(g.a)(a);function a(e,s){var r;return Object(f.a)(this,a),(r=t.call(this,e,s)).state={displayModal:!1},r}return Object(O.a)(a,[{key:"componentDidMount",value:function(){this.props.loadUser(this.props.match.params.userName)}},{key:"componentDidUpdate",value:function(e){e.match.params.userName!==this.props.match.params.userName&&this.props.loadUser(this.props.match.params.userName)}},{key:"displayModal",value:function(e){this.setState((function(t){return Object(S.a)(Object(S.a)({},t),{},{displayModal:e})}))}},{key:"render",value:function(){var e=this,t=this.props,a=t.t,s=t.currentUser,r=t.onDeleteUser,n=t.users,o=this.state.displayModal,c=Object(he.a)(n,1)[0],i=!!c&&s.username===c.username;return Object(N.jsxs)("div",{children:[o&&Object(N.jsx)(He,{title:a("common:Confirmation"),text:a("user:Are you sure you want to delete this account? All data will be deleted, this cannot be undone."),confirm:function(){r(c.username),e.displayModal(!1)},close:function(){return e.displayModal(!1)}}),c&&Object(N.jsx)(xt,{editable:i,isDeletable:s.admin&&!i,onDeleteUser:r,displayModal:function(t){return e.displayModal(t)},t:a,user:c})]})}}]),a}(n.a.Component),js=Object(y.a)()(Object(v.c)((function(e){return{currentUser:e.user,users:e.users.data}}),(function(e){return{onDeleteUser:function(t){e(Me(t,!0))},loadUser:function(t){e(X("getData","users",{username:t}))}}}))(ms)),ps=function(e){Object(x.a)(a,e);var t=Object(g.a)(a);function a(e){var s;return Object(f.a)(this,a),(s=t.call(this,e)).props=e,s}return Object(O.a)(a,[{key:"componentDidMount",value:function(){this.props.loadAppConfig()}},{key:"render",value:function(){return Object(N.jsxs)("div",{className:"App",children:[Object(N.jsx)(Wa,{}),Object(N.jsxs)(k.d,{children:[Object(N.jsx)(k.b,{exact:!0,path:"/",component:ta}),Object(N.jsx)(k.b,{exact:!0,path:"/register",render:function(){return Object(N.jsx)(us,{formType:"register"})}}),Object(N.jsx)(k.b,{exact:!0,path:"/login",render:function(){return Object(N.jsx)(us,{formType:"login"})}}),Object(N.jsx)(k.b,{exact:!0,path:"/password-reset",render:function(){return Object(N.jsx)(us,{formType:"password reset"})}}),Object(N.jsx)(k.b,{exact:!0,path:"/password-reset/request",render:function(){return Object(N.jsx)(us,{formType:"reset your password"})}}),Object(N.jsx)(k.b,{exact:!0,path:"/password-reset/sent",render:function(){return Object(N.jsx)($a,{action:"sent"})}}),Object(N.jsx)(k.b,{exact:!0,path:"/updated-password",render:function(){return Object(N.jsx)($a,{action:"updated"})}}),Object(N.jsx)(k.b,{exact:!0,path:"/password-reset/sent",component:$a}),Object(N.jsx)(k.b,{exact:!0,path:"/logout",component:fa}),Object(N.jsx)(k.b,{exact:!0,path:"/profile/edit",component:ts}),Object(N.jsx)(k.b,{exact:!0,path:"/profile",component:gt}),Object(N.jsx)(k.b,{exact:!0,path:"/workouts/history",component:Ot}),Object(N.jsx)(k.b,{exact:!0,path:"/workouts/statistics",component:is}),Object(N.jsx)(k.b,{exact:!0,path:"/users/:userName",component:js}),Object(N.jsx)(k.b,{path:"/workouts",component:mt}),Object(N.jsx)(k.b,{path:"/admin",component:je}),Object(N.jsx)(k.b,{component:me})]}),Object(N.jsx)(aa,{})]})}}]),a}(n.a.Component),hs=Object(v.c)((function(){return{}}),(function(e){return{loadAppConfig:function(){e(Q("config"))}}}))(ps),bs=a(85);function fs(e){var t=e.store,a=e.history,s=e.children;return Object(N.jsx)(v.a,{store:t,children:Object(N.jsx)(bs.a,{history:a,children:s})})}var Os=Boolean("localhost"===window.location.hostname||"[::1]"===window.location.hostname||window.location.hostname.match(/^127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/));function xs(e){navigator.serviceWorker.register(e).then((function(e){e.onupdatefound=function(){var t=e.installing;t.onstatechange=function(){"installed"===t.state&&(navigator.serviceWorker.controller?console.log("New content is available; please refresh."):console.log("Content is cached for offline use."))}}})).catch((function(e){console.error("Error during service worker registration:",e)}))}var gs,vs={data:[]},ks={language:"en",message:"",messages:[],user:{isAuthenticated:!1},workouts:Object(S.a)({},vs),application:{statistics:{},config:{gpx_limit_import:null,is_registration_enabled:null,max_single_file_size:null,max_users:null,max_zip_file_size:null,registration:null}},calendarWorkouts:Object(S.a)({},vs),chartData:[],gpx:null,loading:!1,records:Object(S.a)({},vs),sports:Object(S.a)({},vs),statistics:{data:{}},users:Object(S.a)({},vs)},ws=function(e,t,a){return a.target!==t?e:"SET_DATA"===a.type?Object(S.a)(Object(S.a)({},e),{},{data:a.data[a.target]}):"SET_PAGINATED_DATA"===a.type?Object(S.a)(Object(S.a)({},e),{},{data:a.data[a.target],pagination:a.pagination}):e},ys=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:ks.workouts,t=arguments.length>1?arguments[1]:void 0;switch(t.type){case"LOGOUT":return ks.workouts;case"PUSH_WORKOUTS":return Object(S.a)(Object(S.a)({},e),{},{data:e.data.concat(t.workouts)});case"REMOVE_WORKOUT":return Object(S.a)(Object(S.a)({},e),{},{data:e.data.filter((function(e){return e.id!==t.workoutId}))});default:return ws(e,"workouts",t)}},Ns=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:ks.application,t=arguments.length>1?arguments[1]:void 0;return"SET_APP_CONFIG"===t.type?Object(S.a)(Object(S.a)({},e),{},{config:t.data}):"SET_APP_STATS"===t.type?Object(S.a)(Object(S.a)({},e),{},{statistics:t.data}):e},_s=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:ks.calendarWorkouts,t=arguments.length>1?arguments[1]:void 0;switch(t.type){case"LOGOUT":return ks.calendarWorkouts;case"UPDATE_CALENDAR":return Object(S.a)(Object(S.a)({},e),{},{data:t.workouts});default:return ws(e,"calendarWorkouts",t)}},Ss=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:ks.chartData,t=arguments.length>1?arguments[1]:void 0;return"SET_CHART_DATA"===t.type?t.chartData:e},Ds=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:ks.gpx,t=arguments.length>1?arguments[1]:void 0;return"SET_GPX"===t.type?t.gpxContent:e},Cs=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:ks.language,t=arguments.length>1?arguments[1]:void 0;return"SET_LANGUAGE"===t.type?t.language:e},Es=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:ks.loading,t=arguments.length>1?arguments[1]:void 0;return"SET_LOADING"===t.type?t.loading:e},As=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:ks.message,t=arguments.length>1?arguments[1]:void 0;switch(t.type){case"AUTH_ERROR":case"PROFILE_ERROR":case"PROFILE_UPDATE_ERROR":case"PICTURE_ERROR":case"SET_ERROR":return t.message;case"CLEAN_ALL_MESSAGES":case"LOGOUT":case"PROFILE_SUCCESS":case"SET_APP_CONFIG":case"SET_RESULTS":case"@@router/LOCATION_CHANGE":return"";default:return e}},Ms=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:ks.messages,t=arguments.length>1?arguments[1]:void 0;switch(t.type){case"AUTH_ERRORS":case"APP_ERRORS":return t.messages;case"CLEAN_ALL_MESSAGES":case"LOGOUT":case"PROFILE_SUCCESS":case"@@router/LOCATION_CHANGE":return[];default:return e}},Ts=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:ks.records,t=arguments.length>1?arguments[1]:void 0;return"LOGOUT"===t.type?ks.records:ws(e,"records",t)},Ps=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:ks.sports,t=arguments.length>1?arguments[1]:void 0;return"UPDATE_SPORT_DATA"===t.type?Object(S.a)(Object(S.a)({},e),{},{data:e.data.map((function(e){return e.id===t.data.id&&(e.is_active=t.data.is_active),e}))}):ws(e,"sports",t)},zs=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:ks.users,t=arguments.length>1?arguments[1]:void 0;return"UPDATE_USER_DATA"===t.type?Object(S.a)(Object(S.a)({},e),{},{data:e.data.map((function(e){return e.username===t.data.username&&(e.admin=t.data.admin),e}))}):ws(e,"users",t)},Fs=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:ks.user,t=arguments.length>1?arguments[1]:void 0;switch(t.type){case"AUTH_ERROR":case"PROFILE_ERROR":case"LOGOUT":return window.localStorage.removeItem("authToken"),ks.user;case"PROFILE_SUCCESS":return t.profil;default:return e}},Rs=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:ks.statistics,t=arguments.length>1?arguments[1]:void 0;return"LOGOUT"===t.type?ks.statistics:ws(e,"statistics",t)},Ls=["/login","/register","/password-reset","/password-reset/request","/password-reset/sent","/updated-password"],Us=function(e,t){return"string"===typeof e||e instanceof String?e=t:e.pathname=t,e},Is=function(e){return window.localStorage.authToken||Ls.includes(e.pathname)||(e=Us(e,"/login")),window.localStorage.authToken&&Ls.includes(e.pathname)&&(e=Us(e,"/")),e},Ws=((gs=Object(s.a)()).location=Is(gs.location),Object(S.a)(Object(S.a)({},gs),{},{push:function(e){for(var t=arguments.length,a=new Array(t>1?t-1:0),s=1;s1?t-1:0),s=1;s 1\n ? `${t(`messages:${message.split('|')[0]}`)}: ${t(\n `messages:${message.split('|')[1]}`\n )}`\n : t(`messages:${message}`)\n return (\n
      \n {singleMessage !== '' && {singleMessage}}\n {messages &&\n messages.length > 0 &&\n (messages.length === 1 ? (\n {messages[0].value}\n ) : (\n \n
        \n {messages.map(msg => (\n
      • {t(`messages:${msg.value}`)}
      • \n ))}\n
      \n
      \n ))}\n
      \n )\n }\n}\n","import { format, parse } from 'date-fns'\nimport { DateTime } from 'luxon'\n\nconst suffixes = ['bytes', 'KB', 'MB', 'GB', 'TB']\nexport const getFileSize = (fileSize, asText = true) => {\n const i = Math.floor(Math.log(fileSize) / Math.log(1024))\n if (!fileSize) {\n return asText ? '0 bytes' : { size: 0, suffix: 'bytes' }\n }\n const size = (fileSize / Math.pow(1024, i)).toFixed(1)\n const suffix = suffixes[i]\n return asText ? `${size}${suffix}` : { size, suffix }\n}\n\nexport const getFileSizeInMB = fileSize => {\n const value = fileSize / 1048576\n return (!fileSize && 0) || +value.toFixed(2)\n}\n\nexport const version = '0.4.6' // version stored in 'utils' for now\nexport const apiUrl =\n process.env.NODE_ENV === 'production'\n ? '/api/'\n : `${process.env.REACT_APP_API_URL}/api/`\n\nexport const userFilters = [\n { key: 'workouts_count', label: 'workouts count' },\n { key: 'admin', label: 'admin rights' },\n { key: 'created_at', label: 'registration date' },\n { key: 'username', label: 'user name' },\n]\n\nexport const sortOrders = [\n { key: 'asc', label: 'ascending' },\n { key: 'desc', label: 'descending' },\n]\n\nexport const isLoggedIn = () => !!window.localStorage.authToken\n\nexport const generateIds = arr => {\n let i = 0\n return arr.map(val => {\n const obj = { id: i, value: val }\n i++\n return obj\n })\n}\n\nexport const createApiRequest = params => {\n const headers = {}\n if (!params.noAuthorization) {\n headers.Authorization = `Bearer ${window.localStorage.getItem('authToken')}`\n }\n if (params.type) {\n headers['Content-Type'] = params.type\n }\n const requestParams = {\n method: params.method,\n headers: headers,\n }\n if (params.type === 'application/json' && params.body) {\n requestParams.body = JSON.stringify(params.body)\n } else if (params.body) {\n requestParams.body = params.body\n }\n const request = new Request(`${apiUrl}${params.url}`, requestParams)\n return fetch(request)\n .then(response =>\n params.method === 'DELETE' || response.status === 413\n ? response\n : response.json()\n )\n .catch(error => {\n console.error(error)\n return new Error('An error occurred. Please contact the administrator.')\n })\n}\n\nexport const getDateWithTZ = (date, tz) => {\n if (!date) {\n return ''\n }\n const dt = DateTime.fromISO(\n format(new Date(date), \"yyyy-MM-dd'T'HH:mm:ss.SSSxxx\")\n ).setZone(tz)\n return parse(\n dt.toFormat('yyyy-MM-dd HH:mm:ss'),\n 'yyyy-MM-dd HH:mm:ss',\n new Date()\n )\n}\n\nexport const capitalize = target =>\n target.charAt(0).toUpperCase() + target.slice(1)\n\nexport const rangePagination = pages =>\n Array.from({ length: pages }, (_, i) => i + 1)\n\nconst sortValues = (a, b) => {\n const valueALabel = a.label.toLowerCase()\n const valueBLabel = b.label.toLowerCase()\n return valueALabel > valueBLabel ? 1 : valueALabel < valueBLabel ? -1 : 0\n}\n\nexport const translateValues = (t, values, key = 'common') =>\n values\n .map(value => ({\n ...value,\n label: t(`${key}:${value.label}`),\n }))\n .sort(sortValues)\n\nexport const formatUrl = (pathname, query) => {\n let url = pathname\n if (query.id || (pathname === 'users' && query.username)) {\n url = `${url}/${query.username ? query.username : query.id}`\n } else if (Object.keys(query).length > 0) {\n url += '?'\n Object.keys(query)\n .filter(key => query[key])\n .map(\n (key, index) => (url += `${index === 0 ? '' : '&'}${key}=${query[key]}`)\n )\n }\n return url\n}\n","import { createApiRequest, formatUrl } from '../utils'\n\nexport default class FitTrackeeApi {\n static getData(target, data = {}) {\n const url = formatUrl(target, data)\n const params = {\n url: url,\n method: 'GET',\n type: 'application/json',\n }\n return createApiRequest(params)\n }\n\n static addData(target, data) {\n const params = {\n url: target,\n method: 'POST',\n body: data,\n type: 'application/json',\n }\n return createApiRequest(params)\n }\n\n static addDataWithFile(target, data) {\n const params = {\n url: target,\n method: 'POST',\n body: data,\n }\n return createApiRequest(params)\n }\n\n static postData(target, data) {\n const params = {\n url: `${target}${data.id ? `/${data.id}` : ''}`,\n method: 'POST',\n body: data,\n type: 'application/json',\n }\n return createApiRequest(params)\n }\n\n static updateData(target, data) {\n const params = {\n url: `${target}${\n data.id ? `/${data.id}` : data.username ? `/${data.username}` : ''\n }`,\n method: 'PATCH',\n body: data,\n type: 'application/json',\n }\n return createApiRequest(params)\n }\n\n static deleteData(target, id) {\n const params = {\n url: `${target}/${id}`,\n method: 'DELETE',\n type: 'application/json',\n }\n return createApiRequest(params)\n }\n}\n","import i18next from 'i18next'\n\nimport FitTrackeeApi from '../fitTrackeeApi/index'\nimport { history } from '../index'\n\nexport const emptyMessages = () => ({\n type: 'CLEAN_ALL_MESSAGES',\n})\n\nexport const setData = (target, data) => ({\n type: 'SET_DATA',\n data,\n target,\n})\n\nexport const setPaginatedData = (target, data, pagination) => ({\n type: 'SET_PAGINATED_DATA',\n data,\n pagination,\n target,\n})\n\nexport const setError = message => ({\n type: 'SET_ERROR',\n message,\n})\n\nexport const setLanguage = language => ({\n type: 'SET_LANGUAGE',\n language,\n})\n\nexport const setLoading = loading => ({\n type: 'SET_LOADING',\n loading,\n})\n\nexport const updateSportsData = data => ({\n type: 'UPDATE_SPORT_DATA',\n data,\n})\n\nexport const updateUsersData = data => ({\n type: 'UPDATE_USER_DATA',\n data,\n})\n\nexport const getOrUpdateData = (\n action,\n target,\n data,\n canDispatch = true\n) => dispatch => {\n dispatch(setLoading(true))\n if (data && data.id && target !== 'workouts' && isNaN(data.id)) {\n dispatch(setLoading(false))\n return dispatch(setError(`${target}|Incorrect id`))\n }\n dispatch(emptyMessages())\n return FitTrackeeApi[action](target, data)\n .then(ret => {\n if (ret.status === 'success') {\n if (canDispatch) {\n if (target === 'users' && action === 'getData') {\n return dispatch(setPaginatedData(target, ret.data, ret.pagination))\n }\n dispatch(setData(target, ret.data))\n } else if (action === 'updateData' && target === 'sports') {\n dispatch(updateSportsData(ret.data.sports[0]))\n } else if (action === 'updateData' && target === 'users') {\n dispatch(updateUsersData(ret.data.users[0]))\n }\n } else {\n dispatch(setError(`${target}|${ret.message || ret.status}`))\n }\n dispatch(setLoading(false))\n })\n .catch(error => {\n dispatch(setLoading(false))\n dispatch(setError(`${target}|${error}`))\n })\n}\n\nexport const addData = (target, data) => dispatch =>\n FitTrackeeApi.addData(target, data)\n .then(ret => {\n if (ret.status === 'created') {\n history.push(`/admin/${target}`)\n } else {\n dispatch(setError(`${target}|${ret.status}`))\n }\n })\n .catch(error => dispatch(setError(`${target}|${error}`)))\n\nexport const deleteData = (target, id) => dispatch => {\n if (isNaN(id)) {\n return dispatch(setError(target, `${target}|Incorrect id`))\n }\n return FitTrackeeApi.deleteData(target, id)\n .then(ret => {\n if (ret.status === 204) {\n history.push(`/admin/${target}`)\n } else {\n dispatch(setError(`${target}|${ret.message || ret.status}`))\n }\n })\n .catch(error => dispatch(setError(`${target}|${error}`)))\n}\n\nexport const updateLanguage = language => dispatch => {\n i18next.changeLanguage(language).then(dispatch(setLanguage(language)))\n}\n","import FitTrackeeGenericApi from '../fitTrackeeApi'\nimport { history } from '../index'\nimport { generateIds } from '../utils'\nimport { emptyMessages, setError } from './index'\n\nexport const setAppConfig = data => ({\n type: 'SET_APP_CONFIG',\n data,\n})\n\nexport const setAppStats = data => ({\n type: 'SET_APP_STATS',\n data,\n})\n\nconst SetAppErrors = messages => ({ type: 'APP_ERRORS', messages })\n\nexport const getAppData = target => dispatch =>\n FitTrackeeGenericApi.getData(target)\n .then(ret => {\n if (ret.status === 'success') {\n if (target === 'config') {\n dispatch(setAppConfig(ret.data))\n } else if (target === 'stats/all') {\n dispatch(setAppStats(ret.data))\n }\n } else {\n dispatch(setError(`application|${ret.message}`))\n }\n })\n .catch(error => dispatch(setError(`application|${error}`)))\n\nexport const updateAppConfig = formData => dispatch => {\n dispatch(emptyMessages())\n FitTrackeeGenericApi.updateData('config', formData)\n .then(ret => {\n if (ret.status === 'success') {\n dispatch(setAppConfig(ret.data))\n history.push('/admin/application')\n } else if (Array.isArray(ret.message)) {\n dispatch(SetAppErrors(generateIds(ret.message)))\n } else {\n dispatch(setError(ret.message))\n }\n })\n .catch(error => dispatch(setError(`application|${error}`)))\n}\n","import React from 'react'\nimport { connect } from 'react-redux'\n\nimport Message from '../Common/Message'\nimport { getAppData, updateAppConfig } from '../../actions/application'\nimport { history } from '../../index'\nimport { getFileSizeInMB } from '../../utils'\n\nclass AdminApplication extends React.Component {\n constructor(props, context) {\n super(props, context)\n this.state = {\n formData: {},\n }\n }\n\n componentDidMount() {\n this.initForm()\n }\n\n componentDidUpdate(prevProps) {\n if (this.props.appConfig !== prevProps.appConfig) {\n this.initForm()\n }\n }\n\n initForm() {\n const { appConfig } = this.props\n const formData = {}\n Object.keys(appConfig).map(k =>\n appConfig[k] === null\n ? (formData[k] = '')\n : ['max_single_file_size', 'max_zip_file_size'].includes(k)\n ? (formData[k] = getFileSizeInMB(appConfig[k]))\n : (formData[k] = appConfig[k])\n )\n this.setState({ formData })\n }\n\n handleFormChange(e) {\n const { formData } = this.state\n formData[e.target.name] = +e.target.value\n this.setState(formData)\n }\n\n render() {\n const {\n isInEdition,\n loadAppConfig,\n message,\n messages,\n onHandleConfigFormSubmit,\n t,\n } = this.props\n const { formData } = this.state\n return (\n
      \n {(message || messages) && (\n \n )}\n {Object.keys(formData).length > 0 && (\n
      \n
      \n
      \n
      \n \n {t('administration:Application configuration')}\n \n
      \n
      \n {\n e.preventDefault()\n onHandleConfigFormSubmit(formData)\n }}\n >\n
      \n \n {t(\n // eslint-disable-next-line max-len\n 'administration:Max. number of active users'\n )}\n \n \n \n :\n \n this.handleFormChange(e)}\n />\n
      \n
      \n \n {t(\n 'administration:Max. size of uploaded files (in Mb)'\n )}\n :\n \n this.handleFormChange(e)}\n />\n
      \n
      \n \n {t('administration:Max. size of zip archive (in Mb)')}:\n \n this.handleFormChange(e)}\n />\n
      \n
      \n \n {t('administration:Max. files of zip archive')}\n \n this.handleFormChange(e)}\n />\n
      \n {isInEdition ? (\n <>\n \n {\n e.preventDefault()\n loadAppConfig()\n history.push('/admin/application')\n }}\n value={t('common:Cancel')}\n />\n \n ) : (\n <>\n {\n e.preventDefault()\n history.push('/admin/application/edit')\n }}\n value={t('common:Edit')}\n />\n history.push('/admin')}\n value={t('common:Back')}\n />\n \n )}\n \n
      \n
      \n
      \n
      \n )}\n
      \n )\n }\n}\n\nexport default connect(\n state => ({\n message: state.message,\n messages: state.messages,\n }),\n dispatch => ({\n loadAppConfig: () => {\n dispatch(getAppData('config'))\n },\n onHandleConfigFormSubmit: formData => {\n const data = Object.assign({}, formData)\n data.max_single_file_size *= 1048576\n data.max_zip_file_size *= 1048576\n dispatch(updateAppConfig(data))\n },\n })\n)(AdminApplication)\n","import React from 'react'\nimport { withTranslation } from 'react-i18next'\nimport { connect } from 'react-redux'\n\nimport { getAppData } from '../../actions/application'\nimport { getFileSize } from '../../utils'\n\nclass AdminStats extends React.Component {\n componentDidMount() {\n this.props.loadAppStats()\n }\n\n render() {\n const { appStats, t } = this.props\n const uploadDirSize = getFileSize(appStats.uploads_dir_size, false)\n return (\n
      \n
      \n
      \n
      \n
      \n \n
      \n
      \n
      \n {appStats.users ? appStats.users : 0}\n
      \n
      {`${\n appStats.users === 1\n ? t('administration:user')\n : t('administration:users')\n }`}
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n \n
      \n
      \n
      \n {appStats.sports ? appStats.sports : 0}\n
      \n
      {`${\n appStats.sports === 1 ? t('common:sport') : t('common:sports')\n }`}
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n \n
      \n
      \n
      \n {appStats.workouts ? appStats.workouts : 0}\n
      \n
      {`${\n appStats.workouts === 1\n ? t('common:workout')\n : t('common:workouts')\n }`}
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n \n
      \n
      \n
      {uploadDirSize.size}
      \n
      \n {uploadDirSize.suffix} ({t('administration:uploads')})\n
      \n
      \n
      \n
      \n
      \n
      \n )\n }\n}\n\nexport default withTranslation()(\n connect(\n state => ({\n appStats: state.application.statistics,\n }),\n dispatch => ({\n loadAppStats: () => {\n dispatch(getAppData('stats/all'))\n },\n })\n )(AdminStats)\n)\n","import React from 'react'\nimport { Link } from 'react-router-dom'\n\nimport AdminStats from './AdminStats'\n\nexport default function AdminDashboard(props) {\n const { appConfig, t } = props\n return (\n
      \n
      \n {t('administration:Administration')}\n
      \n
      \n \n
      \n
      \n
      \n \n {t('administration:Application')}\n \n
      \n
      \n {t(\n 'administration:Update application configuration ' +\n '(maximum number of registered users, maximum files size).'\n )}\n
      \n \n {t(\n `administration:Registration is currently ${\n appConfig.is_registration_enabled ? 'enabled' : 'disabled'\n }.`\n )}\n \n
      \n
      \n
      \n \n {t('administration:Sports')}\n \n
      \n
      {t('administration:Enable/disable sports.')}
      \n
      \n
      \n \n {t('administration:Users')}\n \n
      \n
      \n {t(\n 'administration:Add/remove admin rights, ' +\n 'delete user account.'\n )}\n
      \n
      \n
      \n
      \n )\n}\n","import React from 'react'\nimport { connect } from 'react-redux'\n\nimport Message from '../Common/Message'\nimport { getOrUpdateData } from '../../actions'\nimport { history } from '../../index'\n\nclass AdminSports extends React.Component {\n componentDidMount() {\n this.props.loadSports()\n }\n\n render() {\n const { message, sports, t, updateSport } = this.props\n return (\n
      \n {message && }\n
      \n
      \n
      \n
      \n {t('administration:Sports')}\n
      \n
      \n {sports.length > 0 && (\n \n \n \n \n \n \n \n \n \n \n \n {sports.map(sport => (\n \n \n \n \n \n \n \n ))}\n \n
      {t('administration:id')}{t('administration:Image')}{t('administration:Label')}{t('administration:Active')}{t('administration:Actions')}
      \n \n {t('administration:id')}\n \n {sport.id}\n \n \n {t('administration:Image')}\n \n \n \n \n {t('administration:Label')}\n \n {t(`sports:${sport.label}`)}\n \n \n {t('administration:Active')}\n \n {sport.is_active ? (\n \n ) : (\n \n )}\n \n \n {t('administration:Actions')}\n \n \n updateSport(sport.id, !sport.is_active)\n }\n />\n {sport.has_workouts && (\n \n \n {t('administration:workouts exist')}\n \n )}\n
      \n )}\n history.push('/admin/')}\n value={t('common:Back')}\n />\n
      \n
      \n
      \n
      \n
      \n )\n }\n}\n\nexport default connect(\n state => ({\n message: state.message,\n sports: state.sports.data,\n user: state.user,\n }),\n dispatch => ({\n loadSports: () => {\n dispatch(getOrUpdateData('getData', 'sports'))\n },\n updateSport: (sportId, isActive) => {\n const data = { id: sportId, is_active: isActive }\n dispatch(getOrUpdateData('updateData', 'sports', data, false))\n },\n })\n)(AdminSports)\n","import React from 'react'\nimport { Link } from 'react-router-dom'\n\nimport { formatUrl, rangePagination } from '../../utils'\n\nexport default class Pagination extends React.PureComponent {\n getUrl(value) {\n const { query, pathname } = this.props\n const newQuery = Object.assign({}, query)\n let page = query.page ? +query.page : 1\n switch (value) {\n case 'prev':\n page -= 1\n break\n case 'next':\n page += 1\n break\n default:\n page = +value\n }\n newQuery.page = page\n return formatUrl(pathname, newQuery)\n }\n\n render() {\n const { pagination, t } = this.props\n return (\n <>\n {pagination && Object.keys(pagination).length > 0 && (\n \n )}\n \n )\n }\n}\n","import { format } from 'date-fns'\nimport React from 'react'\nimport { connect } from 'react-redux'\nimport { Link } from 'react-router-dom'\n\nimport Message from '../Common/Message'\nimport Pagination from '../Common/Pagination'\nimport { history } from '../../index'\nimport { getOrUpdateData } from '../../actions'\nimport {\n apiUrl,\n formatUrl,\n sortOrders,\n translateValues,\n userFilters,\n} from '../../utils'\n\nclass AdminUsers extends React.Component {\n constructor(props, context) {\n super(props, context)\n this.state = {\n page: null,\n per_page: null,\n order_by: 'created_at',\n order: 'asc',\n }\n }\n\n componentDidMount() {\n this.props.loadUsers(this.initState())\n }\n\n componentDidUpdate(prevProps) {\n if (prevProps.location.query !== this.props.location.query) {\n this.props.loadUsers(this.props.location.query)\n }\n }\n\n initState() {\n const { query } = this.props.location\n const newQuery = {\n page: query.page,\n per_page: query.per_page,\n order_by: query.order_by ? query.order_by : 'created_at',\n order: query.order ? query.order : 'asc',\n }\n this.setState(newQuery)\n return newQuery\n }\n\n updatePage(key, value) {\n const query = Object.assign({}, this.state)\n query[key] = value\n this.setState(query)\n const url = formatUrl(this.props.location.pathname, query)\n history.push(url)\n }\n\n render() {\n const {\n authUser,\n location,\n message,\n t,\n pagination,\n updateUser,\n users,\n } = this.props\n const translatedFilters = translateValues(t, userFilters)\n const translatedSortOrders = translateValues(t, sortOrders)\n return (\n
      \n {message && }\n
      \n
      \n
      \n
      \n
      \n {t('administration:Users')}\n
      \n
      \n
      \n
      \n \n
      \n
      \n \n
      \n
      \n \n \n \n \n \n \n \n \n \n \n \n \n \n {users.map(user => (\n \n \n \n \n \n \n \n \n \n ))}\n \n
      #{t('user:Username')}{t('user:Email')}{t('user:Registration Date')}{t('workouts:Workouts')}{t('user:Admin')}{t('administration:Actions')}
      \n #\n {user.picture === true ? (\n \n ) : (\n \n )}\n \n \n {t('user:Username')}\n \n \n {user.username}\n \n \n \n {t('user:Email')}\n \n {user.email}\n \n \n {t('user:Registration Date')}\n \n {format(\n new Date(user.created_at),\n 'dd/MM/yyyy HH:mm'\n )}\n \n \n {t('workouts:Workouts')}\n \n {user.nb_workouts}\n \n \n {t('user:Admin')}\n \n {user.admin ? (\n \n ) : (\n \n )}\n \n \n {t('administration:Actions')}\n \n \n updateUser(user.username, !user.admin)\n }\n />\n
      \n \n history.push('/admin/')}\n value={t('common:Back')}\n />\n
      \n
      \n
      \n
      \n
      \n
      \n )\n }\n}\n\nexport default connect(\n state => ({\n authUser: state.user,\n location: state.router.location,\n message: state.message,\n pagination: state.users.pagination,\n users: state.users.data,\n }),\n dispatch => ({\n loadUsers: query => {\n dispatch(getOrUpdateData('getData', 'users', query))\n },\n updateUser: (userName, isAdmin) => {\n const data = { username: userName, admin: isAdmin }\n dispatch(getOrUpdateData('updateData', 'users', data, false))\n },\n })\n)(AdminUsers)\n","import React from 'react'\nimport { Helmet } from 'react-helmet'\nimport { useTranslation } from 'react-i18next'\n\nexport default function NotFound() {\n const { t } = useTranslation()\n return (\n
      \n \n fittrackee - 404\n \n

      {t('Page not found')}

      \n
      \n )\n}\n","import React from 'react'\nimport { Helmet } from 'react-helmet'\nimport { withTranslation } from 'react-i18next'\nimport { connect } from 'react-redux'\nimport { Route, Switch } from 'react-router-dom'\n\nimport AdminApplication from './AdminApplication'\nimport AdminDashboard from './AdminDashboard'\nimport AdminSports from './AdminSports'\nimport AdminUsers from './AdminUsers'\nimport NotFound from './../Others/NotFound'\n\nfunction Admin(props) {\n const { appConfig, t, user } = props\n return (\n <>\n \n FitTrackee - {t('administration:Administration')}\n \n
      \n {user.admin ? (\n \n }\n />\n (\n \n )}\n />\n (\n \n )}\n />\n }\n />\n }\n />\n \n \n ) : (\n \n )}\n
      \n \n )\n}\n\nexport default withTranslation()(\n connect(state => ({\n appConfig: state.application.config,\n user: state.user,\n }))(Admin)\n)\n","import { format, subHours } from 'date-fns'\nimport togeojson from '@mapbox/togeojson'\n\nimport { getDateWithTZ } from './index'\n\nexport const workoutColors = [\n '#55a8a3',\n '#98C3A9',\n '#D0838A',\n '#ECC77E',\n '#926692',\n '#929292',\n '#428bca',\n]\n\nexport const recordsLabels = [\n { record_type: 'AS', label: 'Ave. speed' },\n { record_type: 'FD', label: 'Farest distance' },\n { record_type: 'LD', label: 'Longest duration' },\n { record_type: 'MS', label: 'Max. speed' },\n]\n\nexport const getGeoJson = gpxContent => {\n let jsonData\n if (gpxContent) {\n const gpx = new DOMParser().parseFromString(gpxContent, 'text/xml')\n jsonData = togeojson.gpx(gpx)\n }\n return { jsonData }\n}\n\nexport const formatWorkoutDate = (\n dateTime,\n dateFormat = null,\n timeFormat = null\n) => {\n if (!dateFormat) {\n dateFormat = 'yyyy/MM/dd'\n }\n if (!timeFormat) {\n timeFormat = 'HH:mm'\n }\n return {\n workout_date: dateTime ? format(dateTime, dateFormat) : null,\n workout_time: dateTime ? format(dateTime, timeFormat) : null,\n }\n}\n\nexport const formatWorkoutDuration = seconds => {\n let newDate = new Date(0)\n newDate = subHours(newDate.setSeconds(seconds), 1)\n return newDate.getTime()\n}\n\nexport const formatChartData = chartData => {\n for (let i = 0; i < chartData.length; i++) {\n chartData[i].time = new Date(chartData[i].time).getTime()\n chartData[i].duration = formatWorkoutDuration(chartData[i].duration)\n }\n return chartData\n}\n\nexport const formatRecord = (record, tz) => {\n let value\n switch (record.record_type) {\n case 'AS':\n case 'MS':\n value = `${record.value} km/h`\n break\n case 'FD':\n value = `${record.value} km`\n break\n default:\n // 'LD'\n value = record.value // eslint-disable-line prefer-destructuring\n }\n const [recordType] = recordsLabels.filter(\n r => r.record_type === record.record_type\n )\n return {\n workout_date: formatWorkoutDate(getDateWithTZ(record.workout_date, tz))\n .workout_date,\n workout_id: record.workout_id,\n id: record.id,\n record_type: recordType.label,\n value: value,\n }\n}\n\nconst sortSports = (a, b) => {\n const sportALabel = a.label.toLowerCase()\n const sportBLabel = b.label.toLowerCase()\n return sportALabel > sportBLabel ? 1 : sportALabel < sportBLabel ? -1 : 0\n}\n\nexport const translateSports = (sports, t, onlyActive = false) =>\n sports\n .filter(sport => (onlyActive ? sport.is_active : true))\n .map(sport => ({\n ...sport,\n label: t(`sports:${sport.label}`),\n }))\n .sort(sortSports)\n","import { createApiRequest } from '../utils'\n\nexport default class FitTrackeeApi {\n static loginOrRegisterOrPasswordReset(target, data) {\n const params = {\n url: `auth/${target}`,\n method: 'POST',\n noAuthorization: true,\n body: data,\n type: 'application/json',\n }\n return createApiRequest(params)\n }\n\n static deletePicture() {\n const params = {\n url: 'auth/picture',\n method: 'DELETE',\n }\n return createApiRequest(params)\n }\n}\n","import FitTrackeeGenericApi from '../fitTrackeeApi'\nimport FitTrackeeApi from '../fitTrackeeApi/auth'\nimport { history } from '../index'\nimport { generateIds } from '../utils'\nimport { getOrUpdateData, setError, updateLanguage } from './index'\nimport { getAppData } from './application'\n\nconst AuthError = message => ({ type: 'AUTH_ERROR', message })\n\nconst AuthErrors = messages => ({ type: 'AUTH_ERRORS', messages })\n\nconst PictureError = message => ({ type: 'PICTURE_ERROR', message })\n\nconst ProfileSuccess = profil => ({ type: 'PROFILE_SUCCESS', profil })\n\nconst ProfileError = message => ({ type: 'PROFILE_ERROR', message })\n\nconst ProfileUpdateError = message => ({\n type: 'PROFILE_UPDATE_ERROR',\n message,\n})\n\nexport const logout = () => ({ type: 'LOGOUT' })\n\nexport const loadProfile = () => dispatch => {\n if (window.localStorage.getItem('authToken')) {\n return dispatch(getProfile())\n }\n return { type: 'LOGOUT' }\n}\n\nexport const getProfile = () => dispatch =>\n FitTrackeeGenericApi.getData('auth/profile')\n .then(ret => {\n if (ret.status === 'success') {\n dispatch(getOrUpdateData('getData', 'sports'))\n ret.data.isAuthenticated = true\n if (ret.data.language) {\n dispatch(updateLanguage(ret.data.language))\n }\n return dispatch(ProfileSuccess(ret.data))\n }\n return dispatch(ProfileError(ret.message))\n })\n .catch(error => {\n throw error\n })\n\nexport const loginOrRegisterOrPasswordReset = (target, formData) => dispatch =>\n FitTrackeeApi.loginOrRegisterOrPasswordReset(target, formData)\n .then(ret => {\n if (ret.status === 'success') {\n if (target === 'password/reset-request') {\n return history.push({\n pathname: '/password-reset/sent',\n })\n }\n if (target === 'password/update') {\n return history.push({\n pathname: '/updated-password',\n })\n }\n if (target === 'login' || target === 'register') {\n window.localStorage.setItem('authToken', ret.auth_token)\n if (target === 'register') {\n dispatch(getAppData('config'))\n }\n return dispatch(getProfile())\n }\n }\n return dispatch(AuthError(ret.message))\n })\n .catch(error => {\n throw error\n })\n\nconst RegisterFormControl = (formData, onlyPasswords = false) => {\n const errMsg = []\n if (\n !onlyPasswords &&\n (formData.username.length < 3 || formData.username.length > 12)\n ) {\n errMsg.push('3 to 12 characters required for username.')\n }\n if (formData.password !== formData.password_conf) {\n errMsg.push(\"Password and password confirmation don't match.\")\n }\n if (formData.password.length < 8) {\n errMsg.push('8 characters required for password.')\n }\n return errMsg\n}\n\nexport const handleUserFormSubmit = (formData, formType) => dispatch => {\n if (formType === 'register' || formType === 'password/update') {\n const ret = RegisterFormControl(formData, formType === 'password/update')\n if (ret.length > 0) {\n return dispatch(AuthErrors(generateIds(ret)))\n }\n }\n return dispatch(loginOrRegisterOrPasswordReset(formType, formData))\n}\n\nexport const handleProfileFormSubmit = formData => dispatch => {\n if (!formData.password === formData.password_conf) {\n return dispatch(\n ProfileUpdateError(\"Password and password confirmation don't match.\")\n )\n }\n delete formData.id\n return FitTrackeeGenericApi.postData('auth/profile/edit', formData)\n .then(ret => {\n if (ret.status === 'success') {\n dispatch(getProfile())\n return history.push('/profile')\n }\n dispatch(ProfileUpdateError(ret.message))\n })\n .catch(error => {\n throw error\n })\n}\n\nexport const uploadPicture = event => dispatch => {\n event.preventDefault()\n const form = new FormData()\n form.append('file', event.target.picture.files[0])\n event.target.reset()\n return FitTrackeeGenericApi.addDataWithFile('auth/picture', form)\n .then(ret => {\n if (ret.status === 'success') {\n return dispatch(getProfile())\n }\n const msg =\n ret.status === 413\n ? 'Error during picture update, file size exceeds max size.'\n : ret.message\n return dispatch(PictureError(msg))\n })\n .catch(error => {\n throw error\n })\n}\n\nexport const deletePicture = () => dispatch =>\n FitTrackeeApi.deletePicture()\n .then(ret => {\n if (ret.status === 204) {\n return dispatch(getProfile())\n }\n return dispatch(PictureError(ret.message))\n })\n .catch(error => {\n throw error\n })\n\nexport const deleteUser = (username, isAdmin = false) => dispatch =>\n FitTrackeeGenericApi.deleteData('users', username)\n .then(ret => {\n if (ret.status === 204) {\n dispatch(getAppData('config'))\n if (isAdmin) {\n history.push('/admin/users')\n } else {\n dispatch(logout())\n history.push('/')\n }\n } else {\n ret.json().then(r => dispatch(setError(`${r.message}`)))\n }\n })\n .catch(error => dispatch(setError(`user|${error}`)))\n","import FitTrackeeGenericApi from '../fitTrackeeApi'\nimport { history } from '../index'\nimport { formatChartData } from '../utils/workouts'\nimport { setError, setLoading } from './index'\nimport { loadProfile } from './user'\n\nexport const pushWorkouts = workouts => ({\n type: 'PUSH_WORKOUTS',\n workouts,\n})\n\nexport const removeWorkout = workoutId => ({\n type: 'REMOVE_WORKOUT',\n workoutId,\n})\n\nexport const updateCalendar = workouts => ({\n type: 'UPDATE_CALENDAR',\n workouts,\n})\n\nexport const setGpx = gpxContent => ({\n type: 'SET_GPX',\n gpxContent,\n})\n\nexport const setChartData = chartData => ({\n type: 'SET_CHART_DATA',\n chartData,\n})\n\nexport const addWorkout = form => dispatch =>\n FitTrackeeGenericApi.addDataWithFile('workouts', form)\n .then(ret => {\n if (ret.status === 'created') {\n if (ret.data.workouts.length === 0) {\n dispatch(setError('workouts|no correct file.'))\n } else if (ret.data.workouts.length === 1) {\n dispatch(loadProfile())\n history.push(`/workouts/${ret.data.workouts[0].id}`)\n } else {\n // ret.data.workouts.length > 1\n dispatch(loadProfile())\n history.push('/')\n }\n } else if (ret.status === 413) {\n dispatch(\n setError('workouts|File size is greater than the allowed size')\n )\n } else {\n dispatch(setError(`workouts|${ret.message}`))\n }\n dispatch(setLoading(false))\n })\n .catch(error => {\n dispatch(setLoading(false))\n dispatch(setError(`workouts|${error}`))\n })\n\nexport const addWorkoutWithoutGpx = form => dispatch =>\n FitTrackeeGenericApi.addData('workouts/no_gpx', form)\n .then(ret => {\n if (ret.status === 'created') {\n dispatch(loadProfile())\n history.push(`/workouts/${ret.data.workouts[0].id}`)\n } else {\n dispatch(setError(`workouts|${ret.message}`))\n }\n })\n .catch(error => dispatch(setError(`workouts|${error}`)))\n\nexport const getWorkoutGpx = workoutId => dispatch => {\n if (workoutId) {\n return FitTrackeeGenericApi.getData(`workouts/${workoutId}/gpx`)\n .then(ret => {\n if (ret.status === 'success') {\n dispatch(setGpx(ret.data.gpx))\n } else {\n dispatch(setError(`workouts|${ret.message}`))\n }\n })\n .catch(error => dispatch(setError(`workouts|${error}`)))\n }\n dispatch(setGpx(null))\n}\n\nexport const getSegmentGpx = (workoutId, segmentId) => dispatch => {\n if (workoutId) {\n return FitTrackeeGenericApi.getData(\n `workouts/${workoutId}/gpx/segment/${segmentId}`\n )\n .then(ret => {\n if (ret.status === 'success') {\n dispatch(setGpx(ret.data.gpx))\n } else {\n dispatch(setError(`workouts|${ret.message}`))\n }\n })\n .catch(error => dispatch(setError(`workouts|${error}`)))\n }\n dispatch(setGpx(null))\n}\n\nexport const getWorkoutChartData = workoutId => dispatch => {\n if (workoutId) {\n return FitTrackeeGenericApi.getData(`workouts/${workoutId}/chart_data`)\n .then(ret => {\n if (ret.status === 'success') {\n dispatch(setChartData(formatChartData(ret.data.chart_data)))\n } else {\n dispatch(setError(`workouts|${ret.message}`))\n }\n })\n .catch(error => dispatch(setError(`workouts|${error}`)))\n }\n dispatch(setChartData(null))\n}\n\nexport const getSegmentChartData = (workoutId, segmentId) => dispatch => {\n if (workoutId) {\n return FitTrackeeGenericApi.getData(\n `workouts/${workoutId}/chart_data/segment/${segmentId}`\n )\n .then(ret => {\n if (ret.status === 'success') {\n dispatch(setChartData(formatChartData(ret.data.chart_data)))\n } else {\n dispatch(setError(`workouts|${ret.message}`))\n }\n })\n .catch(error => dispatch(setError(`workouts|${error}`)))\n }\n dispatch(setChartData(null))\n}\n\nexport const deleteWorkout = id => dispatch =>\n FitTrackeeGenericApi.deleteData('workouts', id)\n .then(ret => {\n if (ret.status === 204) {\n Promise.resolve(dispatch(removeWorkout(id)))\n .then(() => dispatch(loadProfile()))\n .then(() => history.push('/'))\n } else {\n dispatch(setError(`workouts|${ret.status}`))\n }\n })\n .catch(error => dispatch(setError(`workouts|${error}`)))\n\nexport const editWorkout = form => dispatch =>\n FitTrackeeGenericApi.updateData('workouts', form)\n .then(ret => {\n if (ret.status === 'success') {\n dispatch(loadProfile())\n history.push(`/workouts/${ret.data.workouts[0].id}`)\n } else {\n dispatch(setError(`workouts|${ret.message}`))\n }\n dispatch(setLoading(false))\n })\n .catch(error => {\n dispatch(setLoading(false))\n dispatch(setError(`workouts|${error}`))\n })\n\nexport const getMoreWorkouts = params => dispatch =>\n FitTrackeeGenericApi.getData('workouts', params)\n .then(ret => {\n if (ret.status === 'success') {\n if (ret.data.workouts.length > 0) {\n dispatch(pushWorkouts(ret.data.workouts))\n }\n } else {\n dispatch(setError(`workouts|${ret.message}`))\n }\n })\n .catch(error => dispatch(setError(`workouts|${error}`)))\n\nexport const getMonthWorkouts = (from, to) => dispatch =>\n FitTrackeeGenericApi.getData('workouts', {\n from,\n to,\n order: 'desc',\n per_page: 100,\n })\n .then(ret => {\n if (ret.status === 'success') {\n dispatch(updateCalendar(ret.data.workouts))\n } else {\n dispatch(setError(`workouts|${ret.message}`))\n }\n })\n .catch(error => dispatch(setError(`workouts|${error}`)))\n","import React from 'react'\nimport { Trans } from 'react-i18next'\nimport { connect } from 'react-redux'\n\nimport { setLoading } from '../../../actions/index'\nimport { addWorkout, editWorkout } from '../../../actions/workouts'\nimport { history } from '../../../index'\nimport { getFileSize } from '../../../utils'\nimport { translateSports } from '../../../utils/workouts'\n\nfunction FormWithGpx(props) {\n const {\n appConfig,\n loading,\n onAddWorkout,\n onEditWorkout,\n sports,\n t,\n workout,\n } = props\n const sportId = workout ? workout.sport_id : ''\n const translatedSports = translateSports(sports, t, true)\n const zipTooltip = `${t('workouts:no folder inside')}, ${\n appConfig.gpx_limit_import\n } ${t('workouts:files max')}, ${t('workouts:max size')}: ${getFileSize(\n appConfig.max_zip_file_size\n )}`\n const fileSizeLimit = getFileSize(appConfig.max_single_file_size)\n return (\n event.preventDefault()}\n >\n
      \n \n
      \n {workout ? (\n
      \n \n
      \n ) : (\n
      \n \n
      \n )}\n
      \n \n
      \n {loading ? (\n
      \n ) : (\n
      \n \n workout ? onEditWorkout(event, workout) : onAddWorkout(event)\n }\n value={t('common:Submit')}\n />\n history.push('/')}\n value={t('common:Cancel')}\n />\n
      \n )}\n \n )\n}\n\nexport default connect(\n state => ({\n appConfig: state.application.config,\n loading: state.loading,\n }),\n dispatch => ({\n onAddWorkout: e => {\n dispatch(setLoading(true))\n const form = new FormData()\n form.append('file', e.target.form.gpxFile.files[0])\n /* prettier-ignore */\n form.append(\n 'data',\n `{\"sport_id\": ${e.target.form.sport.value\n }, \"notes\": \"${e.target.form.notes.value}\"}`\n )\n dispatch(addWorkout(form))\n },\n onEditWorkout: (e, workout) => {\n dispatch(\n editWorkout({\n id: workout.id,\n notes: e.target.form.notes.value,\n sport_id: +e.target.form.sport.value,\n title: e.target.form.title.value,\n })\n )\n },\n })\n)(FormWithGpx)\n","import React from 'react'\nimport { connect } from 'react-redux'\n\nimport { addWorkoutWithoutGpx, editWorkout } from '../../../actions/workouts'\nimport { history } from '../../../index'\nimport { getDateWithTZ } from '../../../utils'\nimport { formatWorkoutDate, translateSports } from '../../../utils/workouts'\n\nfunction FormWithoutGpx(props) {\n const { onAddOrEdit, sports, t, user, workout } = props\n const translatedSports = translateSports(sports, t, true)\n let workoutDate,\n workoutTime,\n sportId = ''\n if (workout) {\n const workoutDateTime = formatWorkoutDate(\n getDateWithTZ(workout.workout_date, user.timezone),\n 'yyyy-MM-dd'\n )\n workoutDate = workoutDateTime.workout_date\n workoutTime = workoutDateTime.workout_time\n sportId = workout.sport_id\n }\n\n return (\n
      event.preventDefault()}>\n
      \n \n
      \n
      \n \n
      \n
      \n \n
      \n
      \n \n
      \n
      \n \n
      \n
      \n \n
      \n onAddOrEdit(event, workout)}\n value={t('common:Submit')}\n />\n history.push('/')}\n value={t('common:Cancel')}\n />\n \n )\n}\n\nexport default connect(\n state => ({\n user: state.user,\n }),\n dispatch => ({\n onAddOrEdit: (e, workout) => {\n const d = e.target.form.duration.value.split(':')\n const duration = +d[0] * 60 * 60 + +d[1] * 60 + +d[2]\n\n /* prettier-ignore */\n const workoutDate = `${e.target.form.workout_date.value\n } ${ e.target.form.workout_time.value}`\n\n const data = {\n workout_date: workoutDate,\n distance: +e.target.form.distance.value,\n duration,\n notes: e.target.form.notes.value,\n sport_id: +e.target.form.sport_id.value,\n title: e.target.form.title.value,\n }\n if (workout) {\n data.id = workout.id\n dispatch(editWorkout(data))\n } else {\n dispatch(addWorkoutWithoutGpx(data))\n }\n },\n })\n)(FormWithoutGpx)\n","import React from 'react'\nimport { Helmet } from 'react-helmet'\nimport { withTranslation } from 'react-i18next'\nimport { connect } from 'react-redux'\n\nimport FormWithGpx from './WorkoutForms/FormWithGpx'\nimport FormWithoutGpx from './WorkoutForms/FormWithoutGpx'\nimport Message from '../Common/Message'\n\nclass WorkoutAddEdit extends React.Component {\n constructor(props, context) {\n super(props, context)\n this.state = {\n withGpx: true,\n }\n }\n\n handleRadioChange(changeEvent) {\n this.setState({\n withGpx:\n changeEvent.target.name === 'withGpx'\n ? changeEvent.target.value\n : !changeEvent.target.value,\n })\n }\n\n render() {\n const { loading, message, sports, t, workout } = this.props\n const { withGpx } = this.state\n return (\n
      \n \n \n FitTrackee -{' '}\n {workout\n ? t('workouts:Edit a workout')\n : t('workouts:Add a workout')}\n \n \n
      \n
      \n \n
      \n
      \n
      \n
      \n
      \n

      \n {workout\n ? t('workouts:Edit a workout')\n : t('workouts:Add a workout')}\n

      \n
      \n {workout ? (\n workout.with_gpx ? (\n \n ) : (\n \n )\n ) : (\n
      \n
      \n
      \n
      \n \n
      \n
      \n \n
      \n
      \n
      \n {withGpx ? (\n \n ) : (\n \n )}\n
      \n )}\n
      \n
      \n
      \n
      \n
      \n
      \n
      \n )\n }\n}\n\nexport default withTranslation()(\n connect(state => ({\n loading: state.loading,\n }))(WorkoutAddEdit)\n)\n","import React from 'react'\nimport { connect } from 'react-redux'\n\nimport WorkoutAddOrEdit from './WorkoutAddOrEdit'\n\nfunction WorkoutAdd(props) {\n const { message, sports } = props\n return (\n
      \n \n
      \n )\n}\n\nexport default connect(state => ({\n message: state.message,\n sports: state.sports.data,\n user: state.user,\n}))(WorkoutAdd)\n","import React from 'react'\nimport { useTranslation } from 'react-i18next'\n\nexport default function CustomModal(props) {\n const { t } = useTranslation()\n return (\n
      \n
      \n
      \n
      \n
      {props.title}
      \n props.close()}\n >\n ×\n \n
      \n
      \n

      {props.text}

      \n
      \n
      \n props.confirm()}\n >\n {t('common:Yes')}\n \n props.close()}\n >\n {t('common:No')}\n \n
      \n
      \n
      \n
      \n )\n}\n","import React from 'react'\nimport { Link } from 'react-router-dom'\n\nimport { getDateWithTZ } from '../../../utils'\nimport { formatWorkoutDate } from '../../../utils/workouts'\n\nexport default function WorkoutCardHeader(props) {\n const {\n dataType,\n displayModal,\n segmentId,\n sport,\n t,\n title,\n user,\n workout,\n } = props\n const workoutDate = workout\n ? formatWorkoutDate(getDateWithTZ(workout.workout_date, user.timezone))\n : null\n\n const previousUrl =\n dataType === 'segment' && segmentId !== 1\n ? `/workouts/${workout.id}/segment/${segmentId - 1}`\n : dataType === 'workout' && workout.previous_workout\n ? `/workouts/${workout.previous_workout}`\n : null\n const nextUrl =\n dataType === 'segment' && segmentId < workout.segments.length\n ? `/workouts/${workout.id}/segment/${segmentId + 1}`\n : dataType === 'workout' && workout.next_workout\n ? `/workouts/${workout.next_workout}`\n : null\n\n return (\n
      \n
      \n
      \n {previousUrl ? (\n \n \n \n ) : (\n \n )}\n
      \n
      \n \"sport\n
      \n
      \n {dataType === 'workout' ? (\n <>\n {title}{' '}\n \n \n \n displayModal(true)}\n title={t('workouts:Delete workout')}\n />\n \n ) : (\n <>\n {/* prettier-ignore */}\n \n {title}\n {' '}\n - {t('workouts:segment')} {segmentId}\n \n )}\n
      \n {workoutDate && (\n \n {`${workoutDate.workout_date} - ${workoutDate.workout_time}`}\n \n )}\n
      \n
      \n {nextUrl ? (\n \n \n \n ) : (\n \n )}\n
      \n
      \n
      \n )\n}\n","import { format } from 'date-fns'\nimport React from 'react'\nimport { connect } from 'react-redux'\nimport {\n Area,\n ComposedChart,\n Line,\n ResponsiveContainer,\n Tooltip,\n XAxis,\n YAxis,\n} from 'recharts'\n\nimport {\n getSegmentChartData,\n getWorkoutChartData,\n} from '../../../actions/workouts'\n\nclass WorkoutCharts extends React.Component {\n constructor(props, context) {\n super(props, context)\n this.state = {\n displayDistance: true,\n dataToHide: [],\n }\n }\n\n componentDidMount() {\n if (this.props.dataType === 'workout') {\n this.props.loadWorkoutData(this.props.workout.id)\n } else {\n this.props.loadSegmentData(this.props.workout.id, this.props.segmentId)\n }\n }\n\n componentDidUpdate(prevProps) {\n if (\n (this.props.dataType === 'workout' &&\n prevProps.workout.id !== this.props.workout.id) ||\n (this.props.dataType === 'workout' && prevProps.dataType === 'segment')\n ) {\n this.props.loadWorkoutData(this.props.workout.id)\n }\n if (\n this.props.dataType === 'segment' &&\n prevProps.segmentId !== this.props.segmentId\n ) {\n this.props.loadSegmentData(this.props.workout.id, this.props.segmentId)\n }\n }\n\n componentWillUnmount() {\n this.props.loadWorkoutData(null)\n }\n\n handleRadioChange(changeEvent) {\n this.setState({\n displayDistance:\n changeEvent.target.name === 'distance'\n ? changeEvent.target.value\n : !changeEvent.target.value,\n })\n }\n\n handleLegendChange(e) {\n const { dataToHide } = this.state\n const name = e.target.name // eslint-disable-line prefer-destructuring\n if (dataToHide.find(d => d === name)) {\n dataToHide.splice(dataToHide.indexOf(name), 1)\n } else {\n dataToHide.push(name)\n }\n this.setState({ dataToHide })\n }\n\n displayData(name) {\n const { dataToHide } = this.state\n return !dataToHide.find(d => d === name)\n }\n\n render() {\n const { chartData, t, updateCoordinates } = this.props\n const { displayDistance } = this.state\n const xInterval = chartData ? parseInt(chartData.length / 10, 10) : 0\n let xDataKey, xScale\n if (displayDistance) {\n xDataKey = 'distance'\n xScale = 'linear'\n } else {\n xDataKey = 'duration'\n xScale = 'time'\n }\n return (\n
      \n {chartData && chartData.length > 0 ? (\n
      \n
      \n \n \n
      \n
      \n
      \n \n \n
      \n
      \n
      \n \n updateCoordinates(e.activePayload)}\n onMouseLeave={() => updateCoordinates(null)}\n >\n \n displayDistance ? value : format(value, 'HH:mm:ss')\n }\n type=\"number\"\n />\n \n \n {this.displayData('elevation') && (\n \n )}\n {this.displayData('speed') && (\n \n )}\n \n displayDistance\n ? `${t('workouts:distance')}: ${value} km`\n : `${t('workouts:duration')}: ${format(\n value,\n 'HH:mm:ss'\n )}`\n }\n />\n \n \n
      \n
      \n {t('workouts:data from gpx, without any cleaning')}\n
      \n
      \n ) : (\n t('workouts:No data to display')\n )}\n
      \n )\n }\n}\n\nexport default connect(\n state => ({\n chartData: state.chartData,\n }),\n dispatch => ({\n loadWorkoutData: workoutId => {\n dispatch(getWorkoutChartData(workoutId))\n },\n loadSegmentData: (workoutId, segmentId) => {\n dispatch(getSegmentChartData(workoutId, segmentId))\n },\n })\n)(WorkoutCharts)\n","import React from 'react'\n\nexport default function WorkoutWeather(props) {\n const { t, workout } = props\n return (\n
      \n {workout.weather_start && workout.weather_end && (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
      \n \n {t('workouts:Start')}\n
      \n \n
      \n {t('workouts:End')}\n
      \n \n
      \n \n {Number(workout.weather_start.temperature).toFixed(1)}°C{Number(workout.weather_end.temperature).toFixed(1)}°C
      \n \n \n {Number(workout.weather_start.humidity * 100).toFixed(1)}%\n {Number(workout.weather_end.humidity * 100).toFixed(1)}%
      \n \n {Number(workout.weather_start.wind).toFixed(1)}m/s{Number(workout.weather_end.wind).toFixed(1)}m/s
      \n )}\n
      \n )\n}\n","import React from 'react'\n\nimport WorkoutWeather from './WorkoutWeather'\n\nexport default function WorkoutDetails(props) {\n const { t, workout } = props\n const withPauses = workout.pauses !== '0:00:00' && workout.pauses !== null\n return (\n
      \n

      \n \n {t('workouts:Duration')}: {workout.moving}\n {workout.records &&\n workout.records.find(record => record.record_type === 'LD') && (\n \n \n \n )}\n {withPauses && (\n \n
      ({t('workouts:pauses')}: {workout.pauses},{' '}\n {t('workouts:total duration')}: {workout.duration})\n
      \n )}\n

      \n

      \n \n {t('workouts:Distance')}: {workout.distance} km\n {workout.records &&\n workout.records.find(record => record.record_type === 'FD') && (\n \n \n \n )}\n

      \n

      \n \n {t('workouts:Average speed')}: {workout.ave_speed} km/h\n {workout.records &&\n workout.records.find(record => record.record_type === 'AS') && (\n \n \n \n )}\n
      \n {t('workouts:Max. speed')}: {workout.max_speed} km/h\n {workout.records &&\n workout.records.find(record => record.record_type === 'MS') && (\n \n \n \n )}\n

      \n {workout.min_alt && workout.max_alt && (\n

      \n \n {t('workouts:Min. altitude')}: {workout.min_alt}m\n
      \n {t('workouts:Max. altitude')}: {workout.max_alt}m\n

      \n )}\n {workout.ascent && workout.descent && (\n

      \n \n {t('workouts:Ascent')}: {workout.ascent}m\n
      \n {t('workouts:Descent')}: {workout.descent}m\n

      \n )}\n \n
      \n )\n}\n","import React from 'react'\nimport { GeoJSON, Marker, TileLayer, useMap } from 'react-leaflet'\nimport hash from 'object-hash'\n\nimport { apiUrl } from '../../../utils'\n\nexport default function Map({ bounds, coordinates, jsonData, mapAttribution }) {\n const map = useMap()\n map.fitBounds(bounds)\n return (\n <>\n \n \n {coordinates.latitude && (\n \n )}\n \n )\n}\n","import React from 'react'\nimport { MapContainer } from 'react-leaflet'\nimport { connect } from 'react-redux'\n\nimport Map from './Map'\nimport { getSegmentGpx, getWorkoutGpx } from '../../../actions/workouts'\nimport { getGeoJson } from '../../../utils/workouts'\n\nclass WorkoutMap extends React.Component {\n constructor(props, context) {\n super(props, context)\n this.state = {\n zoom: 13,\n }\n }\n\n componentDidMount() {\n if (this.props.dataType === 'workout') {\n this.props.loadWorkoutGpx(this.props.workout.id)\n } else {\n this.props.loadSegmentGpx(this.props.workout.id, this.props.segmentId)\n }\n }\n\n componentDidUpdate(prevProps) {\n if (\n (this.props.dataType === 'workout' &&\n prevProps.workout.id !== this.props.workout.id) ||\n (this.props.dataType === 'workout' && prevProps.dataType === 'segment')\n ) {\n this.props.loadWorkoutGpx(this.props.workout.id)\n }\n if (\n this.props.dataType === 'segment' &&\n prevProps.segmentId !== this.props.segmentId\n ) {\n this.props.loadSegmentGpx(this.props.workout.id, this.props.segmentId)\n }\n }\n\n componentWillUnmount() {\n this.props.loadWorkoutGpx(null)\n }\n\n render() {\n const { coordinates, gpxContent, mapAttribution, workout } = this.props\n const { jsonData } = getGeoJson(gpxContent)\n const bounds = [\n [workout.bounds[0], workout.bounds[1]],\n [workout.bounds[2], workout.bounds[3]],\n ]\n\n return (\n
      \n {jsonData && (\n \n \n \n )}\n
      \n )\n }\n}\n\nexport default connect(\n state => ({\n gpxContent: state.gpx,\n mapAttribution: state.application.config.map_attribution,\n }),\n dispatch => ({\n loadWorkoutGpx: workoutId => {\n dispatch(getWorkoutGpx(workoutId))\n },\n loadSegmentGpx: (workoutId, segmentId) => {\n dispatch(getSegmentGpx(workoutId, segmentId))\n },\n })\n)(WorkoutMap)\n","import React from 'react'\n\nexport default function WorkoutNoMap(props) {\n const { t } = props\n return (\n
      {t('workouts:No Map')}
      \n )\n}\n","import React from 'react'\n\nexport default function WorkoutNotes(props) {\n const { notes, t } = props\n return (\n
      \n
      \n
      \n
      \n Notes\n
      \n {notes ? notes : t('workouts:No notes')}\n
      \n
      \n
      \n
      \n
      \n )\n}\n","import React from 'react'\nimport { Link } from 'react-router-dom'\n\nexport default function WorkoutSegments(props) {\n const { segments, t } = props\n return (\n
      \n
      \n
      \n
      \n {t('workouts:Segments')}\n
      \n
        \n {segments.map((segment, index) => (\n \n \n {t('workouts:segment')} {index + 1}\n {' '}\n ({t('workouts:distance')}: {segment.distance} km,{' '}\n {t('workouts:duration')}: {segment.duration})\n \n ))}\n
      \n
      \n
      \n
      \n
      \n
      \n )\n}\n","import React from 'react'\nimport { Helmet } from 'react-helmet'\nimport { withTranslation } from 'react-i18next'\nimport { connect } from 'react-redux'\n\nimport CustomModal from '../../Common/CustomModal'\nimport Message from '../../Common/Message'\nimport WorkoutCardHeader from './WorkoutCardHeader'\nimport WorkoutCharts from './WorkoutCharts'\nimport WorkoutDetails from './WorkoutDetails'\nimport WorkoutMap from './WorkoutMap'\nimport WorkoutNoMap from './WorkoutNoMap'\nimport WorkoutNotes from './WorkoutNotes'\nimport WorkoutSegments from './WorkoutSegments'\nimport { getOrUpdateData } from '../../../actions'\nimport { deleteWorkout } from '../../../actions/workouts'\n\nclass WorkoutDisplay extends React.Component {\n constructor(props, context) {\n super(props, context)\n this.state = {\n displayModal: false,\n coordinates: {\n latitude: null,\n longitude: null,\n },\n }\n }\n\n componentDidMount() {\n this.props.loadWorkout(this.props.match.params.workoutId)\n }\n\n componentDidUpdate(prevProps) {\n if (\n prevProps.match.params.workoutId !== this.props.match.params.workoutId\n ) {\n this.props.loadWorkout(this.props.match.params.workoutId)\n }\n }\n\n displayModal(value) {\n this.setState(prevState => ({\n ...prevState,\n displayModal: value,\n }))\n }\n\n updateCoordinates(activePayload) {\n const coordinates =\n activePayload && activePayload.length > 0\n ? {\n latitude: activePayload[0].payload.latitude,\n longitude: activePayload[0].payload.longitude,\n }\n : {\n latitude: null,\n longitude: null,\n }\n this.setState(prevState => ({\n ...prevState,\n coordinates,\n }))\n }\n\n render() {\n const { message, onDeleteWorkout, sports, t, user, workouts } = this.props\n const { coordinates, displayModal } = this.state\n const [workout] = workouts\n const title = workout ? workout.title : t('workouts:Workout')\n const [sport] = workout ? sports.filter(s => s.id === workout.sport_id) : []\n const segmentId = parseInt(this.props.match.params.segmentId)\n const dataType = segmentId >= 0 ? 'segment' : 'workout'\n return (\n
      \n \n FitTrackee - {title}\n \n {message ? (\n \n ) : (\n
      \n {displayModal && (\n {\n onDeleteWorkout(workout.id)\n this.displayModal(false)\n }}\n close={() => this.displayModal(false)}\n />\n )}\n {workout && sport && workouts.length === 1 && (\n
      \n
      \n
      \n
      \n
      \n this.displayModal(true)}\n />\n
      \n
      \n
      \n
      \n {workout.with_gpx ? (\n \n ) : (\n \n )}\n
      \n
      \n \n
      \n
      \n
      \n
      \n
      \n
      \n {workout.with_gpx && (\n
      \n
      \n
      \n
      \n
      \n
      \n
      \n {t('workouts:Chart')}\n
      \n \n this.updateCoordinates(e)\n }\n />\n
      \n
      \n
      \n
      \n
      \n
      \n )}\n {dataType === 'workout' && (\n <>\n \n {workout.segments.length > 1 && (\n \n )}\n \n )}\n
      \n )}\n
      \n )}\n
      \n )\n }\n}\n\nexport default withTranslation()(\n connect(\n state => ({\n workouts: state.workouts.data,\n message: state.message,\n sports: state.sports.data,\n user: state.user,\n }),\n dispatch => ({\n loadWorkout: workoutId => {\n dispatch(getOrUpdateData('getData', 'workouts', { id: workoutId }))\n },\n onDeleteWorkout: workoutId => {\n dispatch(deleteWorkout(workoutId))\n },\n })\n )(WorkoutDisplay)\n)\n","import React from 'react'\nimport { connect } from 'react-redux'\n\nimport WorkoutAddOrEdit from './WorkoutAddOrEdit'\nimport { getOrUpdateData } from '../../actions'\n\nclass WorkoutEdit extends React.Component {\n componentDidMount() {\n this.props.loadWorkout(this.props.match.params.workoutId)\n }\n\n render() {\n const { message, sports, workouts } = this.props\n const [workout] = workouts\n return (\n
      \n {sports.length > 0 && (\n \n )}\n
      \n )\n }\n}\n\nexport default connect(\n state => ({\n workouts: state.workouts.data,\n message: state.message,\n sports: state.sports.data,\n user: state.user,\n }),\n dispatch => ({\n loadWorkout: workoutId => {\n dispatch(getOrUpdateData('getData', 'workouts', { id: workoutId }))\n },\n })\n)(WorkoutEdit)\n","import React from 'react'\nimport { connect } from 'react-redux'\nimport { Redirect, Route, Switch } from 'react-router-dom'\n\nimport NotFound from './../Others/NotFound'\nimport WorkoutAdd from './WorkoutAdd'\nimport WorkoutDisplay from './WorkoutDisplay'\nimport WorkoutEdit from './WorkoutEdit'\nimport { isLoggedIn } from '../../utils'\n\nfunction Workout() {\n return (\n
      \n {isLoggedIn() ? (\n \n \n \n \n \n \n \n ) : (\n \n )}\n
      \n )\n}\n\nexport default connect(state => ({\n user: state.user,\n}))(Workout)\n","import React from 'react'\nimport { Link } from 'react-router-dom'\n\nexport default class NoWorkouts extends React.PureComponent {\n render() {\n const { t } = this.props\n return (\n
      \n
      \n {t('common:No workouts.')}{' '}\n \n {t('dashboard:Upload one !')}\n \n
      \n
      \n )\n }\n}\n","import React from 'react'\n\nimport { translateSports } from '../../utils/workouts'\n\nexport default class WorkoutsFilter extends React.PureComponent {\n render() {\n const { loadWorkouts, sports, t, updateParams } = this.props\n const translatedSports = translateSports(sports, t)\n return (\n
      \n
      \n
      event.preventDefault()}>\n
      \n \n \n
      \n
      \n \n
      \n
      \n \n
      \n
      \n \n
      \n
      \n \n
      \n
      \n \n
      \n loadWorkouts()}\n type=\"submit\"\n value={t('workouts:Filter')}\n />\n \n
      \n
      \n )\n }\n}\n","import React from 'react'\n\nimport { apiUrl } from '../../utils'\n\nexport default class StaticMap extends React.PureComponent {\n render() {\n const { display, workout } = this.props\n\n return (\n
      \n \n
      \n ©\n \n OpenStreetMap\n \n
      \n
      \n )\n }\n}\n","import { format } from 'date-fns'\nimport React from 'react'\nimport { Link } from 'react-router-dom'\n\nimport StaticMap from '../Common/StaticMap'\nimport { getDateWithTZ } from '../../utils'\n\nexport default class WorkoutsList extends React.PureComponent {\n render() {\n const { loading, sports, t, user, workouts } = this.props\n return (\n
      \n
      \n \n \n \n \n \n \n \n \n \n \n \n \n {!loading &&\n sports &&\n workouts.map((workout, idx) => (\n // eslint-disable-next-line react/no-array-index-key\n \n \n \n \n \n \n \n \n \n ))}\n \n
      \n {t('common:Workout')}{t('workouts:Date')}{t('workouts:Distance')}{t('workouts:Duration')}{t('workouts:Ave. speed')}{t('workouts:Max. speed')}
      \n \n {t('common:Sport')}\n \n s.id === workout.sport_id)\n .map(s => s.img)}\n alt=\"workout sport logo\"\n />\n \n \n {t('common:Workout')}\n \n \n {workout.title}\n \n {workout.map && (\n \n )}\n \n \n {t('workouts:Date')}\n \n {format(\n getDateWithTZ(workout.workout_date, user.timezone),\n 'dd/MM/yyyy HH:mm'\n )}\n \n \n {t('workouts:Distance')}\n \n {Number(workout.distance).toFixed(2)} km\n \n \n {t('workouts:Duration')}\n \n {workout.moving}\n \n \n {t('workouts:Ave. speed')}\n \n {workout.ave_speed} km/h\n \n \n {t('workouts:Max. speed')}\n \n {workout.max_speed} km/h\n
      \n {loading &&
      }\n
      \n
      \n )\n }\n}\n","import React from 'react'\nimport { Helmet } from 'react-helmet'\nimport { withTranslation } from 'react-i18next'\nimport { connect } from 'react-redux'\n\nimport Message from '../Common/Message'\nimport NoWorkouts from '../Common/NoWorkouts'\nimport WorkoutsFilter from './WorkoutsFilter'\nimport WorkoutsList from './WorkoutsList'\nimport { getOrUpdateData } from '../../actions'\nimport { getMoreWorkouts } from '../../actions/workouts'\n\nclass Workouts extends React.Component {\n constructor(props, context) {\n super(props, context)\n this.state = {\n params: {\n page: 1,\n per_page: 10,\n },\n }\n }\n\n componentDidMount() {\n this.props.loadWorkouts(this.state.params)\n }\n\n setParams(e) {\n const { params } = this.state\n if (e.target.value === '') {\n delete params[e.target.name]\n } else {\n params[e.target.name] = e.target.value\n }\n params.page = 1\n this.setState(params)\n }\n render() {\n const {\n loading,\n loadWorkouts,\n loadMoreWorkouts,\n message,\n sports,\n t,\n user,\n workouts,\n } = this.props\n const { params } = this.state\n const paginationEnd =\n workouts.length > 0\n ? workouts[workouts.length - 1].previous_workout === null\n : true\n return (\n
      \n \n FitTrackee - {t('common:Workouts')}\n \n {message ? (\n \n ) : (\n
      \n
      \n
      \n loadWorkouts(params)}\n t={t}\n updateParams={e => this.setParams(e)}\n />\n
      \n
      \n \n {!paginationEnd && (\n {\n params.page += 1\n loadMoreWorkouts(params)\n this.setState(params)\n }}\n />\n )}\n {workouts.length === 0 && }\n
      \n
      \n
      \n )}\n
      \n )\n }\n}\n\nexport default withTranslation()(\n connect(\n state => ({\n workouts: state.workouts.data,\n loading: state.loading,\n message: state.message,\n sports: state.sports.data,\n user: state.user,\n }),\n dispatch => ({\n loadWorkouts: params => {\n dispatch(getOrUpdateData('getData', 'workouts', params))\n },\n loadMoreWorkouts: params => {\n dispatch(getMoreWorkouts(params))\n },\n })\n )(Workouts)\n)\n","import { format } from 'date-fns'\nimport React from 'react'\nimport { Helmet } from 'react-helmet'\nimport { withTranslation } from 'react-i18next'\nimport { connect } from 'react-redux'\n\nimport Message from '../Common/Message'\nimport { deletePicture, uploadPicture } from '../../actions/user'\nimport { apiUrl, getFileSize } from '../../utils'\nimport { history } from '../../index'\n\nfunction ProfileDetail({\n appConfig,\n displayModal,\n editable,\n isDeletable,\n message,\n onDeletePicture,\n onUploadPicture,\n pathname,\n t,\n user,\n}) {\n const createdAt = user.created_at\n ? format(new Date(user.created_at), 'dd/MM/yyyy HH:mm')\n : ''\n const birthDate = user.birth_date\n ? format(new Date(user.birth_date), 'dd/MM/yyyy')\n : ''\n const fileSizeLimit = getFileSize(appConfig.max_single_file_size)\n return (\n
      \n \n FitTrackee - {t('user:Profile')}\n \n \n
      \n

      {t('user:Profile')}

      \n
      \n
      \n
      \n
      \n {user.username}\n
      \n
      \n
      \n
      \n

      \n {/* eslint-disable-next-line max-len */}\n \n {t('user:Email')}\n : {user.email}\n

      \n

      \n \n {t('user:Registration Date')}\n \n : {createdAt}\n

      \n

      \n {t('user:First Name')}\n : {user.first_name}\n

      \n

      \n {/* eslint-disable-next-line max-len */}\n \n {t('user:Last Name')}\n : {user.last_name}\n

      \n

      \n {t('user:Birth Date')}\n : {birthDate}\n

      \n

      \n {/* eslint-disable-next-line max-len */}\n \n {t('user:Location')}\n : {user.location}\n

      \n

      \n {t('user:Bio')}:{' '}\n {user.bio}\n

      \n

      \n {/* eslint-disable-next-line max-len */}\n \n {t('user:Language')}\n : {user.language}\n

      \n

      \n {/* eslint-disable-next-line max-len */}\n \n {t('user:Timezone')}\n : {user.timezone}\n

      \n

      \n \n {t('user:First day of week')}\n \n : {user.weekm ? t('user:Monday') : t('user:Sunday')}\n

      \n
      \n
      \n {user.picture === true && (\n
      \n \n {editable && (\n <>\n
      \n onDeletePicture()}\n >\n {t('user:Delete picture')}\n \n
      \n
      \n \n )}\n
      \n )}\n {editable && (\n onUploadPicture(event)}\n >\n \n
      \n \n {` (max. size: ${fileSizeLimit})`}\n \n )}{' '}\n
      \n
      \n {editable && (\n history.push('/profile/edit')}\n >\n {t('common:Edit')}\n \n )}\n {isDeletable && (\n displayModal(true)}\n >\n {t('user:Delete user account')}\n \n )}\n \n pathname === '/profile' ? history.push('/') : history.go(-1)\n }\n >\n {t(\n pathname === '/profile'\n ? 'common:Back to home'\n : 'common:Back'\n )}\n \n
      \n
      \n
      \n
      \n
      \n
      \n )\n}\n\nexport default withTranslation()(\n connect(\n state => ({\n appConfig: state.application.config,\n pathname: state.router.location.pathname,\n message: state.message,\n }),\n dispatch => ({\n onDeletePicture: () => {\n dispatch(deletePicture())\n },\n onUploadPicture: event => {\n dispatch(uploadPicture(event))\n },\n })\n )(ProfileDetail)\n)\n","import React from 'react'\nimport { withTranslation } from 'react-i18next'\nimport { connect } from 'react-redux'\n\nimport ProfileDetail from './ProfileDetail'\n\nfunction CurrentUserProfile({ t, user }) {\n return (\n
      \n \n
      \n )\n}\n\nexport default withTranslation()(\n connect(state => ({\n user: state.user,\n }))(CurrentUserProfile)\n)\n","import React from 'react'\nimport { Link } from 'react-router-dom'\n\nimport { recordsLabels } from '../../utils/workouts'\n\nexport default function CalendarWorkout(props) {\n const { isDisabled, isMore, sportImg, workout } = props\n return (\n \n <>\n \n {workout.records.length > 0 && (\n \n \n ` ${\n recordsLabels.filter(\n r => r.record_type === rec.record_type\n )[0].label\n }`\n )}\n />\n \n )}\n \n \n )\n}\n","import React from 'react'\n\nimport CalendarWorkout from './CalendarWorkout'\n\nexport default class CalendarWorkouts extends React.Component {\n constructor(props, context) {\n super(props, context)\n this.state = {\n isHidden: true,\n }\n }\n\n handleDisplayMore() {\n this.setState({\n isHidden: !this.state.isHidden,\n })\n }\n\n render() {\n const { dayWorkouts, isDisabled, sports } = this.props\n const { isHidden } = this.state\n return (\n
      \n {dayWorkouts.map(act => (\n s.id === act.sport_id).map(s => s.img)}\n />\n ))}\n {dayWorkouts.length > 2 && (\n this.handleDisplayMore()}\n title=\"show more workouts\"\n />\n )}\n {!isHidden && (\n
      \n {dayWorkouts.map(act => (\n s.id === act.sport_id)\n .map(s => s.img)}\n />\n ))}\n
      \n )}\n
      \n )\n }\n}\n","// eslint-disable-next-line max-len\n// source: https://blog.flowandform.agency/create-a-custom-calendar-in-react-3df1bfd0b728\nimport {\n addDays,\n addMonths,\n endOfMonth,\n endOfWeek,\n format,\n isSameDay,\n isSameMonth,\n isToday,\n startOfMonth,\n startOfWeek,\n subMonths,\n} from 'date-fns'\nimport { enGB, fr } from 'date-fns/locale'\nimport React from 'react'\nimport { connect } from 'react-redux'\n\nimport CalendarWorkouts from './CalendarWorkouts'\nimport { getMonthWorkouts } from '../../actions/workouts'\nimport { getDateWithTZ } from '../../utils'\n\nconst getStartAndEndMonth = (date, weekStartOnMonday) => {\n const monthStart = startOfMonth(date)\n const monthEnd = endOfMonth(date)\n const weekStartsOn = weekStartOnMonday ? 1 : 0\n return {\n start: startOfWeek(monthStart, { weekStartsOn }),\n end: endOfWeek(monthEnd),\n }\n}\n\nclass Calendar extends React.Component {\n constructor(props, context) {\n super(props, context)\n const calendarDate = new Date()\n this.state = {\n currentMonth: calendarDate,\n startDate: getStartAndEndMonth(calendarDate, props.weekm).start,\n endDate: getStartAndEndMonth(calendarDate, props.weekm).end,\n weekStartOnMonday: props.weekm,\n }\n }\n\n componentDidMount() {\n this.props.loadMonthWorkouts(this.state.startDate, this.state.endDate)\n }\n\n renderHeader(localeOptions) {\n const dateFormat = 'MMM yyyy'\n return (\n
      \n
      this.handlePrevMonth()}>\n \n
      \n
      \n \n {format(this.state.currentMonth, dateFormat, localeOptions)}\n \n
      \n
      this.handleNextMonth()}>\n \n
      \n
      \n )\n }\n\n renderDays(localeOptions) {\n const dateFormat = 'EEE'\n const days = []\n const { startDate } = this.state\n\n for (let i = 0; i < 7; i++) {\n days.push(\n
      \n {format(addDays(startDate, i), dateFormat, localeOptions)}\n
      \n )\n }\n return
      {days}
      \n }\n\n filterWorkouts(day) {\n const { workouts, user } = this.props\n if (workouts) {\n return workouts\n .filter(act =>\n isSameDay(getDateWithTZ(act.workout_date, user.timezone), day)\n )\n .reverse()\n }\n return []\n }\n\n renderCells() {\n const { currentMonth, startDate, endDate, weekStartOnMonday } = this.state\n const { sports } = this.props\n\n const dateFormat = 'd'\n const rows = []\n\n let days = []\n let day = startDate\n let formattedDate = ''\n\n while (day <= endDate) {\n for (let i = 0; i < 7; i++) {\n formattedDate = format(day, dateFormat)\n const dayWorkouts = this.filterWorkouts(day)\n const isDisabled = isSameMonth(day, currentMonth) ? '' : '-disabled'\n const isWeekEnd = weekStartOnMonday\n ? [5, 6].includes(i)\n : [0, 6].includes(i)\n days.push(\n \n
      \n {formattedDate}\n \n
      \n
      \n )\n day = addDays(day, 1)\n }\n rows.push(\n
      \n {days}\n
      \n )\n days = []\n }\n return
      {rows}
      \n }\n\n updateStateDate(calendarDate) {\n const { start, end } = getStartAndEndMonth(\n calendarDate,\n this.state.weekStartOnMonday\n )\n this.setState({\n currentMonth: calendarDate,\n startDate: start,\n endDate: end,\n })\n this.props.loadMonthWorkouts(start, end)\n }\n\n handleNextMonth() {\n const calendarDate = addMonths(this.state.currentMonth, 1)\n this.updateStateDate(calendarDate)\n }\n\n handlePrevMonth() {\n const calendarDate = subMonths(this.state.currentMonth, 1)\n this.updateStateDate(calendarDate)\n }\n\n render() {\n const localeOptions = {\n locale: this.props.language === 'fr' ? fr : enGB,\n }\n return (\n
      \n
      \n {this.renderHeader(localeOptions)}\n {this.renderDays(localeOptions)}\n {this.renderCells()}\n
      \n
      \n )\n }\n}\n\nexport default connect(\n state => ({\n workouts: state.calendarWorkouts.data,\n language: state.language,\n sports: state.sports.data,\n user: state.user,\n }),\n dispatch => ({\n loadMonthWorkouts: (start, end) => {\n const dateFormat = 'yyyy-MM-dd'\n dispatch(\n getMonthWorkouts(format(start, dateFormat), format(end, dateFormat))\n )\n },\n })\n)(Calendar)\n","import React from 'react'\nimport { Link } from 'react-router-dom'\n\nimport { formatRecord, translateSports } from '../../utils/workouts'\n\nexport default function RecordsCard(props) {\n const { records, sports, t, user } = props\n const translatedSports = translateSports(sports, t)\n const recordsBySport = records.reduce((sportList, record) => {\n const sport = translatedSports.find(s => s.id === record.sport_id)\n if (sportList[sport.label] === void 0) {\n sportList[sport.label] = {\n img: sport.img,\n records: [],\n }\n }\n sportList[sport.label].records.push(formatRecord(record, user.timezone))\n return sportList\n }, {})\n\n return (\n
      \n
      {t('workouts:Personal records')}
      \n
      \n {Object.keys(recordsBySport).length === 0\n ? t('common:No records.')\n : Object.keys(recordsBySport)\n .sort()\n .map(sportLabel => (\n
      \n \n \n {sportLabel}\n \n {/* eslint-disable-next-line max-len */}\n \n \n \n \n \n \n \n {recordsBySport[sportLabel].records.map(rec => (\n \n \n \n \n \n ))}\n \n
      \n \n {sportLabel}\n
      \n {t(`workouts:${rec.record_type}`)}\n {rec.value}\n \n {rec.workout_date}\n \n
      \n
      \n ))}\n
      \n
      \n )\n}\n","import FitTrackeeGenericApi from '../fitTrackeeApi'\nimport { setData, setError } from './index'\n\nexport const getStats = (userName, type, data) => dispatch =>\n FitTrackeeGenericApi.getData(`stats/${userName}/${type}`, data)\n .then(ret => {\n if (ret.status === 'success') {\n dispatch(setData('statistics', ret.data))\n } else {\n dispatch(setError(`statistics|${ret.message}`))\n }\n })\n .catch(error => dispatch(setError(`statistics|${error}`)))\n","import {\n addDays,\n addMonths,\n addYears,\n format,\n startOfMonth,\n startOfWeek,\n startOfYear,\n} from 'date-fns'\n\nconst xAxisFormats = [\n { duration: 'week', dateFormat: 'yyyy-MM-dd', xAxis: 'dd/MM' },\n { duration: 'month', dateFormat: 'yyyy-MM', xAxis: 'MM/yyyy' },\n { duration: 'year', dateFormat: 'yyyy', xAxis: 'yyyy' },\n]\n\nexport const formatDuration = (totalSeconds, formatWithDay = false) => {\n let days = '0'\n if (formatWithDay) {\n days = String(Math.floor(totalSeconds / 86400))\n totalSeconds %= 86400\n }\n const hours = String(Math.floor(totalSeconds / 3600)).padStart(2, '0')\n totalSeconds %= 3600\n const minutes = String(Math.floor(totalSeconds / 60)).padStart(2, '0')\n const seconds = String(totalSeconds % 60).padStart(2, '0')\n if (formatWithDay) {\n return `${days === '0' ? '' : `${days}d:`}${\n hours === '00' ? '' : `${hours}h:`\n }${minutes}m:${seconds}s`\n }\n return `${hours === '00' ? '' : `${hours}:`}${minutes}:${seconds}`\n}\n\nexport const formatValue = (displayedData, value) =>\n value === 0\n ? ''\n : displayedData === 'distance'\n ? `${value.toFixed(2)} km`\n : displayedData === 'duration'\n ? formatDuration(value)\n : value\n\nconst dateIncrement = (duration, day) => {\n switch (duration) {\n case 'week':\n return addDays(day, 7)\n case 'year':\n return addYears(day, 1)\n case 'month':\n default:\n return addMonths(day, 1)\n }\n}\n\nconst startDate = (duration, day, weekm) => {\n switch (duration) {\n case 'week':\n return startOfWeek(day, { weekStartsOn: weekm ? 1 : 0 })\n case 'year':\n return startOfYear(day)\n case 'month':\n default:\n return startOfMonth(day)\n }\n}\n\nexport const formatStats = (stats, sports, params, displayedSports, weekm) => {\n const nbWorkoutsStats = []\n const distanceStats = []\n const durationStats = []\n\n for (\n let day = startDate(params.duration, params.start, weekm);\n day <= params.end;\n day = dateIncrement(params.duration, day)\n ) {\n const [xAxisFormat] = xAxisFormats.filter(\n x => x.duration === params.duration\n )\n const date = format(day, xAxisFormat.dateFormat)\n const xAxis = format(day, xAxisFormat.xAxis)\n const dataNbWorkouts = { date: xAxis }\n const dataDistance = { date: xAxis }\n const dataDuration = { date: xAxis }\n\n if (stats[date]) {\n Object.keys(stats[date])\n .filter(sportId =>\n displayedSports ? displayedSports.includes(+sportId) : true\n )\n .map(sportId => {\n const sportLabel = sports.filter(s => s.id === +sportId)[0].label\n dataNbWorkouts[sportLabel] = stats[date][sportId].nb_workouts\n dataDistance[sportLabel] = stats[date][sportId].total_distance\n dataDuration[sportLabel] = stats[date][sportId].total_duration\n return null\n })\n }\n nbWorkoutsStats.push(dataNbWorkouts)\n distanceStats.push(dataDistance)\n durationStats.push(dataDuration)\n }\n\n return {\n workouts: nbWorkoutsStats,\n distance: distanceStats,\n duration: durationStats,\n }\n}\n","import React from 'react'\n\nimport { formatDuration } from '../../../utils/stats'\n\nconst formatValue = (displayedData, value) =>\n displayedData === 'duration'\n ? formatDuration(value, true)\n : displayedData === 'distance'\n ? value.toFixed(2)\n : value\n\n/**\n * @return {null}\n */\nexport default function CustomTooltip(props) {\n const { active } = props\n if (active) {\n const { displayedData, payload, label } = props\n let total = 0\n payload.map(p => (total += p.value))\n return (\n
      \n

      {label}

      \n {payload.map(p => (\n

      \n {p.name}: {formatValue(displayedData, p.value)} {p.unit}\n

      \n ))}\n {payload.length > 0 && (\n

      Total: {formatValue(displayedData, total)}

      \n )}\n
      \n )\n }\n return null\n}\n","import React from 'react'\n\nimport { formatValue } from '../../../utils/stats'\n\n/**\n * @return {null}\n */\nexport default function CustomLabel(props) {\n const { displayedData, x, y, width, value } = props\n if (!value) {\n return null\n }\n const radius = 10\n const formattedValue = formatValue(displayedData, value)\n\n return (\n \n \n {formattedValue}\n \n \n )\n}\n","import React from 'react'\nimport {\n Bar,\n BarChart,\n ResponsiveContainer,\n Tooltip,\n XAxis,\n YAxis,\n} from 'recharts'\n\nimport { formatValue } from '../../../utils/stats'\nimport { workoutColors } from '../../../utils/workouts'\nimport CustomTooltip from './CustomTooltip'\nimport CustomLabel from './CustomLabel'\n\nexport default class StatsCharts extends React.PureComponent {\n constructor(props, context) {\n super(props, context)\n this.state = {\n displayedData: 'distance',\n }\n }\n handleRadioChange(changeEvent) {\n this.setState({\n displayedData: changeEvent.target.name,\n })\n }\n\n render() {\n const { displayedData } = this.state\n const { sports, stats, t } = this.props\n if (Object.keys(stats).length === 0) {\n return t('common:No workouts.')\n }\n return (\n
      \n
      \n \n \n \n
      \n \n \n \n formatValue(displayedData, value)} />\n }\n />\n {sports.map((s, i) => (\n \n ) : (\n ''\n )\n }\n name={t(`sports:${s.label}`)}\n />\n ))}\n \n \n
      \n )\n }\n}\n","import { format } from 'date-fns'\nimport React from 'react'\nimport { connect } from 'react-redux'\n\nimport { getStats } from '../../../actions/stats'\nimport { formatStats } from '../../../utils/stats'\nimport StatsChart from './StatsChart'\n\nclass Statistics extends React.PureComponent {\n componentDidMount() {\n this.updateData()\n }\n\n componentDidUpdate(prevProps) {\n if (\n (this.props.user.username &&\n this.props.user.username !== prevProps.user.username) ||\n this.props.statsParams !== prevProps.statsParams\n ) {\n this.updateData()\n }\n }\n\n updateData() {\n if (this.props.user.username) {\n this.props.loadWorkouts(\n this.props.user.username,\n this.props.user.weekm,\n this.props.statsParams\n )\n }\n }\n\n render() {\n const {\n displayedSports,\n sports,\n statistics,\n statsParams,\n displayEmpty,\n t,\n user,\n } = this.props\n if (!displayEmpty && Object.keys(statistics).length === 0) {\n return {t('common:No workouts.')}\n }\n const stats = formatStats(\n statistics,\n sports,\n statsParams,\n displayedSports,\n user.weekm\n )\n return \n }\n}\n\nexport default connect(\n state => ({\n sports: state.sports.data,\n statistics: state.statistics.data,\n user: state.user,\n }),\n dispatch => ({\n loadWorkouts: (userName, weekm, data) => {\n const dateFormat = 'yyyy-MM-dd'\n // depends on user config (first day of week)\n const time =\n data.duration === 'week'\n ? `${data.duration}${weekm ? 'm' : ''}`\n : data.duration\n const params = {\n from: format(data.start, dateFormat),\n to: format(data.end, dateFormat),\n time: time,\n }\n dispatch(getStats(userName, data.type, params))\n },\n })\n)(Statistics)\n","import { endOfMonth, startOfMonth } from 'date-fns'\nimport React from 'react'\n\nimport Stats from '../Common/Stats'\n\nexport default class Statistics extends React.Component {\n constructor(props, context) {\n super(props, context)\n const date = new Date()\n this.state = {\n start: startOfMonth(date),\n end: endOfMonth(date),\n duration: 'week',\n type: 'by_time',\n }\n }\n\n render() {\n const { t } = this.props\n return (\n
      \n
      {t('dashboard:This month')}
      \n
      \n \n
      \n
      \n )\n }\n}\n","import React from 'react'\n\nexport default function UserStatistics(props) {\n const { t, user } = props\n const days = user.total_duration.match(/day/g)\n ? `${user.total_duration.split(' ')[0]} ${\n user.total_duration.match(/days/g) ? t('common:days') : t('common:day')\n }`\n : `0 ${t('common:days')},`\n let duration = user.total_duration.match(/day/g)\n ? user.total_duration.split(', ')[1]\n : user.total_duration\n duration = `${duration.split(':')[0]}h ${duration.split(':')[1]}min`\n return (\n
      \n
      \n
      \n
      \n
      \n \n
      \n
      \n
      {user.nb_workouts}
      \n
      {`${\n user.nb_workouts === 1\n ? t('common:workout')\n : t('common:workouts')\n }`}
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n \n
      \n
      \n
      \n {Number(user.total_distance).toFixed(2)}\n
      \n
      km
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n \n
      \n
      \n
      {days}
      \n
      {duration}
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n \n
      \n
      \n
      {user.nb_sports}
      \n
      {`${\n user.nb_sports === 1 ? t('common:sport') : t('common:sports')\n }`}
      \n
      \n
      \n
      \n
      \n
      \n )\n}\n","import { format } from 'date-fns'\nimport React from 'react'\nimport { Link } from 'react-router-dom'\n\nimport StaticMap from '../Common/StaticMap'\nimport { getDateWithTZ } from '../../utils'\n\nexport default function WorkoutCard(props) {\n const { sports, t, user, workout } = props\n\n return (\n
      \n
      \n \n {sports\n .filter(sport => sport.id === workout.sport_id)\n .map(sport => t(`sports:${sport.label}`))}{' '}\n -{' '}\n {format(\n getDateWithTZ(workout.workout_date, user.timezone),\n 'dd/MM/yyyy HH:mm'\n )}\n \n
      \n
      \n
      \n {workout.map && (\n
      \n \n
      \n )}\n
      \n

      \n {' '}\n {t('workouts:Duration')}: {workout.moving}\n {workout.map ? (\n \n
      \n
      \n
      \n ) : (\n ' - '\n )}\n {' '}\n {t('workouts:Distance')}: {workout.distance} km\n

      \n
      \n
      \n
      \n
      \n )\n}\n","import React from 'react'\nimport { Helmet } from 'react-helmet'\nimport { withTranslation } from 'react-i18next'\nimport { connect } from 'react-redux'\n\nimport Calendar from './Calendar'\nimport Message from '../Common/Message'\nimport NoWorkouts from '../Common/NoWorkouts'\nimport Records from './Records'\nimport Statistics from './Statistics'\nimport UserStatistics from './UserStatistics'\nimport WorkoutCard from './WorkoutCard'\nimport { getOrUpdateData } from '../../actions'\nimport { getMoreWorkouts } from '../../actions/workouts'\n\nclass DashBoard extends React.Component {\n constructor(props, context) {\n super(props, context)\n this.state = {\n page: 1,\n }\n }\n\n componentDidMount() {\n this.props.loadWorkouts()\n }\n\n render() {\n const {\n loadMoreWorkouts,\n message,\n records,\n sports,\n t,\n user,\n workouts,\n } = this.props\n const paginationEnd =\n workouts.length > 0\n ? workouts[workouts.length - 1].previous_workout === null\n : true\n const { page } = this.state\n return (\n
      \n \n FitTrackee - {t('common:Dashboard')}\n \n {message ? (\n \n ) : (\n workouts &&\n user.total_duration &&\n sports.length > 0 && (\n
      \n \n
      \n
      \n \n \n
      \n
      \n \n {workouts.length > 0 ? (\n workouts.map(workout => (\n \n ))\n ) : (\n \n )}\n {!paginationEnd && (\n {\n loadMoreWorkouts(page + 1)\n this.setState({ page: page + 1 })\n }}\n />\n )}\n
      \n
      \n
      \n )\n )}\n
      \n )\n }\n}\n\nexport default withTranslation()(\n connect(\n state => ({\n workouts: state.workouts.data,\n message: state.message,\n records: state.records.data,\n sports: state.sports.data,\n user: state.user,\n }),\n dispatch => ({\n loadWorkouts: () => {\n dispatch(getOrUpdateData('getData', 'workouts', { page: 1 }))\n dispatch(getOrUpdateData('getData', 'records'))\n },\n loadMoreWorkouts: page => {\n dispatch(getMoreWorkouts({ page }))\n },\n })\n )(DashBoard)\n)\n","import React from 'react'\n\nimport { version } from './../../utils'\n\nexport default function Footer() {\n return (\n
      \n
      \n FitTrackee v{version} -{' '}\n \n source code\n {' '}\n under{' '}\n \n GPLv3\n {' '}\n license -{' '}\n \n documentation\n \n
      \n
      \n )\n}\n","var _path, _path2, _path3, _path4, _path5, _path6, _path7, _path8, _g, _path9, _path10, _path11, _path12;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgEn(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, [\"title\", \"titleId\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n id: \"Capa_1\",\n enableBackground: \"new 0 0 512 512\",\n height: 512,\n viewBox: \"0 0 512 512\",\n width: 512,\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"m466.916 27.803h-421.832c-24.859 0-45.084 20.225-45.084 45.084v366.226c0 24.859 20.225 45.084 45.084 45.084h421.832c24.859 0 45.084-20.225 45.084-45.084v-366.226c0-24.859-20.225-45.084-45.084-45.084z\",\n fill: \"#f0f9ff\"\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"m198.58 188.334-181.344-150.862c-7.75 6.107-13.456 14.691-15.905 24.554l164.142 136.551h33.102z\",\n fill: \"#f40055\"\n })), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"m313.425 198.576h33.93l163.447-135.973c-2.325-9.923-7.93-18.592-15.613-24.796l-181.764 151.211z\",\n fill: \"#c20044\"\n })), _path4 || (_path4 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"m165.472 313.425-164.141 136.549c2.449 9.863 8.155 18.447 15.905 24.553l181.344-150.861-.005-10.241z\",\n fill: \"#f40055\"\n })), _path5 || (_path5 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"m313.425 313.425v9.557l181.765 151.211c7.683-6.204 13.288-14.874 15.613-24.796l-163.446-135.971z\",\n fill: \"#c20044\"\n })), _path6 || (_path6 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"m53.273 27.803 145.302 120.879v-120.879z\",\n fill: \"#406bd4\"\n })), _path7 || (_path7 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"m313.425 150.571v-122.768h148.082z\",\n fill: \"#3257b0\"\n })), _path8 || (_path8 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"m394.732 198.575 117.268-97.556v97.556z\",\n fill: \"#3257b0\"\n })), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n fill: \"#406bd4\"\n }, /*#__PURE__*/React.createElement(\"path\", {\n d: \"m0 99.317v99.258h119.313z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"m0 313.425v97.699l117.44-97.699z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"m50.49 484.197 148.085-122.676v122.676z\"\n }))), _path9 || (_path9 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"m313.425 484.197v-124.139l149.221 124.139z\",\n fill: \"#3257b0\"\n })), _path10 || (_path10 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"m512 409.423-115.395-95.998h115.395z\",\n fill: \"#3257b0\"\n })), _path11 || (_path11 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"m512 222.142h-222.142v-194.339h-67.716v194.339h-222.142v67.716h222.142v194.339h67.716v-194.339h222.142z\",\n fill: \"#f40055\"\n })), _path12 || (_path12 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"m289.858 222.142v-194.339h-33.858v456.394h33.858v-194.339h222.142v-67.716z\",\n fill: \"#c20044\"\n })));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgEn);\nexport default __webpack_public_path__ + \"static/media/en.9e6dbfb0.svg\";\nexport { ForwardRef as ReactComponent };","import React from 'react'\nimport { Trans } from 'react-i18next'\nimport { connect } from 'react-redux'\nimport { Link } from 'react-router-dom'\n\nimport { logout } from '../../actions/user'\n\nclass Logout extends React.Component {\n componentDidMount() {\n this.props.UserLogout()\n }\n render() {\n return (\n
      \n
      \n
      \n
      \n
      \n
      \n \n You are now logged out. Click here to\n log back in.\n \n
      \n
      \n
      \n
      \n
      \n
      \n )\n }\n}\n\nexport default connect(\n state => ({\n user: state.user,\n }),\n dispatch => ({\n UserLogout: () => {\n dispatch(logout())\n },\n })\n)(Logout)\n","var _path, _path2, _path3, _path4;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgFr(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, [\"title\", \"titleId\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n id: \"Capa_1\",\n enableBackground: \"new 0 0 512 512\",\n height: 512,\n viewBox: \"0 0 512 512\",\n width: 512,\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"m173.899 31.804h-8.707l-4.397-4h-115.711c-24.859-.001-45.084 20.224-45.084 45.083v366.226c0 24.859 20.225 45.084 45.084 45.084h115.711l6.348-4h6.755v-448.393z\",\n fill: \"#406bd4\"\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"m466.916 27.803h-115.711l-4.523 4h-5.141v448.393h4.141l5.523 4h115.711c24.859 0 45.084-20.225 45.084-45.084v-366.225c0-24.859-20.225-45.084-45.084-45.084z\",\n fill: \"#c20044\"\n })), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"m160.795 27.803h190.409v456.394h-190.409z\",\n fill: \"#f0f9ff\"\n })), _path4 || (_path4 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"m256 27.803h95.205v456.394h-95.205z\",\n fill: \"#cee5f5\"\n })));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgFr);\nexport default __webpack_public_path__ + \"static/media/fr.d0f9280c.svg\";\nexport { ForwardRef as ReactComponent };","var _g, _g2, _g3, _g4, _g5, _g6, _g7;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgPassword(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, [\"title\", \"titleId\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n id: \"Layer_1\",\n xmlns: \"http://www.w3.org/2000/svg\",\n xmlnsXlink: \"http://www.w3.org/1999/xlink\",\n x: \"0px\",\n y: \"0px\",\n viewBox: \"0 0 512.001 512.001\",\n style: {\n enableBackground: \"new 0 0 512.001 512.001\"\n },\n xmlSpace: \"preserve\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _g || (_g = /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M468.683,287.265h-69.07c-4.147,0-7.508,3.361-7.508,7.508c0,4.147,3.361,7.508,7.508,7.508h69.07 c4.147,0,7.508-3.361,7.508-7.508C476.191,290.626,472.83,287.265,468.683,287.265z\"\n })))), _g2 || (_g2 = /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M105.012,268.377L85.781,256l19.231-12.376c3.487-2.243,4.495-6.888,2.251-10.376c-2.244-3.486-6.888-4.497-10.376-2.25 l-17.471,11.243v-20.776c0-4.147-3.361-7.508-7.508-7.508c-4.147,0-7.508,3.361-7.508,7.508v20.775l-17.47-11.243 c-3.486-2.245-8.132-1.238-10.376,2.25c-2.245,3.487-1.237,8.133,2.25,10.376L58.034,256l-19.231,12.376 c-3.487,2.244-4.495,6.889-2.25,10.376c1.435,2.23,3.852,3.446,6.32,3.446c1.391,0,2.799-0.386,4.056-1.196l17.47-11.243v20.775 c0,4.147,3.361,7.508,7.508,7.508c4.147,0,7.508-3.361,7.508-7.508V269.76l17.471,11.243c1.257,0.809,2.664,1.196,4.056,1.196 c2.467,0,4.885-1.216,6.32-3.446C109.507,275.266,108.499,270.62,105.012,268.377z\"\n })))), _g3 || (_g3 = /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M194.441,268.377L175.21,256l19.231-12.376c3.487-2.244,4.495-6.889,2.25-10.376c-2.245-3.486-6.888-4.497-10.376-2.25 l-17.47,11.243v-20.775c0-4.147-3.361-7.508-7.508-7.508c-4.147,0-7.508,3.361-7.508,7.508v20.776l-17.471-11.243 c-3.487-2.245-8.133-1.238-10.376,2.25c-2.245,3.487-1.237,8.133,2.25,10.376L147.463,256l-19.231,12.376 c-3.487,2.244-4.495,6.889-2.25,10.376c1.435,2.23,3.852,3.446,6.32,3.446c1.391,0,2.799-0.386,4.056-1.196l17.471-11.243v20.776 c0,4.147,3.361,7.508,7.508,7.508c4.147,0,7.508-3.361,7.508-7.508V269.76l17.47,11.243c1.257,0.809,2.664,1.196,4.056,1.196 c2.467,0,4.885-1.216,6.32-3.446C198.936,275.266,197.928,270.62,194.441,268.377z\"\n })))), _g4 || (_g4 = /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M283.871,268.377L264.64,256l19.231-12.376c3.487-2.243,4.495-6.888,2.251-10.376c-2.245-3.486-6.888-4.497-10.376-2.25 l-17.471,11.243v-20.775c0-4.147-3.361-7.508-7.508-7.508c-4.147,0-7.508,3.361-7.508,7.508v20.775l-17.471-11.243 c-3.486-2.245-8.134-1.238-10.376,2.25c-2.245,3.487-1.237,8.133,2.25,10.376L236.892,256l-19.231,12.376 c-3.487,2.244-4.495,6.889-2.25,10.376c1.435,2.23,3.852,3.446,6.32,3.446c1.391,0,2.799-0.386,4.056-1.196l17.471-11.243v20.775 c0,4.147,3.361,7.508,7.508,7.508c4.147,0,7.508-3.361,7.508-7.508V269.76l17.471,11.243c1.257,0.809,2.664,1.196,4.056,1.196 c2.467,0,4.886-1.216,6.32-3.446C288.366,275.266,287.358,270.62,283.871,268.377z\"\n })))), _g5 || (_g5 = /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M373.3,268.377L354.069,256l19.231-12.376c3.487-2.244,4.495-6.889,2.25-10.376c-2.244-3.486-6.888-4.497-10.376-2.25 l-17.471,11.243v-20.776c0-4.147-3.361-7.508-7.508-7.508c-4.147,0-7.508,3.361-7.508,7.508v20.775l-17.47-11.243 c-3.486-2.245-8.132-1.238-10.376,2.25c-2.245,3.487-1.237,8.133,2.25,10.376L326.322,256l-19.231,12.376 c-3.487,2.244-4.495,6.889-2.25,10.376c1.435,2.23,3.852,3.446,6.32,3.446c1.391,0,2.799-0.386,4.056-1.196l17.47-11.243v20.776 c0,4.147,3.361,7.508,7.508,7.508c4.147,0,7.508-3.361,7.508-7.508V269.76l17.471,11.243c1.257,0.809,2.664,1.196,4.056,1.196 c2.467,0,4.885-1.216,6.32-3.446C377.795,275.266,376.787,270.62,373.3,268.377z\"\n })))), _g6 || (_g6 = /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M271.792,330.359H15.016V181.642h93.1c4.147,0,7.508-3.361,7.508-7.508c0-4.147-3.361-7.508-7.508-7.508H12.513 C5.613,166.626,0,172.24,0,179.14v153.722c0,6.9,5.613,12.513,12.513,12.513h259.278c4.147,0,7.508-3.361,7.508-7.508 C279.299,333.72,275.939,330.359,271.792,330.359z\"\n })))), _g7 || (_g7 = /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M499.487,166.626H162.174c-4.147,0-7.508,3.361-7.508,7.508c0,4.147,3.361,7.508,7.508,7.508h334.811v148.716H323.848 c-4.147,0-7.508,3.361-7.508,7.508c0,4.147,3.361,7.508,7.508,7.508h175.64c6.9,0,12.513-5.613,12.513-12.513V179.14 C512.001,172.24,506.387,166.626,499.487,166.626z\"\n })))));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgPassword);\nexport default __webpack_public_path__ + \"static/media/password.afe6a2a5.svg\";\nexport { ForwardRef as ReactComponent };","import React, { Component } from 'react'\nimport { connect } from 'react-redux'\n\nimport { ReactComponent as EnFlag } from '../../images/flags/en.svg'\nimport { ReactComponent as FrFlag } from '../../images/flags/fr.svg'\nimport { updateLanguage } from '../../actions/index'\n\nexport const languages = [\n {\n name: 'en',\n selected: true,\n flag: ,\n },\n {\n name: 'fr',\n selected: false,\n flag: ,\n },\n]\n\nclass Dropdown extends Component {\n constructor(props) {\n super(props)\n this.state = {\n isOpen: false,\n }\n }\n\n toggleDropdown() {\n this.setState(prevState => ({\n isOpen: !prevState.isOpen,\n }))\n }\n\n render() {\n const { isOpen } = this.state\n const { language: selected, onUpdateLanguage } = this.props\n return (\n
      this.toggleDropdown()}>\n
        \n {languages\n .filter(language =>\n isOpen ? language : language.name === selected\n )\n .map(language => (\n onUpdateLanguage(language.name, selected)}\n >\n {language.flag} {language.name}\n \n ))}\n
      \n
      \n )\n }\n}\n\nexport default connect(\n state => ({\n language: state.language,\n }),\n dispatch => ({\n onUpdateLanguage: (lang, selected) => {\n if (lang !== selected) {\n dispatch(updateLanguage(lang))\n }\n },\n })\n)(Dropdown)\n","import React from 'react'\nimport { connect } from 'react-redux'\nimport { withTranslation } from 'react-i18next'\nimport { Link } from 'react-router-dom'\n\nimport LanguageDropdown from './LanguageDropdown'\nimport { apiUrl } from '../../utils'\n\nclass NavBar extends React.PureComponent {\n render() {\n const { admin, isAuthenticated, picture, t, username } = this.props\n return (\n
      \n
    \n \n \n \n \n )\n }\n}\n\nexport default withTranslation()(\n connect(({ user }) => ({\n admin: user.admin,\n isAuthenticated: user.isAuthenticated,\n picture: user.picture,\n username: user.username,\n }))(NavBar)\n)\n","var _g;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgMailSend(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, [\"title\", \"titleId\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n id: \"Capa_1\",\n xmlns: \"http://www.w3.org/2000/svg\",\n xmlnsXlink: \"http://www.w3.org/1999/xlink\",\n x: \"0px\",\n y: \"0px\",\n viewBox: \"0 0 345.834 345.834\",\n style: {\n enableBackground: \"new 0 0 345.834 345.834\"\n },\n xmlSpace: \"preserve\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _g || (_g = /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M339.798,260.429c0.13-0.026,0.257-0.061,0.385-0.094c0.109-0.028,0.219-0.051,0.326-0.084 c0.125-0.038,0.247-0.085,0.369-0.129c0.108-0.039,0.217-0.074,0.324-0.119c0.115-0.048,0.226-0.104,0.338-0.157 c0.109-0.052,0.22-0.1,0.327-0.158c0.107-0.057,0.208-0.122,0.312-0.184c0.107-0.064,0.215-0.124,0.319-0.194 c0.111-0.074,0.214-0.156,0.321-0.236c0.09-0.067,0.182-0.13,0.27-0.202c0.162-0.133,0.316-0.275,0.466-0.421 c0.027-0.026,0.056-0.048,0.083-0.075c0.028-0.028,0.052-0.059,0.079-0.088c0.144-0.148,0.284-0.3,0.416-0.46 c0.077-0.094,0.144-0.192,0.216-0.289c0.074-0.1,0.152-0.197,0.221-0.301c0.074-0.111,0.139-0.226,0.207-0.34 c0.057-0.096,0.118-0.19,0.171-0.289c0.062-0.115,0.114-0.234,0.169-0.351c0.049-0.104,0.101-0.207,0.146-0.314 c0.048-0.115,0.086-0.232,0.128-0.349c0.041-0.114,0.085-0.227,0.12-0.343c0.036-0.118,0.062-0.238,0.092-0.358 c0.029-0.118,0.063-0.234,0.086-0.353c0.028-0.141,0.045-0.283,0.065-0.425c0.014-0.1,0.033-0.199,0.043-0.3 c0.025-0.249,0.038-0.498,0.038-0.748V92.76c0-4.143-3.357-7.5-7.5-7.5h-236.25c-0.066,0-0.13,0.008-0.196,0.01 c-0.143,0.004-0.285,0.01-0.427,0.022c-0.113,0.009-0.225,0.022-0.337,0.037c-0.128,0.016-0.255,0.035-0.382,0.058 c-0.119,0.021-0.237,0.046-0.354,0.073c-0.119,0.028-0.238,0.058-0.356,0.092c-0.117,0.033-0.232,0.069-0.346,0.107 c-0.117,0.04-0.234,0.082-0.349,0.128c-0.109,0.043-0.216,0.087-0.322,0.135c-0.118,0.053-0.235,0.11-0.351,0.169 c-0.099,0.051-0.196,0.103-0.292,0.158c-0.116,0.066-0.23,0.136-0.343,0.208c-0.093,0.06-0.184,0.122-0.274,0.185 c-0.106,0.075-0.211,0.153-0.314,0.235c-0.094,0.075-0.186,0.152-0.277,0.231c-0.09,0.079-0.179,0.158-0.266,0.242 c-0.099,0.095-0.194,0.194-0.288,0.294c-0.047,0.05-0.097,0.094-0.142,0.145c-0.027,0.03-0.048,0.063-0.074,0.093 c-0.094,0.109-0.182,0.223-0.27,0.338c-0.064,0.084-0.13,0.168-0.19,0.254c-0.078,0.112-0.15,0.227-0.222,0.343 c-0.059,0.095-0.12,0.189-0.174,0.286c-0.063,0.112-0.118,0.227-0.175,0.342c-0.052,0.105-0.106,0.21-0.153,0.317 c-0.049,0.113-0.092,0.23-0.135,0.345c-0.043,0.113-0.087,0.225-0.124,0.339c-0.037,0.115-0.067,0.232-0.099,0.349 c-0.032,0.12-0.066,0.239-0.093,0.36c-0.025,0.113-0.042,0.228-0.062,0.342c-0.022,0.13-0.044,0.26-0.06,0.39 c-0.013,0.108-0.019,0.218-0.027,0.328c-0.01,0.14-0.019,0.28-0.021,0.421c-0.001,0.041-0.006,0.081-0.006,0.122v46.252 c0,4.143,3.357,7.5,7.5,7.5s7.5-3.357,7.5-7.5v-29.595l66.681,59.037c-0.348,0.245-0.683,0.516-0.995,0.827l-65.687,65.687v-49.288 c0-4.143-3.357-7.5-7.5-7.5s-7.5,3.357-7.5,7.5v9.164h-38.75c-4.143,0-7.5,3.357-7.5,7.5s3.357,7.5,7.5,7.5h38.75v43.231 c0,4.143,3.357,7.5,7.5,7.5h236.25c0.247,0,0.494-0.013,0.74-0.037c0.115-0.011,0.226-0.033,0.339-0.049 C339.542,260.469,339.67,260.454,339.798,260.429z M330.834,234.967l-65.688-65.687c-0.042-0.042-0.087-0.077-0.13-0.117 l49.383-41.897c3.158-2.68,3.546-7.412,0.866-10.571c-2.678-3.157-7.41-3.547-10.571-0.866l-84.381,71.59l-98.444-87.158h208.965 V234.967z M185.878,179.888c0.535-0.535,0.969-1.131,1.308-1.765l28.051,24.835c1.418,1.255,3.194,1.885,4.972,1.885 c1.726,0,3.451-0.593,4.853-1.781l28.587-24.254c0.26,0.38,0.553,0.743,0.89,1.08l65.687,65.687H120.191L185.878,179.888z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M7.5,170.676h126.667c4.143,0,7.5-3.357,7.5-7.5s-3.357-7.5-7.5-7.5H7.5c-4.143,0-7.5,3.357-7.5,7.5 S3.357,170.676,7.5,170.676z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M20.625,129.345H77.5c4.143,0,7.5-3.357,7.5-7.5s-3.357-7.5-7.5-7.5H20.625c-4.143,0-7.5,3.357-7.5,7.5 S16.482,129.345,20.625,129.345z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M62.5,226.51h-55c-4.143,0-7.5,3.357-7.5,7.5s3.357,7.5,7.5,7.5h55c4.143,0,7.5-3.357,7.5-7.5S66.643,226.51,62.5,226.51z\"\n }))));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgMailSend);\nexport default __webpack_public_path__ + \"static/media/mail-send.619079f0.svg\";\nexport { ForwardRef as ReactComponent };","import React from 'react'\nimport { Trans, useTranslation } from 'react-i18next'\nimport { Link } from 'react-router-dom'\n\nimport { ReactComponent as Password } from '../../images/password.svg'\nimport { ReactComponent as MailSend } from '../../images/mail-send.svg'\n\nexport default function PasswordReset(props) {\n const { t } = useTranslation()\n const { action } = props\n return (\n
    \n
    \n
    \n
    \n
    \n
    \n {action === 'sent' && (\n <>\n
    \n \n
    \n {t(\n // eslint-disable-next-line max-len\n \"user:Check your email. If your address is in our database, you'll received an email with a link to reset your password.\"\n )}\n \n )}\n {action === 'updated' && (\n <>\n
    \n \n
    \n \n {/* prettier-ignore */}\n Your password have been updated. Click\n here to log in.\n \n \n )}\n
    \n
    \n
    \n
    \n
    \n
    \n )\n}\n","import { format } from 'date-fns'\nimport React from 'react'\nimport { Helmet } from 'react-helmet'\nimport { withTranslation } from 'react-i18next'\nimport { connect } from 'react-redux'\nimport TimezonePicker from 'react-timezone'\n\nimport Message from '../Common/Message'\nimport { deleteUser, handleProfileFormSubmit } from '../../actions/user'\nimport { history } from '../../index'\nimport { languages } from '../NavBar/LanguageDropdown'\nimport CustomModal from '../Common/CustomModal'\n\nclass ProfileEdit extends React.Component {\n constructor(props, context) {\n super(props, context)\n this.state = {\n formData: {},\n displayModal: false,\n }\n }\n\n componentDidMount() {\n this.initForm()\n }\n\n componentDidUpdate(prevProps) {\n if (prevProps.user !== this.props.user) {\n this.initForm()\n }\n }\n\n initForm() {\n const { user } = this.props\n const formData = {}\n Object.keys(user).map(k =>\n user[k] === null\n ? (formData[k] = '')\n : k === 'birth_date'\n ? (formData[k] = format(new Date(user[k]), 'yyyy-MM-DD'))\n : (formData[k] = user[k])\n )\n this.setState({ formData })\n }\n\n handleFormChange(e) {\n const { formData } = this.state\n if (e.target.name === 'weekm') {\n formData.weekm = e.target.value === 'Monday'\n } else {\n formData[e.target.name] = e.target.value\n }\n this.setState(formData)\n }\n\n displayModal(value) {\n this.setState(prevState => ({\n ...prevState,\n displayModal: value,\n }))\n }\n\n render() {\n const {\n message,\n onDeleteUser,\n onHandleProfileFormSubmit,\n t,\n user,\n } = this.props\n const { displayModal, formData } = this.state\n return (\n
    \n \n FitTrackee - {t('user:Profile Edition')}\n \n {formData.isAuthenticated && (\n
    \n {displayModal && (\n {\n onDeleteUser(user.username)\n this.displayModal(false)\n }}\n close={() => this.displayModal(false)}\n />\n )}\n

    {t('user:Profile Edition')}

    \n
    \n
    \n
    \n
    \n
    {user.username}
    \n
    \n
    \n
    \n {\n event.preventDefault()\n onHandleProfileFormSubmit(formData)\n }}\n >\n
    \n \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n \n
    \n \n {\n event.preventDefault()\n this.displayModal(true)\n }}\n >\n {t('user:Delete my account')}\n \n history.push('/profile')}\n >\n {t('common:Cancel')}\n \n \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n )}\n
    \n )\n }\n}\n\nexport default withTranslation()(\n connect(\n state => ({\n location: state.router.location,\n message: state.message,\n user: state.user,\n }),\n dispatch => ({\n onDeleteUser: username => {\n dispatch(deleteUser(username))\n },\n onHandleProfileFormSubmit: formData => {\n dispatch(handleProfileFormSubmit(formData))\n },\n })\n )(ProfileEdit)\n)\n","import {\n endOfMonth,\n endOfWeek,\n endOfYear,\n startOfMonth,\n startOfYear,\n startOfWeek,\n addMonths,\n addWeeks,\n addYears,\n subMonths,\n subWeeks,\n subYears,\n} from 'date-fns'\nimport React from 'react'\nimport { Helmet } from 'react-helmet'\nimport { withTranslation } from 'react-i18next'\nimport { connect } from 'react-redux'\n\nimport NoWorkouts from '../Common/NoWorkouts'\nimport Stats from '../Common/Stats'\nimport { workoutColors, translateSports } from '../../utils/workouts'\n\nconst durations = ['week', 'month', 'year']\n\nclass Statistics extends React.Component {\n constructor(props, context) {\n super(props, context)\n const date = new Date()\n this.state = {\n displayedSports: props.sports.map(sport => sport.id),\n statsParams: {\n start: startOfMonth(subMonths(date, 11)),\n end: endOfMonth(date),\n duration: 'month',\n type: 'by_time',\n },\n }\n }\n\n componentDidUpdate(prevProps) {\n if (this.props.sports !== prevProps.sports) {\n this.updateDisplayedSports()\n }\n }\n\n updateDisplayedSports() {\n const { sports } = this.props\n this.setState({ displayedSports: sports.map(sport => sport.id) })\n }\n\n handleOnChangeDuration(e) {\n const duration = e.target.name\n\n const date = new Date()\n const start =\n duration === 'year'\n ? startOfYear(subYears(date, 9))\n : duration === 'week'\n ? startOfMonth(subMonths(date, 2))\n : startOfMonth(subMonths(date, 11))\n const end =\n duration === 'year'\n ? endOfYear(date)\n : duration === 'week'\n ? endOfWeek(date)\n : endOfMonth(date)\n this.setState({ statsParams: { duration, end, start, type: 'by_time' } })\n }\n\n handleOnChangeSports(sportId) {\n const { displayedSports } = this.state\n if (displayedSports.includes(sportId)) {\n this.setState({\n displayedSports: displayedSports.filter(s => s !== sportId),\n })\n } else {\n this.setState({ displayedSports: displayedSports.concat([sportId]) })\n }\n }\n\n handleOnClickArrows(forward) {\n const { start, end, duration } = this.state.statsParams\n let newStart, newEnd\n if (forward) {\n newStart =\n duration === 'year'\n ? startOfYear(subYears(start, 1))\n : duration === 'week'\n ? startOfWeek(subWeeks(start, 1))\n : startOfMonth(subMonths(start, 1))\n newEnd =\n duration === 'year'\n ? endOfYear(subYears(end, 1))\n : duration === 'week'\n ? endOfWeek(subWeeks(end, 1))\n : endOfMonth(subMonths(end, 1))\n } else {\n newStart =\n duration === 'year'\n ? startOfYear(addYears(start, 1))\n : duration === 'week'\n ? startOfWeek(addWeeks(start, 1))\n : startOfMonth(addMonths(start, 1))\n newEnd =\n duration === 'year'\n ? endOfYear(addYears(end, 1))\n : duration === 'week'\n ? endOfWeek(addWeeks(end, 1))\n : endOfMonth(addMonths(end, 1))\n }\n this.setState({\n statsParams: { duration, end: newEnd, start: newStart, type: 'by_time' },\n })\n }\n\n render() {\n const { displayedSports, statsParams } = this.state\n const { sports, t, user } = this.props\n const translatedSports = translateSports(\n sports.filter(sport => user.sports_list.includes(sport.id)),\n t\n )\n return (\n <>\n \n FitTrackee - {t('statistics:Statistics')}\n \n
    \n
    \n
    {t('statistics:Statistics')}
    \n \n
    \n
    \n

    \n this.handleOnClickArrows(true)}\n />\n

    \n
    \n
    \n {durations.map(d => (\n
    \n \n
    \n ))}\n
    \n
    \n

    \n this.handleOnClickArrows(false)}\n />\n

    \n
    \n
    \n \n
    \n {translatedSports.map(sport => (\n \n ))}\n
    \n
    \n
    \n {user.nb_workouts === 0 && }\n
    \n \n )\n }\n}\n\nexport default withTranslation()(\n connect(state => ({\n sports: state.sports.data,\n user: state.user,\n }))(Statistics)\n)\n","import React from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { Helmet } from 'react-helmet'\nimport { Link } from 'react-router-dom'\n\nimport { history } from '../../index'\n\nexport default function Form(props) {\n const { t } = useTranslation()\n const pageTitle = `user:${props.formType\n .charAt(0)\n .toUpperCase()}${props.formType.slice(1)}`\n return (\n
    \n \n FitTrackee - {t(`user:${props.formType}`)}\n \n

    {t(pageTitle)}

    \n
    \n
    \n
    \n
    \n
    \n {props.formType === 'register' && !props.isRegistrationAllowed ? (\n
    \n
    Registration is disabled.
    \n
    \n history.go(-1)}\n >\n Back\n \n
    \n
    \n ) : (\n <>\n \n props.handleUserFormSubmit(event, props.formType)\n }\n >\n {props.formType === 'register' && (\n
    \n \n
    \n )}\n {props.formType !== 'password reset' && (\n
    \n \n
    \n )}\n {props.formType !== 'reset your password' && (\n <>\n
    \n \n
    \n {props.formType !== 'login' && (\n
    \n \n
    \n )}\n \n )}\n \n \n

    \n {props.formType === 'login' && (\n \n {t('user:Forgot password?')}\n \n )}\n

    \n \n )}\n
    \n
    \n
    \n
    \n
    \n )\n}\n","import React from 'react'\nimport { withTranslation } from 'react-i18next'\nimport { connect } from 'react-redux'\nimport { Redirect } from 'react-router-dom'\n\nimport Form from './Form'\nimport Message from '../Common/Message'\nimport { handleUserFormSubmit } from '../../actions/user'\nimport { isLoggedIn } from '../../utils'\n\nclass UserForm extends React.Component {\n constructor(props, context) {\n super(props, context)\n this.state = {\n formData: {\n username: '',\n email: '',\n password: '',\n password_conf: '',\n },\n }\n }\n\n componentDidUpdate(prevProps) {\n if (prevProps.location.pathname !== this.props.location.pathname) {\n this.emptyForm()\n }\n }\n\n emptyForm() {\n const { formData } = this.state\n Object.keys(formData).map(k => (formData[k] = ''))\n this.setState(formData)\n }\n\n onHandleFormChange(e) {\n const { formData } = this.state\n formData[e.target.name] = e.target.value\n this.setState(formData)\n }\n\n render() {\n const {\n formType,\n isRegistrationAllowed,\n message,\n messages,\n onHandleUserFormSubmit,\n t,\n } = this.props\n const { formData } = this.state\n const { token } = this.props.location.query\n return (\n
    \n {isLoggedIn() || (formType === 'password reset' && !token) ? (\n \n ) : (\n
    \n \n this.onHandleFormChange(event)}\n handleUserFormSubmit={event => {\n event.preventDefault()\n if (formType === 'password reset') {\n formData.token = token\n }\n onHandleUserFormSubmit(formData, formType)\n }}\n />\n
    \n )}\n
    \n )\n }\n}\nexport default withTranslation()(\n connect(\n state => ({\n isRegistrationAllowed: state.application.config.is_registration_enabled,\n location: state.router.location,\n message: state.message,\n messages: state.messages,\n }),\n dispatch => ({\n onHandleUserFormSubmit: (formData, formType) => {\n formType =\n formType === 'password reset'\n ? 'password/update'\n : formType === 'reset your password'\n ? 'password/reset-request'\n : formType\n dispatch(handleUserFormSubmit(formData, formType))\n },\n })\n )(UserForm)\n)\n","import React from 'react'\nimport { withTranslation } from 'react-i18next'\nimport { connect } from 'react-redux'\n\nimport CustomModal from '../Common/CustomModal'\nimport ProfileDetail from './ProfileDetail'\nimport { getOrUpdateData } from '../../actions'\nimport { deleteUser } from '../../actions/user'\n\nclass UserProfile extends React.Component {\n constructor(props, context) {\n super(props, context)\n this.state = {\n displayModal: false,\n }\n }\n\n componentDidMount() {\n this.props.loadUser(this.props.match.params.userName)\n }\n\n componentDidUpdate(prevProps) {\n if (prevProps.match.params.userName !== this.props.match.params.userName) {\n this.props.loadUser(this.props.match.params.userName)\n }\n }\n\n displayModal(value) {\n this.setState(prevState => ({\n ...prevState,\n displayModal: value,\n }))\n }\n\n render() {\n const { t, currentUser, onDeleteUser, users } = this.props\n const { displayModal } = this.state\n const [user] = users\n const editable = user ? currentUser.username === user.username : false\n return (\n
    \n {displayModal && (\n {\n onDeleteUser(user.username)\n this.displayModal(false)\n }}\n close={() => this.displayModal(false)}\n />\n )}\n {user && (\n this.displayModal(e)}\n t={t}\n user={user}\n />\n )}\n
    \n )\n }\n}\n\nexport default withTranslation()(\n connect(\n state => ({\n currentUser: state.user,\n users: state.users.data,\n }),\n dispatch => ({\n onDeleteUser: username => {\n dispatch(deleteUser(username, true))\n },\n loadUser: userName => {\n dispatch(getOrUpdateData('getData', 'users', { username: userName }))\n },\n })\n )(UserProfile)\n)\n","import React from 'react'\nimport { connect } from 'react-redux'\nimport { Route, Switch } from 'react-router-dom'\n\nimport './App.css'\nimport Admin from './Admin'\nimport Workout from './Workout'\nimport Workouts from './Workouts'\nimport CurrentUserProfile from './User/CurrentUserProfile'\nimport Dashboard from './Dashboard'\nimport Footer from './Footer'\nimport Logout from './User/Logout'\nimport NavBar from './NavBar'\nimport NotFound from './Others/NotFound'\nimport PasswordReset from './User/PasswordReset'\nimport ProfileEdit from './User/ProfileEdit'\nimport Statistics from './Statistics'\nimport UserForm from './User/UserForm'\nimport UserProfile from './User/UserProfile'\nimport { getAppData } from '../actions/application'\n\nclass App extends React.Component {\n constructor(props) {\n super(props)\n this.props = props\n }\n componentDidMount() {\n this.props.loadAppConfig()\n }\n\n render() {\n return (\n
    \n \n \n \n }\n />\n }\n />\n }\n />\n }\n />\n }\n />\n }\n />\n \n \n \n \n \n \n \n \n \n \n \n
    \n
    \n )\n }\n}\nexport default connect(\n () => ({}),\n dispatch => ({\n loadAppConfig: () => {\n dispatch(getAppData('config'))\n },\n })\n)(App)\n","import React from 'react'\nimport { Provider } from 'react-redux'\nimport { ConnectedRouter } from 'connected-react-router'\n\nexport default function Root({ store, history, children }) {\n return (\n \n {children}\n \n )\n}\n","// In production, we register a service worker to serve assets from local cache.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on the \"N+1\" visit to a page, since previously\n// cached resources are updated in the background.\n\n// To learn more about the benefits of this model, read https://goo.gl/KwvDNy.\n// This link also includes instructions on opting out of this behavior.\n\nconst isLocalhost = Boolean(\n window.location.hostname === 'localhost' ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === '[::1]' ||\n // 127.0.0.1/8 is considered localhost for IPv4.\n window.location.hostname.match(\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\n )\n)\n\nexport default function register() {\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location)\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets;\n // see https://github.com/facebookincubator/create-react-app/issues/2374\n return\n }\n\n window.addEventListener('load', () => {\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`\n\n if (isLocalhost) {\n // This is running on localhost.\n // Lets check if a service worker still exists or not.\n checkValidServiceWorker(swUrl)\n } else {\n // Is not local host. Just register service worker\n registerValidSW(swUrl)\n }\n })\n }\n}\n\nfunction registerValidSW(swUrl) {\n navigator.serviceWorker\n .register(swUrl)\n .then(registration => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing\n installingWorker.onstatechange = () => {\n if (installingWorker.state === 'installed') {\n if (navigator.serviceWorker.controller) {\n // At this point, the old content will have been purged and\n // the fresh content will have been added to the cache.\n // It's the perfect time to display a \"New content is\n // available; please refresh.\" message in your web app.\n // eslint-disable-next-line no-console\n console.log('New content is available; please refresh.')\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n // eslint-disable-next-line no-console\n console.log('Content is cached for offline use.')\n }\n }\n }\n }\n })\n .catch(error => {\n console.error('Error during service worker registration:', error)\n })\n}\n\nfunction checkValidServiceWorker(swUrl) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl)\n .then(response => {\n // Ensure service worker exists, and that we really are getting a JS file.\n if (\n response.status === 404 ||\n response.headers.get('content-type').indexOf('javascript') === -1\n ) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister().then(() => {\n window.location.reload()\n })\n })\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl)\n }\n })\n .catch(() => {\n // eslint-disable-next-line no-console\n console.log(\n 'No internet connection found. App is running in offline mode.'\n )\n })\n}\n\nexport function unregister() {\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister()\n })\n }\n}\n","const emptyData = {\n data: [],\n}\n\nexport default {\n language: 'en',\n message: '',\n messages: [],\n user: {\n isAuthenticated: false,\n },\n workouts: {\n ...emptyData,\n },\n application: {\n statistics: {},\n config: {\n gpx_limit_import: null,\n is_registration_enabled: null,\n max_single_file_size: null,\n max_users: null,\n max_zip_file_size: null,\n registration: null,\n },\n },\n calendarWorkouts: {\n ...emptyData,\n },\n chartData: [],\n // check if storing gpx content is OK\n gpx: null,\n loading: false,\n records: {\n ...emptyData,\n },\n sports: {\n ...emptyData,\n },\n statistics: {\n data: {},\n },\n users: {\n ...emptyData,\n },\n}\n","const routesWithoutAuthentication = [\n '/login',\n '/register',\n '/password-reset',\n '/password-reset/request',\n '/password-reset/sent',\n '/updated-password',\n]\n\nconst updatePath = (toPath, newPath) => {\n if (typeof toPath === 'string' || toPath instanceof String) {\n toPath = newPath\n } else {\n toPath.pathname = newPath\n }\n return toPath\n}\n\nconst pathInterceptor = toPath => {\n if (\n !window.localStorage.authToken &&\n !routesWithoutAuthentication.includes(toPath.pathname)\n ) {\n toPath = updatePath(toPath, '/login')\n }\n if (\n window.localStorage.authToken &&\n routesWithoutAuthentication.includes(toPath.pathname)\n ) {\n toPath = updatePath(toPath, '/')\n }\n return toPath\n}\n\nexport const historyEnhancer = originalHistory => {\n originalHistory.location = pathInterceptor(originalHistory.location)\n return {\n ...originalHistory,\n push: (path, ...args) =>\n originalHistory.push(pathInterceptor(path), ...args),\n replace: (path, ...args) =>\n originalHistory.replace(pathInterceptor(path), ...args),\n }\n}\n","import { connectRouter } from 'connected-react-router'\nimport { combineReducers } from 'redux'\n\nimport initial from './initial'\n\nconst handleDataAndError = (state, type, action) => {\n if (action.target !== type) {\n return state\n }\n if (action.type === 'SET_DATA') {\n return {\n ...state,\n data: action.data[action.target],\n }\n }\n if (action.type === 'SET_PAGINATED_DATA') {\n return {\n ...state,\n data: action.data[action.target],\n pagination: action.pagination,\n }\n }\n return state\n}\n\nconst workouts = (state = initial.workouts, action) => {\n switch (action.type) {\n case 'LOGOUT':\n return initial.workouts\n case 'PUSH_WORKOUTS':\n return {\n ...state,\n data: state.data.concat(action.workouts),\n }\n case 'REMOVE_WORKOUT':\n return {\n ...state,\n data: state.data.filter(workout => workout.id !== action.workoutId),\n }\n default:\n return handleDataAndError(state, 'workouts', action)\n }\n}\n\nconst application = (state = initial.application, action) => {\n if (action.type === 'SET_APP_CONFIG') {\n return {\n ...state,\n config: action.data,\n }\n }\n if (action.type === 'SET_APP_STATS') {\n return {\n ...state,\n statistics: action.data,\n }\n }\n return state\n}\n\nconst calendarWorkouts = (state = initial.calendarWorkouts, action) => {\n switch (action.type) {\n case 'LOGOUT':\n return initial.calendarWorkouts\n case 'UPDATE_CALENDAR':\n return {\n ...state,\n data: action.workouts,\n }\n default:\n return handleDataAndError(state, 'calendarWorkouts', action)\n }\n}\n\nconst chartData = (state = initial.chartData, action) => {\n if (action.type === 'SET_CHART_DATA') {\n return action.chartData\n }\n return state\n}\n\nconst gpx = (state = initial.gpx, action) => {\n if (action.type === 'SET_GPX') {\n return action.gpxContent\n }\n return state\n}\n\nconst language = (state = initial.language, action) => {\n if (action.type === 'SET_LANGUAGE') {\n return action.language\n }\n return state\n}\n\nconst loading = (state = initial.loading, action) => {\n if (action.type === 'SET_LOADING') {\n return action.loading\n }\n return state\n}\n\nconst message = (state = initial.message, action) => {\n switch (action.type) {\n case 'AUTH_ERROR':\n case 'PROFILE_ERROR':\n case 'PROFILE_UPDATE_ERROR':\n case 'PICTURE_ERROR':\n case 'SET_ERROR':\n return action.message\n case 'CLEAN_ALL_MESSAGES':\n case 'LOGOUT':\n case 'PROFILE_SUCCESS':\n case 'SET_APP_CONFIG':\n case 'SET_RESULTS':\n case '@@router/LOCATION_CHANGE':\n return ''\n default:\n return state\n }\n}\n\nconst messages = (state = initial.messages, action) => {\n switch (action.type) {\n case 'AUTH_ERRORS':\n case 'APP_ERRORS':\n return action.messages\n case 'CLEAN_ALL_MESSAGES':\n case 'LOGOUT':\n case 'PROFILE_SUCCESS':\n case '@@router/LOCATION_CHANGE':\n return []\n default:\n return state\n }\n}\n\nconst records = (state = initial.records, action) => {\n if (action.type === 'LOGOUT') {\n return initial.records\n }\n return handleDataAndError(state, 'records', action)\n}\n\nconst sports = (state = initial.sports, action) => {\n if (action.type === 'UPDATE_SPORT_DATA') {\n return {\n ...state,\n data: state.data.map(sport => {\n if (sport.id === action.data.id) {\n sport.is_active = action.data.is_active\n }\n return sport\n }),\n }\n }\n return handleDataAndError(state, 'sports', action)\n}\n\nconst users = (state = initial.users, action) => {\n if (action.type === 'UPDATE_USER_DATA') {\n return {\n ...state,\n data: state.data.map(user => {\n if (user.username === action.data.username) {\n user.admin = action.data.admin\n }\n return user\n }),\n }\n }\n return handleDataAndError(state, 'users', action)\n}\n\nconst user = (state = initial.user, action) => {\n switch (action.type) {\n case 'AUTH_ERROR':\n case 'PROFILE_ERROR':\n case 'LOGOUT':\n window.localStorage.removeItem('authToken')\n return initial.user\n case 'PROFILE_SUCCESS':\n return action.profil\n default:\n return state\n }\n}\n\nconst statistics = (state = initial.statistics, action) => {\n if (action.type === 'LOGOUT') {\n return initial.statistics\n }\n return handleDataAndError(state, 'statistics', action)\n}\n\nexport default history =>\n combineReducers({\n workouts,\n application,\n calendarWorkouts,\n chartData,\n gpx,\n language,\n loading,\n message,\n messages,\n records,\n router: connectRouter(history),\n sports,\n statistics,\n user,\n users,\n })\n","/* eslint-disable react/jsx-filename-extension */\nimport { createBrowserHistory } from 'history'\nimport React from 'react'\nimport { I18nextProvider } from 'react-i18next'\nimport ReactDOM from 'react-dom'\nimport { routerMiddleware } from 'connected-react-router'\nimport { applyMiddleware, compose, createStore } from 'redux'\nimport thunk from 'redux-thunk'\n\nimport i18n from './i18n'\nimport App from './components/App'\nimport Root from './components/Root'\nimport registerServiceWorker from './registerServiceWorker'\nimport createRootReducer from './reducers'\nimport { loadProfile } from './actions/user'\nimport { historyEnhancer } from './utils/history'\n\nexport const history = historyEnhancer(createBrowserHistory())\n\nhistory.listen(() => {\n window.scrollTo(0, 0)\n})\n\nexport const rootNode = document.getElementById('root')\n\nexport const store = createStore(\n createRootReducer(history),\n window.__STATE__, // Server state\n (window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose)(\n applyMiddleware(routerMiddleware(history), thunk)\n )\n)\n\nif (window.localStorage.authToken !== null) {\n store.dispatch(loadProfile())\n}\n\nReactDOM.render(\n \n \n \n \n ,\n rootNode\n)\nregisterServiceWorker()\n"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["locales/index.js","locales/en/resources.js","locales/fr/resources.js","i18n.js","components/Common/Message.jsx","utils/index.js","fitTrackeeApi/index.js","actions/index.js","actions/application.js","components/Admin/AdminApplication.jsx","components/Admin/AdminStats.jsx","components/Admin/AdminDashboard.jsx","components/Admin/AdminSports.jsx","components/Common/Pagination.jsx","components/Admin/AdminUsers.jsx","components/Others/NotFound.jsx","components/Admin/index.jsx","utils/workouts.js","fitTrackeeApi/auth.js","actions/user.js","actions/workouts.js","components/Workout/WorkoutForms/FormWithGpx.jsx","components/Workout/WorkoutForms/FormWithoutGpx.jsx","components/Workout/WorkoutAddOrEdit.jsx","components/Workout/WorkoutAdd.jsx","components/Common/CustomModal.jsx","components/Workout/WorkoutDisplay/WorkoutCardHeader.jsx","components/Workout/WorkoutDisplay/WorkoutCharts.jsx","components/Workout/WorkoutDisplay/WorkoutWeather.jsx","components/Workout/WorkoutDisplay/WorkoutDetails.jsx","components/Workout/WorkoutDisplay/Map.jsx","components/Workout/WorkoutDisplay/WorkoutMap.jsx","components/Workout/WorkoutDisplay/WorkoutNoMap.jsx","components/Workout/WorkoutDisplay/WorkoutNotes.jsx","components/Workout/WorkoutDisplay/WorkoutSegments.jsx","components/Workout/WorkoutDisplay/index.jsx","components/Workout/WorkoutEdit.jsx","components/Workout/index.jsx","components/Common/NoWorkouts.jsx","components/Workouts/WorkoutsFilter.jsx","components/Common/StaticMap.jsx","components/Workouts/WorkoutsList.jsx","components/Workouts/index.jsx","components/User/ProfileDetail.jsx","components/User/CurrentUserProfile.jsx","components/Dashboard/CalendarWorkout.jsx","components/Dashboard/CalendarWorkouts.jsx","components/Dashboard/Calendar.jsx","components/Dashboard/Records.jsx","actions/stats.js","utils/stats.js","components/Common/Stats/CustomTooltip.jsx","components/Common/Stats/CustomLabel.jsx","components/Common/Stats/StatsChart.jsx","components/Common/Stats/index.jsx","components/Dashboard/Statistics.jsx","components/Dashboard/UserStatistics.jsx","components/Dashboard/WorkoutCard.jsx","components/Dashboard/index.jsx","components/Footer/index.jsx","images/flags/en.svg","components/User/Logout.jsx","images/flags/fr.svg","images/password.svg","components/NavBar/LanguageDropdown.jsx","components/NavBar/index.jsx","images/mail-send.svg","components/User/PasswordReset.jsx","components/User/ProfileEdit.jsx","components/Statistics/index.jsx","components/User/Form.jsx","components/User/UserForm.jsx","components/User/UserProfile.jsx","components/App.jsx","components/Root.jsx","registerServiceWorker.js","reducers/initial.js","utils/history.js","reducers/index.js","index.js"],"names":["resources","en","workouts","administration","common","dashboard","messages","sports","statistics","user","fr","i18n","use","XHR","LanguageDetector","init","debug","process","lng","fallbackLng","keySeparator","interpolation","escapeValue","ns","defaultNS","Message","this","props","message","t","singleMessage","split","length","className","value","map","msg","id","React","PureComponent","suffixes","getFileSize","fileSize","asText","i","Math","floor","log","size","suffix","pow","toFixed","apiUrl","userFilters","key","label","sortOrders","isLoggedIn","window","localStorage","authToken","generateIds","arr","val","obj","createApiRequest","params","headers","noAuthorization","Authorization","getItem","type","requestParams","method","body","JSON","stringify","request","Request","url","fetch","then","response","status","json","catch","error","console","Error","getDateWithTZ","date","tz","dt","DateTime","fromISO","format","Date","setZone","parse","toFormat","sortValues","a","b","valueALabel","toLowerCase","valueBLabel","translateValues","values","sort","formatUrl","pathname","query","username","Object","keys","filter","index","FitTrackeeApi","target","data","setData","setPaginatedData","pagination","setError","setLoading","loading","updateSportsData","updateUsersData","getOrUpdateData","action","canDispatch","dispatch","isNaN","ret","users","updateLanguage","language","i18next","changeLanguage","setLanguage","setAppConfig","getAppData","FitTrackeeGenericApi","getData","AdminApplication","context","state","formData","initForm","prevProps","appConfig","k","includes","setState","e","name","isInEdition","loadAppConfig","onHandleConfigFormSubmit","onSubmit","preventDefault","htmlFor","aria-hidden","title","min","max_users","onChange","handleFormChange","step","max_single_file_size","max_zip_file_size","gpx_limit_import","onClick","history","push","Component","connect","assign","updateData","Array","isArray","updateAppConfig","AdminStats","loadAppStats","appStats","uploadDirSize","uploads_dir_size","withTranslation","application","AdminDashboard","to","is_registration_enabled","AdminSports","loadSports","updateSport","sport","src","img","alt","is_active","data-toggle","has_workouts","sportId","isActive","Pagination","newQuery","page","pages","aria-label","has_prev","getUrl","aria-disabled","from","_","has_next","AdminUsers","per_page","order_by","order","loadUsers","initState","location","authUser","updateUser","translatedFilters","translatedSortOrders","updatePage","picture","now","email","created_at","nb_workouts","admin","disabled","router","userName","isAdmin","NotFound","useTranslation","Helmet","config","exact","path","render","component","workoutColors","recordsLabels","record_type","formatWorkoutDate","dateTime","dateFormat","timeFormat","workout_date","workout_time","formatWorkoutDuration","seconds","newDate","subHours","setSeconds","getTime","formatChartData","chartData","time","duration","sortSports","sportALabel","sportBLabel","translateSports","onlyActive","PictureError","ProfileUpdateError","loadProfile","getProfile","isAuthenticated","profil","handleUserFormSubmit","formType","errMsg","password","password_conf","RegisterFormControl","loginOrRegisterOrPasswordReset","setItem","auth_token","deleteUser","deleteData","r","setGpx","gpxContent","setChartData","editWorkout","form","getMoreWorkouts","onAddWorkout","FormData","append","gpxFile","files","notes","addDataWithFile","addWorkout","onEditWorkout","workout","sport_id","translatedSports","zipTooltip","fileSizeLimit","encType","event","defaultValue","required","Trans","i18nKey","data-placement","accept","maxLength","onAddOrEdit","d","distance","addData","workoutDate","workoutTime","workoutDateTime","timezone","pattern","placeholder","WorkoutAddEdit","withGpx","changeEvent","with_gpx","checked","handleRadioChange","WorkoutAddOrEdit","CustomModal","close","text","confirm","WorkoutCardHeader","dataType","displayModal","segmentId","previousUrl","previous_workout","nextUrl","segments","next_workout","WorkoutCharts","displayDistance","dataToHide","loadWorkoutData","loadSegmentData","find","splice","indexOf","xDataKey","xScale","updateCoordinates","xInterval","parseInt","displayData","handleLegendChange","height","margin","top","right","left","bottom","onMouseMove","activePayload","onMouseLeave","allowDecimals","dataKey","offset","position","scale","interval","tickFormatter","angle","yAxisId","orientation","fill","stroke","dot","unit","strokeWidth","labelFormatter","workoutId","chart_data","getWorkoutChartData","getSegmentChartData","WorkoutWeather","weather_start","weather_end","icon","summary","Number","temperature","humidity","wind","WorkoutDetails","withPauses","pauses","moving","records","record","ave_speed","max_speed","min_alt","max_alt","ascent","descent","Map","bounds","coordinates","jsonData","mapAttribution","useMap","fitBounds","TileLayer","attribution","GeoJSON","hash","latitude","Marker","longitude","WorkoutMap","zoom","loadWorkoutGpx","loadSegmentGpx","gpx","DOMParser","parseFromString","togeojson","getGeoJson","MapContainer","boundsOptions","padding","map_attribution","getWorkoutGpx","getSegmentGpx","WorkoutNoMap","WorkoutNotes","WorkoutSegments","segment","workout_id","WorkoutDisplay","loadWorkout","match","prevState","payload","onDeleteWorkout","s","Promise","resolve","WorkoutEdit","WorkoutAdd","NoWorkouts","WorkoutsFilter","loadWorkouts","updateParams","StaticMap","display","href","rel","WorkoutsList","scope","idx","Workouts","loadMoreWorkouts","paginationEnd","setParams","onDeletePicture","deletePicture","onUploadPicture","reset","uploadPicture","editable","isDeletable","createdAt","birthDate","birth_date","first_name","last_name","bio","weekm","go","CalendarWorkout","isDisabled","isMore","sportImg","rec","CalendarWorkouts","isHidden","dayWorkouts","act","handleDisplayMore","getStartAndEndMonth","weekStartOnMonday","monthStart","startOfMonth","monthEnd","endOfMonth","weekStartsOn","start","startOfWeek","end","endOfWeek","Calendar","calendarDate","currentMonth","startDate","endDate","loadMonthWorkouts","localeOptions","handlePrevMonth","handleNextMonth","days","addDays","day","isSameDay","reverse","rows","formattedDate","filterWorkouts","isSameMonth","isWeekEnd","isToday","addMonths","updateStateDate","subMonths","locale","enGB","renderHeader","renderDays","renderCells","calendarWorkouts","RecordsCard","recordsBySport","reduce","sportList","recordType","formatRecord","sportLabel","colSpan","xAxisFormats","xAxis","formatDuration","totalSeconds","formatWithDay","String","hours","padStart","minutes","formatValue","displayedData","dateIncrement","addYears","formatStats","stats","displayedSports","nbWorkoutsStats","distanceStats","durationStats","x","xAxisFormat","dataNbWorkouts","dataDistance","dataDuration","total_distance","total_duration","startOfYear","CustomTooltip","active","total","p","style","color","CustomLabel","y","width","formattedValue","fontSize","textAnchor","dominantBaseline","StatsCharts","content","isAnimationActive","stackId","Statistics","statsParams","displayEmpty","getStats","Stats","UserStatistics","nb_sports","WorkoutCard","DashBoard","Footer","_path","_path2","_path3","_path4","_path5","_path6","_path7","_path8","_g","_path9","_path10","_path11","_path12","Logout","UserLogout","_extends","arguments","source","prototype","hasOwnProperty","call","apply","_objectWithoutProperties","excluded","sourceKeys","_objectWithoutPropertiesLoose","getOwnPropertySymbols","sourceSymbolKeys","propertyIsEnumerable","SvgEn","_ref","svgRef","titleId","enableBackground","viewBox","xmlns","ref","ForwardRef","SvgFr","_g2","_g3","_g4","_g5","_g6","_g7","languages","selected","flag","Dropdown","isOpen","onUpdateLanguage","toggleDropdown","lang","NavBar","data-target","aria-controls","aria-expanded","LanguageDropdown","SvgPassword","xmlnsXlink","xmlSpace","SvgMailSend","PasswordReset","ProfileEdit","onDeleteUser","onHandleProfileFormSubmit","readOnly","postData","handleProfileFormSubmit","durations","updateDisplayedSports","subYears","endOfYear","concat","forward","newStart","newEnd","subWeeks","addWeeks","sports_list","handleOnClickArrows","handleOnChangeDuration","handleOnChangeSports","Form","pageTitle","charAt","toUpperCase","slice","isRegistrationAllowed","userForm","onHandleFormChange","UserForm","emptyForm","onHandleUserFormSubmit","token","UserProfile","loadUser","currentUser","App","Dashboard","CurrentUserProfile","Workout","Admin","Root","store","children","isLocalhost","Boolean","hostname","registerValidSW","swUrl","navigator","serviceWorker","register","registration","onupdatefound","installingWorker","installing","onstatechange","controller","originalHistory","emptyData","handleDataAndError","initial","removeItem","routesWithoutAuthentication","updatePath","toPath","newPath","pathInterceptor","createBrowserHistory","args","replace","listen","scrollTo","rootNode","document","getElementById","createStore","combineReducers","connectRouter","__STATE__","__REDUX_DEVTOOLS_EXTENSION_COMPOSE__","compose","applyMiddleware","routerMiddleware","thunk","ReactDOM","I18nextProvider","URL","origin","addEventListener","get","ready","unregister","reload","checkValidServiceWorker","registerServiceWorker"],"mappings":"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","file":"static/js/main.06d7be5e.chunk.js","sourcesContent":["import { enResources } from './en/resources'\nimport { frResources } from './fr/resources'\n\nexport const resources = {\n en: enResources,\n fr: frResources,\n}\n","import EnWorkoutsTranslations from './workouts.json'\nimport EnAdministrationTranslations from './administration.json'\nimport EnCommonTranslations from './common.json'\nimport EnDashboardTranslations from './dashboard.json'\nimport EnMessagesTranslations from './messages.json'\nimport EnSportsTranslations from './sports.json'\nimport EnStatisticsTranslations from './statistics.json'\nimport EnUserTranslations from './user.json'\n\nexport const enResources = {\n workouts: EnWorkoutsTranslations,\n administration: EnAdministrationTranslations,\n common: EnCommonTranslations,\n dashboard: EnDashboardTranslations,\n messages: EnMessagesTranslations,\n sports: EnSportsTranslations,\n statistics: EnStatisticsTranslations,\n user: EnUserTranslations,\n}\n","import FrWorkoutsTranslations from './workouts.json'\nimport FrAdministrationTranslations from './administration.json'\nimport FrCommonTranslations from './common.json'\nimport FrDashboardTranslations from './dashboard.json'\nimport FrMessagesTranslations from './messages.json'\nimport FrSportsTranslations from './sports.json'\nimport FrStatisticsTranslations from './statistics.json'\nimport FrUserTranslations from './user.json'\n\nexport const frResources = {\n workouts: FrWorkoutsTranslations,\n administration: FrAdministrationTranslations,\n common: FrCommonTranslations,\n dashboard: FrDashboardTranslations,\n messages: FrMessagesTranslations,\n sports: FrSportsTranslations,\n statistics: FrStatisticsTranslations,\n user: FrUserTranslations,\n}\n","import i18n from 'i18next'\nimport LanguageDetector from 'i18next-browser-languagedetector'\nimport XHR from 'i18next-xhr-backend'\n\nimport { resources } from './locales'\n\ni18n\n .use(XHR)\n .use(LanguageDetector)\n .init({\n debug: process.env.NODE_ENV === 'development',\n lng: 'en',\n fallbackLng: 'en',\n keySeparator: false,\n interpolation: {\n escapeValue: false,\n },\n resources,\n ns: ['common'],\n defaultNS: 'common',\n })\n\nexport default i18n\n","import React from 'react'\n\nexport default class Message extends React.PureComponent {\n render() {\n const { message, messages, t } = this.props\n const singleMessage =\n message === '' || !message\n ? ''\n : message.split('|').length > 1\n ? `${t(`messages:${message.split('|')[0]}`)}: ${t(\n `messages:${message.split('|')[1]}`\n )}`\n : t(`messages:${message}`)\n return (\n
    \n {singleMessage !== '' && {singleMessage}}\n {messages &&\n messages.length > 0 &&\n (messages.length === 1 ? (\n {messages[0].value}\n ) : (\n \n
      \n {messages.map(msg => (\n
    • {t(`messages:${msg.value}`)}
    • \n ))}\n
    \n
    \n ))}\n
    \n )\n }\n}\n","import { format, parse } from 'date-fns'\nimport { DateTime } from 'luxon'\n\nconst suffixes = ['bytes', 'KB', 'MB', 'GB', 'TB']\nexport const getFileSize = (fileSize, asText = true) => {\n const i = Math.floor(Math.log(fileSize) / Math.log(1024))\n if (!fileSize) {\n return asText ? '0 bytes' : { size: 0, suffix: 'bytes' }\n }\n const size = (fileSize / Math.pow(1024, i)).toFixed(1)\n const suffix = suffixes[i]\n return asText ? `${size}${suffix}` : { size, suffix }\n}\n\nexport const getFileSizeInMB = fileSize => {\n const value = fileSize / 1048576\n return (!fileSize && 0) || +value.toFixed(2)\n}\n\nexport const version = '0.4.7' // version stored in 'utils' for now\nexport const apiUrl =\n process.env.NODE_ENV === 'production'\n ? '/api/'\n : `${process.env.REACT_APP_API_URL}/api/`\n\nexport const userFilters = [\n { key: 'workouts_count', label: 'workouts count' },\n { key: 'admin', label: 'admin rights' },\n { key: 'created_at', label: 'registration date' },\n { key: 'username', label: 'user name' },\n]\n\nexport const sortOrders = [\n { key: 'asc', label: 'ascending' },\n { key: 'desc', label: 'descending' },\n]\n\nexport const isLoggedIn = () => !!window.localStorage.authToken\n\nexport const generateIds = arr => {\n let i = 0\n return arr.map(val => {\n const obj = { id: i, value: val }\n i++\n return obj\n })\n}\n\nexport const createApiRequest = params => {\n const headers = {}\n if (!params.noAuthorization) {\n headers.Authorization = `Bearer ${window.localStorage.getItem('authToken')}`\n }\n if (params.type) {\n headers['Content-Type'] = params.type\n }\n const requestParams = {\n method: params.method,\n headers: headers,\n }\n if (params.type === 'application/json' && params.body) {\n requestParams.body = JSON.stringify(params.body)\n } else if (params.body) {\n requestParams.body = params.body\n }\n const request = new Request(`${apiUrl}${params.url}`, requestParams)\n return fetch(request)\n .then(response =>\n params.method === 'DELETE' || response.status === 413\n ? response\n : response.json()\n )\n .catch(error => {\n console.error(error)\n return new Error('An error occurred. Please contact the administrator.')\n })\n}\n\nexport const getDateWithTZ = (date, tz) => {\n if (!date) {\n return ''\n }\n const dt = DateTime.fromISO(\n format(new Date(date), \"yyyy-MM-dd'T'HH:mm:ss.SSSxxx\")\n ).setZone(tz)\n return parse(\n dt.toFormat('yyyy-MM-dd HH:mm:ss'),\n 'yyyy-MM-dd HH:mm:ss',\n new Date()\n )\n}\n\nexport const capitalize = target =>\n target.charAt(0).toUpperCase() + target.slice(1)\n\nexport const rangePagination = pages =>\n Array.from({ length: pages }, (_, i) => i + 1)\n\nconst sortValues = (a, b) => {\n const valueALabel = a.label.toLowerCase()\n const valueBLabel = b.label.toLowerCase()\n return valueALabel > valueBLabel ? 1 : valueALabel < valueBLabel ? -1 : 0\n}\n\nexport const translateValues = (t, values, key = 'common') =>\n values\n .map(value => ({\n ...value,\n label: t(`${key}:${value.label}`),\n }))\n .sort(sortValues)\n\nexport const formatUrl = (pathname, query) => {\n let url = pathname\n if (query.id || (pathname === 'users' && query.username)) {\n url = `${url}/${query.username ? query.username : query.id}`\n } else if (Object.keys(query).length > 0) {\n url += '?'\n Object.keys(query)\n .filter(key => query[key])\n .map(\n (key, index) => (url += `${index === 0 ? '' : '&'}${key}=${query[key]}`)\n )\n }\n return url\n}\n","import { createApiRequest, formatUrl } from '../utils'\n\nexport default class FitTrackeeApi {\n static getData(target, data = {}) {\n const url = formatUrl(target, data)\n const params = {\n url: url,\n method: 'GET',\n type: 'application/json',\n }\n return createApiRequest(params)\n }\n\n static addData(target, data) {\n const params = {\n url: target,\n method: 'POST',\n body: data,\n type: 'application/json',\n }\n return createApiRequest(params)\n }\n\n static addDataWithFile(target, data) {\n const params = {\n url: target,\n method: 'POST',\n body: data,\n }\n return createApiRequest(params)\n }\n\n static postData(target, data) {\n const params = {\n url: `${target}${data.id ? `/${data.id}` : ''}`,\n method: 'POST',\n body: data,\n type: 'application/json',\n }\n return createApiRequest(params)\n }\n\n static updateData(target, data) {\n const params = {\n url: `${target}${\n data.id ? `/${data.id}` : data.username ? `/${data.username}` : ''\n }`,\n method: 'PATCH',\n body: data,\n type: 'application/json',\n }\n return createApiRequest(params)\n }\n\n static deleteData(target, id) {\n const params = {\n url: `${target}/${id}`,\n method: 'DELETE',\n type: 'application/json',\n }\n return createApiRequest(params)\n }\n}\n","import i18next from 'i18next'\n\nimport FitTrackeeApi from '../fitTrackeeApi/index'\nimport { history } from '../index'\n\nexport const emptyMessages = () => ({\n type: 'CLEAN_ALL_MESSAGES',\n})\n\nexport const setData = (target, data) => ({\n type: 'SET_DATA',\n data,\n target,\n})\n\nexport const setPaginatedData = (target, data, pagination) => ({\n type: 'SET_PAGINATED_DATA',\n data,\n pagination,\n target,\n})\n\nexport const setError = message => ({\n type: 'SET_ERROR',\n message,\n})\n\nexport const setLanguage = language => ({\n type: 'SET_LANGUAGE',\n language,\n})\n\nexport const setLoading = loading => ({\n type: 'SET_LOADING',\n loading,\n})\n\nexport const updateSportsData = data => ({\n type: 'UPDATE_SPORT_DATA',\n data,\n})\n\nexport const updateUsersData = data => ({\n type: 'UPDATE_USER_DATA',\n data,\n})\n\nexport const getOrUpdateData = (\n action,\n target,\n data,\n canDispatch = true\n) => dispatch => {\n dispatch(setLoading(true))\n if (data && data.id && target !== 'workouts' && isNaN(data.id)) {\n dispatch(setLoading(false))\n return dispatch(setError(`${target}|Incorrect id`))\n }\n dispatch(emptyMessages())\n return FitTrackeeApi[action](target, data)\n .then(ret => {\n if (ret.status === 'success') {\n if (canDispatch) {\n if (target === 'users' && action === 'getData') {\n return dispatch(setPaginatedData(target, ret.data, ret.pagination))\n }\n dispatch(setData(target, ret.data))\n } else if (action === 'updateData' && target === 'sports') {\n dispatch(updateSportsData(ret.data.sports[0]))\n } else if (action === 'updateData' && target === 'users') {\n dispatch(updateUsersData(ret.data.users[0]))\n }\n } else {\n dispatch(setError(`${target}|${ret.message || ret.status}`))\n }\n dispatch(setLoading(false))\n })\n .catch(error => {\n dispatch(setLoading(false))\n dispatch(setError(`${target}|${error}`))\n })\n}\n\nexport const addData = (target, data) => dispatch =>\n FitTrackeeApi.addData(target, data)\n .then(ret => {\n if (ret.status === 'created') {\n history.push(`/admin/${target}`)\n } else {\n dispatch(setError(`${target}|${ret.status}`))\n }\n })\n .catch(error => dispatch(setError(`${target}|${error}`)))\n\nexport const deleteData = (target, id) => dispatch => {\n if (isNaN(id)) {\n return dispatch(setError(target, `${target}|Incorrect id`))\n }\n return FitTrackeeApi.deleteData(target, id)\n .then(ret => {\n if (ret.status === 204) {\n history.push(`/admin/${target}`)\n } else {\n dispatch(setError(`${target}|${ret.message || ret.status}`))\n }\n })\n .catch(error => dispatch(setError(`${target}|${error}`)))\n}\n\nexport const updateLanguage = language => dispatch => {\n i18next.changeLanguage(language).then(dispatch(setLanguage(language)))\n}\n","import FitTrackeeGenericApi from '../fitTrackeeApi'\nimport { history } from '../index'\nimport { generateIds } from '../utils'\nimport { emptyMessages, setError } from './index'\n\nexport const setAppConfig = data => ({\n type: 'SET_APP_CONFIG',\n data,\n})\n\nexport const setAppStats = data => ({\n type: 'SET_APP_STATS',\n data,\n})\n\nconst SetAppErrors = messages => ({ type: 'APP_ERRORS', messages })\n\nexport const getAppData = target => dispatch =>\n FitTrackeeGenericApi.getData(target)\n .then(ret => {\n if (ret.status === 'success') {\n if (target === 'config') {\n dispatch(setAppConfig(ret.data))\n } else if (target === 'stats/all') {\n dispatch(setAppStats(ret.data))\n }\n } else {\n dispatch(setError(`application|${ret.message}`))\n }\n })\n .catch(error => dispatch(setError(`application|${error}`)))\n\nexport const updateAppConfig = formData => dispatch => {\n dispatch(emptyMessages())\n FitTrackeeGenericApi.updateData('config', formData)\n .then(ret => {\n if (ret.status === 'success') {\n dispatch(setAppConfig(ret.data))\n history.push('/admin/application')\n } else if (Array.isArray(ret.message)) {\n dispatch(SetAppErrors(generateIds(ret.message)))\n } else {\n dispatch(setError(ret.message))\n }\n })\n .catch(error => dispatch(setError(`application|${error}`)))\n}\n","import React from 'react'\nimport { connect } from 'react-redux'\n\nimport Message from '../Common/Message'\nimport { getAppData, updateAppConfig } from '../../actions/application'\nimport { history } from '../../index'\nimport { getFileSizeInMB } from '../../utils'\n\nclass AdminApplication extends React.Component {\n constructor(props, context) {\n super(props, context)\n this.state = {\n formData: {},\n }\n }\n\n componentDidMount() {\n this.initForm()\n }\n\n componentDidUpdate(prevProps) {\n if (this.props.appConfig !== prevProps.appConfig) {\n this.initForm()\n }\n }\n\n initForm() {\n const { appConfig } = this.props\n const formData = {}\n Object.keys(appConfig).map(k =>\n appConfig[k] === null\n ? (formData[k] = '')\n : ['max_single_file_size', 'max_zip_file_size'].includes(k)\n ? (formData[k] = getFileSizeInMB(appConfig[k]))\n : (formData[k] = appConfig[k])\n )\n this.setState({ formData })\n }\n\n handleFormChange(e) {\n const { formData } = this.state\n formData[e.target.name] = +e.target.value\n this.setState(formData)\n }\n\n render() {\n const {\n isInEdition,\n loadAppConfig,\n message,\n messages,\n onHandleConfigFormSubmit,\n t,\n } = this.props\n const { formData } = this.state\n return (\n
    \n {(message || messages) && (\n \n )}\n {Object.keys(formData).length > 0 && (\n
    \n
    \n
    \n
    \n \n {t('administration:Application configuration')}\n \n
    \n
    \n {\n e.preventDefault()\n onHandleConfigFormSubmit(formData)\n }}\n >\n
    \n \n {t(\n // eslint-disable-next-line max-len\n 'administration:Max. number of active users'\n )}\n \n \n \n :\n \n this.handleFormChange(e)}\n />\n
    \n
    \n \n {t(\n 'administration:Max. size of uploaded files (in Mb)'\n )}\n :\n \n this.handleFormChange(e)}\n />\n
    \n
    \n \n {t('administration:Max. size of zip archive (in Mb)')}:\n \n this.handleFormChange(e)}\n />\n
    \n
    \n \n {t('administration:Max. files of zip archive')}\n \n this.handleFormChange(e)}\n />\n
    \n {isInEdition ? (\n <>\n \n {\n e.preventDefault()\n loadAppConfig()\n history.push('/admin/application')\n }}\n value={t('common:Cancel')}\n />\n \n ) : (\n <>\n {\n e.preventDefault()\n history.push('/admin/application/edit')\n }}\n value={t('common:Edit')}\n />\n history.push('/admin')}\n value={t('common:Back')}\n />\n \n )}\n \n
    \n
    \n
    \n
    \n )}\n
    \n )\n }\n}\n\nexport default connect(\n state => ({\n message: state.message,\n messages: state.messages,\n }),\n dispatch => ({\n loadAppConfig: () => {\n dispatch(getAppData('config'))\n },\n onHandleConfigFormSubmit: formData => {\n const data = Object.assign({}, formData)\n data.max_single_file_size *= 1048576\n data.max_zip_file_size *= 1048576\n dispatch(updateAppConfig(data))\n },\n })\n)(AdminApplication)\n","import React from 'react'\nimport { withTranslation } from 'react-i18next'\nimport { connect } from 'react-redux'\n\nimport { getAppData } from '../../actions/application'\nimport { getFileSize } from '../../utils'\n\nclass AdminStats extends React.Component {\n componentDidMount() {\n this.props.loadAppStats()\n }\n\n render() {\n const { appStats, t } = this.props\n const uploadDirSize = getFileSize(appStats.uploads_dir_size, false)\n return (\n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n {appStats.users ? appStats.users : 0}\n
    \n
    {`${\n appStats.users === 1\n ? t('administration:user')\n : t('administration:users')\n }`}
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n {appStats.sports ? appStats.sports : 0}\n
    \n
    {`${\n appStats.sports === 1 ? t('common:sport') : t('common:sports')\n }`}
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n {appStats.workouts ? appStats.workouts : 0}\n
    \n
    {`${\n appStats.workouts === 1\n ? t('common:workout')\n : t('common:workouts')\n }`}
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    {uploadDirSize.size}
    \n
    \n {uploadDirSize.suffix} ({t('administration:uploads')})\n
    \n
    \n
    \n
    \n
    \n
    \n )\n }\n}\n\nexport default withTranslation()(\n connect(\n state => ({\n appStats: state.application.statistics,\n }),\n dispatch => ({\n loadAppStats: () => {\n dispatch(getAppData('stats/all'))\n },\n })\n )(AdminStats)\n)\n","import React from 'react'\nimport { Link } from 'react-router-dom'\n\nimport AdminStats from './AdminStats'\n\nexport default function AdminDashboard(props) {\n const { appConfig, t } = props\n return (\n
    \n
    \n {t('administration:Administration')}\n
    \n
    \n \n
    \n
    \n
    \n \n {t('administration:Application')}\n \n
    \n
    \n {t(\n 'administration:Update application configuration ' +\n '(maximum number of registered users, maximum files size).'\n )}\n
    \n \n {t(\n `administration:Registration is currently ${\n appConfig.is_registration_enabled ? 'enabled' : 'disabled'\n }.`\n )}\n \n
    \n
    \n
    \n \n {t('administration:Sports')}\n \n
    \n
    {t('administration:Enable/disable sports.')}
    \n
    \n
    \n \n {t('administration:Users')}\n \n
    \n
    \n {t(\n 'administration:Add/remove admin rights, ' +\n 'delete user account.'\n )}\n
    \n
    \n
    \n
    \n )\n}\n","import React from 'react'\nimport { connect } from 'react-redux'\n\nimport Message from '../Common/Message'\nimport { getOrUpdateData } from '../../actions'\nimport { history } from '../../index'\n\nclass AdminSports extends React.Component {\n componentDidMount() {\n this.props.loadSports()\n }\n\n render() {\n const { message, sports, t, updateSport } = this.props\n return (\n
    \n {message && }\n
    \n
    \n
    \n
    \n {t('administration:Sports')}\n
    \n
    \n {sports.length > 0 && (\n \n \n \n \n \n \n \n \n \n \n \n {sports.map(sport => (\n \n \n \n \n \n \n \n ))}\n \n
    {t('administration:id')}{t('administration:Image')}{t('administration:Label')}{t('administration:Active')}{t('administration:Actions')}
    \n \n {t('administration:id')}\n \n {sport.id}\n \n \n {t('administration:Image')}\n \n \n \n \n {t('administration:Label')}\n \n {t(`sports:${sport.label}`)}\n \n \n {t('administration:Active')}\n \n {sport.is_active ? (\n \n ) : (\n \n )}\n \n \n {t('administration:Actions')}\n \n \n updateSport(sport.id, !sport.is_active)\n }\n />\n {sport.has_workouts && (\n \n \n {t('administration:workouts exist')}\n \n )}\n
    \n )}\n history.push('/admin/')}\n value={t('common:Back')}\n />\n
    \n
    \n
    \n
    \n
    \n )\n }\n}\n\nexport default connect(\n state => ({\n message: state.message,\n sports: state.sports.data,\n user: state.user,\n }),\n dispatch => ({\n loadSports: () => {\n dispatch(getOrUpdateData('getData', 'sports'))\n },\n updateSport: (sportId, isActive) => {\n const data = { id: sportId, is_active: isActive }\n dispatch(getOrUpdateData('updateData', 'sports', data, false))\n },\n })\n)(AdminSports)\n","import React from 'react'\nimport { Link } from 'react-router-dom'\n\nimport { formatUrl, rangePagination } from '../../utils'\n\nexport default class Pagination extends React.PureComponent {\n getUrl(value) {\n const { query, pathname } = this.props\n const newQuery = Object.assign({}, query)\n let page = query.page ? +query.page : 1\n switch (value) {\n case 'prev':\n page -= 1\n break\n case 'next':\n page += 1\n break\n default:\n page = +value\n }\n newQuery.page = page\n return formatUrl(pathname, newQuery)\n }\n\n render() {\n const { pagination, t } = this.props\n return (\n <>\n {pagination && Object.keys(pagination).length > 0 && (\n \n )}\n \n )\n }\n}\n","import { format } from 'date-fns'\nimport React from 'react'\nimport { connect } from 'react-redux'\nimport { Link } from 'react-router-dom'\n\nimport Message from '../Common/Message'\nimport Pagination from '../Common/Pagination'\nimport { history } from '../../index'\nimport { getOrUpdateData } from '../../actions'\nimport {\n apiUrl,\n formatUrl,\n sortOrders,\n translateValues,\n userFilters,\n} from '../../utils'\n\nclass AdminUsers extends React.Component {\n constructor(props, context) {\n super(props, context)\n this.state = {\n page: null,\n per_page: null,\n order_by: 'created_at',\n order: 'asc',\n }\n }\n\n componentDidMount() {\n this.props.loadUsers(this.initState())\n }\n\n componentDidUpdate(prevProps) {\n if (prevProps.location.query !== this.props.location.query) {\n this.props.loadUsers(this.props.location.query)\n }\n }\n\n initState() {\n const { query } = this.props.location\n const newQuery = {\n page: query.page,\n per_page: query.per_page,\n order_by: query.order_by ? query.order_by : 'created_at',\n order: query.order ? query.order : 'asc',\n }\n this.setState(newQuery)\n return newQuery\n }\n\n updatePage(key, value) {\n const query = Object.assign({}, this.state)\n query[key] = value\n this.setState(query)\n const url = formatUrl(this.props.location.pathname, query)\n history.push(url)\n }\n\n render() {\n const {\n authUser,\n location,\n message,\n t,\n pagination,\n updateUser,\n users,\n } = this.props\n const translatedFilters = translateValues(t, userFilters)\n const translatedSortOrders = translateValues(t, sortOrders)\n return (\n
    \n {message && }\n
    \n
    \n
    \n
    \n
    \n {t('administration:Users')}\n
    \n
    \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n \n \n \n \n \n \n \n \n \n \n \n \n \n {users.map(user => (\n \n \n \n \n \n \n \n \n \n ))}\n \n
    #{t('user:Username')}{t('user:Email')}{t('user:Registration Date')}{t('workouts:Workouts')}{t('user:Admin')}{t('administration:Actions')}
    \n #\n {user.picture === true ? (\n \n ) : (\n \n )}\n \n \n {t('user:Username')}\n \n \n {user.username}\n \n \n \n {t('user:Email')}\n \n {user.email}\n \n \n {t('user:Registration Date')}\n \n {format(\n new Date(user.created_at),\n 'dd/MM/yyyy HH:mm'\n )}\n \n \n {t('workouts:Workouts')}\n \n {user.nb_workouts}\n \n \n {t('user:Admin')}\n \n {user.admin ? (\n \n ) : (\n \n )}\n \n \n {t('administration:Actions')}\n \n \n updateUser(user.username, !user.admin)\n }\n />\n
    \n \n history.push('/admin/')}\n value={t('common:Back')}\n />\n
    \n
    \n
    \n
    \n
    \n
    \n )\n }\n}\n\nexport default connect(\n state => ({\n authUser: state.user,\n location: state.router.location,\n message: state.message,\n pagination: state.users.pagination,\n users: state.users.data,\n }),\n dispatch => ({\n loadUsers: query => {\n dispatch(getOrUpdateData('getData', 'users', query))\n },\n updateUser: (userName, isAdmin) => {\n const data = { username: userName, admin: isAdmin }\n dispatch(getOrUpdateData('updateData', 'users', data, false))\n },\n })\n)(AdminUsers)\n","import React from 'react'\nimport { Helmet } from 'react-helmet'\nimport { useTranslation } from 'react-i18next'\n\nexport default function NotFound() {\n const { t } = useTranslation()\n return (\n
    \n \n fittrackee - 404\n \n

    {t('Page not found')}

    \n
    \n )\n}\n","import React from 'react'\nimport { Helmet } from 'react-helmet'\nimport { withTranslation } from 'react-i18next'\nimport { connect } from 'react-redux'\nimport { Route, Switch } from 'react-router-dom'\n\nimport AdminApplication from './AdminApplication'\nimport AdminDashboard from './AdminDashboard'\nimport AdminSports from './AdminSports'\nimport AdminUsers from './AdminUsers'\nimport NotFound from './../Others/NotFound'\n\nfunction Admin(props) {\n const { appConfig, t, user } = props\n return (\n <>\n \n FitTrackee - {t('administration:Administration')}\n \n
    \n {user.admin ? (\n \n }\n />\n (\n \n )}\n />\n (\n \n )}\n />\n }\n />\n }\n />\n \n \n ) : (\n \n )}\n
    \n \n )\n}\n\nexport default withTranslation()(\n connect(state => ({\n appConfig: state.application.config,\n user: state.user,\n }))(Admin)\n)\n","import { format, subHours } from 'date-fns'\nimport togeojson from '@mapbox/togeojson'\n\nimport { getDateWithTZ } from './index'\n\nexport const workoutColors = [\n '#55a8a3',\n '#98C3A9',\n '#D0838A',\n '#ECC77E',\n '#926692',\n '#929292',\n '#428bca',\n]\n\nexport const recordsLabels = [\n { record_type: 'AS', label: 'Ave. speed' },\n { record_type: 'FD', label: 'Farest distance' },\n { record_type: 'LD', label: 'Longest duration' },\n { record_type: 'MS', label: 'Max. speed' },\n]\n\nexport const getGeoJson = gpxContent => {\n let jsonData\n if (gpxContent) {\n const gpx = new DOMParser().parseFromString(gpxContent, 'text/xml')\n jsonData = togeojson.gpx(gpx)\n }\n return { jsonData }\n}\n\nexport const formatWorkoutDate = (\n dateTime,\n dateFormat = null,\n timeFormat = null\n) => {\n if (!dateFormat) {\n dateFormat = 'yyyy/MM/dd'\n }\n if (!timeFormat) {\n timeFormat = 'HH:mm'\n }\n return {\n workout_date: dateTime ? format(dateTime, dateFormat) : null,\n workout_time: dateTime ? format(dateTime, timeFormat) : null,\n }\n}\n\nexport const formatWorkoutDuration = seconds => {\n let newDate = new Date(0)\n newDate = subHours(newDate.setSeconds(seconds), 1)\n return newDate.getTime()\n}\n\nexport const formatChartData = chartData => {\n for (let i = 0; i < chartData.length; i++) {\n chartData[i].time = new Date(chartData[i].time).getTime()\n chartData[i].duration = formatWorkoutDuration(chartData[i].duration)\n }\n return chartData\n}\n\nexport const formatRecord = (record, tz) => {\n let value\n switch (record.record_type) {\n case 'AS':\n case 'MS':\n value = `${record.value} km/h`\n break\n case 'FD':\n value = `${record.value} km`\n break\n default:\n // 'LD'\n value = record.value // eslint-disable-line prefer-destructuring\n }\n const [recordType] = recordsLabels.filter(\n r => r.record_type === record.record_type\n )\n return {\n workout_date: formatWorkoutDate(getDateWithTZ(record.workout_date, tz))\n .workout_date,\n workout_id: record.workout_id,\n id: record.id,\n record_type: recordType.label,\n value: value,\n }\n}\n\nconst sortSports = (a, b) => {\n const sportALabel = a.label.toLowerCase()\n const sportBLabel = b.label.toLowerCase()\n return sportALabel > sportBLabel ? 1 : sportALabel < sportBLabel ? -1 : 0\n}\n\nexport const translateSports = (sports, t, onlyActive = false) =>\n sports\n .filter(sport => (onlyActive ? sport.is_active : true))\n .map(sport => ({\n ...sport,\n label: t(`sports:${sport.label}`),\n }))\n .sort(sortSports)\n","import { createApiRequest } from '../utils'\n\nexport default class FitTrackeeApi {\n static loginOrRegisterOrPasswordReset(target, data) {\n const params = {\n url: `auth/${target}`,\n method: 'POST',\n noAuthorization: true,\n body: data,\n type: 'application/json',\n }\n return createApiRequest(params)\n }\n\n static deletePicture() {\n const params = {\n url: 'auth/picture',\n method: 'DELETE',\n }\n return createApiRequest(params)\n }\n}\n","import FitTrackeeGenericApi from '../fitTrackeeApi'\nimport FitTrackeeApi from '../fitTrackeeApi/auth'\nimport { history } from '../index'\nimport { generateIds } from '../utils'\nimport { getOrUpdateData, setError, updateLanguage } from './index'\nimport { getAppData } from './application'\n\nconst AuthError = message => ({ type: 'AUTH_ERROR', message })\n\nconst AuthErrors = messages => ({ type: 'AUTH_ERRORS', messages })\n\nconst PictureError = message => ({ type: 'PICTURE_ERROR', message })\n\nconst ProfileSuccess = profil => ({ type: 'PROFILE_SUCCESS', profil })\n\nconst ProfileError = message => ({ type: 'PROFILE_ERROR', message })\n\nconst ProfileUpdateError = message => ({\n type: 'PROFILE_UPDATE_ERROR',\n message,\n})\n\nexport const logout = () => ({ type: 'LOGOUT' })\n\nexport const loadProfile = () => dispatch => {\n if (window.localStorage.getItem('authToken')) {\n return dispatch(getProfile())\n }\n return { type: 'LOGOUT' }\n}\n\nexport const getProfile = () => dispatch =>\n FitTrackeeGenericApi.getData('auth/profile')\n .then(ret => {\n if (ret.status === 'success') {\n dispatch(getOrUpdateData('getData', 'sports'))\n ret.data.isAuthenticated = true\n if (ret.data.language) {\n dispatch(updateLanguage(ret.data.language))\n }\n return dispatch(ProfileSuccess(ret.data))\n }\n return dispatch(ProfileError(ret.message))\n })\n .catch(error => {\n throw error\n })\n\nexport const loginOrRegisterOrPasswordReset = (target, formData) => dispatch =>\n FitTrackeeApi.loginOrRegisterOrPasswordReset(target, formData)\n .then(ret => {\n if (ret.status === 'success') {\n if (target === 'password/reset-request') {\n return history.push({\n pathname: '/password-reset/sent',\n })\n }\n if (target === 'password/update') {\n return history.push({\n pathname: '/updated-password',\n })\n }\n if (target === 'login' || target === 'register') {\n window.localStorage.setItem('authToken', ret.auth_token)\n if (target === 'register') {\n dispatch(getAppData('config'))\n }\n return dispatch(getProfile())\n }\n }\n return dispatch(AuthError(ret.message))\n })\n .catch(error => {\n throw error\n })\n\nconst RegisterFormControl = (formData, onlyPasswords = false) => {\n const errMsg = []\n if (\n !onlyPasswords &&\n (formData.username.length < 3 || formData.username.length > 12)\n ) {\n errMsg.push('3 to 12 characters required for username.')\n }\n if (formData.password !== formData.password_conf) {\n errMsg.push(\"Password and password confirmation don't match.\")\n }\n if (formData.password.length < 8) {\n errMsg.push('8 characters required for password.')\n }\n return errMsg\n}\n\nexport const handleUserFormSubmit = (formData, formType) => dispatch => {\n if (formType === 'register' || formType === 'password/update') {\n const ret = RegisterFormControl(formData, formType === 'password/update')\n if (ret.length > 0) {\n return dispatch(AuthErrors(generateIds(ret)))\n }\n }\n return dispatch(loginOrRegisterOrPasswordReset(formType, formData))\n}\n\nexport const handleProfileFormSubmit = formData => dispatch => {\n if (!formData.password === formData.password_conf) {\n return dispatch(\n ProfileUpdateError(\"Password and password confirmation don't match.\")\n )\n }\n delete formData.id\n return FitTrackeeGenericApi.postData('auth/profile/edit', formData)\n .then(ret => {\n if (ret.status === 'success') {\n dispatch(getProfile())\n return history.push('/profile')\n }\n dispatch(ProfileUpdateError(ret.message))\n })\n .catch(error => {\n throw error\n })\n}\n\nexport const uploadPicture = event => dispatch => {\n event.preventDefault()\n const form = new FormData()\n form.append('file', event.target.picture.files[0])\n event.target.reset()\n return FitTrackeeGenericApi.addDataWithFile('auth/picture', form)\n .then(ret => {\n if (ret.status === 'success') {\n return dispatch(getProfile())\n }\n const msg =\n ret.status === 413\n ? 'Error during picture update, file size exceeds max size.'\n : ret.message\n return dispatch(PictureError(msg))\n })\n .catch(error => {\n throw error\n })\n}\n\nexport const deletePicture = () => dispatch =>\n FitTrackeeApi.deletePicture()\n .then(ret => {\n if (ret.status === 204) {\n return dispatch(getProfile())\n }\n return dispatch(PictureError(ret.message))\n })\n .catch(error => {\n throw error\n })\n\nexport const deleteUser = (username, isAdmin = false) => dispatch =>\n FitTrackeeGenericApi.deleteData('users', username)\n .then(ret => {\n if (ret.status === 204) {\n dispatch(getAppData('config'))\n if (isAdmin) {\n history.push('/admin/users')\n } else {\n dispatch(logout())\n history.push('/')\n }\n } else {\n ret.json().then(r => dispatch(setError(`${r.message}`)))\n }\n })\n .catch(error => dispatch(setError(`user|${error}`)))\n","import FitTrackeeGenericApi from '../fitTrackeeApi'\nimport { history } from '../index'\nimport { formatChartData } from '../utils/workouts'\nimport { setError, setLoading } from './index'\nimport { loadProfile } from './user'\n\nexport const pushWorkouts = workouts => ({\n type: 'PUSH_WORKOUTS',\n workouts,\n})\n\nexport const removeWorkout = workoutId => ({\n type: 'REMOVE_WORKOUT',\n workoutId,\n})\n\nexport const updateCalendar = workouts => ({\n type: 'UPDATE_CALENDAR',\n workouts,\n})\n\nexport const setGpx = gpxContent => ({\n type: 'SET_GPX',\n gpxContent,\n})\n\nexport const setChartData = chartData => ({\n type: 'SET_CHART_DATA',\n chartData,\n})\n\nexport const addWorkout = form => dispatch =>\n FitTrackeeGenericApi.addDataWithFile('workouts', form)\n .then(ret => {\n if (ret.status === 'created') {\n if (ret.data.workouts.length === 0) {\n dispatch(setError('workouts|no correct file.'))\n } else if (ret.data.workouts.length === 1) {\n dispatch(loadProfile())\n history.push(`/workouts/${ret.data.workouts[0].id}`)\n } else {\n // ret.data.workouts.length > 1\n dispatch(loadProfile())\n history.push('/')\n }\n } else if (ret.status === 413) {\n dispatch(\n setError('workouts|File size is greater than the allowed size')\n )\n } else {\n dispatch(setError(`workouts|${ret.message}`))\n }\n dispatch(setLoading(false))\n })\n .catch(error => {\n dispatch(setLoading(false))\n dispatch(setError(`workouts|${error}`))\n })\n\nexport const addWorkoutWithoutGpx = form => dispatch =>\n FitTrackeeGenericApi.addData('workouts/no_gpx', form)\n .then(ret => {\n if (ret.status === 'created') {\n dispatch(loadProfile())\n history.push(`/workouts/${ret.data.workouts[0].id}`)\n } else {\n dispatch(setError(`workouts|${ret.message}`))\n }\n })\n .catch(error => dispatch(setError(`workouts|${error}`)))\n\nexport const getWorkoutGpx = workoutId => dispatch => {\n if (workoutId) {\n return FitTrackeeGenericApi.getData(`workouts/${workoutId}/gpx`)\n .then(ret => {\n if (ret.status === 'success') {\n dispatch(setGpx(ret.data.gpx))\n } else {\n dispatch(setError(`workouts|${ret.message}`))\n }\n })\n .catch(error => dispatch(setError(`workouts|${error}`)))\n }\n dispatch(setGpx(null))\n}\n\nexport const getSegmentGpx = (workoutId, segmentId) => dispatch => {\n if (workoutId) {\n return FitTrackeeGenericApi.getData(\n `workouts/${workoutId}/gpx/segment/${segmentId}`\n )\n .then(ret => {\n if (ret.status === 'success') {\n dispatch(setGpx(ret.data.gpx))\n } else {\n dispatch(setError(`workouts|${ret.message}`))\n }\n })\n .catch(error => dispatch(setError(`workouts|${error}`)))\n }\n dispatch(setGpx(null))\n}\n\nexport const getWorkoutChartData = workoutId => dispatch => {\n if (workoutId) {\n return FitTrackeeGenericApi.getData(`workouts/${workoutId}/chart_data`)\n .then(ret => {\n if (ret.status === 'success') {\n dispatch(setChartData(formatChartData(ret.data.chart_data)))\n } else {\n dispatch(setError(`workouts|${ret.message}`))\n }\n })\n .catch(error => dispatch(setError(`workouts|${error}`)))\n }\n dispatch(setChartData(null))\n}\n\nexport const getSegmentChartData = (workoutId, segmentId) => dispatch => {\n if (workoutId) {\n return FitTrackeeGenericApi.getData(\n `workouts/${workoutId}/chart_data/segment/${segmentId}`\n )\n .then(ret => {\n if (ret.status === 'success') {\n dispatch(setChartData(formatChartData(ret.data.chart_data)))\n } else {\n dispatch(setError(`workouts|${ret.message}`))\n }\n })\n .catch(error => dispatch(setError(`workouts|${error}`)))\n }\n dispatch(setChartData(null))\n}\n\nexport const deleteWorkout = id => dispatch =>\n FitTrackeeGenericApi.deleteData('workouts', id)\n .then(ret => {\n if (ret.status === 204) {\n Promise.resolve(dispatch(removeWorkout(id)))\n .then(() => dispatch(loadProfile()))\n .then(() => history.push('/'))\n } else {\n dispatch(setError(`workouts|${ret.status}`))\n }\n })\n .catch(error => dispatch(setError(`workouts|${error}`)))\n\nexport const editWorkout = form => dispatch =>\n FitTrackeeGenericApi.updateData('workouts', form)\n .then(ret => {\n if (ret.status === 'success') {\n dispatch(loadProfile())\n history.push(`/workouts/${ret.data.workouts[0].id}`)\n } else {\n dispatch(setError(`workouts|${ret.message}`))\n }\n dispatch(setLoading(false))\n })\n .catch(error => {\n dispatch(setLoading(false))\n dispatch(setError(`workouts|${error}`))\n })\n\nexport const getMoreWorkouts = params => dispatch =>\n FitTrackeeGenericApi.getData('workouts', params)\n .then(ret => {\n if (ret.status === 'success') {\n if (ret.data.workouts.length > 0) {\n dispatch(pushWorkouts(ret.data.workouts))\n }\n } else {\n dispatch(setError(`workouts|${ret.message}`))\n }\n })\n .catch(error => dispatch(setError(`workouts|${error}`)))\n\nexport const getMonthWorkouts = (from, to) => dispatch =>\n FitTrackeeGenericApi.getData('workouts', {\n from,\n to,\n order: 'desc',\n per_page: 100,\n })\n .then(ret => {\n if (ret.status === 'success') {\n dispatch(updateCalendar(ret.data.workouts))\n } else {\n dispatch(setError(`workouts|${ret.message}`))\n }\n })\n .catch(error => dispatch(setError(`workouts|${error}`)))\n","import React from 'react'\nimport { Trans } from 'react-i18next'\nimport { connect } from 'react-redux'\n\nimport { setLoading } from '../../../actions/index'\nimport { addWorkout, editWorkout } from '../../../actions/workouts'\nimport { history } from '../../../index'\nimport { getFileSize } from '../../../utils'\nimport { translateSports } from '../../../utils/workouts'\n\nfunction FormWithGpx(props) {\n const {\n appConfig,\n loading,\n onAddWorkout,\n onEditWorkout,\n sports,\n t,\n workout,\n } = props\n const sportId = workout ? workout.sport_id : ''\n const translatedSports = translateSports(sports, t, true)\n const zipTooltip = `${t('workouts:no folder inside')}, ${\n appConfig.gpx_limit_import\n } ${t('workouts:files max')}, ${t('workouts:max size')}: ${getFileSize(\n appConfig.max_zip_file_size\n )}`\n const fileSizeLimit = getFileSize(appConfig.max_single_file_size)\n return (\n event.preventDefault()}\n >\n
    \n \n
    \n {workout ? (\n
    \n \n
    \n ) : (\n
    \n \n
    \n )}\n
    \n \n
    \n {loading ? (\n
    \n ) : (\n
    \n \n workout ? onEditWorkout(event, workout) : onAddWorkout(event)\n }\n value={t('common:Submit')}\n />\n history.push('/')}\n value={t('common:Cancel')}\n />\n
    \n )}\n \n )\n}\n\nexport default connect(\n state => ({\n appConfig: state.application.config,\n loading: state.loading,\n }),\n dispatch => ({\n onAddWorkout: e => {\n dispatch(setLoading(true))\n const form = new FormData()\n form.append('file', e.target.form.gpxFile.files[0])\n /* prettier-ignore */\n form.append(\n 'data',\n `{\"sport_id\": ${e.target.form.sport.value\n }, \"notes\": \"${e.target.form.notes.value}\"}`\n )\n dispatch(addWorkout(form))\n },\n onEditWorkout: (e, workout) => {\n dispatch(\n editWorkout({\n id: workout.id,\n notes: e.target.form.notes.value,\n sport_id: +e.target.form.sport.value,\n title: e.target.form.title.value,\n })\n )\n },\n })\n)(FormWithGpx)\n","import React from 'react'\nimport { connect } from 'react-redux'\n\nimport { addWorkoutWithoutGpx, editWorkout } from '../../../actions/workouts'\nimport { history } from '../../../index'\nimport { getDateWithTZ } from '../../../utils'\nimport { formatWorkoutDate, translateSports } from '../../../utils/workouts'\n\nfunction FormWithoutGpx(props) {\n const { onAddOrEdit, sports, t, user, workout } = props\n const translatedSports = translateSports(sports, t, true)\n let workoutDate,\n workoutTime,\n sportId = ''\n if (workout) {\n const workoutDateTime = formatWorkoutDate(\n getDateWithTZ(workout.workout_date, user.timezone),\n 'yyyy-MM-dd'\n )\n workoutDate = workoutDateTime.workout_date\n workoutTime = workoutDateTime.workout_time\n sportId = workout.sport_id\n }\n\n return (\n
    event.preventDefault()}>\n
    \n \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n \n
    \n onAddOrEdit(event, workout)}\n value={t('common:Submit')}\n />\n history.push('/')}\n value={t('common:Cancel')}\n />\n \n )\n}\n\nexport default connect(\n state => ({\n user: state.user,\n }),\n dispatch => ({\n onAddOrEdit: (e, workout) => {\n const d = e.target.form.duration.value.split(':')\n const duration = +d[0] * 60 * 60 + +d[1] * 60 + +d[2]\n\n /* prettier-ignore */\n const workoutDate = `${e.target.form.workout_date.value\n } ${ e.target.form.workout_time.value}`\n\n const data = {\n workout_date: workoutDate,\n distance: +e.target.form.distance.value,\n duration,\n notes: e.target.form.notes.value,\n sport_id: +e.target.form.sport_id.value,\n title: e.target.form.title.value,\n }\n if (workout) {\n data.id = workout.id\n dispatch(editWorkout(data))\n } else {\n dispatch(addWorkoutWithoutGpx(data))\n }\n },\n })\n)(FormWithoutGpx)\n","import React from 'react'\nimport { Helmet } from 'react-helmet'\nimport { withTranslation } from 'react-i18next'\nimport { connect } from 'react-redux'\n\nimport FormWithGpx from './WorkoutForms/FormWithGpx'\nimport FormWithoutGpx from './WorkoutForms/FormWithoutGpx'\nimport Message from '../Common/Message'\n\nclass WorkoutAddEdit extends React.Component {\n constructor(props, context) {\n super(props, context)\n this.state = {\n withGpx: true,\n }\n }\n\n handleRadioChange(changeEvent) {\n this.setState({\n withGpx:\n changeEvent.target.name === 'withGpx'\n ? changeEvent.target.value\n : !changeEvent.target.value,\n })\n }\n\n render() {\n const { loading, message, sports, t, workout } = this.props\n const { withGpx } = this.state\n return (\n
    \n \n \n FitTrackee -{' '}\n {workout\n ? t('workouts:Edit a workout')\n : t('workouts:Add a workout')}\n \n \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n

    \n {workout\n ? t('workouts:Edit a workout')\n : t('workouts:Add a workout')}\n

    \n
    \n {workout ? (\n workout.with_gpx ? (\n \n ) : (\n \n )\n ) : (\n
    \n
    \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n
    \n {withGpx ? (\n \n ) : (\n \n )}\n
    \n )}\n
    \n
    \n
    \n
    \n
    \n
    \n
    \n )\n }\n}\n\nexport default withTranslation()(\n connect(state => ({\n loading: state.loading,\n }))(WorkoutAddEdit)\n)\n","import React from 'react'\nimport { connect } from 'react-redux'\n\nimport WorkoutAddOrEdit from './WorkoutAddOrEdit'\n\nfunction WorkoutAdd(props) {\n const { message, sports } = props\n return (\n
    \n \n
    \n )\n}\n\nexport default connect(state => ({\n message: state.message,\n sports: state.sports.data,\n user: state.user,\n}))(WorkoutAdd)\n","import React from 'react'\nimport { useTranslation } from 'react-i18next'\n\nexport default function CustomModal(props) {\n const { t } = useTranslation()\n return (\n
    \n
    \n
    \n
    \n
    {props.title}
    \n props.close()}\n >\n ×\n \n
    \n
    \n

    {props.text}

    \n
    \n
    \n props.confirm()}\n >\n {t('common:Yes')}\n \n props.close()}\n >\n {t('common:No')}\n \n
    \n
    \n
    \n
    \n )\n}\n","import React from 'react'\nimport { Link } from 'react-router-dom'\n\nimport { getDateWithTZ } from '../../../utils'\nimport { formatWorkoutDate } from '../../../utils/workouts'\n\nexport default function WorkoutCardHeader(props) {\n const {\n dataType,\n displayModal,\n segmentId,\n sport,\n t,\n title,\n user,\n workout,\n } = props\n const workoutDate = workout\n ? formatWorkoutDate(getDateWithTZ(workout.workout_date, user.timezone))\n : null\n\n const previousUrl =\n dataType === 'segment' && segmentId !== 1\n ? `/workouts/${workout.id}/segment/${segmentId - 1}`\n : dataType === 'workout' && workout.previous_workout\n ? `/workouts/${workout.previous_workout}`\n : null\n const nextUrl =\n dataType === 'segment' && segmentId < workout.segments.length\n ? `/workouts/${workout.id}/segment/${segmentId + 1}`\n : dataType === 'workout' && workout.next_workout\n ? `/workouts/${workout.next_workout}`\n : null\n\n return (\n
    \n
    \n
    \n {previousUrl ? (\n \n \n \n ) : (\n \n )}\n
    \n
    \n \"sport\n
    \n
    \n {dataType === 'workout' ? (\n <>\n {title}{' '}\n \n \n \n displayModal(true)}\n title={t('workouts:Delete workout')}\n />\n \n ) : (\n <>\n {/* prettier-ignore */}\n \n {title}\n {' '}\n - {t('workouts:segment')} {segmentId}\n \n )}\n
    \n {workoutDate && (\n \n {`${workoutDate.workout_date} - ${workoutDate.workout_time}`}\n \n )}\n
    \n
    \n {nextUrl ? (\n \n \n \n ) : (\n \n )}\n
    \n
    \n
    \n )\n}\n","import { format } from 'date-fns'\nimport React from 'react'\nimport { connect } from 'react-redux'\nimport {\n Area,\n ComposedChart,\n Line,\n ResponsiveContainer,\n Tooltip,\n XAxis,\n YAxis,\n} from 'recharts'\n\nimport {\n getSegmentChartData,\n getWorkoutChartData,\n} from '../../../actions/workouts'\n\nclass WorkoutCharts extends React.Component {\n constructor(props, context) {\n super(props, context)\n this.state = {\n displayDistance: true,\n dataToHide: [],\n }\n }\n\n componentDidMount() {\n if (this.props.dataType === 'workout') {\n this.props.loadWorkoutData(this.props.workout.id)\n } else {\n this.props.loadSegmentData(this.props.workout.id, this.props.segmentId)\n }\n }\n\n componentDidUpdate(prevProps) {\n if (\n (this.props.dataType === 'workout' &&\n prevProps.workout.id !== this.props.workout.id) ||\n (this.props.dataType === 'workout' && prevProps.dataType === 'segment')\n ) {\n this.props.loadWorkoutData(this.props.workout.id)\n }\n if (\n this.props.dataType === 'segment' &&\n prevProps.segmentId !== this.props.segmentId\n ) {\n this.props.loadSegmentData(this.props.workout.id, this.props.segmentId)\n }\n }\n\n componentWillUnmount() {\n this.props.loadWorkoutData(null)\n }\n\n handleRadioChange(changeEvent) {\n this.setState({\n displayDistance:\n changeEvent.target.name === 'distance'\n ? changeEvent.target.value\n : !changeEvent.target.value,\n })\n }\n\n handleLegendChange(e) {\n const { dataToHide } = this.state\n const name = e.target.name // eslint-disable-line prefer-destructuring\n if (dataToHide.find(d => d === name)) {\n dataToHide.splice(dataToHide.indexOf(name), 1)\n } else {\n dataToHide.push(name)\n }\n this.setState({ dataToHide })\n }\n\n displayData(name) {\n const { dataToHide } = this.state\n return !dataToHide.find(d => d === name)\n }\n\n render() {\n const { chartData, t, updateCoordinates } = this.props\n const { displayDistance } = this.state\n const xInterval = chartData ? parseInt(chartData.length / 10, 10) : 0\n let xDataKey, xScale\n if (displayDistance) {\n xDataKey = 'distance'\n xScale = 'linear'\n } else {\n xDataKey = 'duration'\n xScale = 'time'\n }\n return (\n
    \n {chartData && chartData.length > 0 ? (\n
    \n
    \n \n \n
    \n
    \n
    \n \n \n
    \n
    \n
    \n \n updateCoordinates(e.activePayload)}\n onMouseLeave={() => updateCoordinates(null)}\n >\n \n displayDistance ? value : format(value, 'HH:mm:ss')\n }\n type=\"number\"\n />\n \n \n {this.displayData('elevation') && (\n \n )}\n {this.displayData('speed') && (\n \n )}\n \n displayDistance\n ? `${t('workouts:distance')}: ${value} km`\n : `${t('workouts:duration')}: ${format(\n value,\n 'HH:mm:ss'\n )}`\n }\n />\n \n \n
    \n
    \n {t('workouts:data from gpx, without any cleaning')}\n
    \n
    \n ) : (\n t('workouts:No data to display')\n )}\n
    \n )\n }\n}\n\nexport default connect(\n state => ({\n chartData: state.chartData,\n }),\n dispatch => ({\n loadWorkoutData: workoutId => {\n dispatch(getWorkoutChartData(workoutId))\n },\n loadSegmentData: (workoutId, segmentId) => {\n dispatch(getSegmentChartData(workoutId, segmentId))\n },\n })\n)(WorkoutCharts)\n","import React from 'react'\n\nexport default function WorkoutWeather(props) {\n const { t, workout } = props\n return (\n
    \n {workout.weather_start && workout.weather_end && (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
    \n \n {t('workouts:Start')}\n
    \n \n
    \n {t('workouts:End')}\n
    \n \n
    \n \n {Number(workout.weather_start.temperature).toFixed(1)}°C{Number(workout.weather_end.temperature).toFixed(1)}°C
    \n \n \n {Number(workout.weather_start.humidity * 100).toFixed(1)}%\n {Number(workout.weather_end.humidity * 100).toFixed(1)}%
    \n \n {Number(workout.weather_start.wind).toFixed(1)}m/s{Number(workout.weather_end.wind).toFixed(1)}m/s
    \n )}\n
    \n )\n}\n","import React from 'react'\n\nimport WorkoutWeather from './WorkoutWeather'\n\nexport default function WorkoutDetails(props) {\n const { t, workout } = props\n const withPauses = workout.pauses !== '0:00:00' && workout.pauses !== null\n return (\n
    \n

    \n \n {t('workouts:Duration')}: {workout.moving}\n {workout.records &&\n workout.records.find(record => record.record_type === 'LD') && (\n \n \n \n )}\n {withPauses && (\n \n
    ({t('workouts:pauses')}: {workout.pauses},{' '}\n {t('workouts:total duration')}: {workout.duration})\n
    \n )}\n

    \n

    \n \n {t('workouts:Distance')}: {workout.distance} km\n {workout.records &&\n workout.records.find(record => record.record_type === 'FD') && (\n \n \n \n )}\n

    \n

    \n \n {t('workouts:Average speed')}: {workout.ave_speed} km/h\n {workout.records &&\n workout.records.find(record => record.record_type === 'AS') && (\n \n \n \n )}\n
    \n {t('workouts:Max. speed')}: {workout.max_speed} km/h\n {workout.records &&\n workout.records.find(record => record.record_type === 'MS') && (\n \n \n \n )}\n

    \n {workout.min_alt && workout.max_alt && (\n

    \n \n {t('workouts:Min. altitude')}: {workout.min_alt}m\n
    \n {t('workouts:Max. altitude')}: {workout.max_alt}m\n

    \n )}\n {workout.ascent && workout.descent && (\n

    \n \n {t('workouts:Ascent')}: {workout.ascent}m\n
    \n {t('workouts:Descent')}: {workout.descent}m\n

    \n )}\n \n
    \n )\n}\n","import React from 'react'\nimport { GeoJSON, Marker, TileLayer, useMap } from 'react-leaflet'\nimport hash from 'object-hash'\n\nimport { apiUrl } from '../../../utils'\n\nexport default function Map({ bounds, coordinates, jsonData, mapAttribution }) {\n const map = useMap()\n map.fitBounds(bounds)\n return (\n <>\n \n \n {coordinates.latitude && (\n \n )}\n \n )\n}\n","import React from 'react'\nimport { MapContainer } from 'react-leaflet'\nimport { connect } from 'react-redux'\n\nimport Map from './Map'\nimport { getSegmentGpx, getWorkoutGpx } from '../../../actions/workouts'\nimport { getGeoJson } from '../../../utils/workouts'\n\nclass WorkoutMap extends React.Component {\n constructor(props, context) {\n super(props, context)\n this.state = {\n zoom: 13,\n }\n }\n\n componentDidMount() {\n if (this.props.dataType === 'workout') {\n this.props.loadWorkoutGpx(this.props.workout.id)\n } else {\n this.props.loadSegmentGpx(this.props.workout.id, this.props.segmentId)\n }\n }\n\n componentDidUpdate(prevProps) {\n if (\n (this.props.dataType === 'workout' &&\n prevProps.workout.id !== this.props.workout.id) ||\n (this.props.dataType === 'workout' && prevProps.dataType === 'segment')\n ) {\n this.props.loadWorkoutGpx(this.props.workout.id)\n }\n if (\n this.props.dataType === 'segment' &&\n prevProps.segmentId !== this.props.segmentId\n ) {\n this.props.loadSegmentGpx(this.props.workout.id, this.props.segmentId)\n }\n }\n\n componentWillUnmount() {\n this.props.loadWorkoutGpx(null)\n }\n\n render() {\n const { coordinates, gpxContent, mapAttribution, workout } = this.props\n const { jsonData } = getGeoJson(gpxContent)\n const bounds = [\n [workout.bounds[0], workout.bounds[1]],\n [workout.bounds[2], workout.bounds[3]],\n ]\n\n return (\n
    \n {jsonData && (\n \n \n \n )}\n
    \n )\n }\n}\n\nexport default connect(\n state => ({\n gpxContent: state.gpx,\n mapAttribution: state.application.config.map_attribution,\n }),\n dispatch => ({\n loadWorkoutGpx: workoutId => {\n dispatch(getWorkoutGpx(workoutId))\n },\n loadSegmentGpx: (workoutId, segmentId) => {\n dispatch(getSegmentGpx(workoutId, segmentId))\n },\n })\n)(WorkoutMap)\n","import React from 'react'\n\nexport default function WorkoutNoMap(props) {\n const { t } = props\n return (\n
    {t('workouts:No Map')}
    \n )\n}\n","import React from 'react'\n\nexport default function WorkoutNotes(props) {\n const { notes, t } = props\n return (\n
    \n
    \n
    \n
    \n Notes\n
    \n {notes ? notes : t('workouts:No notes')}\n
    \n
    \n
    \n
    \n
    \n )\n}\n","import React from 'react'\nimport { Link } from 'react-router-dom'\n\nexport default function WorkoutSegments(props) {\n const { segments, t } = props\n return (\n
    \n
    \n
    \n
    \n {t('workouts:Segments')}\n
    \n
      \n {segments.map((segment, index) => (\n \n \n {t('workouts:segment')} {index + 1}\n {' '}\n ({t('workouts:distance')}: {segment.distance} km,{' '}\n {t('workouts:duration')}: {segment.duration})\n \n ))}\n
    \n
    \n
    \n
    \n
    \n
    \n )\n}\n","import React from 'react'\nimport { Helmet } from 'react-helmet'\nimport { withTranslation } from 'react-i18next'\nimport { connect } from 'react-redux'\n\nimport CustomModal from '../../Common/CustomModal'\nimport Message from '../../Common/Message'\nimport WorkoutCardHeader from './WorkoutCardHeader'\nimport WorkoutCharts from './WorkoutCharts'\nimport WorkoutDetails from './WorkoutDetails'\nimport WorkoutMap from './WorkoutMap'\nimport WorkoutNoMap from './WorkoutNoMap'\nimport WorkoutNotes from './WorkoutNotes'\nimport WorkoutSegments from './WorkoutSegments'\nimport { getOrUpdateData } from '../../../actions'\nimport { deleteWorkout } from '../../../actions/workouts'\n\nclass WorkoutDisplay extends React.Component {\n constructor(props, context) {\n super(props, context)\n this.state = {\n displayModal: false,\n coordinates: {\n latitude: null,\n longitude: null,\n },\n }\n }\n\n componentDidMount() {\n this.props.loadWorkout(this.props.match.params.workoutId)\n }\n\n componentDidUpdate(prevProps) {\n if (\n prevProps.match.params.workoutId !== this.props.match.params.workoutId\n ) {\n this.props.loadWorkout(this.props.match.params.workoutId)\n }\n }\n\n displayModal(value) {\n this.setState(prevState => ({\n ...prevState,\n displayModal: value,\n }))\n }\n\n updateCoordinates(activePayload) {\n const coordinates =\n activePayload && activePayload.length > 0\n ? {\n latitude: activePayload[0].payload.latitude,\n longitude: activePayload[0].payload.longitude,\n }\n : {\n latitude: null,\n longitude: null,\n }\n this.setState(prevState => ({\n ...prevState,\n coordinates,\n }))\n }\n\n render() {\n const { message, onDeleteWorkout, sports, t, user, workouts } = this.props\n const { coordinates, displayModal } = this.state\n const [workout] = workouts\n const title = workout ? workout.title : t('workouts:Workout')\n const [sport] = workout ? sports.filter(s => s.id === workout.sport_id) : []\n const segmentId = parseInt(this.props.match.params.segmentId)\n const dataType = segmentId >= 0 ? 'segment' : 'workout'\n return (\n
    \n \n FitTrackee - {title}\n \n {message ? (\n \n ) : (\n
    \n {displayModal && (\n {\n onDeleteWorkout(workout.id)\n this.displayModal(false)\n }}\n close={() => this.displayModal(false)}\n />\n )}\n {workout && sport && workouts.length === 1 && (\n
    \n
    \n
    \n
    \n
    \n this.displayModal(true)}\n />\n
    \n
    \n
    \n
    \n {workout.with_gpx ? (\n \n ) : (\n \n )}\n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n {workout.with_gpx && (\n
    \n
    \n
    \n
    \n
    \n
    \n
    \n {t('workouts:Chart')}\n
    \n \n this.updateCoordinates(e)\n }\n />\n
    \n
    \n
    \n
    \n
    \n
    \n )}\n {dataType === 'workout' && (\n <>\n \n {workout.segments.length > 1 && (\n \n )}\n \n )}\n
    \n )}\n
    \n )}\n
    \n )\n }\n}\n\nexport default withTranslation()(\n connect(\n state => ({\n workouts: state.workouts.data,\n message: state.message,\n sports: state.sports.data,\n user: state.user,\n }),\n dispatch => ({\n loadWorkout: workoutId => {\n dispatch(getOrUpdateData('getData', 'workouts', { id: workoutId }))\n },\n onDeleteWorkout: workoutId => {\n dispatch(deleteWorkout(workoutId))\n },\n })\n )(WorkoutDisplay)\n)\n","import React from 'react'\nimport { connect } from 'react-redux'\n\nimport WorkoutAddOrEdit from './WorkoutAddOrEdit'\nimport { getOrUpdateData } from '../../actions'\n\nclass WorkoutEdit extends React.Component {\n componentDidMount() {\n this.props.loadWorkout(this.props.match.params.workoutId)\n }\n\n render() {\n const { message, sports, workouts } = this.props\n const [workout] = workouts\n return (\n
    \n {sports.length > 0 && (\n \n )}\n
    \n )\n }\n}\n\nexport default connect(\n state => ({\n workouts: state.workouts.data,\n message: state.message,\n sports: state.sports.data,\n user: state.user,\n }),\n dispatch => ({\n loadWorkout: workoutId => {\n dispatch(getOrUpdateData('getData', 'workouts', { id: workoutId }))\n },\n })\n)(WorkoutEdit)\n","import React from 'react'\nimport { connect } from 'react-redux'\nimport { Redirect, Route, Switch } from 'react-router-dom'\n\nimport NotFound from './../Others/NotFound'\nimport WorkoutAdd from './WorkoutAdd'\nimport WorkoutDisplay from './WorkoutDisplay'\nimport WorkoutEdit from './WorkoutEdit'\nimport { isLoggedIn } from '../../utils'\n\nfunction Workout() {\n return (\n
    \n {isLoggedIn() ? (\n \n \n \n \n \n \n \n ) : (\n \n )}\n
    \n )\n}\n\nexport default connect(state => ({\n user: state.user,\n}))(Workout)\n","import React from 'react'\nimport { Link } from 'react-router-dom'\n\nexport default class NoWorkouts extends React.PureComponent {\n render() {\n const { t } = this.props\n return (\n
    \n
    \n {t('common:No workouts.')}{' '}\n \n {t('dashboard:Upload one !')}\n \n
    \n
    \n )\n }\n}\n","import React from 'react'\n\nimport { translateSports } from '../../utils/workouts'\n\nexport default class WorkoutsFilter extends React.PureComponent {\n render() {\n const { loadWorkouts, sports, t, updateParams } = this.props\n const translatedSports = translateSports(sports, t)\n return (\n
    \n
    \n
    event.preventDefault()}>\n
    \n \n \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n \n
    \n loadWorkouts()}\n type=\"submit\"\n value={t('workouts:Filter')}\n />\n \n
    \n
    \n )\n }\n}\n","import React from 'react'\n\nimport { apiUrl } from '../../utils'\n\nexport default class StaticMap extends React.PureComponent {\n render() {\n const { display, workout } = this.props\n\n return (\n
    \n \n
    \n ©\n \n OpenStreetMap\n \n
    \n
    \n )\n }\n}\n","import { format } from 'date-fns'\nimport React from 'react'\nimport { Link } from 'react-router-dom'\n\nimport StaticMap from '../Common/StaticMap'\nimport { getDateWithTZ } from '../../utils'\n\nexport default class WorkoutsList extends React.PureComponent {\n render() {\n const { loading, sports, t, user, workouts } = this.props\n return (\n
    \n
    \n \n \n \n \n \n \n \n \n \n \n \n \n {!loading &&\n sports &&\n workouts.map((workout, idx) => (\n // eslint-disable-next-line react/no-array-index-key\n \n \n \n \n \n \n \n \n \n ))}\n \n
    \n {t('common:Workout')}{t('workouts:Date')}{t('workouts:Distance')}{t('workouts:Duration')}{t('workouts:Ave. speed')}{t('workouts:Max. speed')}
    \n \n {t('common:Sport')}\n \n s.id === workout.sport_id)\n .map(s => s.img)}\n alt=\"workout sport logo\"\n />\n \n \n {t('common:Workout')}\n \n \n {workout.title}\n \n {workout.map && (\n \n )}\n \n \n {t('workouts:Date')}\n \n {format(\n getDateWithTZ(workout.workout_date, user.timezone),\n 'dd/MM/yyyy HH:mm'\n )}\n \n \n {t('workouts:Distance')}\n \n {Number(workout.distance).toFixed(2)} km\n \n \n {t('workouts:Duration')}\n \n {workout.moving}\n \n \n {t('workouts:Ave. speed')}\n \n {workout.ave_speed} km/h\n \n \n {t('workouts:Max. speed')}\n \n {workout.max_speed} km/h\n
    \n {loading &&
    }\n
    \n
    \n )\n }\n}\n","import React from 'react'\nimport { Helmet } from 'react-helmet'\nimport { withTranslation } from 'react-i18next'\nimport { connect } from 'react-redux'\n\nimport Message from '../Common/Message'\nimport NoWorkouts from '../Common/NoWorkouts'\nimport WorkoutsFilter from './WorkoutsFilter'\nimport WorkoutsList from './WorkoutsList'\nimport { getOrUpdateData } from '../../actions'\nimport { getMoreWorkouts } from '../../actions/workouts'\n\nclass Workouts extends React.Component {\n constructor(props, context) {\n super(props, context)\n this.state = {\n params: {\n page: 1,\n per_page: 10,\n },\n }\n }\n\n componentDidMount() {\n this.props.loadWorkouts(this.state.params)\n }\n\n setParams(e) {\n const { params } = this.state\n if (e.target.value === '') {\n delete params[e.target.name]\n } else {\n params[e.target.name] = e.target.value\n }\n params.page = 1\n this.setState(params)\n }\n render() {\n const {\n loading,\n loadWorkouts,\n loadMoreWorkouts,\n message,\n sports,\n t,\n user,\n workouts,\n } = this.props\n const { params } = this.state\n const paginationEnd =\n workouts.length > 0\n ? workouts[workouts.length - 1].previous_workout === null\n : true\n return (\n
    \n \n FitTrackee - {t('common:Workouts')}\n \n {message ? (\n \n ) : (\n
    \n
    \n
    \n loadWorkouts(params)}\n t={t}\n updateParams={e => this.setParams(e)}\n />\n
    \n
    \n \n {!paginationEnd && (\n {\n params.page += 1\n loadMoreWorkouts(params)\n this.setState(params)\n }}\n />\n )}\n {workouts.length === 0 && }\n
    \n
    \n
    \n )}\n
    \n )\n }\n}\n\nexport default withTranslation()(\n connect(\n state => ({\n workouts: state.workouts.data,\n loading: state.loading,\n message: state.message,\n sports: state.sports.data,\n user: state.user,\n }),\n dispatch => ({\n loadWorkouts: params => {\n dispatch(getOrUpdateData('getData', 'workouts', params))\n },\n loadMoreWorkouts: params => {\n dispatch(getMoreWorkouts(params))\n },\n })\n )(Workouts)\n)\n","import { format } from 'date-fns'\nimport React from 'react'\nimport { Helmet } from 'react-helmet'\nimport { withTranslation } from 'react-i18next'\nimport { connect } from 'react-redux'\n\nimport Message from '../Common/Message'\nimport { deletePicture, uploadPicture } from '../../actions/user'\nimport { apiUrl, getFileSize } from '../../utils'\nimport { history } from '../../index'\n\nfunction ProfileDetail({\n appConfig,\n displayModal,\n editable,\n isDeletable,\n message,\n onDeletePicture,\n onUploadPicture,\n pathname,\n t,\n user,\n}) {\n const createdAt = user.created_at\n ? format(new Date(user.created_at), 'dd/MM/yyyy HH:mm')\n : ''\n const birthDate = user.birth_date\n ? format(new Date(user.birth_date), 'dd/MM/yyyy')\n : ''\n const fileSizeLimit = getFileSize(appConfig.max_single_file_size)\n return (\n
    \n \n FitTrackee - {t('user:Profile')}\n \n \n
    \n

    {t('user:Profile')}

    \n
    \n
    \n
    \n
    \n {user.username}\n
    \n
    \n
    \n
    \n

    \n {/* eslint-disable-next-line max-len */}\n \n {t('user:Email')}\n : {user.email}\n

    \n

    \n \n {t('user:Registration Date')}\n \n : {createdAt}\n

    \n

    \n {t('user:First Name')}\n : {user.first_name}\n

    \n

    \n {/* eslint-disable-next-line max-len */}\n \n {t('user:Last Name')}\n : {user.last_name}\n

    \n

    \n {t('user:Birth Date')}\n : {birthDate}\n

    \n

    \n {/* eslint-disable-next-line max-len */}\n \n {t('user:Location')}\n : {user.location}\n

    \n

    \n {t('user:Bio')}:{' '}\n {user.bio}\n

    \n

    \n {/* eslint-disable-next-line max-len */}\n \n {t('user:Language')}\n : {user.language}\n

    \n

    \n {/* eslint-disable-next-line max-len */}\n \n {t('user:Timezone')}\n : {user.timezone}\n

    \n

    \n \n {t('user:First day of week')}\n \n : {user.weekm ? t('user:Monday') : t('user:Sunday')}\n

    \n
    \n
    \n {user.picture === true && (\n
    \n \n {editable && (\n <>\n
    \n onDeletePicture()}\n >\n {t('user:Delete picture')}\n \n
    \n
    \n \n )}\n
    \n )}\n {editable && (\n onUploadPicture(event)}\n >\n \n
    \n \n {` (max. size: ${fileSizeLimit})`}\n \n )}{' '}\n
    \n
    \n {editable && (\n history.push('/profile/edit')}\n >\n {t('common:Edit')}\n \n )}\n {isDeletable && (\n displayModal(true)}\n >\n {t('user:Delete user account')}\n \n )}\n \n pathname === '/profile' ? history.push('/') : history.go(-1)\n }\n >\n {t(\n pathname === '/profile'\n ? 'common:Back to home'\n : 'common:Back'\n )}\n \n
    \n
    \n
    \n
    \n
    \n
    \n )\n}\n\nexport default withTranslation()(\n connect(\n state => ({\n appConfig: state.application.config,\n pathname: state.router.location.pathname,\n message: state.message,\n }),\n dispatch => ({\n onDeletePicture: () => {\n dispatch(deletePicture())\n },\n onUploadPicture: event => {\n dispatch(uploadPicture(event))\n },\n })\n )(ProfileDetail)\n)\n","import React from 'react'\nimport { withTranslation } from 'react-i18next'\nimport { connect } from 'react-redux'\n\nimport ProfileDetail from './ProfileDetail'\n\nfunction CurrentUserProfile({ t, user }) {\n return (\n
    \n \n
    \n )\n}\n\nexport default withTranslation()(\n connect(state => ({\n user: state.user,\n }))(CurrentUserProfile)\n)\n","import React from 'react'\nimport { Link } from 'react-router-dom'\n\nimport { recordsLabels } from '../../utils/workouts'\n\nexport default function CalendarWorkout(props) {\n const { isDisabled, isMore, sportImg, workout } = props\n return (\n \n <>\n \n {workout.records.length > 0 && (\n \n \n ` ${\n recordsLabels.filter(\n r => r.record_type === rec.record_type\n )[0].label\n }`\n )}\n />\n \n )}\n \n \n )\n}\n","import React from 'react'\n\nimport CalendarWorkout from './CalendarWorkout'\n\nexport default class CalendarWorkouts extends React.Component {\n constructor(props, context) {\n super(props, context)\n this.state = {\n isHidden: true,\n }\n }\n\n handleDisplayMore() {\n this.setState({\n isHidden: !this.state.isHidden,\n })\n }\n\n render() {\n const { dayWorkouts, isDisabled, sports } = this.props\n const { isHidden } = this.state\n return (\n
    \n {dayWorkouts.map(act => (\n s.id === act.sport_id).map(s => s.img)}\n />\n ))}\n {dayWorkouts.length > 2 && (\n this.handleDisplayMore()}\n title=\"show more workouts\"\n />\n )}\n {!isHidden && (\n
    \n {dayWorkouts.map(act => (\n s.id === act.sport_id)\n .map(s => s.img)}\n />\n ))}\n
    \n )}\n
    \n )\n }\n}\n","// eslint-disable-next-line max-len\n// source: https://blog.flowandform.agency/create-a-custom-calendar-in-react-3df1bfd0b728\nimport {\n addDays,\n addMonths,\n endOfMonth,\n endOfWeek,\n format,\n isSameDay,\n isSameMonth,\n isToday,\n startOfMonth,\n startOfWeek,\n subMonths,\n} from 'date-fns'\nimport { enGB, fr } from 'date-fns/locale'\nimport React from 'react'\nimport { connect } from 'react-redux'\n\nimport CalendarWorkouts from './CalendarWorkouts'\nimport { getMonthWorkouts } from '../../actions/workouts'\nimport { getDateWithTZ } from '../../utils'\n\nconst getStartAndEndMonth = (date, weekStartOnMonday) => {\n const monthStart = startOfMonth(date)\n const monthEnd = endOfMonth(date)\n const weekStartsOn = weekStartOnMonday ? 1 : 0\n return {\n start: startOfWeek(monthStart, { weekStartsOn }),\n end: endOfWeek(monthEnd),\n }\n}\n\nclass Calendar extends React.Component {\n constructor(props, context) {\n super(props, context)\n const calendarDate = new Date()\n this.state = {\n currentMonth: calendarDate,\n startDate: getStartAndEndMonth(calendarDate, props.weekm).start,\n endDate: getStartAndEndMonth(calendarDate, props.weekm).end,\n weekStartOnMonday: props.weekm,\n }\n }\n\n componentDidMount() {\n this.props.loadMonthWorkouts(this.state.startDate, this.state.endDate)\n }\n\n renderHeader(localeOptions) {\n const dateFormat = 'MMM yyyy'\n return (\n
    \n
    this.handlePrevMonth()}>\n \n
    \n
    \n \n {format(this.state.currentMonth, dateFormat, localeOptions)}\n \n
    \n
    this.handleNextMonth()}>\n \n
    \n
    \n )\n }\n\n renderDays(localeOptions) {\n const dateFormat = 'EEE'\n const days = []\n const { startDate } = this.state\n\n for (let i = 0; i < 7; i++) {\n days.push(\n
    \n {format(addDays(startDate, i), dateFormat, localeOptions)}\n
    \n )\n }\n return
    {days}
    \n }\n\n filterWorkouts(day) {\n const { workouts, user } = this.props\n if (workouts) {\n return workouts\n .filter(act =>\n isSameDay(getDateWithTZ(act.workout_date, user.timezone), day)\n )\n .reverse()\n }\n return []\n }\n\n renderCells() {\n const { currentMonth, startDate, endDate, weekStartOnMonday } = this.state\n const { sports } = this.props\n\n const dateFormat = 'd'\n const rows = []\n\n let days = []\n let day = startDate\n let formattedDate = ''\n\n while (day <= endDate) {\n for (let i = 0; i < 7; i++) {\n formattedDate = format(day, dateFormat)\n const dayWorkouts = this.filterWorkouts(day)\n const isDisabled = isSameMonth(day, currentMonth) ? '' : '-disabled'\n const isWeekEnd = weekStartOnMonday\n ? [5, 6].includes(i)\n : [0, 6].includes(i)\n days.push(\n \n
    \n {formattedDate}\n \n
    \n
    \n )\n day = addDays(day, 1)\n }\n rows.push(\n
    \n {days}\n
    \n )\n days = []\n }\n return
    {rows}
    \n }\n\n updateStateDate(calendarDate) {\n const { start, end } = getStartAndEndMonth(\n calendarDate,\n this.state.weekStartOnMonday\n )\n this.setState({\n currentMonth: calendarDate,\n startDate: start,\n endDate: end,\n })\n this.props.loadMonthWorkouts(start, end)\n }\n\n handleNextMonth() {\n const calendarDate = addMonths(this.state.currentMonth, 1)\n this.updateStateDate(calendarDate)\n }\n\n handlePrevMonth() {\n const calendarDate = subMonths(this.state.currentMonth, 1)\n this.updateStateDate(calendarDate)\n }\n\n render() {\n const localeOptions = {\n locale: this.props.language === 'fr' ? fr : enGB,\n }\n return (\n
    \n
    \n {this.renderHeader(localeOptions)}\n {this.renderDays(localeOptions)}\n {this.renderCells()}\n
    \n
    \n )\n }\n}\n\nexport default connect(\n state => ({\n workouts: state.calendarWorkouts.data,\n language: state.language,\n sports: state.sports.data,\n user: state.user,\n }),\n dispatch => ({\n loadMonthWorkouts: (start, end) => {\n const dateFormat = 'yyyy-MM-dd'\n dispatch(\n getMonthWorkouts(format(start, dateFormat), format(end, dateFormat))\n )\n },\n })\n)(Calendar)\n","import React from 'react'\nimport { Link } from 'react-router-dom'\n\nimport { formatRecord, translateSports } from '../../utils/workouts'\n\nexport default function RecordsCard(props) {\n const { records, sports, t, user } = props\n const translatedSports = translateSports(sports, t)\n const recordsBySport = records.reduce((sportList, record) => {\n const sport = translatedSports.find(s => s.id === record.sport_id)\n if (sportList[sport.label] === void 0) {\n sportList[sport.label] = {\n img: sport.img,\n records: [],\n }\n }\n sportList[sport.label].records.push(formatRecord(record, user.timezone))\n return sportList\n }, {})\n\n return (\n
    \n
    {t('workouts:Personal records')}
    \n
    \n {Object.keys(recordsBySport).length === 0\n ? t('common:No records.')\n : Object.keys(recordsBySport)\n .sort()\n .map(sportLabel => (\n
    \n \n \n {sportLabel}\n \n {/* eslint-disable-next-line max-len */}\n \n \n \n \n \n \n \n {recordsBySport[sportLabel].records.map(rec => (\n \n \n \n \n \n ))}\n \n
    \n \n {sportLabel}\n
    \n {t(`workouts:${rec.record_type}`)}\n {rec.value}\n \n {rec.workout_date}\n \n
    \n
    \n ))}\n
    \n
    \n )\n}\n","import FitTrackeeGenericApi from '../fitTrackeeApi'\nimport { setData, setError } from './index'\n\nexport const getStats = (userName, type, data) => dispatch =>\n FitTrackeeGenericApi.getData(`stats/${userName}/${type}`, data)\n .then(ret => {\n if (ret.status === 'success') {\n dispatch(setData('statistics', ret.data))\n } else {\n dispatch(setError(`statistics|${ret.message}`))\n }\n })\n .catch(error => dispatch(setError(`statistics|${error}`)))\n","import {\n addDays,\n addMonths,\n addYears,\n format,\n startOfMonth,\n startOfWeek,\n startOfYear,\n} from 'date-fns'\n\nconst xAxisFormats = [\n { duration: 'week', dateFormat: 'yyyy-MM-dd', xAxis: 'dd/MM' },\n { duration: 'month', dateFormat: 'yyyy-MM', xAxis: 'MM/yyyy' },\n { duration: 'year', dateFormat: 'yyyy', xAxis: 'yyyy' },\n]\n\nexport const formatDuration = (totalSeconds, formatWithDay = false) => {\n let days = '0'\n if (formatWithDay) {\n days = String(Math.floor(totalSeconds / 86400))\n totalSeconds %= 86400\n }\n const hours = String(Math.floor(totalSeconds / 3600)).padStart(2, '0')\n totalSeconds %= 3600\n const minutes = String(Math.floor(totalSeconds / 60)).padStart(2, '0')\n const seconds = String(totalSeconds % 60).padStart(2, '0')\n if (formatWithDay) {\n return `${days === '0' ? '' : `${days}d:`}${\n hours === '00' ? '' : `${hours}h:`\n }${minutes}m:${seconds}s`\n }\n return `${hours === '00' ? '' : `${hours}:`}${minutes}:${seconds}`\n}\n\nexport const formatValue = (displayedData, value) =>\n value === 0\n ? ''\n : displayedData === 'distance'\n ? `${value.toFixed(2)} km`\n : displayedData === 'duration'\n ? formatDuration(value)\n : value\n\nconst dateIncrement = (duration, day) => {\n switch (duration) {\n case 'week':\n return addDays(day, 7)\n case 'year':\n return addYears(day, 1)\n case 'month':\n default:\n return addMonths(day, 1)\n }\n}\n\nconst startDate = (duration, day, weekm) => {\n switch (duration) {\n case 'week':\n return startOfWeek(day, { weekStartsOn: weekm ? 1 : 0 })\n case 'year':\n return startOfYear(day)\n case 'month':\n default:\n return startOfMonth(day)\n }\n}\n\nexport const formatStats = (stats, sports, params, displayedSports, weekm) => {\n const nbWorkoutsStats = []\n const distanceStats = []\n const durationStats = []\n\n for (\n let day = startDate(params.duration, params.start, weekm);\n day <= params.end;\n day = dateIncrement(params.duration, day)\n ) {\n const [xAxisFormat] = xAxisFormats.filter(\n x => x.duration === params.duration\n )\n const date = format(day, xAxisFormat.dateFormat)\n const xAxis = format(day, xAxisFormat.xAxis)\n const dataNbWorkouts = { date: xAxis }\n const dataDistance = { date: xAxis }\n const dataDuration = { date: xAxis }\n\n if (stats[date]) {\n Object.keys(stats[date])\n .filter(sportId =>\n displayedSports ? displayedSports.includes(+sportId) : true\n )\n .map(sportId => {\n const sportLabel = sports.filter(s => s.id === +sportId)[0].label\n dataNbWorkouts[sportLabel] = stats[date][sportId].nb_workouts\n dataDistance[sportLabel] = stats[date][sportId].total_distance\n dataDuration[sportLabel] = stats[date][sportId].total_duration\n return null\n })\n }\n nbWorkoutsStats.push(dataNbWorkouts)\n distanceStats.push(dataDistance)\n durationStats.push(dataDuration)\n }\n\n return {\n workouts: nbWorkoutsStats,\n distance: distanceStats,\n duration: durationStats,\n }\n}\n","import React from 'react'\n\nimport { formatDuration } from '../../../utils/stats'\n\nconst formatValue = (displayedData, value) =>\n displayedData === 'duration'\n ? formatDuration(value, true)\n : displayedData === 'distance'\n ? value.toFixed(2)\n : value\n\n/**\n * @return {null}\n */\nexport default function CustomTooltip(props) {\n const { active } = props\n if (active) {\n const { displayedData, payload, label } = props\n let total = 0\n payload.map(p => (total += p.value))\n return (\n
    \n

    {label}

    \n {payload.map(p => (\n

    \n {p.name}: {formatValue(displayedData, p.value)} {p.unit}\n

    \n ))}\n {payload.length > 0 && (\n

    Total: {formatValue(displayedData, total)}

    \n )}\n
    \n )\n }\n return null\n}\n","import React from 'react'\n\nimport { formatValue } from '../../../utils/stats'\n\n/**\n * @return {null}\n */\nexport default function CustomLabel(props) {\n const { displayedData, x, y, width, value } = props\n if (!value) {\n return null\n }\n const radius = 10\n const formattedValue = formatValue(displayedData, value)\n\n return (\n \n \n {formattedValue}\n \n \n )\n}\n","import React from 'react'\nimport {\n Bar,\n BarChart,\n ResponsiveContainer,\n Tooltip,\n XAxis,\n YAxis,\n} from 'recharts'\n\nimport { formatValue } from '../../../utils/stats'\nimport { workoutColors } from '../../../utils/workouts'\nimport CustomTooltip from './CustomTooltip'\nimport CustomLabel from './CustomLabel'\n\nexport default class StatsCharts extends React.PureComponent {\n constructor(props, context) {\n super(props, context)\n this.state = {\n displayedData: 'distance',\n }\n }\n handleRadioChange(changeEvent) {\n this.setState({\n displayedData: changeEvent.target.name,\n })\n }\n\n render() {\n const { displayedData } = this.state\n const { sports, stats, t } = this.props\n if (Object.keys(stats).length === 0) {\n return t('common:No workouts.')\n }\n return (\n
    \n
    \n \n \n \n
    \n \n \n \n formatValue(displayedData, value)} />\n }\n />\n {sports.map((s, i) => (\n \n ) : (\n ''\n )\n }\n name={t(`sports:${s.label}`)}\n />\n ))}\n \n \n
    \n )\n }\n}\n","import { format } from 'date-fns'\nimport React from 'react'\nimport { connect } from 'react-redux'\n\nimport { getStats } from '../../../actions/stats'\nimport { formatStats } from '../../../utils/stats'\nimport StatsChart from './StatsChart'\n\nclass Statistics extends React.PureComponent {\n componentDidMount() {\n this.updateData()\n }\n\n componentDidUpdate(prevProps) {\n if (\n (this.props.user.username &&\n this.props.user.username !== prevProps.user.username) ||\n this.props.statsParams !== prevProps.statsParams\n ) {\n this.updateData()\n }\n }\n\n updateData() {\n if (this.props.user.username) {\n this.props.loadWorkouts(\n this.props.user.username,\n this.props.user.weekm,\n this.props.statsParams\n )\n }\n }\n\n render() {\n const {\n displayedSports,\n sports,\n statistics,\n statsParams,\n displayEmpty,\n t,\n user,\n } = this.props\n if (!displayEmpty && Object.keys(statistics).length === 0) {\n return {t('common:No workouts.')}\n }\n const stats = formatStats(\n statistics,\n sports,\n statsParams,\n displayedSports,\n user.weekm\n )\n return \n }\n}\n\nexport default connect(\n state => ({\n sports: state.sports.data,\n statistics: state.statistics.data,\n user: state.user,\n }),\n dispatch => ({\n loadWorkouts: (userName, weekm, data) => {\n const dateFormat = 'yyyy-MM-dd'\n // depends on user config (first day of week)\n const time =\n data.duration === 'week'\n ? `${data.duration}${weekm ? 'm' : ''}`\n : data.duration\n const params = {\n from: format(data.start, dateFormat),\n to: format(data.end, dateFormat),\n time: time,\n }\n dispatch(getStats(userName, data.type, params))\n },\n })\n)(Statistics)\n","import { endOfMonth, startOfMonth } from 'date-fns'\nimport React from 'react'\n\nimport Stats from '../Common/Stats'\n\nexport default class Statistics extends React.Component {\n constructor(props, context) {\n super(props, context)\n const date = new Date()\n this.state = {\n start: startOfMonth(date),\n end: endOfMonth(date),\n duration: 'week',\n type: 'by_time',\n }\n }\n\n render() {\n const { t } = this.props\n return (\n
    \n
    {t('dashboard:This month')}
    \n
    \n \n
    \n
    \n )\n }\n}\n","import React from 'react'\n\nexport default function UserStatistics(props) {\n const { t, user } = props\n const days = user.total_duration.match(/day/g)\n ? `${user.total_duration.split(' ')[0]} ${\n user.total_duration.match(/days/g) ? t('common:days') : t('common:day')\n }`\n : `0 ${t('common:days')},`\n let duration = user.total_duration.match(/day/g)\n ? user.total_duration.split(', ')[1]\n : user.total_duration\n duration = `${duration.split(':')[0]}h ${duration.split(':')[1]}min`\n return (\n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    {user.nb_workouts}
    \n
    {`${\n user.nb_workouts === 1\n ? t('common:workout')\n : t('common:workouts')\n }`}
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n {Number(user.total_distance).toFixed(2)}\n
    \n
    km
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    {days}
    \n
    {duration}
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    {user.nb_sports}
    \n
    {`${\n user.nb_sports === 1 ? t('common:sport') : t('common:sports')\n }`}
    \n
    \n
    \n
    \n
    \n
    \n )\n}\n","import { format } from 'date-fns'\nimport React from 'react'\nimport { Link } from 'react-router-dom'\n\nimport StaticMap from '../Common/StaticMap'\nimport { getDateWithTZ } from '../../utils'\n\nexport default function WorkoutCard(props) {\n const { sports, t, user, workout } = props\n\n return (\n
    \n
    \n \n {sports\n .filter(sport => sport.id === workout.sport_id)\n .map(sport => t(`sports:${sport.label}`))}{' '}\n -{' '}\n {format(\n getDateWithTZ(workout.workout_date, user.timezone),\n 'dd/MM/yyyy HH:mm'\n )}\n \n
    \n
    \n
    \n {workout.map && (\n
    \n \n
    \n )}\n
    \n

    \n {' '}\n {t('workouts:Duration')}: {workout.moving}\n {workout.map ? (\n \n
    \n
    \n
    \n ) : (\n ' - '\n )}\n {' '}\n {t('workouts:Distance')}: {workout.distance} km\n

    \n
    \n
    \n
    \n
    \n )\n}\n","import React from 'react'\nimport { Helmet } from 'react-helmet'\nimport { withTranslation } from 'react-i18next'\nimport { connect } from 'react-redux'\n\nimport Calendar from './Calendar'\nimport Message from '../Common/Message'\nimport NoWorkouts from '../Common/NoWorkouts'\nimport Records from './Records'\nimport Statistics from './Statistics'\nimport UserStatistics from './UserStatistics'\nimport WorkoutCard from './WorkoutCard'\nimport { getOrUpdateData } from '../../actions'\nimport { getMoreWorkouts } from '../../actions/workouts'\n\nclass DashBoard extends React.Component {\n constructor(props, context) {\n super(props, context)\n this.state = {\n page: 1,\n }\n }\n\n componentDidMount() {\n this.props.loadWorkouts()\n }\n\n render() {\n const {\n loadMoreWorkouts,\n message,\n records,\n sports,\n t,\n user,\n workouts,\n } = this.props\n const paginationEnd =\n workouts.length > 0\n ? workouts[workouts.length - 1].previous_workout === null\n : true\n const { page } = this.state\n return (\n
    \n \n FitTrackee - {t('common:Dashboard')}\n \n {message ? (\n \n ) : (\n workouts &&\n user.total_duration &&\n sports.length > 0 && (\n
    \n \n
    \n
    \n \n \n
    \n
    \n \n {workouts.length > 0 ? (\n workouts.map(workout => (\n \n ))\n ) : (\n \n )}\n {!paginationEnd && (\n {\n loadMoreWorkouts(page + 1)\n this.setState({ page: page + 1 })\n }}\n />\n )}\n
    \n
    \n
    \n )\n )}\n
    \n )\n }\n}\n\nexport default withTranslation()(\n connect(\n state => ({\n workouts: state.workouts.data,\n message: state.message,\n records: state.records.data,\n sports: state.sports.data,\n user: state.user,\n }),\n dispatch => ({\n loadWorkouts: () => {\n dispatch(getOrUpdateData('getData', 'workouts', { page: 1 }))\n dispatch(getOrUpdateData('getData', 'records'))\n },\n loadMoreWorkouts: page => {\n dispatch(getMoreWorkouts({ page }))\n },\n })\n )(DashBoard)\n)\n","import React from 'react'\n\nimport { version } from './../../utils'\n\nexport default function Footer() {\n return (\n
    \n
    \n FitTrackee v{version} -{' '}\n \n source code\n {' '}\n under{' '}\n \n GPLv3\n {' '}\n license -{' '}\n \n documentation\n \n
    \n
    \n )\n}\n","var _path, _path2, _path3, _path4, _path5, _path6, _path7, _path8, _g, _path9, _path10, _path11, _path12;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgEn(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, [\"title\", \"titleId\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n id: \"Capa_1\",\n enableBackground: \"new 0 0 512 512\",\n height: 512,\n viewBox: \"0 0 512 512\",\n width: 512,\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"m466.916 27.803h-421.832c-24.859 0-45.084 20.225-45.084 45.084v366.226c0 24.859 20.225 45.084 45.084 45.084h421.832c24.859 0 45.084-20.225 45.084-45.084v-366.226c0-24.859-20.225-45.084-45.084-45.084z\",\n fill: \"#f0f9ff\"\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"m198.58 188.334-181.344-150.862c-7.75 6.107-13.456 14.691-15.905 24.554l164.142 136.551h33.102z\",\n fill: \"#f40055\"\n })), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"m313.425 198.576h33.93l163.447-135.973c-2.325-9.923-7.93-18.592-15.613-24.796l-181.764 151.211z\",\n fill: \"#c20044\"\n })), _path4 || (_path4 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"m165.472 313.425-164.141 136.549c2.449 9.863 8.155 18.447 15.905 24.553l181.344-150.861-.005-10.241z\",\n fill: \"#f40055\"\n })), _path5 || (_path5 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"m313.425 313.425v9.557l181.765 151.211c7.683-6.204 13.288-14.874 15.613-24.796l-163.446-135.971z\",\n fill: \"#c20044\"\n })), _path6 || (_path6 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"m53.273 27.803 145.302 120.879v-120.879z\",\n fill: \"#406bd4\"\n })), _path7 || (_path7 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"m313.425 150.571v-122.768h148.082z\",\n fill: \"#3257b0\"\n })), _path8 || (_path8 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"m394.732 198.575 117.268-97.556v97.556z\",\n fill: \"#3257b0\"\n })), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n fill: \"#406bd4\"\n }, /*#__PURE__*/React.createElement(\"path\", {\n d: \"m0 99.317v99.258h119.313z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"m0 313.425v97.699l117.44-97.699z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"m50.49 484.197 148.085-122.676v122.676z\"\n }))), _path9 || (_path9 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"m313.425 484.197v-124.139l149.221 124.139z\",\n fill: \"#3257b0\"\n })), _path10 || (_path10 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"m512 409.423-115.395-95.998h115.395z\",\n fill: \"#3257b0\"\n })), _path11 || (_path11 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"m512 222.142h-222.142v-194.339h-67.716v194.339h-222.142v67.716h222.142v194.339h67.716v-194.339h222.142z\",\n fill: \"#f40055\"\n })), _path12 || (_path12 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"m289.858 222.142v-194.339h-33.858v456.394h33.858v-194.339h222.142v-67.716z\",\n fill: \"#c20044\"\n })));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgEn);\nexport default __webpack_public_path__ + \"static/media/en.9e6dbfb0.svg\";\nexport { ForwardRef as ReactComponent };","import React from 'react'\nimport { Trans } from 'react-i18next'\nimport { connect } from 'react-redux'\nimport { Link } from 'react-router-dom'\n\nimport { logout } from '../../actions/user'\n\nclass Logout extends React.Component {\n componentDidMount() {\n this.props.UserLogout()\n }\n render() {\n return (\n
    \n
    \n
    \n
    \n
    \n
    \n \n You are now logged out. Click here to\n log back in.\n \n
    \n
    \n
    \n
    \n
    \n
    \n )\n }\n}\n\nexport default connect(\n state => ({\n user: state.user,\n }),\n dispatch => ({\n UserLogout: () => {\n dispatch(logout())\n },\n })\n)(Logout)\n","var _path, _path2, _path3, _path4;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgFr(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, [\"title\", \"titleId\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n id: \"Capa_1\",\n enableBackground: \"new 0 0 512 512\",\n height: 512,\n viewBox: \"0 0 512 512\",\n width: 512,\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"m173.899 31.804h-8.707l-4.397-4h-115.711c-24.859-.001-45.084 20.224-45.084 45.083v366.226c0 24.859 20.225 45.084 45.084 45.084h115.711l6.348-4h6.755v-448.393z\",\n fill: \"#406bd4\"\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"m466.916 27.803h-115.711l-4.523 4h-5.141v448.393h4.141l5.523 4h115.711c24.859 0 45.084-20.225 45.084-45.084v-366.225c0-24.859-20.225-45.084-45.084-45.084z\",\n fill: \"#c20044\"\n })), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"m160.795 27.803h190.409v456.394h-190.409z\",\n fill: \"#f0f9ff\"\n })), _path4 || (_path4 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"m256 27.803h95.205v456.394h-95.205z\",\n fill: \"#cee5f5\"\n })));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgFr);\nexport default __webpack_public_path__ + \"static/media/fr.d0f9280c.svg\";\nexport { ForwardRef as ReactComponent };","var _g, _g2, _g3, _g4, _g5, _g6, _g7;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgPassword(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, [\"title\", \"titleId\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n id: \"Layer_1\",\n xmlns: \"http://www.w3.org/2000/svg\",\n xmlnsXlink: \"http://www.w3.org/1999/xlink\",\n x: \"0px\",\n y: \"0px\",\n viewBox: \"0 0 512.001 512.001\",\n style: {\n enableBackground: \"new 0 0 512.001 512.001\"\n },\n xmlSpace: \"preserve\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _g || (_g = /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M468.683,287.265h-69.07c-4.147,0-7.508,3.361-7.508,7.508c0,4.147,3.361,7.508,7.508,7.508h69.07 c4.147,0,7.508-3.361,7.508-7.508C476.191,290.626,472.83,287.265,468.683,287.265z\"\n })))), _g2 || (_g2 = /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M105.012,268.377L85.781,256l19.231-12.376c3.487-2.243,4.495-6.888,2.251-10.376c-2.244-3.486-6.888-4.497-10.376-2.25 l-17.471,11.243v-20.776c0-4.147-3.361-7.508-7.508-7.508c-4.147,0-7.508,3.361-7.508,7.508v20.775l-17.47-11.243 c-3.486-2.245-8.132-1.238-10.376,2.25c-2.245,3.487-1.237,8.133,2.25,10.376L58.034,256l-19.231,12.376 c-3.487,2.244-4.495,6.889-2.25,10.376c1.435,2.23,3.852,3.446,6.32,3.446c1.391,0,2.799-0.386,4.056-1.196l17.47-11.243v20.775 c0,4.147,3.361,7.508,7.508,7.508c4.147,0,7.508-3.361,7.508-7.508V269.76l17.471,11.243c1.257,0.809,2.664,1.196,4.056,1.196 c2.467,0,4.885-1.216,6.32-3.446C109.507,275.266,108.499,270.62,105.012,268.377z\"\n })))), _g3 || (_g3 = /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M194.441,268.377L175.21,256l19.231-12.376c3.487-2.244,4.495-6.889,2.25-10.376c-2.245-3.486-6.888-4.497-10.376-2.25 l-17.47,11.243v-20.775c0-4.147-3.361-7.508-7.508-7.508c-4.147,0-7.508,3.361-7.508,7.508v20.776l-17.471-11.243 c-3.487-2.245-8.133-1.238-10.376,2.25c-2.245,3.487-1.237,8.133,2.25,10.376L147.463,256l-19.231,12.376 c-3.487,2.244-4.495,6.889-2.25,10.376c1.435,2.23,3.852,3.446,6.32,3.446c1.391,0,2.799-0.386,4.056-1.196l17.471-11.243v20.776 c0,4.147,3.361,7.508,7.508,7.508c4.147,0,7.508-3.361,7.508-7.508V269.76l17.47,11.243c1.257,0.809,2.664,1.196,4.056,1.196 c2.467,0,4.885-1.216,6.32-3.446C198.936,275.266,197.928,270.62,194.441,268.377z\"\n })))), _g4 || (_g4 = /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M283.871,268.377L264.64,256l19.231-12.376c3.487-2.243,4.495-6.888,2.251-10.376c-2.245-3.486-6.888-4.497-10.376-2.25 l-17.471,11.243v-20.775c0-4.147-3.361-7.508-7.508-7.508c-4.147,0-7.508,3.361-7.508,7.508v20.775l-17.471-11.243 c-3.486-2.245-8.134-1.238-10.376,2.25c-2.245,3.487-1.237,8.133,2.25,10.376L236.892,256l-19.231,12.376 c-3.487,2.244-4.495,6.889-2.25,10.376c1.435,2.23,3.852,3.446,6.32,3.446c1.391,0,2.799-0.386,4.056-1.196l17.471-11.243v20.775 c0,4.147,3.361,7.508,7.508,7.508c4.147,0,7.508-3.361,7.508-7.508V269.76l17.471,11.243c1.257,0.809,2.664,1.196,4.056,1.196 c2.467,0,4.886-1.216,6.32-3.446C288.366,275.266,287.358,270.62,283.871,268.377z\"\n })))), _g5 || (_g5 = /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M373.3,268.377L354.069,256l19.231-12.376c3.487-2.244,4.495-6.889,2.25-10.376c-2.244-3.486-6.888-4.497-10.376-2.25 l-17.471,11.243v-20.776c0-4.147-3.361-7.508-7.508-7.508c-4.147,0-7.508,3.361-7.508,7.508v20.775l-17.47-11.243 c-3.486-2.245-8.132-1.238-10.376,2.25c-2.245,3.487-1.237,8.133,2.25,10.376L326.322,256l-19.231,12.376 c-3.487,2.244-4.495,6.889-2.25,10.376c1.435,2.23,3.852,3.446,6.32,3.446c1.391,0,2.799-0.386,4.056-1.196l17.47-11.243v20.776 c0,4.147,3.361,7.508,7.508,7.508c4.147,0,7.508-3.361,7.508-7.508V269.76l17.471,11.243c1.257,0.809,2.664,1.196,4.056,1.196 c2.467,0,4.885-1.216,6.32-3.446C377.795,275.266,376.787,270.62,373.3,268.377z\"\n })))), _g6 || (_g6 = /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M271.792,330.359H15.016V181.642h93.1c4.147,0,7.508-3.361,7.508-7.508c0-4.147-3.361-7.508-7.508-7.508H12.513 C5.613,166.626,0,172.24,0,179.14v153.722c0,6.9,5.613,12.513,12.513,12.513h259.278c4.147,0,7.508-3.361,7.508-7.508 C279.299,333.72,275.939,330.359,271.792,330.359z\"\n })))), _g7 || (_g7 = /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M499.487,166.626H162.174c-4.147,0-7.508,3.361-7.508,7.508c0,4.147,3.361,7.508,7.508,7.508h334.811v148.716H323.848 c-4.147,0-7.508,3.361-7.508,7.508c0,4.147,3.361,7.508,7.508,7.508h175.64c6.9,0,12.513-5.613,12.513-12.513V179.14 C512.001,172.24,506.387,166.626,499.487,166.626z\"\n })))));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgPassword);\nexport default __webpack_public_path__ + \"static/media/password.afe6a2a5.svg\";\nexport { ForwardRef as ReactComponent };","import React, { Component } from 'react'\nimport { connect } from 'react-redux'\n\nimport { ReactComponent as EnFlag } from '../../images/flags/en.svg'\nimport { ReactComponent as FrFlag } from '../../images/flags/fr.svg'\nimport { updateLanguage } from '../../actions/index'\n\nexport const languages = [\n {\n name: 'en',\n selected: true,\n flag: ,\n },\n {\n name: 'fr',\n selected: false,\n flag: ,\n },\n]\n\nclass Dropdown extends Component {\n constructor(props) {\n super(props)\n this.state = {\n isOpen: false,\n }\n }\n\n toggleDropdown() {\n this.setState(prevState => ({\n isOpen: !prevState.isOpen,\n }))\n }\n\n render() {\n const { isOpen } = this.state\n const { language: selected, onUpdateLanguage } = this.props\n return (\n
    this.toggleDropdown()}>\n
      \n {languages\n .filter(language =>\n isOpen ? language : language.name === selected\n )\n .map(language => (\n onUpdateLanguage(language.name, selected)}\n >\n {language.flag} {language.name}\n \n ))}\n
    \n
    \n )\n }\n}\n\nexport default connect(\n state => ({\n language: state.language,\n }),\n dispatch => ({\n onUpdateLanguage: (lang, selected) => {\n if (lang !== selected) {\n dispatch(updateLanguage(lang))\n }\n },\n })\n)(Dropdown)\n","import React from 'react'\nimport { connect } from 'react-redux'\nimport { withTranslation } from 'react-i18next'\nimport { Link } from 'react-router-dom'\n\nimport LanguageDropdown from './LanguageDropdown'\nimport { apiUrl } from '../../utils'\n\nclass NavBar extends React.PureComponent {\n render() {\n const { admin, isAuthenticated, picture, t, username } = this.props\n return (\n
    \n
\n \n \n \n \n )\n }\n}\n\nexport default withTranslation()(\n connect(({ user }) => ({\n admin: user.admin,\n isAuthenticated: user.isAuthenticated,\n picture: user.picture,\n username: user.username,\n }))(NavBar)\n)\n","var _g;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgMailSend(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, [\"title\", \"titleId\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n id: \"Capa_1\",\n xmlns: \"http://www.w3.org/2000/svg\",\n xmlnsXlink: \"http://www.w3.org/1999/xlink\",\n x: \"0px\",\n y: \"0px\",\n viewBox: \"0 0 345.834 345.834\",\n style: {\n enableBackground: \"new 0 0 345.834 345.834\"\n },\n xmlSpace: \"preserve\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _g || (_g = /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M339.798,260.429c0.13-0.026,0.257-0.061,0.385-0.094c0.109-0.028,0.219-0.051,0.326-0.084 c0.125-0.038,0.247-0.085,0.369-0.129c0.108-0.039,0.217-0.074,0.324-0.119c0.115-0.048,0.226-0.104,0.338-0.157 c0.109-0.052,0.22-0.1,0.327-0.158c0.107-0.057,0.208-0.122,0.312-0.184c0.107-0.064,0.215-0.124,0.319-0.194 c0.111-0.074,0.214-0.156,0.321-0.236c0.09-0.067,0.182-0.13,0.27-0.202c0.162-0.133,0.316-0.275,0.466-0.421 c0.027-0.026,0.056-0.048,0.083-0.075c0.028-0.028,0.052-0.059,0.079-0.088c0.144-0.148,0.284-0.3,0.416-0.46 c0.077-0.094,0.144-0.192,0.216-0.289c0.074-0.1,0.152-0.197,0.221-0.301c0.074-0.111,0.139-0.226,0.207-0.34 c0.057-0.096,0.118-0.19,0.171-0.289c0.062-0.115,0.114-0.234,0.169-0.351c0.049-0.104,0.101-0.207,0.146-0.314 c0.048-0.115,0.086-0.232,0.128-0.349c0.041-0.114,0.085-0.227,0.12-0.343c0.036-0.118,0.062-0.238,0.092-0.358 c0.029-0.118,0.063-0.234,0.086-0.353c0.028-0.141,0.045-0.283,0.065-0.425c0.014-0.1,0.033-0.199,0.043-0.3 c0.025-0.249,0.038-0.498,0.038-0.748V92.76c0-4.143-3.357-7.5-7.5-7.5h-236.25c-0.066,0-0.13,0.008-0.196,0.01 c-0.143,0.004-0.285,0.01-0.427,0.022c-0.113,0.009-0.225,0.022-0.337,0.037c-0.128,0.016-0.255,0.035-0.382,0.058 c-0.119,0.021-0.237,0.046-0.354,0.073c-0.119,0.028-0.238,0.058-0.356,0.092c-0.117,0.033-0.232,0.069-0.346,0.107 c-0.117,0.04-0.234,0.082-0.349,0.128c-0.109,0.043-0.216,0.087-0.322,0.135c-0.118,0.053-0.235,0.11-0.351,0.169 c-0.099,0.051-0.196,0.103-0.292,0.158c-0.116,0.066-0.23,0.136-0.343,0.208c-0.093,0.06-0.184,0.122-0.274,0.185 c-0.106,0.075-0.211,0.153-0.314,0.235c-0.094,0.075-0.186,0.152-0.277,0.231c-0.09,0.079-0.179,0.158-0.266,0.242 c-0.099,0.095-0.194,0.194-0.288,0.294c-0.047,0.05-0.097,0.094-0.142,0.145c-0.027,0.03-0.048,0.063-0.074,0.093 c-0.094,0.109-0.182,0.223-0.27,0.338c-0.064,0.084-0.13,0.168-0.19,0.254c-0.078,0.112-0.15,0.227-0.222,0.343 c-0.059,0.095-0.12,0.189-0.174,0.286c-0.063,0.112-0.118,0.227-0.175,0.342c-0.052,0.105-0.106,0.21-0.153,0.317 c-0.049,0.113-0.092,0.23-0.135,0.345c-0.043,0.113-0.087,0.225-0.124,0.339c-0.037,0.115-0.067,0.232-0.099,0.349 c-0.032,0.12-0.066,0.239-0.093,0.36c-0.025,0.113-0.042,0.228-0.062,0.342c-0.022,0.13-0.044,0.26-0.06,0.39 c-0.013,0.108-0.019,0.218-0.027,0.328c-0.01,0.14-0.019,0.28-0.021,0.421c-0.001,0.041-0.006,0.081-0.006,0.122v46.252 c0,4.143,3.357,7.5,7.5,7.5s7.5-3.357,7.5-7.5v-29.595l66.681,59.037c-0.348,0.245-0.683,0.516-0.995,0.827l-65.687,65.687v-49.288 c0-4.143-3.357-7.5-7.5-7.5s-7.5,3.357-7.5,7.5v9.164h-38.75c-4.143,0-7.5,3.357-7.5,7.5s3.357,7.5,7.5,7.5h38.75v43.231 c0,4.143,3.357,7.5,7.5,7.5h236.25c0.247,0,0.494-0.013,0.74-0.037c0.115-0.011,0.226-0.033,0.339-0.049 C339.542,260.469,339.67,260.454,339.798,260.429z M330.834,234.967l-65.688-65.687c-0.042-0.042-0.087-0.077-0.13-0.117 l49.383-41.897c3.158-2.68,3.546-7.412,0.866-10.571c-2.678-3.157-7.41-3.547-10.571-0.866l-84.381,71.59l-98.444-87.158h208.965 V234.967z M185.878,179.888c0.535-0.535,0.969-1.131,1.308-1.765l28.051,24.835c1.418,1.255,3.194,1.885,4.972,1.885 c1.726,0,3.451-0.593,4.853-1.781l28.587-24.254c0.26,0.38,0.553,0.743,0.89,1.08l65.687,65.687H120.191L185.878,179.888z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M7.5,170.676h126.667c4.143,0,7.5-3.357,7.5-7.5s-3.357-7.5-7.5-7.5H7.5c-4.143,0-7.5,3.357-7.5,7.5 S3.357,170.676,7.5,170.676z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M20.625,129.345H77.5c4.143,0,7.5-3.357,7.5-7.5s-3.357-7.5-7.5-7.5H20.625c-4.143,0-7.5,3.357-7.5,7.5 S16.482,129.345,20.625,129.345z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M62.5,226.51h-55c-4.143,0-7.5,3.357-7.5,7.5s3.357,7.5,7.5,7.5h55c4.143,0,7.5-3.357,7.5-7.5S66.643,226.51,62.5,226.51z\"\n }))));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgMailSend);\nexport default __webpack_public_path__ + \"static/media/mail-send.619079f0.svg\";\nexport { ForwardRef as ReactComponent };","import React from 'react'\nimport { Trans, useTranslation } from 'react-i18next'\nimport { Link } from 'react-router-dom'\n\nimport { ReactComponent as Password } from '../../images/password.svg'\nimport { ReactComponent as MailSend } from '../../images/mail-send.svg'\n\nexport default function PasswordReset(props) {\n const { t } = useTranslation()\n const { action } = props\n return (\n
\n
\n
\n
\n
\n
\n {action === 'sent' && (\n <>\n
\n \n
\n {t(\n // eslint-disable-next-line max-len\n \"user:Check your email. If your address is in our database, you'll received an email with a link to reset your password.\"\n )}\n \n )}\n {action === 'updated' && (\n <>\n
\n \n
\n \n {/* prettier-ignore */}\n Your password have been updated. Click\n here to log in.\n \n \n )}\n
\n
\n
\n
\n
\n
\n )\n}\n","import { format } from 'date-fns'\nimport React from 'react'\nimport { Helmet } from 'react-helmet'\nimport { withTranslation } from 'react-i18next'\nimport { connect } from 'react-redux'\nimport TimezonePicker from 'react-timezone'\n\nimport Message from '../Common/Message'\nimport { deleteUser, handleProfileFormSubmit } from '../../actions/user'\nimport { history } from '../../index'\nimport { languages } from '../NavBar/LanguageDropdown'\nimport CustomModal from '../Common/CustomModal'\n\nclass ProfileEdit extends React.Component {\n constructor(props, context) {\n super(props, context)\n this.state = {\n formData: {},\n displayModal: false,\n }\n }\n\n componentDidMount() {\n this.initForm()\n }\n\n componentDidUpdate(prevProps) {\n if (prevProps.user !== this.props.user) {\n this.initForm()\n }\n }\n\n initForm() {\n const { user } = this.props\n const formData = {}\n Object.keys(user).map(k =>\n user[k] === null\n ? (formData[k] = '')\n : k === 'birth_date'\n ? (formData[k] = format(new Date(user[k]), 'yyyy-MM-DD'))\n : (formData[k] = user[k])\n )\n this.setState({ formData })\n }\n\n handleFormChange(e) {\n const { formData } = this.state\n if (e.target.name === 'weekm') {\n formData.weekm = e.target.value === 'Monday'\n } else {\n formData[e.target.name] = e.target.value\n }\n this.setState(formData)\n }\n\n displayModal(value) {\n this.setState(prevState => ({\n ...prevState,\n displayModal: value,\n }))\n }\n\n render() {\n const {\n message,\n onDeleteUser,\n onHandleProfileFormSubmit,\n t,\n user,\n } = this.props\n const { displayModal, formData } = this.state\n return (\n
\n \n FitTrackee - {t('user:Profile Edition')}\n \n {formData.isAuthenticated && (\n
\n {displayModal && (\n {\n onDeleteUser(user.username)\n this.displayModal(false)\n }}\n close={() => this.displayModal(false)}\n />\n )}\n

{t('user:Profile Edition')}

\n
\n
\n
\n
\n
{user.username}
\n
\n
\n
\n {\n event.preventDefault()\n onHandleProfileFormSubmit(formData)\n }}\n >\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n \n {\n event.preventDefault()\n this.displayModal(true)\n }}\n >\n {t('user:Delete my account')}\n \n history.push('/profile')}\n >\n {t('common:Cancel')}\n \n \n \n
\n
\n
\n
\n
\n
\n
\n
\n )}\n
\n )\n }\n}\n\nexport default withTranslation()(\n connect(\n state => ({\n location: state.router.location,\n message: state.message,\n user: state.user,\n }),\n dispatch => ({\n onDeleteUser: username => {\n dispatch(deleteUser(username))\n },\n onHandleProfileFormSubmit: formData => {\n dispatch(handleProfileFormSubmit(formData))\n },\n })\n )(ProfileEdit)\n)\n","import {\n endOfMonth,\n endOfWeek,\n endOfYear,\n startOfMonth,\n startOfYear,\n startOfWeek,\n addMonths,\n addWeeks,\n addYears,\n subMonths,\n subWeeks,\n subYears,\n} from 'date-fns'\nimport React from 'react'\nimport { Helmet } from 'react-helmet'\nimport { withTranslation } from 'react-i18next'\nimport { connect } from 'react-redux'\n\nimport NoWorkouts from '../Common/NoWorkouts'\nimport Stats from '../Common/Stats'\nimport { workoutColors, translateSports } from '../../utils/workouts'\n\nconst durations = ['week', 'month', 'year']\n\nclass Statistics extends React.Component {\n constructor(props, context) {\n super(props, context)\n const date = new Date()\n this.state = {\n displayedSports: props.sports.map(sport => sport.id),\n statsParams: {\n start: startOfMonth(subMonths(date, 11)),\n end: endOfMonth(date),\n duration: 'month',\n type: 'by_time',\n },\n }\n }\n\n componentDidUpdate(prevProps) {\n if (this.props.sports !== prevProps.sports) {\n this.updateDisplayedSports()\n }\n }\n\n updateDisplayedSports() {\n const { sports } = this.props\n this.setState({ displayedSports: sports.map(sport => sport.id) })\n }\n\n handleOnChangeDuration(e) {\n const duration = e.target.name\n\n const date = new Date()\n const start =\n duration === 'year'\n ? startOfYear(subYears(date, 9))\n : duration === 'week'\n ? startOfMonth(subMonths(date, 2))\n : startOfMonth(subMonths(date, 11))\n const end =\n duration === 'year'\n ? endOfYear(date)\n : duration === 'week'\n ? endOfWeek(date)\n : endOfMonth(date)\n this.setState({ statsParams: { duration, end, start, type: 'by_time' } })\n }\n\n handleOnChangeSports(sportId) {\n const { displayedSports } = this.state\n if (displayedSports.includes(sportId)) {\n this.setState({\n displayedSports: displayedSports.filter(s => s !== sportId),\n })\n } else {\n this.setState({ displayedSports: displayedSports.concat([sportId]) })\n }\n }\n\n handleOnClickArrows(forward) {\n const { start, end, duration } = this.state.statsParams\n let newStart, newEnd\n if (forward) {\n newStart =\n duration === 'year'\n ? startOfYear(subYears(start, 1))\n : duration === 'week'\n ? startOfWeek(subWeeks(start, 1))\n : startOfMonth(subMonths(start, 1))\n newEnd =\n duration === 'year'\n ? endOfYear(subYears(end, 1))\n : duration === 'week'\n ? endOfWeek(subWeeks(end, 1))\n : endOfMonth(subMonths(end, 1))\n } else {\n newStart =\n duration === 'year'\n ? startOfYear(addYears(start, 1))\n : duration === 'week'\n ? startOfWeek(addWeeks(start, 1))\n : startOfMonth(addMonths(start, 1))\n newEnd =\n duration === 'year'\n ? endOfYear(addYears(end, 1))\n : duration === 'week'\n ? endOfWeek(addWeeks(end, 1))\n : endOfMonth(addMonths(end, 1))\n }\n this.setState({\n statsParams: { duration, end: newEnd, start: newStart, type: 'by_time' },\n })\n }\n\n render() {\n const { displayedSports, statsParams } = this.state\n const { sports, t, user } = this.props\n const translatedSports = translateSports(\n sports.filter(sport => user.sports_list.includes(sport.id)),\n t\n )\n return (\n <>\n \n FitTrackee - {t('statistics:Statistics')}\n \n
\n
\n
{t('statistics:Statistics')}
\n \n
\n
\n

\n this.handleOnClickArrows(true)}\n />\n

\n
\n
\n {durations.map(d => (\n
\n \n
\n ))}\n
\n
\n

\n this.handleOnClickArrows(false)}\n />\n

\n
\n
\n \n
\n {translatedSports.map(sport => (\n \n ))}\n
\n
\n
\n {user.nb_workouts === 0 && }\n
\n \n )\n }\n}\n\nexport default withTranslation()(\n connect(state => ({\n sports: state.sports.data,\n user: state.user,\n }))(Statistics)\n)\n","import React from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { Helmet } from 'react-helmet'\nimport { Link } from 'react-router-dom'\n\nimport { history } from '../../index'\n\nexport default function Form(props) {\n const { t } = useTranslation()\n const pageTitle = `user:${props.formType\n .charAt(0)\n .toUpperCase()}${props.formType.slice(1)}`\n return (\n
\n \n FitTrackee - {t(`user:${props.formType}`)}\n \n

{t(pageTitle)}

\n
\n
\n
\n
\n
\n {props.formType === 'register' && !props.isRegistrationAllowed ? (\n
\n
Registration is disabled.
\n
\n history.go(-1)}\n >\n Back\n \n
\n
\n ) : (\n <>\n \n props.handleUserFormSubmit(event, props.formType)\n }\n >\n {props.formType === 'register' && (\n
\n \n
\n )}\n {props.formType !== 'password reset' && (\n
\n \n
\n )}\n {props.formType !== 'reset your password' && (\n <>\n
\n \n
\n {props.formType !== 'login' && (\n
\n \n
\n )}\n \n )}\n \n \n

\n {props.formType === 'login' && (\n \n {t('user:Forgot password?')}\n \n )}\n

\n \n )}\n
\n
\n
\n
\n
\n )\n}\n","import React from 'react'\nimport { withTranslation } from 'react-i18next'\nimport { connect } from 'react-redux'\nimport { Redirect } from 'react-router-dom'\n\nimport Form from './Form'\nimport Message from '../Common/Message'\nimport { handleUserFormSubmit } from '../../actions/user'\nimport { isLoggedIn } from '../../utils'\n\nclass UserForm extends React.Component {\n constructor(props, context) {\n super(props, context)\n this.state = {\n formData: {\n username: '',\n email: '',\n password: '',\n password_conf: '',\n },\n }\n }\n\n componentDidUpdate(prevProps) {\n if (prevProps.location.pathname !== this.props.location.pathname) {\n this.emptyForm()\n }\n }\n\n emptyForm() {\n const { formData } = this.state\n Object.keys(formData).map(k => (formData[k] = ''))\n this.setState(formData)\n }\n\n onHandleFormChange(e) {\n const { formData } = this.state\n formData[e.target.name] = e.target.value\n this.setState(formData)\n }\n\n render() {\n const {\n formType,\n isRegistrationAllowed,\n message,\n messages,\n onHandleUserFormSubmit,\n t,\n } = this.props\n const { formData } = this.state\n const { token } = this.props.location.query\n return (\n
\n {isLoggedIn() || (formType === 'password reset' && !token) ? (\n \n ) : (\n
\n \n this.onHandleFormChange(event)}\n handleUserFormSubmit={event => {\n event.preventDefault()\n if (formType === 'password reset') {\n formData.token = token\n }\n onHandleUserFormSubmit(formData, formType)\n }}\n />\n
\n )}\n
\n )\n }\n}\nexport default withTranslation()(\n connect(\n state => ({\n isRegistrationAllowed: state.application.config.is_registration_enabled,\n location: state.router.location,\n message: state.message,\n messages: state.messages,\n }),\n dispatch => ({\n onHandleUserFormSubmit: (formData, formType) => {\n formType =\n formType === 'password reset'\n ? 'password/update'\n : formType === 'reset your password'\n ? 'password/reset-request'\n : formType\n dispatch(handleUserFormSubmit(formData, formType))\n },\n })\n )(UserForm)\n)\n","import React from 'react'\nimport { withTranslation } from 'react-i18next'\nimport { connect } from 'react-redux'\n\nimport CustomModal from '../Common/CustomModal'\nimport ProfileDetail from './ProfileDetail'\nimport { getOrUpdateData } from '../../actions'\nimport { deleteUser } from '../../actions/user'\n\nclass UserProfile extends React.Component {\n constructor(props, context) {\n super(props, context)\n this.state = {\n displayModal: false,\n }\n }\n\n componentDidMount() {\n this.props.loadUser(this.props.match.params.userName)\n }\n\n componentDidUpdate(prevProps) {\n if (prevProps.match.params.userName !== this.props.match.params.userName) {\n this.props.loadUser(this.props.match.params.userName)\n }\n }\n\n displayModal(value) {\n this.setState(prevState => ({\n ...prevState,\n displayModal: value,\n }))\n }\n\n render() {\n const { t, currentUser, onDeleteUser, users } = this.props\n const { displayModal } = this.state\n const [user] = users\n const editable = user ? currentUser.username === user.username : false\n return (\n
\n {displayModal && (\n {\n onDeleteUser(user.username)\n this.displayModal(false)\n }}\n close={() => this.displayModal(false)}\n />\n )}\n {user && (\n this.displayModal(e)}\n t={t}\n user={user}\n />\n )}\n
\n )\n }\n}\n\nexport default withTranslation()(\n connect(\n state => ({\n currentUser: state.user,\n users: state.users.data,\n }),\n dispatch => ({\n onDeleteUser: username => {\n dispatch(deleteUser(username, true))\n },\n loadUser: userName => {\n dispatch(getOrUpdateData('getData', 'users', { username: userName }))\n },\n })\n )(UserProfile)\n)\n","import React from 'react'\nimport { connect } from 'react-redux'\nimport { Route, Switch } from 'react-router-dom'\n\nimport './App.css'\nimport Admin from './Admin'\nimport Workout from './Workout'\nimport Workouts from './Workouts'\nimport CurrentUserProfile from './User/CurrentUserProfile'\nimport Dashboard from './Dashboard'\nimport Footer from './Footer'\nimport Logout from './User/Logout'\nimport NavBar from './NavBar'\nimport NotFound from './Others/NotFound'\nimport PasswordReset from './User/PasswordReset'\nimport ProfileEdit from './User/ProfileEdit'\nimport Statistics from './Statistics'\nimport UserForm from './User/UserForm'\nimport UserProfile from './User/UserProfile'\nimport { getAppData } from '../actions/application'\n\nclass App extends React.Component {\n constructor(props) {\n super(props)\n this.props = props\n }\n componentDidMount() {\n this.props.loadAppConfig()\n }\n\n render() {\n return (\n
\n \n \n \n }\n />\n }\n />\n }\n />\n }\n />\n }\n />\n }\n />\n \n \n \n \n \n \n \n \n \n \n \n
\n
\n )\n }\n}\nexport default connect(\n () => ({}),\n dispatch => ({\n loadAppConfig: () => {\n dispatch(getAppData('config'))\n },\n })\n)(App)\n","import React from 'react'\nimport { Provider } from 'react-redux'\nimport { ConnectedRouter } from 'connected-react-router'\n\nexport default function Root({ store, history, children }) {\n return (\n \n {children}\n \n )\n}\n","// In production, we register a service worker to serve assets from local cache.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on the \"N+1\" visit to a page, since previously\n// cached resources are updated in the background.\n\n// To learn more about the benefits of this model, read https://goo.gl/KwvDNy.\n// This link also includes instructions on opting out of this behavior.\n\nconst isLocalhost = Boolean(\n window.location.hostname === 'localhost' ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === '[::1]' ||\n // 127.0.0.1/8 is considered localhost for IPv4.\n window.location.hostname.match(\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\n )\n)\n\nexport default function register() {\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location)\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets;\n // see https://github.com/facebookincubator/create-react-app/issues/2374\n return\n }\n\n window.addEventListener('load', () => {\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`\n\n if (isLocalhost) {\n // This is running on localhost.\n // Lets check if a service worker still exists or not.\n checkValidServiceWorker(swUrl)\n } else {\n // Is not local host. Just register service worker\n registerValidSW(swUrl)\n }\n })\n }\n}\n\nfunction registerValidSW(swUrl) {\n navigator.serviceWorker\n .register(swUrl)\n .then(registration => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing\n installingWorker.onstatechange = () => {\n if (installingWorker.state === 'installed') {\n if (navigator.serviceWorker.controller) {\n // At this point, the old content will have been purged and\n // the fresh content will have been added to the cache.\n // It's the perfect time to display a \"New content is\n // available; please refresh.\" message in your web app.\n // eslint-disable-next-line no-console\n console.log('New content is available; please refresh.')\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n // eslint-disable-next-line no-console\n console.log('Content is cached for offline use.')\n }\n }\n }\n }\n })\n .catch(error => {\n console.error('Error during service worker registration:', error)\n })\n}\n\nfunction checkValidServiceWorker(swUrl) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl)\n .then(response => {\n // Ensure service worker exists, and that we really are getting a JS file.\n if (\n response.status === 404 ||\n response.headers.get('content-type').indexOf('javascript') === -1\n ) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister().then(() => {\n window.location.reload()\n })\n })\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl)\n }\n })\n .catch(() => {\n // eslint-disable-next-line no-console\n console.log(\n 'No internet connection found. App is running in offline mode.'\n )\n })\n}\n\nexport function unregister() {\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister()\n })\n }\n}\n","const emptyData = {\n data: [],\n}\n\nexport default {\n language: 'en',\n message: '',\n messages: [],\n user: {\n isAuthenticated: false,\n },\n workouts: {\n ...emptyData,\n },\n application: {\n statistics: {},\n config: {\n gpx_limit_import: null,\n is_registration_enabled: null,\n max_single_file_size: null,\n max_users: null,\n max_zip_file_size: null,\n registration: null,\n },\n },\n calendarWorkouts: {\n ...emptyData,\n },\n chartData: [],\n // check if storing gpx content is OK\n gpx: null,\n loading: false,\n records: {\n ...emptyData,\n },\n sports: {\n ...emptyData,\n },\n statistics: {\n data: {},\n },\n users: {\n ...emptyData,\n },\n}\n","const routesWithoutAuthentication = [\n '/login',\n '/register',\n '/password-reset',\n '/password-reset/request',\n '/password-reset/sent',\n '/updated-password',\n]\n\nconst updatePath = (toPath, newPath) => {\n if (typeof toPath === 'string' || toPath instanceof String) {\n toPath = newPath\n } else {\n toPath.pathname = newPath\n }\n return toPath\n}\n\nconst pathInterceptor = toPath => {\n if (\n !window.localStorage.authToken &&\n !routesWithoutAuthentication.includes(toPath.pathname)\n ) {\n toPath = updatePath(toPath, '/login')\n }\n if (\n window.localStorage.authToken &&\n routesWithoutAuthentication.includes(toPath.pathname)\n ) {\n toPath = updatePath(toPath, '/')\n }\n return toPath\n}\n\nexport const historyEnhancer = originalHistory => {\n originalHistory.location = pathInterceptor(originalHistory.location)\n return {\n ...originalHistory,\n push: (path, ...args) =>\n originalHistory.push(pathInterceptor(path), ...args),\n replace: (path, ...args) =>\n originalHistory.replace(pathInterceptor(path), ...args),\n }\n}\n","import { connectRouter } from 'connected-react-router'\nimport { combineReducers } from 'redux'\n\nimport initial from './initial'\n\nconst handleDataAndError = (state, type, action) => {\n if (action.target !== type) {\n return state\n }\n if (action.type === 'SET_DATA') {\n return {\n ...state,\n data: action.data[action.target],\n }\n }\n if (action.type === 'SET_PAGINATED_DATA') {\n return {\n ...state,\n data: action.data[action.target],\n pagination: action.pagination,\n }\n }\n return state\n}\n\nconst workouts = (state = initial.workouts, action) => {\n switch (action.type) {\n case 'LOGOUT':\n return initial.workouts\n case 'PUSH_WORKOUTS':\n return {\n ...state,\n data: state.data.concat(action.workouts),\n }\n case 'REMOVE_WORKOUT':\n return {\n ...state,\n data: state.data.filter(workout => workout.id !== action.workoutId),\n }\n default:\n return handleDataAndError(state, 'workouts', action)\n }\n}\n\nconst application = (state = initial.application, action) => {\n if (action.type === 'SET_APP_CONFIG') {\n return {\n ...state,\n config: action.data,\n }\n }\n if (action.type === 'SET_APP_STATS') {\n return {\n ...state,\n statistics: action.data,\n }\n }\n return state\n}\n\nconst calendarWorkouts = (state = initial.calendarWorkouts, action) => {\n switch (action.type) {\n case 'LOGOUT':\n return initial.calendarWorkouts\n case 'UPDATE_CALENDAR':\n return {\n ...state,\n data: action.workouts,\n }\n default:\n return handleDataAndError(state, 'calendarWorkouts', action)\n }\n}\n\nconst chartData = (state = initial.chartData, action) => {\n if (action.type === 'SET_CHART_DATA') {\n return action.chartData\n }\n return state\n}\n\nconst gpx = (state = initial.gpx, action) => {\n if (action.type === 'SET_GPX') {\n return action.gpxContent\n }\n return state\n}\n\nconst language = (state = initial.language, action) => {\n if (action.type === 'SET_LANGUAGE') {\n return action.language\n }\n return state\n}\n\nconst loading = (state = initial.loading, action) => {\n if (action.type === 'SET_LOADING') {\n return action.loading\n }\n return state\n}\n\nconst message = (state = initial.message, action) => {\n switch (action.type) {\n case 'AUTH_ERROR':\n case 'PROFILE_ERROR':\n case 'PROFILE_UPDATE_ERROR':\n case 'PICTURE_ERROR':\n case 'SET_ERROR':\n return action.message\n case 'CLEAN_ALL_MESSAGES':\n case 'LOGOUT':\n case 'PROFILE_SUCCESS':\n case 'SET_APP_CONFIG':\n case 'SET_RESULTS':\n case '@@router/LOCATION_CHANGE':\n return ''\n default:\n return state\n }\n}\n\nconst messages = (state = initial.messages, action) => {\n switch (action.type) {\n case 'AUTH_ERRORS':\n case 'APP_ERRORS':\n return action.messages\n case 'CLEAN_ALL_MESSAGES':\n case 'LOGOUT':\n case 'PROFILE_SUCCESS':\n case '@@router/LOCATION_CHANGE':\n return []\n default:\n return state\n }\n}\n\nconst records = (state = initial.records, action) => {\n if (action.type === 'LOGOUT') {\n return initial.records\n }\n return handleDataAndError(state, 'records', action)\n}\n\nconst sports = (state = initial.sports, action) => {\n if (action.type === 'UPDATE_SPORT_DATA') {\n return {\n ...state,\n data: state.data.map(sport => {\n if (sport.id === action.data.id) {\n sport.is_active = action.data.is_active\n }\n return sport\n }),\n }\n }\n return handleDataAndError(state, 'sports', action)\n}\n\nconst users = (state = initial.users, action) => {\n if (action.type === 'UPDATE_USER_DATA') {\n return {\n ...state,\n data: state.data.map(user => {\n if (user.username === action.data.username) {\n user.admin = action.data.admin\n }\n return user\n }),\n }\n }\n return handleDataAndError(state, 'users', action)\n}\n\nconst user = (state = initial.user, action) => {\n switch (action.type) {\n case 'AUTH_ERROR':\n case 'PROFILE_ERROR':\n case 'LOGOUT':\n window.localStorage.removeItem('authToken')\n return initial.user\n case 'PROFILE_SUCCESS':\n return action.profil\n default:\n return state\n }\n}\n\nconst statistics = (state = initial.statistics, action) => {\n if (action.type === 'LOGOUT') {\n return initial.statistics\n }\n return handleDataAndError(state, 'statistics', action)\n}\n\nexport default history =>\n combineReducers({\n workouts,\n application,\n calendarWorkouts,\n chartData,\n gpx,\n language,\n loading,\n message,\n messages,\n records,\n router: connectRouter(history),\n sports,\n statistics,\n user,\n users,\n })\n","/* eslint-disable react/jsx-filename-extension */\nimport { createBrowserHistory } from 'history'\nimport React from 'react'\nimport { I18nextProvider } from 'react-i18next'\nimport ReactDOM from 'react-dom'\nimport { routerMiddleware } from 'connected-react-router'\nimport { applyMiddleware, compose, createStore } from 'redux'\nimport thunk from 'redux-thunk'\n\nimport i18n from './i18n'\nimport App from './components/App'\nimport Root from './components/Root'\nimport registerServiceWorker from './registerServiceWorker'\nimport createRootReducer from './reducers'\nimport { loadProfile } from './actions/user'\nimport { historyEnhancer } from './utils/history'\n\nexport const history = historyEnhancer(createBrowserHistory())\n\nhistory.listen(() => {\n window.scrollTo(0, 0)\n})\n\nexport const rootNode = document.getElementById('root')\n\nexport const store = createStore(\n createRootReducer(history),\n window.__STATE__, // Server state\n (window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose)(\n applyMiddleware(routerMiddleware(history), thunk)\n )\n)\n\nif (window.localStorage.authToken !== null) {\n store.dispatch(loadProfile())\n}\n\nReactDOM.render(\n \n \n \n \n ,\n rootNode\n)\nregisterServiceWorker()\n"],"sourceRoot":""} \ No newline at end of file diff --git a/fittrackee_client/package.json b/fittrackee_client/package.json index d2a71d07..c90e104d 100644 --- a/fittrackee_client/package.json +++ b/fittrackee_client/package.json @@ -1,6 +1,6 @@ { "name": "fittrackee_client", - "version": "0.4.6", + "version": "0.4.7", "private": true, "dependencies": { "@mapbox/togeojson": "^0.16.0", diff --git a/fittrackee_client/src/utils/index.js b/fittrackee_client/src/utils/index.js index 45ff0324..c498d33e 100644 --- a/fittrackee_client/src/utils/index.js +++ b/fittrackee_client/src/utils/index.js @@ -17,7 +17,7 @@ export const getFileSizeInMB = fileSize => { return (!fileSize && 0) || +value.toFixed(2) } -export const version = '0.4.6' // version stored in 'utils' for now +export const version = '0.4.7' // version stored in 'utils' for now export const apiUrl = process.env.NODE_ENV === 'production' ? '/api/' diff --git a/pyproject.toml b/pyproject.toml index 917a4095..7e36027d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "fittrackee" -version = "0.4.6" +version = "0.4.7" description = "Self-hosted outdoor workout/activity tracker" authors = ["SamR1"] license = "GPL-3.0"