From 453d13792a4a93096228280150e31e66e6a86cc0 Mon Sep 17 00:00:00 2001 From: Sam Date: Sun, 21 Feb 2021 20:11:26 +0100 Subject: [PATCH] bump version to 0.4.6 --- VERSION | 2 +- docs/.buildinfo | 2 +- docs/_images/fittrackee_screenshot-01.png | Bin 619608 -> 619840 bytes docs/_images/fittrackee_screenshot-02.png | Bin 400517 -> 400752 bytes docs/_images/fittrackee_screenshot-03.png | Bin 211558 -> 211794 bytes docs/_images/fittrackee_screenshot-04.png | Bin 63861 -> 64094 bytes docs/_images/fittrackee_screenshot-05.png | Bin 78250 -> 78486 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 619608 -> 619840 bytes .../_images/fittrackee_screenshot-02.png | Bin 400517 -> 400752 bytes .../_images/fittrackee_screenshot-03.png | Bin 211558 -> 211794 bytes .../_images/fittrackee_screenshot-04.png | Bin 63861 -> 64094 bytes .../_images/fittrackee_screenshot-05.png | Bin 78250 -> 78486 bytes fittrackee/dist/asset-manifest.json | 6 +++--- fittrackee/dist/index.html | 2 +- ...f806db.chunk.js => main.07bf0de8.chunk.js} | 4 ++-- ...hunk.js.map => main.07bf0de8.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.75f806db.chunk.js => main.07bf0de8.chunk.js} (99%) rename fittrackee/dist/static/js/{main.75f806db.chunk.js.map => main.07bf0de8.chunk.js.map} (99%) diff --git a/VERSION b/VERSION index 0bfccb08..ef52a648 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.4.5 +0.4.6 diff --git a/docs/.buildinfo b/docs/.buildinfo index 37a1d704..b1920c48 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: 8e66c2e2aa1f094e011ce6ca8b73c8a3 +config: 921d33c9933121d974ed1f4a335aa18e tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/docs/_images/fittrackee_screenshot-01.png b/docs/_images/fittrackee_screenshot-01.png index b2133d9bb473535ec35ea5fd7f00cf5c64ef0b19..c90c5364d35c906e3a4852b7426bf6e2070caba0 100644 GIT binary patch delta 27664 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 diff --git a/docs/_images/fittrackee_screenshot-03.png b/docs/_images/fittrackee_screenshot-03.png index 10f053c26df21170fd5d8552e84ca77d794e822b..328faa27c985147324f124f6feac7a9a54c79d96 100644 GIT binary patch delta 12872 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 diff --git a/docs/_images/fittrackee_screenshot-04.png b/docs/_images/fittrackee_screenshot-04.png index 2fd5bb265a3473c0c47cd241efcb0cdc45c0340d..2df02eb32156ae0e84f500769eb4bf08bd4e1da1 100644 GIT binary patch delta 13999 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 T@NqrbU!e9~gFE@RpS=DTNle;o delta 13921 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 JxcltYe*(Gww{rjh diff --git a/docs/_images/fittrackee_screenshot-05.png b/docs/_images/fittrackee_screenshot-05.png index 5503dee9e848c33b7deabf420b15f998ec085f86..97b8b85abedb9338a9183030bce67bf4b7ff9f7b 100644 GIT binary patch delta 11163 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 Pzt6SR_0?)r?BD$lPOp2N delta 11095 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

*{zgFg*43^imug9Z6r%R&NYyTk)h@ zA^&$uN=c^UN*)|p_$sbEVj8nuQpfJdjh2A_GM3!!ZJ^_Cgu(9QE z=PuOZCn$bCU^NQd(pYbj*=uy=95&UI=00gWueE@DdTglxoCCI%I%?m_({-K(;8RVg z2;%QK(>(}-FIfVvBQmvzyywES;L3 zo>{&?sWr3?s<)ac^x^!N8eSfFHWFFE2eFG914xo~Hg;8@6*aIcCj6;oio%A^qb>p0 zt~91bMjvv0-I5guzRf-GDk>!i z91cum;A83PnB?aj!9Dtmq%+?8er2$~=@<3v{I2u9Be=mC#;U6~YcJ*B5_op4<41*s z0{mI}nva2k(hx_KoA(uaDSQs~8J0uuKzz2yQDzC};z z4=qv6EI~@afRn)f`S=|4VuYdR(;3RdnxsicHJ6Icx6EXj?xr>TQk3Rb12C< zF_lV}5Zjy?cv;Ht;85pb&{R=z2mvn#ns7Z@rHEtu?vB=M9PgKt0s#hG4+osia8IpV ze`{l$wODW<8G+X=rT3*41t)zt*O+G{Pl}qk=+rw`i&j}% zGhF76IvC{6+BZ*~pMlIFHfZC;W+>#a**&>U&^S6;-yDYJc(pfQj`o0P^}CqNRJU8K zdO%c20?>phC>7MPFfwv1Ta;a$P<=F0(A<4{rRF{e&Dz>}p}Rf`FIz0VT-0V{MwXBx zX>z9^l4Gu6bbMUj$Oy^=$|z#a@zEL_99(R5ELF>GYE(=FCd<0JBlqU2GHLx!^7VfG zU^tvlts1nv6Aj5&eKpmUO18rL`^}6~r180Dqd_H2=ayUH9ovIcOpj%`Up>E#99?T` z2A}&7kzbjiF)VM^oJK#Jj#@Ox*UBU9JFz|Jw4 zN^oEl4#Fh|Bq}j*X_LZB!{=(6LG|8lwH+(6;RL%)OC|fiu;{e>P0XE_+H@0i^z@)f zRjkTtYIBL|oKpu2^~nJuilrGf#(vhT*pYouax>%7>v@eTqx+V?+iRVG&YSN&5;Tb6 z%UgLxRfWP%Rbi;&vC7m?mw18n>Dq12Uj$FftA-6A7WZPA5DaT~^sXptDbRlCwc>L) z{N2;$z6dh9Jqx}awA60=gy1xN$2R@UJ4SEns}N%>Xl9X7eXy@D&s(n;`sY(QS(lJ{ z1({@Zh{PJ?lz+)j%J{CiVcWHO#iSJ!JKCX3_q49`aFYMcs1s5u;4*F}K~7F16sQ*{ zVFm&Ai!qGu+wcB~r?Gd=Uvg2DKgQ7?U!t63$7QCL;!|~gzIJegk4#Kx-0-VEi^h)C z(9!Wo%_&uPq61}%fSzFzBt=SR@Ua?dm#S&Y$OMJq({U<^0FVCe^X?}6Huc1}h-nVX z-*)#cr<5XAWoXZy>FRF2;&xu@1pVU!V7}Ip^d$|wl8D<|Sx-+-O74$&fB*jFvl`Hl zmy=^*W>#!$Y@~7N(lhb@aW<9}-}ecZXpEesEI(hmwzd{p^?n#$h%f@v=H&3eW*Q91 zkx%q0DYc&}vhw@+SsZ~toSmL(YHKGZBr-dmZLmViDranSs~U6F^^vl+>EHpx$2NzX znBcY9Yb4Ea-h7b>@=wn8Rx3|B8>VU+eJjG$?jO zRIl}>Z%Ej^T=(WMnNi8yMHGOxgS(W(d(bxb9A;<+gGs00`b(EqgP$7N0)QAB5KRe+ zB-hQYkKM|FW?jPv4awEd2In@>S_WUcR29fUG?G#sZ_ye9uA;+VySTVqzDO}MGuwMX zT{*SIukHT1j&!LsHYhmQnkSvl{~9~o^=v1eURm{^=Id8%3OvlvurPqF*1SM1YaodM zdCV^$;L!Uu9=T-p{G{+tjnJ|dlMZ?`@b!HKbid(Z-2>y+uL7+4A^dJtgvX3gpUso4 zd0=IQfLgRrNsw9S;3|0aM~z`Dhn_N|80X}CZ^}1Y%u~zEY=x4~F3x$zTeY$T zl*#1nEl5gEzTX`R;8KcS>b17F508$5lq?f;w6qFTQmdOPdIP^*HoE#L%9kT&CO$qs zw4$OJVM*wX{FxZ&=nlW0;U*E$t?t&fzeT!{2rm7-M~cFYwIk@ji4OB1b(`Edd~ib`s}fAe46*~o{kw9OlSH|tWw<1tD>ajcc+W3YzK#G%QE%t1@@kW zB$NGt!QIuSbrT^hl$;CtTGAXdSXxt4^YTz%S%p!_@9MB|6}0dO86FZ@rX|~Zg(;_~ z$ZoBYh;w#6Tj341-nL>F5ivrRN}V!KnWJMEP~x&$5)u-KLvZAiE%c9{1wUp8913t4 zH|da%bfHy!3K^ELWBS&Y*sceyj;hzEAN?^Chnp)e&O@$u~a_|)R6G!+AM zG`(Yz`5)tv)4_I~db?&@j zmbJ7jL^f)2T3Q*Q#I+RCH%CN8>G=Bx`3D5(>Y2@z*L7*?>K1Pfr!D}rl7TW6SFi+j zUF2fUi2vEsq7pZ5SdY0a4iDdLdnl-H!!oJD)fX)EZ}(kP{78kDP*I`ei65PP#4O$> zYDSefSk`v?TOjvN*)SQ<^RH7W9ZxB%t({ykqoSk~6+4bh9ZH&D?wq|F&tKm*%8In4 z^Wdk{g?+0-MRB$HKcANw2KRvT3p^#77)Qx0H9Ds9#L(&cuXa*;O}iqk(_TeQXC1f; z5?pXu+F|sL3=tivt>@L$bUbg-WjHSQVtnF_EGZTF_VpSd&i%dTuxhNs7k?~kS~%ih zRs~5|8GM6Y^`u-}>gl6ZiZ&UJ4jY@Z5cI|LdRrZja)XzN%&V@Zx7XJLNX^i7R#l9R zh?rV#y;=e;5zaIuH=gG+>`wu?YDnN;T@$NXaMh^joG;Y}{LCXAUklq<&v{h`H;#%p z`W7{g0zA(2V$llZRmQincXs2K4f=DQvGy+N2z*f0ct@YzC^+Y7(;OZE=jRu_Gs&Kv znGrFmZF=?1F^c(2X6!JD2nSULh50o(QOw|)_LGvhJK59_aavaRwM<@ZN4 zUk%Rgybb>K+T5JW*Zb{+ll}dUPu1gD9+GVU1$)1GzCaKEihU}|gVKqQl89JbeJ_{% zxl-zB`YT4y#_pv+cpXM^B$>FUtROq@E4+WhmOd<2VZ zIA6V~QOz~La=&R|=J(fweZ+9}C9Vn;!t2lt#$HG4+*#+RL zD{WCu8{pN4-=%0|+!zjq;qRlM?BJCYJVTiXCG0cR)Uh&tR%6~Jhk=1HXkzK|IN`#6 zl{snG$1zv7+!TFg%(9oRdvneU5oc1AMVM9|h z48aVEgEMQFO}&W2iXT73NJ&Tr9Dqis_c^{oP_V3yxjC55nr*?we`aDLFD`Cw+KX4+ z3W~IZ!>Jsz35;OJ!GvZ;B}Z5ww4tFv?=CediG^{~G2DI|S#U@X;Qeah3g6q?+w*t@ z{y3|*qiYO%jTDi;mNI-#W0SZ2Due@{YVD5K#N?#zO}XPl{+6LPWc>#3$bjTz^MJ$0M^rY})&o~nUESo2j0}+n>X$A`6EOSqHVvP~v2K}r z(%Jg<0*Dv5(I%fE6yuInj8Dqq&7&y+KO?KXTvmkgP;#<<(L?{3T{lOQ{SK*aqtW&B z=Fmv%&UJXR3he3P^88%e&@kQdX=r5T=6rkenC^9C-`@!?MxeZ)puqjujVyA+rr!VI zp3mom2rhi5CaeEZj{X;KLm67z zGpO&Jl#mq!tbUNRA5X4xFm2H(5uOeop6=02NJ?J1VSRX!kIL4fu{XcXmBJ?0n`=IY zjEne!KmZC#_1c=tom7t7eHzcAL3sT%T~y{VbymEa2{R9m$HtB(5)P2%V$$l{x|cg| zespvs;(J!~FJG9M(V-EA=pd7U;pNMf#03?odj35vQ$v9ksf`ZvXZZdwCN0Ugq z(r7cvtPHO;<>cf<`aG3mvkqi07X<)!SLNy^SpkwruP(3H&tg4nlbn=PR#YTs4s^)Z zzOTK6`QFdJr;+qhP2jWWMjy?6`tPV6T>YSu@GmcVL9fuTxH`OKEG#U%*yLP+j4O0L z-_!|!7b@f8h>(1>qVdqx

RUbYHBjTwzsf0qJkFF6<5@? z>5(Sebevm2-}a!*a&fAkI^ZdfI|mBV01&Kwm9RqfMF<;~61 z9k5FC&S%5qPY?`ysa4m9^^U_fExoGSFoll0U6+UJzF3{r-#U|*LkUGo%mh<=H3WMy z7Ug?;RE@X8&)7IBrmg|a)6bs#4j-P(ZasRWNzJQu29w$TT})xTEM)t;=#A0CW}tO$ zD+AKvm}05#*XGvf9JMxq(KqRc^6u~b4XgB!+rO|^g&rMAYr7t5F*uPCI{Nyh@OE#} zkd$Xw_*yPU_SUwxOFa$hbN&VE{jr|6!bfd~OnvfL`@lk~#H7A)?Cx^tu!!GdUDNT{ zR6SRfp0jiCr^2B2TDHyt0>ozMCltYt zjul7@*U?l8opTZ@({2r=_LTsG%4hYYW+1u~PpnbeJ&O9uM-?Z z_hNuUXmzz7a`;{zAY;=CN#t(7b{sD+FJe-$0tusUD`ufXL&`{r8H9}=uX46?JP+vJ zSU;@3nmf`%5@p@EN!{wbf>!uLU18uPub4(S&lnQkhd$Nr6(a7eJz7sSqf8H(VV~Uv z%gc&nl4l#w&O8#^GnEv1&Yh2eQeezc<@ULfmXe`o#Y0WUw}r!(m~75K3;~T~>2Ib; z0$S0EnT~~w&yGN#{WFx#>9hy}l%M>>cg$>pTfOcZw1wFszZ`I<`(%qkr4?O9r5ywmVO3g8e489OZQ+o#o@?xa%5^?(*qF~C) zAtWqpD4L;|M2Uyl*W0@@M`oQZ?ud(ug-6XoNEj=i=;RCW8G^$*W*^N)x7*xp+g5-l z@z%CBsD6zZB`?!1l0WB_rxFQOCsy@cX0^vVnBAQ_g4*x);_rStXaqS|^_#!TsP21O zgkt49mj1(UZV4G={GoP7GDF9iRwk(LG7S?|hbrd9BE1rH-H?37s#Yi@gyZ4Uq(?{R zTlrYAc9|737iHSSvi8y?7fM7uGk6;LtZDjj&Qyjzc_4h}N-~>6P+vQBI0M+Wo1K~4 z-zC>8uN^E%8+iS&OYTlGCkEM1S1jGBId+=50v?fW46<9>s)STmyIeI%@2wB%j{AuH zu1ekLR<*S^kC4l61vft=`!{h7YV>eT#DUzKyy-OvEPs5{w3=D5S z!MA}rqbf=v*Eq=4o^@^vEd@pS={mC=tlD((hi~GKA3tWe-fIS95$;|fy!a^)rRF1( z$cU}+XrCT(_dru;P=!Ny3fswlf4iwYy?MMpyXn;+v6(hkDuh{iwJc#mxaydxCV?dL zj{7-Gao26T@PL1G@^D_r*Ksl=qMNx7ki6Kd$>qwZMm5cPJl@?+^Ro|yFunIBA@!E{F9hEtSU$ynhEqUI2%64#Y*g%Gu z$XcQdoIU~C51M>h+V^g3Z5&P`NZ?O}&7`xuAI@!K=Z?+H!C;mDogIA-0I$N{IM{h6 zsPu_-)rA)FXDldQo8*hF`EhVBXA7`?J9dwr-cMno_?J@r tzc*v(w%y1$!-W*pEcG=hsuS5Gxdj6$x9E3C;eT(=l;qXqs%1U~{SWOOS6l!9 diff --git a/docs/_static/documentation_options.js b/docs/_static/documentation_options.js index ae5a7870..69419592 100644 --- a/docs/_static/documentation_options.js +++ b/docs/_static/documentation_options.js @@ -1,6 +1,6 @@ var DOCUMENTATION_OPTIONS = { URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'), - VERSION: '0.4.5', + VERSION: '0.4.6', LANGUAGE: 'None', COLLAPSE_INDEX: false, BUILDER: 'html', diff --git a/docs/api/auth.html b/docs/api/auth.html index 52106629..937b82b4 100644 --- a/docs/api/auth.html +++ b/docs/api/auth.html @@ -4,7 +4,7 @@ - Authentication — FitTrackee 0.4.5 + <title>Authentication — FitTrackee 0.4.6 documentation @@ -39,7 +39,7 @@ FitTrackee - 0.4.5 + 0.4.6 diff --git a/docs/api/configuration.html b/docs/api/configuration.html index fbf88b14..4c4cdbf8 100644 --- a/docs/api/configuration.html +++ b/docs/api/configuration.html @@ -4,7 +4,7 @@ - Configuration — FitTrackee 0.4.5 + <title>Configuration — FitTrackee 0.4.6 documentation @@ -39,7 +39,7 @@ FitTrackee - 0.4.5 + 0.4.6 diff --git a/docs/api/index.html b/docs/api/index.html index 798bc648..d8264f20 100644 --- a/docs/api/index.html +++ b/docs/api/index.html @@ -4,7 +4,7 @@ - API documentation — FitTrackee 0.4.5 + <title>API documentation — FitTrackee 0.4.6 documentation @@ -39,7 +39,7 @@ FitTrackee - 0.4.5 + 0.4.6 diff --git a/docs/api/records.html b/docs/api/records.html index 047bfcc8..6fa8fe03 100644 --- a/docs/api/records.html +++ b/docs/api/records.html @@ -4,7 +4,7 @@ - Records — FitTrackee 0.4.5 + <title>Records — FitTrackee 0.4.6 documentation @@ -39,7 +39,7 @@ FitTrackee - 0.4.5 + 0.4.6 diff --git a/docs/api/sports.html b/docs/api/sports.html index 57c9094a..2e9b3290 100644 --- a/docs/api/sports.html +++ b/docs/api/sports.html @@ -4,7 +4,7 @@ - Sports — FitTrackee 0.4.5 + <title>Sports — FitTrackee 0.4.6 documentation @@ -39,7 +39,7 @@ FitTrackee - 0.4.5 + 0.4.6 diff --git a/docs/api/stats.html b/docs/api/stats.html index dfdce2b2..3577092e 100644 --- a/docs/api/stats.html +++ b/docs/api/stats.html @@ -4,7 +4,7 @@ - Statistics — FitTrackee 0.4.5 + <title>Statistics — FitTrackee 0.4.6 documentation @@ -39,7 +39,7 @@ FitTrackee - 0.4.5 + 0.4.6 diff --git a/docs/api/users.html b/docs/api/users.html index 965894bb..fbc3ddd7 100644 --- a/docs/api/users.html +++ b/docs/api/users.html @@ -4,7 +4,7 @@ - Users — FitTrackee 0.4.5 + <title>Users — FitTrackee 0.4.6 documentation @@ -39,7 +39,7 @@ FitTrackee - 0.4.5 + 0.4.6 diff --git a/docs/api/workouts.html b/docs/api/workouts.html index 0cca735d..0ac89181 100644 --- a/docs/api/workouts.html +++ b/docs/api/workouts.html @@ -4,7 +4,7 @@ - Workouts — FitTrackee 0.4.5 + <title>Workouts — FitTrackee 0.4.6 documentation @@ -39,7 +39,7 @@ FitTrackee - 0.4.5 + 0.4.6 diff --git a/docs/changelog.html b/docs/changelog.html index ed884662..99bf6553 100644 --- a/docs/changelog.html +++ b/docs/changelog.html @@ -4,7 +4,7 @@ - Change log — FitTrackee 0.4.5 + <title>Change log — FitTrackee 0.4.6 documentation @@ -38,7 +38,7 @@ FitTrackee - 0.4.5 + 0.4.6 diff --git a/docs/features.html b/docs/features.html index a2ac3d82..c274a208 100644 --- a/docs/features.html +++ b/docs/features.html @@ -4,7 +4,7 @@ - Features — FitTrackee 0.4.5 + <title>Features — FitTrackee 0.4.6 documentation @@ -39,7 +39,7 @@ FitTrackee - 0.4.5 + 0.4.6 diff --git a/docs/genindex.html b/docs/genindex.html index 9ef66e1d..ace6e6ea 100644 --- a/docs/genindex.html +++ b/docs/genindex.html @@ -4,7 +4,7 @@ - Index — FitTrackee 0.4.5 + <title>Index — FitTrackee 0.4.6 documentation @@ -37,7 +37,7 @@ FitTrackee - 0.4.5 + 0.4.6 diff --git a/docs/http-routingtable.html b/docs/http-routingtable.html index 8e27ded2..0cece357 100644 --- a/docs/http-routingtable.html +++ b/docs/http-routingtable.html @@ -4,7 +4,7 @@ - HTTP Routing Table — FitTrackee 0.4.5 + <title>HTTP Routing Table — FitTrackee 0.4.6 documentation @@ -44,7 +44,7 @@ FitTrackee - 0.4.5 + 0.4.6 diff --git a/docs/index.html b/docs/index.html index ee0f265a..54ff21e9 100644 --- a/docs/index.html +++ b/docs/index.html @@ -4,7 +4,7 @@ - FitTrackee — FitTrackee 0.4.5 + <title>FitTrackee — FitTrackee 0.4.6 documentation @@ -38,7 +38,7 @@ FitTrackee - 0.4.5 + 0.4.6 diff --git a/docs/installation.html b/docs/installation.html index 627727f8..99ab528b 100644 --- a/docs/installation.html +++ b/docs/installation.html @@ -4,7 +4,7 @@ - Installation — FitTrackee 0.4.5 + <title>Installation — FitTrackee 0.4.6 documentation @@ -39,7 +39,7 @@ FitTrackee - 0.4.5 + 0.4.6 diff --git a/docs/objects.inv b/docs/objects.inv index 5be80c059632ed6042052d877f78bb27325daf3c..5986cc2ee8dd93fe6b4ccce6d91e8fa2790d4fba 100644 GIT binary patch delta 12 Tcmeyv`G<3Y6QkKi=bbD7BFzNF delta 12 Tcmeyv`G<3Y6Qk)y=bbD7BFF^9 diff --git a/docs/search.html b/docs/search.html index 73f5e50d..a1befa29 100644 --- a/docs/search.html +++ b/docs/search.html @@ -4,7 +4,7 @@ - Search — FitTrackee 0.4.5 + <title>Search — FitTrackee 0.4.6 documentation @@ -43,7 +43,7 @@ FitTrackee - 0.4.5 + 0.4.6 diff --git a/docs/troubleshooting/administrator.html b/docs/troubleshooting/administrator.html index 32fd334a..a8c49605 100644 --- a/docs/troubleshooting/administrator.html +++ b/docs/troubleshooting/administrator.html @@ -4,7 +4,7 @@ - Administrator — FitTrackee 0.4.5 + <title>Administrator — FitTrackee 0.4.6 documentation @@ -39,7 +39,7 @@ FitTrackee - 0.4.5 + 0.4.6 diff --git a/docs/troubleshooting/index.html b/docs/troubleshooting/index.html index 162426a3..5f58afdb 100644 --- a/docs/troubleshooting/index.html +++ b/docs/troubleshooting/index.html @@ -4,7 +4,7 @@ - Troubleshooting — FitTrackee 0.4.5 + <title>Troubleshooting — FitTrackee 0.4.6 documentation @@ -39,7 +39,7 @@ FitTrackee - 0.4.5 + 0.4.6 diff --git a/docs/troubleshooting/user.html b/docs/troubleshooting/user.html index 485af3fa..2c3ba026 100644 --- a/docs/troubleshooting/user.html +++ b/docs/troubleshooting/user.html @@ -4,7 +4,7 @@ - User — FitTrackee 0.4.5 + <title>User — FitTrackee 0.4.6 documentation @@ -39,7 +39,7 @@ FitTrackee - 0.4.5 + 0.4.6 diff --git a/docsrc/source/_images/fittrackee_screenshot-01.png b/docsrc/source/_images/fittrackee_screenshot-01.png index b2133d9bb473535ec35ea5fd7f00cf5c64ef0b19..c90c5364d35c906e3a4852b7426bf6e2070caba0 100644 GIT binary patch delta 27664 zcmV)_K!3m3=q14FC6FWm(UBz|e_3)QJ90(;u?j5#qXSqDMl{{D-ezgE!xxX{;)f09-d`C)%u zsDE83#m_Io*9FGsvAp$Ge|>~`KHtAS{|N*CIekg>UHivH{`_~YL~j>fOfjAmlILqo z@w0%W|AI^7{V?>8_<32cB)*39{YV7lZ*lU!tjhhFmG$$@zrFtBr$3UC?DM+gh2Mi| zKfeF<^-%sEeD^~9%bnBue{tvEUJombKOg7&zk7Fc_nyzwjckO}z8>oPQQl9yaT4}Zf6M>J-+#Q&y(;+- zeEY;{DOVw?2w8?Qr?0$=goOKDN96_h`|qEBl-EQC%L{Yk0f(QTOUx3!YD;yLUZN9k zEPVg8MX3Ah0)&Wr7Zwu|8SoZT2^M^fv4%h#8~GVrsKu1yBn6?AxLIY)DH+LWQTOIE zHN5x65dnj1AVN-DXOVx^W=dKs21TQRe00>4pH&9zjk zwYJ*pXsP8^nzh=RYrTygdjcFww_bbey^q072Ui|^dhmuZW}Io}S*Fc8+w5~J%4g+O zmaV#)TYZfkciP~@wq1AIeUB3krF8Ns$4))%^fNA{cGJzbe_Xruw%hOck+tAn+lBw} z_kW+Y@SU~zGNm`xA6et0wSHeB2u_M}M#f?eWV|W^6m(S1dKjkfcXU-{g{~wuiO5HzX?tkX(FIn4yyXBL68B!Z6 zs6Nqtw|1Vne}gu)oXtW~hVOFoXAq9gdSVhAmU#mY0_WtiuIp#|R+ci>L8RMu46|5Z zZN3J6o988__uL4T(Mz-MRc)-CtF4~$NbAP7$y#W34|$8Zo|O0Hy_Z#4`}q?+to%@s ztDL*~C^e-6dY0DKxOK1Wj*ZyC;nwI@QhD7HdI=@in`PowqU3#b5IO2_^D$Jg)u9z=tP(npzAqPSq8(5~LG z?hTg1e>m$Bk#habo9xyW9nIA`i@ce9!&H#}EBkeAOrpB#=qrt~`zrMc^vWh>Bi8O! z^>cQvbek)s|2b|p%Vj!8@F;gG0H)Gb9)RLG(@12La{wd2(?rQH;(V#cb- zoEx^9)ehA6rkmFx%9wN3eu!|dje_e&fCC|_w)f$ggOSe(WGBE4Jm2PeEQ2u7fyefU zX#!W^!Yw{gj*F55i>P3KZC$tl)VT>Az))pME$lKX}R^BM*ReV5?B z#g%It)6v2N5ctcwaN{vMi_Tm)DPW))*GrP5kmPB79Kf9LozM;CdgI`ZelILUznyN~ zhcX(hy=f4^uiaq{2^AO?46LAQQBd04d6HJG3?J+ z{2mI*0*0Y65>Knxo2zE)#t$ngVE1bDEyvs$jv zuBQvr5vy_MI66RH!pH;=0Iv;|F-n;zY@h|Eu|1^?Q=@$BA`YCdw~I)re_+a4U(f`Z zoZNx908W>I=mw{^qmGq_6ES6dLF|wXg&?{zs{|Tt*7Hd-*ui{87z7qrL@ac%H4u zJ2gCxfd1#BjB}4V>%rYYTe@K}S+)AyAXxxUJ|w zarl$?6UilpC4AwwSxbjo6wDOLSZg#`tI($n662}3Ypoq!*p=(sU1;;3-G;(k2JnqQ z09}O%#{1$S3FK=ne`F2WBoCzZ-V(q5NnW=e({UN#vhqB%UMTrIbwW!PN(rQ!sSpDO)>u=31a~7|bt0+)av{EA#cZ@bOJ9>%U0Te*woP`I!j1K)txFsL@6gD-Dg1NgMSb*D6v+Kgu8u>=bAsbX5aqdK+${ z$+q>0p^X(QI)ZpMP!y}=drWWyOwS`lVmm1YU>2Vs$WNc@`)h#y1AzyEy-mbnG1X2T zJU{uQGGZlWcPKpE>2!@0Hg>)7*fehhN}FU2@_jsje|0~L{P!BaL;z5O4WGDTx%zIB zwun30j!<66ZXtna$lwCM;AQDND*g2S{lfd_OvoeIy)Qt0c#1s)Usy6S%x{^VQ9#I( zR2bJ_T9l474U%K=RmHO-#%~}2m8r_Di6X)TIG7nR%6(-$Mu*oXI!?hEFnZQ8VDJ;w)|3`Q{IxU zz@|VElFD>zL0G852p7w8Kd(c&9wpLbEWXe>9?gWy&2P9UdiI*2_%?-tkO-86Stw8I zx*CQiM5quOgUqcMc>$CMmRXYF5#?JNB}o%3f5a!%MRik_nxoP&u}>b-Au_%CjjZX4 zER0&`?OdQp2w{#`Qmh5;MgKyUpbLqi!~stq{SYe`?_LLf(!ZyA7TKJD2Qnxm{{zuq z6-%j7x;ddAY88_K&<+6MK_T@^N=OyfCrf$PnGq<%YizOT`lC@~1kQEGfi2C5w?kH-K@n;Qcf+Sg)Fsjw8B@(r$ToaIBA6!ZULQlQ z#RE;Pz5B#lPS+r>8D(TXj`cYZ#?ctg9yxb859kZMh!#*)CZ2s znTM~y5#PB=M+L7yI|AW2U!IffAAXL0s#y6Yh;RY&Oc!w{ZavU_kd$lMh5!e+f6F#H zSI>a!G{UJ2^gJ6$!2XW3D^7T>`w>K6aiYYLo^(IDv%kR@d?wlew<&}CLh$t-0Q@`d z`Ko}Cwg51W{1q_X8ww{zKyy34Rxu3ls~(n?mEGPk`UvSQo@%^WN9>HH3Vlr0t?)aLTw=jdtEQ zEO1z04LBo-M>TTsEMbQS@yXeaklO5!gmwqUMMqD`jw(-DP`EJ6JaPkue=f#D($9?o zBRH*s%8=QGA)V-MZ={)k1gapPKR>FG3RNaCQAM3NDnbv4^Q`4|QG52EdpYd}z0bt0 zX^-R>7sIgH#*c(+stQP)GH6?qGrSC#o9eWK9f}E+z_TRRDYQjdXMzY1QdEyo@djQm zLoCtDC2GzIxsSNw0=1E(f22cwMeR)P;gaf^0-#~{5{4v=88D&3S*$(aNh}^h-S(6k zx4FcoYvbcBA3}=LWu!-h!V>*P5#^v69QX8S zj__O*Sn%k8PEL;r(8sI=AN%m=$L9yPPl%u1@F8@^J|*xg4Wg*Ue;h6~L#cKOOY#Mi zD@`4!)aRVkI?o}!w&|Z?lb6|$*25%}RvZk4V1jbMKuwXzp0O9f<-AN+#h; z0#XzdmY%?K%MbvoQ)|@T(FAfXL9P?M19EiJcp@R>Vw^x1N*{4JYeWk@Tew%0gDI*a zjI4HmCL#j8lS7R(f6+oyp$<<;6aUc zB&XmTpT%)&kd)tGU-*Nc^f)(dr$n$|64!$82(54068VcH*gUc$b;H^uB5y|~vsiGK zOG4XJYK!GpOR?m%>}dE{NsWc2;WQ$!;rjzf`t3&$KWM(be>G4c)Q|A)ZXwBY&k5W3 zb+t7&=y@8qk#wpQ=yDn^q8!DAQm#NoM7$t0(thm)L}b~Gu5DO|?HE0=JpLr)2>KwW z8k7zlVJ{&r{+*CzB#b^B5l4Y@tO8cR2u1=F;50NL?vh5hkS=JSrB<-x7Q8zf>r;IN zFZ{I&P8p5Ze>Kz5%~>WXnJQlz$fVQ7Q~*A7mrno%l60kD71Y6}JiUTN4hgaVnI3zi^G6g^w%36C!CkE?Q-Y`kv2uwhI6}w1x=Z+Kv6R@)~FNap0 zWUvOe`jJ?#GDn~WOg1DvrI(t3N1#Y6wM?&0z^5-_yAVfJ!%d1Awj^)eJrj-5qgEuX z(IN1Z>?$j5YI*9SYcg6jd?)5MFm%u(WQuCY zAI;G=D+$l(;R}PrM;)l*0NKE*k^#*n4dQ9pH#ss4SkMUm%bZz0vfw~8lu0_9^a{>| zN?bHz8T&JH=k4yj-!!}?m7OqZlL_U99yu*-Uf`K&66$3EB70%fmZ!kzR|FjEq+6j8 zfAmq7>?N&$iARUyI&h;HYhYRXYv+xxplf1-F-sVULeen~I8m??1zfBk*r|O}*<6gl zA=G#ZKm=@~%lNY40pAa!bIysk{V$RH^||Y;?S1C0I@Wty5RAp(P;^#plgPeqsFTeP+KZ}p9+5Y zSQ4sZ^yR3ftDV5bebLpcXqJljgGTrlG8Gfb(ve774nIu+&tB;e+%7DBXE%}ye`R~{ zrTD8ox!1j5!*?5pzJK&L8HvBP{;vaOgx1@8dj3#{aca{p^r8G0)`Xs=CM_wiLIY>BBDWR061IjR83==jQSg13_)8-$e%zqGja~KgQd=^ede7BYFO$pS)3L$ zKvXcanK?B20h!^(1Z2!BEqIW=e>(aDMR^R-L{(#a=qfG%b>RvLu>}kPUJ!Poj?xiY z+mPHNOFVMYZrJYH$A{{r<^vWANG%;v1eVg^C=E@TJ?c_YEjW}P-^l@4yhqL}$>v!G!R z8SkX%Q278Yw;nT7Xo*KdMc}0006OV>0KySksB1y}$e7RE2ygZg=kG(G&*&;0QNVio z+HPg=7!^;hVDVTcKte26%py7-M1!5I9XBb=Rz$-`;}mk4!S;))N3jN4q~MZ#pu>8? zFq^j6Q^qn~H4=}a=@FUKf0lpMuE?elHP@a>W7fT(@8vp55FEug51l_kOoJ6o^DPy2 zxW7M&Ml(1I$~TD9U-5@uWAx)q`S&;R-0;&XLi4T}Airq{ENwIXK09&03{Q}@tPxQf z0H-C=s4Ap_(4BAxnjvAV_!nqKe|`Le-}YY`syh3{Lxkn z{%6!5?|Prq2WjrNO^=jw-6l_haY@=_)Na7XPnEF@T{=gG;;KxObRZHNJgnM{s!5wa z3tNpcoY!5=@nyf8O<|95lS5l|2ls-Ai@cn?q3qZ(D^{ag-v3g+b~XNanY*K%H+z zxwP1{!cMX8(pj$Nrw}4w8ZCtiJs{?Ky&(e`}$?PoeiFN{GnQMMo_fef3wa%T@hDYm7XX6S-ZEIi!2mQ#;#vINPnk|JQ9Ql%wPjpqIuIz2~y6N z6?xg3XDiRaN6ACdW79`%0nX^OC1)B2qP7~oOgr^O>6q{dX{NhYj9F$BS>pAM7qPmMA@#UV+lo9e@>DbrK1di1R9vnLF*Jb6-ATj zxC<*JjWGw#1_{!rqq{JV$nO*)itUDpK*H{xs;N7T zmT#3ae>z$I7uh|iYe-RUKFHZN+h+lrNCX`dTX*l}JWellba;_E*xtYxwAH2mrko=V zy=e1YM%QF`SSvaZ+|?!!F+#v5NYX`Z^{lP!k*s4S^cqqLz2x!bfs1LHu(AA2TW>7; zRCJ&Yq+)u2mu3JG|8l17t^63DTy0EKFc~xCe}@Nl$vFflCwX=)o6F+9!k3P+9~EKM z{ex@z-8B81?XL5LsfPMB14s3uv2o*KeXPC)G;oI?9Aui@A0+u>Y;M;zohLvD zd>CH8%8wb)=dXUrSCKXKe-6lXwjqAbCcwy=jG{7-9N6xz3Hd|}094x986V2lZvUIY zf3F`acn8Ml4N8f{Z|&PUofERR0ZBQrZcRc{u1H~>4}6<2kN)X{|buLfuC z=LGE^zSs2&8k9-{puSdJu&?56M0P~KdOi)Ea(_o-f7ha2 z292iXK3$v98eh*$F!IzE6U>A`qyM$_rqOPCJd6K9t`DxuD#0TR`Jxf%a{QDUk|)(B zc~Z&Ke^KX32#lEy6`-1_9qjtmGjiS6Q)aMK;laAV2ll5 z^cPcblKjXu!LUO(a{D^qe}EZL4cSqLm^Y#Xnby?GZu&nppkNj*{f(7Z(z##K65E;Y zprq5@rZz0KQ;ETWTfuo0Aljwspr(H_O2ni`TEP@Lc+AscUy?RQ%GbWif6zReLZogD z72yAEo&UAoL5t=<*XQIQXXvrSx2qViMP5fAG_*isau-a)0_Jfv))AUj8^+pvpT9#@$nuMMZVS}y1sOSmeg}cLj_X>7_NBa#ouh)=5I`gJ{js;*n^t!uc@$4m>7>6V>ZlP6($IlWDw;6U!&z>btrbYk;DY9WY z$@ESL^je*i-O-r|^wucotu8!A0$~1iR(HJ2L69(Q2X}3(vp&3NNVP9}lyr>oiKg|D zP8!DkV_~61b@XT?!>d0NWXdxO^jlVmT0siNJnMT zZ$1$}TqQn&Its~nfA*}SD_h6T(PUFcSw*UHe^+~yXFKdQWblRo*oL?5icZbsuVZBN zz&aSDvjta24maxqe!BLIWQQmudpk)iG&>`meiM%T7^G4pLkGRi|+H6nTt8-t1 z(CONm(2#TMJowL_`}}0oFy~GCKRszPDmoqH#;X0x#H->iyygBIF|ngKbaN&20004m zX+uL$Nkc;*e{gbdW@&6?004NLeUUv#!$25@-=>Np6^B+3amY}eEQl6y)G8FALZ}s5 zbuhW~51KS2DK3tJYr(;v#j1mgv#t)Vf*|+<;^yY0=prS4mlRsWcyMP-n0$Q`@|7el2zh!;&GEMNc_lk#p5^5MVAGh88I{IdEyAMSnOb>gIUSc zh~vajRnsY7$a<`D-r}rPYOHln{=!gRUs>il%@HKAh$To6p`eB`DzFiwT_?ptn$8nG z{$bZIf00WeR~d{P3#dYa?E1m~;CFAW!qlXf6iNWyFOKsu3iRv(&AQ`!A3IL-1PDF@ zS9;rDZ2&W$q}SV8^avQ(1}?7Knz9F6?f^qihHT2N6r?E>3c&jreNzqy-vWJWUf){h zIDG&z)T`7DaBv8W6)Ah&=iR-Xefzhj)xRHH3uJPhn>#;e000x4vy~qH0wiTLF=IAn zI5;h4WMN?~G%#diEjeO2WGy#gH8f>7HZ^28V=|MsA&(3>Gc++dGdMRhF*7u?QX;$s zlg=buBx7VTV=^^iW-VrAWMM5dGc{!`IXGoFEig7@Gi7BsF*9Q}X0yI0rU?Z6$MN)& zXfZMf6%zvu+@|IWgQ78qqA>x7qA>!8qA>%9qA>)AqA>-BqA>=CqA>@zqA>`I_J0)j zoj?B9lr7p_b)gC>2#^5LtBo+2Vq+(+!QF9-6Q}u7zPa2t_IDc?pKgQ)3A}cFv*!wsX64BGGAGg;Tg2N|ZDBwWA zpZJi53n`OLE~SLSkRpvev3xuLV8`Cg81g%@W5*5v!2J0OFl*Lqy!`Td+oR}a_oEGiF2)rEv$6A1Qh2Cq3Ps76ik|#aNVZ!=YO$#{W@H| z%#ECk`1Uj=%~^QGjY!Ka7kLP0fG=;(WeIuF@c_?8ZK^p zK*w+ub@5{;T0=^sIyBMbJb#G;5Fu%`p*4I0^e*4AA*Gt2icge9bobW-!jM@-X;cd) zYXbn0aLWk2B-^psy3r>HDD{BP($zh(O@~9Yod;u^vHPL7s|Hn#ui#8Hc~5Le8TX52 zB>a;d62c)Rt}DN>jCBH`L{+V^0hqDxdfN>@19|M&j`|Grac3(MR)1QrS#8u~{b`yI znIKBEt#4GNTCXo_pspy2SxsrQ=WuNqE86}V+?hTU47>r4bDsJ9tOXO$eYg$B)3R}@ zPen;OAWI57UO#%eqX+Bps%F=0{SN{mNOBlGT~274iq6hXY}l|Na^0zzHg%R+MR_5D znuK5+i;<7aqc`YwX>&m(6qG(U)Jv)d_;i<9j!wVSn=R zD0kKbar~SE)i-|`ZdZJzr6lvCA`ub&0j(W%aHr_MCKME>VA_K5(d}sp^ng+ikMsahfgnf_1S#@-(nuoik=XDn zSzs9rEA3rwqt$_mW!yi-vi-0vypm-Jnkqq%goKrQ#{c7ky~H7U_Y ztGA^~v#Kg)P=93&YLiyaAzGbk-FKtQx+sdaN=oZ7Tf1^wkHZMd^z$b~j?;YB)}1<0 zKxsWsMzy3lo4G6{{MYu2XJi~mheMw{$2yK6Pe;U^M5f#2}8@Q!0~NQ!JV3ktnm{e z0FXr$9$yB+y&dRF%f`O*3MOZ3@HzGB#(|&%4u?IYw6hwd+jnGg9zhTxN=7xIeLL215Utxb#-)r6DIHGP97D6S=ae}ai}^YULdu~) z$lS-_!ZmAEr*#sZ(Nz8=sus0|eR@D=uS~R$L7BLlx4{}xTD$5en$*Yo8nH8x$DYST zGk=mB^mAgbAWcTP;7LIA&@#3QeC+F6zJs;vcl0?i!Fmc*MS!B}*ZWW)XbUN=ZEdup zwasPpA{D)eE#egb2s1yALvO9a@_W8-K3+Uy9=dBD#p$%a#hD=qgIxla+VET;7C@RW^EUA`bj(-;()DYC{_i0cAgmB`vu>L#j8L`~^#x-QD z=l1kLQTiZCsQ^5-^{%;gIUZm48usknf%)?mn_=Y@S6qqbo*mn;(&2DmaInw(J~uZT zJw1J+UVqBGrFiS`5dcHB$0rxd*!{*9)b8AZqFf2{%N;11?@hX$C*K%A>FjDut$&=K z;NIcKLn0y?Tb#;`h=}M@rng1LHP_gyXzJ?f@X|}`QP*%_R3W8xoI`8%VX|sURaMNH zq=A@FER<-BzUYVLWL1yDF~?7gR8tyNf07)XS=#7I9vf0d_82LyY)F={Bz9a%BcyaX zWpww~L(^0^9M&1E?G=r&<7Xxl8-KXK%NEUC8+#@fToo%vA9s z{5q_!V|4G;PI-quMD4x^o%gPsrtWXGyx%1`$*?1Hl+0U1|f=ixEBicK~V=|&aH^g-+3i! zYisfLyRW09qy#lJH7GAHkAH-f?_zMkKW6X0gZ_Z+4;8X>VcpTIKX(V7d}AQ)@mtq; zanChgTz-)|ZqgmYxmE>_zC3`LD{jR2QG}EtKPeIs(HP*5A0i^6PYFqqP=8dyWmjH_ z)YMcnoOt-*U*VniUP4Ae7phlJNVslnC8hpj$s&` zojbNt&^|`s@W0j!*Tp(^e*qvpr3`>RiB2qQNEr-vVo2#SC;hQb#$pY1ZR2Mq2o{s= zzg|Hp#D$c4@GFcs`*otphK%KnVA9y9kpfEFd5Q@sMNxt%I3UZ>^Cn3WBuSqT$@oe> zHmEkj^%UQBBhC0d+<(m6dJrQdJomAW8EvOu|7w!;qBGi?=iAcNe<+}bjRXBdwvcit z5Hi1_=RprEjW0u@^D?0Jqo;ca{TV(Qcq$dbbh(GqnPx3#lq|2OvkN>CWKS~l^0sKlHr34dvx9y6pg-qTcN5Q@?n zSx1GU3_#QTxasD_XlZW2rcE0^R$*m&dMa95JIwDhGBOYfg+{%;$D4w{(1pM5&YB?J z+b5#><}W9lG>4UxL`3v)!JkM(L`0u(B}EINDjJ4{f+$G$V%oH6=5s?sLzp-3B8|cHOHrngc67u?=iBR1`V33L6%*5h@b|cg!PGiR8@tl*k41G z1hWgVD9C#CR%AwK&FJ!*WWO|3gQBWXjG#@4hEuX6LUu@SI3r!M^_fs0K#1F}s%el# zH@xl~Km)>R7+Peq8RNL6NM)cXis%an81Kt8+r!x3rhkqDmcUB2jZGL02gIZk-YAM< zj(uo!H8%b=!r#$W7{*p4j&_oqxN#^g6XF=>$rz8*Ix&t>QD}Wl>%NQ>D#tE=A>F?1 z>*|x<7!&G@w!MsQ;70Ih56wh#8KY}{G{iKj|Dx@xgjECrLvdA<0L*aGZ0|q_E_Zx| zUF>-H}?Un*3!J?`;a zZ@nB(KKUkg?AU?so)!QwyMaIT)XTW#mNkFzZhzqE8R_WkY(rsTo_?^=&0APhV zWFAo;Th0g+MM<9^Mi2!{H|GQ*A>#$Lfh5Eok8NLLmoYR66o1(+B?}#_V-Z@Hv+c93 zYEO*$*SF1Wq@k#5@~ zS2jDHfGGAsl>=r-8Ox|#PBvbvs;bZs#I3hoiIb;lF@F@$uzAb-W@Y77pS@^Yj~Map;77 za-JvO7(i;-MVPZH@uWHI?oC8QA2F> zGZSmCzke2!Cr`%lu99~=ZY2&|=ECC_C+7STuAMV8K8_z)$1q6Z$O2?<-o*SpZ?Ut}>e+yG(t*I6d}R^)iNcr2FKJhWC!|t>G zeSbK?GGPGvzJ|jJ91ce$Y!u_VY)7ewXAh^bZa;7kz}S7z?G5{ zIgdRU^moLa4=Y#SNjN%>BBwZ72^r|`MmRVCRXc-~h52~*yk2?N?iX>e!+{x@(FvVi ze`^~MmQgvi7zHW$_VFi&o9tz~%Dd z_RoJ7PdvT>slE(s-ts;G*e2Lne9evJnF0<1M9)@!S$^9*v+^ydOY8r&{@omGnq@t=<$#f-`6Xzy0=%BBDoUVm}p zsJeQKVzd(2INXu$Q6eIu{|yW(iHL|k;f!wCVKszD|Gy_Of6iPqHlBl`gi%^rf`5JB zKk%(@+>e5SA~c?ELQzR{7TpJbcMuax((qsZv;?v!ps{HH|MA=X&@>H;X6s?4K7X{P zcc->g#tDK5uQMas1z6RfB$;d{7=Kdnhv!b>$A7l~S(z>ff`~sncN|-GpU0}D6R_c( z)0j3T3rigZs`p{n-Tq>Zs9jsF{M zV+|i;w;6jbjn}sZlhNfzA5a27W?C82Qi|Ymi4a5wL^%sNY2_FS1kf{7kFYYRAIm@| zgy!9FJAs_yauh7O3BK&;B!5_LUk0Ww`y9^g`#FXNhcLhDPVDJl2mq+>lacPwQ0xoi zd{Z+{);6H1XdEV%=f_>Eqxvv0isfWDpupY+f3A?y2qlw+iJ@>mB+-LgZ@Ust{_!=8 z%PBxfNeNDztij|-Rk;588*%vXL9Bah1Jcqxm@{XJ*$w-DLsnKMdVjj3Rgby3x#;Qc zMR#Z7c8tBYRaL>6qaR{+wS-N3+tJkK$IWZ>kToYm!sQp|VEr5QSU7tep8ZoD zx_X8X465iK4573r6}NwG3jBdEo_L`FT|IsTgDNhXTZqrBn1mz8+p+%56Ufc+qPuqx zojrcse`h5i0AWS%8mtGaz&$rrLV$p`J~)epv%UDm?+@T>cYjvl7r#G*i6v<`dZG(I z{_aA&{8j@F)#_DeIhk(UetkJa0jN3Fg*P^xgX|C?iz4p4X$lS=>BQ;AK0Ns7A$;|Y zX#g}#ugJpA4_mNuX%R$G#s|C3VgAfWP$2*{$6E0C3;W=3hzNyLeCgJOm|T{F@BGWF zm^wKR=UY0_)_>K9HOq=|@q)Z0?JvSwg=c>}p0&%fF*cdtAD28)TvV_FE2-7;c8rZ>7_V*`ZSInJ%UXe_aiGO4GR}cMPB~6kMy29T!7ls z6P*w!H8mB1KrrDp!eJ$DQlTR|)?p$CvYcCydR#i?f&%`TR6s)@a zYw_)AIbX(ZC99%T)IoIhpGWSv8T_S6hFKUhsptvX<-@Io5LSY5p`SE+0J#8FBQNXD)UHIk~7C@B3_{F1paO7k+ z=6}!3!8Mmpz~BG-9!x3A!1RhtESQytoNPBPyJP}hdZP~C_`)oBQzXc;fE1U6AAfft zj-Belu~Xgn-q+_sfQCn(sm1oat(aSth38&t!1upC3n^|1dk%Ksg;(qGl{=>4C7m+uQN?|GEc@=H^0@gbNOL>=WulEBy5DH2{f2%8{xmqZ8VU zZcNYEkkZ=4`$8tbu^v~VNp&=B__6S!#~vS2j#R~HhCH?jXN)#i%)rvvr(`qH$A50q zsDw41Gsf;5X@ZpPK`pNWNwrXedUbC_#(^y68&Tn_a0^&vG?A8NzrO^s=1V^XG=8Q$CL zAPyYE%mrTavG3h8(+nvAU?>P==NH-AFF`ZF#{Sj9INZWx#j`<w%)GXleK3$nj<@T~KOkzT6xyUU;Jh zk|1JWFo>a`Vpd62Rp=FzS?MlFl7ODRAhI*!yIRJ6;Ez@+#s`3cAb&-Vvf6!~IBe`D|5`4u7X?3n&4g|IAwuI=01yl%415(0b~yZ89BCMh1$eE=FE?h51-& zUNQ0}RiUlzU9^l_iFp%p(U*||Eq6j>%z_K=<{KMaCJQ@N)d^tmg10Y<;)ns@Xu?XM z2SBU^F!k#_5F@OF7+i^^uRE5cts(%m;hf!Nwi`_eG(cIjG z=~ZQzzhJuM*b-NAN|KbcJ9>IX8rs`C%%C!RTn2i2dXS!;KI~B(+PWUMuJ+g-E6SDP zzJGIjgXO(OjA#`;%z^@I&P3}WPMD&-!ppuA)=+i(D;PZLWbiNJu zefcIl{M%;{41b0&ch*99y zH&iVX+DL*^{~#;?w_a0)1v3kvYMMDdW$noh#7_Dv2>LbxgJGnmIWccW4(87qhuKv* zc=@e{Xi#bUU@b&m6IeJq7q?tH35bNKnyTSsLl1JZQ-APxUzuUfB(8@Fk>D?8V)G>n z3b1`oGY%i?!vFcgLhL)*YX&7h`^_f&->)n~#l&&=@bGy&yWya*=TKA?0YwjBG*z?B zdL3ICnM~|BjrJ-?%@PVF4w4d$b*Tq^dY5la(>`)YX>|EcG%L4tzpck>Orn#h>$mk7 z91cfZ$bS@VGyAxdu_0w_Kxu4OmL;S(v*7inz~jh+$CC;bJ!t7Z9v4=|ZgXHDFk)4t z%k413%8{xIt=+l-!0mP+BYlb)P&ynAh_V0|vLK5hB+&s;7U7T`wt!NW9B4oKI7HA4V2BRM$y!H`g2wD(6W9V z&I}e}&SzHOcdxz&SGt6*MimRkX~^&-ue=>iHKnnP5m;K+QIrq>!K{w7o_A|y)-@bk5>FL3it(!4_-a=GXRw5@SCwgzlGODVoP*qih zzJImJ*H%F0qKSTxPt?+cNck%o?rHk6f>0swMz3enWmg!J_Eq}7y0mv3wJ zRLC`p-i_hyf)L5sfMS6e1!b`joi-bF1+5Q?CI4zWJ>?@a6mNz?8`q z`1ykm;jTMw2LN<+b)vm3fbOmUDko*Ymw)QSA746wU`TjUWR z3j%`v`02BK$Q!3u4+*e`Tt@sgr92%6j&vXx3`2v4*WWvf)93p!zQBjh?jf{y4u3%q z1spuufvvln^_2txA;liLTs$`qyY{!~-O5wL&{RFB(lnrNUV z5`~mTAS215ZNG#hlNA~JnJAz!j(^7*&?Y*D*e>DmUEULS%Z_%n4##a*mStq7mcr{A z5057`@>nLaGoq8DC}GvM&4Ki9jeid}tiw<^ z1MWGu!I`0l`3}(+2?sNfJ?mS@U-Iv$-@65Y{%!#JBs)396LD!}3HBYVfvaRH0H7}< zVpp4NwrlsGhOm^i$*G%lS6Z^QTs-x;oJyNh~4MY`1K`7VLgTrHq#>oM`SmW}lO3aezwhgDM%pF1 zPY#E}wqHioxUjOi z5KgCrFWy#xho7u9XZODQrYZWiDl+l2Umd{x_f+X0)*&D*)q$KWHx|s&C(alO4*+mN z5P-E;&cHwX{9UAaow(u38TiFx+wjUeM*wK(85qC=zd3-eo_`_SdE*pFBUBji4Q5`*0ap+ZS0pMiIxgaEp8uU1E$!@%E(awh_3=Q zj^DnV6xXF((*%UW;bB6`#BGzAkq21X$7+gcfE zw6nE~vk}O}R)0_$6{;EOQ;?pL8QCAfteymru#2}WIm{X6PjC4bWEW;*^5Uz^?FRb0 zvG28K;T<;%%J?eVYi9ZK%)n3y>ocsoa~I=m&0b7iyb=I#-mwIW%FFTSwi-CnEWuVt z#K8`Izv}yBq&ifr7%xGV61TOc!rV_mj1Mrav!VllB!4-e#QcFESta7=x^rX1WriE; zQk4Uc5JGBdCYD_~6Pw;Yh?eFqEL%PsMdS1E;htmo;}g#yE!~4@Q)i;0qSEZDotm18 z>gsANoHrA@_8!F3Priwg(tIpjI2{hB9J!BG1pGs2ZS6o;cQ1On2hrC*h=IN#bau95 z<;vCOet)H=rlPf_4YI5t#jC(SVBhcU>wkwU7P&|DUU06pd}UZv-M{u2lprA87?dCk z-62vE(%sVCU7HjEY3VKrfdK@DP6-K-25FESx^s9pkI$!boe$?+@AubvWBLLqc(`}=DHDOnYl=9A@m44HpMdf;PYpvom002t8y zpFZ+Hj(eFDnl3kR5ymEcRPQ9!>xi^lNHwCaR2=?*OR@z=!>D?wL~y+O8y8|Nk;TO+ z=8{WloorUN{Ou=$t@>th>hxpXa2E{Xm^!Op&n_0<{fNR*QuS>G&fDl_Tio#Ih@?iT z5VfD&a6&sB+w)$@;!3oUiO7g}_q|u6`o< z`xUMS6EKM%L?DLK*}a!tVZ<+E#>_^|@kXZ724yw{|JYh*)If*8gurZ2l!2r>djSWe znIC<4*7uy>%@1cB4m^0UbB{tu1@xQFG0kN1z0NC9eDo3$jRp&`As3J6&c~9inFKp( z80dBN@dMGN0+)xwACnpP0RCez(P5`7sZJL}L#45vHhjgYKonQ`*UU`xgR7s})zw%l zP7)qXFCqTz_e6xR_etb4Y{VrbXo;ZuHmHdc#cTeBme&ulU+hC5#f|6j6!LF3rFgdkDM(cmacC}wi7gb6%WOM_550bL zaH)+yl^!-VrjKS5BlSF&85B>5a9m0$@EYN54XaJF@ZrDuG&fxNg6rLDn>~lT=VM-2 zmGN^V2?^cbxhwGxzJK^U{F+r%t!UNbI)ML^tU+=`B!xUcI^7Z$d%&1bcT>e~w#r?r zlPokzp`uJA;S%;>gWM*dzd&I&-U2Trec<_@e5oD{!WXub0`c%CiexkBs545pKXGh~ zW$(WRq&QAnkysRjS!`l5h>L@I=MzJ1jFe}zkfQg5yR%)qzJ^TLaD~94>Kxt^0#pHP zBezwo^sRW{7jbyzkz4D>X{~45dtj6zH-Eyfq-L4x#!96!{#3XxeJPA?tUg9Y#yZB* zrvI|3vbMIOI4C?|z={D`Jou9BwP~XY&4|3Yl3zZH77mnNjjzo2 zdcw}(G-zB}Uf#Xj6%k+C`L^Y}3%c~9aB``tpM@Q0w4S7%y;t)MH6pQFp~`t#j>NTt zAfJC^X@D_kNZ?+ChPiPKt@sWC(b*4$^}Gfk@qOmBzP5#H;t)Ti1I_c?XcW|ce5y<8 z7Y({c_aDB4NfL-d7-JHb{5uIdrk&|=OX4dWmO6Sv-3i;XsZ-ZRgWe8~465J`z{rJl zfG8IQJ0DYHllzoUFLXP?b0h2eJB92`VfzulPxP0O#_{5os_%G6wk1+&i$3RXd}_Si z-|?(9HD=;CX@edN_oypv^$<|+-+K}Ixt2Q;1GOxEfaG3yP3mxiNMJUtP3yVc^zfEq zsF++`X-zJNn@H}Gp^H)4lpA}raq{l`1aJdK6%z}92vUWTqHACHcy3TxNbt_S_ZHNG z+d>@bO?WAWN$c-D?N7joet}co8-wv)Ed&qickR+aeyUo=Wz9>8pXQv|4-MT2QT=O; zp?T}uSIKUhYQ2o97Q*wM<=9g5xA^I!_Wn#<0!#I0b;ouKGBo+BW4Ik9kF*G4*?}cS zmvk>kXmpgAqZ<$1d~&ES%r%>#D>^dlx@#g(h)1Gny+nWCLY<~rARK5wVv+|V8+4ZS`< zhb4jDEzQ0KC0h8BHJo0q=H^)+Bf~>{ z?md4MDWPN@1)PQ7AZpZ(rnA`B7gEBA(V!Y(Rzw^9l|6~AI~()sBTfmRGlu^mm&MH@ z`3(SMlRvn3WkSdTAH@n2SCYTXnbr_r2MSNV zH$W$x@yRvG8qFr@kMRdjy5v7PdBvTM#H?m~x(7(jA|&Cq3t#AIXNZ); ztI&s&P+zpDcQVpE@!zhprLRTs`GdT1AKWZ})ReBtZuE^h} zcng>m4xOeC@60f7ifU|NS|l#kN3vO~6PH~UZ)eJ>s@ zj;iUe>v`>GmJgG|8f<%zUOw8&*&+#e|QHD3|Je9U>6%KBWMmgct1?o8PlXti7SlF=qz<(241Cp&brJLdo5dF9OE0z7b%VOXkd-HeK|3M?* zKhxDE?~Ngm1Veboho^U^ddZ!LYKybpm; zzq=C?d_-b_TGeO$?BvU^heHG)JlykfbW>bIgIHBfLR*{c_EHv1Va1Q1FoXxr&+CII zPy3GBH&LVvI{0+R(gOZD_$cSYAW??!`|nnwE$>bs7n2tKK8jwTeUE$vs6a6P4yxRvBBeZPx-G)Lt1MfA8|hPBOiC~)yqU;7qM0q-VS z&vgh2R5}B5J!XKu->Rw2bX5pF-EzHoR(tteBLp&2Yj-m?dnTp8{eF;ABvb@^6)5nvZJn-X3bpHXmr=U3twAFzd?S*>d3u`DU`qx<7zc!VieT4aF>F5Fi33v@@ zy_$Pbw_VlGX4*&4bc^&ZDlV43Bm;%Z?hAnL5Pb_X+Kr!2h2;w}GBOCHfRz9DMkIYLRN@ zmz9(jn)5>p;tv|G>gwvY^&=oBI~xL7l*b*jOhs*fDN=u_uN zZx6%{++lEh601?)UIFKHZ-!_2)Y{6*VSiDyRJZ=orllpX%LXntP=UcS>#)+(!b~U; zLQ^T$XYi)V+xi#vcQ|m2<#qL-?xvwDSv3{&-u+WbzM!7Wx$qC&*w?_|9Fr|V@U%@Y z#uS6h|MaJyV5J|L-+r6y`Hq4x4!r+BdQRhW7kx_$%4aR=^&lL;HJxW(a(#GpQBf8w+i~yyFcb@E0JVjIeLqyUm>GRnL zXp6t|`p+fjES-oIdLU}$S9=h|pJ&160hq^kKIWM>`H&KdLoF#Qi|N#}YBZS2G+--u zHv7%O&aT^B_)5!Xza5Q%k)ds?pGC^om(p!_HmtmyrB0XSbCSXvS640?>HCmsI2^=N z2SHyQ*tzujAQ(eaxtTy8#$zV}zG;GI+Z_8i*vrn=_HA{b{^!^1$lVK^4a&l*Ugg;= zi@$0#Ax)R3hkQD3dT(KY-gQx${AkTY5atj;DH%UpQXOPX2d&U#n(^Ivsh>CTKy?LP`Far(7z=uF&OTOMpt?MeO z3SR#~1E!j;9$uo|@9mfF8PtG&@1srdnsGl_fh*W_5Di+!KzIl}K0yP0Nl@hW#OyJBVe#q;U z>2Fg_rW_3o4U0zwMoYO8MWsa$$nn|PO3=GBhqZ0e-l|W5fp1>vH4s<=mX?ZYgg8RS zOuC+{3A_%Akju+Uh-h1tX}_YjatYk~-Q!cg^Jid0wCL8Tq@@%V!O}t!_!O&gCwfcV zm&xy7N`Tk91)o-8`g|ZfrFK2E5h~RHZMp2EuUK9#*7P<#=GSxX89Er<(~ss;>pDM; z&TJ3VGUZj848$+gc@_>lZ*d)Bq=4CX&*((u!bJRs%9F!pU#8AK_TDz9S~d*5Qx360|~U{;F&Ng*}6UC6Jl{8@7D4f8^#Hgg251^N&vOT~gVxbuK zlH9NJJTfErv!0iojZ2x4;c+sq0j6}0n*~fUSxM1BXgG#L^Fk1RkdRNBYz^-2mK;ds z!;Gg>=&oGp0S*d9n(^SiYHA1F2v`mrPMlPx738?m-M)9Wl8`i+_w^fol77Q|&|*pK z4Ci_5HM`$4{JvhM%R(#@F01H%n7_k?Kx`?p72IdGEpw>XHG7Kz(bAfB;LotIw3hwN zA{9*)0yyA0n+=iH-gtR?56{ei@8EJ6eP$bQyEX}cx@TfAXFZ4=T1}&-=#IKMIfnst z7zpYM{uZAZT2LrspI6XK4A~zNnVh*;%9;z1qOQXfhT#KeFz6elu_y2yhmG~C!FOEe z!|vr=L6KR=OIMTp0>e3AJ}3)0x4w@&)o$8v5I$}j^1C5xdWkJ~aO8b3)w&Q_T}^Ne z91Yz*lszaPbeOs9be^ejHW2c=&amDefbDjcY+0ToA3$>|i}4}*X+1oks0OmKe@S=&kt72(6w~D2{iNo-^aTR2)nm&AL;s&E6j&7yAqkxDxFqkd@lM8 z+Dp{FR@h!~r}GyWL|4(|)YoGa7Z=wZ{cKzgbc385o?(D4evU|)%uE5=J;%dR8S*)d z_rpX44k&lHHvVV>6j@@$2t7-xk1AkBK zof&t2C1>^ZB5c_Y@dhzNjCtR6TTUJx#N=X{ecPtf@^0f^JEi+9hI=?Utfj==npon- z;|$F8nab<%+~+-s8R-<-yU!Ltde_~3srhW76Fl?%1eg!uq@Fvad^&%aaqJQIY^}&6 zwekHS93%$e>V?Nz&ec8~IMa*Ln4h=TG0VSls=G3xsiIk`Im2F_Py2ds4*1^VV0v^A zAF3Y$aulGqT?{<~P!&oSz!+y|bna97gOISu-on3RE1<2u zTQc~~v(HIMFIYE1`zb}#Qw3;IknQckwrm?`fbq-(vu3?h0%7K zu5`@tsOHtzpoJ=Y5-g4*d8tsU&x&D+@3eSQ=TMbHSW}qlIQg5lSMDs^#fKZYH(4$Y zNN5SmXV{4i9vs!})voS)>F($AI_|xbRdTO=Oi!-8QVaTG$YM<-nq#N=+It^SA_{B_ zFsKb_+UB&G^`t2I@*a^HUw3*~4<7aD;Ci?1By*sZw77w%xrkk(+mlC!>`!H%vl!@y zEa$$m`F$`f_PB7=QvJ1;Al0Y-L2yx%LaOvkLC^cE@pR94c!;ZB86&SzYAX&F10E!E z+wzBphd)KXe|U7nX1m2n!RJH(0XI9ASczU~qGt^ePoC(Eb5>WMWal#=UhDz4ZMamv zc1%_5P08$R_TN{bTABf;KZPm2TC>66&7ou!hq*E{P6oH3^o~2k)E(YB(aV5AE1W20 zGZXVS?6+~vzDH9spYs>}1ffa_>xt5U{#9`u9rB-9BGCo1P;d*(-^EYjtibRtuZGJ@ z?_C=IAcbsgel>xwFNll1At8ITbyhipB8nT6k`f{y44{GDLb7=W)A85@|2O}o17bX4 z(T$HahZR#pm#nOuaoKEw!E18!-C7eR!{+pkVDNLr)Lluh;0F@(m@eXJ$@l`KU5}3{O-(_6^$UVtSK;`a$Nu-nzP{q#K}yebE@r$a7TtIz6uGQMfv3!FMJIrkDQU;6QzEP4pTk5#Rs;)lGE_BDusW3t)>whNJs|B^rH$h_O zg;}>R?F_!iGoJTO`dL|(?08G#K2h#~_#=_`K2cNe$S|V^UZCBBZ0v4I>iJTh?!lu? zQ-K6Rp+ZYbOX(g)!l$qCy6R+luWpy5)A=dO&Tl4&p`BY>#cO9gekbtDlR`_9M<3WK zdC_k7(lk2bmnjZBzHu}sEAdgyoTiI+eHYxG(!j}@j7*8$J^MiIcf+xZD+ljn}ybz&4qZnsUL$Q%*olA z&Gt8^;K`T@0|P@Fm^mmaDTP&6bGn?lL|e^#KqCFFmvEv}7N7=xma|vZ-sU1E(&BDr zE*237i3pGUtC5|=_<7>IgbY$!%utm#+E(FO&zRBuJD(Xd5Kx`?va`(i*_mho9g3{! z`!xcMSCzXVJG`z9luHg%P5NRv`ya37#(qckNfSEmiCkIz)I9C-!{MjF5X+n51~EB< z2Y;AFbszHe$kBkqs9V9fy;4jrJRuEo3 z$Zy+=hNU0lV0Wy9!Emj4=ll~VxJxx_yi|AA!d1PsdMG(d>QM1jZ4wg`mlJjDxLOrt zBXImiR8;nlZrwSe#%m1EkX}va-Ju?4op#sD)b_RM585()Ej!ZzH0JkdT9adVb}F#8 z&ooZ}uVcS&WX`;uwoIG+v51!>;jq^=>MCTg+cq4#xBPUg76#VU1hm4h*g7m%wDqek zo)EF`!w3~{ON|Ifc0P{)nn`|LQ zxc`XN#quM;+uxz!qC(xYQ&kAwL}>X(f!2%q&EBDRJ;y&nzzF@5#)3dFbXM0l=W*tF zT@G5b!OhmB@JO&q;8VlZJ~d5N;NBMbmSagdw)g3F`?!XlZ~M%thhVKY`!H`~yTf%& zagkL==Q|ez{S9AG6bqj^iL*7YKKl{Ec_nh)!&JmD)F}ptG!VYDLnBLTbl7vB^!<~? zqdj}F|0A^xoG#pZ`Yq)hsH@0w+d=`~du{Dwwm)CwGd_UG%Q@OjEY8xUTclMbcRxw= zop(MO5;6BKttdiIg4N&m^z`I)zU186LO>uXDPFY73=|_hT?0d*B@DQb-YUW6qcFKl zc9fG7;KahlCisgbLzrA$Y+72VA*+RY!2L_{*Ex#lo}LGDCec)U;Q;~QyIv`E0Lr9R zVx_21A*BYlc(pducyJ#xNmL5#P`+I%2o^T>a}uoQTEC6a&ehh2?9aO z0glaCzZ;|LGX)V)w@_&f2!$WA=P)p)z5w(D?`0R15x2(#f~JKxLm6D1wOvN1XMc_Z z)0rb1{E2qMKo2$rUxa%tg~aXI~y)}J;3qa`+{|1k!Z1wN!krv_SsjIu19nqTpDP18Dq#BgA~Cm4fz7T25BGkhbo;1UEm3_`nI7{z7azCTWB{TVlNQx+El2RjRM!E_ zGsZFLz}x_>2cc83uK0kZS#$4nZic#T4!A<25Sli*MbT;6H>eyP9UY#Vvu$mSqUr)e zsF>JT3^g^|GurIv3;q(|j8`pWVNXiii{ET8H4*`9qyoJGuhVfaioFhj#Ej6UJge&W zIyq=Zcz9HKz($Ryu-818VS;%kq-`~3=gh`?Ps;BW$#C|=fxi*Wp{0i08kQbS02j`? zK4=(r&w=(0iLYF+TnR0Vg>*DwAuH%WH}?-^eq6ljwh2&I;7n37=u@WLr$v$Ba$$rp z3=?tN-xiXG&*@Sm3(E#M#W{8&rcBbSGicsfjnK>wM=6iVMY;#~2I~G9L6^X{%gr0F zkTlUU!~nKWQ4$Z{NW>9eb?lk1dDfW!{JHD=^Jw6D?RqFIDmE)C3k*MC9UX79%GA{| zg_sIQi=VuZoFxyZIsF`>Q>O0f?#{%|FWJ)4Qc_;7?kHU;pCw#&b9MG3)m=tkU;oB$ zKB=Pe{nqa8M9K&U88zwj%uf?`%h@{gRg5YR1rMOIlf*1#CxQ*G$dSct)!kzX`QgHYxJ) z1)2!)Oq8dmyE7fS=gW;f&!{n1I)exapX4f>{rS4tp!Yb*#>?HhwwwpfXk?R3r@)G^ zZ&cWvF$?8yMU0d`khmPAW*?uHvRu2ljLZLA@7Tw$T+XCn-#a~BP}*tQFg#nrcc655 zz-D1Jph?NAUH%2(Hr--74z^^Ub&DAQmOWJxT(aHBqW@B@}|4HtGJ~_9-MUFyfoEv za|Omt7i|j%qx94&f9ebi>}LyK)F(7}tTvEA4JM0oVF@j4vXqnyKk$V2EB^o%?pxZU zg90p#dFIg?qlS5Y1o&SDy-OcqP?YrQ+@ztB6LR`g2+yW`J#y7>9h}I$k?KEDyHV>> zAfIZ1D=FcR56_p!anM@X+iP@&pn?yix4&ODARvG}ZLn%BBd&8vQ9~msJR%|?;RMIk z^~B)Ndv})4)ND6l&@6stClQ#l({OhFCMOn(Tx_{wcl0Sj69W ziXGc)+P2sK#EqlT)e7xfb?aYsVmeYR#?oH^5|&=C|CsZ+X#!8}d1Ic~J!H$_(aA*8 zI?IXRZA(MxHkb>E9>j)=XCCtW7bbE2@Lc}NJ#9P znbA?gr(pfm65?JX_y_H9i6>PYO1P>{$o;f_|8=~G$wny(h8FE2YH zMOv?Y)Hr9gx1qX^9UYs^?BIT`Rl-xTd1{*i$8Y^%Yqz}GBC@-D;+r)| zSz}V91{P|UZqmws>TsJ+wv;a}J#gw^3H@fpWqB&rJlkp-aM>ru_fJkQ3kkifUB{WA zuf_z@q5(vKtAHsx%0?Gq7{A6<*8JfKVKK+}{BZHY?FC0ojesdO>6c>za8cyay=J}@ z^MNrCDy{at;wFuh?CRtiz2ITjfCXng%y>?-uRokTv9WV3e> zzYx}OTmuBGi;gY~h038$yI68SCcEB{$f!z-5dAY5;PSj^#4h6+DFTB@Pb3cb*m~?` zQ|!n`lJUtQ)ak7cA^kfKu5S|J4nH4a9=d+X7Z>}G%;`Sw6Y}A7JHF0g>G|sF>dP0# zKq1XbUK;TTm89zhwNZCLL~fq&@aQ(nTB$}b!N-RrXF5i#6I&nv{jYA649c_LhrLb;B)rx~@qh0p1$iC8W%n$B z#!Z!unynP^W;nABPwET-na#*nHJ^;k$K`^@5Dx~dEeE%T3v$Tc;(=GN@NZQxDjV-_ z)xYP7D#&c#m3`honZGp%m6RgJ-)bAMg3fsFZ{34Jl=j~rM87C{__w;~_%Pw$FaH-u i{huF{`M*DE-R=EJspEm}AHHpOy-Q2TiLu9dC6FWm)sZD1e`%6rD{_VZvkEPNc~}lOV5S{t`T7o#S(EB@%S@{3 zml+jt<6gks&*0GR{MUb8_aFRe-dC4P>vh!X`IAQ;aq^=3&!72z2A|*0_lM8R*So*H z?{@d~a|LfDey7g|{qwF5-|v5Y;rn-(yehxksN2^E>-P^v{u)95<3?W(e@YrrpZ3 zeKG5g-+z5Sl)o>&drSPwf0L8_c=B)W2MhDh>3sip@9ys2^O@bul_jlTllq>@d&Px| zB~R~bmA{Su3a{JyJNVlj*=s~+d-IFG7DkAK<%S$~nBj)=ep@hxnB$3rB*th2O7C?- zG@>Q%UYz(FZft3!ojNfz!kc(E{uoPm&mHe^7CH~!fh%L+Wi3s=_QVBKq7Gn#6b?n4va-$woj*Ae4QsQQmF;gJ~r$;@T z@3io)jU|5G2D1o6f1!*Tp&4lss|>J_KP`81XqHrRDW#THdKqQbRC6u0)>Z|6v!#|> zX|=W1+i0_=o_p!Fx87YJeU3O1;8;c-ZS*n5oIG@L=gGGx7tFchN-M9j>T0X6v8Ite zmaSN|X5HDax#Lb7oY-}@-S^n@ghMKwe9Eb(oqoodmsGpyf96|mz3uip?)(w8;9l8< z|MB;KAGPouwfG{X3)_#V@zvJ8ZxIA1MKL2{F$W^v6af-CDrUZioTF3d6f-{}RZ$|N zEDFvJiWm{hC&Y5YkJ$Z;+;4GnIsc#H7QZ9s6uSS9$T@}XA0qcZ$6!1$i4DuTfr-F5x!85%EZ>VMVgp3FeaEm$ z4UEmVz^8d#*7Tkmp)zV|jcu(?%ehq>DbHj#_D$46ulEqQnA=HtU#`83s`j6+sA0v2 zjI?sDjagbs2lOnx+q`XCcBjrbz~SDhRzi96B=&Qye+c{AqNEdhHo zT04ObWv$G(NL*iAu$}I)N{~(=OyhJ)|Gj|<;H`Ar&wqSu!!mlY}3-@J)#>(NnMeK5$Ii8oAzCU|LYx6Z|?TARbtEPGgKSD;rmA)B!c zudH8daHrc{DdX>PvV)8xZ&v|8_ibS9h$^mI+ucSz*d=R7Sw1|&*^Zwz`?6}>tHFKC<9Ha&-GF?#Ge+JTua^mMA>uNo3QlT*|5;9px)|=RT zwsFbo)6=DL!_MQRo6auF-HKeK&gQ1lDH`gqlM0N77&LM}QB#R8G+PQwGHVA27+2J% z)EPUiKAjbnHMJM&0+NhX`DD}yd40b9+jkYY_w5KeQF*DdPJ0A5b2)bQ&UaTp!ZJ6U ze{&P;GgiH`qBO=uNuIpM;GTQ*zH?^<1KE97o27zeZpTc1#L>xpfTRLvh{Zc9$4%e zh@6|%dTj%!A6*Y`Qo@?HY~)r zgKFJ}G@6XPV>1Ha0CN30+OHsef6at7zi2OU@?-`OgFBRRZ#F@)8t(Kc?Xb89@SFCW z_0P5VeJMx_7>3ljZf@wBw}vdvLpAF>P>4{zkO2^g47z-P7&PFz-eT#<@dHo%tMTMG2S8rJ%q$=P-a0B{ma}ao~Kre?vq{29wVE zfhNerUu ztw$QJDZ#JPK)8@Ke4t3qf8aI|AGyS7=#y|fCY03&$6F@Oa|vwu@BnZq1}4YSNQD0Km12DEHmS~>niVl$jy=b8o~l$rf62C2iHl1b&9ieR z#+k|?#aNip0OOrBH%AosA73btOTi}eqkp4sMwjMb4Xy88!MQ=b_OMqFbR?w~0yPPa zyF~|z!=J1_D`{d_mM`4CS{ZPQ7Bhu1&1Q$S3U%5cF=oY6TN~)Yp;+JHLSOgnKDEqc z0^bM(&{ddFxh@`pe?Yv)NhSj;$}XTyDEtVx}N^p*M=j`Rnc#caSdB)qN!2wa>cRw=el?jz4-IhxEJ*odO# zMo7Dh4FE#H6Q)MMfDw}%Mc<&THZ(sYl8EG!`E3hQK<+a+e^3wHmWIRI1>`sp4QhOx ztrkXuh;5Xgsl(7g<@#hdgCNvgaw6(1UxzyY)=86qpbrT*uPP{w@K z4L4C_yN-pSjSVY0gLpQO6jt&*Rd57MuOmfLchVYwS$u;FAa)lh_kVM?zKitkG(2#G*B zn1%ARu4`ecLxc*ca}qg=kvBkjV3{FRJfeI{egI%gXiZE8Ksx}0i9+g^kPs@YPnPm-D*SKGp<`lD841Ij5>ISarBw`fi1;|w?kH-K@n;Q_li%Cs7s_VGN#pvLax&nBtlh( z-Ro<}wRoT@+j}g$1!+enAgHo^4>Em?dVo1_E2+Mb?vc8ldgUHdQVFC!_aS$1i{L&r zoGO{9RSnSC48)q@3LE_AtDV~?8;2#7#px@)RyvCzwh zcn*~iz)e`x!vF@BpcLiL&`-Gt(Qc^;Z#?ctjR?$lnIsLdQQTI?QG6~2PMG_WQ3KHc z^@-zh)x%fdh#%Z#pn@$>jzBohmw6KX!|Ujml9dlZgbR>os)#4?=!x!wq+HiFe*`$d zQ+B0tH3wX0WjPgrkyj@O*x#9U!wE0DA3^lBPNX=}lj=uzj@KB2&qN#GHffOG5`0|) zfPb%hzDi)EEdY!oe+i8DhQe7Rpt+x4vls^WRS!$c%5Lu%eT4LkSOcYP6z; zLruUz*+?E-APBI4`G*8ZKnYv*$FhNRC$&5+vus{b|@xP0&_`jkZ49)XBH72B&i;w z;tjmshFGGPOH`i|a-Y$ne}URaQo^CSB6k+ga7p=00#LBqgds_7227}M7Hbc9vK9}a zZhuOR$6VHCXyfAzA3}=DWu!-h!V>jH66K&C9MAM<<2Z!m06D90NUE}?`iNcZ@s{;1 zYI$vAcZBDnz=B5ybaHx3fIem{_}GU>KfXVCd_w$;jt`+a_9=mnf7FN~7jwAe45>Ou zEXfy4t~7NZQ=fBE={$$@%4U3;O(3RJ0QoXYELADT#O6oLg^z8SBq$&XA8GQ zIhdj>!pLd|Xdxode>*v}ND&#D3Uzo&ng>Ph!%&x@tSQ*FntzL{|c$Q59-ExLs zkbb!nNMZ`U@m(CZ8cF#z_Ju$ANsn{Wc1i>b7VBCN9-)s-St5Ut1e+;4LN{w)tjODu z$qW|U<(AMknc8Fd)l!(8Ry}GyHbPT_sX2`Z?D+lwl79OUf5Z=(Z)`PGSn5Z3clVIw zxz~biyj^Y0O=_OP?F5}H1-hJ?izr8Np_D6-5fLv4jkI5R0TEetV`v)|VmpN7zetJcn#j2 zjrD21ffxSPe+y1k3UR2XqlYt0Lb8;;6i}5;7gGWF&|N+O6iCvQf{{zCTCNZ)wG6CX zJig#KKf_unbo6LhS^e}gQD1z((Bnds=eGl&P`R!z1F%fJ)f7Tf^Pm^NUPZ*{)*ANOsav3Z^3~_Hj9NtS!aPb{l3YsiZ&4Gp04iP%h zUGNg8N?OW94(oD@TfK#)pg;%*|B;q96-2UR3FWI2mKq#iZK$~&_xWejQ$bJpYg5C} zmijJWf9yaVK-S>$shwNaPDn8|DaaH6VJK_uA)OfNsO2@21dhN2)Yq_!RCgXoK`;S3 zEAw(F)kOqba5j#_dXqTGtu#R0N`RV4$uOKQYZvafSgFJkaDXas$fC3^`gVB*o?xDMPX#u`}G{@Qu%E9jcF!I&kCL?P%H2b?Hai2^RQAlS+M zsFNID?CH9SB%g2&X9dno?m#%gKjpw4Pt*DoZ_=86H7cvzS%FvNW8V;|PfM;7eEbb5%f4{RE z$%V2#_)`4Up4_Wmu;IIm!`MISn~20;OaIpfGeYa_Jw1P@!#J&L7y6L?hBcvP$;lc` z?l{Cf)a*!Ve`4zwm56AN8UW7Bou+O~mr;Msiz#R;3HcLQ{&2BH>2o0(IsACMVtOhCrEf6{^n>8le#P?X0IEmSqehpOTRP#3O{C9VNOfER?F z$fIUdE_VJ;5sri6~0#eIB6oI7_I7&mEW{(C($30J91iA|vse>RMy{vpqC z#|&szh>R;qI#fPD%cJMYBwAu>s0f_&Yd|NR4?s9V3(XAbN5*{mMtHN2IDcRId`EW~ zhyunlY&*-~F)E%|!Q!zjfP}TQm_>9ubj=LKHJK*qKqNMJ*t8qf zk~V(~Ta7YY*Io7HS&*VrAjp5v8&p=e0HmUvOOepQPrs5zy;n7<@kx{}aB#BrVL@Xj zAJM8BjDq%rS4T7efAdJ6{_aQSpy9Pz*~7rvy;Q}$J`_ptwpAzJ)`_Cq4pL^h?S>~ zLaw-8p=i?C81IC?xNU%870AKlBnxS-;gTf_T`0>3mPuGMPHYOoiTb~g3f!(1)?V2m z>t?!s716KG(|Dv05+1TwvW&OQ4&YOdOO_ZP3zUM5pdKg+&%(BdXvcldo|QrgAvbQG z`dUlIQ`F0Be?vTIW}Sb!BCcqSnkW8QySM6#7z!t2*RLir-f1I`1Yv?1YyeBtZ@MW# z%K0)PFI)3$s12&NeIwod!Z*v}}mj*h#NF8in!5FmFrT&(j zBM!Z2^Ib-_%J48&bRf8^O(50?0h=I67q!)6TiYX9$4aO*q!N0` z81`xCKpjZM^Z+lt0!aMJRc&wO$N0o*W12#he=$RTcwm>9Lx6IUXScGsE$%CP>8Sc6 zBWiR1;F^9nP5W#ofoKwwf9svMarYZmx_l8&KOmx-^xEP{2C){%Hj;9< znj8Fr9_@G<#UnmZ!FBf2jT&O=kii`>4|}(j&R%pvIk!ZVtpIOqXf}5-r7p zF|GikznFrP>LU-KQb=niy!P7ZR09!q??iUC{Xb@V|^3nV5_!88~!kE5vrq1m)ytj(y7 z7GYK%bBybiK@UqCMmoBO?~3ZX#3$6URMSx>^n?f-Y#l~LPq1FNJKXnZU>A6_UvmTN zju`F87&VZ{4bY`Eqx#^Oe~AFj0L#*$ku+Yb`)Iw@XanJk&at5(y-r`?lo5wmMTI|+ ze;_ss8KnrgdyyLPU0O8i0IhZc)KZwr`FeYEUcw>A9JV^!cYb=sc%@Cs1E^#TBnWv2 z+y(eUj+qn!XoS8$^=a04+^iBwj)|`~x(U}SK)-33)Av{L{VE%PhcfQC$kTC54ck8rcA6~3TwJ&>=bd2$d zCi_SyHDmuVvCyJAdNfnTt3MM~f4=Gd`tD!fe7%L&a`S3c?stBmsxi>%t=n(Vzth_Sob0L@MEAI1Bo9$_P zRqhKAI$c{6YI1I!2mkqctWQKM=DchFXC!S#MW=(@Shar{cxBv$x7>dN3#p?|fX;s| z0004lX+uL$e@R0_AaHVTW@&6?004NLeUUv#!$2IxUsI(bEh2UhamY}eEQpFYY88r5 zA=C=3I+$Gg1x*@~6c6Ho6GvG|R*BDv$4t5)@gvt2kKZ^KT^4v|)Xb#kiKE0~v4fQk zW+hW2o+6H^nojvb)?=0P7H6$eW37Ag7l!lt$}-n!4kL+0EJ1<@1vQjWfsHt=Iw=;? zw4dxlM`N2I01COIL^li5ZVQrb;tQWcAVx3 z5PSx%^tQj+0A@Z(ueY_>5zw~{TwJ#`We>RA0S2E8*_2%=NK+^jfcG={rW`PE3-qpe zy|wmn`T%68tJDo}a0rYRDSO@L-94SX{d=a>4&M)EY;vN@9*t@M020fyk{a%x8*9?maX2))|vVJF*~y}TO^s|A_A}H{$&&;f}FTFpXPb3ZfefIk@91i2)!Gl<^U;*52H}>y;--j`U#mLFY8S*|3heh;s z>&NYNhT-rD2nHMo_>&*fP$6Zi$)%J?1X8rI$5)O80Bqm02|>RT+qZ8A0L+~`4>M-W z#7i%&#jUrGfy?C>_4i^?uwQF$g5;yX)65G?5G-v)*HzOmzm_IOyh-lO?s3amH`k2!+J$SMPmf^61 z!Cn_STQzt+S-9c)Yca04&|GKt?%if6Syxww){e87JR=)wSP#T5SvCfuq=!bD1_(l8 zMV}rt#07emYPf{)0UbkC)FqCgXbmZi>d<79^CS;{K!lXlhSu;2(7Sxchm>lPDn3yb z(cNDU2tl)o(x?_p)dm2f;g%74Nw#CNb)!!bQ0f7nrK@{%n+}I)I}gS-$*Nl812ALX^|l*&2J-l^9rYRL6V6sN zth8Q#v)YKq`qMNaIzg0ZTi>WkwO(J=KwVK3vzpRq&!O5fUab8!xU+pI8h9NZ=N$9- z8S}=W`*0hMXXN5kpNg_fK$aAEyngg_#}3xxRn4y1`X28m&czzL_|a%b6T`JbSM;m zF~_BBJ}aOozXD5duC)b}0I+V|I<$72hC5CFHKC|94O8Zgjcrd;pa+zCc%%o23Isud zAV|^YQ$`XAkHm*xsRGMbSZVKa8>?IE= zMOlO-icqux1S6gHuHKd|&8n)HL6tRss7+Zthgfy0b>EFH>!K*yDk-hUZ0*WzJq{x* z)6bs}Jx=pkTX*VY0j2dk8P$^JZ053*^k3UAp3!k29S(i+9P2oasj6)4RiHzUF?lg0 z$=-gk$%fP+$F{TvlCgF5ZsCHEd?xwW&;*KY0;yD8kB_06-R1czjui^md>xBNuxwD43Y5!ROSg8wWxTI2`tn(%OC*nISY? z2$><}XRcX_>@m?QyT}K7{|SdLET02f-;bnzM*Ed3cNPAc)+QQ1A zXqsT@@){YkLeChV(!Rcy5Gck=+3huJX z*>lRAjKzGNBq3!m5H|O5sBq0%)oGoCXC#$>$*M)IVV@q**(($6V^AjV=54Tsl-92L z$tLx&zDE2^0Ac#)aPZAFxa^+qn~#@Hn}hB{kK#FY~ahN)7B1%efAxo;|m=i^R1~r5<`+XYH03njR zEv)|zc}6VvzHtp1>$yFBP?SE1QaS*SZN2NRzYLGBc@?|&Y{%R=3(c_ds;jQXbI*=$ zSm|&$FgVy}exIM8i=Ljo5wAaK&SJcI_y~ZY?eU4FGIqVb8Ff20qa6FpkUk^=F;c!@Iu(nq;#*d$wN_-f9Yi!3lHln3vhwKU+Kfa^2 z>$FkTsYKLhcowmIDQ1|K?EJV~azaSyay#H~IN)^ZV^6x>u4wx>%`bg6ZE?tR8k@b{ z{&g|uf7oAu%`sEO5Af@-zK+qoThml?d&a-U<3>QOsKJyWrP0><^{QVV=4|O<1p$A^ z{4&o=^eYg52tum57w@lIWA0ta@C@IOcJuis%FY{jY2=I7S+gFxPMP^n6-gN!nvzmags(qky6(3T1e1i~0J=_b2 z`k<(TapzXV=kB^1b#--k>z&t7R#t{XhYq2#vN9TfR=$J50spAI{|@>Cwm($J(#3U0 zul?+uc=GjugvW1R>BT+Qd2!_>?u1Eq4Ch-FJo?fArZ2r2V@D8Diu|NVL`0*2KYoaa zh&~}CNkaWm30GWwHPX}5&2Zx3hkuQ?*T0CYqAt{~7?*V2_)1Fs|LTZ>Bcl?|2*`|X z#mUBh=d;fC9UH?iHamBGrJ#L`z@dMw8LEqQ{Qd$!W?BUReG;8`){rt3>O@fKGAI49 zPR3#lb#3EkCJ7c(?Y~|@DI|oHdhja@JNtFA$%c&OjbPH)r{Mxh+j)u$DMe9&C^#U? zvGXQL5+q5V5XtyTJvOK|%=MJmcEip1J=Dy9+j~Q*JU;k=~^{f2Eyi7>^$gUrSWA*c3uY5e)Mz)(cjT*J~nRJTukcygZcfwP6zr! z#spQ#E9QX2L{LLe zBKpKWs;WX&?5`n8g4u;w6lA@6D>@^zW_0;Yv0s|1K~YsGM$o3j!YNr2Av+{EoY5}X z`b;PgAS7&8)ilVW8(w!FpaBsz0xde(jB(sjv@%c>Mf3#(jP+%k?P2V1Q^$UPOJJqi z#wLt~17gYvZxlr_$38T=8XNx_;qOQ*4C5;jM>2Z%{i$mJ00os(apBmrNYA|!ePMlncecq` zI#!=tC*GMejaazwQf%M84b!KOw>=kMfho&!(yHKOVWnZb8_+cIqQXj#ZxFJow~s0Z z^nX*HFBPiVp78kXw_k}TpL_$`w{J&xPYVE;-N2uE>LuKE+seOqH}K4VtW0!vwxPJV zKtERng*e~Xg7S*7=Dm~bzOkBj#iz03(3@CL;~ddz4mBR7{yxNyghWL2(ZPyJA|j%X z`wx3TGy^YVCT}wg@OUtD=1jCThY<-2dRS+CSwtg8^Km_o(rk+wfu9x^COI4)q&a*@ zbEd=V%!M~C8(w!VWKka+Th0g+MM<9^Mi2!{H|HdxA>&20fg~gxk8NM$mNf|!f7LFf z3LUIt5n7kC?X#_FPmKH5zCCMYVY13mYc-`cq_lNA9-@mk5UX}|yIpX(oo3amC`x9f zWU?8&jfzC$%RC3>Y}i`L0L$7HKfVoP)u|ENSK|751?0#>N(GvxK~Yq5$O5CSjBP4P zY~NK?K{y;vsE*XXLI?zc80ZgTe_$Y>2bPxQhBDj`0ahVbCfd)QHotfKvY>?gSW*zX zuKL0vwlpK5ox-6AT5qeXJ?_Mx!X2eMErX~C?X=@mk{tv=xa}hw)YEwsm_4LU`)M6F6Ac0a+H|Nt1ESiZU#i zl^saeoAIHF;rn9yZAMzyr7mayH#F6N2d&*Q6Qt+S(B zyLk^MJEI7$w7lqf?7^VFBjJ2lx%y7R(RmbkrLjuLKz}zPp#iAcSu86q#5))C%DZ;I zhyxuCOv{c<==9o~TY-p->dB=jN-MOFKRMK7Pa|9o03rxOe-Z})2=MsyuG?b7oic>{ zpE3f*NMrymmlvx)_Zd9#_&TKfvao6My8vLDU}xbaGf-7MF6Fkw4>7$fEz8B8Jtt%5 zJ39x*Pac7$sR%_xsA2sY4fq9EYf7xwR!`?yF2Y+_}A)u5!9Y$p^}fANRsPU0tjHxD`4E(n5%KRkCF zn|EEn^2Ot@?(H*}GARd6M_hm~L}jIH2>`7@!z*u}#neeTX6SjLWe|M>VfeiIuSJKC z_9H7ZEoCqx3Znj%5HKcIRVG$a%H{+=7e6z#b+&U$7xBo&b^neJ;gU{fl%$Kd@x4(w znQXjCe`CK?HDVdpQH{2ZUL~ulidj`>?FOD|Hg{tzPHVUC_+w5M*hV5ofEJE+PgkL; z_SvM3u_cZF8*O6^ALF+fe=d#Jw+553((il_{5fOa?2mrka6^67kc_axb@lzW&l@Q=)vtbPQu#P z>oI@k7(Dyu)9C66A{0{5KNv=NNjg@4b`t!72%h*;1G;+r2!&K!GP@X`UOE9sj<;j& z8z+#T=S6q#AUb>exc{zdKma0&-ZfYcR)KqNsfGXnZ@za94d;6C%ir(E*Y2vpe=mQ3 z5aY`-aP&kMe)8S?mic9Aeq-cK;)+#*vwD$3A7m{HM}Y`OTVTx&ON`|^W;=7JaQiXr{#PZyOpYnQc(xd)qer`W2W&3C=n6;MKP!(eV3Cd3iYwAKedch7XMw`cYYyVTP2(L^2c0({b)XzaAobt%mazLk2mbU* zJ-%}16uk7t8T`#X)8O^!zXmOuTZkuKIDw_LB?twa=<4xff9~`WbaV|yLxmvjy=@*Q zmgi!}-g9{Nm4o=f*Dr@C3P|_5@ZJ07qOrXlfB!GLv0!#SBuTjFaK}EOPOQRD|6T)- zJfs}1nld(_&B(^|j1MWTUA!-50vzjcC7V=7(}o@kFLvySA?0vYjAqDVn{dWxbHxlS zjeSZr6Mg(Pe~n65<2hsO&fzA=Nyg=NM1xd)o$QPvWT%%ymH^4=giCfoltoCQs83WR z>tmy~HSR)M=Pt~;`ewL&StB|JzT84of9e{Pw48@_(#g@J0f3_>}%u{cmySobu7hYn9m9i|O zva%ADm6eD@BB*bu!-0cGaN)HbC@9Rv`~_2xlaoEfH9PY0EL|=K`uh5io~{qI;q#`) zwX-oPQ``*i?WZ9Q9K-Z^Uh}c<-80<`DFGlD0&)vW?CqB%pforf_MsR=QN-Y26M6!j zBOce4e~5_a!^EJHh=}OpF4`qqRaHO`5Q&5_Fc5&lA!F0FO&B}2%u-brfl=h9D6z>; z^pH}oK2uZ`0$`59SY4R~M7w^Mjq{TJ%GFbK3yiZW-f>GU0Z~ z2t^{u%5-92P=P3lxazV}EL}7fbtijpsIC*=fB%;qxO3Gc)Xp!`U&vCOS2aEh8Z;a` z-GlSZ1NiB$_5#ol2t?rXI?&waM^9fEzg|-Z0ebM|bS9r&yD;AaMOD$#?#Gei%~(9I z+}3>gd0zbK^+S*Z5d(uE1Vf5hB~??US5W3;x*$mcdip}h%}VTQ8UKMlR;id601AQ_ ze+^~SX!~nPLyTl0rM}HruxWI^4u`|GFb+tp6tsqvF1N#+$=lecWXEAWK5Hl$jYKf? zEZr&u!IAVCeex&8oB+r;-c(_tH9(VP*%l3FiT zP%?QT3M#A2$I=T*Q81wfZEf$MWy~_n8JCZ~tTbr(c0D~93 zeNhyL4FE?HRsuZ$GR?4a)y>QC`s>@Uefu^nTzCm~@7{&EbLZKPW8#DwOq@`Ie@G;P zy1F{-+EIt*<|a(7sleQMQ!U4qypmIrq?Fy!GqW<#-rivbmAPZG(9_d{%*@OokK*8# zwYYtS$M#rBzLfC&8`~Nz?=^C?Eo1u?&*9MTLsbc*tFr-qZ6INCA0i^6zZ3?QL_|cN z1cCsc&x@uDZMg5tx8UL5K8sK&e~j5P=ELjtnjfeyT)2RoJU5_eC@t~ft&QgpQB;Ux ztefn~`d*Zc^_jV$YMIbR5}f)6VF9@Px*E)zUIbOs%<(DfPIe%E(qBQ)w-FeOAU(s0 zIn(kmcg7gZtjWVmZ#Kk&O4|o(A^MuY{F(W81GHE9>FPl+e|vV*VHnS)SCDwhG?p;}OY1s{5(Xfc z)sfcoZmp~wZZ_`^LJt$W^zBL>sEP|KS6+g?zJBc8yB9q@J=nZu6XwpDkLv1b>7{?63^fUd4iw6_J&-4#Ifge>^df1UW_izg5YE6`L87n%q0 z?4M8L)5~IGXSe)RT*06~BJ%(*@kjM1xy1lU6^BmSCHnTh>JIuHs)ph3fH>(AlLg?@}J z@}aXki1yAPe*{s$fukMRva4BNNe~cL?4ir0vkS0uUz^^oJUs$U)q^Tc1NsJnD9%rZ z24K_9dW0jffNuZcv(PjZt?l~6AekACVZwvhuU>*6CUmKeg?*aYE!p@=wk_-SVwHZP zS&gWw8iIkaEs#qVQW}AbB#XBF5>iZ7Wb9|MfW|l;e``RS>=@#^geP`+Pu?v%*3~+a zuw7Y}k)2)+uWKwkp7iKr*~ra`O^%{ORNFQO`h#Xj84QGn3@PpHoSJo6S(Z>(Fb&1I zv*D3_a5x-rr8(hrN^r?8xMUX`P8VEm7u;?qoK6{%C_$DSa5x-j+V>kcrB>7|UuAAT z(BF;sf7h)+Fp>rLtUKV$(!+d*=!=GfS;(F7Efg;LH`MRhj6i=k0DY33ywdTwyt)i~ z4;+H4Y%&0#FDznbn{2jg_n?M|lKeQ671e60{c&SE$r#s6{IwJRxT>ln>P|geuxSlM z6-7Zf)CWarhvM&t*XzTi>Rbc@e#nvoP0bB>fA0CG@W>+%WAo zz+HEJ9&UFw9$)h+-rM*-R26aWZKwy3NOC%$R}3^9?CON>%ggUA`we zM*M!?*W-+~OKhJU4u@^OjH=1O!6vl#o`Ir<`Gb;(h(;YNDv5}QJ|SFAC+`2o9ay(+ ze*@lmYa0d!6ciPX!}tE~J8--8?#c@mEJT0*0GgYd&~&Z~-??uFo_YBszWd`H5G4WL zG#NL2x&pIn@*s$MHDqpf8h-J+!|3kuqBC@smvnA|k{_Y?2q2M=sOMA0yRdLi7- z)E}~^Psv4lR|r3UXg?%TfT{tdC0=}Pe^oUApk{I|e){XZ_?vs|6FW>ApM^#93hAG#Lj5ONW+Qr!j0$0!Z4$Tb3N=4D)9;|1)xn zb1`w@HRg5${oUC6>a*~UnE_>NjqNpad{jxqLb{zIy;I&0Sb>*-Vs-Ex`M`kKvC`JcEo(52j3> zj;g9^v#WM`dOB)rYcYS$bnM)708c;p2Fl6{F@OG4IGl3yK2{O%2hrNvfv)ae^mGrR zuYV8&eL-|~wqx0{73O}Wf2XITwWSTRtRT&+z&~K$?`>;;hpQI2NAzBBzEwd+aTPi` z+MudA$j()4!D%QWVz4)M54zJd^aMKj1Coe{J~D*X)>e(pKtx3J(J(MDfb#P44|SWh ze05k<&%ghYq6nz8w1OaA(w!n8T@p(pEg&5SkWOi&LqfW{1YrpQ0m-G-mF`~p9zTA5 zf8BrXeSY6N56?2Y=b4#vX69Y5_iGO6+}Yy|0^W5qt&#}ppn86^TFYVOH`lc;Yp)Yu zzuQ3S+t~1i{eX!R0hkgGutaWOi8}MtIQ0yctSf#iK}4}5Mry*+zLAOApPum)2t@ewmKv26Cr8DJ{)%FJ8)ASq0utkvBv zkevSeuKhw0YF};QXHzv#G#?3Jiz7=!#5-MroA~Gg>!74Q+c_vB$xmzyI{j%oqg(m2>pL6rAtN#3#7!v5zKsR?cb!8%g%8O2i# zs1ZRaXuRo!0Z|yqYxFADgQ-f{0TK|x=?U4(X|iD+v}EO`;gNb(ZTftE7I|!|KLOPz zGACO5E+s(pHD`%HOX~r?EbZVEAvYg_`qIvTfKy0JR=I>c%(LGJkMZ~HU06m+VctUJ zUjLO87ShLNzMhzT^-W>|d*xj^nLNpZm%VqQ56mPsf$5yL&7)=}Ev^fwYW8xtQ!_U$ zj`jM^4(z7gO3lb9fb0B;$RaPKYuTS>uM@am^qMcPq~tL!DLXHQ;ue>~QU}%L>5i<- z-JTWauC0@PpcG{!1NM$|w8Oa63QkiYoBH9He!UuTr{J~6ubi+f8u}qN=~Ww%#;f8A6IeBmO6Zy*w|#{W0F5X`oBv(m!Iqg#3Twgfw@yPx3MKsKP?OSENMLOmW47Of|kST!E|@*9?*P+<=B z%j0~GA6XZ@$hogL$LhhhB_)#arbB%y)Mg>vhd+|i2AD|+yLl8(K0Em(*z?b#-k*}U znwiPlr1_&35puG{CuF}ETe+B7qQmWfG5!iCcy1P89ABb3bb!Jr;(F%dH_qoQVDTHc z=#z()YCbw08ca=s&p0^k+PNqx=n;)E;O972VX>!(IjPhrm>k`74uDWIlvNj|OtJ$`WN;X63|12$r7V;=A6B_m*^we~>?Jfio%a2zdX_e=8ptKG5 ze$)vZKU6Bt2$QYH{g|2LNNr|s&ql&-kXl0(a@5P=cUMKM9b3o1DSXxtXuaujE6xn9 zGIsh!FU&Y1_wG$<(0lo38G^+7o-h+cgh5$VP_eJCug69~J(w^tmRgBQtlasTfzvfg z69X!pxURp!>+6Z*K^aN^oQ=t_KpY7y?i$K>P2B?SH<;Z;4BxZG#V-(svP{223(t>f z)ob4$5n&!}6^?2?0VWc%b!W*kCGNZwO{vOz+p~M9I;ua*a`h-1ls@DPz1m~73A_-m zIFq}~4A1$HyRjXjum(FHi$ZD?gZKrC`PFsmBMdQP)W`9uLZ`1euJPngC91V~-kixl zsQbK=GQ%dUO||(hOd+LS`+eV@JS%0CvK`^l>s6=wV+-(>TVTqVi43O;>699flQgR1 zzZ;+}^MtAarr`?5hNLKl^gK+DqkuRY1n&#nTaLj0^Z?9B=6j)6+V6BHPRmWJO%n8BmQ6&nYpHd>~94^TsD>86|6lIJ)=%p+|dsYNsM?b zC!<9d`DDD$5cm+IL9o0(#>F(e(}zmOtvZ{;PyBp7MtDj)TAtUz(LnRMh+5kXKdkt> z8glNLE14jXmg`)L5djQ`u$<1qN5VSjr>%|h57_a#<46)fe^rVbZNGXe{CG6aWXW>AgPZHK z-9QszZ;G@1~*ahb+m~z84-5@i4Q2fn;?1Uyrf4MIBm&MllqhngT z+R}{!ANI@u&0j-aG?ho5U}+8xKUnlmM+^>xmM|-{XhvEVGsJ%3O5y6ui7dXyD=Q7C z;z{A@iKF^%mT1=dB)Y`(f`@i^rJtxJYWTfv(58L1rEULm3hPZW1AOZ~e~-Pwh>t)f z`_bjdt`}yv;oTvIE#^$SRahG2 zH*P2l)dwf$u}U3VbcIz;hTT)Zq;0i>hwpje)0$AeLe`@%6pb}qO8!pL{uQ6zX%2rq z^u)Zcr$gLQbo4<DTwYDZ;#Qf#d>kC00i6`kU-Ad4EjAv=n)&7n zDG{)@RpbSc+eCkK7Qj!z!DQ`Bl#xzH1oj|eh92AWh9*8;D0HRiM(_z_R_o>SOgP75 zCuvtRE6`b=nJR18=kD}^45*cm$2^>~s029*ic2P(H+8s;_q2#jh{_qV>0vVtrm{9Q z_r^67P~RMfyzZYGAN>NP2Ise{`wz8JwW1U%g^Qw;pbv#w9@}p{Hee^;$U^s^#9IB1 zm~wz$oN)A3cpMm)q1eRxk6^c5c5d%jARTZ1X1iDqwarm8A{t-*ZEsSG%8nsH{~!dv|)HZRQ+ zTZp#z;;X+MAu#pweg~A?Pg~Mwp^t{}=r!)305e#Yz^=IugXN(y_kkE;A`Y*DI7fj+ z^8EXDK+rJf-S4|3hQ2~vG2DKiFNNLURK9>#)t3Dwk!^iw3n z+)ZHqn3aXk0C=_UEkQ#Y7rk&-11 ze3$^3p?^3QniEBEG6R9oaQ`6_bav9zu-4MuyxLd#lfMrV$b9|Y)m2hU%iP?2zp@jA zSwJF=e;yO)CCWmfG$7HL;&)}xkGZ*$YI1NqF(F=MX(l2t(fxz>CiU5$nQPGvq?L%L z2Rp(E?7}{0`Iq3a%%KIar$pjO{?lbP)3%D-Keay}`7x3Vf9~y{5-s!(g826$@8&;w zzQ0$-ip^9(UeLegf8PiITmJ7`{pT9}8ULU1AAKsY$N%9&0sp@f_}_=3dvM>{4*UN} z%#+8;Wq*j~f6IRpE#Uu9w*Dug1p2eT$8Kj{oL$`$22L|?`nN|FIXZ)e)A^6S$%vk9^UO5cGD3{ElG(CTFK^Zd zo|Uy7k?!B=Zo~QIb3~Kfm%y=OEDcIA+Q(T;&;xd=avdVs_5@VM*CHY!s%$2eiz`ax zoYc5{#AqP24{(;%$AZr_=zvVo6zv^ z@F4z&HQcPt+sAeI?9!_^U8g9(V$)Vlg2Ck5V>)YFPqR9yfAB1;xhjBm2 zc|?coU$J;sS)bjlt2>cMW=JG5H|hQL93;>v;Yc0(nv5!3O>j)lP7M$48xICOnRl^e z>m#wmfOK5+Fan(JZv=On3r_RS3LI(u<+J933@^91)(K1uobY#>{Lt7x847Npv9GwvGu`ERG?d!heP(if=%BO{VVMio2N8QYYQuEZ}I z_OblDAP125=rZsM9g`6o4btA;{?^($V02AdP3<8B=*pxop5Vm`jEnG5YCB)02n*`b zt>1hm@t_K^aN==P&hNBPKaJOHeToqPNoLcJaYFWeidBd|)*0iA$dihn zpd2Vnz2o`)e@q zB)qKv@hsg|Dshix*{jo{><{o26wS_B=k=-bF&^qbWvPRjT#SEl#)ItkYFS9+@JLvV z5>HBFp#S^t@EbA@N0?Jx-C2x4aTL_g)KiQiE-Z{G;*Z+&EsLrw?kb2RVes7zCcOzd zS{p^yW*Y`08Do&k0T>W}@RSzS<=IZJGQhuN8uAIGXUHik;vT|&o2?9%ezzAno3DNA z;Lukjenj4Ow&>0DoVh!Kr9#H{+IoAY8pF^KWWpH~mu2|R&As9Aw{>)ctq!My-WXr-sHUUN;4+bx7g3>T6leHt7m+O9oAfHRqb_RV=j-eSfH5l zD;BtV>ebR3_bDlPJ?4QsdIx%aD%i@ z)y&oLrxutC+q>EJY&)D;qRlIA+FgVqZ+$jim3cbgl8mN@U21bkD(VyX)vp>-3e4eD z!orE`HTKWbNhOIe>)cO~{IQN*i#=A$@B34Qs>#52kOT&{MSZ>$|Jl$Dm|)r7)Dfq< zWy(N1X^;^$PNT#1sa&!Ip57N%s95>M?tm7T{_p$Ci~2Su!>8R3v0}w)u_zj*>Bu5- z%IHbY=G7yuwHOr6R=yNv$!KX2gKn^y*l8(LG;FJ~l^Xd<5sV}F-n+X$<=`NN#nQ;r zK9Epw;!3V;La$*39~-b+Y$J!oPD)~^YVfcjUf|P+MTvT!8iT(1#s+z+pc%GJ;l_~t zYz-DDH}8a~ic3p-+RywRvZo9++)Qxn$tdb`P@hk?eoWcnp~=>bi&a=TpYcXfK8d(D z`-o|66}9|+z4LT+tq=)^>IO_MT~WnkJA6GJFbi$#=s1s60rFdFaG*x*^ls&j-E<}<>i^O8nuy;las4z5fg|W+Zy^%D2ft2C z`u%G{u?U_;v)Mtp+kx67$nF|fWHg(ctloORlG)ic+Ts1wax(GPA02RHsk!`ZgCs*> z;+`7OLAiG_(!-Z$an6Ux_ZrQ|a^rnjhZ7O>?&zq$ghXWFg!A+$vI5C!!ddDYbqc?w6ng2D-%woy)3=c62q zc2F&?wwt+9&~NM|X3;VIp31ckTwZ&e7u2tBZhu=z;pp9-tyObBW}2!5?m$9(7YA3I zbIa=P7pY{`wOd|qOcbYS1}8UYHyN<=e8%+8$S?ps%DTGx0=txa`Pgo8fiOKDE4*1h z#5=Nxyyck#GZd00yDRMl(3S4k784K zT(+Hdh(B-@TykuQm&<+)EFC-A%KU!+L=a`0}a`nqdC>lpx5ts}TqZFrUQD zIEmJ~G2&C(egm%dEk!QVIm}jy3V+?Xy?8R$dLgc=ub3BBYc)zcoEZYz4?bX6Z`iIKNTqdKL!l9tEVKQ4|fdURwIs;dRQp~m*$^~3s zby8a>NV&KWf+rlDrVX=IaOTjK+YK43Ob;~mUs|UM))Toewe^#zKSM@k>1a)ch^{i= zGMWr!B{abJc0>YXkDhgHd~{kM<{AFT{op?GeEO7jVN1@{VobKa9Avz;=uDYx{(S6% zzy*&n?mTHbItBDWJ2O@JmES0IV&&U{`_c#Dy*AukUVbA_*}WL?=Fo&#T==x%} zW$UOoP2euYqAw}r$HGGJ$zBEQaAoKqsnUm-fBqfD>kOfAv#}$-pAF(TT9f-K1UKYb zNx>egxtIHmXNKV^OLJEGmQ9z=#h0c6HS~zdlRNMB%7J>1EAdYM4Xs|(hIHkhTm)!j z4|*=eqZy|hXz&Sp*d+hMOp z)oEO%BoWrt?kDB9cAMSO;vE>HBJXKR7>STDg3Ud&f#k-y>OEe+BNVpJL4yjS`S#}C z?(G$zeuX$M_b@{u);q#xT-NV%`%+(>TDkwq1v;p_39@@y^r@MngEbN=E&op0mCFxYi4A)sdz%rh#S!p^POe(IZ z=-X~~L4&M~X2*u`hjOl;<$E2P8??NA$PVZ`lUojF1ZQMW9-qN6^6@D6m#@x`blW_* z`gEf1Kqv*B$v}Jh;>83fNYwrg2H6Y@3<92q^ymRyRim(UU9I4Y5bWX-YMcy5I~f5= zIgm?-{=u(lKHRLJd14&2{7Q2qpnuumFdJntl$;)*z?`d!BbH4Nk!O5`EAxN*dwWVhuo6G+Ga~vF$z$og;y?wICo47sr%QY=Z$kbcnPS9@UTO z0eHeO(v!S)v%Zg}p@I~%pQz1I^G(PQELFDf^&!W-9;#^$2{lO)bA@k7DU&&M^miy4 zfqm7UjrVE9AE{&Sm>nLC5mUJw{~jPL&fr8lKR^FyLGH3PQX3q72RPk>B|g_sQ&&fq ze4whU8}>Y*Xt_Tw9|DmCc~~->j*C7hpN^o4rINzjg7P~S41zQsx0iPUJ&v2%`Ueh8 z$5DYMDYrkbm_a`SF|$E( zenlRbUL0?DX`P~gS7ipxkJwWP?d|QG-XYLQIBtjx*hw>9Gun_&=C!v|m6um<*$n=E zzN%Yev9ba>W76OvbCQkknKj}D($a$5Z+E}l*P1$7(H?M8Bp9sJxgH}k&^;6c5XrBAr<2TZsqLl|ODjas#gFcj?t6G;Ghp_7e0oU?x&^ zk*8&8>izLyF3On-&`ZTe-+SWMyH;^2NYFd(8f4HI8++k@I?`csb~$+xstPXrsuIfw z*6>s#QIhO8oOk!^L~YoS$}Yb)3%tB7t-QE$pU{92!yzdI3=njUZ~ytXvAHRulX8ub z4)h=-l$D1=FNDk#O%1KujcC%+&P-r2J7koUys-BBp~vrXo<9B+H9%ojq0#D5eSVwe zaNXnVqCxn0H1h*34ig6lfA-$?COTw$zJ4NuZAN5qch@AFgSif9sw^(N|dZYI_n2z2z11!mjeOrRun?AnR>|neov>eZe?R5tnI99tq+wiN&iUF5AYK!RQeQHl;w3# zR#ujb-+{8Eq$DmbE?_rn_n|%f$I?=)_!WZd=yHg?RRnQe-(E`t&Lh7tUtO>6kgLeN z?}ppZ^S#Kp!Qq(t;GXAnPeq5zK9XQ|AwE95FE8hl9W_v&O`(_k;J$2phntnV_|%m( z#p_IKdHP3OmDBG8xPfgy{(853FDb3=%h5$?E4EA1&O21`LCZJ|%3y3i?f*BN`~FFk zafK|2=2>XLD?50Dy@1d9gOX>;-P?jLW1uOVHu4_!5#uu%{js2=rPccxbh@s--L>=C z6LmR!{IurN3l|b*#@BTK+2{cI>3NWEY>bKL;ZKDq7B--FW1^_q?vvPg7%Tz1Q@q-F zTwDMrma$r@455Va<_)~+{dolVI$cm>zb+!YR%iiIQc{o&a0mX*(f*hB{kSJ4_9JiI zSzxFom0hTYgC-hOp{ZL5|iqUN%SP zKGS}Lne&+ww`gQGln!+>T_MLgM-ANW*#RH4w=zCO9P zX(2W1K@{ibSUAB_mc&dsDwst0p=zqY#~J0*^|*X8vUL~@wKq|$$RQ^+n5u_#&DC?5 zf~2UsLye7%X4e<)b_;En7Z(ri1=}ULW2X!S&(9kivFL>nZ+tSI8gb0w8)lf`1 zpSgLuwtu>s&lJBciGyB^6ZQ+!zjn=R z$nta1*ELtfF}Zi~^!QYQbDNT0vVDL$6uKn4fD7)|_GDL0Em?P!?U~w|nlX^Xs$T>m z+YxzDs2A*=b&vP##3FEqLH;ERbHCL2j6q`Turk>Z0VLv(2OKLpFR&~U|2bNY+oBAJ zu`GM|;=0k;b*-dqE_8TbVl-Vk-umY=rf+u|N0Q#MxLI00YiVuWIh!8K7XWTVYHDh7 zOGuZ~%NK!mfgQeD0GzbMJ?0 zn(yED-k{!{N^Q3hxI^(>p%DKeI{4n~=_0|^&9&riLhgGvf@LXNer-chQfmiaxpQQZ z{9`2z8ehS&a!j!A7U@4s<~VTHNnsdJY#4As+gHNYeIZ#0srOOrNwq^SiPawbl#`V+?X?Z0QcLGci)#y0C>*o4<-r?Mx_rV%&S=l5kdVe3?*3CP zBJImqF)b7S!)D%K(?@~qro}=_5 zaoEPs^|AcR&?k3AEfAibo|~JS>YAE$ZSC#g`Ne{x-Zd><-Qu25g6AA(Wg;RXyXWT; z-BLZ^try@jkn++!$!p9UFds)9SXx+F4BFI#f1Ae}ta{&*7jO0S)N%(S?kT97n&wRb zWeQ^@TBY6u3U3a-5vB>cSazQJNr#pc7Rp(T{4Opikew=gW?^Z;%*m-LDJegO zsenyCcE~GVYk@t*hT`$0jXN`waS*GC8SlWO&r};&HM8(ZQVkoXUk~{_ zp1+GyD7dv*ziVZOpZUH0vYnGoL?Uig0`PUFg+?p$O+u?TGpY1!Y#fpVe?m2$g{(VX zj%>DCwhDFZ{ak!1dofHiKFK9vy}ED_|GD7EEa|}WQ-x70ot1nMcTCEroJ;9yuk4`l z{?EE~RVqQX!oFweWlQxodvQ-Z7aQWf*I-Q~I1*WMPFD_Xye|Q_s|pS|Aw_9R%Ns2nowE?L zP<$G73yWS~0H%`dqx2Aok=U~GQEc?fkCjqo8&si!Rb+?uX7c^|Mu0=nqbq0cX=~4y zt!VyBNUk?qm$M1^yR=Yo76vn{Axvx@0Kw?0Ea1p_XaNT%GwqijU$Jz z)4{9JqrFncL@iYYg&IEiWqqfMMrA=b*C59iHP00bS2x$vvOG!8-pMy2{AnqCkmX#7 z4Sw*Gn3$@d<-!Yi!N&(KoAxnAg&DcHuu(Z*`sU`=q|Z?y3EP{`A&M!Q>TmLZ3-|BcAYA@}2E?WX48 z7dCI#@17KX`_})K7hfQMaC)7Eh9=u@=i1?Vs=FI~XQ@*K`-5a|Zf+V6BO>6{8-|U7 zL>b@IFc)ocdrxul7H5Q zkC$?Yej%6`d27GPuAu%6CDDF9c+Zof4SQiaEva^LYB3itouH()RDad!#>;j><6g&$ z*3FeQ(ybl)qT^qEqTHXZj=MK84a?3|9M3N{f9pBd0q*N(AXU;HzeoyQp814S(flrj zhy6&?r`q?MKNWW7>NVu@)tsE1O3J@9??uNHs-#zdd`DlmV;bjXgNX2OE#0?o9na62 zoRGYZMtLKd!bRV|YaAXOP5drqQqC0G>8Nb{I;7!f@AWEFC2?bYgX8$%#=y1J;ND%z zFS8TFUVy!Cyju$|>mcD|6&ky7{&T@=?_~1g#3iy0X`FRR{ak(fbG6q>FN4=*f|C8skXriz z93Z})TXN|8`L5hoNOEuY`*`#!AJ(1JI(Cb!N64q1)))}#d(v~6RP3)YAb*Q{-Z91B znm_!ZCi>s%JK?}r|6X^HR|WZKe@fR54l~-{Y7>j^GujSP}%z*c30PaL?HU zfh1Gs^1YicgTDF(4+3Ue*)z?G=YKB(y*~h2O?xtW*b6s@p6hkE4_U&)Y?jA&J&;05MZB1UYA8bL##+f^#Rm2f|0-3d3pTS&(WqXay2pa6J;{u*=Z}BgZDx zR*JS=;liT!1#bh3)4};9oF{?rFLVhUj|3$NT%RxeER(D^wDoDrW(K}NF!B|DM$5`8 zJJ-n*T-PiQ^jz0%A4Ezr9d@KBvYn1Ci@UrgQqx_}ldFNvhcvI7w63gKxUu%7md1o; zqKqxl5p(x(iIAaiUO_>xr*ZXf`5aD}-e&0(G;!uhQj=Qp_GPf1J4{1w6H%-IxK9@{6Ulrckn^Xz^& z?;rdV{HwrlC-aNbV1#)~eMsr~Jf`gi^!#T`-n^8{t=e_oDodzUx6}ERap{Qd-fc(T zo;d!A1Ld>d6MyFrW7Pj?8~;F7UV++nmpn6E*Qq(o;9JlS$6c7*zs2N;=d!ME_+-jB z9g^CnBeK<5w4R`z4F}_1$qQ}F)Q7rBshw4RmeB(sp6XL1V2MZaCpd@o#E$1rwuBuZ z)Zf~UX_0l}OF3@vdD9LxWvw7SH6%<;ev-Eca%bO@l_O4Ox;OH)4XIZ#|MD_NDhVqG z{m0H9V$Gv1vrOmN(j2NF?WHDWMEF!b4|x|*OZFLoYm9A`=v|c0~}YC zgmvu=uI$^?hz?)(K=M$rpP=Y;<(9>OO@#hqa~vMHy2#q!r<%WcjIIT9em~|n zForm!WR5?CCPwr?th1!XGiB-_v|kFIuHd@Q3=&Uk2_K1~UExpFHL^I*9Xs(rL-wP` za>AW7W3%j~x#AGTV+HmfjWFFy*88pV4Agoim@^tpjk!WoS5lQh1R50$GafaVvjv9NQF<6qZd$~uB~84k_Wp>5oT zZBR{XO9u)P*;;NBs%*2_R_j}TMN3>F!b7_Vs#P%u$wt$^tBQre+#1uK<59?m*%!7v zBcmUBDQvY4KAqAJylTL=B3ls)s}va!QDD##&!>N{qkNcabzsWqST^b@~s z?wUY=7*e|K+ch5s^I{tceLs6Cl9~MVUuGd{czvFH<1Ei2f+jM~-aOz7>m9VD*N_fb z#>m&zl%LRTP>8H>Vnb-MBU89J`FNj&^IwM>I9cBFZAjYH;lAs*V(QJiB0G~PQ*$C@ z{yJnC$UxDh%)KIt4Lm9y=4OV8(H-6RC#?C`5QA2lj%GakRV(Rdp)53L>kwN|&g`O9tupeHaL!YLi=tQECf0%kPV7P76EGn^VyZh0r@ANAc?XQ(RO6GAl^J zJIhIOZ*(=Xsgj`G^YiuzP4@@3xksb0pb<6##}g-t%a=BB+nRaPy-74mRE`$Sp-%&$ z4X%B@5v?J7^KKb+uCk=L(&zp%;t_b_aK)G53ZYMvkiE(RQ&yLNoP%e5ub$0#j$XHU zhce)^?t@oG0<*{Iw3ai7tvG=cyb0$JCh;fmw&l;TlAe$DBLp;bWc+M1<)hTX@t;Rd2`23LHuqVoOCLY`x6(e=aefj-et_iO7D+~5VY>*5iy|TmEP>`v%06H z%!^5I31Cpax|B0i+La-&3x0-H?JJ=v5%I`lr=y~EXMjOYpsZ;~-|Y8MJPD!Rk4Kz# zO^~eBY{&C1!68?otXB+dq9^%c=-<@6KcccP!bj+oSQqzK`I&ZSXXvGT3^z-T(NL&a z5ema90GbZdzpN}2&H>4WK8rKw6#05|drj~R0x03lF>t^M`G*>c z@Bqy-D>@T*^gNx1nm3Q&gv}i`u_T1?iH!>4hYC&ZRE3o5EpAB+O(FKPml&0rfEbic z4Y|jxC{Bki?8Tfh#M6qz={g#|)jDHSn{l_xbO(x}u2po23CFM}r7B20>`AYMuw~^*aLAkn+jsW1@);+c*-{M(qF%W_-t*T6fmv z=)&KnDc#;-iDhiZh54K_%AaC?e~rMthI#NCh+~6-6BVwch!|_pO(_bkk^fQ`u4nLj z=*;@tmWR~Sw=h|fpW+W?9Rctd8-up0D1U(vOanKhU%y<32@!r#qH0gn85W@9M|S*y zK!8sO-;x+!sKVlFL1j3fDK{im?-O*x`r1q)F9>xP%u5x!@T31x6v67-KN1)l8e2wW zH5eVmj_sIwVyoH?rQ}{Ybk)~Vm}Qg#B>ouj3U>%$#(B;K?6hOm?jKtexylWKPl4OO zaJrr9tr7usQ%m;a@I>xzY_OH{mO?mf@MA$h7kS&)aUn?JQy$bSE776Ib=g0ARO1^;Bj97~GRi@l`M8MNQ2_dq(vvqjid+;(Ns-Wf4R5Vx&W@dJ@W@ z{#tWer3#*WC6-EvgQzJS?hg$TBr+$>7=Og0meCs6oiT$$f)r=MytEf_UDQOBjh`>l z<-x@Iefy~sp+_}ufUy$`(ePLmP=hk^@9$>X-?wEHybZo;5@Lu?Ul~vJGH?%$z;XGPIE3Au^13#J^R{J1wIE$nG?8E8fssrgq0 zwj0Hcr(LO3-WMlnEXIapV8K()IEhK9k3JFV=#yVGqt{x5DV82eT@0ijYV2 zbp<(@ab4-?7#zpj<0AFjP=1=Qk$SHF9LqtYhYEmfuA^Cmtf#_%0W6!57Xe%vnGxGT z+uv_ho;{;q^8(k2k?|oyR7h(!xS&7tDAAQd_rbGo1mkM$RtGc-o@QCKOyoPUR}EX| z9mekzgas?$n6XiM*L~*Z9C1p7Mw&v9$LoRcFO)~eDdDUQfFZgH`OZMxb$A4Wye4H$ zOxWK3*};#hOsHQE0bo6tv+Wb~)mqFI7g!k_Gg8I=qQdK*uoSazEF1i4`JL%$!Gv`9 zsl}A?uOfS5h-y*G%OAA;<(i7VN0F8{+fIQ9+GCvDC4T=_3@g8waI`u^*c(a+wgM*u3~O~(f9E;2m@emtW` z9!p;j(ivMCzhxF=Fc_3T{FJTL<GC#8Pm))spt*&`nwNgoWJ;(@YZxn0@Eq-pD$E9MR;xFRw)jb^P_TY{;Y%nO?tb1C$sH*gX2G|@`wcv29weFs#X6SR>M9%fe(1QWFoJB++%xTKaN zzg~U39^in52hX>kHj>*4s#VETgI!PMJHZYftp9j^S0@idh+Hd*RFn8SnyhQ}c4h*DZIXomMDD7H#P;?Mg-FOc}li;;~u660%ranYiak0an* zlFIo}>_5}b75Y0==21P7)H*~w0q^VxnT_Xboe>C-nn0P^_J^BSn{&BXq#Ff&|7NaM zjUoB-sNT4gdhxMOzQ-q%PUy#5FcW2n3*Xwrc+{MfiYCo$lu6tlV@IIuZ^z6Wk!D%P zN@oZ?WIlb)G@6Bv{g>vjX`^A$-#m|Su_6(4ps@MxkUm1+Ns#a)Kmqm>jiP5i)3KiC z9VycQk5b1fAE_L*b*}~xVxa1c1??tZ>nB9*eBsPReJP_wvBtRHnkEt0<2?%foGeY3 zy?b>FLjGLMuF9o{E8E{2FJph6)8l%o(|I(+G9%uti2%A4I3Xrl|1VzE)>E~}XW)AC7n3kMlmmUN*F{jt+!hhDIOzP%=u zvDdD$Jmpkp4fSjN5GSNfx!RPDKOj|teLYPZ7WR`+@mOs|HE!K26-mu?MP@9K%)i>p z7p~GPc}r96tQ~3MeWHVmcEiOl^K_}pVa20RBAB);H{^)l>c(%}K7VH&pDwM8%eBS; z1_D_%1Z41@Q15=>N94X)RVP6GJ*)VNj$(n${EgKy`90UhtQUP{s`0qlS_CVpO;HTX z5`IYHCW@7K9NlAgFal+7^g1k-fQHC{88e`j9#H#slI zb&F=fQIsF#Aw+2?O!C<4ok2}{Khx05WJp6~5h~H|E|kAdhW)XJAN&bZqkX6UJhM25 z8sO8ryWH-0Y?BK~7{uA4)eVEVrOFn&%w6mkkvpCs^J^j;K?Rv#`7MN4{gqFo4hVFu z(F+N7G!`SWHHk|r+=mr1`@MQ1JQ4bf!iB<9O#;`Lj6jv`kG1;jCYgqqq}mx`vLuv}2*@cU+A<}-iu=F6 z5jZ*X%q-gJ+Jj=1P_dMFx5*R7BRQ*84Wo!E*%?IwF61E3#dyZ#Uc34be?c9iz-{%4 zP?klFt?@D6%Hu&e%sV36nEtRj(6kZG)foDze&>^LK4W=qbtIdFlJ_O;djJ4wW9{`d zNoSODGO)BeccyePZ2s0NQqR9MkgZe@q^v)q5@(jHPe?OwNr1Yl-q;gU*AEqj_E$JH z-K9=jW|a=_G%e_u)tQT_0IFGCz!^d*r*8&U!pb6t9GL{>DdpNKkQbkQCqYD3nR#Qq z1K`MEhNtrzG9-|Z4isohmj%S*;QAR8+&pC=x@0i$HEj>>wVLm#Zoc%2h?jo-MWrbZ zaZzFGvmcPq^RJJ+S_G%+h!XQAPIG#jub*ik1|DJMQ^90%q^Jpms=Lb$r5cY^g}?il zFJ%T&_9&*T6Svr@q^ntA05YQNzJ$Z)A3q2Ye@zLCpgMv2U>%i&KDYsgFXu^L@04C9 zg!rOPh)#&KQ78T6b|ssfMy-<%VUvqAfM?OeuvVywOn8(Tv>{l3dSr+$GbG ziVuI$g3@?<%jd3;Q`kVE(;{b)+)kqpywn&XSab>!$%$J%h7x?oSd$f-XH0XN{$HtH;P~_;o;bZa#AXB(yP=ErcX#xt8b` z72P)OrHEXJS*4hb?joqhUIzZOpHhRUoG@6U4d?Ru)7v?Ds+aBvXyTIch*;Gz$ptq* zYM}gtlLnP2v_#0q3(x)?dLINr2_b*M4#S*B_99$jROi1w z&2eF83D@=1e0c(@IzHKE5~F@mg)o`rKeAdm68rYqKWzYpP@8e3LvBTSrpi~QB%QNJ zAnH;nLQ+SOvxap)jfV|1eIZ``yhW#A^v6V#j9CWmTNI9BLI#<3MPB8Z%>X2-Dm}89 zxE$0l(*nYGQIMek?%WcN-q4f_d4Jgqj#LXI@10qU@BGCuYTq{QVPE8G(F8OLf(uqMv{az*KiIB6jA}zt z;HjLtW8DBm^ok@h!;;wY+ZR>4cpoSOzt}n$n3b`N^$$r-r3Of6TCDuEq@k2-L0MOr zC8{+pqRz~59n6}NidLA?r)E?eWhwL8id#lrKk~)HOsSC(glXFI5Hryr41+UW~9s$Dki3qhTgeyEBh2 zJK*>h&5#b5V9@_>^>8weMI6K|P+-uI*g!DxKI8YMmPxLPL7S+^RKsMX>;;203H2b< ziUt?=1E#J(#GfukPEs8aKMg7>uac<*>-)VZ9&e(w7p~XR9DQ#W5o7rLpyL>csK*>& zr4fM>59-y0%Qn)gnDz( z{OTR@WRQIQhI-RQzxRT-f06q55B26j*84&d*I!l-I->_I%x4X4R-Ji4>E%Sgx}dP{ zT}vXkHEKJ&l`*J4k znpgi0h7Z?-$6O!Lhctu)aF zuXckOPZwH+q1^MU@v3J=Lz10l?n7sQ!&;bdVaVh8183Wt!0@Z^1lyNF#aDW_itu3_ z=L_DM6Y-(M3hr~9)qEgkmf_yPg6NJ?)Rd!7=+RpugC1U0T<2Iak?niU$j_k%t^!Bn zqU6m#cKY^$mWW$|Yp$6+yd1y3%&N)D_mxhRo{DCkFj_3wTeIKTJLU0_222D}LO?+N zvJ??floAmkba1jav$QdVfN;<7iRF{*6T}YQED9sW3{gjO999G}X@6rm&QoLL3YTDN zgBV+HKc}&hQqe~RSoic~50nLl*H@ud1rR<$@9ggv91@fHCSz##yF0jjzVNviTX*xD zE@7NFPJ>`wXP+DSl`>Ho##fET_?xlPF;#0YgS2pqr}G?r>qRfZ{AuZp>v`eNfS;cv z?-=qN`37OuMgs~k`O=TB9;deByyF;8FZntQ8u-UCDV7YA^__|3$YTe-R`c{{VW8H? z{O^DLN@{ad2E(2eP8&NFYE~5>h4)@XeFLq1?g@0#+TUc7Xt_DT%+xjL`Fa!s!fBIV z`QHtf7-D6JG`>gtKq?UqJbmu@*mAS4?42)2#*l_sXNbB1m=JGIp(fh?c@yx+-+Y4S zht}|1HL!(X$u3x0)xL$t{tHWAwVGB3r+W?|q7ZB|T7^+Sg@M@p^4&)T6@C-S$69|= z`+(C2f_c7t9>u`{J_3`|e+t}Wg z-q6I}$dul_zL4Mqij>jBgqg|2h?9<$iv_%5H)NvYG-NcQV>9GrV>B^lV=*#fj&C52 zM&@E+WoG1JW@YDK;;L65iGYo_rqClXV`gGwXXBt_=3+9UV`bwsqT@8-GNv=+U^iuE zG~zHaV>hl3rz%4DbQL9WAJ4|Z43GI0`bQJi;8UPIONc!SBzS=WFVNuSQ?oq_OhgC3 zEJawLtSkkOM@5_)NJyDuBm@aro2<4}*H%RnFt*|aje$<Dxb!-pGQ-p{FC7pY!T9p-U=xL_Uu3B}M4OL7K|b(XT^^Y05Xr4-Jr zZbxQv9v5Cg?6$PgX_r?Q(Yn=_W{tpsEAsV&y105Lsg{VGHK(HHb^GMlz<`o?exSI% zTVn97t%h}bb@U6+fG<5peLFr66G!W5Ka0oA_A{krWK726>509%wY9Z0r<=WDWMrbl zf~&KW-}8Bd;`TOPfs$k{PCYG%eaQuWXxknIk$E0Yct@)T5CC( zJvz6%JUl}DAI#Lm#DrQ@R1^-dgq{At)i+h`7`Sl|lI^SP>)Tm%1aj4^88C_+Fj6v+ z#pU~0W5MBYjhJ9M+4-ufs9Dl};gh580S$|?&<**t{TtEUm}HxhqDO+!ftF!L35CIpnO~G=C$<4h(!?8LD0#XY%u${afaai>4 z>Mvg&bONQvxYlRF!oueJr<#`bcgQvubX0<0#)?BgEA^b(q&l`^>QbR z+`g~BLh|3GX_mE}be^OLZioL$Rt#HeBw*A{6r4)+}y7#QOd2)7`t~m*@n(l@SQ_!rY z$nq37m`YUx$~m?HWp~XKaM?gxKjT1;5B`Btqdexrx2X;%YxogbTFay3f7})IG*$8Z zJl!+SYFk08u6QzXYU%8iwyUEsZTwBvtKw$$T0Fq2Da)(ZOB7yXaO$dvZuB{G`ouG6 z!3yO&ucR`FveolUd!5a!0n`P^r{x6%K+$D9$N`zoj#&)gS)%WCL&tZ2NMhwN>D*|1 zV9$(=Y_-BFDxR<8$X7LUoej(cK5SaAoBu1CxW2xw)51O+@8Iq_U;_^kh*yBHq#szP zQ7P74bWB}-^4yLjYrB}-INm628=5IYc_EXkBo5r$-mf@$X*Bt10> zEWOnGs`+J0F$jR-1E9SzFtKtNuxu42bE>^%&(p3Zw5M$RW+5O5A*4iwRG(6Of#{*t zV9-Liy-#^{*Lp#go=#aqg|Gqra>+W}EbB|9*Y5uDe2&u}UfslmxZHvSg9Zd=6ls^rq%ADfn_Cdn~nk6hcfw0)|avB#PoD?6y9Jx0ac`LbThlj#mDzL z_DW9DVOX@<-aXDdj@JeF?vD(f`=woFz$SlOfvJFcwbe$h4@g1TK3?kOp3Lf^QxpaU zrp$N<^?5(tW2Mu$`1KXXdgXR%KFfhjTC`I;6x;@ZU?hpNJ z{c?}@Y&4nd`4YKAD)k_rkrRUNBTJx=o-4G3swyQ_%m3=$)?~L@WRUzp`T4UOo&I&E zuYPTB(ZfzF6f_hDHrme{?RauI6BpK%@c~Zo-Q2CuUa)6;*lf>}N^u4K z{cqYW?x9)kr%KjOfO$)6TbYks`pZMP{qVqmR`kandJrqh%!W^>=hn8w-O|uU9s~f` zt~crZR}UTg*5$V0g}%=l)jD=vDpR~Kf9$?{#Jiqt&wA|4opO3wY`)fpQ-k7QUBhw23$0aI;B;n7}}xTtM#a_F9EQ+lz^xwW*qyPxtmJ zV}UzShtwdxeWy)SOJgUg0O0iu)PH%D;Cr9txVGLc<&n^(vuEHq8C^{-*H}t=e(75} zDYxf1s`t2Zat5iltIOTpBjw}#P?nyRTLR5?Z5R|$7-SV65OfIXtpu&uY}P)c&|)3U zwVqhv0jspb8U}yZYA2okdFql#NJv!bx2ux`uMfp-PS)%uRTPRJtIy&%tS${BfaZprMEhzH2?QEp@*HW8**RL{VG2VjU zc`&hbH~sc-d^lr_!{eLB%g4w19Hr!W`R)ax1=!RWWIadBQjP{9uw4VC!(>?B=2D+c zo{Oz;zEmU|cq%P@?vRgTb)OdOxEm~gevCizJjs06JwLCa&#azZa_)=?kpQ9jFj7f% zRcJo7XAgX(khd6`+F+i>g^R~IQhF+TY398|MSV2+h((t*o!h58D5)3w5)*v z0pRo6)sPna>#&r9U}=1+tA>7YXLq+?$sn_gO2t4aWKx5MlvHzy|0ZFU zg;`Zg3)EAG`}BN#r}170blnFhdAF;ctu`){s~9X^eWkb^HU<`cd7Ur0g?~Hre>tC_ zm=jRzeMZslJmpDe&dA7MwcdA;ds?Ew0XVkt6O$54O;ro{pDy|I=H8BBmjah<7Q+lQ z%Jf!|9(rGGm*^w2E!tz|@Qer5nh$V8PVO{{7PTg27~Vyy|J)bpyF1n)hKJ3U8pBOI z85Oa~uGLu9(_)2hxSwQdUwp^HDg&biq0~x)X*jPHR-Tiq)2xPpch%CSw+@3m0A_+- z;YN!MS%tSd$4ES%q2;MLS6jA!@t^OGPwXv6{$5$l4{JPZx<#K?YUv(CsFg33C|u}& zENry?H?kdwg2%^Ykrpnys!K{Fb8~Z5`%Nk7$`wruwX*QdLl)jaqq-g*Eyn{xAs@Nb zZ$aNEtWWOGwC~UIkR}P>B^Q9cmQBwCK5!ME{A)y^XuZ*~*O0DhtdYQQMXCn2)``UIl8kfh{~6XPvzGUEqKT+$m%bMo{%3^m|UxJC&Fr>3T+ zg#LfWL7=Frsgc3K?NrmixE&)Jvf`+zs)~yJZy&3op<(V1JiOB1G@rmbw@*(iGBSRo zPMD?2lE35p?-&P2@X1D}rZj|v{B`y8N@Hk#5wWn$3A5>b2M>VJu`%#&vhbi)*#A46 zLh)N*4`KccrMbEJcVt-VUGV*n(p1E@wzMez{{}tw8NM?+@D0Z8zZ(+*wiJwK@`5}sI@~}z{h=SFH{4lCMGqTZ8sW*b z`{dhh?S{QxD-A49z`l3q+qurb(2%pS)p$0CMtZYN5^1G^-fqjIZCyr!EnrGlC+h2760~(ww)`A)K*7Z(>t1- zbx!cyaS1&4(0dVZ(GW=G)h(5TfDlzgfOrhNy0aw}=o)0NX1lf}1*F1k*H`xMNF<_$ zjcPT!P%l3#YN@7@QV9qceE>Y`Vj&kHCFD#Iq@-hR9z#el$nlgQ1Nu}2GWhq zI@#r;qQtdGO|$9eGstl79+t4cFBwP1mWR(>a8E4>JZZs*k$E14qBDE6Sv{q7q+Ops zq`hC%B32;?GxYDCO+>y!YqlTdFxTDS{!q>80#r)`65#;|L6iV#h;9ODu#m1gn#rHE z4acIJzxp=>x|tvWF&^c(UaXKwX?MO-yfrz8*tOoVTc@C@?Z2HIdGy65Wz@eR){|${HXeOB1lKk`4<8-3;r@7f5|AG&iyE5&knfH@A0q zSW{s?%;qy{r*MIiz?fF*ixYihl&$GeX z8fwG$?fGbop-WZYuIi7EH@)TqjYhTd3o2d%z)!TD_h7NwR2dc?u2OF{K`OB36wLrF&Fj|FaO&4Eh%W#j@)z!6$`q*!u7#$v6y43(K;+bM-l}t9<`6ZC!2p|6xR3@^9j;(14q7FEtMUKWmgZ8`{bwm zCR`V2dssI2dGqZMurBQM_|OMg&FN}1S{t5adK^Tq-`>s2af5-NLul{$*C$gG)8j#O z4(YgAWtB#H-%KYbr(NLasIY3ijf$LGJ5E(ov!u~_@lf-aiHneDK9TK$}^sSOS3j%#HQE2 z-;?I2_wTm0wHdcW z6_{FoY|ADlCZ9aNpRrnLa!lwqC~bOc@Y#4x38RCIr~ zLc>fg4Tp+9KU=uDK)q?heo{;T{5O)S@OU-l(pZ(i*-Yn)Yp9caw)$r0+kB}C#hHTa z{AgmAv~tJl)E?L)VNK{zK1~y)KgdeStGkR@fU7?`Fff3lEUla`9=QkB1Q8V#NWh|u zkx?EPZ5C=phQb#Oz?Znbxlz+HUCiKez6HOIVFhMqZlC9Q)6KCx>j$fUlNcR$y|&uS zZ-(oDIYYTtt*I6;pIWo=YECL!;|wQRRgQEY*g2NSzdnO!RslFFYR>~ z-nxeAu8&~P*lDhUgTmsNg~J+H2!7LkG`^dM{&>HH^Jw9+oLv3Nc5`>doVs>9yD9^c zKhVSdMssrWbkb-k5vK3!)Uw|RWW)9k9JelE(VXpCO3g~tYtV3XNoIGj>tA$oN}sS( zl-6CJf_yqm>RkyW=hCM(%RC4+s(U)LPcEwI)m`PcO&1zxdW43e@DhRa^7QjR&JE&` zZ6c+XmfY@_Ic&eyx&)Lska4RV{|$~=xJ-{Y@BfmMlT-74<-WVvGCDs%jrxKwKfSJWC=)IbB{MFW}7=IoZbntUss6)X`6}JuKKX z&3jFBRNIyQvJJ7(*J%d0r1;uIN0&#G`l`=Q&mMkkGJ){&4v7ksKQ(KtW%KOU{0$Ud8E{A-m4) zY`Y959(qYD!CG~8&>j%YneaAlStknL1)7HCmmitR~zwYxJH)O*Rco|`oB;q+?!FABa9 z@D+@XI4Pd`RQjR(@sAZHaRN5@Q%lCE;z9m3V|Cg8`$*c!vK)D8f7!6>*z?SqlY z#l^)*z8@Xn7?b`a>sxZd*vKKF!e_Zp~I+5fP&CqZ`IM<+uztLoap zZRSyDCm}1fxI^lWp=?)ij*qEIrU2+odm8Cm7Ym6pvHI9{iNswN>D)L+v|Z5zyexj_ z^+ACiEt2kk@aDdppOSob`_|gdWxZp|mza@OC?dgZod_ml(xZ@tc9*f~@_E*h*o=&b zHbX%#7*=-6yP`m59a`zXo{}W6pt$Phc5pM=ZU*g`v*UmJHX9Y6|Co^z0wDRFSh+0} zv)QfiXCt+gm@ppd`6f0!+1xzEcNGAZz8Vq)U)Y+*TAzgwfcvFp%+xmG1SMm*W)JxI*- z*~T{j=gGaq)LpRS1$a2dsXU#7;f~2L^x0@Soh#P!hvv~lfuL6>+0%UcKQ+SPM2lq>FJ$ZUDb7?IZe&Y zX;^MfoiSIb7rB#d!lxB6F)&KNS(K^i-on}61u<|lJ3Au*R@ZUO0Z|E#mQ$Hn_rroZ zdCbEo!}Z*Tw}@ZdwV)$x`5Mm<@U|Abb5_pv}hgWY%H{6O%u za>iYg=Wenq8crix!CPfb&Yuw~Wdj&FH#_n@j|>zxX}iR;oIsAVTN{-i>S9T-x;o~& zAW%P70(6rl^%k0feng^LeVbG5XltCWKKWYt;@-k#E!lPae0z7VXp+*UtdOw}2X?0f zQ2)TmK0wLERh$@a{DPDoA0H1M>o){G*+oR=A(Ni&?#Cw2@?c4%1m>DW4+fgi@;-kR zHX`}2UF3_#JD&Fq?*a_X&&hkY@f3+kY1BYqPtNqT;>rCS7gt=tgburo22zv0y`3GH z#S99_X=!C?G*qeR*wiL;8Wd-9NrQrdMwXYgu%ux1R(NAi7AwG$mFDSXNnk3iko?El zN?|!j)AC}&ht+n4LRvwg`QC}|UpF`=-Am4{G}!bw$Yk%}BeVQDr8!_PHG9}43uuJ= z-9MhCSM_O=7+asvqNsN=W#y)v{y5e3^JVMvV`09*+^CQWtYUi1_@`jDKRRQfTDydOPfwh$KT#vX5vq}u);U-DIq}HJ4VCy2m!4K>6z1W>EyZ$*T@nWG!aj+q`$wPGENeE# zs>Hh!9fH?_=cjs2RdxN+%YEPH1LMBk^L^cmJNElK#nqG|?XJ6+ygq24!BHX%oE7ai zrs|tIoG&I)1#nc=)kils4Qgv^pPx^v!DGF^Y$A<{n_HYbUaHlj6@~gG0vxFMyg$jF zEcra&R^C0O`LroU0pf6M_k28!Vsp+}|DM6+EB^d6wh%GuV?>X@AU$BiqV523It5m{XX|XLJ_n!30)J0Yme=3VWE1UO8E- z>DS{gUH1<<^qdr?BAey8Wo1?&Wahm`EK`6}v)%f9qjfV^&ddx-0t3&Jt6egJyhUn|NaJ7A_E-I zOLN8L^^J_Iw1LWl*BMXa#$4Upnl0l&6ZJa!S})5L%;_h8*4kF~3Y(Ce@$OvT9luc* z=br5C~K0Q5^7PJ)XCj*zqPE)s7W8CIZLtrkq?g;=t6NU--Wih>Vf`NvX zV=NI(%|)gaw|k&a_e3eiTQQ@5k#!Jp=iOI>qv^E~x3X{yX$IJ1b0D+oXDu|h6=y}Ed zMY)lfU#W-f!j1I|NRY#hk4 zX?KrY;qx~#f<}}(=DKToPJ^QS{Cv3_u&Z&9vhA6hQ+Yc0Va%SMnC^DJ;^Xa|m}$#H zU}uiKdRq^|!r026E{eolX>hFM`XHqOhBtM3{5ug5FI#tGl;gn9 zEvQI%6yQ{t8$b`}cO6BZf8BfyO9ut+TEBeGY+bQry}b<#j+W5mIzilV_@0?tIN5f^6dLs2ng8y{})aMvH3|vK~&9~w0`}1En2it z>(;K3gM&l8+w0Pzc?(rlRcXuCEsBhavhHUxnG_Zlu9Yi(QFeB=va_@G>#r*m5guW^ z&ON(-cWck?-IAofefw(k=rOwe_EFYd?Bm7XP$eS*Hq=eY#L{7H^dCoP}hD_3xksKWtTh z(veJ=%@%FgepvVXZMKq+)x9v1kFT#%Q&VNJSY)wSv~BygOX|VbA~aNo4;@l^Muy7D z%CvFgMw<|_ZM$|#PCl%pq$F!Nws6rx?b)-t!S8YNbyq1W%wJDWU8o;d?bfjqr*!oA zDXrOfP)|=?pwiL`MTB1Zvs6@4ri`qAJez+7Mb&e>nmk?AsdWp@_-35~{Ja%aQ@+X5 zRZSXs>ccNqY5(DLWn|}T(NEiTAUR##I$qkmx6#otDlI9|<}I65Qc|LnBPm+7YNZ?; z9OUQcr{LgVty{ZBMMXubtgO_gO`Eh}!F*L#)<5JoF)>l|=FL@hcD5`QiwX*V3Y43h zE0eeP?=HJ8F_A&?^l;IaOE#*os7y&mGOdfjNUFD8*4HkY1~<}SY$R^G;i5f z867Uam*J(hlk+*dI4UDMUj;>_a(8o^GzE7@Tb7gZveobR&487C8wk)D=SM*PR?q5 zne$k7zq-2$3ksB+lA_$aJPjN;P)Cm((bjESwR6V~g@=V}`0x=*NQl>t9ouCz8Wj~4 zrMS4Bbq0yS!NH1%h}7Z3hqP_`Hg)aNRl|l2S3*L(wr$-iM@L6Rw`{3@xL&;_Np5a# z7u{YLqtU2{hzRZ5w@=;98-_bzzyPhS>G5eW7!)2Ju3qPqb@XU;sMn@#Te-Tr*4d-V z&DG61y!+h!C8>M&?lPOr`tipfWHy@>92}ydL$ANAA+3`1z?i=JX!a^S^!%49DJ_?O zW0UT_y{Fp6RL_<8?1Mvp^uZUaH0H5S(W&}|GZqE ze?C*LuCD6Vt(y)XI%HjVsXiS$bW~wsp}t@Goh%lM+O}<{7R{SmhkrL~)=Yi+^wow9 z8}!RBKg-?SU9Dn&W7WQWhX&toCr6`Rd3K~0{j^<6fBj9OMZ@)t=z3;D{TYQTZeYmgxjizZ};gQt=B&JNn>hOem~>6hlc3WdGUJb?WHOz zDN{(GkN)=H5Vg6);r8xsZW=oDdc`NiYs==%^71mNU;hDr3JR*8C-K^A2WjovwVFNq z3rUiHK!An~A92B6(>9-Vv9Z7E-sd06)2p-(s-Q5BNcXti$?l4FQ?(XjH4#9%EJAvTASzO-z{h#{2t(vXc znOigW_U-O-`t;6KCvIp5ZagLAd;%3Y(2@Ad=G_cjkoX?&bxboG;Qx!$+fV zsFLYDm?gk%pp}uE)ofWYZ z>l1O?X7-y69i1Ud_C2tt#{Ekpu%^_+zSGmV@DkRi4}6?tsfh*D5-|I5Sp)!Y*PU`A z1Uvc|fR9W1rP8}gk0MVW%h5To!&jB*df(JZ%t1X>C(*-n@IC|wM~(W>I;r)?Xz$3S z58r6%OAp2+qrmyDZReq&10QqeL8pMjj@IEIX3-9Dn%5;w?0idPRAyfBClub^&a#V_ljSgsAo~jSif%$GUQuv#QQ;^&ki^a+J&v-}bb(XG5&JRt(Pe<(Op%kj4 zl&Zs`L`D*UF^_Z&=;A^^D5jb$Uy8b#oKP5{>o{K;$1;LK~92zr>F4j%N0d5@BC;{H2?Z>(p83YX@+IS(j@oG4FjW- z>4Ao(fj#J)yP$brQQ)%i%%O`!?ED9Y68}@Onv%fVmhJRrvuhvV_vT;M!Bh8iM(1DO z?Hi*f=S?sGubAlfbHvZht9umsQ*+vkojaQk#mbmvt9K*0w?)R^?1R5-g1BwBC+(g) z{$3YRJMz&VqmJ)Wu9CGcJc5>gJ9oS;wEEt5TS{y=>{(aDWySH9VCOHBf19maPoxd% zqulbpPzvwvUs>M+Ym)aVYiS%7f`d6i^6q7|R=33Y0p+`BEh%tu=ZDS;7^}VC%a$!P zO_6X=;`ZTF@2rK>Y^3ad=V}Hv+QDoyy z^j^f%x)wA^?X~Bt8d{;Co7QW&vFB?AEozRImH2s3JBcw2HPKnxpm#(!;4Ih*WascF zt>#gSvRmQrx+8wtonAOs-=PlVJjw6=_ULf``&$JQBQMSl*EU(u$EGfh&oi;6NF>W2$e&XtoRA-@|sakfP<%o zxsBt?S3nS}_fv=+Mh z8@7ppfCq>e<@PuHk|}vN_9Lkxyq~^t((mhNBi&py-CJBXv2S)HQySP>qU7X28Sm1NxTMTg*|C96Zf=BE67O>~3n(2DQUwxd20dAWo1bic&)l!tR5+JKa%-k@Cr zC(rHg%&CjfGGq<|Mxd@?0Gi)YWu8AU{peE=o8rGXm9l{jTFrw+J zE@14SrnDKcDAz3q>DJq#{u#fC5V}3LTpW8SE5vi*t9AH&6QxTk)|TTU`~g-;Yv3v0 z9|t20clQA|7`u+TnY>uxri;u9n_`ir&ZX0ES3_!%Nf<9U}hY%H~GvNU>jUlMZ1W0R%{nc=IOi(ZGrNpyd%`|H;UF`deHJ#2B>v z#8L6gl6*x$HtB`oLOe?;ebRtn%`cyMdA~FQE7ekb+ED3(Pa+&w~=gA7VQ8`O& zE-T^muz$_3BXQD!iT^_VP(!0z96}Hq6i$OPk_21j;}L>arjOIha!fwh59Q=)ThpVV${VUMjwLS|`2*qNrIKWH~bYnMcSrxNYewGs_( zh9@H^iqVig%d=TRP%jgpWxzedyG&1ru3Okh+<%=ccDQAOKzYYHL0GYjqc1bG4%;KW1m4_|->(|%);yWgU z09E(aHqs=@#Q+;`a$ya_=c%7?R^cv@vg`CIPD5&epn|`rHuOSV@B1nBVU~H>8T{XH zSRi2hi4z?#E9F9$5#O+PIJb zxVW~2{L3CMLptMA2&DYB@--SJSGKT%8nk6f!e_@Vm;I(nQ z#jbPg5|oQ9+k?&p#6t5NKqX5GT>Y@eCV@7%?lA7ON{gjbp)i*vfkEgnsUEjk?Wi_y z%ENxDkn6GNblA3SA*dRIlnCb7HnYp--^dwfu~!AX$NkFTzSXK~qU*`#N$9_N0q)*| zP4Lu=$JnxgVhT?ACFIH)T-Oi|K~uvRaLGBMhJ4usCOKPollu4I2x zpm1ZyQNJ``vSDGQD>bOLNcOm4(&$E#qB{qpiTCaj*K0RQ?gmPigMK*Ur6DeGqAkma zc{H3MUbp+7LkY6beTXGkf0{ftY|;7>G_cVgQwjM3)bE`+1jWyy;86yB85XV5;g04U zC~8QSF!y5LBW7SgUDw|=isHJ@Fcq73kQ!77W`LD(htQ=K7u{p60<=%QEQ#>6h zURzSHh(LVJgeJ2vAG~iwpS(#$q)UX29lG`ffRV4*GVoP$UHtjzR+eP5ICLwp2k6kE z(R#d8)ZVdM(~W)&k7!QE zUL<~9yilh*i$G_Gy>++oCqo`^PYkfbpV!yavg(6AJ6sK6V zP?xo&65>8HR+oDA`G+)m2_=Lb9lNtBner$eJPk)c*tn`Dn|JeCzgVD(Jk0Axd=6JC z)BIYw^0)-YH30a$I@oHwa+CfNt~FF_z();CMktQWrK6A zxlmmx(jwRxNyuKJj7M!gqVdU~=^>WOA!CyvzEvDtksQOFh#xveM*NJdDGsh5;F%c!%b3sV>Z)7j2EAQ4c*>Hm5{GxLZrhhEuW3r z7XM2tm9>5{FQ}PcEgMgPeey%KX!fg-6RF}?K3y*e5iu?@wZbYZRVUL!aT7M2F zRNZzev*C6Dv=vu51@x47wZ_1Lo@!v(7QZPP9^az^QV)BK7mb(X_%RgbZh$j=&Wyl>y0An{J`g*bFk@pD6v z-f};(n>tdMPO;MJvDid2WPs)+KO~7!i?9AFdv_5H>5KL$WHYkJ(M{N5~RsK_sQkn*$HW7oU*8(aP)cnY4@xAfI*TY)Wi; z*JY0lK8c2(gRpznu;?V|5N~#!M8ALD#gmyy78)t*bkhVxUNRb?07AcWIEI93!qlX344rxzP$jD?ffL+)Sli zqe1_<9~+zcH192@bdLzwi`*g^hm~}{6yzYRF2r-Nrs_(BA>5MSfU3s?|Cqn67=G?d z91nsB^QcNpMpe9-R@k*|k<@OyuPAR8Z_%;;Qc-^5LN}$@CyOu&w0y3$A`olrN8qDN zM|tb=3k-{Ph$U>6Qo5hvDqx1rh|-ulB?Sx!xInt zZMIb|=Vv{rGP|mfvv698)(3wf)a*Sl!RLU@rilVR(EL$wxGkgPns$cq{kVt^`zztk zGXD@tri}PL$IJJ8;MuT_BpR9SHDVlev-ZdXXl#CAj#6R@j61+OV#SHD`Wn1Y3#q1o=cy#tS8^E*>BL zPjW3<8xONo#)~kR_)s;M3VWJpx=0zHo#8%6UBVkm6chL<@>yuVn-%PrD_+%fq?Qxe zEr{juqeyT7EL_tqEbz^hzHzOJCh<1JF$Y~VXz@TW;c5~0=2qTMJpL99 zcDI;9z$^an)UtwNryzGWgss`=JVh0vE61I@5E5DZFqrycUL<)+o>%OpL-WnUesn+; zr*f1W`Ol-(c7o&&KJvKD^o9a`9YeO8?^K@@OU3Fnm)Ay=+j^_6sj!>fSx5WT3x4;I zC~f^Vh4xEMAUz+=HOt?>I^1=uL~1MY{Ta*l6^I&&)H)3eBZXy`1uakyQQmdllcbmJ z6qXXT>)3&y8->6PQn9nKW;UIX4STw z$hyzEXuVRppf8VN4ihIt@fSEA#P+X{*_G7ndPkV?Y{?le5%u0|CXxM8l^@DOk$slZ z9>6S0>)9-;Lp5!2jJ#^o;wI@RlC!VDC>}ay5Hz$0WZ?XXh$^mJnDYEQbtd<$be~T7 z=%{!qPKiW(dQ(fS#VUVy1ZKtP7hcP`)=@E7NFF~m94Uf+S^kE17lMCZNQcPi7n1eX z!X6X2p>xbc)m2bMeIrz*%hiw9?xlL6egiErA-?wu9ue5{?A*G=LyeFrY`fk;5?l!J zOT+|hkZ@9qNcL^!ZLI9${p67}o5hJ8Xh$jZlWfIHuolu+J#@c%tSmbsK0LL9l)v`; zfzbE*EV1OA(IxeBy8;>_mOnPACR+TQFiL^;?i6>jvNvvCh=0m}DQB!vR9%cioD~SP zw|5+Hk;5DIX2s&=*aDa<-hba^tgoazlg0q)n?T&3H;QrayPgpP&{gM~!e`6E=7wTkqqOe9 ztS}SsyE!d2Gy3uDUVf{G?$U!?L?xz%=!pE?VZ5cd=wzZ zTwfg5P(xk+sC5L(D3*m2jZNDr$BPDyy?(w33W5F>bfsf8Dq8EXO3F-sYy<}=4s5v; z3fuJYm5(?JnF)QH=*OFlKqQABhFE}OIap1qfcLh(WJ9hhLZUhjM;$Q1Fh#l?o3Aw> zM78F4!_0{9Wa8v)uX>80`f(#L1 z#uX)P8Y!oBl*xwql^wuwLTV8V&*u?UO{Q1?bwSkDl{Fr@ zwOR}>RBpxD`U?s&lW?~2wG!`giS{AJ$h<>Etbwv(QRD@m%I!`)WQz&Bz8=o{#P_D% zMO*0RqR+5#Y;O+S->qg>PAL_Ck-z-jc2UMUV6Pvz8X*9Rw)bRca z8V~KCESG`cE9EB(DQEs?`Tbe9={PMvdq zib0uTXAHsUHb+ZG`pbq<2Fc9^+7O~XSuJEfY{N|#vFUz8crKlUf}PluzRe!pt@D@K zm;Ug6D2Dk~#y@Q|uLj2zQ>94cDmicvwS)d5lXKk)H`{)++nLphofp4Y=^4*YD6a(l zu(wn^|5%rSI&y#e0_78T%^GgXjs}^?E7FZ)8jk+Bmv|+A=7D#BO2B@{Y^rPym8bV-}L`$FePwHYCP! zN4-GXp!sdq8Q{0}%24F=e_!23WvyT6lAp-l3TukrtnTAr|J9vx78Dv+{D=&SK}%X^ zsCU9{M;#C4jsHs4a$?Bib@rPjk9kp}xMc+Lh~p_KqB+Q_LN! zM@%-Jr3rMIE~Zyw9P&RRb-C~?Q!K*b(r*&VgIiES6fLc43!f#>mSX;OzMrS&U9tiJ z6EmLaB7Fx(0+T>j@}+0`hX>uxCF{rJ5Q%3xV6o>bwf@=c6n_`#r}Dr3pYg4U6|w6^ zA379FME5iN?BC2+PI#@C&EN`Qu|GMgGf=|hD*$>u8^oBLB_1bMQ+l`Gj&dkt?yArh zKi~03Q)}k91d?3C6TzDQEnR?@>(hq5mQ+>^Um%l{#;ezpny@kORv=oW4Is9+@QITg z#p1KOt0KdIYAJ7Ck5jk`M4yXt5|sV!FnGH1wVk^N--}sA-E<)+E>%Cziu}z3ZnsY( zG!VEALFvw^8`kG6&cx~!4P3%qXyu0YpE>bju%L_Zb&LP}9!JjA-;duFo)ZvZCGVz| z9GEem1|x>1S0?ZF2jz!yaK#A^q0O?Ph!1`)BukTIxIU$veR%b>C^9Gt=d-oUthDn2 zUutDfzO&sTA1+AJc$J}Y##zWOC`-$JX zBDx$iSTMd7;Ko1YsF%~{|5kBpUGsz`3Ek8uK&8^0#9vKZ@Qj)TB}8!wtI%#2_$lwm zYCP~b)8ASD?N676%p=hKM01(J;&^I@o?jjFjO~7}rS}-Q{PNV6@K_#J=^j47j|MoP z)cY1)N@Zz2Li?U!`a5G{+Ea8sgpm%##kzw^e`+ZYCQl~T`7cR+kArOuUj6HehgHL2 zghvjsM47*}v4yZ)q~^_!?5==|H{-k~=4r5m`KQvke)>0` z;>?t{7s2`VpoIw|Bc8mSz!l6d!Mo>w)EKEStNn6*sD~N;wLb zX4CAALqI@=Bta760ffUwY9-`MfwwBWQvzq~>?ySl2nC7^$#Vd@TfIc>&yJ`j6eLKLW&WG-=`SasT$Cc(31 z>0yc2eVL8>Z2HCA0?#!uIr#FiQ!22|(>eD5xR^mxxy6Qt0?4l!IpnjvLcDwyxOp!z zq;zC7BW5B-s13hAUYmD2BI&pALJzIq&KkwId)xAE9I1_^3p}2wuEwe-h4}!c2F(sTnZ`Ca4j-fj;@N^ec|7n$ z1&GWH-o^_&XLfUcpej+dNYYK4ET@=ZLwpH zTfe$?L^Uc4*8~Aa9!Mxxnwp9Qlse)Hw!F&v_l^c>QBg(Fl5jDdhwR8_I~Ch!y}}nC zb3U|no8(V413Jp&IlC=jKnqZ zS@??;Mn*=tuLwP?FgVV}+j4o$LLlR_=Fj;HzwZj2wf-1FcJc7gjJrtV>WDSWy(#oK zU$4QT>8l2Ex4QCpCZCm@JYChCon?B?-7i(PL~vJy`;IO}{dRwemXui@=kOS5nVAi( z9Z}P0iN;LAcuO`}Mw>d*R>xDWpxl1^l2kFE087XUii+m9EmH$r>JETn{LTegnh=wH7^Ql;R**#Ou>MuiT=eSpRc}=#Q>;Z^ zu4yX9N*>^(R=OXr{V972EpcJR{rlHUePTD$8$&JbfR?}8;?YyWyv5^ODXs2dI4lAM z76>sNfKJKKvvR$tv`KPN#Hz>$JA+AC(YCDhw5(Q^(FqmKX4f>#Rbc3nKmtSY?sH(*mc4H$L;QeZ1ZBUjehlq;0s#i7iW4y8)dNT>@evTzRAE(TtTj8>N*1X&pPSYIRZ)4@^Al=ROOr`!1^&K7A^`)`tCiK2sumWd z-90^7Zn=Ge@8#4A*~U%w*NK;)t%2c8u3JQy=5mriRASDrA|LHT7J4?inZ$mNYziND z6cSQW6&YogMK6mj&bJm4QWD&&XAS*FGyS52bzPd`u&AnHd$2;+iyY4u_me(A5B&c& zPQ$>UCL}DeX0Q*HSXNUshit)epr%s@*VV-(CCC3gzq7rV8Ul31yYbz1mLXyRB|V0w6o;_F;ZL_88Q*z5G2+u)5Vfw<@PAAgSM2c_Oud9X}@W z(!V72ty3R$(=*OJPa&(VT&Kx`8xcCEL#yx78~HyM`5^hvMIKHU(^yX1|80u(TpgNj z2^`WJ%+-{R%$>%-QOcYbiv9g_SbYZTv7B~`aj-S1a9$XklA#8aqgvFe=l7)!jhLo0_=Lh`D>I;i!@`DAm+rcW$WAT@t4n zw+1WBJRNI;gS815cci(WmFl?mssscCab4jCY_&W){4rJVHm`K(IZJv5nHUcB;g|nS}bRTvm}hBEeCS;K|@J1$2EZG_QI|xbj$YqOj4?7NBzLX;{#x3_Ia6FaT_ex1C3cO*o&1Tf;M+P$Yh?6lE;vHh4TRsZ?E<Me4`)@2&722^hvPdtM$F92>)qy6>%j2u^-U6)(+wKKITaP3cakK~&0k=2 zWJK!rkYzR~B<$|h6|i>^QrFNp0h?rH^v{a*Di<;fW^$fUJ~SMvY+`IlS=GAPeChhH zzRkVmiAL?emzQ-jr2unLh|2eo=u}E7Dxz7>DD1O{5#oka z0Qi|zRmH#3+5z<3m+I?hgC2`e8Jf+@@6VOy-%y1L|BHSoXsBlU7Zm@SHMcF7TZLtb zT4JAF;Vr)nT%p^4x1HXLG3z~+brw_ax^Y6!^$Ndwz=NNjpK002gB=b3mqT~Z)b{|* zqjpW7`+k$mmwnBt^gLQPxR3!r_xUWP%%T3?)X&Ke@b+mxPFk~dqwo9HYj_cPiDqvQ zp_lmnJ__=AOUeU1%I%Er%&2{rG-STCa9B=hW6|8nwFk9@)h?{aai2wb!@Ib;YnFL1 zfu<3QvItdW=VMmf7DPm}D`|`}%8p1n42AeZ*SdRMci40o=Z{=hRs?`njrzJ?A79mw zgWnImseUyCD2*-B||p{>-WRnzelUXRcH zEJ2;Z(%nqoqQIp;X;DZ>VNucD+6alZFZ(uMKy|LyDPByMYvH#48M2Vqju5}kUHWgO zbV?;9)R-RsX5#isVj@6JX$3LKs1eV?N0=hasIGCIUE#&=r*O`Fhwjgx$0=!si|#9i z6f*eyX7$?vw_N@=C!9TR7cVZJo?2iuJ;_=#8XGL44i`?&u0CMUeA}4Wi@>01c3pA& zXt5Nc;nDi@#{|dS?xo$s=U+nD-Lx;sYIUK1L1L2H^ajPk$_gNr=l9ra=;K}KKrE!m zBrXnGOp3Gpoo1wiW9#hVGXLKKC)A8I(k{{%I61$~2;U~NH#Mpo*z;Si1@!j%>@NYQ zMsx-AWw?dfCkL@ndN%KrfyGcX{C4bb;5~exPz%?zR*l7=RiQTG`Y`Zn|KOmIZq^mQ zaK3+0Z9T&i4K}-?eSLPC;cJ(n{~J@!)gC5RT5`GG3UlV$5|V9tyYuaT6s70sz6&&s zM@(FrG7*qSX}{g6LEM6i_53yg1?>9<8A^k2_kb zs)hCStn_>2$y(|ao$HKBaZQ6ZA2&DpT(?e3QE_pP;(ZS|hS`Po0v=W;iJ?c?B46SG zo1e~o;Qf65JNQr@EmAS1*Lr&I?0H&7g1vIqfB=4g{&*}QpDD)@=DX*dITYYE)6=Sq z+QTa4i(*FmW|n)%vQ6}OHeDe>WM7}2IokLS!20uCo>8-$e)?~U^v5dRC#2=w-@d3rfq#R~ z@CJ{|!HM^!#lOMarLn%j1OjQ}F)mK=V`hcq{~H03Icml})*tkErrMv=`3*NlG9@`# z8SVeBDX8n~GfGKG(eI)Ecac{>fPsZY$)ZWe(9rOe>;J~=63SC2As`}ZsH;9po^Dk}PJ@jaE*u}1&5)#W_!!}IxgduX=0CU-!8w_j26Gs^NTd7sgrNxV#>B_j(WP_upS?pSYh zkD{~|H{HuC-J&VUUYxzYEU)g44BPc2&U&rsHEhfP&+BUMZSSVh_wM5AYJ0azB;ZNQMkd;}=~4v+4Nb6VIi0=6@BiF9 z#VsNt5`)K)3WulQC&|!aeBx2FlUiM!4aLWgkA;6+)bGFN_Lk2Ku;bc@;Ix(B2K6Qh%A&k+j>okz&$AG<`*e-Hl1NUZiO>f{uHEJ_1*Fi%=X`mU9${Pgk4gKsl`e0A7lS1I^x;(7s-de{K~p-ZVdC8Jd)o=($?ix(AmAX$j^j^Iyp zmW`9gwQ`+|Ub##zDpJ9g=_rfh^1Y^hI|oTT-{tN9J>9!=G&my2d#@}^Wbe5flJ@rQ zv{_sC_j&3e;W{_k$5JKuksFoP#>4ZBYP@wQK0eN5=c4@d@>VnmRsIbE!Uhc-WADoU z6+7ma+W>NJtJ5D({(#qZhfeEc6e^N=a79HWGm-jMxZ`oYIMudkgUs=8zEM_P%?Q){ zd3Ls7MSCJ$1juFQ;BY^8U$NfmbVoo&S>CM*qh(^!$l`I-G&IcB*Vo6y!z+1w^saZVxM~o7H*1ZpozEtZbo~%1ud4 z%fX=r22+H%@L3K2y2PfYCQ7d7XFMz{tmoI;6MS~Ja&n64chw%3C0Xz}>#u$9vLYVx z-$!Co9PNJz82^Hp%HWWKd3w6Jzvi>ts?%-K&FONR`#CgpyIm9+iQw()TLq@!9|?f3 z1A7K&ZRM;vz_u|`ZXE0QvS#Dw!{V>)1}^tJt!gF9x~1HZ5%UIZOai=WxZegPzp%II znJZ??UqqIDlccKby%bPqw`A~qd`_X5a<0QG6)a-X?}FZ4X1+{i=amZ!6}n%pRwbvX z0zFIxxC(v z7^*7Ai!*lYXP;~6=;@i&s*H^kx~U9v_HD$rgA3Vvxa>PTNTk!+(z>X(@asC)3^iJ0 zj3yNpGZo;}Rdi~&3#PcPm%ZGh;q9+=6|9gb*bPoo)J3=9Ua~6co$NK(*1b0VVmzB>>+@r?U+feM3Xvz!m=Z+L{a;3gK+AjOWDg@bKZIW8Y3;b+(v-?>WlTi;r%b zR2W>jy>_6-g`8H)7~=>(5ai-2qQob#^twtg+ntfyZd?CbnA;!>+?cB{n79=-ic@&k zY)I(ubo{4bnFm6KyX&9Sc)kzuU91teHCV2QY4JQvC-6DRBH=zej#!9+O(8(XNJ&Ym zA&}fAl^K^-T6z8f0xv14%#s82Z%M9!jV-ZwZ_l(wuS;`eK5h({n^WoUCp%pzi|g+0 zHsj6${RtznTCF#EK5yGm2SWoMQs-%973MN^b?NrQ#nL^I02o{T0}QYVa2m-_m)vj6 z>$rx)z{jL_IjvoAhf%gf-P}=2G&^<(x^0>Gy*>;*GqW7XuwlJe-!yXqPSaMW3p|y! zVaqURh|eXVj>`WGSZ%P(gfC=kC&qM0Ef0!2zz)3rl?F2AC$7krlj9j`UX zjO4%*uhbdU?dFrhz=a(zo-F8gx>byik1zIpK)}GjT0dOufU5v*8C7%hl2k^+;^=53 z_X}WAM`dn~-|IL&;PKCk&q3Cd#oNuT5;zAhE{TU#NF-dTe#MZSX5 z%|cKyB{;dNCgS_|Fyr9h{8t=S(9v-p$;&Bd$Zz19ADI2;eE6!eiFrn@V8mu%pgGD0 zB_<~qH_ofNpU;E3L0TFbR7qpSApjURz>t;6cPsbS`40!oA@uKh^jjVBxX)!5Hdr<* zhZl(F{l7n-Zn2~?FtjNr-pvbefnL}8exF5wGjv&4Q?9prfjqTqk+}fh(&nYP?SsvD z5=Bk_@5Q)))VQ=Pi(W1jwY(0QDjwolPmvXQp{u&MfW)w@B#S-{8IElros@-zr{``O zwQ|9G<@eM0v&%cI{dPvFRxV*d2gzoY=(V%Y1xR9?SBJyxeP72m*+{#P#V{}b!H}>9 zq?f2+;D7J$-{ci_PdGWNH?vddO|n&1;Jaa)|pWm_t6(cWY@%Pe!&N^R?uch60BfM>AYw){iSXX8gQvU6=u zokdg0+=JiJfqhE5(6GhEGt=1V7KQAzVl2M1JC3cij-g5kjEEzk#eu3dED39*yp@`g zaxzjPQtAJK(s@=Zb4s+M$DqZiWnp14#nJu`hp&s*cHl<@zQ{XDM`wr4$$X~CISLBb zrRULfPUm5!N#}m702aoUrmbdOD&@h^k@eE420o`%{6*gf896h(c_=SKm6l3 zkAyj;zdzsl1HbNwq*t>E$5B;N(Ija-qG+ysc*5i4cR|_-*du0>JW=N+VF=vW8I1NF zy7jMx3c1RavaywXl~GV&74o_a@n~-E{v@;g_uR-B1Yj=t!A2Mwf4#4Es!J6#SIyPw z>t;0d@i#!o?+C)b!#E_hW=qSL31z+ap}bpY3v{x0{d{$>(c)^UTucgmuQyFoeLoL#kPr|OJAm6@L@>$YBWa)GHw z?TwS?+>fmNlnjG>|FIaB%D>7RLTtTK$pd;%6N6h4bW)A(yH2GSgiCt8+ZO5e{ksr7F@J)sAa@R&lX zDCFneS^jcCfNs~xo;b3lr6pjCD(&g%+4A|bvf+7l5gpwaSanwY`ZbV{h-j(D7d5Ni z`N6S|j=8o6Y+Z9!Tue;N;&u<`^*#}qL^D=gb+GJ7EaWr3u+X$U>)135##*Qrcu?2z z84H-B;DD9Fqy2(bw4j)aoi@v87bTn%W1Ccv_eSqgIIJO>ZPN}Q&f-^-;0cs#M9BDn z)>Ljl9)0;|{7zSan_EJQ6>4RfhHGdE`223=U~MNQDX9p9MzLHeuh+%dIRQ+{_IyVe zczCqd)-3a?z|&gpFx&VMT2Wput)Zb&SzcakJyOfej*D~y0xdi`?_&{QEc|U``KCH9 zbC69xe?I6t1}qKB)QG*hDSR~b*b>;L#k53~9;2^}uNSqb*)d?HsayTs%@iqab|j!L z3K6Agy3N{D>}+)`DPJdBHxOt}Et(TOp;6-Ty6}~JSQ5$Wm3a@yb#Zr|pRHOyQ#XtN zub9hcOQdGK>XBHbv-&#$A3o6{U2Dnny-igLL1Og_;MLA&yBe7Jd<96IGo}X7e>rT^1 z;rjEdV*N{5D1dmzcJ2SH{b3YubUWd4IF$vc(RfD3L)ZH@I+okAGW=dw`Kc@)OV6Nmw(oX6zOwV+8eDcYv$`Qp zQ7x@~`E-s>{;f7Vp)0FN@$m12m7B6M@N2CD;>|V;($XAtQ?lsYuk_y#)#i3KIvX%(3@LvcJFIW~nm8)YSCg;GpC+_?0@vU((sR zq4(A0C+IBT?Rn+JZ%W935ghoLFS$AEh2}X&?F}9$r>9=i9&_qb{xiUGXi}4k;nZfe zP%$#>*w~l~md28T0}WH=#x{YJR1rOW6@lQx$*bwqt3weA_+2*e1VG+3m6Z;6ok|u* z4BYgk+eb6gJtL?3QT7CG?D!gUKN=w++A;rAQr?xB&pg)nj>=z^Tq+mj?Dl`hthagA znXb2Lv`us}h=?eO03WYSAW#$HeKwF@v1X^aaco5-tGK-GepVf|k{w|OMu5uEW2+6L z-*2yAy0zW1GHsIK!Yfgu+oow_QwfVwt>ZVewWVNg4)Rq@O-UW!>Ipz?ppc5AWe|{p zhDGi@?!3FZO9rQkNCMn7r33UfXZx3q%&7sMs5}1G+qT7-QGK%rj*tFT)LwqOL2xWK*UTaP`9aWd6;cnx zvI2>vgB2C)t@c?zjYM99CpdZVaL`IyB+0CzDJjc_`KnW5U%{Ck0jXLVql!yhXaFib?{Q(%buN=lt2*D+CUwvh+T z0Q`IMr*N^TwZKqQv7hf~!p+UC89o`@=3_2r^78Site<8B>xWM;mOEW>adj@PN^68_ zV39FtZ1Jz_T_3w914g17`K?_J4BRtqwYe*}O>gKpEh2*eZq7@`*9AlSGxHWF7e5lu zf%TZ#f@Vhh4cBjPb=3ggy@9rVExeL{MR9UctBA3H{$t$g_V)Jp%uJiTk&MiL%8Z|% zpE-Ay{dx%{xWoqAb=po-M<=7ZyJxAx6=%z9Fa`k?b>+SI4M)EfTtq5lx!D_6hGX{< zS8`{#(_j80A&Jf5_1yuZE126R{@wd)wPE3k$nt#qV!95DJ!Ma`%tie3i@{$uaH!>C z7$=dnfBy0eZXlXxk2cxg(%fRA9}n`_f_?0NJX2|6spJsnpTF;el@au#bgkcN&hitxlWG(4lYd6$Wc0L+1`vjquKoq zf`$|V0(Shre&&XzgoKpd!|lzDs+ZRf%^K}mu%CfDWHtxmSdr1;&Al@{zV}v_xk8D> z?{6=*|5lwl&s*n~fkaNTV`b3sT+uf0enCtuD;euAdRp55 z7t;kS`skwS|GgP2H1)%ul$%#9v&EvrM{`tMQlX##Z$-9gq1ebEeK9XlMJ44bEGpCV zZ`Z3;u%FsR2g}*XQGqSIw0-x{nsBD5Ov~1t|5=C%3s6i%pr(DBpqx`hN=whx+h45E zf2sUpMYQ%;hqfX5WX@Wh&M#4ARkda>+N8&)%u{6pLo?4;mLy#}ppzE-yhA54^Hfn; ztpz`AS6+Ux`t^#DlaoYrcIk{ zLdcGtIw>{vu#%ILt>M^r3%}Fey?dH`j+?HzOwr*1dV1=2`g!#p9XoMKM~|P<+D(V_ z^wb3^FRxN$Sil88MnZPZ=>nou2-PHx1wvy_wsaAe+xfP zee~689XOn+tlUB^{AGs@re>;F*9)8XHYO%kBu%SVuabj^g{R8dK}+})hz;_Rs3lG1BF{|+A4ip2erq}=?Hdi(!=QLk(JcT~c* z6z$x5Ow}f{cI-K-^;?p4b>H@U(*^+iDKPXK0Pv?3*FH|EX=%#I$&r(jf3w(YEc|v}@;1MTAFa#E6kfOia+uojYVS8WkNKt@!vp z4F-uJAt8#4jMCx5DcZhcyL$HMso}#%C^0cX+qZ3#qobo@+O}1E->W1^Zf*&#%P_IMBj&gN%ZLmj`o2#2# zTwLny?_PVY8#W~B>#yg?$;nBrTenv4-tiYTq*apcAJ<DdnVf`16oSG)528P7d9OrOt7&`a<9ppvo*g$DWP zuMZ4UhYK8T@9yTNYp=ad35f~Xx@C)+HS^MdfrAtrTr*GN)mIPEx^?R`Yt~niq=3Lc z4IeS`oV})Pe?IHt;%e^8k3Xoiv{bIHu8NF|QuoWc|J!9Z#MQ+~lb;x&4`;5@?T>t> zu$KNBd&A{=`TeEVXQ{DvdA@dW`|zH6?bBr%|Jdj9YUZkOH(sHHtts_Fzoxp-cJg}z zuV|-NK3J+rPtVkQlSk{(iG%gU-1VBhXp=g{w$xMiP7Kjo)0XR{cYn~!Pu@^(|GK(& z4%1z?#_OFKE0mXCs^9=GJut4H`d<;lH*EmGpMs&hqS8V&0000000026m%@U4hJFJ8 r000000I)xoup9=dm#-WK78d>wG@<|HuRcne00000NkvXXu0mjfJt!hv diff --git a/docsrc/source/_images/fittrackee_screenshot-03.png b/docsrc/source/_images/fittrackee_screenshot-03.png index 10f053c26df21170fd5d8552e84ca77d794e822b..328faa27c985147324f124f6feac7a9a54c79d96 100644 GIT binary patch delta 12872 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 diff --git a/docsrc/source/_images/fittrackee_screenshot-04.png b/docsrc/source/_images/fittrackee_screenshot-04.png index 2fd5bb265a3473c0c47cd241efcb0cdc45c0340d..2df02eb32156ae0e84f500769eb4bf08bd4e1da1 100644 GIT binary patch delta 13999 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 T@NqrbU!e9~gFE@RpS=DTNle;o delta 13921 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 JxcltYe*(Gww{rjh diff --git a/docsrc/source/_images/fittrackee_screenshot-05.png b/docsrc/source/_images/fittrackee_screenshot-05.png index 5503dee9e848c33b7deabf420b15f998ec085f86..97b8b85abedb9338a9183030bce67bf4b7ff9f7b 100644 GIT binary patch delta 11163 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 Pzt6SR_0?)r?BD$lPOp2N delta 11095 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

*{zgFg*43^imug9Z6r%R&NYyTk)h@ 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

RUbYHBjTwzsf0qJkFF6<5@? z>5(Sebevm2-}a!*a&fAkI^ZdfI|mBV01&Kwm9RqfMF<;~61 z9k5FC&S%5qPY?`ysa4m9^^U_fExoGSFoll0U6+UJzF3{r-#U|*LkUGo%mh<=H3WMy z7Ug?;RE@X8&)7IBrmg|a)6bs#4j-P(ZasRWNzJQu29w$TT})xTEM)t;=#A0CW}tO$ zD+AKvm}05#*XGvf9JMxq(KqRc^6u~b4XgB!+rO|^g&rMAYr7t5F*uPCI{Nyh@OE#} zkd$Xw_*yPU_SUwxOFa$hbN&VE{jr|6!bfd~OnvfL`@lk~#H7A)?Cx^tu!!GdUDNT{ zR6SRfp0jiCr^2B2TDHyt0>ozMCltYt zjul7@*U?l8opTZ@({2r=_LTsG%4hYYW+1u~PpnbeJ&O9uM-?Z z_hNuUXmzz7a`;{zAY;=CN#t(7b{sD+FJe-$0tusUD`ufXL&`{r8H9}=uX46?JP+vJ zSU;@3nmf`%5@p@EN!{wbf>!uLU18uPub4(S&lnQkhd$Nr6(a7eJz7sSqf8H(VV~Uv z%gc&nl4l#w&O8#^GnEv1&Yh2eQeezc<@ULfmXe`o#Y0WUw}r!(m~75K3;~T~>2Ib; z0$S0EnT~~w&yGN#{WFx#>9hy}l%M>>cg$>pTfOcZw1wFszZ`I<`(%qkr4?O9r5ywmVO3g8e489OZQ+o#o@?xa%5^?(*qF~C) zAtWqpD4L;|M2Uyl*W0@@M`oQZ?ud(ug-6XoNEj=i=;RCW8G^$*W*^N)x7*xp+g5-l z@z%CBsD6zZB`?!1l0WB_rxFQOCsy@cX0^vVnBAQ_g4*x);_rStXaqS|^_#!TsP21O zgkt49mj1(UZV4G={GoP7GDF9iRwk(LG7S?|hbrd9BE1rH-H?37s#Yi@gyZ4Uq(?{R zTlrYAc9|737iHSSvi8y?7fM7uGk6;LtZDjj&Qyjzc_4h}N-~>6P+vQBI0M+Wo1K~4 z-zC>8uN^E%8+iS&OYTlGCkEM1S1jGBId+=50v?fW46<9>s)STmyIeI%@2wB%j{AuH zu1ekLR<*S^kC4l61vft=`!{h7YV>eT#DUzKyy-OvEPs5{w3=D5S z!MA}rqbf=v*Eq=4o^@^vEd@pS={mC=tlD((hi~GKA3tWe-fIS95$;|fy!a^)rRF1( z$cU}+XrCT(_dru;P=!Ny3fswlf4iwYy?MMpyXn;+v6(hkDuh{iwJc#mxaydxCV?dL zj{7-Gao26T@PL1G@^D_r*Ksl=qMNx7ki6Kd$>qwZMm5cPJl@?+^Ro|yFunIBA@!E{F9hEtSU$ynhEqUI2%64#Y*g%Gu z$XcQdoIU~C51M>h+V^g3Z5&P`NZ?O}&7`xuAI@!K=Z?+H!C;mDogIA-0I$N{IM{h6 zsPu_-)rA)FXDldQo8*hF`EhVBXA7`?J9dwr-cMno_?J@r tzc*v(w%y1$!-W*pEcG=hsuS5Gxdj6$x9E3C;eT(=l;qXqs%1U~{SWOOS6l!9 diff --git a/fittrackee/dist/asset-manifest.json b/fittrackee/dist/asset-manifest.json index 71f90be9..86686175 100644 --- a/fittrackee/dist/asset-manifest.json +++ b/fittrackee/dist/asset-manifest.json @@ -1,8 +1,8 @@ { "files": { "main.css": "/static/css/main.47c735b4.chunk.css", - "main.js": "/static/js/main.75f806db.chunk.js", - "main.js.map": "/static/js/main.75f806db.chunk.js.map", + "main.js": "/static/js/main.07bf0de8.chunk.js", + "main.js.map": "/static/js/main.07bf0de8.chunk.js.map", "runtime-main.js": "/static/js/runtime-main.1240af94.js", "runtime-main.js.map": "/static/js/runtime-main.1240af94.js.map", "static/js/2.301144a0.chunk.js": "/static/js/2.301144a0.chunk.js", @@ -19,6 +19,6 @@ "static/js/runtime-main.1240af94.js", "static/js/2.301144a0.chunk.js", "static/css/main.47c735b4.chunk.css", - "static/js/main.75f806db.chunk.js" + "static/js/main.07bf0de8.chunk.js" ] } \ No newline at end of file diff --git a/fittrackee/dist/index.html b/fittrackee/dist/index.html index d1494370..6f3d7ef5 100644 --- a/fittrackee/dist/index.html +++ b/fittrackee/dist/index.html @@ -1 +1 @@ -FitTrackee

\ No newline at end of file +FitTrackee
\ No newline at end of file diff --git a/fittrackee/dist/static/js/main.75f806db.chunk.js b/fittrackee/dist/static/js/main.07bf0de8.chunk.js similarity index 99% rename from fittrackee/dist/static/js/main.75f806db.chunk.js rename to fittrackee/dist/static/js/main.07bf0de8.chunk.js index 990290a4..0069701b 100644 --- a/fittrackee/dist/static/js/main.75f806db.chunk.js +++ b/fittrackee/dist/static/js/main.07bf0de8.chunk.js @@ -1,2 +1,2 @@ -(this.webpackJsonpfittrackee_client=this.webpackJsonpfittrackee_client||[]).push([[0],{203: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"}')},204: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"}')},205: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"}')},206:function(e){e.exports=JSON.parse('{"Personal records":"Personal records","This month":"This month","Upload one !":"Upload one !"}')},207: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."}')},208:function(e){e.exports=JSON.parse('{"Cycling (Sport)":"Cycling (Sport)","Cycling (Transport)":"Cycling (Transport)","Hiking":"Hiking","Mountain Biking":"Mountain Biking","Running":"Running","Walking":"Walking"}')},209:function(e){e.exports=JSON.parse('{"workouts":"workouts","distance":"distance","duration":"duration","month":"month","Statistics":"Statistics","year":"year","week":"week"}')},210: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"}')},211: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"}')},212: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"}')},213: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"}')},214:function(e){e.exports=JSON.parse('{"Personal records":"Mes records","This month":"Ce mois","Upload one !":"Ajoutez votre premi\xe8re s\xe9ance !"}')},215: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."}')},216: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"}')},217:function(e){e.exports=JSON.parse('{"workouts":"s\xe9ances","distance":"distance","duration":"dur\xe9e","month":"mois","Statistics":"Statistiques","year":"ann\xe9e","week":"semaine"}')},218: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"}')},277:function(e,t,s){},285:function(e,t){},889:function(e,t,s){"use strict";s.r(t),s.d(t,"history",(function(){return Ta})),s.d(t,"rootNode",(function(){return za})),s.d(t,"store",(function(){return Fa}));var a=s(1),r=s(29),o=s(2),c=s.n(o),n=s(908),i=s(51),l=s.n(i),d=s(199),u=s(55),m=s(200),j=s(83),p=s(201),h=s(202);const b={en:{workouts:s(203),administration:s(204),common:s(205),dashboard:s(206),messages:s(207),sports:s(208),statistics:s(209),user:s(210)},fr:{workouts:s(211),administration:s(212),common:s(213),dashboard:s(214),messages:s(215),sports:s(216),statistics:s(217),user:s(218)}};j.a.use(h.a).use(p.a).init({debug:!1,lng:"en",fallbackLng:"en",keySeparator:!1,interpolation:{escapeValue:!1},resources:b,ns:["common"],defaultNS:"common"});var x=j.a,O=s(10),g=s(19),f=(s(277),s(20)),w=s(891);class v extends c.a.PureComponent{render(){const e=this.props,t=e.message,s=e.messages,r=e.t,o=""!==t&&t?t.split("|").length>1?"".concat(r("messages:".concat(t.split("|")[0])),": ").concat(r("messages:".concat(t.split("|")[1]))):r("messages:".concat(t)):"";return Object(a.jsxs)("div",{className:"error-message",children:[""!==o&&Object(a.jsx)("code",{children:o}),s&&s.length>0&&(1===s.length?Object(a.jsx)("code",{children:s[0].value}):Object(a.jsx)("code",{children:Object(a.jsx)("ul",{children:s.map((e=>Object(a.jsx)("li",{children:r("messages:".concat(e.value))},e.id)))})}))]})}}var k=s(12),y=s(910),N=s(909),_=s(222);const S=["bytes","KB","MB","GB","TB"],D=(e,t=!0)=>{const s=Math.floor(Math.log(e)/Math.log(1024));if(!e)return t?"0 bytes":{size:0,suffix:"bytes"};const a=(e/Math.pow(1024,s)).toFixed(1),r=S[s];return t?"".concat(a).concat(r):{size:a,suffix:r}},C="/api/",E=[{key:"workouts_count",label:"workouts count"},{key:"admin",label:"admin rights"},{key:"created_at",label:"registration date"},{key:"username",label:"user name"}],A=[{key:"asc",label:"ascending"},{key:"desc",label:"descending"}],M=()=>!!window.localStorage.authToken,T=e=>{let t=0;return e.map((e=>{const s={id:t,value:e};return t++,s}))},P=e=>{const t={};e.noAuthorization||(t.Authorization="Bearer ".concat(window.localStorage.getItem("authToken"))),e.type&&(t["Content-Type"]=e.type);const s={method:e.method,headers:t};"application/json"===e.type&&e.body?s.body=JSON.stringify(e.body):e.body&&(s.body=e.body);const a=new Request("".concat(C).concat(e.url),s);return fetch(a).then((t=>"DELETE"===e.method||413===t.status?t:t.json())).catch((e=>(console.error(e),new Error("An error occurred. Please contact the administrator."))))},z=(e,t)=>{if(!e)return"";const s=_.DateTime.fromISO(Object(y.a)(new Date(e),"yyyy-MM-dd'T'HH:mm:ss.SSSxxx")).setZone(t);return Object(N.a)(s.toFormat("yyyy-MM-dd HH:mm:ss"),"yyyy-MM-dd HH:mm:ss",new Date)},F=(e,t)=>{const s=e.label.toLowerCase(),a=t.label.toLowerCase();return s>a?1:st.map((t=>Object(k.a)(Object(k.a)({},t),{},{label:e("".concat(s,":").concat(t.label))}))).sort(F),L=(e,t)=>{let s=e;return t.id||"users"===e&&t.username?s="".concat(s,"/").concat(t.username?t.username:t.id):Object.keys(t).length>0&&(s+="?",Object.keys(t).filter((e=>t[e])).map(((e,a)=>s+="".concat(0===a?"":"&").concat(e,"=").concat(t[e])))),s};class U{static getData(e,t={}){const s=L(e,t);return P({url:s,method:"GET",type:"application/json"})}static addData(e,t){return P({url:e,method:"POST",body:t,type:"application/json"})}static addDataWithFile(e,t){return P({url:e,method:"POST",body:t})}static postData(e,t){const s={url:"".concat(e).concat(t.id?"/".concat(t.id):""),method:"POST",body:t,type:"application/json"};return P(s)}static updateData(e,t){const s={url:"".concat(e).concat(t.id?"/".concat(t.id):t.username?"/".concat(t.username):""),method:"PATCH",body:t,type:"application/json"};return P(s)}static deleteData(e,t){const s={url:"".concat(e,"/").concat(t),method:"DELETE",type:"application/json"};return P(s)}}const I=(e,t)=>({type:"SET_DATA",data:t,target:e}),W=e=>({type:"SET_ERROR",message:e}),H=e=>({type:"SET_LOADING",loading:e}),q=(e,t,s,a=!0)=>r=>(r(H(!0)),s&&s.id&&"workouts"!==t&&isNaN(s.id)?(r(H(!1)),r(W("".concat(t,"|Incorrect id")))):(r({type:"CLEAN_ALL_MESSAGES"}),U[e](t,s).then((s=>{if("success"===s.status)if(a){if("users"===t&&"getData"===e)return r(((e,t,s)=>({type:"SET_PAGINATED_DATA",data:t,pagination:s,target:e}))(t,s.data,s.pagination));r(I(t,s.data))}else"updateData"===e&&"sports"===t?r((e=>({type:"UPDATE_SPORT_DATA",data:e}))(s.data.sports[0])):"updateData"===e&&"users"===t&&r((e=>({type:"UPDATE_USER_DATA",data:e}))(s.data.users[0]));else r(W("".concat(t,"|").concat(s.message||s.status)));r(H(!1))})).catch((e=>{r(H(!1)),r(W("".concat(t,"|").concat(e)))})))),B=e=>t=>{j.a.changeLanguage(e).then(t((e=>({type:"SET_LANGUAGE",language:e}))(e)))},G=e=>({type:"SET_APP_CONFIG",data:e}),V=e=>t=>U.getData(e).then((s=>{"success"===s.status?"config"===e?t(G(s.data)):"stats/all"===e&&t({type:"SET_APP_STATS",data:s.data}):t(W("application|".concat(s.message)))})).catch((e=>t(W("application|".concat(e)))));class J extends c.a.Component{constructor(e,t){super(e,t),this.state={formData:{}}}componentDidMount(){this.initForm()}componentDidUpdate(e){this.props.appConfig!==e.appConfig&&this.initForm()}initForm(){const e=this.props.appConfig,t={};Object.keys(e).map((s=>null===e[s]?t[s]="":["max_single_file_size","max_zip_file_size"].includes(s)?t[s]=+(e[s]/1048576).toFixed(2):t[s]=e[s])),this.setState({formData:t})}handleFormChange(e){const t=this.state.formData;t[e.target.name]=+e.target.value,this.setState(t)}render(){const e=this.props,t=e.isInEdition,s=e.loadAppConfig,r=e.message,o=e.messages,c=e.onHandleConfigFormSubmit,n=e.t,i=this.state.formData;return Object(a.jsxs)("div",{children:[(r||o)&&Object(a.jsx)(v,{message:r,messages:o,t:n}),Object.keys(i).length>0&&Object(a.jsx)("div",{className:"row",children:Object(a.jsx)("div",{className:"col-md-12",children:Object(a.jsxs)("div",{className:"card",children:[Object(a.jsx)("div",{className:"card-header",children:Object(a.jsx)("strong",{children:n("administration:Application configuration")})}),Object(a.jsx)("div",{className:"card-body",children:Object(a.jsxs)("form",{className:"app-config-form ".concat(t?"":"form-disabled"),onSubmit:e=>{e.preventDefault(),c(i)},children:[Object(a.jsxs)("div",{className:"form-group row",children:[Object(a.jsxs)("label",{className:"col-sm-6 col-form-label",htmlFor:"max_users",children:[n("administration:Max. number of active users"),Object(a.jsx)("sup",{children:Object(a.jsx)("i",{className:"fa fa-question-circle","aria-hidden":"true",title:n("administration:if 0, no limitation")})}),":"]}),Object(a.jsx)("input",{className:"col-sm-5",id:"max_users",name:"max_users",type:"number",min:"0",value:i.max_users,onChange:e=>this.handleFormChange(e)})]}),Object(a.jsxs)("div",{className:"form-group row",children:[Object(a.jsxs)("label",{className:"col-sm-6 col-form-label",htmlFor:"max_single_file_size",children:[n("administration:Max. size of uploaded files (in Mb)"),":"]}),Object(a.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:e=>this.handleFormChange(e)})]}),Object(a.jsxs)("div",{className:"form-group row",children:[Object(a.jsxs)("label",{className:"col-sm-6 col-form-label",htmlFor:"max_zip_file_size",children:[n("administration:Max. size of zip archive (in Mb)"),":"]}),Object(a.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:e=>this.handleFormChange(e)})]}),Object(a.jsxs)("div",{className:"form-group row",children:[Object(a.jsx)("label",{className:"col-sm-6 col-form-label",htmlFor:"gpx_limit_import",children:n("administration:Max. files of zip archive")}),Object(a.jsx)("input",{className:"col-sm-5",id:"gpx_limit_import",name:"gpx_limit_import",type:"number",min:"0",value:i.gpx_limit_import,onChange:e=>this.handleFormChange(e)})]}),t?Object(a.jsxs)(a.Fragment,{children:[Object(a.jsx)("input",{type:"submit",className:"btn btn-primary",value:n("common:Submit")}),Object(a.jsx)("input",{type:"submit",className:"btn btn-secondary",onClick:e=>{e.preventDefault(),s(),Ta.push("/admin/application")},value:n("common:Cancel")})]}):Object(a.jsxs)(a.Fragment,{children:[Object(a.jsx)("input",{type:"submit",className:"btn btn-primary",onClick:e=>{e.preventDefault(),Ta.push("/admin/application/edit")},value:n("common:Edit")}),Object(a.jsx)("input",{type:"submit",className:"btn btn-secondary",onClick:()=>Ta.push("/admin"),value:n("common:Back")})]})]})})]})})})]})}}var K=Object(O.c)((e=>({message:e.message,messages:e.messages})),(e=>({loadAppConfig:()=>{e(V("config"))},onHandleConfigFormSubmit:t=>{const s=Object.assign({},t);s.max_single_file_size*=1048576,s.max_zip_file_size*=1048576,e((e=>t=>{t({type:"CLEAN_ALL_MESSAGES"}),U.updateData("config",e).then((e=>{"success"===e.status?(t(G(e.data)),Ta.push("/admin/application")):Array.isArray(e.message)?t({type:"APP_ERRORS",messages:T(e.message)}):t(W(e.message))})).catch((e=>t(W("application|".concat(e)))))})(s))}})))(J),Y=s(15);class X extends c.a.Component{componentDidMount(){this.props.loadAppStats()}render(){const e=this.props,t=e.appStats,s=e.t,r=D(t.uploads_dir_size,!1);return Object(a.jsxs)("div",{className:"row",children:[Object(a.jsx)("div",{className:"col-lg-3 col-md-6 col-sm-6",children:Object(a.jsx)("div",{className:"card workout-card",children:Object(a.jsxs)("div",{className:"card-body row",children:[Object(a.jsx)("div",{className:"col-3",children:Object(a.jsx)("i",{className:"fa fa-users fa-3x fa-color"})}),Object(a.jsxs)("div",{className:"col-9 text-right",children:[Object(a.jsx)("div",{className:"huge",children:t.users?t.users:0}),Object(a.jsx)("div",{children:"".concat(1===t.users?s("administration:user"):s("administration:users"))})]})]})})}),Object(a.jsx)("div",{className:"col-lg-3 col-md-6 col-sm-6",children:Object(a.jsx)("div",{className:"card workout-card",children:Object(a.jsxs)("div",{className:"card-body row",children:[Object(a.jsx)("div",{className:"col-3",children:Object(a.jsx)("i",{className:"fa fa-tags fa-3x fa-color"})}),Object(a.jsxs)("div",{className:"col-9 text-right",children:[Object(a.jsx)("div",{className:"huge",children:t.sports?t.sports:0}),Object(a.jsx)("div",{children:"".concat(1===t.sports?s("common:sport"):s("common:sports"))})]})]})})}),Object(a.jsx)("div",{className:"col-lg-3 col-md-6 col-sm-6",children:Object(a.jsx)("div",{className:"card workout-card",children:Object(a.jsxs)("div",{className:"card-body row",children:[Object(a.jsx)("div",{className:"col-3",children:Object(a.jsx)("i",{className:"fa fa-calendar fa-3x fa-color"})}),Object(a.jsxs)("div",{className:"col-9 text-right",children:[Object(a.jsx)("div",{className:"huge",children:t.workouts?t.workouts:0}),Object(a.jsx)("div",{children:"".concat(1===t.workouts?s("common:workout"):s("common:workouts"))})]})]})})}),Object(a.jsx)("div",{className:"col-lg-3 col-md-6 col-sm-6",children:Object(a.jsx)("div",{className:"card workout-card",children:Object(a.jsxs)("div",{className:"card-body row",children:[Object(a.jsx)("div",{className:"col-3",children:Object(a.jsx)("i",{className:"fa fa-folder-open fa-3x fa-color"})}),Object(a.jsxs)("div",{className:"col-9 text-right",children:[Object(a.jsx)("div",{className:"huge",children:r.size}),Object(a.jsxs)("div",{children:[r.suffix," (",s("administration:uploads"),")"]})]})]})})})]})}}var $=Object(w.a)()(Object(O.c)((e=>({appStats:e.application.statistics})),(e=>({loadAppStats:()=>{e(V("stats/all"))}})))(X));function Z(e){const t=e.appConfig,s=e.t;return Object(a.jsxs)("div",{className:"card workout-card",children:[Object(a.jsx)("div",{className:"card-header",children:Object(a.jsx)("strong",{children:s("administration:Administration")})}),Object(a.jsxs)("div",{className:"card-body",children:[Object(a.jsx)($,{}),Object(a.jsx)("br",{}),Object(a.jsxs)("dl",{className:"admin-items",children:[Object(a.jsx)("dt",{children:Object(a.jsx)(Y.a,{to:{pathname:"/admin/application"},children:s("administration:Application")})}),Object(a.jsxs)("dd",{children:[s("administration:Update application configuration (maximum number of registered users, maximum files size)."),Object(a.jsx)("br",{}),Object(a.jsx)("strong",{children:s("administration:Registration is currently ".concat(t.is_registration_enabled?"enabled":"disabled","."))})]}),Object(a.jsx)("br",{}),Object(a.jsx)("dt",{children:Object(a.jsx)(Y.a,{to:{pathname:"/admin/sports"},children:s("administration:Sports")})}),Object(a.jsx)("dd",{children:s("administration:Enable/disable sports.")}),Object(a.jsx)("br",{}),Object(a.jsx)("dt",{children:Object(a.jsx)(Y.a,{to:{pathname:"/admin/users"},children:s("administration:Users")})}),Object(a.jsx)("dd",{children:s("administration:Add/remove admin rights, delete user account.")})]})]})]})}class Q extends c.a.Component{componentDidMount(){this.props.loadSports()}render(){const e=this.props,t=e.message,s=e.sports,r=e.t,o=e.updateSport;return Object(a.jsxs)("div",{children:[t&&Object(a.jsx)(v,{message:t,t:r}),Object(a.jsx)("div",{className:"row",children:Object(a.jsx)("div",{className:"col",children:Object(a.jsxs)("div",{className:"card",children:[Object(a.jsx)("div",{className:"card-header",children:Object(a.jsx)("strong",{children:r("administration:Sports")})}),Object(a.jsxs)("div",{className:"card-body",children:[s.length>0&&Object(a.jsxs)("table",{className:"table",children:[Object(a.jsx)("thead",{children:Object(a.jsxs)("tr",{children:[Object(a.jsx)("th",{children:r("administration:id")}),Object(a.jsx)("th",{children:r("administration:Image")}),Object(a.jsx)("th",{children:r("administration:Label")}),Object(a.jsx)("th",{children:r("administration:Active")}),Object(a.jsx)("th",{children:r("administration:Actions")})]})}),Object(a.jsx)("tbody",{children:s.map((e=>Object(a.jsxs)("tr",{children:[Object(a.jsxs)("td",{children:[Object(a.jsx)("span",{className:"heading-span-absolute",children:r("administration:id")}),e.id]}),Object(a.jsxs)("td",{children:[Object(a.jsx)("span",{className:"heading-span-absolute",children:r("administration:Image")}),Object(a.jsx)("img",{className:"admin-img",src:e.img?e.img:"/img/photo.png",alt:"sport logo"})]}),Object(a.jsxs)("td",{children:[Object(a.jsx)("span",{className:"heading-span-absolute",children:r("administration:Label")}),r("sports:".concat(e.label))]}),Object(a.jsxs)("td",{children:[Object(a.jsx)("span",{className:"heading-span-absolute",children:r("administration:Active")}),e.is_active?Object(a.jsx)("i",{className:"fa fa-check-square-o custom-fa","aria-hidden":"true","data-toggle":"tooltip"}):Object(a.jsx)("i",{className:"fa fa-square-o custom-fa","aria-hidden":"true","data-toggle":"tooltip"})]}),Object(a.jsxs)("td",{children:[Object(a.jsx)("span",{className:"heading-span-absolute",children:r("administration:Actions")}),Object(a.jsx)("input",{type:"submit",className:"btn btn-".concat(e.is_active?"dark":"primary"," btn-sm"),value:e.is_active?r("administration:Disable"):r("administration:Enable"),onClick:()=>o(e.id,!e.is_active)}),e.has_workouts&&Object(a.jsxs)("span",{className:"admin-message",children:[Object(a.jsx)("i",{className:"fa fa-warning custom-fa","aria-hidden":"true"}),r("administration:workouts exist")]})]})]},e.id)))})]}),Object(a.jsx)("input",{type:"submit",className:"btn btn-secondary",onClick:()=>Ta.push("/admin/"),value:r("common:Back")})]})]})})})]})}}var ee=Object(O.c)((e=>({message:e.message,sports:e.sports.data,user:e.user})),(e=>({loadSports:()=>{e(q("getData","sports"))},updateSport:(t,s)=>{e(q("updateData","sports",{id:t,is_active:s},!1))}})))(Q);class te extends c.a.PureComponent{getUrl(e){const t=this.props,s=t.query,a=t.pathname,r=Object.assign({},s);let o=s.page?+s.page:1;switch(e){case"prev":o-=1;break;case"next":o+=1;break;default:o=+e}return r.page=o,L(a,r)}render(){const e=this.props,t=e.pagination,s=e.t;return Object(a.jsx)(a.Fragment,{children:t&&Object.keys(t).length>0&&Object(a.jsx)("nav",{"aria-label":"Page navigation example",children:Object(a.jsxs)("ul",{className:"pagination justify-content-center",children:[Object(a.jsx)("li",{className:"page-item ".concat(t.has_prev?"":"disabled"),children:Object(a.jsx)(Y.a,{className:"page-link",to:this.getUrl("prev"),"aria-disabled":!t.has_prev,children:s("common:Previous")})}),(r=t.pages,Array.from({length:r},((e,t)=>t+1))).map((e=>Object(a.jsx)("li",{className:"page-item ".concat(e===t.page?"active":""),children:Object(a.jsx)(Y.a,{className:"page-link",to:this.getUrl(e),children:e})},e))),Object(a.jsx)("li",{className:"page-item ".concat(t.has_next?"":"disabled"),children:Object(a.jsx)(Y.a,{className:"page-link",to:this.getUrl("next"),"aria-disabled":!t.has_next,children:s("common:Next")})})]})})});var r}}class se extends c.a.Component{constructor(e,t){super(e,t),this.state={page:null,per_page:null,order_by:"created_at",order:"asc"}}componentDidMount(){this.props.loadUsers(this.initState())}componentDidUpdate(e){e.location.query!==this.props.location.query&&this.props.loadUsers(this.props.location.query)}initState(){const 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}updatePage(e,t){const s=Object.assign({},this.state);s[e]=t,this.setState(s);const a=L(this.props.location.pathname,s);Ta.push(a)}render(){const e=this.props,t=e.authUser,s=e.location,r=e.message,o=e.t,c=e.pagination,n=e.updateUser,i=e.users,l=R(o,E),d=R(o,A);return Object(a.jsxs)("div",{children:[r&&Object(a.jsx)(v,{message:r,t:o}),Object(a.jsx)("div",{className:"container",children:Object(a.jsx)("div",{className:"row",children:Object(a.jsx)("div",{className:"col",children:Object(a.jsxs)("div",{className:"card",children:[Object(a.jsx)("div",{className:"card-header",children:Object(a.jsx)("strong",{children:o("administration:Users")})}),Object(a.jsxs)("div",{className:"card-body",children:[Object(a.jsxs)("div",{className:"row user-filters",children:[Object(a.jsx)("div",{className:"col-lg-4 col-md-6 col-sm-12",children:Object(a.jsxs)("label",{htmlFor:"order_by",children:[o("common:Sort by"),":"," ",Object(a.jsx)("select",{id:"order_by",name:"order_by",value:this.state.order_by,onChange:e=>this.updatePage("order_by",e.target.value),children:l.map((e=>Object(a.jsx)("option",{value:e.key,children:e.label},e.key)))})," "]})}),Object(a.jsx)("div",{className:"col-lg-4 col-md-6 col-sm-12",children:Object(a.jsxs)("label",{htmlFor:"sort",children:[o("common:Sort"),":"," ",Object(a.jsx)("select",{id:"sort",name:"sort",value:this.state.order,onChange:e=>this.updatePage("order",e.target.value),children:d.map((e=>Object(a.jsx)("option",{value:e.key,children:e.label},e.key)))})," "]})})]}),Object(a.jsxs)("table",{className:"table",children:[Object(a.jsx)("thead",{children:Object(a.jsxs)("tr",{children:[Object(a.jsx)("th",{children:"#"}),Object(a.jsx)("th",{children:o("user:Username")}),Object(a.jsx)("th",{children:o("user:Email")}),Object(a.jsx)("th",{children:o("user:Registration Date")}),Object(a.jsx)("th",{children:o("workouts:Workouts")}),Object(a.jsx)("th",{children:o("user:Admin")}),Object(a.jsx)("th",{children:o("administration:Actions")})]})}),Object(a.jsx)("tbody",{children:i.map((e=>Object(a.jsxs)("tr",{children:[Object(a.jsxs)("td",{children:[Object(a.jsx)("span",{className:"heading-span-absolute",children:"#"}),!0===e.picture?Object(a.jsx)("img",{alt:"Avatar",src:"".concat(C,"users/").concat(e.username,"/picture?").concat(Date.now()),className:"img-fluid App-nav-profile-img"}):Object(a.jsx)("i",{className:"fa fa-user-circle-o fa-2x no-picture","aria-hidden":"true"})]}),Object(a.jsxs)("td",{children:[Object(a.jsx)("span",{className:"heading-span-absolute",children:o("user:Username")}),Object(a.jsx)(Y.a,{to:"/users/".concat(e.username),children:e.username})]}),Object(a.jsxs)("td",{children:[Object(a.jsx)("span",{className:"heading-span-absolute",children:o("user:Email")}),e.email]}),Object(a.jsxs)("td",{children:[Object(a.jsx)("span",{className:"heading-span-absolute",children:o("user:Registration Date")}),Object(y.a)(new Date(e.created_at),"dd/MM/yyyy HH:mm")]}),Object(a.jsxs)("td",{children:[Object(a.jsx)("span",{className:"heading-span-absolute",children:o("workouts:Workouts")}),e.nb_workouts]}),Object(a.jsxs)("td",{children:[Object(a.jsx)("span",{className:"heading-span-absolute",children:o("user:Admin")}),e.admin?Object(a.jsx)("i",{className:"fa fa-check-square-o custom-fa","aria-hidden":"true","data-toggle":"tooltip"}):Object(a.jsx)("i",{className:"fa fa-square-o custom-fa","aria-hidden":"true","data-toggle":"tooltip"})]}),Object(a.jsxs)("td",{children:[Object(a.jsx)("span",{className:"heading-span-absolute",children:o("administration:Actions")}),Object(a.jsx)("input",{type:"submit",className:"btn btn-".concat(e.admin?"dark":"primary"," btn-sm"),disabled:e.username===t.username,value:e.admin?o("administration:Remove admin rights"):o("administration:Add admin rights"),onClick:()=>n(e.username,!e.admin)})]})]},e.username)))})]}),Object(a.jsx)(te,{pagination:c,pathname:s.pathname,query:this.state,t:o}),Object(a.jsx)("input",{type:"submit",className:"btn btn-secondary",onClick:()=>Ta.push("/admin/"),value:o("common:Back")})]})]})})})})]})}}var ae=Object(O.c)((e=>({authUser:e.user,location:e.router.location,message:e.message,pagination:e.users.pagination,users:e.users.data})),(e=>({loadUsers:t=>{e(q("getData","users",t))},updateUser:(t,s)=>{e(q("updateData","users",{username:t,admin:s},!1))}})))(se),re=s(223);function oe(){const e=Object(re.a)().t;return Object(a.jsxs)("div",{children:[Object(a.jsx)(f.a,{children:Object(a.jsx)("title",{children:"fittrackee - 404"})}),Object(a.jsx)("h1",{className:"page-title",children:e("Page not found")})]})}var ce=Object(w.a)()(Object(O.c)((e=>({appConfig:e.application.config,user:e.user})))((function(e){const t=e.appConfig,s=e.t,r=e.user;return Object(a.jsxs)(a.Fragment,{children:[Object(a.jsx)(f.a,{children:Object(a.jsxs)("title",{children:["FitTrackee - ",s("administration:Administration")]})}),Object(a.jsx)("div",{className:"container dashboard",children:r.admin?Object(a.jsxs)(g.d,{children:[Object(a.jsx)(g.b,{exact:!0,path:"/admin",render:()=>Object(a.jsx)(Z,{appConfig:t,t:s})}),Object(a.jsx)(g.b,{exact:!0,path:"/admin/application",render:()=>Object(a.jsx)(K,{appConfig:t,t:s,isInEdition:!1})}),Object(a.jsx)(g.b,{exact:!0,path:"/admin/application/edit",render:()=>Object(a.jsx)(K,{appConfig:t,t:s,isInEdition:!0})}),Object(a.jsx)(g.b,{exact:!0,path:"/admin/sports",render:()=>Object(a.jsx)(ee,{t:s})}),Object(a.jsx)(g.b,{exact:!0,path:"/admin/users",render:()=>Object(a.jsx)(ae,{t:s})}),Object(a.jsx)(g.b,{component:oe})]}):Object(a.jsx)(oe,{})})]})}))),ne=s(892),ie=s(24),le=s(911),de=s(226),ue=s.n(de);const me=["#55a8a3","#98C3A9","#D0838A","#ECC77E","#926692","#929292","#428bca"],je=[{record_type:"AS",label:"Ave. speed"},{record_type:"FD",label:"Farest distance"},{record_type:"LD",label:"Longest duration"},{record_type:"MS",label:"Max. speed"}],pe=(e,t=null,s=null)=>(t||(t="yyyy/MM/dd"),s||(s="HH:mm"),{workout_date:e?Object(y.a)(e,t):null,workout_time:e?Object(y.a)(e,s):null}),he=e=>{let t=new Date(0);return t=Object(le.a)(t.setSeconds(e),1),t.getTime()},be=e=>{for(let t=0;t{const s=e.label.toLowerCase(),a=t.label.toLowerCase();return s>a?1:se.filter((e=>!s||e.is_active)).map((e=>Object(k.a)(Object(k.a)({},e),{},{label:t("sports:".concat(e.label))}))).sort(xe);class ge{static loginOrRegisterOrPasswordReset(e,t){const s={url:"auth/".concat(e),method:"POST",noAuthorization:!0,body:t,type:"application/json"};return P(s)}static deletePicture(){return P({url:"auth/picture",method:"DELETE"})}}const fe=e=>({type:"PICTURE_ERROR",message:e}),we=e=>({type:"PROFILE_UPDATE_ERROR",message:e}),ve=()=>e=>window.localStorage.getItem("authToken")?e(ke()):{type:"LOGOUT"},ke=()=>e=>U.getData("auth/profile").then((t=>"success"===t.status?(e(q("getData","sports")),t.data.isAuthenticated=!0,t.data.language&&e(B(t.data.language)),e({type:"PROFILE_SUCCESS",profil:t.data})):e({type:"PROFILE_ERROR",message:t.message}))).catch((e=>{throw e})),ye=(e,t)=>s=>{if("register"===t||"password/update"===t){const a=((e,t=!1)=>{const s=[];return!t&&(e.username.length<3||e.username.length>12)&&s.push("3 to 12 characters required for username."),e.password!==e.password_conf&&s.push("Password and password confirmation don't match."),e.password.length<8&&s.push("8 characters required for password."),s})(e,"password/update"===t);if(a.length>0)return s({type:"AUTH_ERRORS",messages:T(a)})}return s(((e,t)=>s=>ge.loginOrRegisterOrPasswordReset(e,t).then((t=>{if("success"===t.status){if("password/reset-request"===e)return Ta.push({pathname:"/password-reset/sent"});if("password/update"===e)return Ta.push({pathname:"/updated-password"});if("login"===e||"register"===e)return window.localStorage.setItem("authToken",t.auth_token),"register"===e&&s(V("config")),s(ke())}return s({type:"AUTH_ERROR",message:t.message})})).catch((e=>{throw e})))(t,e))},Ne=(e,t=!1)=>s=>U.deleteData("users",e).then((e=>{204===e.status?(s(V("config")),t?Ta.push("/admin/users"):(s({type:"LOGOUT"}),Ta.push("/"))):e.json().then((e=>s(W("".concat(e.message)))))})).catch((e=>s(W("user|".concat(e))))),_e=e=>({type:"SET_GPX",gpxContent:e}),Se=e=>({type:"SET_CHART_DATA",chartData:e}),De=e=>t=>U.updateData("workouts",e).then((e=>{"success"===e.status?(t(ve()),Ta.push("/workouts/".concat(e.data.workouts[0].id))):t(W("workouts|".concat(e.message))),t(H(!1))})).catch((e=>{t(H(!1)),t(W("workouts|".concat(e)))})),Ce=e=>t=>U.getData("workouts",e).then((e=>{"success"===e.status?e.data.workouts.length>0&&t({type:"PUSH_WORKOUTS",workouts:e.data.workouts}):t(W("workouts|".concat(e.message)))})).catch((e=>t(W("workouts|".concat(e)))));var Ee=Object(O.c)((e=>({appConfig:e.application.config,loading:e.loading})),(e=>({onAddWorkout:t=>{e(H(!0));const s=new FormData;s.append("file",t.target.form.gpxFile.files[0]),s.append("data",'{"sport_id": '.concat(t.target.form.sport.value,', "notes": "').concat(t.target.form.notes.value,'"}')),e((e=>t=>U.addDataWithFile("workouts",e).then((e=>{"created"===e.status?0===e.data.workouts.length?t(W("workouts|no correct file.")):1===e.data.workouts.length?(t(ve()),Ta.push("/workouts/".concat(e.data.workouts[0].id))):(t(ve()),Ta.push("/")):413===e.status?t(W("workouts|File size is greater than the allowed size")):t(W("workouts|".concat(e.message))),t(H(!1))})).catch((e=>{t(H(!1)),t(W("workouts|".concat(e)))})))(s))},onEditWorkout:(t,s)=>{e(De({id:s.id,notes:t.target.form.notes.value,sport_id:+t.target.form.sport.value,title:t.target.form.title.value}))}})))((function(e){const t=e.appConfig,s=e.loading,r=e.onAddWorkout,o=e.onEditWorkout,c=e.sports,n=e.t,i=e.workout,l=i?i.sport_id:"",d=Oe(c,n,!0),u="".concat(n("workouts:no folder inside"),", ").concat(t.gpx_limit_import," ").concat(n("workouts:files max"),", ").concat(n("workouts:max size"),": ").concat(D(t.max_zip_file_size)),m=D(t.max_single_file_size);return Object(a.jsxs)("form",{encType:"multipart/form-data",method:"post",onSubmit:e=>e.preventDefault(),children:[Object(a.jsx)("div",{className:"form-group",children:Object(a.jsxs)("label",{children:[n("common:Sport"),":",Object(a.jsxs)("select",{className:"form-control input-lg",defaultValue:l,disabled:s,name:"sport",required:!0,children:[Object(a.jsx)("option",{value:""}),d.map((e=>Object(a.jsx)("option",{value:e.id,children:e.label},e.id)))]})]})}),i?Object(a.jsx)("div",{className:"form-group",children:Object(a.jsxs)("label",{children:[n("workouts:Title"),":",Object(a.jsx)("input",{name:"title",defaultValue:i?i.title:"",disabled:s,className:"form-control input-lg"})]})}):Object(a.jsx)("div",{className:"form-group",children:Object(a.jsxs)("label",{children:[Object(a.jsxs)(ne.a,{i18nKey:"workouts:gpxFile",children:[Object(a.jsx)("strong",{children:"gpx"})," file"]}),Object(a.jsx)("sup",{children:Object(a.jsx)("i",{className:"fa fa-question-circle","aria-hidden":"true","data-toggle":"tooltip",title:"".concat(n("workouts:max size"),": ").concat(m)})})," ",Object(a.jsxs)(ne.a,{i18nKey:"workouts:zipFile",children:["or ",Object(a.jsx)("strong",{children:" zip"})," file containing ",Object(a.jsx)("strong",{children:"gpx "}),"files"]}),Object(a.jsx)("sup",{children:Object(a.jsx)("i",{className:"fa fa-question-circle","aria-hidden":"true","data-toggle":"tooltip","data-placement":"top",title:u})})," ",":",Object(a.jsx)("input",{accept:".gpx, .zip",className:"form-control form-control-file gpx-file",disabled:s,name:"gpxFile",required:!0,type:"file"})]})}),Object(a.jsx)("div",{className:"form-group",children:Object(a.jsxs)("label",{children:[n("workouts:Notes"),":",Object(a.jsx)("textarea",{name:"notes",defaultValue:i?i.notes:"",disabled:s,className:"form-control input-lg",maxLength:"500"})]})}),s?Object(a.jsx)("div",{className:"loader"}):Object(a.jsxs)("div",{children:[Object(a.jsx)("input",{type:"submit",className:"btn btn-primary",onClick:e=>i?o(e,i):r(e),value:n("common:Submit")}),Object(a.jsx)("input",{type:"submit",className:"btn btn-secondary",onClick:()=>Ta.push("/"),value:n("common:Cancel")})]})]})}));var Ae=Object(O.c)((e=>({user:e.user})),(e=>({onAddOrEdit:(t,s)=>{const a=t.target.form.duration.value.split(":"),r=60*+a[0]*60+60*+a[1]+ +a[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:r,notes:t.target.form.notes.value,sport_id:+t.target.form.sport_id.value,title:t.target.form.title.value};var c;s?(o.id=s.id,e(De(o))):e((c=o,e=>U.addData("workouts/no_gpx",c).then((t=>{"created"===t.status?(e(ve()),Ta.push("/workouts/".concat(t.data.workouts[0].id))):e(W("workouts|".concat(t.message)))})).catch((t=>e(W("workouts|".concat(t)))))))}})))((function(e){const t=e.onAddOrEdit,s=e.sports,r=e.t,o=e.user,c=e.workout,n=Oe(s,r,!0);let i,l,d="";if(c){const e=pe(z(c.workout_date,o.timezone),"yyyy-MM-dd");i=e.workout_date,l=e.workout_time,d=c.sport_id}return Object(a.jsxs)("form",{onSubmit:e=>e.preventDefault(),children:[Object(a.jsx)("div",{className:"form-group",children:Object(a.jsxs)("label",{children:[r("workouts:Title"),":",Object(a.jsx)("input",{name:"title",defaultValue:c?c.title:"",className:"form-control input-lg"})]})}),Object(a.jsx)("div",{className:"form-group",children:Object(a.jsxs)("label",{children:[r("common:Sport"),":",Object(a.jsxs)("select",{className:"form-control input-lg",defaultValue:d,name:"sport_id",required:!0,children:[Object(a.jsx)("option",{value:""}),n.map((e=>Object(a.jsx)("option",{value:e.id,children:e.label},e.id)))]})]})}),Object(a.jsx)("div",{className:"form-group",children:Object(a.jsxs)("label",{children:[r("workouts:Workout Date"),":",Object(a.jsx)("div",{className:"container",children:Object(a.jsxs)("div",{className:"row",children:[Object(a.jsx)("input",{name:"workout_date",defaultValue:i,className:"form-control col-md",required:!0,type:"date"}),Object(a.jsx)("input",{name:"workout_time",defaultValue:l,className:"form-control col-md",required:!0,type:"time"})]})})]})}),Object(a.jsx)("div",{className:"form-group",children:Object(a.jsxs)("label",{children:[r("workouts:Duration"),":",Object(a.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(a.jsx)("div",{className:"form-group",children:Object(a.jsxs)("label",{children:[r("workouts:Distance")," (km):",Object(a.jsx)("input",{name:"distance",defaultValue:c?c.distance:"",className:"form-control input-lg",min:0,required:!0,step:"0.001",type:"number"})]})}),Object(a.jsx)("div",{className:"form-group",children:Object(a.jsxs)("label",{children:[r("workouts:Notes"),":",Object(a.jsx)("textarea",{name:"notes",defaultValue:c?c.notes:"",className:"form-control input-lg",maxLength:"500"})]})}),Object(a.jsx)("input",{type:"submit",className:"btn btn-primary",onClick:e=>t(e,c),value:r("common:Submit")}),Object(a.jsx)("input",{type:"submit",className:"btn btn-secondary",onClick:()=>Ta.push("/"),value:r("common:Cancel")})]})}));class Me extends c.a.Component{constructor(e,t){super(e,t),this.state={withGpx:!0}}handleRadioChange(e){this.setState({withGpx:"withGpx"===e.target.name?e.target.value:!e.target.value})}render(){const e=this.props,t=e.loading,s=e.message,r=e.sports,o=e.t,c=e.workout,n=this.state.withGpx;return Object(a.jsxs)("div",{children:[Object(a.jsx)(f.a,{children:Object(a.jsxs)("title",{children:["FitTrackee -"," ",o(c?"workouts:Edit a workout":"workouts:Add a workout")]})}),Object(a.jsx)("br",{}),Object(a.jsx)("br",{}),Object(a.jsx)(v,{message:s,t:o}),Object(a.jsx)("div",{className:"container",children:Object(a.jsxs)("div",{className:"row",children:[Object(a.jsx)("div",{className:"col-md-2"}),Object(a.jsx)("div",{className:"col-md-8",children:Object(a.jsxs)("div",{className:"card add-workout",children:[Object(a.jsx)("h2",{className:"card-header text-center",children:o(c?"workouts:Edit a workout":"workouts:Add a workout")}),Object(a.jsx)("div",{className:"card-body",children:c?c.with_gpx?Object(a.jsx)(Ee,{workout:c,sports:r,t:o}):Object(a.jsx)(Ae,{workout:c,sports:r,t:o}):Object(a.jsxs)("div",{children:[Object(a.jsx)("form",{children:Object(a.jsxs)("div",{className:"form-group row",children:[Object(a.jsx)("div",{className:"col",children:Object(a.jsxs)("label",{className:"radioLabel",children:[Object(a.jsx)("input",{className:"add-workout-radio",type:"radio",name:"withGpx",disabled:t,checked:n,onChange:e=>this.handleRadioChange(e)}),o("workouts:with gpx file")]})}),Object(a.jsx)("div",{className:"col",children:Object(a.jsxs)("label",{className:"radioLabel",children:[Object(a.jsx)("input",{className:"add-workout-radio",type:"radio",name:"withoutGpx",disabled:t,checked:!n,onChange:e=>this.handleRadioChange(e)}),o("workouts:without gpx file")]})})]})}),n?Object(a.jsx)(Ee,{sports:r,t:o}):Object(a.jsx)(Ae,{sports:r,t:o})]})})]})}),Object(a.jsx)("div",{className:"col-md-2"})]})})]})}}var Te=Object(w.a)()(Object(O.c)((e=>({loading:e.loading})))(Me));var Pe=Object(O.c)((e=>({message:e.message,sports:e.sports.data,user:e.user})))((function(e){const t=e.message,s=e.sports;return Object(a.jsx)("div",{children:Object(a.jsx)(Te,{workout:null,message:t,sports:s})})}));function ze(e){const t=Object(re.a)().t;return Object(a.jsx)("div",{className:"custom-modal-backdrop",children:Object(a.jsx)("div",{className:"custom-modal",children:Object(a.jsxs)("div",{className:"modal-content",children:[Object(a.jsxs)("div",{className:"modal-header",children:[Object(a.jsx)("h5",{className:"modal-title",children:e.title}),Object(a.jsx)("button",{type:"button",className:"close","aria-label":"Close",onClick:()=>e.close(),children:Object(a.jsx)("span",{"aria-hidden":"true",children:"\xd7"})})]}),Object(a.jsx)("div",{className:"modal-body",children:Object(a.jsx)("p",{children:e.text})}),Object(a.jsxs)("div",{className:"modal-footer",children:[Object(a.jsx)("button",{type:"button",className:"btn btn-primary",onClick:()=>e.confirm(),children:t("common:Yes")}),Object(a.jsx)("button",{type:"button",className:"btn btn-secondary",onClick:()=>e.close(),children:t("common:No")})]})]})})})}function Fe(e){const t=e.dataType,s=e.displayModal,r=e.segmentId,o=e.sport,c=e.t,n=e.title,i=e.user,l=e.workout,d=l?pe(z(l.workout_date,i.timezone)):null,u="segment"===t&&1!==r?"/workouts/".concat(l.id,"/segment/").concat(r-1):"workout"===t&&l.previous_workout?"/workouts/".concat(l.previous_workout):null,m="segment"===t&&rs(!0),title:c("workouts:Delete workout")})]}):Object(a.jsxs)(a.Fragment,{children:[Object(a.jsx)(Y.a,{to:"/workouts/".concat(l.id),children:n})," ","- ",c("workouts:segment")," ",r]}),Object(a.jsx)("br",{}),d&&Object(a.jsx)("span",{className:"workout-date",children:"".concat(d.workout_date," - ").concat(d.workout_time)})]}),Object(a.jsx)("div",{className:"col-auto",children:m?Object(a.jsx)(Y.a,{className:"unlink",to:m,children:Object(a.jsx)("i",{className:"fa fa-chevron-right","aria-hidden":"true",title:c("workouts:See next ".concat(t))})}):Object(a.jsx)("i",{className:"fa fa-chevron-right inactive-link","aria-hidden":"true",title:c("workouts:No next ".concat(t))})})]})})}var Re=s(25);class Le extends c.a.Component{constructor(e,t){super(e,t),this.state={displayDistance:!0,dataToHide:[]}}componentDidMount(){"workout"===this.props.dataType?this.props.loadWorkoutData(this.props.workout.id):this.props.loadSegmentData(this.props.workout.id,this.props.segmentId)}componentDidUpdate(e){("workout"===this.props.dataType&&e.workout.id!==this.props.workout.id||"workout"===this.props.dataType&&"segment"===e.dataType)&&this.props.loadWorkoutData(this.props.workout.id),"segment"===this.props.dataType&&e.segmentId!==this.props.segmentId&&this.props.loadSegmentData(this.props.workout.id,this.props.segmentId)}componentWillUnmount(){this.props.loadWorkoutData(null)}handleRadioChange(e){this.setState({displayDistance:"distance"===e.target.name?e.target.value:!e.target.value})}handleLegendChange(e){const t=this.state.dataToHide,s=e.target.name;t.find((e=>e===s))?t.splice(t.indexOf(s),1):t.push(s),this.setState({dataToHide:t})}displayData(e){return!this.state.dataToHide.find((t=>t===e))}render(){const e=this.props,t=e.chartData,s=e.t,r=e.updateCoordinates,o=this.state.displayDistance,c=t?parseInt(t.length/10,10):0;let n,i;return o?(n="distance",i="linear"):(n="duration",i="time"),Object(a.jsx)("div",{className:"container",children:t&&t.length>0?Object(a.jsxs)("div",{children:[Object(a.jsxs)("div",{className:"row chart-radio",children:[Object(a.jsxs)("label",{className:"radioLabel col-md-1",children:[Object(a.jsx)("input",{type:"radio",name:"distance",checked:o,onChange:e=>this.handleRadioChange(e)}),s("workouts:distance")]}),Object(a.jsxs)("label",{className:"radioLabel col-md-1",children:[Object(a.jsx)("input",{type:"radio",name:"duration",checked:!o,onChange:e=>this.handleRadioChange(e)}),s("workouts:duration")]})]}),Object(a.jsxs)("div",{className:"row chart-radio",children:[Object(a.jsx)("div",{className:"col-md-5"}),Object(a.jsxs)("label",{className:"radioLabel col-md-1",children:[Object(a.jsx)("input",{type:"checkbox",name:"speed",checked:this.displayData("speed"),onChange:e=>this.handleLegendChange(e)}),s("workouts:speed")]}),Object(a.jsxs)("label",{className:"radioLabel col-md-1",children:[Object(a.jsx)("input",{type:"checkbox",name:"elevation",checked:this.displayData("elevation"),onChange:e=>this.handleLegendChange(e)}),s("workouts:elevation")]}),Object(a.jsx)("div",{className:"col-md-5"})]}),Object(a.jsx)("div",{className:"row chart",children:Object(a.jsx)(Re.f,{height:300,children:Object(a.jsxs)(Re.d,{data:t,margin:{top:15,right:30,left:20,bottom:15},onMouseMove:e=>r(e.activePayload),onMouseLeave:()=>r(null),children:[Object(a.jsx)(Re.h,{allowDecimals:!1,dataKey:n,label:{value:s("workouts:".concat(n)),offset:0,position:"bottom"},scale:i,interval:c,tickFormatter:e=>o?e:Object(y.a)(e,"HH:mm:ss"),type:"number"}),Object(a.jsx)(Re.i,{label:{value:"".concat(s("workouts:speed")," (km/h)"),angle:-90,position:"left"},yAxisId:"left"}),Object(a.jsx)(Re.i,{label:{value:"".concat(s("workouts:elevation")," (m)"),angle:-90,position:"right"},yAxisId:"right",orientation:"right"}),this.displayData("elevation")&&Object(a.jsx)(Re.a,{yAxisId:"right",type:"linear",dataKey:"elevation",name:s("workouts:elevation"),fill:"#e5e5e5",stroke:"#cccccc",dot:!1,unit:" m"}),this.displayData("speed")&&Object(a.jsx)(Re.e,{yAxisId:"left",type:"linear",dataKey:"speed",name:s("workouts:speed"),stroke:"#8884d8",strokeWidth:2,dot:!1,unit:" km/h"}),Object(a.jsx)(Re.g,{labelFormatter:e=>o?"".concat(s("workouts:distance"),": ").concat(e," km"):"".concat(s("workouts:duration"),": ").concat(Object(y.a)(e,"HH:mm:ss"))})]})})}),Object(a.jsx)("div",{className:"chart-info",children:s("workouts:data from gpx, without any cleaning")})]}):s("workouts:No data to display")})}}var Ue=Object(O.c)((e=>({chartData:e.chartData})),(e=>({loadWorkoutData:t=>{e((e=>t=>{if(e)return U.getData("workouts/".concat(e,"/chart_data")).then((e=>{"success"===e.status?t(Se(be(e.data.chart_data))):t(W("workouts|".concat(e.message)))})).catch((e=>t(W("workouts|".concat(e)))));t(Se(null))})(t))},loadSegmentData:(t,s)=>{e(((e,t)=>s=>{if(e)return U.getData("workouts/".concat(e,"/chart_data/segment/").concat(t)).then((e=>{"success"===e.status?s(Se(be(e.data.chart_data))):s(W("workouts|".concat(e.message)))})).catch((e=>s(W("workouts|".concat(e)))));s(Se(null))})(t,s))}})))(Le);function Ie(e){const t=e.t,s=e.workout;return Object(a.jsx)("div",{className:"container",children:s.weather_start&&s.weather_end&&Object(a.jsxs)("table",{className:"table table-borderless weather-table text-center",children:[Object(a.jsx)("thead",{children:Object(a.jsxs)("tr",{children:[Object(a.jsx)("th",{}),Object(a.jsxs)("th",{children:[t("workouts:Start"),Object(a.jsx)("br",{}),Object(a.jsx)("img",{className:"weather-img",src:"/img/weather/".concat(s.weather_start.icon,".png"),alt:"workout weather (".concat(s.weather_start.icon,")"),title:s.weather_start.summary})]}),Object(a.jsxs)("th",{children:[t("workouts:End"),Object(a.jsx)("br",{}),Object(a.jsx)("img",{className:"weather-img",src:"/img/weather/".concat(s.weather_end.icon,".png"),alt:"workout weather (".concat(s.weather_end.icon,")"),title:s.weather_end.summary})]})]})}),Object(a.jsxs)("tbody",{children:[Object(a.jsxs)("tr",{children:[Object(a.jsx)("td",{children:Object(a.jsx)("img",{className:"weather-img-small",src:"/img/weather/temperature.png",alt:"Temperatures"})}),Object(a.jsxs)("td",{children:[Number(s.weather_start.temperature).toFixed(1),"\xb0C"]}),Object(a.jsxs)("td",{children:[Number(s.weather_end.temperature).toFixed(1),"\xb0C"]})]}),Object(a.jsxs)("tr",{children:[Object(a.jsx)("td",{children:Object(a.jsx)("img",{className:"weather-img-small",src:"/img/weather/pour-rain.png",alt:"Temperatures"})}),Object(a.jsxs)("td",{children:[Number(100*s.weather_start.humidity).toFixed(1),"%"]}),Object(a.jsxs)("td",{children:[Number(100*s.weather_end.humidity).toFixed(1),"%"]})]}),Object(a.jsxs)("tr",{children:[Object(a.jsx)("td",{children:Object(a.jsx)("img",{className:"weather-img-small",src:"/img/weather/breeze.png",alt:"Temperatures"})}),Object(a.jsxs)("td",{children:[Number(s.weather_start.wind).toFixed(1),"m/s"]}),Object(a.jsxs)("td",{children:[Number(s.weather_end.wind).toFixed(1),"m/s"]})]})]})]})})}function We(e){const t=e.t,s=e.workout,r="0:00:00"!==s.pauses&&null!==s.pauses;return Object(a.jsxs)("div",{className:"workout-details",children:[Object(a.jsxs)("p",{children:[Object(a.jsx)("i",{className:"fa fa-clock-o custom-fa","aria-hidden":"true"}),t("workouts:Duration"),": ",s.moving,s.records&&s.records.find((e=>"LD"===e.record_type))&&Object(a.jsx)("sup",{children:Object(a.jsx)("i",{className:"fa fa-trophy custom-fa","aria-hidden":"true"})}),r&&Object(a.jsxs)("span",{children:[Object(a.jsx)("br",{}),"(",t("workouts:pauses"),": ",s.pauses,","," ",t("workouts:total duration"),": ",s.duration,")"]})]}),Object(a.jsxs)("p",{children:[Object(a.jsx)("i",{className:"fa fa-road custom-fa","aria-hidden":"true"}),t("workouts:Distance"),": ",s.distance," km",s.records&&s.records.find((e=>"FD"===e.record_type))&&Object(a.jsx)("sup",{children:Object(a.jsx)("i",{className:"fa fa-trophy custom-fa","aria-hidden":"true"})})]}),Object(a.jsxs)("p",{children:[Object(a.jsx)("i",{className:"fa fa-tachometer custom-fa","aria-hidden":"true"}),t("workouts:Average speed"),": ",s.ave_speed," km/h",s.records&&s.records.find((e=>"AS"===e.record_type))&&Object(a.jsx)("sup",{children:Object(a.jsx)("i",{className:"fa fa-trophy custom-fa","aria-hidden":"true"})}),Object(a.jsx)("br",{}),t("workouts:Max. speed"),": ",s.max_speed," km/h",s.records&&s.records.find((e=>"MS"===e.record_type))&&Object(a.jsx)("sup",{children:Object(a.jsx)("i",{className:"fa fa-trophy custom-fa","aria-hidden":"true"})})]}),s.min_alt&&s.max_alt&&Object(a.jsxs)("p",{children:[Object(a.jsx)("i",{className:"fi-mountains custom-fa"}),t("workouts:Min. altitude"),": ",s.min_alt,"m",Object(a.jsx)("br",{}),t("workouts:Max. altitude"),": ",s.max_alt,"m"]}),s.ascent&&s.descent&&Object(a.jsxs)("p",{children:[Object(a.jsx)("i",{className:"fa fa-location-arrow custom-fa"}),t("workouts:Ascent"),": ",s.ascent,"m",Object(a.jsx)("br",{}),t("workouts:Descent"),": ",s.descent,"m"]}),Object(a.jsx)(Ie,{workout:s,t:t})]})}var He=s(896),qe=s(893),Be=s(912),Ge=s(894),Ve=s(895),Je=s(237),Ke=s.n(Je);function Ye({bounds:e,coordinates:t,jsonData:s,mapAttribution:r}){return Object(qe.a)().fitBounds(e),Object(a.jsxs)(a.Fragment,{children:[Object(a.jsx)(Be.a,{attribution:r,url:"".concat(C,"workouts/map_tile/{s}/{z}/{x}/{y}.png")}),Object(a.jsx)(Ge.a,{data:s},Ke()(s)),t.latitude&&Object(a.jsx)(Ve.a,{position:[t.latitude,t.longitude]})]})}class Xe extends c.a.Component{constructor(e,t){super(e,t),this.state={zoom:13}}componentDidMount(){"workout"===this.props.dataType?this.props.loadWorkoutGpx(this.props.workout.id):this.props.loadSegmentGpx(this.props.workout.id,this.props.segmentId)}componentDidUpdate(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)}componentWillUnmount(){this.props.loadWorkoutGpx(null)}render(){const e=this.props,t=e.coordinates,s=e.gpxContent,r=e.mapAttribution,o=e.workout,c=(e=>{let t;if(e){const s=(new DOMParser).parseFromString(e,"text/xml");t=ue.a.gpx(s)}return{jsonData:t}})(s).jsonData,n=[[o.bounds[0],o.bounds[1]],[o.bounds[2],o.bounds[3]]];return Object(a.jsx)("div",{children:c&&Object(a.jsx)(He.a,{zoom:this.state.zoom,bounds:n,boundsOptions:{padding:[10,10]},children:Object(a.jsx)(Ye,{bounds:n,coordinates:t,jsonData:c,mapAttribution:r})})})}}var $e=Object(O.c)((e=>({gpxContent:e.gpx,mapAttribution:e.application.config.map_attribution})),(e=>({loadWorkoutGpx:t=>{e((e=>t=>{if(e)return U.getData("workouts/".concat(e,"/gpx")).then((e=>{"success"===e.status?t(_e(e.data.gpx)):t(W("workouts|".concat(e.message)))})).catch((e=>t(W("workouts|".concat(e)))));t(_e(null))})(t))},loadSegmentGpx:(t,s)=>{e(((e,t)=>s=>{if(e)return U.getData("workouts/".concat(e,"/gpx/segment/").concat(t)).then((e=>{"success"===e.status?s(_e(e.data.gpx)):s(W("workouts|".concat(e.message)))})).catch((e=>s(W("workouts|".concat(e)))));s(_e(null))})(t,s))}})))(Xe);function Ze(e){const t=e.t;return Object(a.jsx)("div",{className:"workout-no-map text-center",children:t("workouts:No Map")})}function Qe(e){const t=e.notes,s=e.t;return Object(a.jsx)("div",{className:"row",children:Object(a.jsx)("div",{className:"col",children:Object(a.jsx)("div",{className:"card workout-card",children:Object(a.jsxs)("div",{className:"card-body",children:["Notes",Object(a.jsx)("div",{className:"workout-notes",children:t||s("workouts:No notes")})]})})})})}function et(e){const t=e.segments,s=e.t;return Object(a.jsx)("div",{className:"row",children:Object(a.jsx)("div",{className:"col",children:Object(a.jsx)("div",{className:"card workout-card",children:Object(a.jsxs)("div",{className:"card-body",children:[s("workouts:Segments"),Object(a.jsx)("div",{className:"workout-segments",children:Object(a.jsx)("ul",{children:t.map(((e,t)=>Object(a.jsxs)("li",{className:"workout-segments-list",children:[Object(a.jsxs)(Y.a,{to:"/workouts/".concat(e.workout_id,"/segment/").concat(t+1),children:[s("workouts:segment")," ",t+1]})," ","(",s("workouts:distance"),": ",e.distance," km,"," ",s("workouts:duration"),": ",e.duration,")"]},"segment-".concat(t))))})})]})})})})}class tt extends c.a.Component{constructor(e,t){super(e,t),this.state={displayModal:!1,coordinates:{latitude:null,longitude:null}}}componentDidMount(){this.props.loadWorkout(this.props.match.params.workoutId)}componentDidUpdate(e){e.match.params.workoutId!==this.props.match.params.workoutId&&this.props.loadWorkout(this.props.match.params.workoutId)}displayModal(e){this.setState((t=>Object(k.a)(Object(k.a)({},t),{},{displayModal:e})))}updateCoordinates(e){const t=e&&e.length>0?{latitude:e[0].payload.latitude,longitude:e[0].payload.longitude}:{latitude:null,longitude:null};this.setState((e=>Object(k.a)(Object(k.a)({},e),{},{coordinates:t})))}render(){const e=this.props,t=e.message,s=e.onDeleteWorkout,r=e.sports,o=e.t,c=e.user,n=e.workouts,i=this.state,l=i.coordinates,d=i.displayModal,u=Object(ie.a)(n,1)[0],m=u?u.title:o("workouts:Workout"),j=u?r.filter((e=>e.id===u.sport_id)):[],p=Object(ie.a)(j,1)[0],h=parseInt(this.props.match.params.segmentId),b=h>=0?"segment":"workout";return Object(a.jsxs)("div",{className:"workout-page",children:[Object(a.jsx)(f.a,{children:Object(a.jsxs)("title",{children:["FitTrackee - ",m]})}),t?Object(a.jsx)(v,{message:t,t:o}):Object(a.jsxs)("div",{className:"container",children:[d&&Object(a.jsx)(ze,{title:o("common:Confirmation"),text:o("workouts:Are you sure you want to delete this workout?"),confirm:()=>{s(u.id),this.displayModal(!1)},close:()=>this.displayModal(!1)}),u&&p&&1===n.length&&Object(a.jsxs)("div",{children:[Object(a.jsx)("div",{className:"row",children:Object(a.jsx)("div",{className:"col",children:Object(a.jsxs)("div",{className:"card workout-card",children:[Object(a.jsx)("div",{className:"card-header",children:Object(a.jsx)(Fe,{workout:u,dataType:b,segmentId:h,sport:p,t:o,title:m,user:c,displayModal:()=>this.displayModal(!0)})}),Object(a.jsx)("div",{className:"card-body",children:Object(a.jsxs)("div",{className:"row",children:[Object(a.jsx)("div",{className:"col-md-8",children:u.with_gpx?Object(a.jsx)($e,{workout:u,coordinates:l,dataType:b,segmentId:h}):Object(a.jsx)(Ze,{t:o})}),Object(a.jsx)("div",{className:"col",children:Object(a.jsx)(We,{workout:"workout"===b?u:u.segments[h-1],t:o})})]})})]})})}),u.with_gpx&&Object(a.jsx)("div",{className:"row",children:Object(a.jsx)("div",{className:"col",children:Object(a.jsx)("div",{className:"card workout-card",children:Object(a.jsx)("div",{className:"card-body",children:Object(a.jsx)("div",{className:"row",children:Object(a.jsxs)("div",{className:"col",children:[Object(a.jsx)("div",{className:"chart-title",children:o("workouts:Chart")}),Object(a.jsx)(Ue,{workout:u,dataType:b,segmentId:h,t:o,updateCoordinates:e=>this.updateCoordinates(e)})]})})})})})}),"workout"===b&&Object(a.jsxs)(a.Fragment,{children:[Object(a.jsx)(Qe,{notes:u.notes,t:o}),u.segments.length>1&&Object(a.jsx)(et,{segments:u.segments,t:o})]})]})]})]})}}var st=Object(w.a)()(Object(O.c)((e=>({workouts:e.workouts.data,message:e.message,sports:e.sports.data,user:e.user})),(e=>({loadWorkout:t=>{e(q("getData","workouts",{id:t}))},onDeleteWorkout:t=>{var s;e((s=t,e=>U.deleteData("workouts",s).then((t=>{var a;204===t.status?Promise.resolve(e((a=s,{type:"REMOVE_WORKOUT",workoutId:a}))).then((()=>e(ve()))).then((()=>Ta.push("/"))):e(W("workouts|".concat(t.status)))})).catch((t=>e(W("workouts|".concat(t)))))))}})))(tt));class at extends c.a.Component{componentDidMount(){this.props.loadWorkout(this.props.match.params.workoutId)}render(){const e=this.props,t=e.message,s=e.sports,r=e.workouts,o=Object(ie.a)(r,1)[0];return Object(a.jsx)("div",{children:s.length>0&&Object(a.jsx)(Te,{workout:o,message:t,sports:s})})}}var rt=Object(O.c)((e=>({workouts:e.workouts.data,message:e.message,sports:e.sports.data,user:e.user})),(e=>({loadWorkout:t=>{e(q("getData","workouts",{id:t}))}})))(at);var ot=Object(O.c)((e=>({user:e.user})))((function(){return Object(a.jsx)("div",{children:M()?Object(a.jsxs)(g.d,{children:[Object(a.jsx)(g.b,{exact:!0,path:"/workouts/add",component:Pe}),Object(a.jsx)(g.b,{exact:!0,path:"/workouts/:workoutId",component:st}),Object(a.jsx)(g.b,{exact:!0,path:"/workouts/:workoutId/edit",component:rt}),Object(a.jsx)(g.b,{path:"/workouts/:workoutId/segment/:segmentId",component:st}),Object(a.jsx)(g.b,{component:oe})]}):Object(a.jsx)(g.a,{to:"/login"})})}));class ct extends c.a.PureComponent{render(){const e=this.props.t;return Object(a.jsx)("div",{className:"card text-center",children:Object(a.jsxs)("div",{className:"card-body",children:[e("common:No workouts.")," ",Object(a.jsx)(Y.a,{to:{pathname:"/workouts/add"},children:e("dashboard:Upload one !")})]})})}}class nt extends c.a.PureComponent{render(){const e=this.props,t=e.loadWorkouts,s=e.sports,r=e.t,o=e.updateParams,c=Oe(s,r);return Object(a.jsx)("div",{className:"card",children:Object(a.jsx)("div",{className:"card-body workout-filter",children:Object(a.jsxs)("form",{onSubmit:e=>e.preventDefault(),children:[Object(a.jsxs)("div",{className:"form-group",children:[Object(a.jsxs)("label",{children:[r("workouts:From"),":",Object(a.jsx)("input",{className:"form-control col-md",name:"from",onChange:e=>o(e),type:"date"})]}),Object(a.jsxs)("label",{children:[r("workouts:To"),":",Object(a.jsx)("input",{className:"form-control col-md",name:"to",onChange:e=>o(e),type:"date"})]})]}),Object(a.jsx)("div",{className:"form-group",children:Object(a.jsxs)("label",{children:[r("common:Sport"),":",Object(a.jsxs)("select",{className:"form-control input-lg",name:"sport_id",onChange:e=>o(e),children:[Object(a.jsx)("option",{value:""}),c.map((e=>Object(a.jsx)("option",{value:e.id,children:e.label},e.id)))]})]})}),Object(a.jsx)("div",{className:"form-group",children:Object(a.jsxs)("label",{children:[r("workouts:Distance")," (km):",Object(a.jsx)("div",{className:"container",children:Object(a.jsxs)("div",{className:"row",children:[Object(a.jsx)("div",{className:"col-5",children:Object(a.jsx)("input",{className:"form-control",min:0,name:"distance_from",onChange:e=>o(e),step:"1",type:"number"})}),Object(a.jsx)("div",{className:"col-2 align-middle text-center",children:r("common:to")}),Object(a.jsx)("div",{className:"col-5",children:Object(a.jsx)("input",{className:"form-control",min:0,name:"distance_to",onChange:e=>o(e),step:"1",type:"number"})})]})})]})}),Object(a.jsx)("div",{className:"form-group",children:Object(a.jsxs)("label",{children:[r("workouts:Duration"),":",Object(a.jsx)("div",{className:"container",children:Object(a.jsxs)("div",{className:"row",children:[Object(a.jsx)("div",{className:"col-5",children:Object(a.jsx)("input",{className:"form-control",name:"duration_from",onChange:e=>o(e),pattern:"^([0-9]*[0-9]):([0-5][0-9])$",placeholder:"hh:mm",type:"text"})}),Object(a.jsx)("div",{className:"col-2 align-middle text-center",children:r("common:to")}),Object(a.jsx)("div",{className:"col-5",children:Object(a.jsx)("input",{className:"form-control",name:"duration_to",onChange:e=>o(e),pattern:"^([0-9]*[0-9]):([0-5][0-9])$",placeholder:"hh:mm",type:"text"})})]})})]})}),Object(a.jsx)("div",{className:"form-group",children:Object(a.jsxs)("label",{children:[r("workouts:Average speed")," (km/h):",Object(a.jsx)("div",{className:"container",children:Object(a.jsxs)("div",{className:"row",children:[Object(a.jsx)("div",{className:"col-5",children:Object(a.jsx)("input",{className:"form-control",min:0,name:"ave_speed_from",onChange:e=>o(e),step:"1",type:"number"})}),Object(a.jsx)("div",{className:"col-2 align-middle text-center",children:r("common:to")}),Object(a.jsx)("div",{className:"col-5",children:Object(a.jsx)("input",{className:"form-control",min:0,name:"ave_speed_to",onChange:e=>o(e),step:"1",type:"number"})})]})})]})}),Object(a.jsx)("div",{className:"form-group",children:Object(a.jsxs)("label",{children:[r("workouts:Max. speed")," (km/h):",Object(a.jsx)("div",{className:"container",children:Object(a.jsxs)("div",{className:"row",children:[Object(a.jsx)("div",{className:"col-5",children:Object(a.jsx)("input",{className:"form-control",min:0,name:"max_speed_from",onChange:e=>o(e),step:"1",type:"number"})}),Object(a.jsx)("div",{className:"col-2 align-middle text-center",children:r("common:to")}),Object(a.jsx)("div",{className:"col-5",children:Object(a.jsx)("input",{className:"form-control",min:0,name:"max_speed_to",onChange:e=>o(e),step:"1",type:"number"})})]})})]})}),Object(a.jsx)("input",{className:"btn btn-primary btn-lg btn-block",onClick:()=>t(),type:"submit",value:r("workouts:Filter")})]})})})}}class it extends c.a.PureComponent{render(){const e=this.props,t=e.display,s=e.workout;return Object(a.jsxs)("div",{className:"workout-map".concat("list"===t?"-list":""),children:[Object(a.jsx)("img",{src:"".concat(C,"workouts/map/").concat(s.map,"?").concat(Date.now()),alt:"workout map"}),Object(a.jsxs)("div",{className:"map-attribution".concat("list"===t?"-list":""),children:[Object(a.jsx)("span",{className:"map-attribution-text",children:"\xa9"}),Object(a.jsx)("a",{className:"map-attribution-text",href:"http://www.openstreetmap.org/copyright",target:"_blank",rel:"noopener noreferrer",children:"OpenStreetMap"})]})]})}}class lt extends c.a.PureComponent{render(){const e=this.props,t=e.loading,s=e.sports,r=e.t,o=e.user,c=e.workouts;return Object(a.jsx)("div",{className:"card workout-card",children:Object(a.jsxs)("div",{className:"card-body",children:[Object(a.jsxs)("table",{className:"table",children:[Object(a.jsx)("thead",{children:Object(a.jsxs)("tr",{children:[Object(a.jsx)("th",{scope:"col"}),Object(a.jsx)("th",{scope:"col",children:r("common:Workout")}),Object(a.jsx)("th",{scope:"col",children:r("workouts:Date")}),Object(a.jsx)("th",{scope:"col",children:r("workouts:Distance")}),Object(a.jsx)("th",{scope:"col",children:r("workouts:Duration")}),Object(a.jsx)("th",{scope:"col",children:r("workouts:Ave. speed")}),Object(a.jsx)("th",{scope:"col",children:r("workouts:Max. speed")})]})}),Object(a.jsx)("tbody",{children:!t&&s&&c.map(((e,t)=>Object(a.jsxs)("tr",{children:[Object(a.jsxs)("td",{children:[Object(a.jsx)("span",{className:"heading-span-absolute",children:r("common:Sport")}),Object(a.jsx)("img",{className:"workout-sport",src:s.filter((t=>t.id===e.sport_id)).map((e=>e.img)),alt:"workout sport logo"})]}),Object(a.jsxs)("td",{className:"workout-title",children:[Object(a.jsx)("span",{className:"heading-span-absolute",children:r("common:Workout")}),Object(a.jsx)(Y.a,{to:"/workouts/".concat(e.id),children:e.title}),e.map&&Object(a.jsx)(it,{workout:e,display:"list"})]}),Object(a.jsxs)("td",{children:[Object(a.jsx)("span",{className:"heading-span-absolute",children:r("workouts:Date")}),Object(y.a)(z(e.workout_date,o.timezone),"dd/MM/yyyy HH:mm")]}),Object(a.jsxs)("td",{className:"text-right",children:[Object(a.jsx)("span",{className:"heading-span-absolute",children:r("workouts:Distance")}),Number(e.distance).toFixed(2)," km"]}),Object(a.jsxs)("td",{className:"text-right",children:[Object(a.jsx)("span",{className:"heading-span-absolute",children:r("workouts:Duration")}),e.moving]}),Object(a.jsxs)("td",{className:"text-right",children:[Object(a.jsx)("span",{className:"heading-span-absolute",children:r("workouts:Ave. speed")}),e.ave_speed," km/h"]}),Object(a.jsxs)("td",{className:"text-right",children:[Object(a.jsx)("span",{className:"heading-span-absolute",children:r("workouts:Max. speed")}),e.max_speed," km/h"]})]},t)))})]}),t&&Object(a.jsx)("div",{className:"loader"})]})})}}class dt extends c.a.Component{constructor(e,t){super(e,t),this.state={params:{page:1,per_page:10}}}componentDidMount(){this.props.loadWorkouts(this.state.params)}setParams(e){const 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)}render(){const e=this.props,t=e.loading,s=e.loadWorkouts,r=e.loadMoreWorkouts,o=e.message,c=e.sports,n=e.t,i=e.user,l=e.workouts,d=this.state.params,u=!(l.length>0)||null===l[l.length-1].previous_workout;return Object(a.jsxs)("div",{children:[Object(a.jsx)(f.a,{children:Object(a.jsxs)("title",{children:["FitTrackee - ",n("common:Workouts")]})}),o?Object(a.jsx)(v,{message:o,t:n}):Object(a.jsx)("div",{className:"container history",children:Object(a.jsxs)("div",{className:"row",children:[Object(a.jsx)("div",{className:"col-md-3",children:Object(a.jsx)(nt,{sports:c,loadWorkouts:()=>s(d),t:n,updateParams:e=>this.setParams(e)})}),Object(a.jsxs)("div",{className:"col-md-9 workouts-result",children:[Object(a.jsx)(lt,{workouts:l,loading:t,sports:c,t:n,user:i}),!u&&Object(a.jsx)("input",{type:"submit",className:"btn btn-default btn-md btn-block",value:"Load more workouts",onClick:()=>{d.page+=1,r(d),this.setState(d)}}),0===l.length&&Object(a.jsx)(ct,{t:n})]})]})})]})}}var ut=Object(w.a)()(Object(O.c)((e=>({workouts:e.workouts.data,loading:e.loading,message:e.message,sports:e.sports.data,user:e.user})),(e=>({loadWorkouts:t=>{e(q("getData","workouts",t))},loadMoreWorkouts:t=>{e(Ce(t))}})))(dt));var mt=Object(w.a)()(Object(O.c)((e=>({appConfig:e.application.config,pathname:e.router.location.pathname,message:e.message})),(e=>({onDeletePicture:()=>{e((e=>ge.deletePicture().then((t=>204===t.status?e(ke()):e(fe(t.message)))).catch((e=>{throw e}))))},onUploadPicture:t=>{e((e=>t=>{e.preventDefault();const s=new FormData;return s.append("file",e.target.picture.files[0]),e.target.reset(),U.addDataWithFile("auth/picture",s).then((e=>{if("success"===e.status)return t(ke());const s=413===e.status?"Error during picture update, file size exceeds max size.":e.message;return t(fe(s))})).catch((e=>{throw e}))})(t))}})))((function({appConfig:e,displayModal:t,editable:s,isDeletable:r,message:o,onDeletePicture:c,onUploadPicture:n,pathname:i,t:l,user:d}){const u=d.created_at?Object(y.a)(new Date(d.created_at),"dd/MM/yyyy HH:mm"):"",m=d.birth_date?Object(y.a)(new Date(d.birth_date),"dd/MM/yyyy"):"",j=D(e.max_single_file_size);return Object(a.jsxs)("div",{children:[Object(a.jsx)(f.a,{children:Object(a.jsxs)("title",{children:["FitTrackee - ",l("user:Profile")]})}),Object(a.jsx)(v,{message:o,t:l}),Object(a.jsxs)("div",{className:"container",children:[Object(a.jsx)("h1",{className:"page-title",children:l("user:Profile")}),Object(a.jsx)("div",{className:"row",children:Object(a.jsx)("div",{className:"col-md-12",children:Object(a.jsxs)("div",{className:"card",children:[Object(a.jsx)("div",{className:"card-header userName",children:Object(a.jsx)("strong",{children:d.username})}),Object(a.jsxs)("div",{className:"card-body",children:[Object(a.jsxs)("div",{className:"row",children:[Object(a.jsxs)("div",{className:"col-md-8",children:[Object(a.jsxs)("p",{children:[Object(a.jsx)("span",{className:"user-label",children:l("user:Email")}),": ",d.email]}),Object(a.jsxs)("p",{children:[Object(a.jsx)("span",{className:"user-label",children:l("user:Registration Date")}),": ",u]}),Object(a.jsxs)("p",{children:[Object(a.jsx)("span",{className:"user-label",children:l("user:First Name")}),": ",d.first_name]}),Object(a.jsxs)("p",{children:[Object(a.jsx)("span",{className:"user-label",children:l("user:Last Name")}),": ",d.last_name]}),Object(a.jsxs)("p",{children:[Object(a.jsx)("span",{className:"user-label",children:l("user:Birth Date")}),": ",m]}),Object(a.jsxs)("p",{children:[Object(a.jsx)("span",{className:"user-label",children:l("user:Location")}),": ",d.location]}),Object(a.jsxs)("p",{children:[Object(a.jsx)("span",{className:"user-label",children:l("user:Bio")}),":"," ",d.bio]}),Object(a.jsxs)("p",{children:[Object(a.jsx)("span",{className:"user-label",children:l("user:Language")}),": ",d.language]}),Object(a.jsxs)("p",{children:[Object(a.jsx)("span",{className:"user-label",children:l("user:Timezone")}),": ",d.timezone]}),Object(a.jsxs)("p",{children:[Object(a.jsx)("span",{className:"user-label",children:l("user:First day of week")}),": ",d.weekm?l("user:Monday"):l("user:Sunday")]})]}),Object(a.jsxs)("div",{className:"col-md-4",children:[!0===d.picture&&Object(a.jsxs)("div",{children:[Object(a.jsx)("img",{alt:"Profile",src:"".concat(C,"users/").concat(d.username,"/picture")+"?".concat(Date.now()),className:"img-fluid App-profile-img-small"}),s&&Object(a.jsxs)(a.Fragment,{children:[Object(a.jsx)("br",{}),Object(a.jsx)("button",{type:"submit",onClick:()=>c(),children:l("user:Delete picture")}),Object(a.jsx)("br",{}),Object(a.jsx)("br",{})]})]}),s&&Object(a.jsxs)("form",{encType:"multipart/form-data",onSubmit:e=>n(e),children:[Object(a.jsx)("input",{type:"file",name:"picture",accept:".png,.jpg,.gif"}),Object(a.jsx)("br",{}),Object(a.jsx)("button",{type:"submit",children:l("user:Send")})," (max. size: ".concat(j,")")]})," "]})]}),s&&Object(a.jsx)("button",{className:"btn btn-primary",onClick:()=>Ta.push("/profile/edit"),children:l("common:Edit")}),r&&Object(a.jsx)("button",{className:"btn btn-danger",onClick:()=>t(!0),children:l("user:Delete user account")}),Object(a.jsx)("button",{className:"btn btn-secondary",onClick:()=>"/profile"===i?Ta.push("/"):Ta.go(-1),children:l("/profile"===i?"common:Back to home":"common:Back")})]})]})})})]})]})})));var jt=Object(w.a)()(Object(O.c)((e=>({user:e.user})))((function({t:e,user:t}){return Object(a.jsx)("div",{children:Object(a.jsx)(mt,{editable:!0,t:e,user:t})})}))),pt=s(897),ht=s(898),bt=s(899),xt=s(900),Ot=s(238),gt=s(242),ft=s(901),wt=s(902),vt=s(107),kt=s(903),yt=s(144);function Nt(e){const t=e.isDisabled,s=e.isMore,r=e.sportImg,o=e.workout;return Object(a.jsx)(Y.a,{className:"calendar-workout".concat(s),to:"/workouts/".concat(o.id),children:Object(a.jsxs)(a.Fragment,{children:[Object(a.jsx)("img",{alt:"workout sport logo",className:"workout-sport ".concat(t),src:r,title:o.title}),o.records.length>0&&Object(a.jsx)("sup",{children:Object(a.jsx)("i",{className:"fa fa-trophy custom-fa-small","aria-hidden":"true",title:o.records.map((e=>" ".concat(je.filter((t=>t.record_type===e.record_type))[0].label)))})})]})})}class _t extends c.a.Component{constructor(e,t){super(e,t),this.state={isHidden:!0}}handleDisplayMore(){this.setState({isHidden:!this.state.isHidden})}render(){const e=this.props,t=e.dayWorkouts,s=e.isDisabled,r=e.sports,o=this.state.isHidden;return Object(a.jsxs)("div",{children:[t.map((e=>Object(a.jsx)(Nt,{workout:e,isDisabled:s,isMore:"",sportImg:r.filter((t=>t.id===e.sport_id)).map((e=>e.img))},e.id))),t.length>2&&Object(a.jsx)("i",{className:"fa fa-".concat(o?"plus":"times"," calendar-more"),"aria-hidden":"true",onClick:()=>this.handleDisplayMore(),title:"show more workouts"}),!o&&Object(a.jsx)("div",{className:"calendar-display-more",children:t.map((e=>Object(a.jsx)(Nt,{workout:e,isDisabled:s,isMore:"-more",sportImg:r.filter((t=>t.id===e.sport_id)).map((e=>e.img))},e.id)))})]})}}const St=(e,t)=>{const s=Object(pt.a)(e),a=Object(ht.a)(e),r=t?1:0;return{start:Object(bt.a)(s,{weekStartsOn:r}),end:Object(xt.a)(a)}};class Dt extends c.a.Component{constructor(e,t){super(e,t);const s=new Date;this.state={currentMonth:s,startDate:St(s,e.weekm).start,endDate:St(s,e.weekm).end,weekStartOnMonday:e.weekm}}componentDidMount(){this.props.loadMonthWorkouts(this.state.startDate,this.state.endDate)}renderHeader(e){return Object(a.jsxs)("div",{className:"header row flex-middle",children:[Object(a.jsx)("div",{className:"col col-start",onClick:()=>this.handlePrevMonth(),children:Object(a.jsx)("i",{className:"fa fa-chevron-left","aria-hidden":"true"})}),Object(a.jsx)("div",{className:"col col-center",children:Object(a.jsx)("span",{children:Object(y.a)(this.state.currentMonth,"MMM yyyy",e)})}),Object(a.jsx)("div",{className:"col col-end",onClick:()=>this.handleNextMonth(),children:Object(a.jsx)("i",{className:"fa fa-chevron-right","aria-hidden":"true"})})]})}renderDays(e){const t=[],s=this.state.startDate;for(let r=0;r<7;r++)t.push(Object(a.jsx)("div",{className:"col col-center",children:Object(y.a)(Object(Ot.a)(s,r),"EEE",e)},r));return Object(a.jsx)("div",{className:"days row",children:t})}filterWorkouts(e){const t=this.props,s=t.workouts,a=t.user;return s?s.filter((t=>Object(gt.a)(z(t.workout_date,a.timezone),e))):[]}renderCells(){const e=this.state,t=e.currentMonth,s=e.startDate,r=e.endDate,o=e.weekStartOnMonday,c=this.props.sports,n=[];let i=[],l=s,d="";for(;l<=r;){for(let e=0;e<7;e++){d=Object(y.a)(l,"d");const s=this.filterWorkouts(l),r=Object(ft.a)(l,t)?"":"-disabled",n=o?[5,6].includes(e):[0,6].includes(e);i.push(Object(a.jsx)("div",{className:"col cell ".concat(n?" weekend":"").concat(Object(wt.a)(l)?" today":""),children:Object(a.jsxs)("div",{className:"img".concat(r),children:[Object(a.jsx)("span",{className:"number",children:d}),Object(a.jsx)(_t,{dayWorkouts:s,isDisabled:r,sports:c})]})},l)),l=Object(Ot.a)(l,1)}n.push(Object(a.jsx)("div",{className:"row",children:i},l)),i=[]}return Object(a.jsx)("div",{className:"body",children:n})}updateStateDate(e){const t=St(e,this.state.weekStartOnMonday),s=t.start,a=t.end;this.setState({currentMonth:e,startDate:s,endDate:a}),this.props.loadMonthWorkouts(s,a)}handleNextMonth(){const e=Object(vt.a)(this.state.currentMonth,1);this.updateStateDate(e)}handlePrevMonth(){const e=Object(kt.a)(this.state.currentMonth,1);this.updateStateDate(e)}render(){const e={locale:"fr"===this.props.language?yt.fr:yt.enGB};return Object(a.jsx)("div",{className:"card workout-card",children:Object(a.jsxs)("div",{className:"calendar",children:[this.renderHeader(e),this.renderDays(e),this.renderCells()]})})}}var Ct=Object(O.c)((e=>({workouts:e.calendarWorkouts.data,language:e.language,sports:e.sports.data,user:e.user})),(e=>({loadMonthWorkouts:(t,s)=>{const a="yyyy-MM-dd";var r,o;e((r=Object(y.a)(t,a),o=Object(y.a)(s,a),e=>U.getData("workouts",{from:r,to:o,order:"desc",per_page:100}).then((t=>{"success"===t.status?e({type:"UPDATE_CALENDAR",workouts:t.data.workouts}):e(W("workouts|".concat(t.message)))})).catch((t=>e(W("workouts|".concat(t)))))))}})))(Dt);function Et(e){const t=e.records,s=e.sports,r=e.t,o=e.user,c=Oe(s,r),n=t.reduce(((e,t)=>{const s=c.find((e=>e.id===t.sport_id));return void 0===e[s.label]&&(e[s.label]={img:s.img,records:[]}),e[s.label].records.push(((e,t)=>{let s;switch(e.record_type){case"AS":case"MS":s="".concat(e.value," km/h");break;case"FD":s="".concat(e.value," km");break;default:s=e.value}const a=je.filter((t=>t.record_type===e.record_type)),r=Object(ie.a)(a,1)[0];return{workout_date:pe(z(e.workout_date,t)).workout_date,workout_id:e.workout_id,id:e.id,record_type:r.label,value:s}})(t,o.timezone)),e}),{});return Object(a.jsxs)("div",{className:"card workout-card",children:[Object(a.jsx)("div",{className:"card-header",children:r("workouts:Personal records")}),Object(a.jsx)("div",{className:"card-body",children:0===Object.keys(n).length?r("common:No records."):Object.keys(n).sort().map((e=>Object(a.jsxs)("div",{children:[Object(a.jsxs)("span",{className:"heading-span",children:[Object(a.jsx)("img",{alt:"".concat(e," logo"),className:"record-logo",src:n[e].img}),e]}),Object(a.jsxs)("table",{className:"table table-borderless table-sm record-table",children:[Object(a.jsx)("thead",{children:Object(a.jsx)("tr",{children:Object(a.jsxs)("th",{colSpan:"3",children:[Object(a.jsx)("img",{alt:"".concat(e," logo"),className:"record-logo",src:n[e].img}),e]})})}),Object(a.jsx)("tbody",{children:n[e].records.map((e=>Object(a.jsxs)("tr",{className:"record-tr",children:[Object(a.jsx)("td",{className:"record-td",children:r("workouts:".concat(e.record_type))}),Object(a.jsx)("td",{className:"record-td text-right",children:e.value}),Object(a.jsx)("td",{className:"record-td text-right",children:Object(a.jsx)(Y.a,{to:"/workouts/".concat(e.workout_id),children:e.workout_date})})]},e.id)))})]})]},e)))})]})}var At=s(239),Mt=s(904);const Tt=[{duration:"week",dateFormat:"yyyy-MM-dd",xAxis:"dd/MM"},{duration:"month",dateFormat:"yyyy-MM",xAxis:"MM/yyyy"},{duration:"year",dateFormat:"yyyy",xAxis:"yyyy"}],Pt=(e,t=!1)=>{let s="0";t&&(s=String(Math.floor(e/86400)),e%=86400);const a=String(Math.floor(e/3600)).padStart(2,"0");e%=3600;const r=String(Math.floor(e/60)).padStart(2,"0"),o=String(e%60).padStart(2,"0");return t?"".concat("0"===s?"":"".concat(s,"d:")).concat("00"===a?"":"".concat(a,"h:")).concat(r,"m:").concat(o,"s"):"".concat("00"===a?"":"".concat(a,":")).concat(r,":").concat(o)},zt=(e,t)=>0===t?"":"distance"===e?"".concat(t.toFixed(2)," km"):"duration"===e?Pt(t):t,Ft=(e,t)=>{switch(e){case"week":return Object(Ot.a)(t,7);case"year":return Object(At.a)(t,1);case"month":default:return Object(vt.a)(t,1)}},Rt=(e,t,s,a,r)=>{const o=[],c=[],n=[];for(let i=((e,t,s)=>{switch(e){case"week":return Object(bt.a)(t,{weekStartsOn:s?1:0});case"year":return Object(Mt.a)(t);case"month":default:return Object(pt.a)(t)}})(s.duration,s.start,r);i<=s.end;i=Ft(s.duration,i)){const r=Tt.filter((e=>e.duration===s.duration)),l=Object(ie.a)(r,1)[0],d=Object(y.a)(i,l.dateFormat),u=Object(y.a)(i,l.xAxis),m={date:u},j={date:u},p={date:u};e[d]&&Object.keys(e[d]).filter((e=>!a||a.includes(+e))).map((s=>{const a=t.filter((e=>e.id===+s))[0].label;return m[a]=e[d][s].nb_workouts,j[a]=e[d][s].total_distance,p[a]=e[d][s].total_duration,null})),o.push(m),c.push(j),n.push(p)}return{workouts:o,distance:c,duration:n}},Lt=(e,t)=>"duration"===e?Pt(t,!0):"distance"===e?t.toFixed(2):t;function Ut(e){if(e.active){const t=e.displayedData,s=e.payload,r=e.label;let o=0;return s.map((e=>o+=e.value)),Object(a.jsxs)("div",{className:"custom-tooltip",children:[Object(a.jsx)("p",{className:"custom-tooltip-label",children:r}),s.map((e=>Object(a.jsxs)("p",{style:{color:e.fill},children:[e.name,": ",Lt(t,e.value)," ",e.unit]},e.name))),s.length>0&&Object(a.jsxs)("p",{children:["Total: ",Lt(t,o)]})]})}return null}function It(e){const t=e.displayedData,s=e.x,r=e.y,o=e.width,c=e.value;if(!c)return null;const n=zt(t,c);return Object(a.jsx)("g",{children:Object(a.jsx)("text",{x:s+o/2,y:r-10,fill:"#666",fontSize:"11",textAnchor:"middle",dominantBaseline:"middle",children:n})})}class Wt extends c.a.PureComponent{constructor(e,t){super(e,t),this.state={displayedData:"distance"}}handleRadioChange(e){this.setState({displayedData:e.target.name})}render(){const e=this.state.displayedData,t=this.props,s=t.sports,r=t.stats,o=t.t;return 0===Object.keys(r).length?o("common:No workouts."):Object(a.jsxs)("div",{className:"chart-stats",children:[Object(a.jsxs)("div",{className:"row chart-radio",children:[Object(a.jsxs)("label",{className:"radioLabel col",children:[Object(a.jsx)("input",{type:"radio",name:"distance",checked:"distance"===e,onChange:e=>this.handleRadioChange(e)}),o("statistics:distance")]}),Object(a.jsxs)("label",{className:"radioLabel col",children:[Object(a.jsx)("input",{type:"radio",name:"duration",checked:"duration"===e,onChange:e=>this.handleRadioChange(e)}),o("statistics:duration")]}),Object(a.jsxs)("label",{className:"radioLabel col",children:[Object(a.jsx)("input",{type:"radio",name:"workouts",checked:"workouts"===e,onChange:e=>this.handleRadioChange(e)}),o("statistics:workouts")]})]}),Object(a.jsx)(Re.f,{height:300,children:Object(a.jsxs)(Re.c,{data:r[e],margin:{top:15,bottom:0},children:[Object(a.jsx)(Re.h,{dataKey:"date",interval:0}),Object(a.jsx)(Re.i,{tickFormatter:t=>zt(e,t)}),Object(a.jsx)(Re.g,{content:Object(a.jsx)(Ut,{displayedData:e})}),s.map(((t,r)=>Object(a.jsx)(Re.b,{isAnimationActive:!1,dataKey:t.label,stackId:"a",fill:me[r],label:r===s.length-1?Object(a.jsx)(It,{displayedData:e}):"",name:o("sports:".concat(t.label))},t.id)))]})})]})}}class Ht extends c.a.PureComponent{componentDidMount(){this.updateData()}componentDidUpdate(e){(this.props.user.username&&this.props.user.username!==e.user.username||this.props.statsParams!==e.statsParams)&&this.updateData()}updateData(){this.props.user.username&&this.props.loadWorkouts(this.props.user.username,this.props.user.weekm,this.props.statsParams)}render(){const e=this.props,t=e.displayedSports,s=e.sports,r=e.statistics,o=e.statsParams,c=e.displayEmpty,n=e.t,i=e.user;if(!c&&0===Object.keys(r).length)return Object(a.jsx)("span",{children:n("common:No workouts.")});const l=Rt(r,s,o,t,i.weekm);return Object(a.jsx)(Wt,{sports:s,stats:l,t:n})}}var qt=Object(O.c)((e=>({sports:e.sports.data,statistics:e.statistics.data,user:e.user})),(e=>({loadWorkouts:(t,s,a)=>{const r="yyyy-MM-dd",o="week"===a.duration?"".concat(a.duration).concat(s?"m":""):a.duration,c={from:Object(y.a)(a.start,r),to:Object(y.a)(a.end,r),time:o};e(((e,t,s)=>a=>U.getData("stats/".concat(e,"/").concat(t),s).then((e=>{"success"===e.status?a(I("statistics",e.data)):a(W("statistics|".concat(e.message)))})).catch((e=>a(W("statistics|".concat(e))))))(t,a.type,c))}})))(Ht);class Bt extends c.a.Component{constructor(e,t){super(e,t);const s=new Date;this.state={start:Object(pt.a)(s),end:Object(ht.a)(s),duration:"week",type:"by_time"}}render(){const e=this.props.t;return Object(a.jsxs)("div",{className:"card workout-card",children:[Object(a.jsx)("div",{className:"card-header",children:e("dashboard:This month")}),Object(a.jsx)("div",{className:"card-body",children:Object(a.jsx)(qt,{displayEmpty:!1,statsParams:this.state,t:e})})]})}}function Gt(e){const t=e.t,s=e.user,r=s.total_duration.match(/day/g)?"".concat(s.total_duration.split(" ")[0]," ").concat(s.total_duration.match(/days/g)?t("common:days"):t("common:day")):"0 ".concat(t("common:days"),",");let o=s.total_duration.match(/day/g)?s.total_duration.split(", ")[1]:s.total_duration;return o="".concat(o.split(":")[0],"h ").concat(o.split(":")[1],"min"),Object(a.jsxs)("div",{className:"row",children:[Object(a.jsx)("div",{className:"col-lg-3 col-md-6 col-sm-6",children:Object(a.jsx)("div",{className:"card workout-card",children:Object(a.jsxs)("div",{className:"card-body row",children:[Object(a.jsx)("div",{className:"col-3",children:Object(a.jsx)("i",{className:"fa fa-calendar fa-3x fa-color"})}),Object(a.jsxs)("div",{className:"col-9 text-right",children:[Object(a.jsx)("div",{className:"huge",children:s.nb_workouts}),Object(a.jsx)("div",{children:"".concat(1===s.nb_workouts?t("common:workout"):t("common:workouts"))})]})]})})}),Object(a.jsx)("div",{className:"col-lg-3 col-md-6 col-sm-6",children:Object(a.jsx)("div",{className:"card workout-card",children:Object(a.jsxs)("div",{className:"card-body row",children:[Object(a.jsx)("div",{className:"col-3",children:Object(a.jsx)("i",{className:"fa fa-road fa-3x fa-color"})}),Object(a.jsxs)("div",{className:"col-9 text-right",children:[Object(a.jsx)("div",{className:"huge",children:Number(s.total_distance).toFixed(2)}),Object(a.jsx)("div",{children:"km"})]})]})})}),Object(a.jsx)("div",{className:"col-lg-3 col-md-6 col-sm-6",children:Object(a.jsx)("div",{className:"card workout-card",children:Object(a.jsxs)("div",{className:"card-body row",children:[Object(a.jsx)("div",{className:"col-3",children:Object(a.jsx)("i",{className:"fa fa-clock-o fa-3x fa-color"})}),Object(a.jsxs)("div",{className:"col-9 text-right",children:[Object(a.jsx)("div",{className:"huge",children:r}),Object(a.jsx)("div",{children:o})]})]})})}),Object(a.jsx)("div",{className:"col-lg-3 col-md-6 col-sm-6",children:Object(a.jsx)("div",{className:"card workout-card",children:Object(a.jsxs)("div",{className:"card-body row",children:[Object(a.jsx)("div",{className:"col-3",children:Object(a.jsx)("i",{className:"fa fa-tags fa-3x fa-color"})}),Object(a.jsxs)("div",{className:"col-9 text-right",children:[Object(a.jsx)("div",{className:"huge",children:s.nb_sports}),Object(a.jsx)("div",{children:"".concat(1===s.nb_sports?t("common:sport"):t("common:sports"))})]})]})})})]})}function Vt(e){const t=e.sports,s=e.t,r=e.user,o=e.workout;return Object(a.jsxs)("div",{className:"card workout-card text-center",children:[Object(a.jsx)("div",{className:"card-header",children:Object(a.jsxs)(Y.a,{to:"/workouts/".concat(o.id),children:[t.filter((e=>e.id===o.sport_id)).map((e=>s("sports:".concat(e.label))))," ","-"," ",Object(y.a)(z(o.workout_date,r.timezone),"dd/MM/yyyy HH:mm")]})}),Object(a.jsx)("div",{className:"card-body",children:Object(a.jsxs)("div",{className:"row",children:[o.map&&Object(a.jsx)("div",{className:"col",children:Object(a.jsx)(it,{workout:o})}),Object(a.jsx)("div",{className:"col",children:Object(a.jsxs)("p",{children:[Object(a.jsx)("i",{className:"fa fa-clock-o","aria-hidden":"true"})," ",s("workouts:Duration"),": ",o.moving,o.map?Object(a.jsxs)("span",{children:[Object(a.jsx)("br",{}),Object(a.jsx)("br",{})]}):" - ",Object(a.jsx)("i",{className:"fa fa-road","aria-hidden":"true"})," ",s("workouts:Distance"),": ",o.distance," km"]})})]})})]})}class Jt extends c.a.Component{constructor(e,t){super(e,t),this.state={page:1}}componentDidMount(){this.props.loadWorkouts()}render(){const e=this.props,t=e.loadMoreWorkouts,s=e.message,r=e.records,o=e.sports,c=e.t,n=e.user,i=e.workouts,l=!(i.length>0)||null===i[i.length-1].previous_workout,d=this.state.page;return Object(a.jsxs)("div",{children:[Object(a.jsx)(f.a,{children:Object(a.jsxs)("title",{children:["FitTrackee - ",c("common:Dashboard")]})}),s?Object(a.jsx)(v,{message:s,t:c}):i&&n.total_duration&&o.length>0&&Object(a.jsxs)("div",{className:"container dashboard",children:[Object(a.jsx)(Gt,{user:n,t:c}),Object(a.jsxs)("div",{className:"row",children:[Object(a.jsxs)("div",{className:"col-md-4",children:[Object(a.jsx)(Bt,{t:c}),Object(a.jsx)(Et,{t:c,records:r,sports:o,user:n})]}),Object(a.jsxs)("div",{className:"col-md-8",children:[Object(a.jsx)(Ct,{weekm:n.weekm}),i.length>0?i.map((e=>Object(a.jsx)(Vt,{workout:e,sports:o,t:c,user:n},e.id))):Object(a.jsx)(ct,{t:c}),!l&&Object(a.jsx)("input",{type:"submit",className:"btn btn-default btn-md btn-block",value:"Load more workouts",onClick:()=>{t(d+1),this.setState({page:d+1})}})]})]})]})]})}}var Kt=Object(w.a)()(Object(O.c)((e=>({workouts:e.workouts.data,message:e.message,records:e.records.data,sports:e.sports.data,user:e.user})),(e=>({loadWorkouts:()=>{e(q("getData","workouts",{page:1})),e(q("getData","records"))},loadMoreWorkouts:t=>{e(Ce({page:t}))}})))(Jt));function Yt(){return Object(a.jsx)("footer",{className:"footer",children:Object(a.jsxs)("div",{className:"container",children:[Object(a.jsx)("strong",{children:"FitTrackee"})," v","0.4.5"," -"," ",Object(a.jsx)("a",{href:"https://github.com/SamR1/FitTrackee",target:"_blank",rel:"noopener noreferrer",children:"source code"})," ","under"," ",Object(a.jsx)("a",{href:"https://choosealicense.com/licenses/gpl-3.0/",target:"_blank",rel:"noopener noreferrer",children:"GPLv3"})," ","license -"," ",Object(a.jsx)("a",{href:"https://samr1.github.io/FitTrackee/",target:"_blank",rel:"noopener noreferrer",children:"documentation"})]})})}class Xt extends c.a.Component{componentDidMount(){this.props.UserLogout()}render(){return Object(a.jsx)("div",{className:"container dashboard",children:Object(a.jsxs)("div",{className:"row",children:[Object(a.jsx)("div",{className:"col-2"}),Object(a.jsx)("div",{className:"card col-8",children:Object(a.jsx)("div",{className:"card-body",children:Object(a.jsx)("div",{className:"text-center",children:Object(a.jsxs)(ne.a,{i18nKey:"user:loggedOut",children:["You are now logged out. Click ",Object(a.jsx)(Y.a,{to:"/login",children:"here"})," to log back in."]})})})}),Object(a.jsx)("div",{className:"col-2"})]})})}}var $t=Object(O.c)((e=>({user:e.user})),(e=>({UserLogout:()=>{e({type:"LOGOUT"})}})))(Xt);function Zt(){return(Zt=Object.assign||function(e){for(var t=1;t=0||(r[s]=e[s]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,s)&&(r[s]=e[s])}return r}var es=o.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"}),ts=o.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"}),ss=o.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"}),as=o.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"}),rs=o.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"}),os=o.createElement("path",{d:"m53.273 27.803 145.302 120.879v-120.879z",fill:"#406bd4"}),cs=o.createElement("path",{d:"m313.425 150.571v-122.768h148.082z",fill:"#3257b0"}),ns=o.createElement("path",{d:"m394.732 198.575 117.268-97.556v97.556z",fill:"#3257b0"}),is=o.createElement("g",{fill:"#406bd4"},o.createElement("path",{d:"m0 99.317v99.258h119.313z"}),o.createElement("path",{d:"m0 313.425v97.699l117.44-97.699z"}),o.createElement("path",{d:"m50.49 484.197 148.085-122.676v122.676z"})),ls=o.createElement("path",{d:"m313.425 484.197v-124.139l149.221 124.139z",fill:"#3257b0"}),ds=o.createElement("path",{d:"m512 409.423-115.395-95.998h115.395z",fill:"#3257b0"}),us=o.createElement("path",{d:"m512 222.142h-222.142v-194.339h-67.716v194.339h-222.142v67.716h222.142v194.339h67.716v-194.339h222.142z",fill:"#f40055"}),ms=o.createElement("path",{d:"m289.858 222.142v-194.339h-33.858v456.394h33.858v-194.339h222.142v-67.716z",fill:"#c20044"});function js(e,t){let s=e.title,a=e.titleId,r=Qt(e,["title","titleId"]);return o.createElement("svg",Zt({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":a},r),s?o.createElement("title",{id:a},s):null,es,ts,ss,as,rs,os,cs,ns,is,ls,ds,us,ms)}const ps=o.forwardRef(js);s.p;function hs(){return(hs=Object.assign||function(e){for(var t=1;t=0||(r[s]=e[s]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,s)&&(r[s]=e[s])}return r}var xs=o.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"}),Os=o.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"}),gs=o.createElement("path",{d:"m160.795 27.803h190.409v456.394h-190.409z",fill:"#f0f9ff"}),fs=o.createElement("path",{d:"m256 27.803h95.205v456.394h-95.205z",fill:"#cee5f5"});function ws(e,t){let s=e.title,a=e.titleId,r=bs(e,["title","titleId"]);return o.createElement("svg",hs({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":a},r),s?o.createElement("title",{id:a},s):null,xs,Os,gs,fs)}const vs=o.forwardRef(ws);s.p;const ks=[{name:"en",selected:!0,flag:Object(a.jsx)(ps,{})},{name:"fr",selected:!1,flag:Object(a.jsx)(vs,{})}];class ys extends o.Component{constructor(e){super(e),this.state={isOpen:!1}}toggleDropdown(){this.setState((e=>({isOpen:!e.isOpen})))}render(){const e=this.state.isOpen,t=this.props,s=t.language,r=t.onUpdateLanguage;return Object(a.jsx)("div",{className:"dropdown-wrapper",onClick:()=>this.toggleDropdown(),children:Object(a.jsx)("ul",{className:"dropdown-list i18n-flag",children:ks.filter((t=>e?t:t.name===s)).map((t=>Object(a.jsxs)("li",{className:"dropdown-item".concat(t.name===s&&e?" dropdown-item-selected":""),onClick:()=>r(t.name,s),children:[t.flag," ",t.name]},t.name)))})})}}var Ns=Object(O.c)((e=>({language:e.language})),(e=>({onUpdateLanguage:(t,s)=>{t!==s&&e(B(t))}})))(ys);class _s extends c.a.PureComponent{render(){const e=this.props,t=e.admin,s=e.isAuthenticated,r=e.picture,o=e.t,c=e.username;return Object(a.jsx)("header",{children:Object(a.jsx)("nav",{className:"navbar navbar-expand-lg navbar-light bg-light",children:Object(a.jsxs)("div",{className:"container",children:[Object(a.jsx)("span",{className:"navbar-brand",children:"FitTrackee"}),Object(a.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(a.jsx)("span",{className:"navbar-toggler-icon"})}),Object(a.jsxs)("div",{className:"collapse navbar-collapse",id:"navbarSupportedContent",children:[Object(a.jsxs)("ul",{className:"navbar-nav mr-auto",children:[Object(a.jsx)("li",{className:"nav-item",children:Object(a.jsx)(Y.a,{className:"nav-link",to:{pathname:"/"},children:o("common:Dashboard")})}),s&&Object(a.jsx)("li",{className:"nav-item",children:Object(a.jsx)(Y.a,{className:"nav-link",to:{pathname:"/workouts/history"},children:o("Workouts")})}),s&&Object(a.jsx)("li",{className:"nav-item",children:Object(a.jsx)(Y.a,{className:"nav-link",to:{pathname:"/workouts/statistics"},children:o("common:Statistics")})}),t&&Object(a.jsx)("li",{className:"nav-item",children:Object(a.jsx)(Y.a,{className:"nav-link",to:{pathname:"/admin"},children:"Admin"})}),s&&Object(a.jsx)("li",{className:"nav-item",children:Object(a.jsx)(Y.a,{className:"nav-link",to:{pathname:"/workouts/add"},children:Object(a.jsx)("strong",{children:o("common:Add workout")})})})]}),Object(a.jsxs)("ul",{className:"navbar-nav flex-row ml-md-auto d-none d-md-flex",children:[!s&&Object(a.jsx)("li",{className:"nav-item",children:Object(a.jsx)(Y.a,{className:"nav-link",to:{pathname:"/register"},children:o("user:Register")})}),!s&&Object(a.jsx)("li",{className:"nav-item",children:Object(a.jsx)(Y.a,{className:"nav-link",to:{pathname:"/login"},children:o("user:Login")})}),s&&Object(a.jsxs)(a.Fragment,{children:[!0===r?Object(a.jsx)("img",{alt:"Avatar",src:"".concat(C,"users/").concat(c,"/picture?").concat(Date.now()),className:"img-fluid App-nav-profile-img"}):Object(a.jsx)("i",{className:"fa fa-user-circle-o fa-2x no-picture","aria-hidden":"true"}),Object(a.jsx)("li",{className:"nav-item",children:Object(a.jsx)(Y.a,{className:"nav-link",to:{pathname:"/profile"},children:c})}),Object(a.jsx)("li",{className:"nav-item",children:Object(a.jsx)(Y.a,{className:"nav-link",to:{pathname:"/logout"},children:o("user:Logout")})})]}),Object(a.jsx)("li",{children:Object(a.jsx)(Ns,{})})]})]})]})})})}}var Ss=Object(w.a)()(Object(O.c)((({user:e})=>({admin:e.admin,isAuthenticated:e.isAuthenticated,picture:e.picture,username:e.username})))(_s));function Ds(){return(Ds=Object.assign||function(e){for(var t=1;t=0||(r[s]=e[s]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,s)&&(r[s]=e[s])}return r}var Es=o.createElement("g",null,o.createElement("g",null,o.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"}))),As=o.createElement("g",null,o.createElement("g",null,o.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"}))),Ms=o.createElement("g",null,o.createElement("g",null,o.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"}))),Ts=o.createElement("g",null,o.createElement("g",null,o.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"}))),Ps=o.createElement("g",null,o.createElement("g",null,o.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"}))),zs=o.createElement("g",null,o.createElement("g",null,o.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"}))),Fs=o.createElement("g",null,o.createElement("g",null,o.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"})));function Rs(e,t){let s=e.title,a=e.titleId,r=Cs(e,["title","titleId"]);return o.createElement("svg",Ds({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":a},r),s?o.createElement("title",{id:a},s):null,Es,As,Ms,Ts,Ps,zs,Fs)}const Ls=o.forwardRef(Rs);s.p;function Us(){return(Us=Object.assign||function(e){for(var t=1;t=0||(r[s]=e[s]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,s)&&(r[s]=e[s])}return r}var Ws=o.createElement("g",null,o.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"}),o.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"}),o.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"}),o.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"}));function Hs(e,t){let s=e.title,a=e.titleId,r=Is(e,["title","titleId"]);return o.createElement("svg",Us({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":a},r),s?o.createElement("title",{id:a},s):null,Ws)}const qs=o.forwardRef(Hs);s.p;function Bs(e){const t=Object(re.a)().t,s=e.action;return Object(a.jsx)("div",{className:"container dashboard",children:Object(a.jsxs)("div",{className:"row",children:[Object(a.jsx)("div",{className:"col-2"}),Object(a.jsx)("div",{className:"card col-8",children:Object(a.jsx)("div",{className:"card-body",children:Object(a.jsxs)("div",{className:"text-center ",children:["sent"===s&&Object(a.jsxs)(a.Fragment,{children:[Object(a.jsx)("div",{className:"svg-icon",children:Object(a.jsx)(qs,{})}),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"===s&&Object(a.jsxs)(a.Fragment,{children:[Object(a.jsx)("div",{className:"svg-icon",children:Object(a.jsx)(Ls,{})}),Object(a.jsxs)(ne.a,{i18nKey:"user:updatedPasswordText",children:["Your password have been updated. Click",Object(a.jsx)(Y.a,{to:"/login",children:"here"})," to log in."]})]})]})})}),Object(a.jsx)("div",{className:"col-2"})]})})}var Gs=s(240),Vs=s.n(Gs);class Js extends c.a.Component{constructor(e,t){super(e,t),this.state={formData:{},displayModal:!1}}componentDidMount(){this.initForm()}componentDidUpdate(e){e.user!==this.props.user&&this.initForm()}initForm(){const e=this.props.user,t={};Object.keys(e).map((s=>null===e[s]?t[s]="":t[s]="birth_date"===s?Object(y.a)(new Date(e[s]),"yyyy-MM-DD"):e[s])),this.setState({formData:t})}handleFormChange(e){const t=this.state.formData;"weekm"===e.target.name?t.weekm="Monday"===e.target.value:t[e.target.name]=e.target.value,this.setState(t)}displayModal(e){this.setState((t=>Object(k.a)(Object(k.a)({},t),{},{displayModal:e})))}render(){const e=this.props,t=e.message,s=e.onDeleteUser,r=e.onHandleProfileFormSubmit,o=e.t,c=e.user,n=this.state,i=n.displayModal,l=n.formData;return Object(a.jsxs)("div",{children:[Object(a.jsx)(f.a,{children:Object(a.jsxs)("title",{children:["FitTrackee - ",o("user:Profile Edition")]})}),l.isAuthenticated&&Object(a.jsxs)("div",{className:"container",children:[i&&Object(a.jsx)(ze,{title:o("common:Confirmation"),text:o("user:Are you sure you want to delete your account? All data will be deleted, this cannot be undone."),confirm:()=>{s(c.username),this.displayModal(!1)},close:()=>this.displayModal(!1)}),Object(a.jsx)("h1",{className:"page-title",children:o("user:Profile Edition")}),Object(a.jsxs)("div",{className:"row",children:[Object(a.jsx)("div",{className:"col-md-2"}),Object(a.jsx)("div",{className:"col-md-8",children:Object(a.jsxs)("div",{className:"card",children:[Object(a.jsx)("div",{className:"card-header",children:c.username}),Object(a.jsx)("div",{className:"card-body",children:Object(a.jsx)("div",{className:"row",children:Object(a.jsxs)("div",{className:"col-md-12",children:[Object(a.jsxs)("form",{onSubmit:e=>{e.preventDefault(),r(l)},children:[Object(a.jsx)("div",{className:"form-group",children:Object(a.jsxs)("label",{children:[o("user:Email"),":",Object(a.jsx)("input",{name:"email",className:"form-control input-lg",type:"text",value:l.email,readOnly:!0})]})}),Object(a.jsx)("div",{className:"form-group",children:Object(a.jsxs)("label",{children:[o("user:Registration Date"),":",Object(a.jsx)("input",{name:"createdAt",className:"form-control input-lg",type:"text",value:l.created_at,disabled:!0})]})}),Object(a.jsx)("div",{className:"form-group",children:Object(a.jsxs)("label",{children:[o("user:Password"),":",Object(a.jsx)("input",{name:"password",className:"form-control input-lg",type:"password",onChange:e=>this.handleFormChange(e)})]})}),Object(a.jsx)("div",{className:"form-group",children:Object(a.jsxs)("label",{children:[o("user:Password Confirmation"),":",Object(a.jsx)("input",{name:"password_conf",className:"form-control input-lg",type:"password",onChange:e=>this.handleFormChange(e)})]})}),Object(a.jsx)("hr",{}),Object(a.jsx)("div",{className:"form-group",children:Object(a.jsxs)("label",{children:[o("user:First Name"),":",Object(a.jsx)("input",{name:"first_name",className:"form-control input-lg",type:"text",value:l.first_name,onChange:e=>this.handleFormChange(e)})]})}),Object(a.jsx)("div",{className:"form-group",children:Object(a.jsxs)("label",{children:[o("user:Last Name"),":",Object(a.jsx)("input",{name:"last_name",className:"form-control input-lg",type:"text",value:l.last_name,onChange:e=>this.handleFormChange(e)})]})}),Object(a.jsx)("div",{className:"form-group",children:Object(a.jsxs)("label",{children:[o("user:Birth Date"),Object(a.jsx)("input",{name:"birth_date",className:"form-control input-lg",type:"date",value:l.birth_date,onChange:e=>this.handleFormChange(e)})]})}),Object(a.jsx)("div",{className:"form-group",children:Object(a.jsxs)("label",{children:[o("user:Location"),":",Object(a.jsx)("input",{name:"location",className:"form-control input-lg",type:"text",value:l.location,onChange:e=>this.handleFormChange(e)})]})}),Object(a.jsx)("div",{className:"form-group",children:Object(a.jsxs)("label",{children:[o("user:Bio"),":",Object(a.jsx)("textarea",{name:"bio",className:"form-control input-lg",maxLength:"200",value:l.bio,onChange:e=>this.handleFormChange(e)})]})}),Object(a.jsx)("div",{className:"form-group",children:Object(a.jsxs)("label",{children:[o("user:Language"),":",Object(a.jsx)("select",{name:"language",className:"form-control input-lg",value:l.language,onChange:e=>this.handleFormChange(e),children:ks.map((e=>Object(a.jsx)("option",{value:e.name,children:e.name},e.name)))})]})}),Object(a.jsx)("div",{className:"form-group",children:Object(a.jsxs)("label",{children:[o("user:Timezone"),":",Object(a.jsx)(Vs.a,{className:"form-control timezone-custom",onChange:e=>{const t={target:{name:"timezone",value:e||"Europe/Paris"}};this.handleFormChange(t)},value:l.timezone})]})}),Object(a.jsx)("div",{className:"form-group",children:Object(a.jsxs)("label",{children:[o("user:First day of week"),":",Object(a.jsxs)("select",{name:"weekm",className:"form-control input-lg",value:l.weekm?"Monday":"Sunday",onChange:e=>this.handleFormChange(e),children:[Object(a.jsx)("option",{value:"Sunday",children:o("user:Sunday")}),Object(a.jsx)("option",{value:"Monday",children:o("user:Monday")})]})]})}),Object(a.jsx)("button",{type:"submit",className:"btn btn-primary",children:o("common:Submit")}),Object(a.jsx)("button",{className:"btn btn-danger",onClick:e=>{e.preventDefault(),this.displayModal(!0)},children:o("user:Delete my account")}),Object(a.jsx)("button",{type:"submit",className:"btn btn-secondary",onClick:()=>Ta.push("/profile"),children:o("common:Cancel")})]}),Object(a.jsx)(v,{message:t,t:o})]})})})]})}),Object(a.jsx)("div",{className:"col-md-2"})]})]})]})}}var Ks=Object(w.a)()(Object(O.c)((e=>({location:e.router.location,message:e.message,user:e.user})),(e=>({onDeleteUser:t=>{e(Ne(t))},onHandleProfileFormSubmit:t=>{e((e=>t=>!e.password===e.password_conf?t(we("Password and password confirmation don't match.")):(delete e.id,U.postData("auth/profile/edit",e).then((e=>{if("success"===e.status)return t(ke()),Ta.push("/profile");t(we(e.message))})).catch((e=>{throw e}))))(t))}})))(Js)),Ys=s(905),Xs=s(906),$s=s(907),Zs=s(241);const Qs=["week","month","year"];class ea extends c.a.Component{constructor(e,t){super(e,t);const s=new Date;this.state={displayedSports:e.sports.map((e=>e.id)),statsParams:{start:Object(pt.a)(Object(kt.a)(s,11)),end:Object(ht.a)(s),duration:"month",type:"by_time"}}}componentDidUpdate(e){this.props.sports!==e.sports&&this.updateDisplayedSports()}updateDisplayedSports(){const e=this.props.sports;this.setState({displayedSports:e.map((e=>e.id))})}handleOnChangeDuration(e){const t=e.target.name,s=new Date,a="year"===t?Object(Mt.a)(Object(Ys.a)(s,9)):"week"===t?Object(pt.a)(Object(kt.a)(s,2)):Object(pt.a)(Object(kt.a)(s,11)),r="year"===t?Object(Xs.a)(s):"week"===t?Object(xt.a)(s):Object(ht.a)(s);this.setState({statsParams:{duration:t,end:r,start:a,type:"by_time"}})}handleOnChangeSports(e){const t=this.state.displayedSports;t.includes(e)?this.setState({displayedSports:t.filter((t=>t!==e))}):this.setState({displayedSports:t.concat([e])})}handleOnClickArrows(e){const t=this.state.statsParams,s=t.start,a=t.end,r=t.duration;let o,c;e?(o="year"===r?Object(Mt.a)(Object(Ys.a)(s,1)):"week"===r?Object(bt.a)(Object($s.a)(s,1)):Object(pt.a)(Object(kt.a)(s,1)),c="year"===r?Object(Xs.a)(Object(Ys.a)(a,1)):"week"===r?Object(xt.a)(Object($s.a)(a,1)):Object(ht.a)(Object(kt.a)(a,1))):(o="year"===r?Object(Mt.a)(Object(At.a)(s,1)):"week"===r?Object(bt.a)(Object(Zs.a)(s,1)):Object(pt.a)(Object(vt.a)(s,1)),c="year"===r?Object(Xs.a)(Object(At.a)(a,1)):"week"===r?Object(xt.a)(Object(Zs.a)(a,1)):Object(ht.a)(Object(vt.a)(a,1))),this.setState({statsParams:{duration:r,end:c,start:o,type:"by_time"}})}render(){const e=this.state,t=e.displayedSports,s=e.statsParams,r=this.props,o=r.sports,c=r.t,n=r.user,i=Oe(o.filter((e=>n.sports_list.includes(e.id))),c);return Object(a.jsxs)(a.Fragment,{children:[Object(a.jsx)(f.a,{children:Object(a.jsxs)("title",{children:["FitTrackee - ",c("statistics:Statistics")]})}),Object(a.jsxs)("div",{className:"container dashboard",children:[Object(a.jsxs)("div",{className:"card workout-card",children:[Object(a.jsx)("div",{className:"card-header",children:c("statistics:Statistics")}),Object(a.jsxs)("div",{className:"card-body".concat(0===n.nb_workouts?" stats-disabled":""),children:[Object(a.jsxs)("div",{className:"chart-filters row",children:[Object(a.jsx)("div",{className:"col chart-arrows",children:Object(a.jsx)("p",{className:"text-center",children:Object(a.jsx)("i",{className:"fa fa-chevron-left","aria-hidden":"true",onClick:()=>this.handleOnClickArrows(!0)})})}),Object(a.jsx)("div",{className:"col-md-3 time-frames justify-content-around",children:Qs.map((e=>Object(a.jsx)("div",{className:"time-frame",children:Object(a.jsxs)("label",{children:[Object(a.jsx)("input",{type:"radio",id:e,name:e,checked:e===s.duration,onChange:e=>this.handleOnChangeDuration(e)}),Object(a.jsx)("span",{children:c("statistics:".concat(e))})]})},e)))}),Object(a.jsx)("div",{className:"col chart-arrows",children:Object(a.jsx)("p",{className:"text-center",children:Object(a.jsx)("i",{className:"fa fa-chevron-right","aria-hidden":"true",onClick:()=>this.handleOnClickArrows(!1)})})})]}),Object(a.jsx)(qt,{displayEmpty:!0,displayedSports:t,statsParams:s,t:c}),Object(a.jsx)("div",{className:"row chart-workouts",children:i.map((e=>Object(a.jsxs)("label",{className:"col workout-label",children:[Object(a.jsx)("input",{type:"checkbox",checked:t.includes(e.id),name:e.label,onChange:()=>this.handleOnChangeSports(e.id)}),Object(a.jsx)("span",{style:{color:me[e.id-1]},children:" ".concat(e.label)})]},e.id)))})]})]}),0===n.nb_workouts&&Object(a.jsx)(ct,{t:c})]})]})}}var ta=Object(w.a)()(Object(O.c)((e=>({sports:e.sports.data,user:e.user})))(ea));function sa(e){const t=Object(re.a)().t,s="user:".concat(e.formType.charAt(0).toUpperCase()).concat(e.formType.slice(1));return Object(a.jsxs)("div",{children:[Object(a.jsx)(f.a,{children:Object(a.jsxs)("title",{children:["FitTrackee - ",t("user:".concat(e.formType))]})}),Object(a.jsx)("h1",{className:"page-title",children:t(s)}),Object(a.jsx)("div",{className:"container",children:Object(a.jsxs)("div",{className:"row",children:[Object(a.jsx)("div",{className:"col-md-3"}),Object(a.jsxs)("div",{className:"col-md-6",children:[Object(a.jsx)("br",{}),"register"!==e.formType||e.isRegistrationAllowed?Object(a.jsxs)(a.Fragment,{children:[Object(a.jsxs)("form",{onSubmit:t=>e.handleUserFormSubmit(t,e.formType),children:["register"===e.formType&&Object(a.jsx)("div",{className:"form-group",children:Object(a.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(a.jsx)("div",{className:"form-group",children:Object(a.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(a.jsxs)(a.Fragment,{children:[Object(a.jsx)("div",{className:"form-group",children:Object(a.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(a.jsx)("div",{className:"form-group",children:Object(a.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(a.jsx)("input",{type:"submit",className:"btn btn-primary btn-lg btn-block",value:t("Submit")})]}),Object(a.jsx)("p",{className:"password-forget",children:"login"===e.formType&&Object(a.jsx)(Y.a,{to:{pathname:"/password-reset/request"},children:t("user:Forgot password?")})})]}):Object(a.jsxs)("div",{className:"card",children:[Object(a.jsx)("div",{className:"card-body",children:"Registration is disabled."}),Object(a.jsx)("div",{className:"card-body",children:Object(a.jsx)("button",{type:"submit",className:"btn btn-secondary btn-lg btn-block",onClick:()=>Ta.go(-1),children:"Back"})})]})]}),Object(a.jsx)("div",{className:"col-md-3"})]})})]})}class aa extends c.a.Component{constructor(e,t){super(e,t),this.state={formData:{username:"",email:"",password:"",password_conf:""}}}componentDidUpdate(e){e.location.pathname!==this.props.location.pathname&&this.emptyForm()}emptyForm(){const e=this.state.formData;Object.keys(e).map((t=>e[t]="")),this.setState(e)}onHandleFormChange(e){const t=this.state.formData;t[e.target.name]=e.target.value,this.setState(t)}render(){const e=this.props,t=e.formType,s=e.isRegistrationAllowed,r=e.message,o=e.messages,c=e.onHandleUserFormSubmit,n=e.t,i=this.state.formData,l=this.props.location.query.token;return Object(a.jsx)("div",{children:M()||"password reset"===t&&!l?Object(a.jsx)(g.a,{to:"/"}):Object(a.jsxs)("div",{children:[Object(a.jsx)(v,{message:r,messages:o,t:n}),Object(a.jsx)(sa,{isRegistrationAllowed:s,formType:t,userForm:i,onHandleFormChange:e=>this.onHandleFormChange(e),handleUserFormSubmit:e=>{e.preventDefault(),"password reset"===t&&(i.token=l),c(i,t)}})]})})}}var ra=Object(w.a)()(Object(O.c)((e=>({isRegistrationAllowed:e.application.config.is_registration_enabled,location:e.router.location,message:e.message,messages:e.messages})),(e=>({onHandleUserFormSubmit:(t,s)=>{e(ye(t,s="password reset"===s?"password/update":"reset your password"===s?"password/reset-request":s))}})))(aa));class oa extends c.a.Component{constructor(e,t){super(e,t),this.state={displayModal:!1}}componentDidMount(){this.props.loadUser(this.props.match.params.userName)}componentDidUpdate(e){e.match.params.userName!==this.props.match.params.userName&&this.props.loadUser(this.props.match.params.userName)}displayModal(e){this.setState((t=>Object(k.a)(Object(k.a)({},t),{},{displayModal:e})))}render(){const e=this.props,t=e.t,s=e.currentUser,r=e.onDeleteUser,o=e.users,c=this.state.displayModal,n=Object(ie.a)(o,1)[0],i=!!n&&s.username===n.username;return Object(a.jsxs)("div",{children:[c&&Object(a.jsx)(ze,{title:t("common:Confirmation"),text:t("user:Are you sure you want to delete this account? All data will be deleted, this cannot be undone."),confirm:()=>{r(n.username),this.displayModal(!1)},close:()=>this.displayModal(!1)}),n&&Object(a.jsx)(mt,{editable:i,isDeletable:s.admin&&!i,onDeleteUser:r,displayModal:e=>this.displayModal(e),t:t,user:n})]})}}var ca=Object(w.a)()(Object(O.c)((e=>({currentUser:e.user,users:e.users.data})),(e=>({onDeleteUser:t=>{e(Ne(t,!0))},loadUser:t=>{e(q("getData","users",{username:t}))}})))(oa));class na extends c.a.Component{constructor(e){super(e),this.props=e}componentDidMount(){this.props.loadAppConfig()}render(){return Object(a.jsxs)("div",{className:"App",children:[Object(a.jsx)(Ss,{}),Object(a.jsxs)(g.d,{children:[Object(a.jsx)(g.b,{exact:!0,path:"/",component:Kt}),Object(a.jsx)(g.b,{exact:!0,path:"/register",render:()=>Object(a.jsx)(ra,{formType:"register"})}),Object(a.jsx)(g.b,{exact:!0,path:"/login",render:()=>Object(a.jsx)(ra,{formType:"login"})}),Object(a.jsx)(g.b,{exact:!0,path:"/password-reset",render:()=>Object(a.jsx)(ra,{formType:"password reset"})}),Object(a.jsx)(g.b,{exact:!0,path:"/password-reset/request",render:()=>Object(a.jsx)(ra,{formType:"reset your password"})}),Object(a.jsx)(g.b,{exact:!0,path:"/password-reset/sent",render:()=>Object(a.jsx)(Bs,{action:"sent"})}),Object(a.jsx)(g.b,{exact:!0,path:"/updated-password",render:()=>Object(a.jsx)(Bs,{action:"updated"})}),Object(a.jsx)(g.b,{exact:!0,path:"/password-reset/sent",component:Bs}),Object(a.jsx)(g.b,{exact:!0,path:"/logout",component:$t}),Object(a.jsx)(g.b,{exact:!0,path:"/profile/edit",component:Ks}),Object(a.jsx)(g.b,{exact:!0,path:"/profile",component:jt}),Object(a.jsx)(g.b,{exact:!0,path:"/workouts/history",component:ut}),Object(a.jsx)(g.b,{exact:!0,path:"/workouts/statistics",component:ta}),Object(a.jsx)(g.b,{exact:!0,path:"/users/:userName",component:ca}),Object(a.jsx)(g.b,{path:"/workouts",component:ot}),Object(a.jsx)(g.b,{path:"/admin",component:ce}),Object(a.jsx)(g.b,{component:oe})]}),Object(a.jsx)(Yt,{})]})}}var ia=Object(O.c)((()=>({})),(e=>({loadAppConfig:()=>{e(V("config"))}})))(na),la=s(80);function da({store:e,history:t,children:s}){return Object(a.jsx)(O.a,{store:e,children:Object(a.jsx)(la.a,{history:t,children:s})})}const ua=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 ma(e){navigator.serviceWorker.register(e).then((e=>{e.onupdatefound=()=>{const t=e.installing;t.onstatechange=()=>{"installed"===t.state&&(navigator.serviceWorker.controller?console.log("New content is available; please refresh."):console.log("Content is cached for offline use."))}}})).catch((e=>{console.error("Error during service worker registration:",e)}))}const ja={data:[]};var pa={language:"en",message:"",messages:[],user:{isAuthenticated:!1},workouts:Object(k.a)({},ja),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(k.a)({},ja),chartData:[],gpx:null,loading:!1,records:Object(k.a)({},ja),sports:Object(k.a)({},ja),statistics:{data:{}},users:Object(k.a)({},ja)};const ha=(e,t,s)=>s.target!==t?e:"SET_DATA"===s.type?Object(k.a)(Object(k.a)({},e),{},{data:s.data[s.target]}):"SET_PAGINATED_DATA"===s.type?Object(k.a)(Object(k.a)({},e),{},{data:s.data[s.target],pagination:s.pagination}):e,ba=(e=pa.workouts,t)=>{switch(t.type){case"LOGOUT":return pa.workouts;case"PUSH_WORKOUTS":return Object(k.a)(Object(k.a)({},e),{},{data:e.data.concat(t.workouts)});case"REMOVE_WORKOUT":return Object(k.a)(Object(k.a)({},e),{},{data:e.data.filter((e=>e.id!==t.workoutId))});default:return ha(e,"workouts",t)}},xa=(e=pa.application,t)=>"SET_APP_CONFIG"===t.type?Object(k.a)(Object(k.a)({},e),{},{config:t.data}):"SET_APP_STATS"===t.type?Object(k.a)(Object(k.a)({},e),{},{statistics:t.data}):e,Oa=(e=pa.calendarWorkouts,t)=>{switch(t.type){case"LOGOUT":return pa.calendarWorkouts;case"UPDATE_CALENDAR":return Object(k.a)(Object(k.a)({},e),{},{data:t.workouts});default:return ha(e,"calendarWorkouts",t)}},ga=(e=pa.chartData,t)=>"SET_CHART_DATA"===t.type?t.chartData:e,fa=(e=pa.gpx,t)=>"SET_GPX"===t.type?t.gpxContent:e,wa=(e=pa.language,t)=>"SET_LANGUAGE"===t.type?t.language:e,va=(e=pa.loading,t)=>"SET_LOADING"===t.type?t.loading:e,ka=(e=pa.message,t)=>{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}},ya=(e=pa.messages,t)=>{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}},Na=(e=pa.records,t)=>"LOGOUT"===t.type?pa.records:ha(e,"records",t),_a=(e=pa.sports,t)=>"UPDATE_SPORT_DATA"===t.type?Object(k.a)(Object(k.a)({},e),{},{data:e.data.map((e=>(e.id===t.data.id&&(e.is_active=t.data.is_active),e)))}):ha(e,"sports",t),Sa=(e=pa.users,t)=>"UPDATE_USER_DATA"===t.type?Object(k.a)(Object(k.a)({},e),{},{data:e.data.map((e=>(e.username===t.data.username&&(e.admin=t.data.admin),e)))}):ha(e,"users",t),Da=(e=pa.user,t)=>{switch(t.type){case"AUTH_ERROR":case"PROFILE_ERROR":case"LOGOUT":return window.localStorage.removeItem("authToken"),pa.user;case"PROFILE_SUCCESS":return t.profil;default:return e}},Ca=(e=pa.statistics,t)=>"LOGOUT"===t.type?pa.statistics:ha(e,"statistics",t);const Ea=["/login","/register","/password-reset","/password-reset/request","/password-reset/sent","/updated-password"],Aa=(e,t)=>("string"===typeof e||e instanceof String?e=t:e.pathname=t,e),Ma=e=>(window.localStorage.authToken||Ea.includes(e.pathname)||(e=Aa(e,"/login")),window.localStorage.authToken&&Ea.includes(e.pathname)&&(e=Aa(e,"/")),e),Ta=((Pa=Object(r.a)()).location=Ma(Pa.location),Object(k.a)(Object(k.a)({},Pa),{},{push:(e,...t)=>Pa.push(Ma(e),...t),replace:(e,...t)=>Pa.replace(Ma(e),...t)}));var Pa;Ta.listen((()=>{window.scrollTo(0,0)}));const za=document.getElementById("root"),Fa=Object(u.e)((Ra=Ta,Object(u.c)({workouts:ba,application:xa,calendarWorkouts:Oa,chartData:ga,gpx:fa,language:wa,loading:va,message:ka,messages:ya,records:Na,router:Object(la.b)(Ra),sports:_a,statistics:Ca,user:Da,users:Sa})),window.__STATE__,(window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__||u.d)(Object(u.a)(Object(d.a)(Ta),m.a)));var Ra;null!==window.localStorage.authToken&&Fa.dispatch(ve()),l.a.render(Object(a.jsx)(da,{store:Fa,history:Ta,children:Object(a.jsx)(n.a,{i18n:x,children:Object(a.jsx)(ia,{})})}),za),function(){if("serviceWorker"in navigator){if(new URL("",window.location).origin!==window.location.origin)return;window.addEventListener("load",(()=>{const e="".concat("","/service-worker.js");ua?function(e){fetch(e).then((t=>{404===t.status||-1===t.headers.get("content-type").indexOf("javascript")?navigator.serviceWorker.ready.then((e=>{e.unregister().then((()=>{window.location.reload()}))})):ma(e)})).catch((()=>{console.log("No internet connection found. App is running in offline mode.")}))}(e):ma(e)}))}}()}},[[889,1,2]]]); -//# sourceMappingURL=main.75f806db.chunk.js.map \ No newline at end of file +(this.webpackJsonpfittrackee_client=this.webpackJsonpfittrackee_client||[]).push([[0],{203: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"}')},204: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"}')},205: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"}')},206:function(e){e.exports=JSON.parse('{"Personal records":"Personal records","This month":"This month","Upload one !":"Upload one !"}')},207: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."}')},208:function(e){e.exports=JSON.parse('{"Cycling (Sport)":"Cycling (Sport)","Cycling (Transport)":"Cycling (Transport)","Hiking":"Hiking","Mountain Biking":"Mountain Biking","Running":"Running","Walking":"Walking"}')},209:function(e){e.exports=JSON.parse('{"workouts":"workouts","distance":"distance","duration":"duration","month":"month","Statistics":"Statistics","year":"year","week":"week"}')},210: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"}')},211: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"}')},212: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"}')},213: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"}')},214:function(e){e.exports=JSON.parse('{"Personal records":"Mes records","This month":"Ce mois","Upload one !":"Ajoutez votre premi\xe8re s\xe9ance !"}')},215: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."}')},216: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"}')},217:function(e){e.exports=JSON.parse('{"workouts":"s\xe9ances","distance":"distance","duration":"dur\xe9e","month":"mois","Statistics":"Statistiques","year":"ann\xe9e","week":"semaine"}')},218: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"}')},277:function(e,t,s){},285:function(e,t){},889:function(e,t,s){"use strict";s.r(t),s.d(t,"history",(function(){return Ta})),s.d(t,"rootNode",(function(){return za})),s.d(t,"store",(function(){return Fa}));var a=s(1),r=s(29),o=s(2),c=s.n(o),n=s(908),i=s(51),l=s.n(i),d=s(199),u=s(55),m=s(200),j=s(83),p=s(201),h=s(202);const b={en:{workouts:s(203),administration:s(204),common:s(205),dashboard:s(206),messages:s(207),sports:s(208),statistics:s(209),user:s(210)},fr:{workouts:s(211),administration:s(212),common:s(213),dashboard:s(214),messages:s(215),sports:s(216),statistics:s(217),user:s(218)}};j.a.use(h.a).use(p.a).init({debug:!1,lng:"en",fallbackLng:"en",keySeparator:!1,interpolation:{escapeValue:!1},resources:b,ns:["common"],defaultNS:"common"});var x=j.a,O=s(10),g=s(19),f=(s(277),s(20)),w=s(891);class v extends c.a.PureComponent{render(){const e=this.props,t=e.message,s=e.messages,r=e.t,o=""!==t&&t?t.split("|").length>1?"".concat(r("messages:".concat(t.split("|")[0])),": ").concat(r("messages:".concat(t.split("|")[1]))):r("messages:".concat(t)):"";return Object(a.jsxs)("div",{className:"error-message",children:[""!==o&&Object(a.jsx)("code",{children:o}),s&&s.length>0&&(1===s.length?Object(a.jsx)("code",{children:s[0].value}):Object(a.jsx)("code",{children:Object(a.jsx)("ul",{children:s.map((e=>Object(a.jsx)("li",{children:r("messages:".concat(e.value))},e.id)))})}))]})}}var k=s(12),y=s(910),N=s(909),_=s(222);const S=["bytes","KB","MB","GB","TB"],D=(e,t=!0)=>{const s=Math.floor(Math.log(e)/Math.log(1024));if(!e)return t?"0 bytes":{size:0,suffix:"bytes"};const a=(e/Math.pow(1024,s)).toFixed(1),r=S[s];return t?"".concat(a).concat(r):{size:a,suffix:r}},C="/api/",E=[{key:"workouts_count",label:"workouts count"},{key:"admin",label:"admin rights"},{key:"created_at",label:"registration date"},{key:"username",label:"user name"}],A=[{key:"asc",label:"ascending"},{key:"desc",label:"descending"}],M=()=>!!window.localStorage.authToken,T=e=>{let t=0;return e.map((e=>{const s={id:t,value:e};return t++,s}))},P=e=>{const t={};e.noAuthorization||(t.Authorization="Bearer ".concat(window.localStorage.getItem("authToken"))),e.type&&(t["Content-Type"]=e.type);const s={method:e.method,headers:t};"application/json"===e.type&&e.body?s.body=JSON.stringify(e.body):e.body&&(s.body=e.body);const a=new Request("".concat(C).concat(e.url),s);return fetch(a).then((t=>"DELETE"===e.method||413===t.status?t:t.json())).catch((e=>(console.error(e),new Error("An error occurred. Please contact the administrator."))))},z=(e,t)=>{if(!e)return"";const s=_.DateTime.fromISO(Object(y.a)(new Date(e),"yyyy-MM-dd'T'HH:mm:ss.SSSxxx")).setZone(t);return Object(N.a)(s.toFormat("yyyy-MM-dd HH:mm:ss"),"yyyy-MM-dd HH:mm:ss",new Date)},F=(e,t)=>{const s=e.label.toLowerCase(),a=t.label.toLowerCase();return s>a?1:st.map((t=>Object(k.a)(Object(k.a)({},t),{},{label:e("".concat(s,":").concat(t.label))}))).sort(F),L=(e,t)=>{let s=e;return t.id||"users"===e&&t.username?s="".concat(s,"/").concat(t.username?t.username:t.id):Object.keys(t).length>0&&(s+="?",Object.keys(t).filter((e=>t[e])).map(((e,a)=>s+="".concat(0===a?"":"&").concat(e,"=").concat(t[e])))),s};class U{static getData(e,t={}){const s=L(e,t);return P({url:s,method:"GET",type:"application/json"})}static addData(e,t){return P({url:e,method:"POST",body:t,type:"application/json"})}static addDataWithFile(e,t){return P({url:e,method:"POST",body:t})}static postData(e,t){const s={url:"".concat(e).concat(t.id?"/".concat(t.id):""),method:"POST",body:t,type:"application/json"};return P(s)}static updateData(e,t){const s={url:"".concat(e).concat(t.id?"/".concat(t.id):t.username?"/".concat(t.username):""),method:"PATCH",body:t,type:"application/json"};return P(s)}static deleteData(e,t){const s={url:"".concat(e,"/").concat(t),method:"DELETE",type:"application/json"};return P(s)}}const I=(e,t)=>({type:"SET_DATA",data:t,target:e}),W=e=>({type:"SET_ERROR",message:e}),H=e=>({type:"SET_LOADING",loading:e}),q=(e,t,s,a=!0)=>r=>(r(H(!0)),s&&s.id&&"workouts"!==t&&isNaN(s.id)?(r(H(!1)),r(W("".concat(t,"|Incorrect id")))):(r({type:"CLEAN_ALL_MESSAGES"}),U[e](t,s).then((s=>{if("success"===s.status)if(a){if("users"===t&&"getData"===e)return r(((e,t,s)=>({type:"SET_PAGINATED_DATA",data:t,pagination:s,target:e}))(t,s.data,s.pagination));r(I(t,s.data))}else"updateData"===e&&"sports"===t?r((e=>({type:"UPDATE_SPORT_DATA",data:e}))(s.data.sports[0])):"updateData"===e&&"users"===t&&r((e=>({type:"UPDATE_USER_DATA",data:e}))(s.data.users[0]));else r(W("".concat(t,"|").concat(s.message||s.status)));r(H(!1))})).catch((e=>{r(H(!1)),r(W("".concat(t,"|").concat(e)))})))),B=e=>t=>{j.a.changeLanguage(e).then(t((e=>({type:"SET_LANGUAGE",language:e}))(e)))},G=e=>({type:"SET_APP_CONFIG",data:e}),V=e=>t=>U.getData(e).then((s=>{"success"===s.status?"config"===e?t(G(s.data)):"stats/all"===e&&t({type:"SET_APP_STATS",data:s.data}):t(W("application|".concat(s.message)))})).catch((e=>t(W("application|".concat(e)))));class J extends c.a.Component{constructor(e,t){super(e,t),this.state={formData:{}}}componentDidMount(){this.initForm()}componentDidUpdate(e){this.props.appConfig!==e.appConfig&&this.initForm()}initForm(){const e=this.props.appConfig,t={};Object.keys(e).map((s=>null===e[s]?t[s]="":["max_single_file_size","max_zip_file_size"].includes(s)?t[s]=+(e[s]/1048576).toFixed(2):t[s]=e[s])),this.setState({formData:t})}handleFormChange(e){const t=this.state.formData;t[e.target.name]=+e.target.value,this.setState(t)}render(){const e=this.props,t=e.isInEdition,s=e.loadAppConfig,r=e.message,o=e.messages,c=e.onHandleConfigFormSubmit,n=e.t,i=this.state.formData;return Object(a.jsxs)("div",{children:[(r||o)&&Object(a.jsx)(v,{message:r,messages:o,t:n}),Object.keys(i).length>0&&Object(a.jsx)("div",{className:"row",children:Object(a.jsx)("div",{className:"col-md-12",children:Object(a.jsxs)("div",{className:"card",children:[Object(a.jsx)("div",{className:"card-header",children:Object(a.jsx)("strong",{children:n("administration:Application configuration")})}),Object(a.jsx)("div",{className:"card-body",children:Object(a.jsxs)("form",{className:"app-config-form ".concat(t?"":"form-disabled"),onSubmit:e=>{e.preventDefault(),c(i)},children:[Object(a.jsxs)("div",{className:"form-group row",children:[Object(a.jsxs)("label",{className:"col-sm-6 col-form-label",htmlFor:"max_users",children:[n("administration:Max. number of active users"),Object(a.jsx)("sup",{children:Object(a.jsx)("i",{className:"fa fa-question-circle","aria-hidden":"true",title:n("administration:if 0, no limitation")})}),":"]}),Object(a.jsx)("input",{className:"col-sm-5",id:"max_users",name:"max_users",type:"number",min:"0",value:i.max_users,onChange:e=>this.handleFormChange(e)})]}),Object(a.jsxs)("div",{className:"form-group row",children:[Object(a.jsxs)("label",{className:"col-sm-6 col-form-label",htmlFor:"max_single_file_size",children:[n("administration:Max. size of uploaded files (in Mb)"),":"]}),Object(a.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:e=>this.handleFormChange(e)})]}),Object(a.jsxs)("div",{className:"form-group row",children:[Object(a.jsxs)("label",{className:"col-sm-6 col-form-label",htmlFor:"max_zip_file_size",children:[n("administration:Max. size of zip archive (in Mb)"),":"]}),Object(a.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:e=>this.handleFormChange(e)})]}),Object(a.jsxs)("div",{className:"form-group row",children:[Object(a.jsx)("label",{className:"col-sm-6 col-form-label",htmlFor:"gpx_limit_import",children:n("administration:Max. files of zip archive")}),Object(a.jsx)("input",{className:"col-sm-5",id:"gpx_limit_import",name:"gpx_limit_import",type:"number",min:"0",value:i.gpx_limit_import,onChange:e=>this.handleFormChange(e)})]}),t?Object(a.jsxs)(a.Fragment,{children:[Object(a.jsx)("input",{type:"submit",className:"btn btn-primary",value:n("common:Submit")}),Object(a.jsx)("input",{type:"submit",className:"btn btn-secondary",onClick:e=>{e.preventDefault(),s(),Ta.push("/admin/application")},value:n("common:Cancel")})]}):Object(a.jsxs)(a.Fragment,{children:[Object(a.jsx)("input",{type:"submit",className:"btn btn-primary",onClick:e=>{e.preventDefault(),Ta.push("/admin/application/edit")},value:n("common:Edit")}),Object(a.jsx)("input",{type:"submit",className:"btn btn-secondary",onClick:()=>Ta.push("/admin"),value:n("common:Back")})]})]})})]})})})]})}}var K=Object(O.c)((e=>({message:e.message,messages:e.messages})),(e=>({loadAppConfig:()=>{e(V("config"))},onHandleConfigFormSubmit:t=>{const s=Object.assign({},t);s.max_single_file_size*=1048576,s.max_zip_file_size*=1048576,e((e=>t=>{t({type:"CLEAN_ALL_MESSAGES"}),U.updateData("config",e).then((e=>{"success"===e.status?(t(G(e.data)),Ta.push("/admin/application")):Array.isArray(e.message)?t({type:"APP_ERRORS",messages:T(e.message)}):t(W(e.message))})).catch((e=>t(W("application|".concat(e)))))})(s))}})))(J),Y=s(15);class X extends c.a.Component{componentDidMount(){this.props.loadAppStats()}render(){const e=this.props,t=e.appStats,s=e.t,r=D(t.uploads_dir_size,!1);return Object(a.jsxs)("div",{className:"row",children:[Object(a.jsx)("div",{className:"col-lg-3 col-md-6 col-sm-6",children:Object(a.jsx)("div",{className:"card workout-card",children:Object(a.jsxs)("div",{className:"card-body row",children:[Object(a.jsx)("div",{className:"col-3",children:Object(a.jsx)("i",{className:"fa fa-users fa-3x fa-color"})}),Object(a.jsxs)("div",{className:"col-9 text-right",children:[Object(a.jsx)("div",{className:"huge",children:t.users?t.users:0}),Object(a.jsx)("div",{children:"".concat(1===t.users?s("administration:user"):s("administration:users"))})]})]})})}),Object(a.jsx)("div",{className:"col-lg-3 col-md-6 col-sm-6",children:Object(a.jsx)("div",{className:"card workout-card",children:Object(a.jsxs)("div",{className:"card-body row",children:[Object(a.jsx)("div",{className:"col-3",children:Object(a.jsx)("i",{className:"fa fa-tags fa-3x fa-color"})}),Object(a.jsxs)("div",{className:"col-9 text-right",children:[Object(a.jsx)("div",{className:"huge",children:t.sports?t.sports:0}),Object(a.jsx)("div",{children:"".concat(1===t.sports?s("common:sport"):s("common:sports"))})]})]})})}),Object(a.jsx)("div",{className:"col-lg-3 col-md-6 col-sm-6",children:Object(a.jsx)("div",{className:"card workout-card",children:Object(a.jsxs)("div",{className:"card-body row",children:[Object(a.jsx)("div",{className:"col-3",children:Object(a.jsx)("i",{className:"fa fa-calendar fa-3x fa-color"})}),Object(a.jsxs)("div",{className:"col-9 text-right",children:[Object(a.jsx)("div",{className:"huge",children:t.workouts?t.workouts:0}),Object(a.jsx)("div",{children:"".concat(1===t.workouts?s("common:workout"):s("common:workouts"))})]})]})})}),Object(a.jsx)("div",{className:"col-lg-3 col-md-6 col-sm-6",children:Object(a.jsx)("div",{className:"card workout-card",children:Object(a.jsxs)("div",{className:"card-body row",children:[Object(a.jsx)("div",{className:"col-3",children:Object(a.jsx)("i",{className:"fa fa-folder-open fa-3x fa-color"})}),Object(a.jsxs)("div",{className:"col-9 text-right",children:[Object(a.jsx)("div",{className:"huge",children:r.size}),Object(a.jsxs)("div",{children:[r.suffix," (",s("administration:uploads"),")"]})]})]})})})]})}}var $=Object(w.a)()(Object(O.c)((e=>({appStats:e.application.statistics})),(e=>({loadAppStats:()=>{e(V("stats/all"))}})))(X));function Z(e){const t=e.appConfig,s=e.t;return Object(a.jsxs)("div",{className:"card workout-card",children:[Object(a.jsx)("div",{className:"card-header",children:Object(a.jsx)("strong",{children:s("administration:Administration")})}),Object(a.jsxs)("div",{className:"card-body",children:[Object(a.jsx)($,{}),Object(a.jsx)("br",{}),Object(a.jsxs)("dl",{className:"admin-items",children:[Object(a.jsx)("dt",{children:Object(a.jsx)(Y.a,{to:{pathname:"/admin/application"},children:s("administration:Application")})}),Object(a.jsxs)("dd",{children:[s("administration:Update application configuration (maximum number of registered users, maximum files size)."),Object(a.jsx)("br",{}),Object(a.jsx)("strong",{children:s("administration:Registration is currently ".concat(t.is_registration_enabled?"enabled":"disabled","."))})]}),Object(a.jsx)("br",{}),Object(a.jsx)("dt",{children:Object(a.jsx)(Y.a,{to:{pathname:"/admin/sports"},children:s("administration:Sports")})}),Object(a.jsx)("dd",{children:s("administration:Enable/disable sports.")}),Object(a.jsx)("br",{}),Object(a.jsx)("dt",{children:Object(a.jsx)(Y.a,{to:{pathname:"/admin/users"},children:s("administration:Users")})}),Object(a.jsx)("dd",{children:s("administration:Add/remove admin rights, delete user account.")})]})]})]})}class Q extends c.a.Component{componentDidMount(){this.props.loadSports()}render(){const e=this.props,t=e.message,s=e.sports,r=e.t,o=e.updateSport;return Object(a.jsxs)("div",{children:[t&&Object(a.jsx)(v,{message:t,t:r}),Object(a.jsx)("div",{className:"row",children:Object(a.jsx)("div",{className:"col",children:Object(a.jsxs)("div",{className:"card",children:[Object(a.jsx)("div",{className:"card-header",children:Object(a.jsx)("strong",{children:r("administration:Sports")})}),Object(a.jsxs)("div",{className:"card-body",children:[s.length>0&&Object(a.jsxs)("table",{className:"table",children:[Object(a.jsx)("thead",{children:Object(a.jsxs)("tr",{children:[Object(a.jsx)("th",{children:r("administration:id")}),Object(a.jsx)("th",{children:r("administration:Image")}),Object(a.jsx)("th",{children:r("administration:Label")}),Object(a.jsx)("th",{children:r("administration:Active")}),Object(a.jsx)("th",{children:r("administration:Actions")})]})}),Object(a.jsx)("tbody",{children:s.map((e=>Object(a.jsxs)("tr",{children:[Object(a.jsxs)("td",{children:[Object(a.jsx)("span",{className:"heading-span-absolute",children:r("administration:id")}),e.id]}),Object(a.jsxs)("td",{children:[Object(a.jsx)("span",{className:"heading-span-absolute",children:r("administration:Image")}),Object(a.jsx)("img",{className:"admin-img",src:e.img?e.img:"/img/photo.png",alt:"sport logo"})]}),Object(a.jsxs)("td",{children:[Object(a.jsx)("span",{className:"heading-span-absolute",children:r("administration:Label")}),r("sports:".concat(e.label))]}),Object(a.jsxs)("td",{children:[Object(a.jsx)("span",{className:"heading-span-absolute",children:r("administration:Active")}),e.is_active?Object(a.jsx)("i",{className:"fa fa-check-square-o custom-fa","aria-hidden":"true","data-toggle":"tooltip"}):Object(a.jsx)("i",{className:"fa fa-square-o custom-fa","aria-hidden":"true","data-toggle":"tooltip"})]}),Object(a.jsxs)("td",{children:[Object(a.jsx)("span",{className:"heading-span-absolute",children:r("administration:Actions")}),Object(a.jsx)("input",{type:"submit",className:"btn btn-".concat(e.is_active?"dark":"primary"," btn-sm"),value:e.is_active?r("administration:Disable"):r("administration:Enable"),onClick:()=>o(e.id,!e.is_active)}),e.has_workouts&&Object(a.jsxs)("span",{className:"admin-message",children:[Object(a.jsx)("i",{className:"fa fa-warning custom-fa","aria-hidden":"true"}),r("administration:workouts exist")]})]})]},e.id)))})]}),Object(a.jsx)("input",{type:"submit",className:"btn btn-secondary",onClick:()=>Ta.push("/admin/"),value:r("common:Back")})]})]})})})]})}}var ee=Object(O.c)((e=>({message:e.message,sports:e.sports.data,user:e.user})),(e=>({loadSports:()=>{e(q("getData","sports"))},updateSport:(t,s)=>{e(q("updateData","sports",{id:t,is_active:s},!1))}})))(Q);class te extends c.a.PureComponent{getUrl(e){const t=this.props,s=t.query,a=t.pathname,r=Object.assign({},s);let o=s.page?+s.page:1;switch(e){case"prev":o-=1;break;case"next":o+=1;break;default:o=+e}return r.page=o,L(a,r)}render(){const e=this.props,t=e.pagination,s=e.t;return Object(a.jsx)(a.Fragment,{children:t&&Object.keys(t).length>0&&Object(a.jsx)("nav",{"aria-label":"Page navigation example",children:Object(a.jsxs)("ul",{className:"pagination justify-content-center",children:[Object(a.jsx)("li",{className:"page-item ".concat(t.has_prev?"":"disabled"),children:Object(a.jsx)(Y.a,{className:"page-link",to:this.getUrl("prev"),"aria-disabled":!t.has_prev,children:s("common:Previous")})}),(r=t.pages,Array.from({length:r},((e,t)=>t+1))).map((e=>Object(a.jsx)("li",{className:"page-item ".concat(e===t.page?"active":""),children:Object(a.jsx)(Y.a,{className:"page-link",to:this.getUrl(e),children:e})},e))),Object(a.jsx)("li",{className:"page-item ".concat(t.has_next?"":"disabled"),children:Object(a.jsx)(Y.a,{className:"page-link",to:this.getUrl("next"),"aria-disabled":!t.has_next,children:s("common:Next")})})]})})});var r}}class se extends c.a.Component{constructor(e,t){super(e,t),this.state={page:null,per_page:null,order_by:"created_at",order:"asc"}}componentDidMount(){this.props.loadUsers(this.initState())}componentDidUpdate(e){e.location.query!==this.props.location.query&&this.props.loadUsers(this.props.location.query)}initState(){const 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}updatePage(e,t){const s=Object.assign({},this.state);s[e]=t,this.setState(s);const a=L(this.props.location.pathname,s);Ta.push(a)}render(){const e=this.props,t=e.authUser,s=e.location,r=e.message,o=e.t,c=e.pagination,n=e.updateUser,i=e.users,l=R(o,E),d=R(o,A);return Object(a.jsxs)("div",{children:[r&&Object(a.jsx)(v,{message:r,t:o}),Object(a.jsx)("div",{className:"container",children:Object(a.jsx)("div",{className:"row",children:Object(a.jsx)("div",{className:"col",children:Object(a.jsxs)("div",{className:"card",children:[Object(a.jsx)("div",{className:"card-header",children:Object(a.jsx)("strong",{children:o("administration:Users")})}),Object(a.jsxs)("div",{className:"card-body",children:[Object(a.jsxs)("div",{className:"row user-filters",children:[Object(a.jsx)("div",{className:"col-lg-4 col-md-6 col-sm-12",children:Object(a.jsxs)("label",{htmlFor:"order_by",children:[o("common:Sort by"),":"," ",Object(a.jsx)("select",{id:"order_by",name:"order_by",value:this.state.order_by,onChange:e=>this.updatePage("order_by",e.target.value),children:l.map((e=>Object(a.jsx)("option",{value:e.key,children:e.label},e.key)))})," "]})}),Object(a.jsx)("div",{className:"col-lg-4 col-md-6 col-sm-12",children:Object(a.jsxs)("label",{htmlFor:"sort",children:[o("common:Sort"),":"," ",Object(a.jsx)("select",{id:"sort",name:"sort",value:this.state.order,onChange:e=>this.updatePage("order",e.target.value),children:d.map((e=>Object(a.jsx)("option",{value:e.key,children:e.label},e.key)))})," "]})})]}),Object(a.jsxs)("table",{className:"table",children:[Object(a.jsx)("thead",{children:Object(a.jsxs)("tr",{children:[Object(a.jsx)("th",{children:"#"}),Object(a.jsx)("th",{children:o("user:Username")}),Object(a.jsx)("th",{children:o("user:Email")}),Object(a.jsx)("th",{children:o("user:Registration Date")}),Object(a.jsx)("th",{children:o("workouts:Workouts")}),Object(a.jsx)("th",{children:o("user:Admin")}),Object(a.jsx)("th",{children:o("administration:Actions")})]})}),Object(a.jsx)("tbody",{children:i.map((e=>Object(a.jsxs)("tr",{children:[Object(a.jsxs)("td",{children:[Object(a.jsx)("span",{className:"heading-span-absolute",children:"#"}),!0===e.picture?Object(a.jsx)("img",{alt:"Avatar",src:"".concat(C,"users/").concat(e.username,"/picture?").concat(Date.now()),className:"img-fluid App-nav-profile-img"}):Object(a.jsx)("i",{className:"fa fa-user-circle-o fa-2x no-picture","aria-hidden":"true"})]}),Object(a.jsxs)("td",{children:[Object(a.jsx)("span",{className:"heading-span-absolute",children:o("user:Username")}),Object(a.jsx)(Y.a,{to:"/users/".concat(e.username),children:e.username})]}),Object(a.jsxs)("td",{children:[Object(a.jsx)("span",{className:"heading-span-absolute",children:o("user:Email")}),e.email]}),Object(a.jsxs)("td",{children:[Object(a.jsx)("span",{className:"heading-span-absolute",children:o("user:Registration Date")}),Object(y.a)(new Date(e.created_at),"dd/MM/yyyy HH:mm")]}),Object(a.jsxs)("td",{children:[Object(a.jsx)("span",{className:"heading-span-absolute",children:o("workouts:Workouts")}),e.nb_workouts]}),Object(a.jsxs)("td",{children:[Object(a.jsx)("span",{className:"heading-span-absolute",children:o("user:Admin")}),e.admin?Object(a.jsx)("i",{className:"fa fa-check-square-o custom-fa","aria-hidden":"true","data-toggle":"tooltip"}):Object(a.jsx)("i",{className:"fa fa-square-o custom-fa","aria-hidden":"true","data-toggle":"tooltip"})]}),Object(a.jsxs)("td",{children:[Object(a.jsx)("span",{className:"heading-span-absolute",children:o("administration:Actions")}),Object(a.jsx)("input",{type:"submit",className:"btn btn-".concat(e.admin?"dark":"primary"," btn-sm"),disabled:e.username===t.username,value:e.admin?o("administration:Remove admin rights"):o("administration:Add admin rights"),onClick:()=>n(e.username,!e.admin)})]})]},e.username)))})]}),Object(a.jsx)(te,{pagination:c,pathname:s.pathname,query:this.state,t:o}),Object(a.jsx)("input",{type:"submit",className:"btn btn-secondary",onClick:()=>Ta.push("/admin/"),value:o("common:Back")})]})]})})})})]})}}var ae=Object(O.c)((e=>({authUser:e.user,location:e.router.location,message:e.message,pagination:e.users.pagination,users:e.users.data})),(e=>({loadUsers:t=>{e(q("getData","users",t))},updateUser:(t,s)=>{e(q("updateData","users",{username:t,admin:s},!1))}})))(se),re=s(223);function oe(){const e=Object(re.a)().t;return Object(a.jsxs)("div",{children:[Object(a.jsx)(f.a,{children:Object(a.jsx)("title",{children:"fittrackee - 404"})}),Object(a.jsx)("h1",{className:"page-title",children:e("Page not found")})]})}var ce=Object(w.a)()(Object(O.c)((e=>({appConfig:e.application.config,user:e.user})))((function(e){const t=e.appConfig,s=e.t,r=e.user;return Object(a.jsxs)(a.Fragment,{children:[Object(a.jsx)(f.a,{children:Object(a.jsxs)("title",{children:["FitTrackee - ",s("administration:Administration")]})}),Object(a.jsx)("div",{className:"container dashboard",children:r.admin?Object(a.jsxs)(g.d,{children:[Object(a.jsx)(g.b,{exact:!0,path:"/admin",render:()=>Object(a.jsx)(Z,{appConfig:t,t:s})}),Object(a.jsx)(g.b,{exact:!0,path:"/admin/application",render:()=>Object(a.jsx)(K,{appConfig:t,t:s,isInEdition:!1})}),Object(a.jsx)(g.b,{exact:!0,path:"/admin/application/edit",render:()=>Object(a.jsx)(K,{appConfig:t,t:s,isInEdition:!0})}),Object(a.jsx)(g.b,{exact:!0,path:"/admin/sports",render:()=>Object(a.jsx)(ee,{t:s})}),Object(a.jsx)(g.b,{exact:!0,path:"/admin/users",render:()=>Object(a.jsx)(ae,{t:s})}),Object(a.jsx)(g.b,{component:oe})]}):Object(a.jsx)(oe,{})})]})}))),ne=s(892),ie=s(24),le=s(911),de=s(226),ue=s.n(de);const me=["#55a8a3","#98C3A9","#D0838A","#ECC77E","#926692","#929292","#428bca"],je=[{record_type:"AS",label:"Ave. speed"},{record_type:"FD",label:"Farest distance"},{record_type:"LD",label:"Longest duration"},{record_type:"MS",label:"Max. speed"}],pe=(e,t=null,s=null)=>(t||(t="yyyy/MM/dd"),s||(s="HH:mm"),{workout_date:e?Object(y.a)(e,t):null,workout_time:e?Object(y.a)(e,s):null}),he=e=>{let t=new Date(0);return t=Object(le.a)(t.setSeconds(e),1),t.getTime()},be=e=>{for(let t=0;t{const s=e.label.toLowerCase(),a=t.label.toLowerCase();return s>a?1:se.filter((e=>!s||e.is_active)).map((e=>Object(k.a)(Object(k.a)({},e),{},{label:t("sports:".concat(e.label))}))).sort(xe);class ge{static loginOrRegisterOrPasswordReset(e,t){const s={url:"auth/".concat(e),method:"POST",noAuthorization:!0,body:t,type:"application/json"};return P(s)}static deletePicture(){return P({url:"auth/picture",method:"DELETE"})}}const fe=e=>({type:"PICTURE_ERROR",message:e}),we=e=>({type:"PROFILE_UPDATE_ERROR",message:e}),ve=()=>e=>window.localStorage.getItem("authToken")?e(ke()):{type:"LOGOUT"},ke=()=>e=>U.getData("auth/profile").then((t=>"success"===t.status?(e(q("getData","sports")),t.data.isAuthenticated=!0,t.data.language&&e(B(t.data.language)),e({type:"PROFILE_SUCCESS",profil:t.data})):e({type:"PROFILE_ERROR",message:t.message}))).catch((e=>{throw e})),ye=(e,t)=>s=>{if("register"===t||"password/update"===t){const a=((e,t=!1)=>{const s=[];return!t&&(e.username.length<3||e.username.length>12)&&s.push("3 to 12 characters required for username."),e.password!==e.password_conf&&s.push("Password and password confirmation don't match."),e.password.length<8&&s.push("8 characters required for password."),s})(e,"password/update"===t);if(a.length>0)return s({type:"AUTH_ERRORS",messages:T(a)})}return s(((e,t)=>s=>ge.loginOrRegisterOrPasswordReset(e,t).then((t=>{if("success"===t.status){if("password/reset-request"===e)return Ta.push({pathname:"/password-reset/sent"});if("password/update"===e)return Ta.push({pathname:"/updated-password"});if("login"===e||"register"===e)return window.localStorage.setItem("authToken",t.auth_token),"register"===e&&s(V("config")),s(ke())}return s({type:"AUTH_ERROR",message:t.message})})).catch((e=>{throw e})))(t,e))},Ne=(e,t=!1)=>s=>U.deleteData("users",e).then((e=>{204===e.status?(s(V("config")),t?Ta.push("/admin/users"):(s({type:"LOGOUT"}),Ta.push("/"))):e.json().then((e=>s(W("".concat(e.message)))))})).catch((e=>s(W("user|".concat(e))))),_e=e=>({type:"SET_GPX",gpxContent:e}),Se=e=>({type:"SET_CHART_DATA",chartData:e}),De=e=>t=>U.updateData("workouts",e).then((e=>{"success"===e.status?(t(ve()),Ta.push("/workouts/".concat(e.data.workouts[0].id))):t(W("workouts|".concat(e.message))),t(H(!1))})).catch((e=>{t(H(!1)),t(W("workouts|".concat(e)))})),Ce=e=>t=>U.getData("workouts",e).then((e=>{"success"===e.status?e.data.workouts.length>0&&t({type:"PUSH_WORKOUTS",workouts:e.data.workouts}):t(W("workouts|".concat(e.message)))})).catch((e=>t(W("workouts|".concat(e)))));var Ee=Object(O.c)((e=>({appConfig:e.application.config,loading:e.loading})),(e=>({onAddWorkout:t=>{e(H(!0));const s=new FormData;s.append("file",t.target.form.gpxFile.files[0]),s.append("data",'{"sport_id": '.concat(t.target.form.sport.value,', "notes": "').concat(t.target.form.notes.value,'"}')),e((e=>t=>U.addDataWithFile("workouts",e).then((e=>{"created"===e.status?0===e.data.workouts.length?t(W("workouts|no correct file.")):1===e.data.workouts.length?(t(ve()),Ta.push("/workouts/".concat(e.data.workouts[0].id))):(t(ve()),Ta.push("/")):413===e.status?t(W("workouts|File size is greater than the allowed size")):t(W("workouts|".concat(e.message))),t(H(!1))})).catch((e=>{t(H(!1)),t(W("workouts|".concat(e)))})))(s))},onEditWorkout:(t,s)=>{e(De({id:s.id,notes:t.target.form.notes.value,sport_id:+t.target.form.sport.value,title:t.target.form.title.value}))}})))((function(e){const t=e.appConfig,s=e.loading,r=e.onAddWorkout,o=e.onEditWorkout,c=e.sports,n=e.t,i=e.workout,l=i?i.sport_id:"",d=Oe(c,n,!0),u="".concat(n("workouts:no folder inside"),", ").concat(t.gpx_limit_import," ").concat(n("workouts:files max"),", ").concat(n("workouts:max size"),": ").concat(D(t.max_zip_file_size)),m=D(t.max_single_file_size);return Object(a.jsxs)("form",{encType:"multipart/form-data",method:"post",onSubmit:e=>e.preventDefault(),children:[Object(a.jsx)("div",{className:"form-group",children:Object(a.jsxs)("label",{children:[n("common:Sport"),":",Object(a.jsxs)("select",{className:"form-control input-lg",defaultValue:l,disabled:s,name:"sport",required:!0,children:[Object(a.jsx)("option",{value:""}),d.map((e=>Object(a.jsx)("option",{value:e.id,children:e.label},e.id)))]})]})}),i?Object(a.jsx)("div",{className:"form-group",children:Object(a.jsxs)("label",{children:[n("workouts:Title"),":",Object(a.jsx)("input",{name:"title",defaultValue:i?i.title:"",disabled:s,className:"form-control input-lg"})]})}):Object(a.jsx)("div",{className:"form-group",children:Object(a.jsxs)("label",{children:[Object(a.jsxs)(ne.a,{i18nKey:"workouts:gpxFile",children:[Object(a.jsx)("strong",{children:"gpx"})," file"]}),Object(a.jsx)("sup",{children:Object(a.jsx)("i",{className:"fa fa-question-circle","aria-hidden":"true","data-toggle":"tooltip",title:"".concat(n("workouts:max size"),": ").concat(m)})})," ",Object(a.jsxs)(ne.a,{i18nKey:"workouts:zipFile",children:["or ",Object(a.jsx)("strong",{children:" zip"})," file containing ",Object(a.jsx)("strong",{children:"gpx "}),"files"]}),Object(a.jsx)("sup",{children:Object(a.jsx)("i",{className:"fa fa-question-circle","aria-hidden":"true","data-toggle":"tooltip","data-placement":"top",title:u})})," ",":",Object(a.jsx)("input",{accept:".gpx, .zip",className:"form-control form-control-file gpx-file",disabled:s,name:"gpxFile",required:!0,type:"file"})]})}),Object(a.jsx)("div",{className:"form-group",children:Object(a.jsxs)("label",{children:[n("workouts:Notes"),":",Object(a.jsx)("textarea",{name:"notes",defaultValue:i?i.notes:"",disabled:s,className:"form-control input-lg",maxLength:"500"})]})}),s?Object(a.jsx)("div",{className:"loader"}):Object(a.jsxs)("div",{children:[Object(a.jsx)("input",{type:"submit",className:"btn btn-primary",onClick:e=>i?o(e,i):r(e),value:n("common:Submit")}),Object(a.jsx)("input",{type:"submit",className:"btn btn-secondary",onClick:()=>Ta.push("/"),value:n("common:Cancel")})]})]})}));var Ae=Object(O.c)((e=>({user:e.user})),(e=>({onAddOrEdit:(t,s)=>{const a=t.target.form.duration.value.split(":"),r=60*+a[0]*60+60*+a[1]+ +a[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:r,notes:t.target.form.notes.value,sport_id:+t.target.form.sport_id.value,title:t.target.form.title.value};var c;s?(o.id=s.id,e(De(o))):e((c=o,e=>U.addData("workouts/no_gpx",c).then((t=>{"created"===t.status?(e(ve()),Ta.push("/workouts/".concat(t.data.workouts[0].id))):e(W("workouts|".concat(t.message)))})).catch((t=>e(W("workouts|".concat(t)))))))}})))((function(e){const t=e.onAddOrEdit,s=e.sports,r=e.t,o=e.user,c=e.workout,n=Oe(s,r,!0);let i,l,d="";if(c){const e=pe(z(c.workout_date,o.timezone),"yyyy-MM-dd");i=e.workout_date,l=e.workout_time,d=c.sport_id}return Object(a.jsxs)("form",{onSubmit:e=>e.preventDefault(),children:[Object(a.jsx)("div",{className:"form-group",children:Object(a.jsxs)("label",{children:[r("workouts:Title"),":",Object(a.jsx)("input",{name:"title",defaultValue:c?c.title:"",className:"form-control input-lg"})]})}),Object(a.jsx)("div",{className:"form-group",children:Object(a.jsxs)("label",{children:[r("common:Sport"),":",Object(a.jsxs)("select",{className:"form-control input-lg",defaultValue:d,name:"sport_id",required:!0,children:[Object(a.jsx)("option",{value:""}),n.map((e=>Object(a.jsx)("option",{value:e.id,children:e.label},e.id)))]})]})}),Object(a.jsx)("div",{className:"form-group",children:Object(a.jsxs)("label",{children:[r("workouts:Workout Date"),":",Object(a.jsx)("div",{className:"container",children:Object(a.jsxs)("div",{className:"row",children:[Object(a.jsx)("input",{name:"workout_date",defaultValue:i,className:"form-control col-md",required:!0,type:"date"}),Object(a.jsx)("input",{name:"workout_time",defaultValue:l,className:"form-control col-md",required:!0,type:"time"})]})})]})}),Object(a.jsx)("div",{className:"form-group",children:Object(a.jsxs)("label",{children:[r("workouts:Duration"),":",Object(a.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(a.jsx)("div",{className:"form-group",children:Object(a.jsxs)("label",{children:[r("workouts:Distance")," (km):",Object(a.jsx)("input",{name:"distance",defaultValue:c?c.distance:"",className:"form-control input-lg",min:0,required:!0,step:"0.001",type:"number"})]})}),Object(a.jsx)("div",{className:"form-group",children:Object(a.jsxs)("label",{children:[r("workouts:Notes"),":",Object(a.jsx)("textarea",{name:"notes",defaultValue:c?c.notes:"",className:"form-control input-lg",maxLength:"500"})]})}),Object(a.jsx)("input",{type:"submit",className:"btn btn-primary",onClick:e=>t(e,c),value:r("common:Submit")}),Object(a.jsx)("input",{type:"submit",className:"btn btn-secondary",onClick:()=>Ta.push("/"),value:r("common:Cancel")})]})}));class Me extends c.a.Component{constructor(e,t){super(e,t),this.state={withGpx:!0}}handleRadioChange(e){this.setState({withGpx:"withGpx"===e.target.name?e.target.value:!e.target.value})}render(){const e=this.props,t=e.loading,s=e.message,r=e.sports,o=e.t,c=e.workout,n=this.state.withGpx;return Object(a.jsxs)("div",{children:[Object(a.jsx)(f.a,{children:Object(a.jsxs)("title",{children:["FitTrackee -"," ",o(c?"workouts:Edit a workout":"workouts:Add a workout")]})}),Object(a.jsx)("br",{}),Object(a.jsx)("br",{}),Object(a.jsx)(v,{message:s,t:o}),Object(a.jsx)("div",{className:"container",children:Object(a.jsxs)("div",{className:"row",children:[Object(a.jsx)("div",{className:"col-md-2"}),Object(a.jsx)("div",{className:"col-md-8",children:Object(a.jsxs)("div",{className:"card add-workout",children:[Object(a.jsx)("h2",{className:"card-header text-center",children:o(c?"workouts:Edit a workout":"workouts:Add a workout")}),Object(a.jsx)("div",{className:"card-body",children:c?c.with_gpx?Object(a.jsx)(Ee,{workout:c,sports:r,t:o}):Object(a.jsx)(Ae,{workout:c,sports:r,t:o}):Object(a.jsxs)("div",{children:[Object(a.jsx)("form",{children:Object(a.jsxs)("div",{className:"form-group row",children:[Object(a.jsx)("div",{className:"col",children:Object(a.jsxs)("label",{className:"radioLabel",children:[Object(a.jsx)("input",{className:"add-workout-radio",type:"radio",name:"withGpx",disabled:t,checked:n,onChange:e=>this.handleRadioChange(e)}),o("workouts:with gpx file")]})}),Object(a.jsx)("div",{className:"col",children:Object(a.jsxs)("label",{className:"radioLabel",children:[Object(a.jsx)("input",{className:"add-workout-radio",type:"radio",name:"withoutGpx",disabled:t,checked:!n,onChange:e=>this.handleRadioChange(e)}),o("workouts:without gpx file")]})})]})}),n?Object(a.jsx)(Ee,{sports:r,t:o}):Object(a.jsx)(Ae,{sports:r,t:o})]})})]})}),Object(a.jsx)("div",{className:"col-md-2"})]})})]})}}var Te=Object(w.a)()(Object(O.c)((e=>({loading:e.loading})))(Me));var Pe=Object(O.c)((e=>({message:e.message,sports:e.sports.data,user:e.user})))((function(e){const t=e.message,s=e.sports;return Object(a.jsx)("div",{children:Object(a.jsx)(Te,{workout:null,message:t,sports:s})})}));function ze(e){const t=Object(re.a)().t;return Object(a.jsx)("div",{className:"custom-modal-backdrop",children:Object(a.jsx)("div",{className:"custom-modal",children:Object(a.jsxs)("div",{className:"modal-content",children:[Object(a.jsxs)("div",{className:"modal-header",children:[Object(a.jsx)("h5",{className:"modal-title",children:e.title}),Object(a.jsx)("button",{type:"button",className:"close","aria-label":"Close",onClick:()=>e.close(),children:Object(a.jsx)("span",{"aria-hidden":"true",children:"\xd7"})})]}),Object(a.jsx)("div",{className:"modal-body",children:Object(a.jsx)("p",{children:e.text})}),Object(a.jsxs)("div",{className:"modal-footer",children:[Object(a.jsx)("button",{type:"button",className:"btn btn-primary",onClick:()=>e.confirm(),children:t("common:Yes")}),Object(a.jsx)("button",{type:"button",className:"btn btn-secondary",onClick:()=>e.close(),children:t("common:No")})]})]})})})}function Fe(e){const t=e.dataType,s=e.displayModal,r=e.segmentId,o=e.sport,c=e.t,n=e.title,i=e.user,l=e.workout,d=l?pe(z(l.workout_date,i.timezone)):null,u="segment"===t&&1!==r?"/workouts/".concat(l.id,"/segment/").concat(r-1):"workout"===t&&l.previous_workout?"/workouts/".concat(l.previous_workout):null,m="segment"===t&&rs(!0),title:c("workouts:Delete workout")})]}):Object(a.jsxs)(a.Fragment,{children:[Object(a.jsx)(Y.a,{to:"/workouts/".concat(l.id),children:n})," ","- ",c("workouts:segment")," ",r]}),Object(a.jsx)("br",{}),d&&Object(a.jsx)("span",{className:"workout-date",children:"".concat(d.workout_date," - ").concat(d.workout_time)})]}),Object(a.jsx)("div",{className:"col-auto",children:m?Object(a.jsx)(Y.a,{className:"unlink",to:m,children:Object(a.jsx)("i",{className:"fa fa-chevron-right","aria-hidden":"true",title:c("workouts:See next ".concat(t))})}):Object(a.jsx)("i",{className:"fa fa-chevron-right inactive-link","aria-hidden":"true",title:c("workouts:No next ".concat(t))})})]})})}var Re=s(25);class Le extends c.a.Component{constructor(e,t){super(e,t),this.state={displayDistance:!0,dataToHide:[]}}componentDidMount(){"workout"===this.props.dataType?this.props.loadWorkoutData(this.props.workout.id):this.props.loadSegmentData(this.props.workout.id,this.props.segmentId)}componentDidUpdate(e){("workout"===this.props.dataType&&e.workout.id!==this.props.workout.id||"workout"===this.props.dataType&&"segment"===e.dataType)&&this.props.loadWorkoutData(this.props.workout.id),"segment"===this.props.dataType&&e.segmentId!==this.props.segmentId&&this.props.loadSegmentData(this.props.workout.id,this.props.segmentId)}componentWillUnmount(){this.props.loadWorkoutData(null)}handleRadioChange(e){this.setState({displayDistance:"distance"===e.target.name?e.target.value:!e.target.value})}handleLegendChange(e){const t=this.state.dataToHide,s=e.target.name;t.find((e=>e===s))?t.splice(t.indexOf(s),1):t.push(s),this.setState({dataToHide:t})}displayData(e){return!this.state.dataToHide.find((t=>t===e))}render(){const e=this.props,t=e.chartData,s=e.t,r=e.updateCoordinates,o=this.state.displayDistance,c=t?parseInt(t.length/10,10):0;let n,i;return o?(n="distance",i="linear"):(n="duration",i="time"),Object(a.jsx)("div",{className:"container",children:t&&t.length>0?Object(a.jsxs)("div",{children:[Object(a.jsxs)("div",{className:"row chart-radio",children:[Object(a.jsxs)("label",{className:"radioLabel col-md-1",children:[Object(a.jsx)("input",{type:"radio",name:"distance",checked:o,onChange:e=>this.handleRadioChange(e)}),s("workouts:distance")]}),Object(a.jsxs)("label",{className:"radioLabel col-md-1",children:[Object(a.jsx)("input",{type:"radio",name:"duration",checked:!o,onChange:e=>this.handleRadioChange(e)}),s("workouts:duration")]})]}),Object(a.jsxs)("div",{className:"row chart-radio",children:[Object(a.jsx)("div",{className:"col-md-5"}),Object(a.jsxs)("label",{className:"radioLabel col-md-1",children:[Object(a.jsx)("input",{type:"checkbox",name:"speed",checked:this.displayData("speed"),onChange:e=>this.handleLegendChange(e)}),s("workouts:speed")]}),Object(a.jsxs)("label",{className:"radioLabel col-md-1",children:[Object(a.jsx)("input",{type:"checkbox",name:"elevation",checked:this.displayData("elevation"),onChange:e=>this.handleLegendChange(e)}),s("workouts:elevation")]}),Object(a.jsx)("div",{className:"col-md-5"})]}),Object(a.jsx)("div",{className:"row chart",children:Object(a.jsx)(Re.f,{height:300,children:Object(a.jsxs)(Re.d,{data:t,margin:{top:15,right:30,left:20,bottom:15},onMouseMove:e=>r(e.activePayload),onMouseLeave:()=>r(null),children:[Object(a.jsx)(Re.h,{allowDecimals:!1,dataKey:n,label:{value:s("workouts:".concat(n)),offset:0,position:"bottom"},scale:i,interval:c,tickFormatter:e=>o?e:Object(y.a)(e,"HH:mm:ss"),type:"number"}),Object(a.jsx)(Re.i,{label:{value:"".concat(s("workouts:speed")," (km/h)"),angle:-90,position:"left"},yAxisId:"left"}),Object(a.jsx)(Re.i,{label:{value:"".concat(s("workouts:elevation")," (m)"),angle:-90,position:"right"},yAxisId:"right",orientation:"right"}),this.displayData("elevation")&&Object(a.jsx)(Re.a,{yAxisId:"right",type:"linear",dataKey:"elevation",name:s("workouts:elevation"),fill:"#e5e5e5",stroke:"#cccccc",dot:!1,unit:" m"}),this.displayData("speed")&&Object(a.jsx)(Re.e,{yAxisId:"left",type:"linear",dataKey:"speed",name:s("workouts:speed"),stroke:"#8884d8",strokeWidth:2,dot:!1,unit:" km/h"}),Object(a.jsx)(Re.g,{labelFormatter:e=>o?"".concat(s("workouts:distance"),": ").concat(e," km"):"".concat(s("workouts:duration"),": ").concat(Object(y.a)(e,"HH:mm:ss"))})]})})}),Object(a.jsx)("div",{className:"chart-info",children:s("workouts:data from gpx, without any cleaning")})]}):s("workouts:No data to display")})}}var Ue=Object(O.c)((e=>({chartData:e.chartData})),(e=>({loadWorkoutData:t=>{e((e=>t=>{if(e)return U.getData("workouts/".concat(e,"/chart_data")).then((e=>{"success"===e.status?t(Se(be(e.data.chart_data))):t(W("workouts|".concat(e.message)))})).catch((e=>t(W("workouts|".concat(e)))));t(Se(null))})(t))},loadSegmentData:(t,s)=>{e(((e,t)=>s=>{if(e)return U.getData("workouts/".concat(e,"/chart_data/segment/").concat(t)).then((e=>{"success"===e.status?s(Se(be(e.data.chart_data))):s(W("workouts|".concat(e.message)))})).catch((e=>s(W("workouts|".concat(e)))));s(Se(null))})(t,s))}})))(Le);function Ie(e){const t=e.t,s=e.workout;return Object(a.jsx)("div",{className:"container",children:s.weather_start&&s.weather_end&&Object(a.jsxs)("table",{className:"table table-borderless weather-table text-center",children:[Object(a.jsx)("thead",{children:Object(a.jsxs)("tr",{children:[Object(a.jsx)("th",{}),Object(a.jsxs)("th",{children:[t("workouts:Start"),Object(a.jsx)("br",{}),Object(a.jsx)("img",{className:"weather-img",src:"/img/weather/".concat(s.weather_start.icon,".png"),alt:"workout weather (".concat(s.weather_start.icon,")"),title:s.weather_start.summary})]}),Object(a.jsxs)("th",{children:[t("workouts:End"),Object(a.jsx)("br",{}),Object(a.jsx)("img",{className:"weather-img",src:"/img/weather/".concat(s.weather_end.icon,".png"),alt:"workout weather (".concat(s.weather_end.icon,")"),title:s.weather_end.summary})]})]})}),Object(a.jsxs)("tbody",{children:[Object(a.jsxs)("tr",{children:[Object(a.jsx)("td",{children:Object(a.jsx)("img",{className:"weather-img-small",src:"/img/weather/temperature.png",alt:"Temperatures"})}),Object(a.jsxs)("td",{children:[Number(s.weather_start.temperature).toFixed(1),"\xb0C"]}),Object(a.jsxs)("td",{children:[Number(s.weather_end.temperature).toFixed(1),"\xb0C"]})]}),Object(a.jsxs)("tr",{children:[Object(a.jsx)("td",{children:Object(a.jsx)("img",{className:"weather-img-small",src:"/img/weather/pour-rain.png",alt:"Temperatures"})}),Object(a.jsxs)("td",{children:[Number(100*s.weather_start.humidity).toFixed(1),"%"]}),Object(a.jsxs)("td",{children:[Number(100*s.weather_end.humidity).toFixed(1),"%"]})]}),Object(a.jsxs)("tr",{children:[Object(a.jsx)("td",{children:Object(a.jsx)("img",{className:"weather-img-small",src:"/img/weather/breeze.png",alt:"Temperatures"})}),Object(a.jsxs)("td",{children:[Number(s.weather_start.wind).toFixed(1),"m/s"]}),Object(a.jsxs)("td",{children:[Number(s.weather_end.wind).toFixed(1),"m/s"]})]})]})]})})}function We(e){const t=e.t,s=e.workout,r="0:00:00"!==s.pauses&&null!==s.pauses;return Object(a.jsxs)("div",{className:"workout-details",children:[Object(a.jsxs)("p",{children:[Object(a.jsx)("i",{className:"fa fa-clock-o custom-fa","aria-hidden":"true"}),t("workouts:Duration"),": ",s.moving,s.records&&s.records.find((e=>"LD"===e.record_type))&&Object(a.jsx)("sup",{children:Object(a.jsx)("i",{className:"fa fa-trophy custom-fa","aria-hidden":"true"})}),r&&Object(a.jsxs)("span",{children:[Object(a.jsx)("br",{}),"(",t("workouts:pauses"),": ",s.pauses,","," ",t("workouts:total duration"),": ",s.duration,")"]})]}),Object(a.jsxs)("p",{children:[Object(a.jsx)("i",{className:"fa fa-road custom-fa","aria-hidden":"true"}),t("workouts:Distance"),": ",s.distance," km",s.records&&s.records.find((e=>"FD"===e.record_type))&&Object(a.jsx)("sup",{children:Object(a.jsx)("i",{className:"fa fa-trophy custom-fa","aria-hidden":"true"})})]}),Object(a.jsxs)("p",{children:[Object(a.jsx)("i",{className:"fa fa-tachometer custom-fa","aria-hidden":"true"}),t("workouts:Average speed"),": ",s.ave_speed," km/h",s.records&&s.records.find((e=>"AS"===e.record_type))&&Object(a.jsx)("sup",{children:Object(a.jsx)("i",{className:"fa fa-trophy custom-fa","aria-hidden":"true"})}),Object(a.jsx)("br",{}),t("workouts:Max. speed"),": ",s.max_speed," km/h",s.records&&s.records.find((e=>"MS"===e.record_type))&&Object(a.jsx)("sup",{children:Object(a.jsx)("i",{className:"fa fa-trophy custom-fa","aria-hidden":"true"})})]}),s.min_alt&&s.max_alt&&Object(a.jsxs)("p",{children:[Object(a.jsx)("i",{className:"fi-mountains custom-fa"}),t("workouts:Min. altitude"),": ",s.min_alt,"m",Object(a.jsx)("br",{}),t("workouts:Max. altitude"),": ",s.max_alt,"m"]}),s.ascent&&s.descent&&Object(a.jsxs)("p",{children:[Object(a.jsx)("i",{className:"fa fa-location-arrow custom-fa"}),t("workouts:Ascent"),": ",s.ascent,"m",Object(a.jsx)("br",{}),t("workouts:Descent"),": ",s.descent,"m"]}),Object(a.jsx)(Ie,{workout:s,t:t})]})}var He=s(896),qe=s(893),Be=s(912),Ge=s(894),Ve=s(895),Je=s(237),Ke=s.n(Je);function Ye({bounds:e,coordinates:t,jsonData:s,mapAttribution:r}){return Object(qe.a)().fitBounds(e),Object(a.jsxs)(a.Fragment,{children:[Object(a.jsx)(Be.a,{attribution:r,url:"".concat(C,"workouts/map_tile/{s}/{z}/{x}/{y}.png")}),Object(a.jsx)(Ge.a,{data:s},Ke()(s)),t.latitude&&Object(a.jsx)(Ve.a,{position:[t.latitude,t.longitude]})]})}class Xe extends c.a.Component{constructor(e,t){super(e,t),this.state={zoom:13}}componentDidMount(){"workout"===this.props.dataType?this.props.loadWorkoutGpx(this.props.workout.id):this.props.loadSegmentGpx(this.props.workout.id,this.props.segmentId)}componentDidUpdate(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)}componentWillUnmount(){this.props.loadWorkoutGpx(null)}render(){const e=this.props,t=e.coordinates,s=e.gpxContent,r=e.mapAttribution,o=e.workout,c=(e=>{let t;if(e){const s=(new DOMParser).parseFromString(e,"text/xml");t=ue.a.gpx(s)}return{jsonData:t}})(s).jsonData,n=[[o.bounds[0],o.bounds[1]],[o.bounds[2],o.bounds[3]]];return Object(a.jsx)("div",{children:c&&Object(a.jsx)(He.a,{zoom:this.state.zoom,bounds:n,boundsOptions:{padding:[10,10]},children:Object(a.jsx)(Ye,{bounds:n,coordinates:t,jsonData:c,mapAttribution:r})})})}}var $e=Object(O.c)((e=>({gpxContent:e.gpx,mapAttribution:e.application.config.map_attribution})),(e=>({loadWorkoutGpx:t=>{e((e=>t=>{if(e)return U.getData("workouts/".concat(e,"/gpx")).then((e=>{"success"===e.status?t(_e(e.data.gpx)):t(W("workouts|".concat(e.message)))})).catch((e=>t(W("workouts|".concat(e)))));t(_e(null))})(t))},loadSegmentGpx:(t,s)=>{e(((e,t)=>s=>{if(e)return U.getData("workouts/".concat(e,"/gpx/segment/").concat(t)).then((e=>{"success"===e.status?s(_e(e.data.gpx)):s(W("workouts|".concat(e.message)))})).catch((e=>s(W("workouts|".concat(e)))));s(_e(null))})(t,s))}})))(Xe);function Ze(e){const t=e.t;return Object(a.jsx)("div",{className:"workout-no-map text-center",children:t("workouts:No Map")})}function Qe(e){const t=e.notes,s=e.t;return Object(a.jsx)("div",{className:"row",children:Object(a.jsx)("div",{className:"col",children:Object(a.jsx)("div",{className:"card workout-card",children:Object(a.jsxs)("div",{className:"card-body",children:["Notes",Object(a.jsx)("div",{className:"workout-notes",children:t||s("workouts:No notes")})]})})})})}function et(e){const t=e.segments,s=e.t;return Object(a.jsx)("div",{className:"row",children:Object(a.jsx)("div",{className:"col",children:Object(a.jsx)("div",{className:"card workout-card",children:Object(a.jsxs)("div",{className:"card-body",children:[s("workouts:Segments"),Object(a.jsx)("div",{className:"workout-segments",children:Object(a.jsx)("ul",{children:t.map(((e,t)=>Object(a.jsxs)("li",{className:"workout-segments-list",children:[Object(a.jsxs)(Y.a,{to:"/workouts/".concat(e.workout_id,"/segment/").concat(t+1),children:[s("workouts:segment")," ",t+1]})," ","(",s("workouts:distance"),": ",e.distance," km,"," ",s("workouts:duration"),": ",e.duration,")"]},"segment-".concat(t))))})})]})})})})}class tt extends c.a.Component{constructor(e,t){super(e,t),this.state={displayModal:!1,coordinates:{latitude:null,longitude:null}}}componentDidMount(){this.props.loadWorkout(this.props.match.params.workoutId)}componentDidUpdate(e){e.match.params.workoutId!==this.props.match.params.workoutId&&this.props.loadWorkout(this.props.match.params.workoutId)}displayModal(e){this.setState((t=>Object(k.a)(Object(k.a)({},t),{},{displayModal:e})))}updateCoordinates(e){const t=e&&e.length>0?{latitude:e[0].payload.latitude,longitude:e[0].payload.longitude}:{latitude:null,longitude:null};this.setState((e=>Object(k.a)(Object(k.a)({},e),{},{coordinates:t})))}render(){const e=this.props,t=e.message,s=e.onDeleteWorkout,r=e.sports,o=e.t,c=e.user,n=e.workouts,i=this.state,l=i.coordinates,d=i.displayModal,u=Object(ie.a)(n,1)[0],m=u?u.title:o("workouts:Workout"),j=u?r.filter((e=>e.id===u.sport_id)):[],p=Object(ie.a)(j,1)[0],h=parseInt(this.props.match.params.segmentId),b=h>=0?"segment":"workout";return Object(a.jsxs)("div",{className:"workout-page",children:[Object(a.jsx)(f.a,{children:Object(a.jsxs)("title",{children:["FitTrackee - ",m]})}),t?Object(a.jsx)(v,{message:t,t:o}):Object(a.jsxs)("div",{className:"container",children:[d&&Object(a.jsx)(ze,{title:o("common:Confirmation"),text:o("workouts:Are you sure you want to delete this workout?"),confirm:()=>{s(u.id),this.displayModal(!1)},close:()=>this.displayModal(!1)}),u&&p&&1===n.length&&Object(a.jsxs)("div",{children:[Object(a.jsx)("div",{className:"row",children:Object(a.jsx)("div",{className:"col",children:Object(a.jsxs)("div",{className:"card workout-card",children:[Object(a.jsx)("div",{className:"card-header",children:Object(a.jsx)(Fe,{workout:u,dataType:b,segmentId:h,sport:p,t:o,title:m,user:c,displayModal:()=>this.displayModal(!0)})}),Object(a.jsx)("div",{className:"card-body",children:Object(a.jsxs)("div",{className:"row",children:[Object(a.jsx)("div",{className:"col-md-8",children:u.with_gpx?Object(a.jsx)($e,{workout:u,coordinates:l,dataType:b,segmentId:h}):Object(a.jsx)(Ze,{t:o})}),Object(a.jsx)("div",{className:"col",children:Object(a.jsx)(We,{workout:"workout"===b?u:u.segments[h-1],t:o})})]})})]})})}),u.with_gpx&&Object(a.jsx)("div",{className:"row",children:Object(a.jsx)("div",{className:"col",children:Object(a.jsx)("div",{className:"card workout-card",children:Object(a.jsx)("div",{className:"card-body",children:Object(a.jsx)("div",{className:"row",children:Object(a.jsxs)("div",{className:"col",children:[Object(a.jsx)("div",{className:"chart-title",children:o("workouts:Chart")}),Object(a.jsx)(Ue,{workout:u,dataType:b,segmentId:h,t:o,updateCoordinates:e=>this.updateCoordinates(e)})]})})})})})}),"workout"===b&&Object(a.jsxs)(a.Fragment,{children:[Object(a.jsx)(Qe,{notes:u.notes,t:o}),u.segments.length>1&&Object(a.jsx)(et,{segments:u.segments,t:o})]})]})]})]})}}var st=Object(w.a)()(Object(O.c)((e=>({workouts:e.workouts.data,message:e.message,sports:e.sports.data,user:e.user})),(e=>({loadWorkout:t=>{e(q("getData","workouts",{id:t}))},onDeleteWorkout:t=>{var s;e((s=t,e=>U.deleteData("workouts",s).then((t=>{var a;204===t.status?Promise.resolve(e((a=s,{type:"REMOVE_WORKOUT",workoutId:a}))).then((()=>e(ve()))).then((()=>Ta.push("/"))):e(W("workouts|".concat(t.status)))})).catch((t=>e(W("workouts|".concat(t)))))))}})))(tt));class at extends c.a.Component{componentDidMount(){this.props.loadWorkout(this.props.match.params.workoutId)}render(){const e=this.props,t=e.message,s=e.sports,r=e.workouts,o=Object(ie.a)(r,1)[0];return Object(a.jsx)("div",{children:s.length>0&&Object(a.jsx)(Te,{workout:o,message:t,sports:s})})}}var rt=Object(O.c)((e=>({workouts:e.workouts.data,message:e.message,sports:e.sports.data,user:e.user})),(e=>({loadWorkout:t=>{e(q("getData","workouts",{id:t}))}})))(at);var ot=Object(O.c)((e=>({user:e.user})))((function(){return Object(a.jsx)("div",{children:M()?Object(a.jsxs)(g.d,{children:[Object(a.jsx)(g.b,{exact:!0,path:"/workouts/add",component:Pe}),Object(a.jsx)(g.b,{exact:!0,path:"/workouts/:workoutId",component:st}),Object(a.jsx)(g.b,{exact:!0,path:"/workouts/:workoutId/edit",component:rt}),Object(a.jsx)(g.b,{path:"/workouts/:workoutId/segment/:segmentId",component:st}),Object(a.jsx)(g.b,{component:oe})]}):Object(a.jsx)(g.a,{to:"/login"})})}));class ct extends c.a.PureComponent{render(){const e=this.props.t;return Object(a.jsx)("div",{className:"card text-center",children:Object(a.jsxs)("div",{className:"card-body",children:[e("common:No workouts.")," ",Object(a.jsx)(Y.a,{to:{pathname:"/workouts/add"},children:e("dashboard:Upload one !")})]})})}}class nt extends c.a.PureComponent{render(){const e=this.props,t=e.loadWorkouts,s=e.sports,r=e.t,o=e.updateParams,c=Oe(s,r);return Object(a.jsx)("div",{className:"card",children:Object(a.jsx)("div",{className:"card-body workout-filter",children:Object(a.jsxs)("form",{onSubmit:e=>e.preventDefault(),children:[Object(a.jsxs)("div",{className:"form-group",children:[Object(a.jsxs)("label",{children:[r("workouts:From"),":",Object(a.jsx)("input",{className:"form-control col-md",name:"from",onChange:e=>o(e),type:"date"})]}),Object(a.jsxs)("label",{children:[r("workouts:To"),":",Object(a.jsx)("input",{className:"form-control col-md",name:"to",onChange:e=>o(e),type:"date"})]})]}),Object(a.jsx)("div",{className:"form-group",children:Object(a.jsxs)("label",{children:[r("common:Sport"),":",Object(a.jsxs)("select",{className:"form-control input-lg",name:"sport_id",onChange:e=>o(e),children:[Object(a.jsx)("option",{value:""}),c.map((e=>Object(a.jsx)("option",{value:e.id,children:e.label},e.id)))]})]})}),Object(a.jsx)("div",{className:"form-group",children:Object(a.jsxs)("label",{children:[r("workouts:Distance")," (km):",Object(a.jsx)("div",{className:"container",children:Object(a.jsxs)("div",{className:"row",children:[Object(a.jsx)("div",{className:"col-5",children:Object(a.jsx)("input",{className:"form-control",min:0,name:"distance_from",onChange:e=>o(e),step:"1",type:"number"})}),Object(a.jsx)("div",{className:"col-2 align-middle text-center",children:r("common:to")}),Object(a.jsx)("div",{className:"col-5",children:Object(a.jsx)("input",{className:"form-control",min:0,name:"distance_to",onChange:e=>o(e),step:"1",type:"number"})})]})})]})}),Object(a.jsx)("div",{className:"form-group",children:Object(a.jsxs)("label",{children:[r("workouts:Duration"),":",Object(a.jsx)("div",{className:"container",children:Object(a.jsxs)("div",{className:"row",children:[Object(a.jsx)("div",{className:"col-5",children:Object(a.jsx)("input",{className:"form-control",name:"duration_from",onChange:e=>o(e),pattern:"^([0-9]*[0-9]):([0-5][0-9])$",placeholder:"hh:mm",type:"text"})}),Object(a.jsx)("div",{className:"col-2 align-middle text-center",children:r("common:to")}),Object(a.jsx)("div",{className:"col-5",children:Object(a.jsx)("input",{className:"form-control",name:"duration_to",onChange:e=>o(e),pattern:"^([0-9]*[0-9]):([0-5][0-9])$",placeholder:"hh:mm",type:"text"})})]})})]})}),Object(a.jsx)("div",{className:"form-group",children:Object(a.jsxs)("label",{children:[r("workouts:Average speed")," (km/h):",Object(a.jsx)("div",{className:"container",children:Object(a.jsxs)("div",{className:"row",children:[Object(a.jsx)("div",{className:"col-5",children:Object(a.jsx)("input",{className:"form-control",min:0,name:"ave_speed_from",onChange:e=>o(e),step:"1",type:"number"})}),Object(a.jsx)("div",{className:"col-2 align-middle text-center",children:r("common:to")}),Object(a.jsx)("div",{className:"col-5",children:Object(a.jsx)("input",{className:"form-control",min:0,name:"ave_speed_to",onChange:e=>o(e),step:"1",type:"number"})})]})})]})}),Object(a.jsx)("div",{className:"form-group",children:Object(a.jsxs)("label",{children:[r("workouts:Max. speed")," (km/h):",Object(a.jsx)("div",{className:"container",children:Object(a.jsxs)("div",{className:"row",children:[Object(a.jsx)("div",{className:"col-5",children:Object(a.jsx)("input",{className:"form-control",min:0,name:"max_speed_from",onChange:e=>o(e),step:"1",type:"number"})}),Object(a.jsx)("div",{className:"col-2 align-middle text-center",children:r("common:to")}),Object(a.jsx)("div",{className:"col-5",children:Object(a.jsx)("input",{className:"form-control",min:0,name:"max_speed_to",onChange:e=>o(e),step:"1",type:"number"})})]})})]})}),Object(a.jsx)("input",{className:"btn btn-primary btn-lg btn-block",onClick:()=>t(),type:"submit",value:r("workouts:Filter")})]})})})}}class it extends c.a.PureComponent{render(){const e=this.props,t=e.display,s=e.workout;return Object(a.jsxs)("div",{className:"workout-map".concat("list"===t?"-list":""),children:[Object(a.jsx)("img",{src:"".concat(C,"workouts/map/").concat(s.map,"?").concat(Date.now()),alt:"workout map"}),Object(a.jsxs)("div",{className:"map-attribution".concat("list"===t?"-list":""),children:[Object(a.jsx)("span",{className:"map-attribution-text",children:"\xa9"}),Object(a.jsx)("a",{className:"map-attribution-text",href:"http://www.openstreetmap.org/copyright",target:"_blank",rel:"noopener noreferrer",children:"OpenStreetMap"})]})]})}}class lt extends c.a.PureComponent{render(){const e=this.props,t=e.loading,s=e.sports,r=e.t,o=e.user,c=e.workouts;return Object(a.jsx)("div",{className:"card workout-card",children:Object(a.jsxs)("div",{className:"card-body",children:[Object(a.jsxs)("table",{className:"table",children:[Object(a.jsx)("thead",{children:Object(a.jsxs)("tr",{children:[Object(a.jsx)("th",{scope:"col"}),Object(a.jsx)("th",{scope:"col",children:r("common:Workout")}),Object(a.jsx)("th",{scope:"col",children:r("workouts:Date")}),Object(a.jsx)("th",{scope:"col",children:r("workouts:Distance")}),Object(a.jsx)("th",{scope:"col",children:r("workouts:Duration")}),Object(a.jsx)("th",{scope:"col",children:r("workouts:Ave. speed")}),Object(a.jsx)("th",{scope:"col",children:r("workouts:Max. speed")})]})}),Object(a.jsx)("tbody",{children:!t&&s&&c.map(((e,t)=>Object(a.jsxs)("tr",{children:[Object(a.jsxs)("td",{children:[Object(a.jsx)("span",{className:"heading-span-absolute",children:r("common:Sport")}),Object(a.jsx)("img",{className:"workout-sport",src:s.filter((t=>t.id===e.sport_id)).map((e=>e.img)),alt:"workout sport logo"})]}),Object(a.jsxs)("td",{className:"workout-title",children:[Object(a.jsx)("span",{className:"heading-span-absolute",children:r("common:Workout")}),Object(a.jsx)(Y.a,{to:"/workouts/".concat(e.id),children:e.title}),e.map&&Object(a.jsx)(it,{workout:e,display:"list"})]}),Object(a.jsxs)("td",{children:[Object(a.jsx)("span",{className:"heading-span-absolute",children:r("workouts:Date")}),Object(y.a)(z(e.workout_date,o.timezone),"dd/MM/yyyy HH:mm")]}),Object(a.jsxs)("td",{className:"text-right",children:[Object(a.jsx)("span",{className:"heading-span-absolute",children:r("workouts:Distance")}),Number(e.distance).toFixed(2)," km"]}),Object(a.jsxs)("td",{className:"text-right",children:[Object(a.jsx)("span",{className:"heading-span-absolute",children:r("workouts:Duration")}),e.moving]}),Object(a.jsxs)("td",{className:"text-right",children:[Object(a.jsx)("span",{className:"heading-span-absolute",children:r("workouts:Ave. speed")}),e.ave_speed," km/h"]}),Object(a.jsxs)("td",{className:"text-right",children:[Object(a.jsx)("span",{className:"heading-span-absolute",children:r("workouts:Max. speed")}),e.max_speed," km/h"]})]},t)))})]}),t&&Object(a.jsx)("div",{className:"loader"})]})})}}class dt extends c.a.Component{constructor(e,t){super(e,t),this.state={params:{page:1,per_page:10}}}componentDidMount(){this.props.loadWorkouts(this.state.params)}setParams(e){const 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)}render(){const e=this.props,t=e.loading,s=e.loadWorkouts,r=e.loadMoreWorkouts,o=e.message,c=e.sports,n=e.t,i=e.user,l=e.workouts,d=this.state.params,u=!(l.length>0)||null===l[l.length-1].previous_workout;return Object(a.jsxs)("div",{children:[Object(a.jsx)(f.a,{children:Object(a.jsxs)("title",{children:["FitTrackee - ",n("common:Workouts")]})}),o?Object(a.jsx)(v,{message:o,t:n}):Object(a.jsx)("div",{className:"container history",children:Object(a.jsxs)("div",{className:"row",children:[Object(a.jsx)("div",{className:"col-md-3",children:Object(a.jsx)(nt,{sports:c,loadWorkouts:()=>s(d),t:n,updateParams:e=>this.setParams(e)})}),Object(a.jsxs)("div",{className:"col-md-9 workouts-result",children:[Object(a.jsx)(lt,{workouts:l,loading:t,sports:c,t:n,user:i}),!u&&Object(a.jsx)("input",{type:"submit",className:"btn btn-default btn-md btn-block",value:"Load more workouts",onClick:()=>{d.page+=1,r(d),this.setState(d)}}),0===l.length&&Object(a.jsx)(ct,{t:n})]})]})})]})}}var ut=Object(w.a)()(Object(O.c)((e=>({workouts:e.workouts.data,loading:e.loading,message:e.message,sports:e.sports.data,user:e.user})),(e=>({loadWorkouts:t=>{e(q("getData","workouts",t))},loadMoreWorkouts:t=>{e(Ce(t))}})))(dt));var mt=Object(w.a)()(Object(O.c)((e=>({appConfig:e.application.config,pathname:e.router.location.pathname,message:e.message})),(e=>({onDeletePicture:()=>{e((e=>ge.deletePicture().then((t=>204===t.status?e(ke()):e(fe(t.message)))).catch((e=>{throw e}))))},onUploadPicture:t=>{e((e=>t=>{e.preventDefault();const s=new FormData;return s.append("file",e.target.picture.files[0]),e.target.reset(),U.addDataWithFile("auth/picture",s).then((e=>{if("success"===e.status)return t(ke());const s=413===e.status?"Error during picture update, file size exceeds max size.":e.message;return t(fe(s))})).catch((e=>{throw e}))})(t))}})))((function({appConfig:e,displayModal:t,editable:s,isDeletable:r,message:o,onDeletePicture:c,onUploadPicture:n,pathname:i,t:l,user:d}){const u=d.created_at?Object(y.a)(new Date(d.created_at),"dd/MM/yyyy HH:mm"):"",m=d.birth_date?Object(y.a)(new Date(d.birth_date),"dd/MM/yyyy"):"",j=D(e.max_single_file_size);return Object(a.jsxs)("div",{children:[Object(a.jsx)(f.a,{children:Object(a.jsxs)("title",{children:["FitTrackee - ",l("user:Profile")]})}),Object(a.jsx)(v,{message:o,t:l}),Object(a.jsxs)("div",{className:"container",children:[Object(a.jsx)("h1",{className:"page-title",children:l("user:Profile")}),Object(a.jsx)("div",{className:"row",children:Object(a.jsx)("div",{className:"col-md-12",children:Object(a.jsxs)("div",{className:"card",children:[Object(a.jsx)("div",{className:"card-header userName",children:Object(a.jsx)("strong",{children:d.username})}),Object(a.jsxs)("div",{className:"card-body",children:[Object(a.jsxs)("div",{className:"row",children:[Object(a.jsxs)("div",{className:"col-md-8",children:[Object(a.jsxs)("p",{children:[Object(a.jsx)("span",{className:"user-label",children:l("user:Email")}),": ",d.email]}),Object(a.jsxs)("p",{children:[Object(a.jsx)("span",{className:"user-label",children:l("user:Registration Date")}),": ",u]}),Object(a.jsxs)("p",{children:[Object(a.jsx)("span",{className:"user-label",children:l("user:First Name")}),": ",d.first_name]}),Object(a.jsxs)("p",{children:[Object(a.jsx)("span",{className:"user-label",children:l("user:Last Name")}),": ",d.last_name]}),Object(a.jsxs)("p",{children:[Object(a.jsx)("span",{className:"user-label",children:l("user:Birth Date")}),": ",m]}),Object(a.jsxs)("p",{children:[Object(a.jsx)("span",{className:"user-label",children:l("user:Location")}),": ",d.location]}),Object(a.jsxs)("p",{children:[Object(a.jsx)("span",{className:"user-label",children:l("user:Bio")}),":"," ",d.bio]}),Object(a.jsxs)("p",{children:[Object(a.jsx)("span",{className:"user-label",children:l("user:Language")}),": ",d.language]}),Object(a.jsxs)("p",{children:[Object(a.jsx)("span",{className:"user-label",children:l("user:Timezone")}),": ",d.timezone]}),Object(a.jsxs)("p",{children:[Object(a.jsx)("span",{className:"user-label",children:l("user:First day of week")}),": ",d.weekm?l("user:Monday"):l("user:Sunday")]})]}),Object(a.jsxs)("div",{className:"col-md-4",children:[!0===d.picture&&Object(a.jsxs)("div",{children:[Object(a.jsx)("img",{alt:"Profile",src:"".concat(C,"users/").concat(d.username,"/picture")+"?".concat(Date.now()),className:"img-fluid App-profile-img-small"}),s&&Object(a.jsxs)(a.Fragment,{children:[Object(a.jsx)("br",{}),Object(a.jsx)("button",{type:"submit",onClick:()=>c(),children:l("user:Delete picture")}),Object(a.jsx)("br",{}),Object(a.jsx)("br",{})]})]}),s&&Object(a.jsxs)("form",{encType:"multipart/form-data",onSubmit:e=>n(e),children:[Object(a.jsx)("input",{type:"file",name:"picture",accept:".png,.jpg,.gif"}),Object(a.jsx)("br",{}),Object(a.jsx)("button",{type:"submit",children:l("user:Send")})," (max. size: ".concat(j,")")]})," "]})]}),s&&Object(a.jsx)("button",{className:"btn btn-primary",onClick:()=>Ta.push("/profile/edit"),children:l("common:Edit")}),r&&Object(a.jsx)("button",{className:"btn btn-danger",onClick:()=>t(!0),children:l("user:Delete user account")}),Object(a.jsx)("button",{className:"btn btn-secondary",onClick:()=>"/profile"===i?Ta.push("/"):Ta.go(-1),children:l("/profile"===i?"common:Back to home":"common:Back")})]})]})})})]})]})})));var jt=Object(w.a)()(Object(O.c)((e=>({user:e.user})))((function({t:e,user:t}){return Object(a.jsx)("div",{children:Object(a.jsx)(mt,{editable:!0,t:e,user:t})})}))),pt=s(897),ht=s(898),bt=s(899),xt=s(900),Ot=s(238),gt=s(242),ft=s(901),wt=s(902),vt=s(107),kt=s(903),yt=s(144);function Nt(e){const t=e.isDisabled,s=e.isMore,r=e.sportImg,o=e.workout;return Object(a.jsx)(Y.a,{className:"calendar-workout".concat(s),to:"/workouts/".concat(o.id),children:Object(a.jsxs)(a.Fragment,{children:[Object(a.jsx)("img",{alt:"workout sport logo",className:"workout-sport ".concat(t),src:r,title:o.title}),o.records.length>0&&Object(a.jsx)("sup",{children:Object(a.jsx)("i",{className:"fa fa-trophy custom-fa-small","aria-hidden":"true",title:o.records.map((e=>" ".concat(je.filter((t=>t.record_type===e.record_type))[0].label)))})})]})})}class _t extends c.a.Component{constructor(e,t){super(e,t),this.state={isHidden:!0}}handleDisplayMore(){this.setState({isHidden:!this.state.isHidden})}render(){const e=this.props,t=e.dayWorkouts,s=e.isDisabled,r=e.sports,o=this.state.isHidden;return Object(a.jsxs)("div",{children:[t.map((e=>Object(a.jsx)(Nt,{workout:e,isDisabled:s,isMore:"",sportImg:r.filter((t=>t.id===e.sport_id)).map((e=>e.img))},e.id))),t.length>2&&Object(a.jsx)("i",{className:"fa fa-".concat(o?"plus":"times"," calendar-more"),"aria-hidden":"true",onClick:()=>this.handleDisplayMore(),title:"show more workouts"}),!o&&Object(a.jsx)("div",{className:"calendar-display-more",children:t.map((e=>Object(a.jsx)(Nt,{workout:e,isDisabled:s,isMore:"-more",sportImg:r.filter((t=>t.id===e.sport_id)).map((e=>e.img))},e.id)))})]})}}const St=(e,t)=>{const s=Object(pt.a)(e),a=Object(ht.a)(e),r=t?1:0;return{start:Object(bt.a)(s,{weekStartsOn:r}),end:Object(xt.a)(a)}};class Dt extends c.a.Component{constructor(e,t){super(e,t);const s=new Date;this.state={currentMonth:s,startDate:St(s,e.weekm).start,endDate:St(s,e.weekm).end,weekStartOnMonday:e.weekm}}componentDidMount(){this.props.loadMonthWorkouts(this.state.startDate,this.state.endDate)}renderHeader(e){return Object(a.jsxs)("div",{className:"header row flex-middle",children:[Object(a.jsx)("div",{className:"col col-start",onClick:()=>this.handlePrevMonth(),children:Object(a.jsx)("i",{className:"fa fa-chevron-left","aria-hidden":"true"})}),Object(a.jsx)("div",{className:"col col-center",children:Object(a.jsx)("span",{children:Object(y.a)(this.state.currentMonth,"MMM yyyy",e)})}),Object(a.jsx)("div",{className:"col col-end",onClick:()=>this.handleNextMonth(),children:Object(a.jsx)("i",{className:"fa fa-chevron-right","aria-hidden":"true"})})]})}renderDays(e){const t=[],s=this.state.startDate;for(let r=0;r<7;r++)t.push(Object(a.jsx)("div",{className:"col col-center",children:Object(y.a)(Object(Ot.a)(s,r),"EEE",e)},r));return Object(a.jsx)("div",{className:"days row",children:t})}filterWorkouts(e){const t=this.props,s=t.workouts,a=t.user;return s?s.filter((t=>Object(gt.a)(z(t.workout_date,a.timezone),e))):[]}renderCells(){const e=this.state,t=e.currentMonth,s=e.startDate,r=e.endDate,o=e.weekStartOnMonday,c=this.props.sports,n=[];let i=[],l=s,d="";for(;l<=r;){for(let e=0;e<7;e++){d=Object(y.a)(l,"d");const s=this.filterWorkouts(l),r=Object(ft.a)(l,t)?"":"-disabled",n=o?[5,6].includes(e):[0,6].includes(e);i.push(Object(a.jsx)("div",{className:"col cell ".concat(n?" weekend":"").concat(Object(wt.a)(l)?" today":""),children:Object(a.jsxs)("div",{className:"img".concat(r),children:[Object(a.jsx)("span",{className:"number",children:d}),Object(a.jsx)(_t,{dayWorkouts:s,isDisabled:r,sports:c})]})},l)),l=Object(Ot.a)(l,1)}n.push(Object(a.jsx)("div",{className:"row",children:i},l)),i=[]}return Object(a.jsx)("div",{className:"body",children:n})}updateStateDate(e){const t=St(e,this.state.weekStartOnMonday),s=t.start,a=t.end;this.setState({currentMonth:e,startDate:s,endDate:a}),this.props.loadMonthWorkouts(s,a)}handleNextMonth(){const e=Object(vt.a)(this.state.currentMonth,1);this.updateStateDate(e)}handlePrevMonth(){const e=Object(kt.a)(this.state.currentMonth,1);this.updateStateDate(e)}render(){const e={locale:"fr"===this.props.language?yt.fr:yt.enGB};return Object(a.jsx)("div",{className:"card workout-card",children:Object(a.jsxs)("div",{className:"calendar",children:[this.renderHeader(e),this.renderDays(e),this.renderCells()]})})}}var Ct=Object(O.c)((e=>({workouts:e.calendarWorkouts.data,language:e.language,sports:e.sports.data,user:e.user})),(e=>({loadMonthWorkouts:(t,s)=>{const a="yyyy-MM-dd";var r,o;e((r=Object(y.a)(t,a),o=Object(y.a)(s,a),e=>U.getData("workouts",{from:r,to:o,order:"desc",per_page:100}).then((t=>{"success"===t.status?e({type:"UPDATE_CALENDAR",workouts:t.data.workouts}):e(W("workouts|".concat(t.message)))})).catch((t=>e(W("workouts|".concat(t)))))))}})))(Dt);function Et(e){const t=e.records,s=e.sports,r=e.t,o=e.user,c=Oe(s,r),n=t.reduce(((e,t)=>{const s=c.find((e=>e.id===t.sport_id));return void 0===e[s.label]&&(e[s.label]={img:s.img,records:[]}),e[s.label].records.push(((e,t)=>{let s;switch(e.record_type){case"AS":case"MS":s="".concat(e.value," km/h");break;case"FD":s="".concat(e.value," km");break;default:s=e.value}const a=je.filter((t=>t.record_type===e.record_type)),r=Object(ie.a)(a,1)[0];return{workout_date:pe(z(e.workout_date,t)).workout_date,workout_id:e.workout_id,id:e.id,record_type:r.label,value:s}})(t,o.timezone)),e}),{});return Object(a.jsxs)("div",{className:"card workout-card",children:[Object(a.jsx)("div",{className:"card-header",children:r("workouts:Personal records")}),Object(a.jsx)("div",{className:"card-body",children:0===Object.keys(n).length?r("common:No records."):Object.keys(n).sort().map((e=>Object(a.jsxs)("div",{children:[Object(a.jsxs)("span",{className:"heading-span",children:[Object(a.jsx)("img",{alt:"".concat(e," logo"),className:"record-logo",src:n[e].img}),e]}),Object(a.jsxs)("table",{className:"table table-borderless table-sm record-table",children:[Object(a.jsx)("thead",{children:Object(a.jsx)("tr",{children:Object(a.jsxs)("th",{colSpan:"3",children:[Object(a.jsx)("img",{alt:"".concat(e," logo"),className:"record-logo",src:n[e].img}),e]})})}),Object(a.jsx)("tbody",{children:n[e].records.map((e=>Object(a.jsxs)("tr",{className:"record-tr",children:[Object(a.jsx)("td",{className:"record-td",children:r("workouts:".concat(e.record_type))}),Object(a.jsx)("td",{className:"record-td text-right",children:e.value}),Object(a.jsx)("td",{className:"record-td text-right",children:Object(a.jsx)(Y.a,{to:"/workouts/".concat(e.workout_id),children:e.workout_date})})]},e.id)))})]})]},e)))})]})}var At=s(239),Mt=s(904);const Tt=[{duration:"week",dateFormat:"yyyy-MM-dd",xAxis:"dd/MM"},{duration:"month",dateFormat:"yyyy-MM",xAxis:"MM/yyyy"},{duration:"year",dateFormat:"yyyy",xAxis:"yyyy"}],Pt=(e,t=!1)=>{let s="0";t&&(s=String(Math.floor(e/86400)),e%=86400);const a=String(Math.floor(e/3600)).padStart(2,"0");e%=3600;const r=String(Math.floor(e/60)).padStart(2,"0"),o=String(e%60).padStart(2,"0");return t?"".concat("0"===s?"":"".concat(s,"d:")).concat("00"===a?"":"".concat(a,"h:")).concat(r,"m:").concat(o,"s"):"".concat("00"===a?"":"".concat(a,":")).concat(r,":").concat(o)},zt=(e,t)=>0===t?"":"distance"===e?"".concat(t.toFixed(2)," km"):"duration"===e?Pt(t):t,Ft=(e,t)=>{switch(e){case"week":return Object(Ot.a)(t,7);case"year":return Object(At.a)(t,1);case"month":default:return Object(vt.a)(t,1)}},Rt=(e,t,s,a,r)=>{const o=[],c=[],n=[];for(let i=((e,t,s)=>{switch(e){case"week":return Object(bt.a)(t,{weekStartsOn:s?1:0});case"year":return Object(Mt.a)(t);case"month":default:return Object(pt.a)(t)}})(s.duration,s.start,r);i<=s.end;i=Ft(s.duration,i)){const r=Tt.filter((e=>e.duration===s.duration)),l=Object(ie.a)(r,1)[0],d=Object(y.a)(i,l.dateFormat),u=Object(y.a)(i,l.xAxis),m={date:u},j={date:u},p={date:u};e[d]&&Object.keys(e[d]).filter((e=>!a||a.includes(+e))).map((s=>{const a=t.filter((e=>e.id===+s))[0].label;return m[a]=e[d][s].nb_workouts,j[a]=e[d][s].total_distance,p[a]=e[d][s].total_duration,null})),o.push(m),c.push(j),n.push(p)}return{workouts:o,distance:c,duration:n}},Lt=(e,t)=>"duration"===e?Pt(t,!0):"distance"===e?t.toFixed(2):t;function Ut(e){if(e.active){const t=e.displayedData,s=e.payload,r=e.label;let o=0;return s.map((e=>o+=e.value)),Object(a.jsxs)("div",{className:"custom-tooltip",children:[Object(a.jsx)("p",{className:"custom-tooltip-label",children:r}),s.map((e=>Object(a.jsxs)("p",{style:{color:e.fill},children:[e.name,": ",Lt(t,e.value)," ",e.unit]},e.name))),s.length>0&&Object(a.jsxs)("p",{children:["Total: ",Lt(t,o)]})]})}return null}function It(e){const t=e.displayedData,s=e.x,r=e.y,o=e.width,c=e.value;if(!c)return null;const n=zt(t,c);return Object(a.jsx)("g",{children:Object(a.jsx)("text",{x:s+o/2,y:r-10,fill:"#666",fontSize:"11",textAnchor:"middle",dominantBaseline:"middle",children:n})})}class Wt extends c.a.PureComponent{constructor(e,t){super(e,t),this.state={displayedData:"distance"}}handleRadioChange(e){this.setState({displayedData:e.target.name})}render(){const e=this.state.displayedData,t=this.props,s=t.sports,r=t.stats,o=t.t;return 0===Object.keys(r).length?o("common:No workouts."):Object(a.jsxs)("div",{className:"chart-stats",children:[Object(a.jsxs)("div",{className:"row chart-radio",children:[Object(a.jsxs)("label",{className:"radioLabel col",children:[Object(a.jsx)("input",{type:"radio",name:"distance",checked:"distance"===e,onChange:e=>this.handleRadioChange(e)}),o("statistics:distance")]}),Object(a.jsxs)("label",{className:"radioLabel col",children:[Object(a.jsx)("input",{type:"radio",name:"duration",checked:"duration"===e,onChange:e=>this.handleRadioChange(e)}),o("statistics:duration")]}),Object(a.jsxs)("label",{className:"radioLabel col",children:[Object(a.jsx)("input",{type:"radio",name:"workouts",checked:"workouts"===e,onChange:e=>this.handleRadioChange(e)}),o("statistics:workouts")]})]}),Object(a.jsx)(Re.f,{height:300,children:Object(a.jsxs)(Re.c,{data:r[e],margin:{top:15,bottom:0},children:[Object(a.jsx)(Re.h,{dataKey:"date",interval:0}),Object(a.jsx)(Re.i,{tickFormatter:t=>zt(e,t)}),Object(a.jsx)(Re.g,{content:Object(a.jsx)(Ut,{displayedData:e})}),s.map(((t,r)=>Object(a.jsx)(Re.b,{isAnimationActive:!1,dataKey:t.label,stackId:"a",fill:me[r],label:r===s.length-1?Object(a.jsx)(It,{displayedData:e}):"",name:o("sports:".concat(t.label))},t.id)))]})})]})}}class Ht extends c.a.PureComponent{componentDidMount(){this.updateData()}componentDidUpdate(e){(this.props.user.username&&this.props.user.username!==e.user.username||this.props.statsParams!==e.statsParams)&&this.updateData()}updateData(){this.props.user.username&&this.props.loadWorkouts(this.props.user.username,this.props.user.weekm,this.props.statsParams)}render(){const e=this.props,t=e.displayedSports,s=e.sports,r=e.statistics,o=e.statsParams,c=e.displayEmpty,n=e.t,i=e.user;if(!c&&0===Object.keys(r).length)return Object(a.jsx)("span",{children:n("common:No workouts.")});const l=Rt(r,s,o,t,i.weekm);return Object(a.jsx)(Wt,{sports:s,stats:l,t:n})}}var qt=Object(O.c)((e=>({sports:e.sports.data,statistics:e.statistics.data,user:e.user})),(e=>({loadWorkouts:(t,s,a)=>{const r="yyyy-MM-dd",o="week"===a.duration?"".concat(a.duration).concat(s?"m":""):a.duration,c={from:Object(y.a)(a.start,r),to:Object(y.a)(a.end,r),time:o};e(((e,t,s)=>a=>U.getData("stats/".concat(e,"/").concat(t),s).then((e=>{"success"===e.status?a(I("statistics",e.data)):a(W("statistics|".concat(e.message)))})).catch((e=>a(W("statistics|".concat(e))))))(t,a.type,c))}})))(Ht);class Bt extends c.a.Component{constructor(e,t){super(e,t);const s=new Date;this.state={start:Object(pt.a)(s),end:Object(ht.a)(s),duration:"week",type:"by_time"}}render(){const e=this.props.t;return Object(a.jsxs)("div",{className:"card workout-card",children:[Object(a.jsx)("div",{className:"card-header",children:e("dashboard:This month")}),Object(a.jsx)("div",{className:"card-body",children:Object(a.jsx)(qt,{displayEmpty:!1,statsParams:this.state,t:e})})]})}}function Gt(e){const t=e.t,s=e.user,r=s.total_duration.match(/day/g)?"".concat(s.total_duration.split(" ")[0]," ").concat(s.total_duration.match(/days/g)?t("common:days"):t("common:day")):"0 ".concat(t("common:days"),",");let o=s.total_duration.match(/day/g)?s.total_duration.split(", ")[1]:s.total_duration;return o="".concat(o.split(":")[0],"h ").concat(o.split(":")[1],"min"),Object(a.jsxs)("div",{className:"row",children:[Object(a.jsx)("div",{className:"col-lg-3 col-md-6 col-sm-6",children:Object(a.jsx)("div",{className:"card workout-card",children:Object(a.jsxs)("div",{className:"card-body row",children:[Object(a.jsx)("div",{className:"col-3",children:Object(a.jsx)("i",{className:"fa fa-calendar fa-3x fa-color"})}),Object(a.jsxs)("div",{className:"col-9 text-right",children:[Object(a.jsx)("div",{className:"huge",children:s.nb_workouts}),Object(a.jsx)("div",{children:"".concat(1===s.nb_workouts?t("common:workout"):t("common:workouts"))})]})]})})}),Object(a.jsx)("div",{className:"col-lg-3 col-md-6 col-sm-6",children:Object(a.jsx)("div",{className:"card workout-card",children:Object(a.jsxs)("div",{className:"card-body row",children:[Object(a.jsx)("div",{className:"col-3",children:Object(a.jsx)("i",{className:"fa fa-road fa-3x fa-color"})}),Object(a.jsxs)("div",{className:"col-9 text-right",children:[Object(a.jsx)("div",{className:"huge",children:Number(s.total_distance).toFixed(2)}),Object(a.jsx)("div",{children:"km"})]})]})})}),Object(a.jsx)("div",{className:"col-lg-3 col-md-6 col-sm-6",children:Object(a.jsx)("div",{className:"card workout-card",children:Object(a.jsxs)("div",{className:"card-body row",children:[Object(a.jsx)("div",{className:"col-3",children:Object(a.jsx)("i",{className:"fa fa-clock-o fa-3x fa-color"})}),Object(a.jsxs)("div",{className:"col-9 text-right",children:[Object(a.jsx)("div",{className:"huge",children:r}),Object(a.jsx)("div",{children:o})]})]})})}),Object(a.jsx)("div",{className:"col-lg-3 col-md-6 col-sm-6",children:Object(a.jsx)("div",{className:"card workout-card",children:Object(a.jsxs)("div",{className:"card-body row",children:[Object(a.jsx)("div",{className:"col-3",children:Object(a.jsx)("i",{className:"fa fa-tags fa-3x fa-color"})}),Object(a.jsxs)("div",{className:"col-9 text-right",children:[Object(a.jsx)("div",{className:"huge",children:s.nb_sports}),Object(a.jsx)("div",{children:"".concat(1===s.nb_sports?t("common:sport"):t("common:sports"))})]})]})})})]})}function Vt(e){const t=e.sports,s=e.t,r=e.user,o=e.workout;return Object(a.jsxs)("div",{className:"card workout-card text-center",children:[Object(a.jsx)("div",{className:"card-header",children:Object(a.jsxs)(Y.a,{to:"/workouts/".concat(o.id),children:[t.filter((e=>e.id===o.sport_id)).map((e=>s("sports:".concat(e.label))))," ","-"," ",Object(y.a)(z(o.workout_date,r.timezone),"dd/MM/yyyy HH:mm")]})}),Object(a.jsx)("div",{className:"card-body",children:Object(a.jsxs)("div",{className:"row",children:[o.map&&Object(a.jsx)("div",{className:"col",children:Object(a.jsx)(it,{workout:o})}),Object(a.jsx)("div",{className:"col",children:Object(a.jsxs)("p",{children:[Object(a.jsx)("i",{className:"fa fa-clock-o","aria-hidden":"true"})," ",s("workouts:Duration"),": ",o.moving,o.map?Object(a.jsxs)("span",{children:[Object(a.jsx)("br",{}),Object(a.jsx)("br",{})]}):" - ",Object(a.jsx)("i",{className:"fa fa-road","aria-hidden":"true"})," ",s("workouts:Distance"),": ",o.distance," km"]})})]})})]})}class Jt extends c.a.Component{constructor(e,t){super(e,t),this.state={page:1}}componentDidMount(){this.props.loadWorkouts()}render(){const e=this.props,t=e.loadMoreWorkouts,s=e.message,r=e.records,o=e.sports,c=e.t,n=e.user,i=e.workouts,l=!(i.length>0)||null===i[i.length-1].previous_workout,d=this.state.page;return Object(a.jsxs)("div",{children:[Object(a.jsx)(f.a,{children:Object(a.jsxs)("title",{children:["FitTrackee - ",c("common:Dashboard")]})}),s?Object(a.jsx)(v,{message:s,t:c}):i&&n.total_duration&&o.length>0&&Object(a.jsxs)("div",{className:"container dashboard",children:[Object(a.jsx)(Gt,{user:n,t:c}),Object(a.jsxs)("div",{className:"row",children:[Object(a.jsxs)("div",{className:"col-md-4",children:[Object(a.jsx)(Bt,{t:c}),Object(a.jsx)(Et,{t:c,records:r,sports:o,user:n})]}),Object(a.jsxs)("div",{className:"col-md-8",children:[Object(a.jsx)(Ct,{weekm:n.weekm}),i.length>0?i.map((e=>Object(a.jsx)(Vt,{workout:e,sports:o,t:c,user:n},e.id))):Object(a.jsx)(ct,{t:c}),!l&&Object(a.jsx)("input",{type:"submit",className:"btn btn-default btn-md btn-block",value:"Load more workouts",onClick:()=>{t(d+1),this.setState({page:d+1})}})]})]})]})]})}}var Kt=Object(w.a)()(Object(O.c)((e=>({workouts:e.workouts.data,message:e.message,records:e.records.data,sports:e.sports.data,user:e.user})),(e=>({loadWorkouts:()=>{e(q("getData","workouts",{page:1})),e(q("getData","records"))},loadMoreWorkouts:t=>{e(Ce({page:t}))}})))(Jt));function Yt(){return Object(a.jsx)("footer",{className:"footer",children:Object(a.jsxs)("div",{className:"container",children:[Object(a.jsx)("strong",{children:"FitTrackee"})," v","0.4.6"," -"," ",Object(a.jsx)("a",{href:"https://github.com/SamR1/FitTrackee",target:"_blank",rel:"noopener noreferrer",children:"source code"})," ","under"," ",Object(a.jsx)("a",{href:"https://choosealicense.com/licenses/gpl-3.0/",target:"_blank",rel:"noopener noreferrer",children:"GPLv3"})," ","license -"," ",Object(a.jsx)("a",{href:"https://samr1.github.io/FitTrackee/",target:"_blank",rel:"noopener noreferrer",children:"documentation"})]})})}class Xt extends c.a.Component{componentDidMount(){this.props.UserLogout()}render(){return Object(a.jsx)("div",{className:"container dashboard",children:Object(a.jsxs)("div",{className:"row",children:[Object(a.jsx)("div",{className:"col-2"}),Object(a.jsx)("div",{className:"card col-8",children:Object(a.jsx)("div",{className:"card-body",children:Object(a.jsx)("div",{className:"text-center",children:Object(a.jsxs)(ne.a,{i18nKey:"user:loggedOut",children:["You are now logged out. Click ",Object(a.jsx)(Y.a,{to:"/login",children:"here"})," to log back in."]})})})}),Object(a.jsx)("div",{className:"col-2"})]})})}}var $t=Object(O.c)((e=>({user:e.user})),(e=>({UserLogout:()=>{e({type:"LOGOUT"})}})))(Xt);function Zt(){return(Zt=Object.assign||function(e){for(var t=1;t=0||(r[s]=e[s]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,s)&&(r[s]=e[s])}return r}var es=o.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"}),ts=o.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"}),ss=o.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"}),as=o.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"}),rs=o.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"}),os=o.createElement("path",{d:"m53.273 27.803 145.302 120.879v-120.879z",fill:"#406bd4"}),cs=o.createElement("path",{d:"m313.425 150.571v-122.768h148.082z",fill:"#3257b0"}),ns=o.createElement("path",{d:"m394.732 198.575 117.268-97.556v97.556z",fill:"#3257b0"}),is=o.createElement("g",{fill:"#406bd4"},o.createElement("path",{d:"m0 99.317v99.258h119.313z"}),o.createElement("path",{d:"m0 313.425v97.699l117.44-97.699z"}),o.createElement("path",{d:"m50.49 484.197 148.085-122.676v122.676z"})),ls=o.createElement("path",{d:"m313.425 484.197v-124.139l149.221 124.139z",fill:"#3257b0"}),ds=o.createElement("path",{d:"m512 409.423-115.395-95.998h115.395z",fill:"#3257b0"}),us=o.createElement("path",{d:"m512 222.142h-222.142v-194.339h-67.716v194.339h-222.142v67.716h222.142v194.339h67.716v-194.339h222.142z",fill:"#f40055"}),ms=o.createElement("path",{d:"m289.858 222.142v-194.339h-33.858v456.394h33.858v-194.339h222.142v-67.716z",fill:"#c20044"});function js(e,t){let s=e.title,a=e.titleId,r=Qt(e,["title","titleId"]);return o.createElement("svg",Zt({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":a},r),s?o.createElement("title",{id:a},s):null,es,ts,ss,as,rs,os,cs,ns,is,ls,ds,us,ms)}const ps=o.forwardRef(js);s.p;function hs(){return(hs=Object.assign||function(e){for(var t=1;t=0||(r[s]=e[s]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,s)&&(r[s]=e[s])}return r}var xs=o.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"}),Os=o.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"}),gs=o.createElement("path",{d:"m160.795 27.803h190.409v456.394h-190.409z",fill:"#f0f9ff"}),fs=o.createElement("path",{d:"m256 27.803h95.205v456.394h-95.205z",fill:"#cee5f5"});function ws(e,t){let s=e.title,a=e.titleId,r=bs(e,["title","titleId"]);return o.createElement("svg",hs({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":a},r),s?o.createElement("title",{id:a},s):null,xs,Os,gs,fs)}const vs=o.forwardRef(ws);s.p;const ks=[{name:"en",selected:!0,flag:Object(a.jsx)(ps,{})},{name:"fr",selected:!1,flag:Object(a.jsx)(vs,{})}];class ys extends o.Component{constructor(e){super(e),this.state={isOpen:!1}}toggleDropdown(){this.setState((e=>({isOpen:!e.isOpen})))}render(){const e=this.state.isOpen,t=this.props,s=t.language,r=t.onUpdateLanguage;return Object(a.jsx)("div",{className:"dropdown-wrapper",onClick:()=>this.toggleDropdown(),children:Object(a.jsx)("ul",{className:"dropdown-list i18n-flag",children:ks.filter((t=>e?t:t.name===s)).map((t=>Object(a.jsxs)("li",{className:"dropdown-item".concat(t.name===s&&e?" dropdown-item-selected":""),onClick:()=>r(t.name,s),children:[t.flag," ",t.name]},t.name)))})})}}var Ns=Object(O.c)((e=>({language:e.language})),(e=>({onUpdateLanguage:(t,s)=>{t!==s&&e(B(t))}})))(ys);class _s extends c.a.PureComponent{render(){const e=this.props,t=e.admin,s=e.isAuthenticated,r=e.picture,o=e.t,c=e.username;return Object(a.jsx)("header",{children:Object(a.jsx)("nav",{className:"navbar navbar-expand-lg navbar-light bg-light",children:Object(a.jsxs)("div",{className:"container",children:[Object(a.jsx)("span",{className:"navbar-brand",children:"FitTrackee"}),Object(a.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(a.jsx)("span",{className:"navbar-toggler-icon"})}),Object(a.jsxs)("div",{className:"collapse navbar-collapse",id:"navbarSupportedContent",children:[Object(a.jsxs)("ul",{className:"navbar-nav mr-auto",children:[Object(a.jsx)("li",{className:"nav-item",children:Object(a.jsx)(Y.a,{className:"nav-link",to:{pathname:"/"},children:o("common:Dashboard")})}),s&&Object(a.jsx)("li",{className:"nav-item",children:Object(a.jsx)(Y.a,{className:"nav-link",to:{pathname:"/workouts/history"},children:o("Workouts")})}),s&&Object(a.jsx)("li",{className:"nav-item",children:Object(a.jsx)(Y.a,{className:"nav-link",to:{pathname:"/workouts/statistics"},children:o("common:Statistics")})}),t&&Object(a.jsx)("li",{className:"nav-item",children:Object(a.jsx)(Y.a,{className:"nav-link",to:{pathname:"/admin"},children:"Admin"})}),s&&Object(a.jsx)("li",{className:"nav-item",children:Object(a.jsx)(Y.a,{className:"nav-link",to:{pathname:"/workouts/add"},children:Object(a.jsx)("strong",{children:o("common:Add workout")})})})]}),Object(a.jsxs)("ul",{className:"navbar-nav flex-row ml-md-auto d-none d-md-flex",children:[!s&&Object(a.jsx)("li",{className:"nav-item",children:Object(a.jsx)(Y.a,{className:"nav-link",to:{pathname:"/register"},children:o("user:Register")})}),!s&&Object(a.jsx)("li",{className:"nav-item",children:Object(a.jsx)(Y.a,{className:"nav-link",to:{pathname:"/login"},children:o("user:Login")})}),s&&Object(a.jsxs)(a.Fragment,{children:[!0===r?Object(a.jsx)("img",{alt:"Avatar",src:"".concat(C,"users/").concat(c,"/picture?").concat(Date.now()),className:"img-fluid App-nav-profile-img"}):Object(a.jsx)("i",{className:"fa fa-user-circle-o fa-2x no-picture","aria-hidden":"true"}),Object(a.jsx)("li",{className:"nav-item",children:Object(a.jsx)(Y.a,{className:"nav-link",to:{pathname:"/profile"},children:c})}),Object(a.jsx)("li",{className:"nav-item",children:Object(a.jsx)(Y.a,{className:"nav-link",to:{pathname:"/logout"},children:o("user:Logout")})})]}),Object(a.jsx)("li",{children:Object(a.jsx)(Ns,{})})]})]})]})})})}}var Ss=Object(w.a)()(Object(O.c)((({user:e})=>({admin:e.admin,isAuthenticated:e.isAuthenticated,picture:e.picture,username:e.username})))(_s));function Ds(){return(Ds=Object.assign||function(e){for(var t=1;t=0||(r[s]=e[s]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,s)&&(r[s]=e[s])}return r}var Es=o.createElement("g",null,o.createElement("g",null,o.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"}))),As=o.createElement("g",null,o.createElement("g",null,o.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"}))),Ms=o.createElement("g",null,o.createElement("g",null,o.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"}))),Ts=o.createElement("g",null,o.createElement("g",null,o.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"}))),Ps=o.createElement("g",null,o.createElement("g",null,o.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"}))),zs=o.createElement("g",null,o.createElement("g",null,o.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"}))),Fs=o.createElement("g",null,o.createElement("g",null,o.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"})));function Rs(e,t){let s=e.title,a=e.titleId,r=Cs(e,["title","titleId"]);return o.createElement("svg",Ds({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":a},r),s?o.createElement("title",{id:a},s):null,Es,As,Ms,Ts,Ps,zs,Fs)}const Ls=o.forwardRef(Rs);s.p;function Us(){return(Us=Object.assign||function(e){for(var t=1;t=0||(r[s]=e[s]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,s)&&(r[s]=e[s])}return r}var Ws=o.createElement("g",null,o.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"}),o.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"}),o.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"}),o.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"}));function Hs(e,t){let s=e.title,a=e.titleId,r=Is(e,["title","titleId"]);return o.createElement("svg",Us({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":a},r),s?o.createElement("title",{id:a},s):null,Ws)}const qs=o.forwardRef(Hs);s.p;function Bs(e){const t=Object(re.a)().t,s=e.action;return Object(a.jsx)("div",{className:"container dashboard",children:Object(a.jsxs)("div",{className:"row",children:[Object(a.jsx)("div",{className:"col-2"}),Object(a.jsx)("div",{className:"card col-8",children:Object(a.jsx)("div",{className:"card-body",children:Object(a.jsxs)("div",{className:"text-center ",children:["sent"===s&&Object(a.jsxs)(a.Fragment,{children:[Object(a.jsx)("div",{className:"svg-icon",children:Object(a.jsx)(qs,{})}),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"===s&&Object(a.jsxs)(a.Fragment,{children:[Object(a.jsx)("div",{className:"svg-icon",children:Object(a.jsx)(Ls,{})}),Object(a.jsxs)(ne.a,{i18nKey:"user:updatedPasswordText",children:["Your password have been updated. Click",Object(a.jsx)(Y.a,{to:"/login",children:"here"})," to log in."]})]})]})})}),Object(a.jsx)("div",{className:"col-2"})]})})}var Gs=s(240),Vs=s.n(Gs);class Js extends c.a.Component{constructor(e,t){super(e,t),this.state={formData:{},displayModal:!1}}componentDidMount(){this.initForm()}componentDidUpdate(e){e.user!==this.props.user&&this.initForm()}initForm(){const e=this.props.user,t={};Object.keys(e).map((s=>null===e[s]?t[s]="":t[s]="birth_date"===s?Object(y.a)(new Date(e[s]),"yyyy-MM-DD"):e[s])),this.setState({formData:t})}handleFormChange(e){const t=this.state.formData;"weekm"===e.target.name?t.weekm="Monday"===e.target.value:t[e.target.name]=e.target.value,this.setState(t)}displayModal(e){this.setState((t=>Object(k.a)(Object(k.a)({},t),{},{displayModal:e})))}render(){const e=this.props,t=e.message,s=e.onDeleteUser,r=e.onHandleProfileFormSubmit,o=e.t,c=e.user,n=this.state,i=n.displayModal,l=n.formData;return Object(a.jsxs)("div",{children:[Object(a.jsx)(f.a,{children:Object(a.jsxs)("title",{children:["FitTrackee - ",o("user:Profile Edition")]})}),l.isAuthenticated&&Object(a.jsxs)("div",{className:"container",children:[i&&Object(a.jsx)(ze,{title:o("common:Confirmation"),text:o("user:Are you sure you want to delete your account? All data will be deleted, this cannot be undone."),confirm:()=>{s(c.username),this.displayModal(!1)},close:()=>this.displayModal(!1)}),Object(a.jsx)("h1",{className:"page-title",children:o("user:Profile Edition")}),Object(a.jsxs)("div",{className:"row",children:[Object(a.jsx)("div",{className:"col-md-2"}),Object(a.jsx)("div",{className:"col-md-8",children:Object(a.jsxs)("div",{className:"card",children:[Object(a.jsx)("div",{className:"card-header",children:c.username}),Object(a.jsx)("div",{className:"card-body",children:Object(a.jsx)("div",{className:"row",children:Object(a.jsxs)("div",{className:"col-md-12",children:[Object(a.jsxs)("form",{onSubmit:e=>{e.preventDefault(),r(l)},children:[Object(a.jsx)("div",{className:"form-group",children:Object(a.jsxs)("label",{children:[o("user:Email"),":",Object(a.jsx)("input",{name:"email",className:"form-control input-lg",type:"text",value:l.email,readOnly:!0})]})}),Object(a.jsx)("div",{className:"form-group",children:Object(a.jsxs)("label",{children:[o("user:Registration Date"),":",Object(a.jsx)("input",{name:"createdAt",className:"form-control input-lg",type:"text",value:l.created_at,disabled:!0})]})}),Object(a.jsx)("div",{className:"form-group",children:Object(a.jsxs)("label",{children:[o("user:Password"),":",Object(a.jsx)("input",{name:"password",className:"form-control input-lg",type:"password",onChange:e=>this.handleFormChange(e)})]})}),Object(a.jsx)("div",{className:"form-group",children:Object(a.jsxs)("label",{children:[o("user:Password Confirmation"),":",Object(a.jsx)("input",{name:"password_conf",className:"form-control input-lg",type:"password",onChange:e=>this.handleFormChange(e)})]})}),Object(a.jsx)("hr",{}),Object(a.jsx)("div",{className:"form-group",children:Object(a.jsxs)("label",{children:[o("user:First Name"),":",Object(a.jsx)("input",{name:"first_name",className:"form-control input-lg",type:"text",value:l.first_name,onChange:e=>this.handleFormChange(e)})]})}),Object(a.jsx)("div",{className:"form-group",children:Object(a.jsxs)("label",{children:[o("user:Last Name"),":",Object(a.jsx)("input",{name:"last_name",className:"form-control input-lg",type:"text",value:l.last_name,onChange:e=>this.handleFormChange(e)})]})}),Object(a.jsx)("div",{className:"form-group",children:Object(a.jsxs)("label",{children:[o("user:Birth Date"),Object(a.jsx)("input",{name:"birth_date",className:"form-control input-lg",type:"date",value:l.birth_date,onChange:e=>this.handleFormChange(e)})]})}),Object(a.jsx)("div",{className:"form-group",children:Object(a.jsxs)("label",{children:[o("user:Location"),":",Object(a.jsx)("input",{name:"location",className:"form-control input-lg",type:"text",value:l.location,onChange:e=>this.handleFormChange(e)})]})}),Object(a.jsx)("div",{className:"form-group",children:Object(a.jsxs)("label",{children:[o("user:Bio"),":",Object(a.jsx)("textarea",{name:"bio",className:"form-control input-lg",maxLength:"200",value:l.bio,onChange:e=>this.handleFormChange(e)})]})}),Object(a.jsx)("div",{className:"form-group",children:Object(a.jsxs)("label",{children:[o("user:Language"),":",Object(a.jsx)("select",{name:"language",className:"form-control input-lg",value:l.language,onChange:e=>this.handleFormChange(e),children:ks.map((e=>Object(a.jsx)("option",{value:e.name,children:e.name},e.name)))})]})}),Object(a.jsx)("div",{className:"form-group",children:Object(a.jsxs)("label",{children:[o("user:Timezone"),":",Object(a.jsx)(Vs.a,{className:"form-control timezone-custom",onChange:e=>{const t={target:{name:"timezone",value:e||"Europe/Paris"}};this.handleFormChange(t)},value:l.timezone})]})}),Object(a.jsx)("div",{className:"form-group",children:Object(a.jsxs)("label",{children:[o("user:First day of week"),":",Object(a.jsxs)("select",{name:"weekm",className:"form-control input-lg",value:l.weekm?"Monday":"Sunday",onChange:e=>this.handleFormChange(e),children:[Object(a.jsx)("option",{value:"Sunday",children:o("user:Sunday")}),Object(a.jsx)("option",{value:"Monday",children:o("user:Monday")})]})]})}),Object(a.jsx)("button",{type:"submit",className:"btn btn-primary",children:o("common:Submit")}),Object(a.jsx)("button",{className:"btn btn-danger",onClick:e=>{e.preventDefault(),this.displayModal(!0)},children:o("user:Delete my account")}),Object(a.jsx)("button",{type:"submit",className:"btn btn-secondary",onClick:()=>Ta.push("/profile"),children:o("common:Cancel")})]}),Object(a.jsx)(v,{message:t,t:o})]})})})]})}),Object(a.jsx)("div",{className:"col-md-2"})]})]})]})}}var Ks=Object(w.a)()(Object(O.c)((e=>({location:e.router.location,message:e.message,user:e.user})),(e=>({onDeleteUser:t=>{e(Ne(t))},onHandleProfileFormSubmit:t=>{e((e=>t=>!e.password===e.password_conf?t(we("Password and password confirmation don't match.")):(delete e.id,U.postData("auth/profile/edit",e).then((e=>{if("success"===e.status)return t(ke()),Ta.push("/profile");t(we(e.message))})).catch((e=>{throw e}))))(t))}})))(Js)),Ys=s(905),Xs=s(906),$s=s(907),Zs=s(241);const Qs=["week","month","year"];class ea extends c.a.Component{constructor(e,t){super(e,t);const s=new Date;this.state={displayedSports:e.sports.map((e=>e.id)),statsParams:{start:Object(pt.a)(Object(kt.a)(s,11)),end:Object(ht.a)(s),duration:"month",type:"by_time"}}}componentDidUpdate(e){this.props.sports!==e.sports&&this.updateDisplayedSports()}updateDisplayedSports(){const e=this.props.sports;this.setState({displayedSports:e.map((e=>e.id))})}handleOnChangeDuration(e){const t=e.target.name,s=new Date,a="year"===t?Object(Mt.a)(Object(Ys.a)(s,9)):"week"===t?Object(pt.a)(Object(kt.a)(s,2)):Object(pt.a)(Object(kt.a)(s,11)),r="year"===t?Object(Xs.a)(s):"week"===t?Object(xt.a)(s):Object(ht.a)(s);this.setState({statsParams:{duration:t,end:r,start:a,type:"by_time"}})}handleOnChangeSports(e){const t=this.state.displayedSports;t.includes(e)?this.setState({displayedSports:t.filter((t=>t!==e))}):this.setState({displayedSports:t.concat([e])})}handleOnClickArrows(e){const t=this.state.statsParams,s=t.start,a=t.end,r=t.duration;let o,c;e?(o="year"===r?Object(Mt.a)(Object(Ys.a)(s,1)):"week"===r?Object(bt.a)(Object($s.a)(s,1)):Object(pt.a)(Object(kt.a)(s,1)),c="year"===r?Object(Xs.a)(Object(Ys.a)(a,1)):"week"===r?Object(xt.a)(Object($s.a)(a,1)):Object(ht.a)(Object(kt.a)(a,1))):(o="year"===r?Object(Mt.a)(Object(At.a)(s,1)):"week"===r?Object(bt.a)(Object(Zs.a)(s,1)):Object(pt.a)(Object(vt.a)(s,1)),c="year"===r?Object(Xs.a)(Object(At.a)(a,1)):"week"===r?Object(xt.a)(Object(Zs.a)(a,1)):Object(ht.a)(Object(vt.a)(a,1))),this.setState({statsParams:{duration:r,end:c,start:o,type:"by_time"}})}render(){const e=this.state,t=e.displayedSports,s=e.statsParams,r=this.props,o=r.sports,c=r.t,n=r.user,i=Oe(o.filter((e=>n.sports_list.includes(e.id))),c);return Object(a.jsxs)(a.Fragment,{children:[Object(a.jsx)(f.a,{children:Object(a.jsxs)("title",{children:["FitTrackee - ",c("statistics:Statistics")]})}),Object(a.jsxs)("div",{className:"container dashboard",children:[Object(a.jsxs)("div",{className:"card workout-card",children:[Object(a.jsx)("div",{className:"card-header",children:c("statistics:Statistics")}),Object(a.jsxs)("div",{className:"card-body".concat(0===n.nb_workouts?" stats-disabled":""),children:[Object(a.jsxs)("div",{className:"chart-filters row",children:[Object(a.jsx)("div",{className:"col chart-arrows",children:Object(a.jsx)("p",{className:"text-center",children:Object(a.jsx)("i",{className:"fa fa-chevron-left","aria-hidden":"true",onClick:()=>this.handleOnClickArrows(!0)})})}),Object(a.jsx)("div",{className:"col-md-3 time-frames justify-content-around",children:Qs.map((e=>Object(a.jsx)("div",{className:"time-frame",children:Object(a.jsxs)("label",{children:[Object(a.jsx)("input",{type:"radio",id:e,name:e,checked:e===s.duration,onChange:e=>this.handleOnChangeDuration(e)}),Object(a.jsx)("span",{children:c("statistics:".concat(e))})]})},e)))}),Object(a.jsx)("div",{className:"col chart-arrows",children:Object(a.jsx)("p",{className:"text-center",children:Object(a.jsx)("i",{className:"fa fa-chevron-right","aria-hidden":"true",onClick:()=>this.handleOnClickArrows(!1)})})})]}),Object(a.jsx)(qt,{displayEmpty:!0,displayedSports:t,statsParams:s,t:c}),Object(a.jsx)("div",{className:"row chart-workouts",children:i.map((e=>Object(a.jsxs)("label",{className:"col workout-label",children:[Object(a.jsx)("input",{type:"checkbox",checked:t.includes(e.id),name:e.label,onChange:()=>this.handleOnChangeSports(e.id)}),Object(a.jsx)("span",{style:{color:me[e.id-1]},children:" ".concat(e.label)})]},e.id)))})]})]}),0===n.nb_workouts&&Object(a.jsx)(ct,{t:c})]})]})}}var ta=Object(w.a)()(Object(O.c)((e=>({sports:e.sports.data,user:e.user})))(ea));function sa(e){const t=Object(re.a)().t,s="user:".concat(e.formType.charAt(0).toUpperCase()).concat(e.formType.slice(1));return Object(a.jsxs)("div",{children:[Object(a.jsx)(f.a,{children:Object(a.jsxs)("title",{children:["FitTrackee - ",t("user:".concat(e.formType))]})}),Object(a.jsx)("h1",{className:"page-title",children:t(s)}),Object(a.jsx)("div",{className:"container",children:Object(a.jsxs)("div",{className:"row",children:[Object(a.jsx)("div",{className:"col-md-3"}),Object(a.jsxs)("div",{className:"col-md-6",children:[Object(a.jsx)("br",{}),"register"!==e.formType||e.isRegistrationAllowed?Object(a.jsxs)(a.Fragment,{children:[Object(a.jsxs)("form",{onSubmit:t=>e.handleUserFormSubmit(t,e.formType),children:["register"===e.formType&&Object(a.jsx)("div",{className:"form-group",children:Object(a.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(a.jsx)("div",{className:"form-group",children:Object(a.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(a.jsxs)(a.Fragment,{children:[Object(a.jsx)("div",{className:"form-group",children:Object(a.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(a.jsx)("div",{className:"form-group",children:Object(a.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(a.jsx)("input",{type:"submit",className:"btn btn-primary btn-lg btn-block",value:t("Submit")})]}),Object(a.jsx)("p",{className:"password-forget",children:"login"===e.formType&&Object(a.jsx)(Y.a,{to:{pathname:"/password-reset/request"},children:t("user:Forgot password?")})})]}):Object(a.jsxs)("div",{className:"card",children:[Object(a.jsx)("div",{className:"card-body",children:"Registration is disabled."}),Object(a.jsx)("div",{className:"card-body",children:Object(a.jsx)("button",{type:"submit",className:"btn btn-secondary btn-lg btn-block",onClick:()=>Ta.go(-1),children:"Back"})})]})]}),Object(a.jsx)("div",{className:"col-md-3"})]})})]})}class aa extends c.a.Component{constructor(e,t){super(e,t),this.state={formData:{username:"",email:"",password:"",password_conf:""}}}componentDidUpdate(e){e.location.pathname!==this.props.location.pathname&&this.emptyForm()}emptyForm(){const e=this.state.formData;Object.keys(e).map((t=>e[t]="")),this.setState(e)}onHandleFormChange(e){const t=this.state.formData;t[e.target.name]=e.target.value,this.setState(t)}render(){const e=this.props,t=e.formType,s=e.isRegistrationAllowed,r=e.message,o=e.messages,c=e.onHandleUserFormSubmit,n=e.t,i=this.state.formData,l=this.props.location.query.token;return Object(a.jsx)("div",{children:M()||"password reset"===t&&!l?Object(a.jsx)(g.a,{to:"/"}):Object(a.jsxs)("div",{children:[Object(a.jsx)(v,{message:r,messages:o,t:n}),Object(a.jsx)(sa,{isRegistrationAllowed:s,formType:t,userForm:i,onHandleFormChange:e=>this.onHandleFormChange(e),handleUserFormSubmit:e=>{e.preventDefault(),"password reset"===t&&(i.token=l),c(i,t)}})]})})}}var ra=Object(w.a)()(Object(O.c)((e=>({isRegistrationAllowed:e.application.config.is_registration_enabled,location:e.router.location,message:e.message,messages:e.messages})),(e=>({onHandleUserFormSubmit:(t,s)=>{e(ye(t,s="password reset"===s?"password/update":"reset your password"===s?"password/reset-request":s))}})))(aa));class oa extends c.a.Component{constructor(e,t){super(e,t),this.state={displayModal:!1}}componentDidMount(){this.props.loadUser(this.props.match.params.userName)}componentDidUpdate(e){e.match.params.userName!==this.props.match.params.userName&&this.props.loadUser(this.props.match.params.userName)}displayModal(e){this.setState((t=>Object(k.a)(Object(k.a)({},t),{},{displayModal:e})))}render(){const e=this.props,t=e.t,s=e.currentUser,r=e.onDeleteUser,o=e.users,c=this.state.displayModal,n=Object(ie.a)(o,1)[0],i=!!n&&s.username===n.username;return Object(a.jsxs)("div",{children:[c&&Object(a.jsx)(ze,{title:t("common:Confirmation"),text:t("user:Are you sure you want to delete this account? All data will be deleted, this cannot be undone."),confirm:()=>{r(n.username),this.displayModal(!1)},close:()=>this.displayModal(!1)}),n&&Object(a.jsx)(mt,{editable:i,isDeletable:s.admin&&!i,onDeleteUser:r,displayModal:e=>this.displayModal(e),t:t,user:n})]})}}var ca=Object(w.a)()(Object(O.c)((e=>({currentUser:e.user,users:e.users.data})),(e=>({onDeleteUser:t=>{e(Ne(t,!0))},loadUser:t=>{e(q("getData","users",{username:t}))}})))(oa));class na extends c.a.Component{constructor(e){super(e),this.props=e}componentDidMount(){this.props.loadAppConfig()}render(){return Object(a.jsxs)("div",{className:"App",children:[Object(a.jsx)(Ss,{}),Object(a.jsxs)(g.d,{children:[Object(a.jsx)(g.b,{exact:!0,path:"/",component:Kt}),Object(a.jsx)(g.b,{exact:!0,path:"/register",render:()=>Object(a.jsx)(ra,{formType:"register"})}),Object(a.jsx)(g.b,{exact:!0,path:"/login",render:()=>Object(a.jsx)(ra,{formType:"login"})}),Object(a.jsx)(g.b,{exact:!0,path:"/password-reset",render:()=>Object(a.jsx)(ra,{formType:"password reset"})}),Object(a.jsx)(g.b,{exact:!0,path:"/password-reset/request",render:()=>Object(a.jsx)(ra,{formType:"reset your password"})}),Object(a.jsx)(g.b,{exact:!0,path:"/password-reset/sent",render:()=>Object(a.jsx)(Bs,{action:"sent"})}),Object(a.jsx)(g.b,{exact:!0,path:"/updated-password",render:()=>Object(a.jsx)(Bs,{action:"updated"})}),Object(a.jsx)(g.b,{exact:!0,path:"/password-reset/sent",component:Bs}),Object(a.jsx)(g.b,{exact:!0,path:"/logout",component:$t}),Object(a.jsx)(g.b,{exact:!0,path:"/profile/edit",component:Ks}),Object(a.jsx)(g.b,{exact:!0,path:"/profile",component:jt}),Object(a.jsx)(g.b,{exact:!0,path:"/workouts/history",component:ut}),Object(a.jsx)(g.b,{exact:!0,path:"/workouts/statistics",component:ta}),Object(a.jsx)(g.b,{exact:!0,path:"/users/:userName",component:ca}),Object(a.jsx)(g.b,{path:"/workouts",component:ot}),Object(a.jsx)(g.b,{path:"/admin",component:ce}),Object(a.jsx)(g.b,{component:oe})]}),Object(a.jsx)(Yt,{})]})}}var ia=Object(O.c)((()=>({})),(e=>({loadAppConfig:()=>{e(V("config"))}})))(na),la=s(80);function da({store:e,history:t,children:s}){return Object(a.jsx)(O.a,{store:e,children:Object(a.jsx)(la.a,{history:t,children:s})})}const ua=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 ma(e){navigator.serviceWorker.register(e).then((e=>{e.onupdatefound=()=>{const t=e.installing;t.onstatechange=()=>{"installed"===t.state&&(navigator.serviceWorker.controller?console.log("New content is available; please refresh."):console.log("Content is cached for offline use."))}}})).catch((e=>{console.error("Error during service worker registration:",e)}))}const ja={data:[]};var pa={language:"en",message:"",messages:[],user:{isAuthenticated:!1},workouts:Object(k.a)({},ja),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(k.a)({},ja),chartData:[],gpx:null,loading:!1,records:Object(k.a)({},ja),sports:Object(k.a)({},ja),statistics:{data:{}},users:Object(k.a)({},ja)};const ha=(e,t,s)=>s.target!==t?e:"SET_DATA"===s.type?Object(k.a)(Object(k.a)({},e),{},{data:s.data[s.target]}):"SET_PAGINATED_DATA"===s.type?Object(k.a)(Object(k.a)({},e),{},{data:s.data[s.target],pagination:s.pagination}):e,ba=(e=pa.workouts,t)=>{switch(t.type){case"LOGOUT":return pa.workouts;case"PUSH_WORKOUTS":return Object(k.a)(Object(k.a)({},e),{},{data:e.data.concat(t.workouts)});case"REMOVE_WORKOUT":return Object(k.a)(Object(k.a)({},e),{},{data:e.data.filter((e=>e.id!==t.workoutId))});default:return ha(e,"workouts",t)}},xa=(e=pa.application,t)=>"SET_APP_CONFIG"===t.type?Object(k.a)(Object(k.a)({},e),{},{config:t.data}):"SET_APP_STATS"===t.type?Object(k.a)(Object(k.a)({},e),{},{statistics:t.data}):e,Oa=(e=pa.calendarWorkouts,t)=>{switch(t.type){case"LOGOUT":return pa.calendarWorkouts;case"UPDATE_CALENDAR":return Object(k.a)(Object(k.a)({},e),{},{data:t.workouts});default:return ha(e,"calendarWorkouts",t)}},ga=(e=pa.chartData,t)=>"SET_CHART_DATA"===t.type?t.chartData:e,fa=(e=pa.gpx,t)=>"SET_GPX"===t.type?t.gpxContent:e,wa=(e=pa.language,t)=>"SET_LANGUAGE"===t.type?t.language:e,va=(e=pa.loading,t)=>"SET_LOADING"===t.type?t.loading:e,ka=(e=pa.message,t)=>{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}},ya=(e=pa.messages,t)=>{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}},Na=(e=pa.records,t)=>"LOGOUT"===t.type?pa.records:ha(e,"records",t),_a=(e=pa.sports,t)=>"UPDATE_SPORT_DATA"===t.type?Object(k.a)(Object(k.a)({},e),{},{data:e.data.map((e=>(e.id===t.data.id&&(e.is_active=t.data.is_active),e)))}):ha(e,"sports",t),Sa=(e=pa.users,t)=>"UPDATE_USER_DATA"===t.type?Object(k.a)(Object(k.a)({},e),{},{data:e.data.map((e=>(e.username===t.data.username&&(e.admin=t.data.admin),e)))}):ha(e,"users",t),Da=(e=pa.user,t)=>{switch(t.type){case"AUTH_ERROR":case"PROFILE_ERROR":case"LOGOUT":return window.localStorage.removeItem("authToken"),pa.user;case"PROFILE_SUCCESS":return t.profil;default:return e}},Ca=(e=pa.statistics,t)=>"LOGOUT"===t.type?pa.statistics:ha(e,"statistics",t);const Ea=["/login","/register","/password-reset","/password-reset/request","/password-reset/sent","/updated-password"],Aa=(e,t)=>("string"===typeof e||e instanceof String?e=t:e.pathname=t,e),Ma=e=>(window.localStorage.authToken||Ea.includes(e.pathname)||(e=Aa(e,"/login")),window.localStorage.authToken&&Ea.includes(e.pathname)&&(e=Aa(e,"/")),e),Ta=((Pa=Object(r.a)()).location=Ma(Pa.location),Object(k.a)(Object(k.a)({},Pa),{},{push:(e,...t)=>Pa.push(Ma(e),...t),replace:(e,...t)=>Pa.replace(Ma(e),...t)}));var Pa;Ta.listen((()=>{window.scrollTo(0,0)}));const za=document.getElementById("root"),Fa=Object(u.e)((Ra=Ta,Object(u.c)({workouts:ba,application:xa,calendarWorkouts:Oa,chartData:ga,gpx:fa,language:wa,loading:va,message:ka,messages:ya,records:Na,router:Object(la.b)(Ra),sports:_a,statistics:Ca,user:Da,users:Sa})),window.__STATE__,(window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__||u.d)(Object(u.a)(Object(d.a)(Ta),m.a)));var Ra;null!==window.localStorage.authToken&&Fa.dispatch(ve()),l.a.render(Object(a.jsx)(da,{store:Fa,history:Ta,children:Object(a.jsx)(n.a,{i18n:x,children:Object(a.jsx)(ia,{})})}),za),function(){if("serviceWorker"in navigator){if(new URL("",window.location).origin!==window.location.origin)return;window.addEventListener("load",(()=>{const e="".concat("","/service-worker.js");ua?function(e){fetch(e).then((t=>{404===t.status||-1===t.headers.get("content-type").indexOf("javascript")?navigator.serviceWorker.ready.then((e=>{e.unregister().then((()=>{window.location.reload()}))})):ma(e)})).catch((()=>{console.log("No internet connection found. App is running in offline mode.")}))}(e):ma(e)}))}}()}},[[889,1,2]]]); +//# sourceMappingURL=main.07bf0de8.chunk.js.map \ No newline at end of file diff --git a/fittrackee/dist/static/js/main.75f806db.chunk.js.map b/fittrackee/dist/static/js/main.07bf0de8.chunk.js.map similarity index 99% rename from fittrackee/dist/static/js/main.75f806db.chunk.js.map rename to fittrackee/dist/static/js/main.07bf0de8.chunk.js.map index b69ecc5c..8040f7e2 100644 --- a/fittrackee/dist/static/js/main.75f806db.chunk.js.map +++ b/fittrackee/dist/static/js/main.07bf0de8.chunk.js.map @@ -1 +1 @@ -{"version":3,"sources":["locales/fr/resources.js","locales/index.js","locales/en/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","utils/stats.js","components/Common/Stats/CustomTooltip.jsx","components/Common/Stats/CustomLabel.jsx","components/Common/Stats/StatsChart.jsx","components/Common/Stats/index.jsx","actions/stats.js","components/Dashboard/Statistics.jsx","components/Dashboard/UserStatistics.jsx","components/Dashboard/WorkoutCard.jsx","components/Dashboard/index.jsx","components/Footer/index.jsx","components/User/Logout.jsx","images/flags/en.svg","images/flags/fr.svg","components/NavBar/LanguageDropdown.jsx","components/NavBar/index.jsx","images/password.svg","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","reducers/index.js","utils/history.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","React","PureComponent","render","this","props","message","t","singleMessage","split","length","className","value","map","msg","id","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","setError","setLoading","loading","getOrUpdateData","action","canDispatch","dispatch","isNaN","ret","pagination","setPaginatedData","updateSportsData","updateUsersData","users","updateLanguage","language","i18next","changeLanguage","setLanguage","setAppConfig","getAppData","FitTrackeeGenericApi","getData","AdminApplication","Component","constructor","context","super","state","formData","componentDidMount","initForm","componentDidUpdate","prevProps","appConfig","k","includes","setState","handleFormChange","e","name","isInEdition","loadAppConfig","onHandleConfigFormSubmit","onSubmit","preventDefault","htmlFor","aria-hidden","title","min","max_users","onChange","step","max_single_file_size","max_zip_file_size","gpx_limit_import","onClick","history","push","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","getUrl","newQuery","page","aria-label","has_prev","aria-disabled","pages","from","_","has_next","AdminUsers","per_page","order_by","order","loadUsers","initState","location","updatePage","authUser","updateUser","translatedFilters","translatedSortOrders","picture","now","email","created_at","nb_workouts","admin","disabled","router","userName","isAdmin","NotFound","useTranslation","Helmet","config","exact","path","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","onlyPasswords","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","handleRadioChange","changeEvent","with_gpx","checked","WorkoutAddOrEdit","CustomModal","close","text","confirm","WorkoutCardHeader","dataType","displayModal","segmentId","previousUrl","previous_workout","nextUrl","segments","next_workout","WorkoutCharts","displayDistance","dataToHide","loadWorkoutData","loadSegmentData","componentWillUnmount","handleLegendChange","find","splice","indexOf","displayData","updateCoordinates","xInterval","parseInt","xDataKey","xScale","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","setParams","loadMoreWorkouts","paginationEnd","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","handleDisplayMore","dayWorkouts","act","getStartAndEndMonth","weekStartOnMonday","monthStart","startOfMonth","monthEnd","endOfMonth","weekStartsOn","start","startOfWeek","end","endOfWeek","Calendar","calendarDate","currentMonth","startDate","endDate","loadMonthWorkouts","renderHeader","localeOptions","handlePrevMonth","handleNextMonth","renderDays","days","addDays","filterWorkouts","day","isSameDay","renderCells","rows","formattedDate","isSameMonth","isWeekEnd","isToday","updateStateDate","addMonths","subMonths","locale","enGB","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","startOfYear","x","xAxisFormat","dataNbWorkouts","dataDistance","dataDuration","total_distance","total_duration","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","Logout","UserLogout","_extends","arguments","source","prototype","hasOwnProperty","call","apply","_objectWithoutProperties","excluded","sourceKeys","_objectWithoutPropertiesLoose","getOwnPropertySymbols","sourceSymbolKeys","propertyIsEnumerable","_ref3","_ref4","_ref5","_ref6","_ref7","_ref8","_ref9","_ref10","_ref11","_ref12","_ref13","_ref14","SvgEn","_ref","svgRef","titleId","enableBackground","viewBox","xmlns","ref","ForwardRef","SvgFr","languages","selected","flag","Dropdown","isOpen","toggleDropdown","onUpdateLanguage","lang","NavBar","data-target","aria-controls","aria-expanded","LanguageDropdown","SvgPassword","xmlnsXlink","xmlSpace","SvgMailSend","PasswordReset","ProfileEdit","onDeleteUser","onHandleProfileFormSubmit","readOnly","postData","handleProfileFormSubmit","durations","updateDisplayedSports","handleOnChangeDuration","subYears","endOfYear","handleOnChangeSports","concat","handleOnClickArrows","forward","newStart","newEnd","subWeeks","addWeeks","sports_list","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","emptyData","handleDataAndError","initial","removeItem","routesWithoutAuthentication","updatePath","toPath","newPath","pathInterceptor","originalHistory","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.75f806db.chunk.js","sourcesContent":["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 { 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 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.5' // 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.filter(act =>\n isSameDay(getDateWithTZ(act.workout_date, user.timezone), day)\n )\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 {\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 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 { 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","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","function _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\nvar _ref2 = /*#__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});\n\nvar _ref3 = /*#__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});\n\nvar _ref4 = /*#__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});\n\nvar _ref5 = /*#__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});\n\nvar _ref6 = /*#__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});\n\nvar _ref7 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"m53.273 27.803 145.302 120.879v-120.879z\",\n fill: \"#406bd4\"\n});\n\nvar _ref8 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"m313.425 150.571v-122.768h148.082z\",\n fill: \"#3257b0\"\n});\n\nvar _ref9 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"m394.732 198.575 117.268-97.556v97.556z\",\n fill: \"#3257b0\"\n});\n\nvar _ref10 = /*#__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}));\n\nvar _ref11 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"m313.425 484.197v-124.139l149.221 124.139z\",\n fill: \"#3257b0\"\n});\n\nvar _ref12 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"m512 409.423-115.395-95.998h115.395z\",\n fill: \"#3257b0\"\n});\n\nvar _ref13 = /*#__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});\n\nvar _ref14 = /*#__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\nfunction SvgEn(_ref, svgRef) {\n let 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, _ref2, _ref3, _ref4, _ref5, _ref6, _ref7, _ref8, _ref9, _ref10, _ref11, _ref12, _ref13, _ref14);\n}\n\nconst ForwardRef = /*#__PURE__*/React.forwardRef(SvgEn);\nexport default __webpack_public_path__ + \"static/media/en.9e6dbfb0.svg\";\nexport { ForwardRef as ReactComponent };","function _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\nvar _ref2 = /*#__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});\n\nvar _ref3 = /*#__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});\n\nvar _ref4 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"m160.795 27.803h190.409v456.394h-190.409z\",\n fill: \"#f0f9ff\"\n});\n\nvar _ref5 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"m256 27.803h95.205v456.394h-95.205z\",\n fill: \"#cee5f5\"\n});\n\nfunction SvgFr(_ref, svgRef) {\n let 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, _ref2, _ref3, _ref4, _ref5);\n}\n\nconst ForwardRef = /*#__PURE__*/React.forwardRef(SvgFr);\nexport default __webpack_public_path__ + \"static/media/fr.d0f9280c.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\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","function _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\nvar _ref2 = /*#__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})));\n\nvar _ref3 = /*#__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})));\n\nvar _ref4 = /*#__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})));\n\nvar _ref5 = /*#__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})));\n\nvar _ref6 = /*#__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})));\n\nvar _ref7 = /*#__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})));\n\nvar _ref8 = /*#__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\nfunction SvgPassword(_ref, svgRef) {\n let 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, _ref2, _ref3, _ref4, _ref5, _ref6, _ref7, _ref8);\n}\n\nconst ForwardRef = /*#__PURE__*/React.forwardRef(SvgPassword);\nexport default __webpack_public_path__ + \"static/media/password.afe6a2a5.svg\";\nexport { ForwardRef as ReactComponent };","function _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\nvar _ref2 = /*#__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\nfunction SvgMailSend(_ref, svgRef) {\n let 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, _ref2);\n}\n\nconst 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","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","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","/* 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/fr/resources.js","locales/index.js","locales/en/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","utils/stats.js","components/Common/Stats/CustomTooltip.jsx","components/Common/Stats/CustomLabel.jsx","components/Common/Stats/StatsChart.jsx","components/Common/Stats/index.jsx","actions/stats.js","components/Dashboard/Statistics.jsx","components/Dashboard/UserStatistics.jsx","components/Dashboard/WorkoutCard.jsx","components/Dashboard/index.jsx","components/Footer/index.jsx","components/User/Logout.jsx","images/flags/en.svg","images/flags/fr.svg","components/NavBar/LanguageDropdown.jsx","components/NavBar/index.jsx","images/password.svg","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","reducers/index.js","utils/history.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","React","PureComponent","render","this","props","message","t","singleMessage","split","length","className","value","map","msg","id","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","setError","setLoading","loading","getOrUpdateData","action","canDispatch","dispatch","isNaN","ret","pagination","setPaginatedData","updateSportsData","updateUsersData","users","updateLanguage","language","i18next","changeLanguage","setLanguage","setAppConfig","getAppData","FitTrackeeGenericApi","getData","AdminApplication","Component","constructor","context","super","state","formData","componentDidMount","initForm","componentDidUpdate","prevProps","appConfig","k","includes","setState","handleFormChange","e","name","isInEdition","loadAppConfig","onHandleConfigFormSubmit","onSubmit","preventDefault","htmlFor","aria-hidden","title","min","max_users","onChange","step","max_single_file_size","max_zip_file_size","gpx_limit_import","onClick","history","push","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","getUrl","newQuery","page","aria-label","has_prev","aria-disabled","pages","from","_","has_next","AdminUsers","per_page","order_by","order","loadUsers","initState","location","updatePage","authUser","updateUser","translatedFilters","translatedSortOrders","picture","now","email","created_at","nb_workouts","admin","disabled","router","userName","isAdmin","NotFound","useTranslation","Helmet","config","exact","path","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","onlyPasswords","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","handleRadioChange","changeEvent","with_gpx","checked","WorkoutAddOrEdit","CustomModal","close","text","confirm","WorkoutCardHeader","dataType","displayModal","segmentId","previousUrl","previous_workout","nextUrl","segments","next_workout","WorkoutCharts","displayDistance","dataToHide","loadWorkoutData","loadSegmentData","componentWillUnmount","handleLegendChange","find","splice","indexOf","displayData","updateCoordinates","xInterval","parseInt","xDataKey","xScale","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","setParams","loadMoreWorkouts","paginationEnd","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","handleDisplayMore","dayWorkouts","act","getStartAndEndMonth","weekStartOnMonday","monthStart","startOfMonth","monthEnd","endOfMonth","weekStartsOn","start","startOfWeek","end","endOfWeek","Calendar","calendarDate","currentMonth","startDate","endDate","loadMonthWorkouts","renderHeader","localeOptions","handlePrevMonth","handleNextMonth","renderDays","days","addDays","filterWorkouts","day","isSameDay","renderCells","rows","formattedDate","isSameMonth","isWeekEnd","isToday","updateStateDate","addMonths","subMonths","locale","enGB","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","startOfYear","x","xAxisFormat","dataNbWorkouts","dataDistance","dataDuration","total_distance","total_duration","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","Logout","UserLogout","_extends","arguments","source","prototype","hasOwnProperty","call","apply","_objectWithoutProperties","excluded","sourceKeys","_objectWithoutPropertiesLoose","getOwnPropertySymbols","sourceSymbolKeys","propertyIsEnumerable","_ref3","_ref4","_ref5","_ref6","_ref7","_ref8","_ref9","_ref10","_ref11","_ref12","_ref13","_ref14","SvgEn","_ref","svgRef","titleId","enableBackground","viewBox","xmlns","ref","ForwardRef","SvgFr","languages","selected","flag","Dropdown","isOpen","toggleDropdown","onUpdateLanguage","lang","NavBar","data-target","aria-controls","aria-expanded","LanguageDropdown","SvgPassword","xmlnsXlink","xmlSpace","SvgMailSend","PasswordReset","ProfileEdit","onDeleteUser","onHandleProfileFormSubmit","readOnly","postData","handleProfileFormSubmit","durations","updateDisplayedSports","handleOnChangeDuration","subYears","endOfYear","handleOnChangeSports","concat","handleOnClickArrows","forward","newStart","newEnd","subWeeks","addWeeks","sports_list","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","emptyData","handleDataAndError","initial","removeItem","routesWithoutAuthentication","updatePath","toPath","newPath","pathInterceptor","originalHistory","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.07bf0de8.chunk.js","sourcesContent":["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 { 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 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.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.filter(act =>\n isSameDay(getDateWithTZ(act.workout_date, user.timezone), day)\n )\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 {\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 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 { 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","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","function _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\nvar _ref2 = /*#__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});\n\nvar _ref3 = /*#__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});\n\nvar _ref4 = /*#__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});\n\nvar _ref5 = /*#__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});\n\nvar _ref6 = /*#__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});\n\nvar _ref7 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"m53.273 27.803 145.302 120.879v-120.879z\",\n fill: \"#406bd4\"\n});\n\nvar _ref8 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"m313.425 150.571v-122.768h148.082z\",\n fill: \"#3257b0\"\n});\n\nvar _ref9 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"m394.732 198.575 117.268-97.556v97.556z\",\n fill: \"#3257b0\"\n});\n\nvar _ref10 = /*#__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}));\n\nvar _ref11 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"m313.425 484.197v-124.139l149.221 124.139z\",\n fill: \"#3257b0\"\n});\n\nvar _ref12 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"m512 409.423-115.395-95.998h115.395z\",\n fill: \"#3257b0\"\n});\n\nvar _ref13 = /*#__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});\n\nvar _ref14 = /*#__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\nfunction SvgEn(_ref, svgRef) {\n let 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, _ref2, _ref3, _ref4, _ref5, _ref6, _ref7, _ref8, _ref9, _ref10, _ref11, _ref12, _ref13, _ref14);\n}\n\nconst ForwardRef = /*#__PURE__*/React.forwardRef(SvgEn);\nexport default __webpack_public_path__ + \"static/media/en.9e6dbfb0.svg\";\nexport { ForwardRef as ReactComponent };","function _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\nvar _ref2 = /*#__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});\n\nvar _ref3 = /*#__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});\n\nvar _ref4 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"m160.795 27.803h190.409v456.394h-190.409z\",\n fill: \"#f0f9ff\"\n});\n\nvar _ref5 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"m256 27.803h95.205v456.394h-95.205z\",\n fill: \"#cee5f5\"\n});\n\nfunction SvgFr(_ref, svgRef) {\n let 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, _ref2, _ref3, _ref4, _ref5);\n}\n\nconst ForwardRef = /*#__PURE__*/React.forwardRef(SvgFr);\nexport default __webpack_public_path__ + \"static/media/fr.d0f9280c.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\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","function _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\nvar _ref2 = /*#__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})));\n\nvar _ref3 = /*#__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})));\n\nvar _ref4 = /*#__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})));\n\nvar _ref5 = /*#__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})));\n\nvar _ref6 = /*#__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})));\n\nvar _ref7 = /*#__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})));\n\nvar _ref8 = /*#__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\nfunction SvgPassword(_ref, svgRef) {\n let 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, _ref2, _ref3, _ref4, _ref5, _ref6, _ref7, _ref8);\n}\n\nconst ForwardRef = /*#__PURE__*/React.forwardRef(SvgPassword);\nexport default __webpack_public_path__ + \"static/media/password.afe6a2a5.svg\";\nexport { ForwardRef as ReactComponent };","function _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\nvar _ref2 = /*#__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\nfunction SvgMailSend(_ref, svgRef) {\n let 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, _ref2);\n}\n\nconst 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","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","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","/* 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 0e73f848..3e79ff73 100644 --- a/fittrackee_client/package.json +++ b/fittrackee_client/package.json @@ -1,6 +1,6 @@ { "name": "fittrackee_client", - "version": "0.4.5", + "version": "0.4.6", "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 f578c4dc..45ff0324 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.5' // version stored in 'utils' for now +export const version = '0.4.6' // version stored in 'utils' for now export const apiUrl = process.env.NODE_ENV === 'production' ? '/api/' diff --git a/pyproject.toml b/pyproject.toml index 17e4eb45..e82fe301 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "fittrackee" -version = "0.4.5" +version = "0.4.6" description = "Self-hosted outdoor workout/activity tracker" authors = ["SamR1"] license = "GPL-3.0"