From d8acee0c82dee2cc8582714e2ec42e3d0c8d7cef Mon Sep 17 00:00:00 2001 From: Sam Date: Wed, 17 Feb 2021 17:29:51 +0100 Subject: [PATCH] bump version to 0.4.5 --- VERSION | 2 +- docs/.buildinfo | 2 +- docs/_images/fittrackee_screenshot-01.png | Bin 619218 -> 619608 bytes docs/_images/fittrackee_screenshot-02.png | Bin 400140 -> 400517 bytes docs/_images/fittrackee_screenshot-03.png | Bin 211167 -> 211558 bytes docs/_images/fittrackee_screenshot-04.png | Bin 63447 -> 63861 bytes docs/_images/fittrackee_screenshot-05.png | Bin 77860 -> 78250 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 619218 -> 619608 bytes .../_images/fittrackee_screenshot-02.png | Bin 400140 -> 400517 bytes .../_images/fittrackee_screenshot-03.png | Bin 211167 -> 211558 bytes .../_images/fittrackee_screenshot-04.png | Bin 63447 -> 63861 bytes .../_images/fittrackee_screenshot-05.png | Bin 77860 -> 78250 bytes fittrackee/dist/asset-manifest.json | 6 +++--- fittrackee/dist/index.html | 2 +- ...2642a3.chunk.js => main.8faa878d.chunk.js} | 4 ++-- ...hunk.js.map => main.8faa878d.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.9f2642a3.chunk.js => main.8faa878d.chunk.js} (99%) rename fittrackee/dist/static/js/{main.9f2642a3.chunk.js.map => main.8faa878d.chunk.js.map} (99%) diff --git a/VERSION b/VERSION index 6f2743d6..0bfccb08 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.4.4 +0.4.5 diff --git a/docs/.buildinfo b/docs/.buildinfo index 8fd2bc26..37a1d704 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: fd14930d8249b79d3fb1ebf8277e148b +config: 8e66c2e2aa1f094e011ce6ca8b73c8a3 tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/docs/_images/fittrackee_screenshot-01.png b/docs/_images/fittrackee_screenshot-01.png index 1d21c342b912727c6e76ec324595e86c2ec4e894..b2133d9bb473535ec35ea5fd7f00cf5c64ef0b19 100644 GIT binary patch delta 27635 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 delta 27394 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 diff --git a/docs/_images/fittrackee_screenshot-02.png b/docs/_images/fittrackee_screenshot-02.png index 4840f8ec6aa4e714eef16fccfb4b6d60d5765725..2789e853fc929d8b36b7a8c9f3a96482815a45c6 100644 GIT binary patch delta 18403 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�P88n9eiI4q~Mv1)AR+JoA{Y8O`IxX+@z z;ayzaHOf4gLDPsuSwt$b^D!%K3nC&~m9&N#Wk;kP215LytKGe>+w9s*^GB{LD*`~P zdVO85kFQF|!S9D&mDt!=ohFAINt8Z=#6{ZPwp`$%?%D47=-K1Kuf>tHY^Aif&{k^0 zs_A$NzsKi(matBK>29WPQQ*>_tSBU;u&C&6b%a#Qmt%`BpgPy<6hEfRwQ$S-3|Yu) zTZrH1F8#M+I+da#YD|xRGfDd;2{9n2xPq8u*obf8BTN})Sl2kuA^+m{Q#j|oL+9tu zC9c3pA&Xt5Nc<THO6(fdujLZ`IiuOH|%EXz;Wv*w<&L8N7BG_`fmtT#hd zM^Sp7?z=$K_#`ByDH8#SRQ6k)>Le|Q%6tNRCueoNi-e9nMYsT%gB0$Wfa8;_;@g39 z45{zS>db-yG1uEd+}#?XqwV!0{LSs{lK;b2jjs*v3ZE$`v*pxNefz`aQtv<0=EW8F z@MsOSdEC}iQ7NpiXJgo-NY+%V=v-q`jB6US`M9~!t-pjZ=AJNUo7zW@O~BYz{tob2S)$Nkic7=cB_Wk z+MFmXKzM0s$p-{#b30=$`b-ZAe(oP+AqG}-gS+x>FK?KVXQM+|`)yaX18j8!XMiDgM_4B6HM?W2`^u@l2&Z zr}GFk(|8 zPy6hnW?&LCIXoO1`G3#*MT)W?_WyU-fS41!jymPA|92PSUPUWjF;4dXJ4*{9fOSu+ zdx7}|00fA*0c8){fFi9z_G4aW?LI!f&&S(Cv(+_)1ID}kilU!kmS@TPjNVM*Wf~nh zc@Uwh?R$5}TBCaum9@CZUS8=YZAtdx?Db`Nb$4XgjweahYfY~~V+OcqUlS?SAs`+p z|HP-4p9{3|JnA?()l0^7YB#VqAi$#}l$8NxR2ALbdJAQW3rm`)%ImH6Ej}QI^Ubb@ z?4zr@yTu>ym>*Z}+BzDg?zSt(qY0FW#r53wZt8vSF0QV&cYlZlJn7iUMcX!9s-U2u z2{$aKvsd~3pPQ$+MMOkm@HtcA@a6p^8C#4_JZiR6tE;o2`1lF1366{U{rBA7@>u{5 zJR1?**0SRgPoSA^d1ON0S-C&cOSfAG_DMF8#4Dh+(-Uc7NOzz0Q72M%oa;ObwDzo< zDLcWi#4x02DtSMTy-7hR)G8i^VxueJI;r{`u^``hgna(7Lk#`*U{_WG3W6+H z7UCCabX{HE>s!{k-R&(XiE6mT(Gh5R0}rZEi)pzI8X8I+U7uWrfr&{?LnBpCNC=yV zh)Kr9o~*n{i-{v!M&g|;;LSawva0fn&EiyIe?C{0=E=%IpUuz}`jJp=eg4-jj|;oz z*P9y`WFlVa8l9F#2Tp>Rv~Qc~-!1TCkffhJoN8Oubu=nyODENhojZPSIRPDo15jr1 zq5==33(?*Y{E5!8ao_Q*TqmPfE|ZIjlyPJ_%A&Y@uW8=SK@!h*dHa7)_wF3^j|lVL zD+?1jdhUj#y}dhaR@eM}o_a{R&JFjmRS19NMy0j!@I0d$Z61n`k2Bl3C_TNr6%9g_ ze}jOqK?l3pyV8I8j``&lfZW^awCl+q@Y?RsX`PHhO*#)ws;FfqQr`-4&?d2G4 zQ{bKf=Gm9a>+OiKs&c$IW7~fAxrUyBfkm~-$WXqU+8}4&MrCkp~XsBGbZK8U83-}O< zA!1jl0d(4yf5#A}m0i3eM!2aH23UFx-xJAhoI7k7paU z`0l~BaK7GFRa~q!mFZm}cQk!E+hEZ*H1rLewgP#>xY4> zdKLN;x59>T^6wfA3H_ap|I{t>K*(@+{gdj?_aVNEHR87V%M~##o`>m#J||hE+-JuT z3o)=Mgcz79DM>Yil3QdlGRnbhcZX^hOrjRA9W z%KiQ1rwe6q-QC@0+*zRAFjA{O^~TTVZQE*KaKK0EJguz4TBfNk-FmoKx+fL@qsxDg z0Tu#IBN^+G`;B-VS8*Bnm~}6wwF>Sq%a&-GJ8Fq%#|}ZaEfc@jhM{L>mIE2rtrzQ? zW=_Ci+Uj(Hr_wfT*~esD4+I<&)&5;%q9&b64G9S$$>Ws{o9Ac|B$tsGKInA#N*mL2 zeM8fd1P&NW2l|w5RFs-Wl1d@>lgu;ay(1)WZ}it+LB#l8;+7#LXVhl_1+BET)9 zVs2iN%4AR+9gXCE0W4}O&&~0B9mfYe?!NdOWKCJT-P|gIWANgVcvz)G6b=I;&RN1Qk<(gR4p+fqxGRE-vnW`C$b;J@?UfIeGQ(>v-k|X8#!M;){V;H1(JDx)92Go)>KBuHl@V7c>yla>uTTcvnX(cE(>eQ^>#1#PUBi+ zF2J|6acOS*U^AXXS=0Y}F)koAE-lNVmrGeSuS2Gahh)}MWaYciRb5;_Vpvv^MIWaO z=N6Do#>&dmb2p7zx!}F>`)T~y=EujbAlaHmV#c~&cPO1!PhsL7;hVPP@F+5QiguZ!1q;70_3$U90$ zXNS$ne5Ua^3JTYy=h1Xd=V7LC=YFgJHs+>=twvoc)xpt`_0p+2!56Fei@p!YO{YO* zS>f!$kd}vYKXXH*rq#li|R zO}E>k$3KmK_{VV`DN9O!f4=nxLERB)uSOHDql$)tanf2u(OmiPgvZJ6g0vH`Ma(97 zqRvgi5V~_P8tyxE>s<>Ka+ND)<0$$np`gIZ=XDw2)85|gCbR$d-pCjPU@rN=Mi`o4 zt*>^fO9eDn&DH7aW;pfnH$cem2*SU^C?vIJQ`46jWv%z2yjy4!bh3E;e08wi;%eBb z;mAA6;{m2MP@>cjJE+uL%<_G&H%(K0KM!+|5D*eQ&+8{<uESt9pRHQ@Y7Oh})x8>^%v8f$zv&Qdn2i#%4Cx$+EDl{EYH=!atvbygDYC zXX`14O}}$<8~lIZJhZ5mbWuBKs;AlFmOO(QhuT4IZj^lU@7XyEtDebkmVhm)w5O+M%jeHZ2ItvD^z>t3;aTPD z*FYj-;-wy6)U0~v2gg2omf9Zh?3%OTVPRnvw|h9R^@+$Nnz7-jft61ZA)oPug{G}p z$EIO0)HJDB_+N*`$KJ*L#n`VGYo2o3;UQ zR==7APoP{qLdFNQs(b_T=*vIjce)DP*c4iS)ux1e1jLK<5;NZB|&;JHEfYPH(BQf_KDCzu3f!O2UQt2$7Qp z?Aj6w`?QW+?t2>6^k1J>8*bnHDoeCE?5QrV*7#-%yzMvax_G)e+`Vx>fRsl5q^{L7 zOR%E{tu=GX=aST(Vp+aa3xCYE@T)5osuQ9dcK|Cmr{{g!Hn$sGrTO_^4YpdvYbYs; zsAR_I#}bQYgkPGsoI^ulmRmI+wz8j!MBUw6prD|zaB<5Vd!Hox`}=K{DpO2MOb!kX zN?wCsX;SNV{#r#9t3 z11yIoH7OfRZBz>tBg2l3jVWWRFUdR5GH0%D5lTrFF)&mS3O<~?noPYq6rq6k+<`j) z@~)|@bhztOv^ZkqW+>e{nwjnyIn|4@Cv@W=P@ntJ2no@S^`DsXuEcWYvC4N;{;KFw zxgck^|2t-_&9lyAtyR5kqLWcXL{S9zcx?iKnh@`^f%J-1JB{^YD`HuNZq0M z2s}{>iA|) z0BQrJR2&_nfD|+=a_@2H-Q8U>I8;Ou;=L2&;FN+1NL#@9fx5`!wZma4;Q8*Hg;Hu^ zeOCL0`PDq^@V#CAve!#D$Cqr?!Z7uA15Pf)UE@JoF2sEK?$;Lr;=4gyR9#=w+?l6w z{v-C58CCO?iuab46M65$*Se4ML)U4U)kRmXlrc3CriR56dfWKLDos|JU+|L^ZeTwr>47*Vic>V6ZvczjS0t4e&(W_P^%l!zTuZ)xQS^EO9iSlHEaFf|7^< zYX$IacNzn!;-{Y8-+NvNv36?mAsoSuq3mK)np(S7)a4M>H;dr-=wC(S<+l?A$7*xU z64IX^1Pxaq^*|ykkXSlcQL)x)pY_vFEtIEE^SfETaJEa=hF(r`LPnX4;!OAPjI>qLyj%*^)ARD(x5~=e$_!jiI%$g}8CV%`{vFf16@T1npOTtd z3a0B|S+u1>--(ipOerNLW!WHKWlHQTIMO2^Rf~M*wgwVqWg|fc(X3zW*DN!+&pBo0 z_lBdAz?6O7BHdG2IRQ-R?R~a#cK7xQfy1dR-48A-6R?b1QQa*I_EiGk z{ex$-Q{Idz3;WfSQt%FejPDla%P7~$#o$a*T_Xbv<1eM9rK$a94zh-eLJr_%Asra^ zou)~_;y}CYtyM&y5hD>x#kaQzzsznRy*fJ>k!7NcTWR8PGk!XH(l7MW)9B2)xFlSN zJBtD!!|(C>uNUlqe@}J`7mHd83^Ww_`Hm*s+}xVslfjifmU3n-MymWkB zFtk4lZ*g+*Bgq_CkC`oKX0l&*{q|N@4dCDFYw6X(EBaRyCnvRv7zyY-#{Jpa+8Upk zX|p$!k@-)V@$>UD=gzWUE1?3X*x-4cw$sqo&gky$S?X}b-SiraK|n=ac`ts$)oTSO zk@8t?_C}TAIK3p5+!^i+m;XpfV{>?Yx54NN=C+A{_x@U~Teu>!KHt8WtN~+B+0(3Z z5&!&R2$uC7YPlH4NoDPy(VoFIMDy&?Ci`33TP%#@K^|MMjs1^jDo!kw9OC}-_kFN3 zgud0{e!|^cOK}D(L{)Du_a|+eT?gQ01@GSjNAgO4J>UOI)`UjTpxfBB=< zuV1e{yLYRiqC(A^H?JRx#Mcae3tzu}y-X&P;^NxN+1Xk9_wU!{Et|Dr!v-x}_?_0T zTPp_#hels-NSoGeWHOnwb@TuyAOHXc%1J~)RNGcXMMqor^YZdiczA?Xtyr$y++5}6 z=4$226^e|Aw7$>1d-iDWo;{MJ{{8!F?AUR-?Y7a@f08t0=uq|O(WBmf{_Y+gN=Zr4 znl-CcSXijsQ>V0i#c~A(1}Z2h=%VWXy%{Ss^~0Z(n^!Ee#iGMUb5vYXp`ZY7MYd_7 z*vKG#F)vX?CFLqCD%13D*Q-^qpV~zS%h}0Mfi1kWefQCtaHgnC%hsL$S%?Y?P)tOi zrhS{BoKr`lTlsTx7MOxb|~jmk#bKLYxbf|GS*p0 zX86D^TJY00B_GL_*=*6q9fx)IUuP-xSi=h=`S|)OJw06(i$xZHi$&XaY`>r$d~L$Q zbT}nNnORw?sHo7UO`B{&$c~*lDK+)5l9Q9I;n;Tzzti5mdzyTXo36P`(cuAldg^!j zdG#J0J8?=!kDt=oO^5XK)CDRpuTo@Kzy&`?C1n-L$|y3qMbN^wnw|IGm}h+(IqgCMH(pWo6p3b&JZ% z%9M5_O{-V0l7oYT{QdnE5)z{I>(;8Iq(s%#)!Mvyvlc9vuj=Z?hx{fbC28KgxysGW zmBnIFQBjfd^Yi89?fq|;-H_O*V0n7DXwKqIDlVx|@{w$R>tZmH8f}-2wTqS^e%iV3 zn9LT7%w~(`E!`%g!^QV9ywG;?d(JM7%E~QNQAxSn-JIp(?5N+8(rZ5d4j$Kv#Ql<_ z-29Sy`~QAXuWS2vRKm6t?c94z)h4rc>^Z9STatBk-}Zdd1_1miF!UP$@TV2mK2E7= zY0AmTk&}~uv)W(eJeF5neuavQij2e4IVsLM~@uQw(Z-rYv)cyghyz^h>=Q6 zOwi7qJ7hE(6&)R|`1n2z28kgdA&QKQ(&57?+P-7EdiLn4;loELF)=~gw{4T7qoZQl zwpD!Jt0YNoZf@s&y&*=UQIV06+P{Cldi`z~?w~<`gS4);$EU$yP((z8`qnAy=+T-` zuS3UiWut$}ftD9V0T*Iysc zTCE44pQEz!N(D6c(p|UpQK#6Nxe}j!V3&XUfCfS%Z4V>E>ZIizq#F z|26t})*9XQ^p}#P=jusN5?BE<)n4^`sfjVJylj-slUImSfynZ3JLVl)AtQgWSfTP z=Iqs@r+)o)nZEpThFo1;)vH%89ZpGU@3mk6m?&hXzuf0wQi3!@eWs90M^U{EUgA^QGGf(2x zR}ay;b?Y>1)>o3GfWSZvA2ITry{2t{KI`J*YVOOAKd7{{RIaYBij0g>_shEf+hsSz z)x}AZpBSMJXRgxik9?-Emi`)h!{vJU{iW7tsj+r>zIJi@@Sb|@(`6d}*yr+U=BjZw zUZI4oDfL3Xrn=B}@_PfXXs1^`SgJ`+&(wR9N9)mvgZ0JS^_snClRCw=)Km9P4AEQD zmg}W=f6&WM-cWDzx@Zl$T$s-~cZ@Fs`5aUlGGMZ2-WZf}y;k(n2)= z00000006L;!h(E;eggmi00000us@eC`~|-j{tq;v|K+bfN}2!w002ovPDHLkV1gqd BW*Yzi delta 18200 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 Hu0mjfFAyP) diff --git a/docs/_images/fittrackee_screenshot-03.png b/docs/_images/fittrackee_screenshot-03.png index 108425dd916f88250be510ccc6f53246e9002873..10f053c26df21170fd5d8552e84ca77d794e822b 100644 GIT binary patch delta 13040 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 N?-|~$xby7Qe*t!F!1DkA delta 11668 zcmb`McTf{w-0ngAi3LGKL8K{Fy0p+iL`9@22uKM??;wN@$)YHrD808RReCR>1x0!Z zy@x0z5ds7V5CQ~loVkDBJM+#vlbtiOIkP7@`z_D&Is3bG(*(LWep+0-z+GTNf${Mf z;*-@mjq98#ol?2}BLf6F;c&w}O-)U4=u-ku42pO0q zCYrl`gBVgMN~qd(21ojrK5H+{of$j~9ui=1g5x*V;wtTp^2qPJaW z>*yGiVSoHl?1x;l8wzHzAAvc$+*?~5yJ=rB^Sg-2-R2L~gk`&v%?q$>XqV3r1=NQ_ z8vO{-LEO@ud6A1#{`H3A+NP=HM%G1))Dq+HZQOMk%mVDyJI!`tB2e8Ajp?7CE&9IK zlcGld;hvR&f<&mVBTN|<0^SS3wG4DsDx}BOZtolw!+^zMA}PxlKr0?Ef(_VHu|0)3 z7Olg9Z+`CvUL6SiB>&1J=D;Pigsv^|ub4XJw@iWd9Wkv0u{9ri>mFei7NePOZy0Q@ zUurS2yCgpNmy7w?K|IT4W{c|U<=TOKrk$DMKIQWjtA#IFt$rqIr0FtT9&SJVf{JCy zwu@tva=IRjSmOKfAPQh-RXoNDpX0@S^=_HL&PI(ta8ZTXlo&=SRH1YabP)u;5*nABJ31)w%{djoV&WIthO$fE|K2C# z`sY)U>Z`@v?h(Trqo~o3=7UkMzS>@silzx;WR?n7Kw)w&>{TQTEvV zLSodm1?uSz!>Ye7a3!Me+N<~rMUPx<%i5+x{k=0ztkUzFE_w|LhAh>4ci{U}w^mVB zm$)ys=-m2v-$rVpWA+yLsQ}JAK$Gq`flKD1ss~d;Y^OSk?v0OEe1WM+!|Yi6t)X<8 z50jzZ#@<8P?ti2TRT@_Qv}cd2NL6;glvfr67gd$7CTYxKLBLcqY3n6-bVy|rZ++0V z5fdb<(0iBV=bXmnYyUA64O%JvYbgxug{-kCwJXDc?QTOXtJ*yE7EE?lniI z)Hv*J_XlYYSO6`odzYTFOX<@lWM3>Jze1@(uaeh4DmgMal@{op+#nmg` zpM~~3)e!ihxj*6hZn!9G{-Tmm;;gWu-)ANH#u2L?8%0K7Tk6}xqgze6zwwvO=?boJ z(#dhC-#yoV>xs#$U`F>E6HBA~ENDqjJqwA3%Exc4a$vEQ77foiOhg+6yU4OBn~t%bLFh z2H!wv@BFmR12$A_UKYN6)b#}CMPgyL;A^CV4l9K{!j$SZ(v3)G2z-Q8Ou$KZC69k~ z)6PGtm28LGu6OoqMc1!7%wb;rpj7?xLJ{0)1wK5tivt*ML^NJ>kxsAR|BOtlG)#WD zIkmRXGj*w3WZ%~>Sm~x;ma3zfE(^0Ie@GQI-exsf0Pr)7aS`HJCl{APKX|OK#!Hmf)in*cJJ;yVikkE@P0PqeI#)(ZL6KS9;FSVGuE+3jx6)0-xp(k{1Q1$EzJKY z^!Nr=0TC3-{6s{6Tb;@j()ra-ZVA{N&!^Z7mk1lfxa^dD$H^ zoc21b0U{e6x#d@a5K`0JRw&%RoIXMi2JMOuRQ$@B*f4!FnqAD~{y;kA(qqPkrmOV{ zpVWue?`ON^?%j&C|Gj>pB}^H+P@5-NGFkXO^WvYe(|1cq1*IpCn?$}z`VGg^szR#y zmmoi9>HuM=ybhvwsnA(IZ?Lm1yk4q{;eN6m@IZFJM@6}GWI zcmjVr!fSGm#h2d7Eixbeh?BW~>g6v{F5cI7cDdSs6`U~hbHhXb>px4bRBXq&yT&|Z zjGf4j2BY5L{zJR%D;Hd5W0=@_gf3T;cw}b0*aX@9^yDdX<4gW`BjZamiWhxuLL6;b zX==LfcFl@Bm!D*)9r)sM{r9=VBCinIXbu@O4gEJHtsDDSYw6#Mh=`h1UxhuFyY`nK zU3SCy!)4&Y_tYnOzppJ;OEIxqr#4vA$I#F9w%YCFS1j{6w@TczxO!3W808w}J!8_C z#5mBZ#dXWt+si%wt61i2`^^Ji3z1|S`a|zq;-m8nI(II2X`l(WQMQ$kT3&qSS9t-G z!C3r~*2O~7T9k@{y-llu>&P_dfxgY%;I|R-Wp@&R3-4&gKw>RD4=zo8{VVpEIr_D! zrDJzu1EyCvgVpW&Llt^?J_4wX-p%|;?C1~0`3V8J_~EY&d>17z-3)*{Gapyl7OIQk z5OgT}@_}3OQJ@HCtSnqsCUyAt3pCgpwM(0CaMa!K^QPRoR^GDW!P4cf0=rA?26PQt zG7Y+{xxn?m2QwG1u~>5SZGKj#eIvWjC6^_)y?5gNq{;Bh&H?Ph8-?Vyts6~G{J5T} zB3i;T|D%&;+3L{pkGCv<%7;E!-Oqej;u~R7pU!sJWf>QLb7!n4TsZqhfv}kR!vYdN z%gCd;t4W!*w;taJ%c4DZtxg58bZUM{p&7+ikryWlJnpVYe~AyNU}`OF&=)Y* z*{=!n7JWIwkaNec!+R>S{c{!WiiR{d*hPLTE)k3!8!IO5nfAVOAgZjl(--{iqV#!~ zr#^I3WK_=gDpVNZE74GWj&OPKG3@SjVVanuT!fH#oBnmfFgCDSuC{Xsb5vOJ?}l4* z)iI`gfb@HpxGNzb-~N35UH%e~akvk=3cmbxUc<8mzF9XWU&!ApZyg&(R%zC2{4LqU z6IZ{^q{wSGaJBh=^W|e{FbTiv!SCWUa$mEv5c5$u{KYM{3$o@|^-0m%4#79MnNztPRDr%{7*_vr+F&NZzWR;e(}4P2EuiP zKi>0}@w=IiU+jM{;u6B+!~Y?pp#l{3u8sKt2lIT~@66Hr-bYvBise5sGq6s7uvl5i z^&DgbTJ*xq#0paad-dd*zgck#d`JLb*>*3x3oDC7cDn$ zp8T*V2w>27UdSS}z^LO_`XY|@+|NHdmjA6gIGD_SUe=)$Ch7KHb^X5acKPFVJ%)++ zxL!rR%aFHA4Q*g&evb!V!|(qB@m;sa_Eal92tEfmTOzJ6+)V1H_q{C_eJ-n-=X(B) zyM|gF@7G?NyAuygwDaUp(kfS*+n%nzIk!}5&#Na;-8ey47Juz~P)J^R+}&p$m0v49 z%T-bWAJSKk%&wHBJt=}ms?s5uRKC$c^hWL^iFEwOF(Pef;g{E&_BU#j=K2F(3zU10 zEt`*pAYiYT@vZ8)VnZUHa$lpY;QZb}^~Hqx+(k2jW)vM-1l^=3Wl%G1&8|b|bfd}M zt7%Qw*rLEEFkxcR|Lawz%&%=xf8D!luBU5|MxL6V%t@DY#zw21&#JoI_R1tmm^Y#0 zlh(ET7~|P|+~wcHIXYTLbgcNY$%h1KOr+_`&?Tekn&LJRDtwrR7) z>cdC*`unxe>+ko50>eeymE^Gd0UWD@J@9FwmYt>U8-SeU49~WN=x%p#I$LGJwtTB<$ z6dEvaIy?S;q;*lFEi3j4=BS7$vp_-bIG?wEaUsWFb%vw-xFDCJnTK0m-kk_MX7YJ( zrm0&nXOX$<(=NalSN`9tdl%vL4+Vmn5`1zW-oU#t^@l6kp8R;W?wt6nyv6Eo<&?0} zn-sVjkCtBn0sb|yeJ%3RNpAKd+QVm;B=)RK0HxTrVS}flpJWfl9Kq){c|V8HzoOK@ zan|(1h0u~w&1r^LH{{r>$1Jwskpg z1s{JGa!Q0wAJ?Wr+P=xb-l*7iO7FR{p(_Ws%aaMUmYoYskgvifkTW_`YVPjzgc1u4 zKtub%MN{*+wx;GCs(y8Jad)7h3Cx1Vt3K^~e&d6IMFDU5JO69UgU_?YqCP3O-u(3Z z?!@JCrL@*PrVLqrVTqV`Za;p&yGp{NYbzKl-rYH*Tf$=V|MChfrrt3B75HaIZMX%u zy$B6MS~-@?N-=)VaLB*zeK!$&^Ihe(%`E`>SL2m!p_Y4z)#$+Rz~J#QMFNY~s~3h*sE<7i&3AVArX5l-3T&JQ#KEX|{UH{us1FZ0 z20R8oMLbh^%xV1c%PxgI_2#fe)}&9e9HGzpR=$^8V|$BC!Pqm>w^jZn_K;=*1m;qJKOdnWv#)KCUfc zIz7h^lDn^9XKO1fZX+jSD=sT%D=mRF2d~Fmm6nnMDJn?G zOW#+J1JydQY@Dyh{UeztXyH4(}yb%~be`n8*pM=0IeMqZsN0NP__%oE6Srf=hT zkI}f~spL6c6It8;bY!c$UfF7kxj5DufDES48;+z|{uca}Biub#YWCN!nnJT&!S0zC zE+)Uuy$idcVMAjR_V(Mb3c$el`A*jcK4|kJfrRhEcMYnN7D7;pNcOEr2#k$}hUOlp z4GVSnzhmP3VR+)=Vc7rhQn;3taFs(|ZjRyKBOk;o*d>k}#sJhM!kF4Zw#a&(O@EGB zDF^dsc{$S-(QLQ~jtW#83GF7dqjh|kEWa|FilxK`sUaz7FBz9Her3nZmaSGklg zG*4?-{R~KCSF(2wKKPsNzd0wM4RW7}gP-mdW(BXiu&V^V$qBR#Ei{0iw#SZEfLkoR zyOM$3c^@bgDyXt=&nosRj(=^w$Ut9VC%?`U9UM!7de23ttGF0SH2wbRi=Wy=LW7)@ zp2)9m(HA-{U4aa6W{XEUtQYDK!=9Mzu>u_&D+Uit zR2wDO&usq@Z%4lV@lF;50s-i9w?=o)Iw|cM$DxdgiHUr0i~kyRyAtwU*=#DStEB`8 zCQ0hdu`0W78r&DNh^RArL&F3i_${~=H!mpD`ZF;#w5 zSQK)1@QjHd-!L`p)o+S~YE4ae0KEk`?(DbFmO_4k^nfoYVW9tBh!7wu9dBQ>_&l%C7xWs*5OBDs2?eLkkRH$K&))k9AO_L+x8Sy~t zDG9M=En$H2__IfO+34k^b#^Ijdt+mw>{acw4Y6&2X?=e3$@wtVYaoF3@cCa%rL~&R zMs-W;W=;q!v2ih26n^-NoUZERZv|aV=I`rdQcp^?&PXw^dSe4Q$&#{r;_B);=66=1 zNZE@8RW4VwYzx1Ocz2LuC|NOnQ!n22+qOd@sR24fP5I`D0Jz>!10Vi zLXBl)=%%X(>!eEP1qB5i?GxZEG3s}3-n^+@(=(5$_g?Nk*>F-Haw&r6&{7(amw?cd zWwRE44}Gj?-;1XYd-nXpVXH~ za<$&X?-HEwQxPXCsVvevWW{2O#=Gd|I@Dt)uH@<-Mvu9J()HbCxO%dwH6Z%s%NKT~ zuUZv|jrYFuNa*^M#~|7IM#q=RSWZ zb~euW6CR8ursl+Xf=dF(CjpHWLz#`(28?dsFC5O%0}Kr&{Y?{I9&{e#6OZF?~NYgEw~(C+nuj z!MMAcJ~K9v@&Msq9a40HCoa-+rxn3rO7->iYhwivM^sMsRSrO$PwM#ywPaw_k_#m=@ZU{x`ma##9C^0y#!v? z^_Q8|`s`1_^{9aneSCHlfGTh#XDsY_!Sz#PHZzdw->s(^w&vx=9mV=nsA+_``ygOz zLgHq5#;M{$JrPD;H!fNkt2~jd#ZB6;XwYvQ93J({1KHo`f>*Aj=2TH;vZY1Un><2c zlyKB)6*E0{J06;WI&EE97$pOf6qMtic~R0WP?2stap&z2%iP@7fKJn3VipyOnT zvCFh4l2b0&H-eEpfxo!4bl`naPJd?fqAoQIgZKWXFUKfLOioU^I6L=#kw3lTl;!=z z3PxTn1Gj*Lh5IfEWyQ5ak3b%zwQ-sKE;b|6Mv$?w@xQ7YL+;fA3=Iuy=KX-@5Uk_? z$ty@KdeJIftxX9xn5fmz1PxgBF<4&8@H$Zu0#?3e0o@17dwT=ORD6Z1WMquOeQU}A zm*Q?5EM2Bj5W*^<uk=tz$mc*`>Tlk&AT%h){v zS^$pR`^CUD0!+IF=Od}?*}A4wYNrk#uP)nZVatr32xxn@ zxjkDnZx*2(`}QRoAam;dIAm;}qCz)`MRGjLG}}N?Z}ERLRpH+>BMMC`3+2oC7}XTC zxcw%q&;;~zMen6wdw&;IRfG2il|@alZ|Ogh6fe@y+>FCK4B+OY$_7rAhBrcNsM02XlEYZk7 zT@^ScAc1u}p4fs}Of{x1k)NnPY!k_qVkYC{cyid2Xdl~1_+C>Z4Q1R&41(Yq0td-N ztV8ebyTxYhV#&$LLoZ~smHgJTK7IN$A!dErKJS1XOfR-Zszt^q`BpY8w@VhPk6`KLog4(;~1UU~J{A6GiK~{!qw=~=&mjZ1<7LA|{ zZ*;l2+$Moq)pNXn%`EISA2bt>ZshtDVzb2*+l)MVloJ?i0wca2e|hn2w^Kde18+hm zlPZSA&tQ*BN-b~}m=<;AEY5|WTT^~`u+i>D9hqEInVqc++a`bJkP!m_Vs=PvU|&Cf zU#uq}UGFxviX~Xa4tjhH@MH9HpBcdkf8njF7lSVL~pkG$wPg0Sm5aaW^3q^ zu^*4KMQU;ic1WJB(9ale>C;z$I9xJt7+va0R}JwuQpuF!qbB-b4@yZHP9D4|EGjyb zz=f>?*EzqS)`~Qs+O7wC#rn{;`wK^^uz^7zhnFl@?5cxM0?Y)m(ZXwvV^6nR)!Tf;Hx+s6O{j~cHj*v~J93*ycVY>bM5 zo9otYg&ux;`O;+NlW4`@YAT>)Twc1{L8q5Go0f*={V6T96V8g|7%hPg0JIKuJ^!{nGC3G}x;grYJVI?kyjN{;Ws_mlfd6YUp{2~cY zhhs>()GV7V^)|FJNjc_*3FES1fu5(sMZ|hkPRjfiOi9Pp6*3#7jKk$Fzm8L2#rr}k|{#8E-{kvu<3* z_wNX&|1W0k1gi9Kv)D+_+27x14<6AV_g42{f3fHfe#>LjE7H$4G@X{duS%Xs48oT; z`Yd?&6adIm?SyHo%=j-H@{Yfv!eyLCzJ9*#=N!Dho{WIt96KYfhO|=JE?i|#AYWn4 z|MpGzPHTOjH^^%-iy8ne+${0wL*$KDX=+f=c9N?JkS9f2jf}#QqC+l1 zF}-iwlvazK0JXsL#oxa>t991sWrAjrZqsGvvp39f!`X?nbo7O8(-qXlj$+p0oaNPT z-`yQx2e}9S+uVeN1Yg3UYA56E6zcY;^9xg3U5dDc&q};j0aY$5gFh{f%%o+kmW~&h z7BQWi;HkQ3C_qoYh|xo)=`085r+WJRu35DY;9&(f9S?2QgZgQ7bIa6q`2YtbUD9u|hORYI3m!YD4Is%%P(KIV-)-75QE6O? zbpijRo??+KMXP`NN1LIEd4j-zD=9dOQ>iuJf@h2U$p|xjVQZOebOVLHGX%P|v`j=z z!+60;^*Y85rCG3_+pV>(V8EozvZV({iQE~N!S=pYJo&Bm?*;XKqhC234JRHZr4J3% zd4S_(^gZWtxaJ#&I$+@1znjUYv@{)X*=Yfq?Qd1Cll^7ple<@~N=?e8ZGT0bP4y^# zoj%YBqKfHM0Uhi9T9jJiK7LvrHIE1~GSUrnve=tN4xA2=*df4z_YhzWp5Ma;uO$eW zwK~6e_UzeMqZbA{Z(3oV%pbHx#$~AMA;|kvQ(HR++-QsLFsdqdII**+4IItooGCKE z4rV7(Zx!U`@_x~NR^tVU&<|bjW8eyY-t515glRv)S0Zz?c%b=Yyp9ASziT#M+o#{V zQ+kc8h}Z)Fbkd7X#=&^LW9%=xh40uoA z?fz#v0ZQY$1HjopYxSFB_AX#&)(Fy{7M_7@|DC}j$o0Z_T< z!C|m+fO}?mBzK&!rU=U6lo(OCN*Tu-S9s1UOB@YS4`~(QpAUP@L1}!!`4)>(xH*JfTsTuS;pfiQ&}Z7#jeWO z%nY>E)lB=f_q`sC+6_kajcro49T90%$~F8jj6P$o@Ii{jjWNx^mJ;b6zOGVqaIjPz0q(@5l8hc>(7>MHdGFf zHs|HptWS!um8GQtjE^@-ZrKD1JbL%2HACfW>|}vB5{+0Up>W4%Z$=r9@3_qN-wvqd zxgCHQ@^5uomYAOPjc_tEbJ;?Y2Zo$NwuZN+_JMZNtiOuKT&o`r*WNjsK~OslI6X)t zC>LQD)utBbn*DH1V>4BhvBL!ZJgwN_7g}Fn7{69!bZ13U5`SBBKrctMxqkGvJhh2% zG`rgHyu($a4<4T}EV0z z<8mjjp1yYX1LPSJIS@yS_E~NO)RU)-%WJ5(#uB>e!E;E`Th{OCgip~=(RM7p5mutv z=*(P#zAze>rC-#bze;ugU_)d(Y(Dd#aKAkSG`Guz{T{koECeB;1L_a0P*!a|b89?$ zjh^UT?9UJB@_)1I?+E=EMNLhW&S9*@OVMRfCK= z_7EzL%U2I3_xJbvZY?0lsEXX_h%cG{YEQ%-Aw>tJtaKKHcKBxyA(BG|m7ZL+er}p6 zo-He~+5lC{^%V|TjMs)lzI>VFG4DUGIk+3(4yc^{NhyEMG}A<*K#S>qUaEGsLU@4tUAz4%SDr|i{^e)RFg z^pZrk4+Z<;Homj9lX*BO|t!f_)isZUb(|bMrY{ zU6W1Q^-mP#h9N2z2y&Wi-t587&y$XGx>vWlA1AzQ5b;uUG%X`{s3X;T6=t)O>+!n> zHFH!K&Fli66w#IrSzH9H$1tTKJz}sB;{hq8y>YNV{&%Vz4Ug+jL7G-AV~25$UG{P7 zq0ivKPQ-(Pb3eN@>q3`)eVlFfbBnmjkwZ0%tp{^}ThIZ*Nyec+X#s-rlJ@>- zBrGnDUfygO!*!_ro0oau&)R%ceWJOKNdZ_|u_i#DZ;lUa0P$lH3 zw9=7!32IaQa6T1vIUxS#MrWS!_x1}yW`*cyXx-{v58|6B#A za7*f6@`tG%JN*sYLXfHavBi_>kIPX8fT~nmh;P3}cyNBMaZvN7b#`&3nENM1H#~9s zJ(}kV-Le0_ZsjvxDda#_c9Q`{Kb`ap#ja-0HSeic={#ZBNd(_0yIoSlb8N2k=2i;gZ*oYJ`d74VZMn}>DbgMJqjAg5 zU`jXD`lFXnbAEb|36sXsew)tYl_F$LnkRV9X{2G_lzQtldu}!IZ2ysCTeYm5=+sJ1 zq}3pvm;yNNeLDtu5vaJW_FKE!KblVsdKuuyiOSBe!=#jyLTbrdo2_*c)DIM)rX#h3 zTI_DrqOe;ng#HxqkoNOIRNjCf4lCE#c73AaYsbyG`r`6(J-_1vV6QpA;co{wRY^!A zn+WL><@0HZS5oAFL%jsmm;u!<(R9Ipe}5gjSK+s6DXNJ^5Z|&HnjHN=*)B|b?^@kV zUM)7O7Id5Tc$ztNv$*UYYCwifj&c%0DOUlJ>-qaW&G{*dpDi*;DHHRh{5S&W2vPuI6_3&;%E6gI zL|l>o{(6>Azpz=;YmI*>$0`FPPC4F3%~IiGU!su1TpgQ{iAjn^_yvc-v}J#G?vR6x zbgGTRev!vIu16a|CgQbL%W8**sc=zx{{x$$l~vB&aC)b~9U*>g^G46M`T2l?vNAEc z3kCLW*ZQbil6uTy)a+j|Y|O@$8n2m&4L&)Nb6V*>3+7FQt~yZxeR6o@ zUcVpUXGIkFZry&ea8%+X@(Q~i&+UCv>l0^~?{Okxea<40Km5pVK%KIRpt9h06ux<{HLn)dSs1!% z5nw+sMeR3efwQB1;<(-Xtc7*k(L^YzD0T$`P^|yS0F;%ApbSpJr9JC(sW$c*C4$QT zS^%UZ9xq?$)X0c9xKiZs01ifpD;@Rb?e_99;ifFSw5hoANi27^Ja*XQ^lP!IqVL4F ze;AZNI0N72;DBuZ;2Xzv&}B+$5zs9G`YJp5{|aEx-l*1CpYn6poEvSSGzb;>BN@67Ase2d&Z9PHi;inXd zgRu@{E80P)2wV*YHmMl2(X{t>R2H>dT$JR%M83iHOB&rnRcF{31vVenf;*?K{|K4WWhO@e2G( zel<7Vw193poG{Z`#lTM9NSyVf4BM=YC6oziy1}q5{rERtn|Otw%IY4@B;e==9pY$i z-Upz_OAenk?iF+;k>=B{g1`U92Y)VR{y#_H|2N@( e{reO3)Z&llts&;y|9;p-?Z^6$DjvRm_kRG|iF5k^ diff --git a/docs/_images/fittrackee_screenshot-05.png b/docs/_images/fittrackee_screenshot-05.png index 56499b16ac48b75e249c29c59b757cefdf0bfec9..5503dee9e848c33b7deabf420b15f998ec085f86 100644 GIT binary patch delta 11903 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

_g_0MmTP|$@@$- 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 delta 11678 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 BlJo!o diff --git a/docs/_static/documentation_options.js b/docs/_static/documentation_options.js index 315e067b..ae5a7870 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.4', + VERSION: '0.4.5', LANGUAGE: 'None', COLLAPSE_INDEX: false, BUILDER: 'html', diff --git a/docs/api/auth.html b/docs/api/auth.html index a965126a..52106629 100644 --- a/docs/api/auth.html +++ b/docs/api/auth.html @@ -4,7 +4,7 @@ - Authentication — FitTrackee 0.4.4 + <title>Authentication — FitTrackee 0.4.5 documentation @@ -39,7 +39,7 @@ FitTrackee - 0.4.4 + 0.4.5 diff --git a/docs/api/configuration.html b/docs/api/configuration.html index 22d7358a..15c12d56 100644 --- a/docs/api/configuration.html +++ b/docs/api/configuration.html @@ -4,7 +4,7 @@ - Configuration — FitTrackee 0.4.4 + <title>Configuration — FitTrackee 0.4.5 documentation @@ -39,7 +39,7 @@ FitTrackee - 0.4.4 + 0.4.5 diff --git a/docs/api/index.html b/docs/api/index.html index f3c72b9a..798bc648 100644 --- a/docs/api/index.html +++ b/docs/api/index.html @@ -4,7 +4,7 @@ - API documentation — FitTrackee 0.4.4 + <title>API documentation — FitTrackee 0.4.5 documentation @@ -39,7 +39,7 @@ FitTrackee - 0.4.4 + 0.4.5 diff --git a/docs/api/records.html b/docs/api/records.html index 82bdf4e2..047bfcc8 100644 --- a/docs/api/records.html +++ b/docs/api/records.html @@ -4,7 +4,7 @@ - Records — FitTrackee 0.4.4 + <title>Records — FitTrackee 0.4.5 documentation @@ -39,7 +39,7 @@ FitTrackee - 0.4.4 + 0.4.5 diff --git a/docs/api/sports.html b/docs/api/sports.html index e1ee373a..57c9094a 100644 --- a/docs/api/sports.html +++ b/docs/api/sports.html @@ -4,7 +4,7 @@ - Sports — FitTrackee 0.4.4 + <title>Sports — FitTrackee 0.4.5 documentation @@ -39,7 +39,7 @@ FitTrackee - 0.4.4 + 0.4.5 diff --git a/docs/api/stats.html b/docs/api/stats.html index 5ab9a3ec..dfdce2b2 100644 --- a/docs/api/stats.html +++ b/docs/api/stats.html @@ -4,7 +4,7 @@ - Statistics — FitTrackee 0.4.4 + <title>Statistics — FitTrackee 0.4.5 documentation @@ -39,7 +39,7 @@ FitTrackee - 0.4.4 + 0.4.5 diff --git a/docs/api/users.html b/docs/api/users.html index e83a233f..965894bb 100644 --- a/docs/api/users.html +++ b/docs/api/users.html @@ -4,7 +4,7 @@ - Users — FitTrackee 0.4.4 + <title>Users — FitTrackee 0.4.5 documentation @@ -39,7 +39,7 @@ FitTrackee - 0.4.4 + 0.4.5 diff --git a/docs/api/workouts.html b/docs/api/workouts.html index 8532337f..0cca735d 100644 --- a/docs/api/workouts.html +++ b/docs/api/workouts.html @@ -4,7 +4,7 @@ - Workouts — FitTrackee 0.4.4 + <title>Workouts — FitTrackee 0.4.5 documentation @@ -39,7 +39,7 @@ FitTrackee - 0.4.4 + 0.4.5 diff --git a/docs/changelog.html b/docs/changelog.html index f8122203..3f9e494b 100644 --- a/docs/changelog.html +++ b/docs/changelog.html @@ -4,7 +4,7 @@ - Change log — FitTrackee 0.4.4 + <title>Change log — FitTrackee 0.4.5 documentation @@ -38,7 +38,7 @@ FitTrackee - 0.4.4 + 0.4.5 diff --git a/docs/features.html b/docs/features.html index a5969885..a58850ff 100644 --- a/docs/features.html +++ b/docs/features.html @@ -4,7 +4,7 @@ - Features — FitTrackee 0.4.4 + <title>Features — FitTrackee 0.4.5 documentation @@ -39,7 +39,7 @@ FitTrackee - 0.4.4 + 0.4.5 diff --git a/docs/genindex.html b/docs/genindex.html index 99f66e7a..9ef66e1d 100644 --- a/docs/genindex.html +++ b/docs/genindex.html @@ -4,7 +4,7 @@ - Index — FitTrackee 0.4.4 + <title>Index — FitTrackee 0.4.5 documentation @@ -37,7 +37,7 @@ FitTrackee - 0.4.4 + 0.4.5 diff --git a/docs/http-routingtable.html b/docs/http-routingtable.html index ccd0a129..8e27ded2 100644 --- a/docs/http-routingtable.html +++ b/docs/http-routingtable.html @@ -4,7 +4,7 @@ - HTTP Routing Table — FitTrackee 0.4.4 + <title>HTTP Routing Table — FitTrackee 0.4.5 documentation @@ -44,7 +44,7 @@ FitTrackee - 0.4.4 + 0.4.5 diff --git a/docs/index.html b/docs/index.html index baf4291d..46f2afbd 100644 --- a/docs/index.html +++ b/docs/index.html @@ -4,7 +4,7 @@ - FitTrackee — FitTrackee 0.4.4 + <title>FitTrackee — FitTrackee 0.4.5 documentation @@ -38,7 +38,7 @@ FitTrackee - 0.4.4 + 0.4.5 diff --git a/docs/installation.html b/docs/installation.html index f2280933..2f2e1f99 100644 --- a/docs/installation.html +++ b/docs/installation.html @@ -4,7 +4,7 @@ - Installation — FitTrackee 0.4.4 + <title>Installation — FitTrackee 0.4.5 documentation @@ -39,7 +39,7 @@ FitTrackee - 0.4.4 + 0.4.5 diff --git a/docs/objects.inv b/docs/objects.inv index 926a2c1726e06c8a41ddbeffb6471b995ddf3e33..5be80c059632ed6042052d877f78bb27325daf3c 100644 GIT binary patch delta 12 Tcmeyv`G<3Y6Qk)y=bbD7BFF^9 delta 12 Tcmeyv`G<3Y6QjvS=bbD7BEtm3 diff --git a/docs/search.html b/docs/search.html index 51c67cf7..73f5e50d 100644 --- a/docs/search.html +++ b/docs/search.html @@ -4,7 +4,7 @@ - Search — FitTrackee 0.4.4 + <title>Search — FitTrackee 0.4.5 documentation @@ -43,7 +43,7 @@ FitTrackee - 0.4.4 + 0.4.5 diff --git a/docs/troubleshooting/administrator.html b/docs/troubleshooting/administrator.html index 91ecd4a4..32fd334a 100644 --- a/docs/troubleshooting/administrator.html +++ b/docs/troubleshooting/administrator.html @@ -4,7 +4,7 @@ - Administrator — FitTrackee 0.4.4 + <title>Administrator — FitTrackee 0.4.5 documentation @@ -39,7 +39,7 @@ FitTrackee - 0.4.4 + 0.4.5 diff --git a/docs/troubleshooting/index.html b/docs/troubleshooting/index.html index feba6cc0..162426a3 100644 --- a/docs/troubleshooting/index.html +++ b/docs/troubleshooting/index.html @@ -4,7 +4,7 @@ - Troubleshooting — FitTrackee 0.4.4 + <title>Troubleshooting — FitTrackee 0.4.5 documentation @@ -39,7 +39,7 @@ FitTrackee - 0.4.4 + 0.4.5 diff --git a/docs/troubleshooting/user.html b/docs/troubleshooting/user.html index aab62a8e..485af3fa 100644 --- a/docs/troubleshooting/user.html +++ b/docs/troubleshooting/user.html @@ -4,7 +4,7 @@ - User — FitTrackee 0.4.4 + <title>User — FitTrackee 0.4.5 documentation @@ -39,7 +39,7 @@ FitTrackee - 0.4.4 + 0.4.5 diff --git a/docsrc/source/_images/fittrackee_screenshot-01.png b/docsrc/source/_images/fittrackee_screenshot-01.png index 1d21c342b912727c6e76ec324595e86c2ec4e894..b2133d9bb473535ec35ea5fd7f00cf5c64ef0b19 100644 GIT binary patch delta 27635 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 delta 27394 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 diff --git a/docsrc/source/_images/fittrackee_screenshot-02.png b/docsrc/source/_images/fittrackee_screenshot-02.png index 4840f8ec6aa4e714eef16fccfb4b6d60d5765725..2789e853fc929d8b36b7a8c9f3a96482815a45c6 100644 GIT binary patch delta 18403 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�P88n9eiI4q~Mv1)AR+JoA{Y8O`IxX+@z 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 BW*Yzi delta 18200 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 Hu0mjfFAyP) diff --git a/docsrc/source/_images/fittrackee_screenshot-03.png b/docsrc/source/_images/fittrackee_screenshot-03.png index 108425dd916f88250be510ccc6f53246e9002873..10f053c26df21170fd5d8552e84ca77d794e822b 100644 GIT binary patch delta 13040 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 N?-|~$xby7Qe*t!F!1DkA delta 11668 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 diff --git a/docsrc/source/_images/fittrackee_screenshot-05.png b/docsrc/source/_images/fittrackee_screenshot-05.png index 56499b16ac48b75e249c29c59b757cefdf0bfec9..5503dee9e848c33b7deabf420b15f998ec085f86 100644 GIT binary patch delta 11903 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

_g_0MmTP|$@@$- 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 delta 11678 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 BlJo!o diff --git a/fittrackee/dist/asset-manifest.json b/fittrackee/dist/asset-manifest.json index 4bb63904..d051a23b 100644 --- a/fittrackee/dist/asset-manifest.json +++ b/fittrackee/dist/asset-manifest.json @@ -1,8 +1,8 @@ { "files": { "main.css": "/static/css/main.376b8924.chunk.css", - "main.js": "/static/js/main.9f2642a3.chunk.js", - "main.js.map": "/static/js/main.9f2642a3.chunk.js.map", + "main.js": "/static/js/main.8faa878d.chunk.js", + "main.js.map": "/static/js/main.8faa878d.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.376b8924.chunk.css", - "static/js/main.9f2642a3.chunk.js" + "static/js/main.8faa878d.chunk.js" ] } \ No newline at end of file diff --git a/fittrackee/dist/index.html b/fittrackee/dist/index.html index 3f415eef..da8f40cb 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.9f2642a3.chunk.js b/fittrackee/dist/static/js/main.8faa878d.chunk.js similarity index 99% rename from fittrackee/dist/static/js/main.9f2642a3.chunk.js rename to fittrackee/dist/static/js/main.8faa878d.chunk.js index 00b8cf66..d234f103 100644 --- a/fittrackee/dist/static/js/main.9f2642a3.chunk.js +++ b/fittrackee/dist/static/js/main.8faa878d.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.","workouts":"workouts","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.","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.","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.","workouts":"s\xe9ances","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.","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.","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 Ma})),s.d(t,"rootNode",(function(){return Pa})),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&&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=>{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."))))},P=(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),R=(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 L{static getData(e,t={}){const s=R(e,t);return T({url:s,method:"GET",type:"application/json"})}static addData(e,t){return T({url:e,method:"POST",body:t,type:"application/json"})}static addDataWithFile(e,t){return T({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 T(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 T(s)}static deleteData(e,t){const s={url:"".concat(e,"/").concat(t),method:"DELETE",type:"application/json"};return T(s)}}const U=(e,t)=>({type:"SET_DATA",data:t,target:e}),I=e=>({type:"SET_ERROR",message:e}),W=e=>({type:"SET_LOADING",loading:e}),H=(e,t,s,a=!0)=>r=>(r(W(!0)),s&&s.id&&"workouts"!==t&&isNaN(s.id)?(r(W(!1)),r(I("".concat(t,"|Incorrect id")))):(r(I("")),L[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(U(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(I("".concat(t,"|").concat(s.message||s.status)));r(W(!1))})).catch((e=>{r(W(!1)),r(I("".concat(t,"|").concat(e)))})))),q=e=>t=>{j.a.changeLanguage(e).then(t((e=>({type:"SET_LANGUAGE",language:e}))(e)))},B=e=>({type:"SET_APP_CONFIG",data:e}),V=e=>t=>L.getData(e).then((s=>{"success"===s.status?"config"===e?t(B(s.data)):"stats/all"===e&&t({type:"SET_APP_STATS",data:s.data}):t(I("application|".concat(s.message)))})).catch((e=>t(I("application|".concat(e)))));class G extends c.a.Component{constructor(e,t){super(e,t),this.state={formData:{},isInEdition:!1}}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)}toggleInEdition(e){e.preventDefault();const t=this.state.isInEdition;this.setState({isInEdition:!t})}render(){const e=this.props,t=e.message,s=e.onHandleConfigFormSubmit,r=e.t,o=this.state,c=o.formData,n=o.isInEdition;return Object(a.jsxs)("div",{children:[t&&Object(a.jsx)(v,{message:t,t:r}),Object.keys(c).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:r("administration:Application configuration")})}),Object(a.jsx)("div",{className:"card-body",children:Object(a.jsxs)("form",{className:"app-config-form ".concat(n?"":"form-disabled"),onSubmit:e=>{this.toggleInEdition(e),s(c)},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:[r("administration:Max. number of active users"),Object(a.jsx)("sup",{children:Object(a.jsx)("i",{className:"fa fa-question-circle","aria-hidden":"true",title:r("administration:if 0, no limitation")})}),":"]}),Object(a.jsx)("input",{className:"col-sm-5",id:"max_users",name:"max_users",type:"number",min:"0",value:c.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:[r("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:c.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:[r("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:c.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:r("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:c.gpx_limit_import,onChange:e=>this.handleFormChange(e)})]}),n?Object(a.jsxs)(a.Fragment,{children:[Object(a.jsx)("input",{type:"submit",className:"btn btn-primary",value:r("common:Submit")}),Object(a.jsx)("input",{type:"submit",className:"btn btn-secondary",onClick:e=>this.toggleInEdition(e),value:r("common:Cancel")})]}):Object(a.jsxs)(a.Fragment,{children:[Object(a.jsx)("input",{type:"submit",className:"btn btn-primary",onClick:e=>{this.toggleInEdition(e)},value:r("common:Edit")}),Object(a.jsx)("input",{type:"submit",className:"btn btn-secondary",onClick:()=>Ma.push("/admin"),value:r("common:Back")})]})]})})]})})})]})}}var J=Object(O.c)((e=>({message:e.message})),(e=>({onHandleConfigFormSubmit:t=>{const s=Object.assign({},t);s.max_single_file_size*=1048576,s.max_zip_file_size*=1048576,e((e=>t=>L.updateData("config",e).then((e=>{"success"===e.status?t(B(e.data)):t(I("application|".concat(e.message)))})).catch((e=>t(I("application|".concat(e))))))(s))}})))(G),K=s(15);class Y 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 X=Object(w.a)()(Object(O.c)((e=>({appStats:e.application.statistics})),(e=>({loadAppStats:()=>{e(V("stats/all"))}})))(Y));function $(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)(X,{}),Object(a.jsx)("br",{}),Object(a.jsxs)("dl",{className:"admin-items",children:[Object(a.jsx)("dt",{children:Object(a.jsx)(K.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)(K.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)(K.a,{to:{pathname:"/admin/users"},children:s("administration:Users")})}),Object(a.jsx)("dd",{children:s("administration:Add/remove admin rights, delete user account.")})]})]})]})}class Z 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:()=>Ma.push("/admin/"),value:r("common:Back")})]})]})})})]})}}var Q=Object(O.c)((e=>({message:e.message,sports:e.sports.data,user:e.user})),(e=>({loadSports:()=>{e(H("getData","sports"))},updateSport:(t,s)=>{e(H("updateData","sports",{id:t,is_active:s},!1))}})))(Z);class ee 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,R(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)(K.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)(K.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)(K.a,{className:"page-link",to:this.getUrl("next"),"aria-disabled":!t.has_next,children:s("common:Next")})})]})})});var r}}class te 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=R(this.props.location.pathname,s);Ma.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=z(o,E),d=z(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)(K.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)(ee,{pagination:c,pathname:s.pathname,query:this.state,t:o}),Object(a.jsx)("input",{type:"submit",className:"btn btn-secondary",onClick:()=>Ma.push("/admin/"),value:o("common:Back")})]})]})})})})]})}}var se=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(H("getData","users",t))},updateUser:(t,s)=>{e(H("updateData","users",{username:t,admin:s},!1))}})))(te),ae=s(223);function re(){const e=Object(ae.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 oe=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)($,{appConfig:t,t:s})}),Object(a.jsx)(g.b,{exact:!0,path:"/admin/application",render:()=>Object(a.jsx)(J,{appConfig:t,t:s})}),Object(a.jsx)(g.b,{exact:!0,path:"/admin/sports",render:()=>Object(a.jsx)(Q,{t:s})}),Object(a.jsx)(g.b,{exact:!0,path:"/admin/users",render:()=>Object(a.jsx)(se,{t:s})}),Object(a.jsx)(g.b,{component:re})]}):Object(a.jsx)(re,{})})]})}))),ce=s(892),ne=s(24),ie=s(911),le=s(226),de=s.n(le);const ue=["#55a8a3","#98C3A9","#D0838A","#ECC77E","#926692","#929292","#428bca"],me=[{record_type:"AS",label:"Ave. speed"},{record_type:"FD",label:"Farest distance"},{record_type:"LD",label:"Longest duration"},{record_type:"MS",label:"Max. speed"}],je=(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}),pe=e=>{let t=new Date(0);return t=Object(ie.a)(t.setSeconds(e),1),t.getTime()},he=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(be);class Oe{static loginOrRegisterOrPasswordReset(e,t){const s={url:"auth/".concat(e),method:"POST",noAuthorization:!0,body:t,type:"application/json"};return T(s)}static deletePicture(){return T({url:"auth/picture",method:"DELETE"})}}const ge=e=>({type:"PICTURE_ERROR",message:e}),fe=e=>({type:"PROFILE_UPDATE_ERROR",message:e}),we=()=>e=>window.localStorage.getItem("authToken")?e(ve()):{type:"LOGOUT"},ve=()=>e=>L.getData("auth/profile").then((t=>"success"===t.status?(e(H("getData","sports")),t.data.isAuthenticated=!0,t.data.language&&e(q(t.data.language)),e({type:"PROFILE_SUCCESS",profil:t.data})):e({type:"PROFILE_ERROR",message:t.message}))).catch((e=>{throw e})),ke=(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:(e=>{let t=0;return e.map((e=>{const s={id:t,value:e};return t++,s}))})(a)})}return s(((e,t)=>s=>Oe.loginOrRegisterOrPasswordReset(e,t).then((t=>{if("success"===t.status){if("password/reset-request"===e)return Ma.push({pathname:"/password-reset/sent"});if("password/update"===e)return Ma.push({pathname:"/updated-password"});if("login"===e||"register"===e)return window.localStorage.setItem("authToken",t.auth_token),"register"===e&&s(V("config")),s(ve())}return s({type:"AUTH_ERROR",message:t.message})})).catch((e=>{throw e})))(t,e))},ye=(e,t=!1)=>s=>L.deleteData("users",e).then((e=>{204===e.status?(s(V("config")),t?Ma.push("/admin/users"):(s({type:"LOGOUT"}),Ma.push("/"))):e.json().then((e=>s(I("".concat(e.message)))))})).catch((e=>s(I("user|".concat(e))))),Ne=e=>({type:"SET_GPX",gpxContent:e}),_e=e=>({type:"SET_CHART_DATA",chartData:e}),Se=e=>t=>L.updateData("workouts",e).then((e=>{"success"===e.status?(t(we()),Ma.push("/workouts/".concat(e.data.workouts[0].id))):t(I("workouts|".concat(e.message))),t(W(!1))})).catch((e=>{t(W(!1)),t(I("workouts|".concat(e)))})),De=e=>t=>L.getData("workouts",e).then((e=>{"success"===e.status?e.data.workouts.length>0&&t({type:"PUSH_WORKOUTS",workouts:e.data.workouts}):t(I("workouts|".concat(e.message)))})).catch((e=>t(I("workouts|".concat(e)))));var Ce=Object(O.c)((e=>({appConfig:e.application.config,loading:e.loading})),(e=>({onAddWorkout:t=>{e(W(!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=>L.addDataWithFile("workouts",e).then((e=>{"created"===e.status?0===e.data.workouts.length?t(I("workouts|no correct file.")):1===e.data.workouts.length?(t(we()),Ma.push("/workouts/".concat(e.data.workouts[0].id))):(t(we()),Ma.push("/")):413===e.status?t(I("workouts|File size is greater than the allowed size")):t(I("workouts|".concat(e.message))),t(W(!1))})).catch((e=>{t(W(!1)),t(I("workouts|".concat(e)))})))(s))},onEditWorkout:(t,s)=>{e(Se({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=xe(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)(ce.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)(ce.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:()=>Ma.push("/"),value:n("common:Cancel")})]})]})}));var Ee=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(Se(o))):e((c=o,e=>L.addData("workouts/no_gpx",c).then((t=>{"created"===t.status?(e(we()),Ma.push("/workouts/".concat(t.data.workouts[0].id))):e(I("workouts|".concat(t.message)))})).catch((t=>e(I("workouts|".concat(t)))))))}})))((function(e){const t=e.onAddOrEdit,s=e.sports,r=e.t,o=e.user,c=e.workout,n=xe(s,r,!0);let i,l,d="";if(c){const e=je(P(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:()=>Ma.push("/"),value:r("common:Cancel")})]})}));class Ae 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)(Ce,{workout:c,sports:r,t:o}):Object(a.jsx)(Ee,{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)(Ce,{sports:r,t:o}):Object(a.jsx)(Ee,{sports:r,t:o})]})})]})}),Object(a.jsx)("div",{className:"col-md-2"})]})})]})}}var Me=Object(w.a)()(Object(O.c)((e=>({loading:e.loading})))(Ae));var Te=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)(Me,{workout:null,message:t,sports:s})})}));function Pe(e){const t=Object(ae.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?je(P(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)(K.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)(K.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 ze=s(25);class Re 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)(ze.f,{height:300,children:Object(a.jsxs)(ze.d,{data:t,margin:{top:15,right:30,left:20,bottom:15},onMouseMove:e=>r(e.activePayload),onMouseLeave:()=>r(null),children:[Object(a.jsx)(ze.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)(ze.i,{label:{value:"".concat(s("workouts:speed")," (km/h)"),angle:-90,position:"left"},yAxisId:"left"}),Object(a.jsx)(ze.i,{label:{value:"".concat(s("workouts:elevation")," (m)"),angle:-90,position:"right"},yAxisId:"right",orientation:"right"}),this.displayData("elevation")&&Object(a.jsx)(ze.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)(ze.e,{yAxisId:"left",type:"linear",dataKey:"speed",name:s("workouts:speed"),stroke:"#8884d8",strokeWidth:2,dot:!1,unit:" km/h"}),Object(a.jsx)(ze.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 Le=Object(O.c)((e=>({chartData:e.chartData})),(e=>({loadWorkoutData:t=>{e((e=>t=>{if(e)return L.getData("workouts/".concat(e,"/chart_data")).then((e=>{"success"===e.status?t(_e(he(e.data.chart_data))):t(I("workouts|".concat(e.message)))})).catch((e=>t(I("workouts|".concat(e)))));t(_e(null))})(t))},loadSegmentData:(t,s)=>{e(((e,t)=>s=>{if(e)return L.getData("workouts/".concat(e,"/chart_data/segment/").concat(t)).then((e=>{"success"===e.status?s(_e(he(e.data.chart_data))):s(I("workouts|".concat(e.message)))})).catch((e=>s(I("workouts|".concat(e)))));s(_e(null))})(t,s))}})))(Re);function Ue(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 Ie(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)(Ue,{workout:s,t:t})]})}var We=s(896),He=s(893),qe=s(912),Be=s(894),Ve=s(895),Ge=s(237),Je=s.n(Ge);function Ke({bounds:e,coordinates:t,jsonData:s,mapAttribution:r}){return Object(He.a)().fitBounds(e),Object(a.jsxs)(a.Fragment,{children:[Object(a.jsx)(qe.a,{attribution:r,url:"".concat(C,"workouts/map_tile/{s}/{z}/{x}/{y}.png")}),Object(a.jsx)(Be.a,{data:s},Je()(s)),t.latitude&&Object(a.jsx)(Ve.a,{position:[t.latitude,t.longitude]})]})}class Ye 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=de.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)(We.a,{zoom:this.state.zoom,bounds:n,boundsOptions:{padding:[10,10]},children:Object(a.jsx)(Ke,{bounds:n,coordinates:t,jsonData:c,mapAttribution:r})})})}}var Xe=Object(O.c)((e=>({gpxContent:e.gpx,mapAttribution:e.application.config.map_attribution})),(e=>({loadWorkoutGpx:t=>{e((e=>t=>{if(e)return L.getData("workouts/".concat(e,"/gpx")).then((e=>{"success"===e.status?t(Ne(e.data.gpx)):t(I("workouts|".concat(e.message)))})).catch((e=>t(I("workouts|".concat(e)))));t(Ne(null))})(t))},loadSegmentGpx:(t,s)=>{e(((e,t)=>s=>{if(e)return L.getData("workouts/".concat(e,"/gpx/segment/").concat(t)).then((e=>{"success"===e.status?s(Ne(e.data.gpx)):s(I("workouts|".concat(e.message)))})).catch((e=>s(I("workouts|".concat(e)))));s(Ne(null))})(t,s))}})))(Ye);function $e(e){const t=e.t;return Object(a.jsx)("div",{className:"workout-no-map text-center",children:t("workouts:No Map")})}function Ze(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 Qe(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)(K.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 et 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(ne.a)(n,1)[0],m=u?u.title:o("workouts:Workout"),j=u?r.filter((e=>e.id===u.sport_id)):[],p=Object(ne.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)(Pe,{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)(Xe,{workout:u,coordinates:l,dataType:b,segmentId:h}):Object(a.jsx)($e,{t:o})}),Object(a.jsx)("div",{className:"col",children:Object(a.jsx)(Ie,{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)(Le,{workout:u,dataType:b,segmentId:h,t:o,updateCoordinates:e=>this.updateCoordinates(e)})]})})})})})}),"workout"===b&&Object(a.jsxs)(a.Fragment,{children:[Object(a.jsx)(Ze,{notes:u.notes,t:o}),u.segments.length>1&&Object(a.jsx)(Qe,{segments:u.segments,t:o})]})]})]})]})}}var tt=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(H("getData","workouts",{id:t}))},onDeleteWorkout:t=>{var s;e((s=t,e=>L.deleteData("workouts",s).then((t=>{var a;204===t.status?Promise.resolve(e((a=s,{type:"REMOVE_WORKOUT",workoutId:a}))).then((()=>e(we()))).then((()=>Ma.push("/"))):e(I("workouts|".concat(t.status)))})).catch((t=>e(I("workouts|".concat(t)))))))}})))(et));class st 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(ne.a)(r,1)[0];return Object(a.jsx)("div",{children:s.length>0&&Object(a.jsx)(Me,{workout:o,message:t,sports:s})})}}var at=Object(O.c)((e=>({workouts:e.workouts.data,message:e.message,sports:e.sports.data,user:e.user})),(e=>({loadWorkout:t=>{e(H("getData","workouts",{id:t}))}})))(st);var rt=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:Te}),Object(a.jsx)(g.b,{exact:!0,path:"/workouts/:workoutId",component:tt}),Object(a.jsx)(g.b,{exact:!0,path:"/workouts/:workoutId/edit",component:at}),Object(a.jsx)(g.b,{path:"/workouts/:workoutId/segment/:segmentId",component:tt}),Object(a.jsx)(g.b,{component:re})]}):Object(a.jsx)(g.a,{to:"/login"})})}));class ot 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)(K.a,{to:{pathname:"/workouts/add"},children:e("dashboard:Upload one !")})]})})}}class ct extends c.a.PureComponent{render(){const e=this.props,t=e.loadWorkouts,s=e.sports,r=e.t,o=e.updateParams,c=xe(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 nt 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 it 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)(K.a,{to:"/workouts/".concat(e.id),children:e.title}),e.map&&Object(a.jsx)(nt,{workout:e,display:"list"})]}),Object(a.jsxs)("td",{children:[Object(a.jsx)("span",{className:"heading-span-absolute",children:r("workouts:Date")}),Object(y.a)(P(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 lt 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)(ct,{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)(it,{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)(ot,{t:n})]})]})})]})}}var dt=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(H("getData","workouts",t))},loadMoreWorkouts:t=>{e(De(t))}})))(lt));var ut=Object(w.a)()(Object(O.c)((e=>({appConfig:e.application.config,pathname:e.router.location.pathname,message:e.message})),(e=>({onDeletePicture:()=>{e((e=>Oe.deletePicture().then((t=>204===t.status?e(ve()):e(ge(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(),L.addDataWithFile("auth/picture",s).then((e=>{if("success"===e.status)return t(ve());const s=413===e.status?"Error during picture update, file size exceeds max size.":e.message;return t(ge(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:()=>Ma.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?Ma.push("/"):Ma.go(-1),children:l("/profile"===i?"common:Back to home":"common:Back")})]})]})})})]})]})})));var mt=Object(w.a)()(Object(O.c)((e=>({user:e.user})))((function({t:e,user:t}){return Object(a.jsx)("div",{children:Object(a.jsx)(ut,{editable:!0,t:e,user:t})})}))),jt=s(897),pt=s(898),ht=s(899),bt=s(900),xt=s(238),Ot=s(242),gt=s(901),ft=s(902),wt=s(107),vt=s(903),kt=s(144);function yt(e){const t=e.isDisabled,s=e.isMore,r=e.sportImg,o=e.workout;return Object(a.jsx)(K.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(me.filter((t=>t.record_type===e.record_type))[0].label)))})})]})})}class Nt 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)(yt,{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)(yt,{workout:e,isDisabled:s,isMore:"-more",sportImg:r.filter((t=>t.id===e.sport_id)).map((e=>e.img))},e.id)))})]})}}const _t=(e,t)=>{const s=Object(jt.a)(e),a=Object(pt.a)(e),r=t?1:0;return{start:Object(ht.a)(s,{weekStartsOn:r}),end:Object(bt.a)(a)}};class St extends c.a.Component{constructor(e,t){super(e,t);const s=new Date;this.state={currentMonth:s,startDate:_t(s,e.weekm).start,endDate:_t(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(xt.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(Ot.a)(P(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(gt.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(ft.a)(l)?" today":""),children:Object(a.jsxs)("div",{className:"img".concat(r),children:[Object(a.jsx)("span",{className:"number",children:d}),Object(a.jsx)(Nt,{dayWorkouts:s,isDisabled:r,sports:c})]})},l)),l=Object(xt.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=_t(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(wt.a)(this.state.currentMonth,1);this.updateStateDate(e)}handlePrevMonth(){const e=Object(vt.a)(this.state.currentMonth,1);this.updateStateDate(e)}render(){const e={locale:"fr"===this.props.language?kt.fr:kt.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 Dt=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=>L.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(I("workouts|".concat(t.message)))})).catch((t=>e(I("workouts|".concat(t)))))))}})))(St);function Ct(e){const t=e.records,s=e.sports,r=e.t,o=e.user,c=xe(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=me.filter((t=>t.record_type===e.record_type)),r=Object(ne.a)(a,1)[0];return{workout_date:je(P(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)(K.a,{to:"/workouts/".concat(e.workout_id),children:e.workout_date})})]},e.id)))})]})]},e)))})]})}var Et=s(239),At=s(904);const Mt=[{duration:"week",dateFormat:"yyyy-MM-dd",xAxis:"dd/MM"},{duration:"month",dateFormat:"yyyy-MM",xAxis:"MM/yyyy"},{duration:"year",dateFormat:"yyyy",xAxis:"yyyy"}],Tt=(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)},Pt=(e,t)=>0===t?"":"distance"===e?"".concat(t.toFixed(2)," km"):"duration"===e?Tt(t):t,Ft=(e,t)=>{switch(e){case"week":return Object(xt.a)(t,7);case"year":return Object(Et.a)(t,1);case"month":default:return Object(wt.a)(t,1)}},zt=(e,t,s,a,r)=>{const o=[],c=[],n=[];for(let i=((e,t,s)=>{switch(e){case"week":return Object(ht.a)(t,{weekStartsOn:s?1:0});case"year":return Object(At.a)(t);case"month":default:return Object(jt.a)(t)}})(s.duration,s.start,r);i<=s.end;i=Ft(s.duration,i)){const r=Mt.filter((e=>e.duration===s.duration)),l=Object(ne.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}},Rt=(e,t)=>"duration"===e?Tt(t,!0):"distance"===e?t.toFixed(2):t;function Lt(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,": ",Rt(t,e.value)," ",e.unit]},e.name))),s.length>0&&Object(a.jsxs)("p",{children:["Total: ",Rt(t,o)]})]})}return null}function Ut(e){const t=e.displayedData,s=e.x,r=e.y,o=e.width,c=e.value;if(!c)return null;const n=Pt(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 It 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)(ze.f,{height:300,children:Object(a.jsxs)(ze.c,{data:r[e],margin:{top:15,bottom:0},children:[Object(a.jsx)(ze.h,{dataKey:"date",interval:0}),Object(a.jsx)(ze.i,{tickFormatter:t=>Pt(e,t)}),Object(a.jsx)(ze.g,{content:Object(a.jsx)(Lt,{displayedData:e})}),s.map(((t,r)=>Object(a.jsx)(ze.b,{isAnimationActive:!1,dataKey:t.label,stackId:"a",fill:ue[r],label:r===s.length-1?Object(a.jsx)(Ut,{displayedData:e}):"",name:o("sports:".concat(t.label))},t.id)))]})})]})}}class Wt 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=zt(r,s,o,t,i.weekm);return Object(a.jsx)(It,{sports:s,stats:l,t:n})}}var Ht=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=>L.getData("stats/".concat(e,"/").concat(t),s).then((e=>{"success"===e.status?a(U("statistics",e.data)):a(I("statistics|".concat(e.message)))})).catch((e=>a(I("statistics|".concat(e))))))(t,a.type,c))}})))(Wt);class qt extends c.a.Component{constructor(e,t){super(e,t);const s=new Date;this.state={start:Object(jt.a)(s),end:Object(pt.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)(Ht,{displayEmpty:!1,statsParams:this.state,t:e})})]})}}function Bt(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)(K.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)(P(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)(nt,{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 Gt 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)(Bt,{user:n,t:c}),Object(a.jsxs)("div",{className:"row",children:[Object(a.jsxs)("div",{className:"col-md-4",children:[Object(a.jsx)(qt,{t:c}),Object(a.jsx)(Ct,{t:c,records:r,sports:o,user:n})]}),Object(a.jsxs)("div",{className:"col-md-8",children:[Object(a.jsx)(Dt,{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)(ot,{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 Jt=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(H("getData","workouts",{page:1})),e(H("getData","records"))},loadMoreWorkouts:t=>{e(De({page:t}))}})))(Gt));function Kt(){return Object(a.jsx)("footer",{className:"footer",children:Object(a.jsxs)("div",{className:"container",children:[Object(a.jsx)("strong",{children:"FitTrackee"})," v","0.4.4"," -"," ",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 Yt 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)(ce.a,{i18nKey:"user:loggedOut",children:["You are now logged out. Click ",Object(a.jsx)(K.a,{to:"/login",children:"here"})," to log back in."]})})})}),Object(a.jsx)("div",{className:"col-2"})]})})}}var Xt=Object(O.c)((e=>({user:e.user})),(e=>({UserLogout:()=>{e({type:"LOGOUT"})}})))(Yt);function $t(){return($t=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 Qt=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"}),es=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"}),ts=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"}),ss=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"}),as=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"}),rs=o.createElement("path",{d:"m53.273 27.803 145.302 120.879v-120.879z",fill:"#406bd4"}),os=o.createElement("path",{d:"m313.425 150.571v-122.768h148.082z",fill:"#3257b0"}),cs=o.createElement("path",{d:"m394.732 198.575 117.268-97.556v97.556z",fill:"#3257b0"}),ns=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"})),is=o.createElement("path",{d:"m313.425 484.197v-124.139l149.221 124.139z",fill:"#3257b0"}),ls=o.createElement("path",{d:"m512 409.423-115.395-95.998h115.395z",fill:"#3257b0"}),ds=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"}),us=o.createElement("path",{d:"m289.858 222.142v-194.339h-33.858v456.394h33.858v-194.339h222.142v-67.716z",fill:"#c20044"});function ms(e,t){let s=e.title,a=e.titleId,r=Zt(e,["title","titleId"]);return o.createElement("svg",$t({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,Qt,es,ts,ss,as,rs,os,cs,ns,is,ls,ds,us)}const js=o.forwardRef(ms);s.p;function ps(){return(ps=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 bs=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"}),xs=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"}),Os=o.createElement("path",{d:"m160.795 27.803h190.409v456.394h-190.409z",fill:"#f0f9ff"}),gs=o.createElement("path",{d:"m256 27.803h95.205v456.394h-95.205z",fill:"#cee5f5"});function fs(e,t){let s=e.title,a=e.titleId,r=hs(e,["title","titleId"]);return o.createElement("svg",ps({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,bs,xs,Os,gs)}const ws=o.forwardRef(fs);s.p;const vs=[{name:"en",selected:!0,flag:Object(a.jsx)(js,{})},{name:"fr",selected:!1,flag:Object(a.jsx)(ws,{})}];class ks 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:vs.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 ys=Object(O.c)((e=>({language:e.language})),(e=>({onUpdateLanguage:(t,s)=>{t!==s&&e(q(t))}})))(ks);class Ns 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)(K.a,{className:"nav-link",to:{pathname:"/"},children:o("common:Dashboard")})}),s&&Object(a.jsx)("li",{className:"nav-item",children:Object(a.jsx)(K.a,{className:"nav-link",to:{pathname:"/workouts/history"},children:o("Workouts")})}),s&&Object(a.jsx)("li",{className:"nav-item",children:Object(a.jsx)(K.a,{className:"nav-link",to:{pathname:"/workouts/statistics"},children:o("common:Statistics")})}),t&&Object(a.jsx)("li",{className:"nav-item",children:Object(a.jsx)(K.a,{className:"nav-link",to:{pathname:"/admin"},children:"Admin"})}),s&&Object(a.jsx)("li",{className:"nav-item",children:Object(a.jsx)(K.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)(K.a,{className:"nav-link",to:{pathname:"/register"},children:o("user:Register")})}),!s&&Object(a.jsx)("li",{className:"nav-item",children:Object(a.jsx)(K.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)(K.a,{className:"nav-link",to:{pathname:"/profile"},children:c})}),Object(a.jsx)("li",{className:"nav-item",children:Object(a.jsx)(K.a,{className:"nav-link",to:{pathname:"/logout"},children:o("user:Logout")})})]}),Object(a.jsx)("li",{children:Object(a.jsx)(ys,{})})]})]})]})})})}}var _s=Object(w.a)()(Object(O.c)((({user:e})=>({admin:e.admin,isAuthenticated:e.isAuthenticated,picture:e.picture,username:e.username})))(Ns));function Ss(){return(Ss=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 Cs=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"}))),Es=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"}))),As=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"}))),Ms=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"}))),Ts=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"}))),Ps=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 zs(e,t){let s=e.title,a=e.titleId,r=Ds(e,["title","titleId"]);return o.createElement("svg",Ss({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,Cs,Es,As,Ms,Ts,Ps,Fs)}const Rs=o.forwardRef(zs);s.p;function Ls(){return(Ls=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 Is=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 Ws(e,t){let s=e.title,a=e.titleId,r=Us(e,["title","titleId"]);return o.createElement("svg",Ls({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,Is)}const Hs=o.forwardRef(Ws);s.p;function qs(e){const t=Object(ae.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)(Hs,{})}),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)(Rs,{})}),Object(a.jsxs)(ce.a,{i18nKey:"user:updatedPasswordText",children:["Your password have been updated. Click",Object(a.jsx)(K.a,{to:"/login",children:"here"})," to log in."]})]})]})})}),Object(a.jsx)("div",{className:"col-2"})]})})}var Bs=s(240),Vs=s.n(Bs);class Gs 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)(Pe,{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:vs.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:()=>Ma.push("/profile"),children:o("common:Cancel")})]}),Object(a.jsx)(v,{message:t,t:o})]})})})]})}),Object(a.jsx)("div",{className:"col-md-2"})]})]})]})}}var Js=Object(w.a)()(Object(O.c)((e=>({location:e.router.location,message:e.message,user:e.user})),(e=>({onDeleteUser:t=>{e(ye(t))},onHandleProfileFormSubmit:t=>{e((e=>t=>!e.password===e.password_conf?t(fe("Password and password confirmation don't match.")):(delete e.id,L.postData("auth/profile/edit",e).then((e=>{if("success"===e.status)return t(ve()),Ma.push("/profile");t(fe(e.message))})).catch((e=>{throw e}))))(t))}})))(Gs)),Ks=s(905),Ys=s(906),Xs=s(907),$s=s(241);const Zs=["week","month","year"];class Qs 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(jt.a)(Object(vt.a)(s,11)),end:Object(pt.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(At.a)(Object(Ks.a)(s,9)):"week"===t?Object(jt.a)(Object(vt.a)(s,2)):Object(jt.a)(Object(vt.a)(s,11)),r="year"===t?Object(Ys.a)(s):"week"===t?Object(bt.a)(s):Object(pt.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(At.a)(Object(Ks.a)(s,1)):"week"===r?Object(ht.a)(Object(Xs.a)(s,1)):Object(jt.a)(Object(vt.a)(s,1)),c="year"===r?Object(Ys.a)(Object(Ks.a)(a,1)):"week"===r?Object(bt.a)(Object(Xs.a)(a,1)):Object(pt.a)(Object(vt.a)(a,1))):(o="year"===r?Object(At.a)(Object(Et.a)(s,1)):"week"===r?Object(ht.a)(Object($s.a)(s,1)):Object(jt.a)(Object(wt.a)(s,1)),c="year"===r?Object(Ys.a)(Object(Et.a)(a,1)):"week"===r?Object(bt.a)(Object($s.a)(a,1)):Object(pt.a)(Object(wt.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=xe(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:Zs.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)(Ht,{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:ue[e.id-1]},children:" ".concat(e.label)})]},e.id)))})]})]}),0===n.nb_workouts&&Object(a.jsx)(ot,{t:c})]})]})}}var ea=Object(w.a)()(Object(O.c)((e=>({sports:e.sports.data,user:e.user})))(Qs));function ta(e){const t=Object(ae.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)(K.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:()=>Ma.go(-1),children:"Back"})})]})]}),Object(a.jsx)("div",{className:"col-md-3"})]})})]})}class sa 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)(ta,{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 aa=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(ke(t,s="password reset"===s?"password/update":"reset your password"===s?"password/reset-request":s))}})))(sa));class ra 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(ne.a)(o,1)[0],i=!!n&&s.username===n.username;return Object(a.jsxs)("div",{children:[c&&Object(a.jsx)(Pe,{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)(ut,{editable:i,isDeletable:s.admin&&!i,onDeleteUser:r,displayModal:e=>this.displayModal(e),t:t,user:n})]})}}var oa=Object(w.a)()(Object(O.c)((e=>({currentUser:e.user,users:e.users.data})),(e=>({onDeleteUser:t=>{e(ye(t,!0))},loadUser:t=>{e(H("getData","users",{username:t}))}})))(ra));class ca 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)(_s,{}),Object(a.jsxs)(g.d,{children:[Object(a.jsx)(g.b,{exact:!0,path:"/",component:Jt}),Object(a.jsx)(g.b,{exact:!0,path:"/register",render:()=>Object(a.jsx)(aa,{formType:"register"})}),Object(a.jsx)(g.b,{exact:!0,path:"/login",render:()=>Object(a.jsx)(aa,{formType:"login"})}),Object(a.jsx)(g.b,{exact:!0,path:"/password-reset",render:()=>Object(a.jsx)(aa,{formType:"password reset"})}),Object(a.jsx)(g.b,{exact:!0,path:"/password-reset/request",render:()=>Object(a.jsx)(aa,{formType:"reset your password"})}),Object(a.jsx)(g.b,{exact:!0,path:"/password-reset/sent",render:()=>Object(a.jsx)(qs,{action:"sent"})}),Object(a.jsx)(g.b,{exact:!0,path:"/updated-password",render:()=>Object(a.jsx)(qs,{action:"updated"})}),Object(a.jsx)(g.b,{exact:!0,path:"/password-reset/sent",component:qs}),Object(a.jsx)(g.b,{exact:!0,path:"/logout",component:Xt}),Object(a.jsx)(g.b,{exact:!0,path:"/profile/edit",component:Js}),Object(a.jsx)(g.b,{exact:!0,path:"/profile",component:mt}),Object(a.jsx)(g.b,{exact:!0,path:"/workouts/history",component:dt}),Object(a.jsx)(g.b,{exact:!0,path:"/workouts/statistics",component:ea}),Object(a.jsx)(g.b,{exact:!0,path:"/users/:userName",component:oa}),Object(a.jsx)(g.b,{path:"/workouts",component:rt}),Object(a.jsx)(g.b,{path:"/admin",component:oe}),Object(a.jsx)(g.b,{component:re})]}),Object(a.jsx)(Kt,{})]})}}var na=Object(O.c)((()=>({})),(e=>({loadAppConfig:()=>{e(V("config"))}})))(ca),ia=s(80);function la({store:e,history:t,children:s}){return Object(a.jsx)(O.a,{store:e,children:Object(a.jsx)(ia.a,{history:t,children:s})})}const da=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 ua(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 ma={data:[]};var ja={language:"en",message:"",messages:[],user:{isAuthenticated:!1},workouts:Object(k.a)({},ma),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)({},ma),chartData:[],gpx:null,loading:!1,records:Object(k.a)({},ma),sports:Object(k.a)({},ma),statistics:{data:{}},users:Object(k.a)({},ma)};const pa=(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,ha=(e=ja.workouts,t)=>{switch(t.type){case"LOGOUT":return ja.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 pa(e,"workouts",t)}},ba=(e=ja.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,xa=(e=ja.calendarWorkouts,t)=>{switch(t.type){case"LOGOUT":return ja.calendarWorkouts;case"UPDATE_CALENDAR":return Object(k.a)(Object(k.a)({},e),{},{data:t.workouts});default:return pa(e,"calendarWorkouts",t)}},Oa=(e=ja.chartData,t)=>"SET_CHART_DATA"===t.type?t.chartData:e,ga=(e=ja.gpx,t)=>"SET_GPX"===t.type?t.gpxContent:e,fa=(e=ja.language,t)=>"SET_LANGUAGE"===t.type?t.language:e,wa=(e=ja.loading,t)=>"SET_LOADING"===t.type?t.loading:e,va=(e=ja.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"LOGOUT":case"PROFILE_SUCCESS":case"SET_RESULTS":case"@@router/LOCATION_CHANGE":return"";default:return e}},ka=(e=ja.messages,t)=>{switch(t.type){case"AUTH_ERRORS":return t.messages;case"LOGOUT":case"PROFILE_SUCCESS":case"@@router/LOCATION_CHANGE":return[];default:return e}},ya=(e=ja.records,t)=>"LOGOUT"===t.type?ja.records:pa(e,"records",t),Na=(e=ja.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)))}):pa(e,"sports",t),_a=(e=ja.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)))}):pa(e,"users",t),Sa=(e=ja.user,t)=>{switch(t.type){case"AUTH_ERROR":case"PROFILE_ERROR":case"LOGOUT":return window.localStorage.removeItem("authToken"),ja.user;case"PROFILE_SUCCESS":return t.profil;default:return e}},Da=(e=ja.statistics,t)=>"LOGOUT"===t.type?ja.statistics:pa(e,"statistics",t);const Ca=["/login","/register","/password-reset","/password-reset/request","/password-reset/sent","/updated-password"],Ea=(e,t)=>("string"===typeof e||e instanceof String?e=t:e.pathname=t,e),Aa=e=>(window.localStorage.authToken||Ca.includes(e.pathname)||(e=Ea(e,"/login")),window.localStorage.authToken&&Ca.includes(e.pathname)&&(e=Ea(e,"/")),e),Ma=((Ta=Object(r.a)()).location=Aa(Ta.location),Object(k.a)(Object(k.a)({},Ta),{},{push:(e,...t)=>Ta.push(Aa(e),...t),replace:(e,...t)=>Ta.replace(Aa(e),...t)}));var Ta;Ma.listen((()=>{window.scrollTo(0,0)}));const Pa=document.getElementById("root"),Fa=Object(u.e)((za=Ma,Object(u.c)({workouts:ha,application:ba,calendarWorkouts:xa,chartData:Oa,gpx:ga,language:fa,loading:wa,message:va,messages:ka,records:ya,router:Object(ia.b)(za),sports:Na,statistics:Da,user:Sa,users:_a})),window.__STATE__,(window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__||u.d)(Object(u.a)(Object(d.a)(Ma),m.a)));var za;null!==window.localStorage.authToken&&Fa.dispatch(we()),l.a.render(Object(a.jsx)(la,{store:Fa,history:Ma,children:Object(a.jsx)(n.a,{i18n:x,children:Object(a.jsx)(na,{})})}),Pa),function(){if("serviceWorker"in navigator){if(new URL("",window.location).origin!==window.location.origin)return;window.addEventListener("load",(()=>{const e="".concat("","/service-worker.js");da?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()}))})):ua(e)})).catch((()=>{console.log("No internet connection found. App is running in offline mode.")}))}(e):ua(e)}))}}()}},[[889,1,2]]]); -//# sourceMappingURL=main.9f2642a3.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.","workouts":"workouts","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.","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.","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.","workouts":"s\xe9ances","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.","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.","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 Ma})),s.d(t,"rootNode",(function(){return Pa})),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&&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=>{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."))))},P=(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),R=(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 L{static getData(e,t={}){const s=R(e,t);return T({url:s,method:"GET",type:"application/json"})}static addData(e,t){return T({url:e,method:"POST",body:t,type:"application/json"})}static addDataWithFile(e,t){return T({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 T(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 T(s)}static deleteData(e,t){const s={url:"".concat(e,"/").concat(t),method:"DELETE",type:"application/json"};return T(s)}}const U=(e,t)=>({type:"SET_DATA",data:t,target:e}),I=e=>({type:"SET_ERROR",message:e}),W=e=>({type:"SET_LOADING",loading:e}),H=(e,t,s,a=!0)=>r=>(r(W(!0)),s&&s.id&&"workouts"!==t&&isNaN(s.id)?(r(W(!1)),r(I("".concat(t,"|Incorrect id")))):(r(I("")),L[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(U(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(I("".concat(t,"|").concat(s.message||s.status)));r(W(!1))})).catch((e=>{r(W(!1)),r(I("".concat(t,"|").concat(e)))})))),q=e=>t=>{j.a.changeLanguage(e).then(t((e=>({type:"SET_LANGUAGE",language:e}))(e)))},B=e=>({type:"SET_APP_CONFIG",data:e}),V=e=>t=>L.getData(e).then((s=>{"success"===s.status?"config"===e?t(B(s.data)):"stats/all"===e&&t({type:"SET_APP_STATS",data:s.data}):t(I("application|".concat(s.message)))})).catch((e=>t(I("application|".concat(e)))));class G extends c.a.Component{constructor(e,t){super(e,t),this.state={formData:{},isInEdition:!1}}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)}toggleInEdition(e){e.preventDefault();const t=this.state.isInEdition;this.setState({isInEdition:!t})}render(){const e=this.props,t=e.message,s=e.onHandleConfigFormSubmit,r=e.t,o=this.state,c=o.formData,n=o.isInEdition;return Object(a.jsxs)("div",{children:[t&&Object(a.jsx)(v,{message:t,t:r}),Object.keys(c).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:r("administration:Application configuration")})}),Object(a.jsx)("div",{className:"card-body",children:Object(a.jsxs)("form",{className:"app-config-form ".concat(n?"":"form-disabled"),onSubmit:e=>{this.toggleInEdition(e),s(c)},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:[r("administration:Max. number of active users"),Object(a.jsx)("sup",{children:Object(a.jsx)("i",{className:"fa fa-question-circle","aria-hidden":"true",title:r("administration:if 0, no limitation")})}),":"]}),Object(a.jsx)("input",{className:"col-sm-5",id:"max_users",name:"max_users",type:"number",min:"0",value:c.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:[r("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:c.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:[r("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:c.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:r("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:c.gpx_limit_import,onChange:e=>this.handleFormChange(e)})]}),n?Object(a.jsxs)(a.Fragment,{children:[Object(a.jsx)("input",{type:"submit",className:"btn btn-primary",value:r("common:Submit")}),Object(a.jsx)("input",{type:"submit",className:"btn btn-secondary",onClick:e=>this.toggleInEdition(e),value:r("common:Cancel")})]}):Object(a.jsxs)(a.Fragment,{children:[Object(a.jsx)("input",{type:"submit",className:"btn btn-primary",onClick:e=>{this.toggleInEdition(e)},value:r("common:Edit")}),Object(a.jsx)("input",{type:"submit",className:"btn btn-secondary",onClick:()=>Ma.push("/admin"),value:r("common:Back")})]})]})})]})})})]})}}var J=Object(O.c)((e=>({message:e.message})),(e=>({onHandleConfigFormSubmit:t=>{const s=Object.assign({},t);s.max_single_file_size*=1048576,s.max_zip_file_size*=1048576,e((e=>t=>L.updateData("config",e).then((e=>{"success"===e.status?t(B(e.data)):t(I("application|".concat(e.message)))})).catch((e=>t(I("application|".concat(e))))))(s))}})))(G),K=s(15);class Y 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 X=Object(w.a)()(Object(O.c)((e=>({appStats:e.application.statistics})),(e=>({loadAppStats:()=>{e(V("stats/all"))}})))(Y));function $(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)(X,{}),Object(a.jsx)("br",{}),Object(a.jsxs)("dl",{className:"admin-items",children:[Object(a.jsx)("dt",{children:Object(a.jsx)(K.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)(K.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)(K.a,{to:{pathname:"/admin/users"},children:s("administration:Users")})}),Object(a.jsx)("dd",{children:s("administration:Add/remove admin rights, delete user account.")})]})]})]})}class Z 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:()=>Ma.push("/admin/"),value:r("common:Back")})]})]})})})]})}}var Q=Object(O.c)((e=>({message:e.message,sports:e.sports.data,user:e.user})),(e=>({loadSports:()=>{e(H("getData","sports"))},updateSport:(t,s)=>{e(H("updateData","sports",{id:t,is_active:s},!1))}})))(Z);class ee 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,R(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)(K.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)(K.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)(K.a,{className:"page-link",to:this.getUrl("next"),"aria-disabled":!t.has_next,children:s("common:Next")})})]})})});var r}}class te 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=R(this.props.location.pathname,s);Ma.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=z(o,E),d=z(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)(K.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)(ee,{pagination:c,pathname:s.pathname,query:this.state,t:o}),Object(a.jsx)("input",{type:"submit",className:"btn btn-secondary",onClick:()=>Ma.push("/admin/"),value:o("common:Back")})]})]})})})})]})}}var se=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(H("getData","users",t))},updateUser:(t,s)=>{e(H("updateData","users",{username:t,admin:s},!1))}})))(te),ae=s(223);function re(){const e=Object(ae.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 oe=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)($,{appConfig:t,t:s})}),Object(a.jsx)(g.b,{exact:!0,path:"/admin/application",render:()=>Object(a.jsx)(J,{appConfig:t,t:s})}),Object(a.jsx)(g.b,{exact:!0,path:"/admin/sports",render:()=>Object(a.jsx)(Q,{t:s})}),Object(a.jsx)(g.b,{exact:!0,path:"/admin/users",render:()=>Object(a.jsx)(se,{t:s})}),Object(a.jsx)(g.b,{component:re})]}):Object(a.jsx)(re,{})})]})}))),ce=s(892),ne=s(24),ie=s(911),le=s(226),de=s.n(le);const ue=["#55a8a3","#98C3A9","#D0838A","#ECC77E","#926692","#929292","#428bca"],me=[{record_type:"AS",label:"Ave. speed"},{record_type:"FD",label:"Farest distance"},{record_type:"LD",label:"Longest duration"},{record_type:"MS",label:"Max. speed"}],je=(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}),pe=e=>{let t=new Date(0);return t=Object(ie.a)(t.setSeconds(e),1),t.getTime()},he=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(be);class Oe{static loginOrRegisterOrPasswordReset(e,t){const s={url:"auth/".concat(e),method:"POST",noAuthorization:!0,body:t,type:"application/json"};return T(s)}static deletePicture(){return T({url:"auth/picture",method:"DELETE"})}}const ge=e=>({type:"PICTURE_ERROR",message:e}),fe=e=>({type:"PROFILE_UPDATE_ERROR",message:e}),we=()=>e=>window.localStorage.getItem("authToken")?e(ve()):{type:"LOGOUT"},ve=()=>e=>L.getData("auth/profile").then((t=>"success"===t.status?(e(H("getData","sports")),t.data.isAuthenticated=!0,t.data.language&&e(q(t.data.language)),e({type:"PROFILE_SUCCESS",profil:t.data})):e({type:"PROFILE_ERROR",message:t.message}))).catch((e=>{throw e})),ke=(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:(e=>{let t=0;return e.map((e=>{const s={id:t,value:e};return t++,s}))})(a)})}return s(((e,t)=>s=>Oe.loginOrRegisterOrPasswordReset(e,t).then((t=>{if("success"===t.status){if("password/reset-request"===e)return Ma.push({pathname:"/password-reset/sent"});if("password/update"===e)return Ma.push({pathname:"/updated-password"});if("login"===e||"register"===e)return window.localStorage.setItem("authToken",t.auth_token),"register"===e&&s(V("config")),s(ve())}return s({type:"AUTH_ERROR",message:t.message})})).catch((e=>{throw e})))(t,e))},ye=(e,t=!1)=>s=>L.deleteData("users",e).then((e=>{204===e.status?(s(V("config")),t?Ma.push("/admin/users"):(s({type:"LOGOUT"}),Ma.push("/"))):e.json().then((e=>s(I("".concat(e.message)))))})).catch((e=>s(I("user|".concat(e))))),Ne=e=>({type:"SET_GPX",gpxContent:e}),_e=e=>({type:"SET_CHART_DATA",chartData:e}),Se=e=>t=>L.updateData("workouts",e).then((e=>{"success"===e.status?(t(we()),Ma.push("/workouts/".concat(e.data.workouts[0].id))):t(I("workouts|".concat(e.message))),t(W(!1))})).catch((e=>{t(W(!1)),t(I("workouts|".concat(e)))})),De=e=>t=>L.getData("workouts",e).then((e=>{"success"===e.status?e.data.workouts.length>0&&t({type:"PUSH_WORKOUTS",workouts:e.data.workouts}):t(I("workouts|".concat(e.message)))})).catch((e=>t(I("workouts|".concat(e)))));var Ce=Object(O.c)((e=>({appConfig:e.application.config,loading:e.loading})),(e=>({onAddWorkout:t=>{e(W(!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=>L.addDataWithFile("workouts",e).then((e=>{"created"===e.status?0===e.data.workouts.length?t(I("workouts|no correct file.")):1===e.data.workouts.length?(t(we()),Ma.push("/workouts/".concat(e.data.workouts[0].id))):(t(we()),Ma.push("/")):413===e.status?t(I("workouts|File size is greater than the allowed size")):t(I("workouts|".concat(e.message))),t(W(!1))})).catch((e=>{t(W(!1)),t(I("workouts|".concat(e)))})))(s))},onEditWorkout:(t,s)=>{e(Se({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=xe(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)(ce.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)(ce.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:()=>Ma.push("/"),value:n("common:Cancel")})]})]})}));var Ee=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(Se(o))):e((c=o,e=>L.addData("workouts/no_gpx",c).then((t=>{"created"===t.status?(e(we()),Ma.push("/workouts/".concat(t.data.workouts[0].id))):e(I("workouts|".concat(t.message)))})).catch((t=>e(I("workouts|".concat(t)))))))}})))((function(e){const t=e.onAddOrEdit,s=e.sports,r=e.t,o=e.user,c=e.workout,n=xe(s,r,!0);let i,l,d="";if(c){const e=je(P(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:()=>Ma.push("/"),value:r("common:Cancel")})]})}));class Ae 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)(Ce,{workout:c,sports:r,t:o}):Object(a.jsx)(Ee,{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)(Ce,{sports:r,t:o}):Object(a.jsx)(Ee,{sports:r,t:o})]})})]})}),Object(a.jsx)("div",{className:"col-md-2"})]})})]})}}var Me=Object(w.a)()(Object(O.c)((e=>({loading:e.loading})))(Ae));var Te=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)(Me,{workout:null,message:t,sports:s})})}));function Pe(e){const t=Object(ae.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?je(P(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)(K.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)(K.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 ze=s(25);class Re 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)(ze.f,{height:300,children:Object(a.jsxs)(ze.d,{data:t,margin:{top:15,right:30,left:20,bottom:15},onMouseMove:e=>r(e.activePayload),onMouseLeave:()=>r(null),children:[Object(a.jsx)(ze.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)(ze.i,{label:{value:"".concat(s("workouts:speed")," (km/h)"),angle:-90,position:"left"},yAxisId:"left"}),Object(a.jsx)(ze.i,{label:{value:"".concat(s("workouts:elevation")," (m)"),angle:-90,position:"right"},yAxisId:"right",orientation:"right"}),this.displayData("elevation")&&Object(a.jsx)(ze.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)(ze.e,{yAxisId:"left",type:"linear",dataKey:"speed",name:s("workouts:speed"),stroke:"#8884d8",strokeWidth:2,dot:!1,unit:" km/h"}),Object(a.jsx)(ze.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 Le=Object(O.c)((e=>({chartData:e.chartData})),(e=>({loadWorkoutData:t=>{e((e=>t=>{if(e)return L.getData("workouts/".concat(e,"/chart_data")).then((e=>{"success"===e.status?t(_e(he(e.data.chart_data))):t(I("workouts|".concat(e.message)))})).catch((e=>t(I("workouts|".concat(e)))));t(_e(null))})(t))},loadSegmentData:(t,s)=>{e(((e,t)=>s=>{if(e)return L.getData("workouts/".concat(e,"/chart_data/segment/").concat(t)).then((e=>{"success"===e.status?s(_e(he(e.data.chart_data))):s(I("workouts|".concat(e.message)))})).catch((e=>s(I("workouts|".concat(e)))));s(_e(null))})(t,s))}})))(Re);function Ue(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 Ie(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)(Ue,{workout:s,t:t})]})}var We=s(896),He=s(893),qe=s(912),Be=s(894),Ve=s(895),Ge=s(237),Je=s.n(Ge);function Ke({bounds:e,coordinates:t,jsonData:s,mapAttribution:r}){return Object(He.a)().fitBounds(e),Object(a.jsxs)(a.Fragment,{children:[Object(a.jsx)(qe.a,{attribution:r,url:"".concat(C,"workouts/map_tile/{s}/{z}/{x}/{y}.png")}),Object(a.jsx)(Be.a,{data:s},Je()(s)),t.latitude&&Object(a.jsx)(Ve.a,{position:[t.latitude,t.longitude]})]})}class Ye 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=de.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)(We.a,{zoom:this.state.zoom,bounds:n,boundsOptions:{padding:[10,10]},children:Object(a.jsx)(Ke,{bounds:n,coordinates:t,jsonData:c,mapAttribution:r})})})}}var Xe=Object(O.c)((e=>({gpxContent:e.gpx,mapAttribution:e.application.config.map_attribution})),(e=>({loadWorkoutGpx:t=>{e((e=>t=>{if(e)return L.getData("workouts/".concat(e,"/gpx")).then((e=>{"success"===e.status?t(Ne(e.data.gpx)):t(I("workouts|".concat(e.message)))})).catch((e=>t(I("workouts|".concat(e)))));t(Ne(null))})(t))},loadSegmentGpx:(t,s)=>{e(((e,t)=>s=>{if(e)return L.getData("workouts/".concat(e,"/gpx/segment/").concat(t)).then((e=>{"success"===e.status?s(Ne(e.data.gpx)):s(I("workouts|".concat(e.message)))})).catch((e=>s(I("workouts|".concat(e)))));s(Ne(null))})(t,s))}})))(Ye);function $e(e){const t=e.t;return Object(a.jsx)("div",{className:"workout-no-map text-center",children:t("workouts:No Map")})}function Ze(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 Qe(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)(K.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 et 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(ne.a)(n,1)[0],m=u?u.title:o("workouts:Workout"),j=u?r.filter((e=>e.id===u.sport_id)):[],p=Object(ne.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)(Pe,{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)(Xe,{workout:u,coordinates:l,dataType:b,segmentId:h}):Object(a.jsx)($e,{t:o})}),Object(a.jsx)("div",{className:"col",children:Object(a.jsx)(Ie,{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)(Le,{workout:u,dataType:b,segmentId:h,t:o,updateCoordinates:e=>this.updateCoordinates(e)})]})})})})})}),"workout"===b&&Object(a.jsxs)(a.Fragment,{children:[Object(a.jsx)(Ze,{notes:u.notes,t:o}),u.segments.length>1&&Object(a.jsx)(Qe,{segments:u.segments,t:o})]})]})]})]})}}var tt=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(H("getData","workouts",{id:t}))},onDeleteWorkout:t=>{var s;e((s=t,e=>L.deleteData("workouts",s).then((t=>{var a;204===t.status?Promise.resolve(e((a=s,{type:"REMOVE_WORKOUT",workoutId:a}))).then((()=>e(we()))).then((()=>Ma.push("/"))):e(I("workouts|".concat(t.status)))})).catch((t=>e(I("workouts|".concat(t)))))))}})))(et));class st 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(ne.a)(r,1)[0];return Object(a.jsx)("div",{children:s.length>0&&Object(a.jsx)(Me,{workout:o,message:t,sports:s})})}}var at=Object(O.c)((e=>({workouts:e.workouts.data,message:e.message,sports:e.sports.data,user:e.user})),(e=>({loadWorkout:t=>{e(H("getData","workouts",{id:t}))}})))(st);var rt=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:Te}),Object(a.jsx)(g.b,{exact:!0,path:"/workouts/:workoutId",component:tt}),Object(a.jsx)(g.b,{exact:!0,path:"/workouts/:workoutId/edit",component:at}),Object(a.jsx)(g.b,{path:"/workouts/:workoutId/segment/:segmentId",component:tt}),Object(a.jsx)(g.b,{component:re})]}):Object(a.jsx)(g.a,{to:"/login"})})}));class ot 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)(K.a,{to:{pathname:"/workouts/add"},children:e("dashboard:Upload one !")})]})})}}class ct extends c.a.PureComponent{render(){const e=this.props,t=e.loadWorkouts,s=e.sports,r=e.t,o=e.updateParams,c=xe(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 nt 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 it 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)(K.a,{to:"/workouts/".concat(e.id),children:e.title}),e.map&&Object(a.jsx)(nt,{workout:e,display:"list"})]}),Object(a.jsxs)("td",{children:[Object(a.jsx)("span",{className:"heading-span-absolute",children:r("workouts:Date")}),Object(y.a)(P(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 lt 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)(ct,{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)(it,{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)(ot,{t:n})]})]})})]})}}var dt=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(H("getData","workouts",t))},loadMoreWorkouts:t=>{e(De(t))}})))(lt));var ut=Object(w.a)()(Object(O.c)((e=>({appConfig:e.application.config,pathname:e.router.location.pathname,message:e.message})),(e=>({onDeletePicture:()=>{e((e=>Oe.deletePicture().then((t=>204===t.status?e(ve()):e(ge(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(),L.addDataWithFile("auth/picture",s).then((e=>{if("success"===e.status)return t(ve());const s=413===e.status?"Error during picture update, file size exceeds max size.":e.message;return t(ge(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:()=>Ma.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?Ma.push("/"):Ma.go(-1),children:l("/profile"===i?"common:Back to home":"common:Back")})]})]})})})]})]})})));var mt=Object(w.a)()(Object(O.c)((e=>({user:e.user})))((function({t:e,user:t}){return Object(a.jsx)("div",{children:Object(a.jsx)(ut,{editable:!0,t:e,user:t})})}))),jt=s(897),pt=s(898),ht=s(899),bt=s(900),xt=s(238),Ot=s(242),gt=s(901),ft=s(902),wt=s(107),vt=s(903),kt=s(144);function yt(e){const t=e.isDisabled,s=e.isMore,r=e.sportImg,o=e.workout;return Object(a.jsx)(K.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(me.filter((t=>t.record_type===e.record_type))[0].label)))})})]})})}class Nt 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)(yt,{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)(yt,{workout:e,isDisabled:s,isMore:"-more",sportImg:r.filter((t=>t.id===e.sport_id)).map((e=>e.img))},e.id)))})]})}}const _t=(e,t)=>{const s=Object(jt.a)(e),a=Object(pt.a)(e),r=t?1:0;return{start:Object(ht.a)(s,{weekStartsOn:r}),end:Object(bt.a)(a)}};class St extends c.a.Component{constructor(e,t){super(e,t);const s=new Date;this.state={currentMonth:s,startDate:_t(s,e.weekm).start,endDate:_t(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(xt.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(Ot.a)(P(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(gt.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(ft.a)(l)?" today":""),children:Object(a.jsxs)("div",{className:"img".concat(r),children:[Object(a.jsx)("span",{className:"number",children:d}),Object(a.jsx)(Nt,{dayWorkouts:s,isDisabled:r,sports:c})]})},l)),l=Object(xt.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=_t(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(wt.a)(this.state.currentMonth,1);this.updateStateDate(e)}handlePrevMonth(){const e=Object(vt.a)(this.state.currentMonth,1);this.updateStateDate(e)}render(){const e={locale:"fr"===this.props.language?kt.fr:kt.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 Dt=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=>L.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(I("workouts|".concat(t.message)))})).catch((t=>e(I("workouts|".concat(t)))))))}})))(St);function Ct(e){const t=e.records,s=e.sports,r=e.t,o=e.user,c=xe(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=me.filter((t=>t.record_type===e.record_type)),r=Object(ne.a)(a,1)[0];return{workout_date:je(P(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)(K.a,{to:"/workouts/".concat(e.workout_id),children:e.workout_date})})]},e.id)))})]})]},e)))})]})}var Et=s(239),At=s(904);const Mt=[{duration:"week",dateFormat:"yyyy-MM-dd",xAxis:"dd/MM"},{duration:"month",dateFormat:"yyyy-MM",xAxis:"MM/yyyy"},{duration:"year",dateFormat:"yyyy",xAxis:"yyyy"}],Tt=(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)},Pt=(e,t)=>0===t?"":"distance"===e?"".concat(t.toFixed(2)," km"):"duration"===e?Tt(t):t,Ft=(e,t)=>{switch(e){case"week":return Object(xt.a)(t,7);case"year":return Object(Et.a)(t,1);case"month":default:return Object(wt.a)(t,1)}},zt=(e,t,s,a,r)=>{const o=[],c=[],n=[];for(let i=((e,t,s)=>{switch(e){case"week":return Object(ht.a)(t,{weekStartsOn:s?1:0});case"year":return Object(At.a)(t);case"month":default:return Object(jt.a)(t)}})(s.duration,s.start,r);i<=s.end;i=Ft(s.duration,i)){const r=Mt.filter((e=>e.duration===s.duration)),l=Object(ne.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}},Rt=(e,t)=>"duration"===e?Tt(t,!0):"distance"===e?t.toFixed(2):t;function Lt(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,": ",Rt(t,e.value)," ",e.unit]},e.name))),s.length>0&&Object(a.jsxs)("p",{children:["Total: ",Rt(t,o)]})]})}return null}function Ut(e){const t=e.displayedData,s=e.x,r=e.y,o=e.width,c=e.value;if(!c)return null;const n=Pt(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 It 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)(ze.f,{height:300,children:Object(a.jsxs)(ze.c,{data:r[e],margin:{top:15,bottom:0},children:[Object(a.jsx)(ze.h,{dataKey:"date",interval:0}),Object(a.jsx)(ze.i,{tickFormatter:t=>Pt(e,t)}),Object(a.jsx)(ze.g,{content:Object(a.jsx)(Lt,{displayedData:e})}),s.map(((t,r)=>Object(a.jsx)(ze.b,{isAnimationActive:!1,dataKey:t.label,stackId:"a",fill:ue[r],label:r===s.length-1?Object(a.jsx)(Ut,{displayedData:e}):"",name:o("sports:".concat(t.label))},t.id)))]})})]})}}class Wt 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=zt(r,s,o,t,i.weekm);return Object(a.jsx)(It,{sports:s,stats:l,t:n})}}var Ht=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=>L.getData("stats/".concat(e,"/").concat(t),s).then((e=>{"success"===e.status?a(U("statistics",e.data)):a(I("statistics|".concat(e.message)))})).catch((e=>a(I("statistics|".concat(e))))))(t,a.type,c))}})))(Wt);class qt extends c.a.Component{constructor(e,t){super(e,t);const s=new Date;this.state={start:Object(jt.a)(s),end:Object(pt.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)(Ht,{displayEmpty:!1,statsParams:this.state,t:e})})]})}}function Bt(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)(K.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)(P(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)(nt,{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 Gt 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)(Bt,{user:n,t:c}),Object(a.jsxs)("div",{className:"row",children:[Object(a.jsxs)("div",{className:"col-md-4",children:[Object(a.jsx)(qt,{t:c}),Object(a.jsx)(Ct,{t:c,records:r,sports:o,user:n})]}),Object(a.jsxs)("div",{className:"col-md-8",children:[Object(a.jsx)(Dt,{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)(ot,{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 Jt=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(H("getData","workouts",{page:1})),e(H("getData","records"))},loadMoreWorkouts:t=>{e(De({page:t}))}})))(Gt));function Kt(){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 Yt 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)(ce.a,{i18nKey:"user:loggedOut",children:["You are now logged out. Click ",Object(a.jsx)(K.a,{to:"/login",children:"here"})," to log back in."]})})})}),Object(a.jsx)("div",{className:"col-2"})]})})}}var Xt=Object(O.c)((e=>({user:e.user})),(e=>({UserLogout:()=>{e({type:"LOGOUT"})}})))(Yt);function $t(){return($t=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 Qt=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"}),es=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"}),ts=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"}),ss=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"}),as=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"}),rs=o.createElement("path",{d:"m53.273 27.803 145.302 120.879v-120.879z",fill:"#406bd4"}),os=o.createElement("path",{d:"m313.425 150.571v-122.768h148.082z",fill:"#3257b0"}),cs=o.createElement("path",{d:"m394.732 198.575 117.268-97.556v97.556z",fill:"#3257b0"}),ns=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"})),is=o.createElement("path",{d:"m313.425 484.197v-124.139l149.221 124.139z",fill:"#3257b0"}),ls=o.createElement("path",{d:"m512 409.423-115.395-95.998h115.395z",fill:"#3257b0"}),ds=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"}),us=o.createElement("path",{d:"m289.858 222.142v-194.339h-33.858v456.394h33.858v-194.339h222.142v-67.716z",fill:"#c20044"});function ms(e,t){let s=e.title,a=e.titleId,r=Zt(e,["title","titleId"]);return o.createElement("svg",$t({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,Qt,es,ts,ss,as,rs,os,cs,ns,is,ls,ds,us)}const js=o.forwardRef(ms);s.p;function ps(){return(ps=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 bs=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"}),xs=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"}),Os=o.createElement("path",{d:"m160.795 27.803h190.409v456.394h-190.409z",fill:"#f0f9ff"}),gs=o.createElement("path",{d:"m256 27.803h95.205v456.394h-95.205z",fill:"#cee5f5"});function fs(e,t){let s=e.title,a=e.titleId,r=hs(e,["title","titleId"]);return o.createElement("svg",ps({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,bs,xs,Os,gs)}const ws=o.forwardRef(fs);s.p;const vs=[{name:"en",selected:!0,flag:Object(a.jsx)(js,{})},{name:"fr",selected:!1,flag:Object(a.jsx)(ws,{})}];class ks 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:vs.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 ys=Object(O.c)((e=>({language:e.language})),(e=>({onUpdateLanguage:(t,s)=>{t!==s&&e(q(t))}})))(ks);class Ns 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)(K.a,{className:"nav-link",to:{pathname:"/"},children:o("common:Dashboard")})}),s&&Object(a.jsx)("li",{className:"nav-item",children:Object(a.jsx)(K.a,{className:"nav-link",to:{pathname:"/workouts/history"},children:o("Workouts")})}),s&&Object(a.jsx)("li",{className:"nav-item",children:Object(a.jsx)(K.a,{className:"nav-link",to:{pathname:"/workouts/statistics"},children:o("common:Statistics")})}),t&&Object(a.jsx)("li",{className:"nav-item",children:Object(a.jsx)(K.a,{className:"nav-link",to:{pathname:"/admin"},children:"Admin"})}),s&&Object(a.jsx)("li",{className:"nav-item",children:Object(a.jsx)(K.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)(K.a,{className:"nav-link",to:{pathname:"/register"},children:o("user:Register")})}),!s&&Object(a.jsx)("li",{className:"nav-item",children:Object(a.jsx)(K.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)(K.a,{className:"nav-link",to:{pathname:"/profile"},children:c})}),Object(a.jsx)("li",{className:"nav-item",children:Object(a.jsx)(K.a,{className:"nav-link",to:{pathname:"/logout"},children:o("user:Logout")})})]}),Object(a.jsx)("li",{children:Object(a.jsx)(ys,{})})]})]})]})})})}}var _s=Object(w.a)()(Object(O.c)((({user:e})=>({admin:e.admin,isAuthenticated:e.isAuthenticated,picture:e.picture,username:e.username})))(Ns));function Ss(){return(Ss=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 Cs=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"}))),Es=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"}))),As=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"}))),Ms=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"}))),Ts=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"}))),Ps=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 zs(e,t){let s=e.title,a=e.titleId,r=Ds(e,["title","titleId"]);return o.createElement("svg",Ss({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,Cs,Es,As,Ms,Ts,Ps,Fs)}const Rs=o.forwardRef(zs);s.p;function Ls(){return(Ls=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 Is=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 Ws(e,t){let s=e.title,a=e.titleId,r=Us(e,["title","titleId"]);return o.createElement("svg",Ls({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,Is)}const Hs=o.forwardRef(Ws);s.p;function qs(e){const t=Object(ae.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)(Hs,{})}),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)(Rs,{})}),Object(a.jsxs)(ce.a,{i18nKey:"user:updatedPasswordText",children:["Your password have been updated. Click",Object(a.jsx)(K.a,{to:"/login",children:"here"})," to log in."]})]})]})})}),Object(a.jsx)("div",{className:"col-2"})]})})}var Bs=s(240),Vs=s.n(Bs);class Gs 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)(Pe,{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:vs.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:()=>Ma.push("/profile"),children:o("common:Cancel")})]}),Object(a.jsx)(v,{message:t,t:o})]})})})]})}),Object(a.jsx)("div",{className:"col-md-2"})]})]})]})}}var Js=Object(w.a)()(Object(O.c)((e=>({location:e.router.location,message:e.message,user:e.user})),(e=>({onDeleteUser:t=>{e(ye(t))},onHandleProfileFormSubmit:t=>{e((e=>t=>!e.password===e.password_conf?t(fe("Password and password confirmation don't match.")):(delete e.id,L.postData("auth/profile/edit",e).then((e=>{if("success"===e.status)return t(ve()),Ma.push("/profile");t(fe(e.message))})).catch((e=>{throw e}))))(t))}})))(Gs)),Ks=s(905),Ys=s(906),Xs=s(907),$s=s(241);const Zs=["week","month","year"];class Qs 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(jt.a)(Object(vt.a)(s,11)),end:Object(pt.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(At.a)(Object(Ks.a)(s,9)):"week"===t?Object(jt.a)(Object(vt.a)(s,2)):Object(jt.a)(Object(vt.a)(s,11)),r="year"===t?Object(Ys.a)(s):"week"===t?Object(bt.a)(s):Object(pt.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(At.a)(Object(Ks.a)(s,1)):"week"===r?Object(ht.a)(Object(Xs.a)(s,1)):Object(jt.a)(Object(vt.a)(s,1)),c="year"===r?Object(Ys.a)(Object(Ks.a)(a,1)):"week"===r?Object(bt.a)(Object(Xs.a)(a,1)):Object(pt.a)(Object(vt.a)(a,1))):(o="year"===r?Object(At.a)(Object(Et.a)(s,1)):"week"===r?Object(ht.a)(Object($s.a)(s,1)):Object(jt.a)(Object(wt.a)(s,1)),c="year"===r?Object(Ys.a)(Object(Et.a)(a,1)):"week"===r?Object(bt.a)(Object($s.a)(a,1)):Object(pt.a)(Object(wt.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=xe(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:Zs.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)(Ht,{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:ue[e.id-1]},children:" ".concat(e.label)})]},e.id)))})]})]}),0===n.nb_workouts&&Object(a.jsx)(ot,{t:c})]})]})}}var ea=Object(w.a)()(Object(O.c)((e=>({sports:e.sports.data,user:e.user})))(Qs));function ta(e){const t=Object(ae.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)(K.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:()=>Ma.go(-1),children:"Back"})})]})]}),Object(a.jsx)("div",{className:"col-md-3"})]})})]})}class sa 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)(ta,{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 aa=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(ke(t,s="password reset"===s?"password/update":"reset your password"===s?"password/reset-request":s))}})))(sa));class ra 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(ne.a)(o,1)[0],i=!!n&&s.username===n.username;return Object(a.jsxs)("div",{children:[c&&Object(a.jsx)(Pe,{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)(ut,{editable:i,isDeletable:s.admin&&!i,onDeleteUser:r,displayModal:e=>this.displayModal(e),t:t,user:n})]})}}var oa=Object(w.a)()(Object(O.c)((e=>({currentUser:e.user,users:e.users.data})),(e=>({onDeleteUser:t=>{e(ye(t,!0))},loadUser:t=>{e(H("getData","users",{username:t}))}})))(ra));class ca 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)(_s,{}),Object(a.jsxs)(g.d,{children:[Object(a.jsx)(g.b,{exact:!0,path:"/",component:Jt}),Object(a.jsx)(g.b,{exact:!0,path:"/register",render:()=>Object(a.jsx)(aa,{formType:"register"})}),Object(a.jsx)(g.b,{exact:!0,path:"/login",render:()=>Object(a.jsx)(aa,{formType:"login"})}),Object(a.jsx)(g.b,{exact:!0,path:"/password-reset",render:()=>Object(a.jsx)(aa,{formType:"password reset"})}),Object(a.jsx)(g.b,{exact:!0,path:"/password-reset/request",render:()=>Object(a.jsx)(aa,{formType:"reset your password"})}),Object(a.jsx)(g.b,{exact:!0,path:"/password-reset/sent",render:()=>Object(a.jsx)(qs,{action:"sent"})}),Object(a.jsx)(g.b,{exact:!0,path:"/updated-password",render:()=>Object(a.jsx)(qs,{action:"updated"})}),Object(a.jsx)(g.b,{exact:!0,path:"/password-reset/sent",component:qs}),Object(a.jsx)(g.b,{exact:!0,path:"/logout",component:Xt}),Object(a.jsx)(g.b,{exact:!0,path:"/profile/edit",component:Js}),Object(a.jsx)(g.b,{exact:!0,path:"/profile",component:mt}),Object(a.jsx)(g.b,{exact:!0,path:"/workouts/history",component:dt}),Object(a.jsx)(g.b,{exact:!0,path:"/workouts/statistics",component:ea}),Object(a.jsx)(g.b,{exact:!0,path:"/users/:userName",component:oa}),Object(a.jsx)(g.b,{path:"/workouts",component:rt}),Object(a.jsx)(g.b,{path:"/admin",component:oe}),Object(a.jsx)(g.b,{component:re})]}),Object(a.jsx)(Kt,{})]})}}var na=Object(O.c)((()=>({})),(e=>({loadAppConfig:()=>{e(V("config"))}})))(ca),ia=s(80);function la({store:e,history:t,children:s}){return Object(a.jsx)(O.a,{store:e,children:Object(a.jsx)(ia.a,{history:t,children:s})})}const da=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 ua(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 ma={data:[]};var ja={language:"en",message:"",messages:[],user:{isAuthenticated:!1},workouts:Object(k.a)({},ma),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)({},ma),chartData:[],gpx:null,loading:!1,records:Object(k.a)({},ma),sports:Object(k.a)({},ma),statistics:{data:{}},users:Object(k.a)({},ma)};const pa=(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,ha=(e=ja.workouts,t)=>{switch(t.type){case"LOGOUT":return ja.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 pa(e,"workouts",t)}},ba=(e=ja.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,xa=(e=ja.calendarWorkouts,t)=>{switch(t.type){case"LOGOUT":return ja.calendarWorkouts;case"UPDATE_CALENDAR":return Object(k.a)(Object(k.a)({},e),{},{data:t.workouts});default:return pa(e,"calendarWorkouts",t)}},Oa=(e=ja.chartData,t)=>"SET_CHART_DATA"===t.type?t.chartData:e,ga=(e=ja.gpx,t)=>"SET_GPX"===t.type?t.gpxContent:e,fa=(e=ja.language,t)=>"SET_LANGUAGE"===t.type?t.language:e,wa=(e=ja.loading,t)=>"SET_LOADING"===t.type?t.loading:e,va=(e=ja.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"LOGOUT":case"PROFILE_SUCCESS":case"SET_RESULTS":case"@@router/LOCATION_CHANGE":return"";default:return e}},ka=(e=ja.messages,t)=>{switch(t.type){case"AUTH_ERRORS":return t.messages;case"LOGOUT":case"PROFILE_SUCCESS":case"@@router/LOCATION_CHANGE":return[];default:return e}},ya=(e=ja.records,t)=>"LOGOUT"===t.type?ja.records:pa(e,"records",t),Na=(e=ja.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)))}):pa(e,"sports",t),_a=(e=ja.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)))}):pa(e,"users",t),Sa=(e=ja.user,t)=>{switch(t.type){case"AUTH_ERROR":case"PROFILE_ERROR":case"LOGOUT":return window.localStorage.removeItem("authToken"),ja.user;case"PROFILE_SUCCESS":return t.profil;default:return e}},Da=(e=ja.statistics,t)=>"LOGOUT"===t.type?ja.statistics:pa(e,"statistics",t);const Ca=["/login","/register","/password-reset","/password-reset/request","/password-reset/sent","/updated-password"],Ea=(e,t)=>("string"===typeof e||e instanceof String?e=t:e.pathname=t,e),Aa=e=>(window.localStorage.authToken||Ca.includes(e.pathname)||(e=Ea(e,"/login")),window.localStorage.authToken&&Ca.includes(e.pathname)&&(e=Ea(e,"/")),e),Ma=((Ta=Object(r.a)()).location=Aa(Ta.location),Object(k.a)(Object(k.a)({},Ta),{},{push:(e,...t)=>Ta.push(Aa(e),...t),replace:(e,...t)=>Ta.replace(Aa(e),...t)}));var Ta;Ma.listen((()=>{window.scrollTo(0,0)}));const Pa=document.getElementById("root"),Fa=Object(u.e)((za=Ma,Object(u.c)({workouts:ha,application:ba,calendarWorkouts:xa,chartData:Oa,gpx:ga,language:fa,loading:wa,message:va,messages:ka,records:ya,router:Object(ia.b)(za),sports:Na,statistics:Da,user:Sa,users:_a})),window.__STATE__,(window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__||u.d)(Object(u.a)(Object(d.a)(Ma),m.a)));var za;null!==window.localStorage.authToken&&Fa.dispatch(we()),l.a.render(Object(a.jsx)(la,{store:Fa,history:Ma,children:Object(a.jsx)(n.a,{i18n:x,children:Object(a.jsx)(na,{})})}),Pa),function(){if("serviceWorker"in navigator){if(new URL("",window.location).origin!==window.location.origin)return;window.addEventListener("load",(()=>{const e="".concat("","/service-worker.js");da?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()}))})):ua(e)})).catch((()=>{console.log("No internet connection found. App is running in offline mode.")}))}(e):ua(e)}))}}()}},[[889,1,2]]]); +//# sourceMappingURL=main.8faa878d.chunk.js.map \ No newline at end of file diff --git a/fittrackee/dist/static/js/main.9f2642a3.chunk.js.map b/fittrackee/dist/static/js/main.8faa878d.chunk.js.map similarity index 99% rename from fittrackee/dist/static/js/main.9f2642a3.chunk.js.map rename to fittrackee/dist/static/js/main.8faa878d.chunk.js.map index ff83e3cd..1947f5c2 100644 --- a/fittrackee/dist/static/js/main.9f2642a3.chunk.js.map +++ b/fittrackee/dist/static/js/main.8faa878d.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","map","msg","value","id","suffixes","getFileSize","fileSize","asText","i","Math","floor","log","size","suffix","pow","toFixed","apiUrl","userFilters","key","label","sortOrders","isLoggedIn","window","localStorage","authToken","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","isInEdition","componentDidMount","initForm","componentDidUpdate","prevProps","appConfig","k","includes","setState","handleFormChange","e","name","toggleInEdition","preventDefault","onHandleConfigFormSubmit","onSubmit","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","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","Array","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","arr","val","obj","generateIds","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","loadAppConfig","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.9f2642a3.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 && messages.length > 0 && (\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.4' // 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 setData = (target, data) => ({\n type: 'SET_DATA',\n data,\n target,\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(setError(''))\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 { 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\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 FitTrackeeGenericApi.updateData('config', formData)\n .then(ret => {\n if (ret.status === 'success') {\n dispatch(setAppConfig(ret.data))\n } else {\n dispatch(setError(`application|${ret.message}`))\n }\n })\n .catch(error => dispatch(setError(`application|${error}`)))\n","import React from 'react'\nimport { connect } from 'react-redux'\n\nimport Message from '../Common/Message'\nimport { 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 isInEdition: false,\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 toggleInEdition(e) {\n e.preventDefault()\n const { isInEdition } = this.state\n this.setState({ isInEdition: !isInEdition })\n }\n\n render() {\n const { message, onHandleConfigFormSubmit, t } = this.props\n const { formData, isInEdition } = this.state\n return (\n
\n {message && }\n {Object.keys(formData).length > 0 && (\n
\n
\n
\n
\n \n {t('administration:Application configuration')}\n \n
\n
\n {\n this.toggleInEdition(e)\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 this.toggleInEdition(e)}\n value={t('common:Cancel')}\n />\n \n ) : (\n <>\n {\n this.toggleInEdition(e)\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 }),\n dispatch => ({\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\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 'LOGOUT':\n case 'PROFILE_SUCCESS':\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 return action.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","map","msg","value","id","suffixes","getFileSize","fileSize","asText","i","Math","floor","log","size","suffix","pow","toFixed","apiUrl","userFilters","key","label","sortOrders","isLoggedIn","window","localStorage","authToken","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","isInEdition","componentDidMount","initForm","componentDidUpdate","prevProps","appConfig","k","includes","setState","handleFormChange","e","name","toggleInEdition","preventDefault","onHandleConfigFormSubmit","onSubmit","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","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","Array","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","arr","val","obj","generateIds","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","loadAppConfig","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.8faa878d.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 && messages.length > 0 && (\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 setData = (target, data) => ({\n type: 'SET_DATA',\n data,\n target,\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(setError(''))\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 { 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\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 FitTrackeeGenericApi.updateData('config', formData)\n .then(ret => {\n if (ret.status === 'success') {\n dispatch(setAppConfig(ret.data))\n } else {\n dispatch(setError(`application|${ret.message}`))\n }\n })\n .catch(error => dispatch(setError(`application|${error}`)))\n","import React from 'react'\nimport { connect } from 'react-redux'\n\nimport Message from '../Common/Message'\nimport { 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 isInEdition: false,\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 toggleInEdition(e) {\n e.preventDefault()\n const { isInEdition } = this.state\n this.setState({ isInEdition: !isInEdition })\n }\n\n render() {\n const { message, onHandleConfigFormSubmit, t } = this.props\n const { formData, isInEdition } = this.state\n return (\n
\n {message && }\n {Object.keys(formData).length > 0 && (\n
\n
\n
\n
\n \n {t('administration:Application configuration')}\n \n
\n
\n {\n this.toggleInEdition(e)\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 this.toggleInEdition(e)}\n value={t('common:Cancel')}\n />\n \n ) : (\n <>\n {\n this.toggleInEdition(e)\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 }),\n dispatch => ({\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\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 'LOGOUT':\n case 'PROFILE_SUCCESS':\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 return action.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 ba66bc4e..0e73f848 100644 --- a/fittrackee_client/package.json +++ b/fittrackee_client/package.json @@ -1,6 +1,6 @@ { "name": "fittrackee_client", - "version": "0.4.4", + "version": "0.4.5", "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 662f1670..f578c4dc 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.4' // version stored in 'utils' for now +export const version = '0.4.5' // version stored in 'utils' for now export const apiUrl = process.env.NODE_ENV === 'production' ? '/api/' diff --git a/pyproject.toml b/pyproject.toml index ae4ec05c..17e4eb45 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "fittrackee" -version = "0.4.4" +version = "0.4.5" description = "Self-hosted outdoor workout/activity tracker" authors = ["SamR1"] license = "GPL-3.0"