From fb9ca18b3add1a023e04f69d4cf9b3d860373ea3 Mon Sep 17 00:00:00 2001 From: Brice Pissard Date: Fri, 21 Apr 2017 09:17:42 +0200 Subject: [PATCH 1/5] Add a "customStyle.weekendDayButton" style to be able to change the weekend background --- components/Day.js | 2 +- components/styles.js | 3 +++ README.md => images/README.md | 17 +++++++++++++++++ images/weekendDayButton.png | Bin 0 -> 39114 bytes 4 files changed, 21 insertions(+), 1 deletion(-) rename README.md => images/README.md (97%) create mode 100644 images/weekendDayButton.png diff --git a/components/Day.js b/components/Day.js index 0ffddbc..cfde730 100644 --- a/components/Day.js +++ b/components/Day.js @@ -86,7 +86,7 @@ export default class Day extends Component { ) : ( - + {caption} diff --git a/components/styles.js b/components/styles.js index 6cd0ce0..b7fcc40 100644 --- a/components/styles.js +++ b/components/styles.js @@ -45,6 +45,9 @@ const styles = StyleSheet.create({ weekRow: { flexDirection: 'row', }, + weekendDayButton: { + backgroundColor: '#fafafa', + }, dayButton: { alignItems: 'center', padding: 5, diff --git a/README.md b/images/README.md similarity index 97% rename from README.md rename to images/README.md index 8ea62ff..eeb94c6 100644 --- a/README.md +++ b/images/README.md @@ -440,6 +440,23 @@ const Schedule = () => { ![title](images/title.png) +### weekendDayButton + +`weekendDayButton` styles the weekends background. + +```js +const Schedule = () => { + const customStyle = { + weekendDayButton: { + backgroundColor: 'red', + }, + } + return +} +``` + +![weekendDayButton](images/weekendDayButton.png) + ### weekendDayText `weekendDayText` styles the text of weekends. diff --git a/images/weekendDayButton.png b/images/weekendDayButton.png new file mode 100644 index 0000000000000000000000000000000000000000..ee8a94714a982f7b8ad4ab9c8a50ffa144108622 GIT binary patch literal 39114 zcmeFZWmH^C*DZ|GNT7k>5FA2qcTaE#F2UX1gF6KG#z}BVaCdh}fZ%SyHMo46b8^n} zjPd=tKkgmx9pf_k2i?7^cGcRes@9xqt`1j_mw16pfD8o%^+HPWtr8Rz3=0$#^c@HR z_(b4htQmOYWg#Y}ASEV7s^Dm6YGG{x1@$`4NMHYr6#eS~0|R~ifl)eIWJfopu&_ua z{r2vT(T;A?9{pa@EQq%DDjs;X+YigDxvvBCg=s%vMEd;RW3r&u>k)^uJk?Q+inrmn zKeU^)r2{K0ECph0W`V zbW&GL$Y>9Y8W!dzs<8~z9E=pW4k0WP%|OdR;>n~RBT_x+Yb7N**_brnOLPu&OhDzKy)*;o3L*N-nZ4wT0T1g9bm$k4baX5R zf@RYBIx4);VFP<;gCIlv2naq_2q88*$e0nBYiMToeWGD{8K%~72It%?%oWRbPfyhZ zu&{TO2qEoQPft&+zn-4jBm6I6Hx7i+peWreRwJ!2(ShfXX`!OwtRW}MYh-7`Xkct- zXu{}jV-GwhC@6k+Uf^FF6K4ZbcN=S4Cth~}^1rU&1^$2jn2DV9uS=Y*1jsey6iCJF z98E|$7}*(_$pw)~NlEz~jZJx#-irTe4!jc}H+Ocn=VfAYb8};KV`H>)G-G1n;o)Io zW@Tb!WdN>VaPqKqHgIRKb)xvYlYjboYvN?&XkqVcVP{MF+^>P5or|*oIr;OA{{8!V zoF?uT|GAT`)1PSp6J&b+hKYrdnd#rYfu{V=pYkeLxSLpOytS|~v2_COA;`hW!vELx z|G#hkbI1Q`srg?mnYsSE<$rzirzJnr^925DLVsK9uTKGU2_o||{cCzbWXZJp_fSy6 zP*QJ2RNSEtG7> zz-iwa^F=&q_pY3F@MYc>W*_lyS6|o5Xd6yu4&<)<#xgkxS6OfFulv&a?oN*S3c+h{ zjb9MWYvyp)#MRTQzOj8n*?0EBZ`O3i&NTZb+Plf-DSOAQ`O)64p9TvlR(OWBPSoyHwb2~bFh)cQ=V{_RqJaKL5HFVdGFg)pSx z(jMM;D5TiGUWsJFWCf_0wxrOQf4@NRFfR>7*WOe{QwqcU{W1Ys(FO()0$oUBy{4y6 z6neZC!=cwuFjSY9k2XFS1Rt0I(%`HhXU| zks~sV?g*w*`>IV#lj&8JmzOsn^mI=_%10Y+BE9^W+%JA+SoV`6_2?iquOLR zIlr3Z`m1t>TmBJi7cShl$A>!^C8hYe?38pGp~s62{}#bEgHLXS@|k%$&8~uu_H2MT zD?s+2Tq*|6TPPLaVSw4?F1jw*1Vmr?Ba*}_=8Ah99+cV-yfKN2{1o5hvM;Tzt*t1V z@+L_z)}!|f+wn@kZ8(F+iISRH+;X~vYO+8s!EM>2AH?!r=%EG!4=r&*gCkfz^?LNJ z$7Y;FB&l+_u0WL2M&i}7=X+kaBl`D(H+iV9_#05s%|o}xGU>*Jo?2wH1(y<2Pxn!G zom5Dit}m8$S-r09$CW)E(EN9^Jdff$k6UN*=i%;eI@H-{L^Qh5r z;cLB=igV(@a;w%W&jS_;^F`-LIT(Ki>0oNNw6l$u6mJifn$?dQHqaVZ15i*y(FL!C z1#f>*H2(gnwKdAMlDHAgH>T6$W%$H4&QGCLZ_Cl8BrYx<{;NyV&Y(b{<|Rf93=9~NZT%lJdfrs+50~lR)A;WWs{5Qb z1z!b$K{V}8kInZNlkZurXPK+%`1rKiZng<2!nD1APoGVQp@(-XUd(?y3#T!;yF5HQ ztX~<*J8nzJjp3ChD&bJXYFzZWJ3Kq>CqaR<-W@fw`rNxaXGaZS=de8qIk})RqL)fPq#zFe^FT&#GGTh1e?w`*r~6QT&YhFoTJb`EQ>ZJQsP_P4rFm=Y0w6DFSObr!ua zrJ}5v&Lq`d%P7qDX__k6TWM{)uJ*pW?ECKVcz;u6HN&_;Nra0__n!YW$l*RXw?YVM zCx{gBCxt}x#SWNW48}kPDlq8TnZZ&_Mel>0hE{D8+EEgC<2bc)AYqR7=(H*LoHl$iTv|P8(5N$Tb9D zUj2A~Q}}@4_1=iB45u;L&&0ugfjcgpUGUppG#T~*9?$|O9kB7*G;@$7d+qz1bOKIG zb5jngY1%a6O^=L38`>)4LCo-&m=s{uRlCmsyHn(oObVmUr+N>c&XLdEXnZ46C}pvG z#T8DMb7m>b>K@6(zxZU$!Ly_qJ>iX-tenz^Mk4Tv8W5skie z?*0|Kc`QZBngkL0Sb7=<4{@mB182YG`&_C8dpZ9EHV4R;oA6Pl!a2 zxJ8dEyKlFlhCSvOis9+(7KR1>3lwO#*qXmTR=^=mF~gjM2miziWbJY3I*+tRns`lO z&1>$2sasT8St;()`f=29H)+0fQE{?U4YDOgN(Ab-f>X3VtuPYy(|DbQ^hjXek}2R> zmnxwA;lvM?DNDu<$%g~%cxif&bl)Oom3`?dsJGDexbie|Km)RX^g>NK?FL<;D0zIq zk==RAJ4?HoddF(g6@+9ej+x=1b%T%IuM+YEggA+$ew{e?Kbe`k?~p%i^@xFe0TbfQ zPO(S_Ng+|tMwWn=Fdbeko)Ssd1PK8F&KpW7GWhLR*Xbg${yL4$0Zgbc{hzUz7MmIm07jCL7)$J|Mr=`6~U;cR&-_WBA3$_`u4@WPi4~RLikvgnV*)SiOt#(hk(Nom*Jl;j~-u`;? zs@VE6@MjYFDh`p$$%)Y|rOFgYI@o?$VR+r7M6nJ646;O6KmVI*jrAO>5oXsw@4^bl zjJ8pRCdO#Ja{$x^zFn`=)3NWpt*ip1>Oe+oBlStar+*lgfcourFc`rX0u758CQYXM z9(G3v(onE>2VbcLc!#IPhnyr!xjpK;%XC_uZx?n`D5egO{iBw1d81cMnW4{dWQjP` zIF=}ON8#~N^D!qZ9b8!tpVdh$S!mDUCSX>#gcDIBHq*#c(GUeTyJdbh)w9b5+mw~< z$L+Dc_rL)u4Zc=rz5UG4xVbLlwH@L_WIYPO{x!<9y_KTJ$YzAt1A&4?pJbFS6X4gU+1IATgCja|5(%%P2j=P*9f!#>Pn-r^2Kz4s z)S6rlsl!-rC%VxG&9Z%|h2$Ovxk;N;yB~86q%eza;J{Ru5>W#YJH4$MpX=2qwo%xz zBUG6Ee)c+1V|EdBpaz@QhRp@Z`wae|g6Tw{etq4G+HUV&o90z-vqY_4oQ%U_E6=m_ za-)LZVZDb{PDWNT5$iqgcSzXkLLdZ-&1@ubrmu~frIJN_5`~S>uu)%}lIY`mLf5pO zKKCo=H%oTQrTKjO~v~>+@;37C{Q#w#2m+%`fLjqBLTw^4#iGqKi}J}ryDEzw(DrA zxt?WV9iOjiC(f`MH`Qd7B5*_4uTu#g4_`zpaF%7lmNc!-tY>*|_3FTBd#TsQFMqW6r*ZN`o2^ z7oF06Tk$(7$HxB{A1?W$%f8g-Y6YT8*cfM{7cg9p5vQ!XcTzAUggt`(lW%HX08t~o z!|a%ZGiRJPOYN*yz#K9L*IM9uYL22m^HynwnQl!Xt01?#x;rwa{XBdO=huaS1D>+XoyXjn4Z&4|6gD1r~;nDZ$_1z{}951|_*G z^}FUFw)JZt3oDm6;-TPBAdrG$Hfx$pc)y@Hj12Y9;r!wI4o2{IrCCWU@GR)&NmDzl4SVI|r;i}38UAfl={smIK${Ab|y_p3t) zW~%49KPq3cqYBQpWlel8xk|2(Cz#Tq8yI{@W@*#&0`s^=xPE zUl@2#DNNS)-kx6k54@uUYXgukU^v^1<{uDvk^mKqC)8Pq_Xj1$3fm(A$dS=EEA!vM zyayWH!}b4l+rN-vCzUW6b;G@f>mMXZ3M~XQI>jQ2i2Da^!lgh3L;ep9W>urcT+!aD zqZ&ZMe`DQPKN2|W4}Dt_JUD>a{~%uf98CL>bS|bM?A5`4O(fYt0#jF3MsI0&Pu9=+ zFAx@?67FBlS>O53h4;Xm`}7>?CH}Rg%Cjv$Wz+n}mcX3xd32m%Ok5JC)7zb}i9N$58)`BAr6!ju=Ut`n$jHRpTOukcm-si732|{` z06Jj4K|sYL4G#~;PA=ZXPiD}eE}bd+=FCROVM*zIdr|ECn3l{!LnHBcfBqiWi|YY+ ztFgYmKE%#q^gd)HO+eE2htzhpbHO3)!d8sXQ*2)pq0I4etIRQ4=?Z`!lioei z$KMCsOV<*PA1X=^Qvsnw(hvz_s_W4#*}2bCYu7dqSZdDK*=QNG*^jI`Hc|>Ptz2}^ z&CSK9r_d?JDPj`h($!i{vpz(Pnr24NvWm(Y7<{%~sFS<=6~V$Jq(@Fp4wvJ)?@HMr zw&VZ4fE;GU`z|xm$GYZian99d!uug?b!`JkQvc2~yp?$6(PMlAK*T(Wm{(gS=n>w> z(VprZ`Bl3?Sn{z_3Dl~bo>9Z0B7IKd0yL9_?^BrCu0`dA9xhmI?mgzm9dEW$((g`> zZ+vA!qlt$$J)Q!uOfG(XcU-Wk4{ims0ieC{;c|gWK%flPlj46srDHQouNm*Ggbg{}rhOH?OtgN6w%I9{(p4;|fe@3R+^^l5} znisE(-c#OO-RJSfjAtjqX=u7EFF!w3zQ5`Pl2Y%<55D`8ZkddS89m=55}#`kUguw= z6ylMuE6YtHlBs+`7h>}AD7#T2?N>ao45{B|(Yuq8d*3b9JMLt!jHAsp7~k^kuhM} zQdi%41?@JopHrsP_knAqhhI^Y+FG5pGYm2HUI=$Vk)oTm|6GdYfC-kpRPC1Cr?EQ zf63pJNM-Uk72wC}gIQhnRB~-Zc-#WgZh_b@4xn6+vTp3(f7PnTx%VhYqEjDQuxq!G z-EBb>7*x4$wU{h$oXby?tCz-7_Z7P`WEK-r1%wheip&*Kj;$Qs#Z{EsdpkPR=FC`)CV(&DHyTm*A4y920^D{`Dh2Vi#5L{zR-3G@}*J{vBWj;n8eV@;_4a*r<|0 zu@MqER#yQ)_6HT!C!eb&w>~0NHjJs;)YQ}}`?W4i51*{tYW!GXCrE6pf+2}7u$#lB z2+P|>&mikNzR0?xmP>~SE?5;Gv z`f$P2vhX%=-Dj4(2~MU(K;O)25x_$ACI_Rj9Hld$sd243TScZ_mEZAWpV1|FuIk0? z1S3DL{kj4`ab)|$m+&Gx*72~C8e4!`H!P~V7w&!!(28c8;K zBLmfigwS(ZyB?Lj5b~SQ_;9|q%H!OWtr6jaI$e{ahN&bPVi{x>PiiUYjm56Tc77Nx zMTg;3DDJC_D1Ktlux`l7(vNyOJ+=hXo3kxe;2`{W(?<5p}^u)u=$B-&!y?;?vy7u z#qXUrSfjkNmw_wQv=rfO6M$A&n^OO^_hzY=4Z z77&SMQj$)Ezgy&`{~X?_1M7q_A}yEB!Qn%AIA6zx_V&Btched(B9Qvmv)yxypKe*4 zueyk3-~E#Hx!t8193AA41oMO0h$cKT+}Fcj!gN1~^8_9C%e+Vv7*XpOz%4O@M6FhM z0{jVXHWC5hCO}3tPCwg(6a5@rVA5CH+)uxAF+iDh?r*mU|2G zoX9bN?M6S%T!jrxm73@hu7si+w9V`_PBO-qi=+X!%wl3t; z-)#<$Cun@Xnv@q9<-Q(EWs|70rCWzH(=CGQEYoZEF+p)aK_Y^KhOhuswNWac+c$Qr zdD$E!>mLo_7Xk%#r;0IrN8DI;>j1CDCBMZiWH8~FmX-#QBn89e*x+9sam!ZGt44-l8wb-+Qht;Yq2c<>NzM5TuzPu95`C4#=7y zb<~6A@g#>pq9JiCHLPLffxn8i4Rh$(Yo{F z!ou1HY^qV2)z-GQWd4B^P%E(4L>*>_0F34Q?)EwJRMuU0tq0}z`8gB69gYW(<0vx2 z@c}|Y5G!;LuU|2UrPs?sbJZyItJRy%?=uTs<(=lD!0eL@;Fv_q;*qjbq6j%54VYjJ z(iY(&XqBMhelM4zf?f2DJ2n3jbYi%lE!StmOi>Jz3-g?9F&zSw3LY>Jo-hq2u)=Bu zia$bH%8z38a$RxaD1Hr7sCm(69J~+i(1&G2{N=P35A~E1a1T=*jk#X8##K{1i{7tC zcirumMMdPvLRYL>np~v|5AojP57I=Pm{|1%v0g`~P+1>COuAJBq2b8HB%l$cxm6v% z7N2=I9Cu>aGl}@6qJYhrU(;riF0S4L8wuVUToa{G_pCf08DQzva~OYk`4)&`n9%DN zi_pihh=DKZ1@x0%elE=wGz=bkTk_JJo%J@HR`zZ4!C zUG~bK!LCHgh{E+iTV#)Ut{S$ewPC)PWhId*yYQG?( z*;q%-j7FY;VoZAOI1SuoFn`7Q!W!U?j-Dlw+^1lYNKeP8Bq)upj7=oCipUO3FFWFK z%Ts^@`U{u@z3^8!7053FbJkN5O8>zT91%cppXMSkNAL##fCvGI(6y~p{rL|@P^bp7 za>bf6319zU8UG3(l}ByO$nn3w6HXoO2_-9<;1?d8iT_}j)f|w9?O|S^{de=ziM5Pc|EUfxP0} zxCK148Rdct@_(5GtO64~n%-OIYNN0Z9-`Sf$Wv(hSoW_CS%4Inf!FDr^FQV?0n8Fr@dyA|BNE>8HH_?_BZ`ATs*8CFjgOKw%i}+=C42v7&Ni`)&Ac@ z5QZ_3^%IrF)AQo|2L+3!0*~qcnt?5K@52w$B40mXw$iB@a@ip- z4&HOK0?)Fx(1OD@BR@@!tWPN=FzFxvTgCJ{ ziC_AXT1M!RU`*r`DQWPzfe6i^uMeT#P28H;9WxB6?#s5;`w*5|loYFO z*Z-uy#Yhe9lAT+gM8fB?s)SNPH>>oLX$#$JkH7E~&&Qny{c#_CIT%;k(}A|U)*1T0Qltpm}~q`$X4TvYS_c?j)lUdmrNQ> z7pkhN_;JK5v>!Cc{;Zm!N;tzNSFDA-X^uK?e_K2b7JurIjeq$QxFEpW{q(m){^dzv za(wJl3 z|4XBQf%OX$kc0^EfPWJ;Aa=l<|8F>dZ-)OHtz-WZ2M6Jn=4CS(F6(VA^y4{Pw&0bp-b2P6Qo!04V^c zL?Oa(*=yjokDv8i`nN|7jf4)ag7b{ZSAJ>4{&U`tLY{plL2z8|AD>y}0zAYg*GS}F z*VD%YTu=6vpX(pj^IHKLT}MU3|Leg4Qh*0D@18II>%l&Nzix2x;sDBuKb}Vo^xK&? z{w%5ad$nH!ZXfwSc`)>hJ+lFW)SKgnj*W1>vcTLv%XDmQvJo|@mlsSeHhEWee+;v! zDp#eOo2iT1oGztVcb2{w%T%)3dK11>Cs#U**wkW`oRC2AtOVE^P97f9;iF2sIPb4oGCq#PmDs#g(%Hw?)1_2C4+tiPnLe}I zm=7!DgBCH#hlQxgHYwVMaCj-p=8~?5klZ@kB-4%MgxhLU&Ad8tp7ZTbrCMCWQ)Ym? z#BoxNYp^RAg^G<$+0n_Vcg-G8qyQlF&N^Vx2k;BC$u2<=bgT4YDx0O{ZSj0Z4PwYB zC{$!*B7H6F;vrewQ=%L-@~Q>0spQXGSiLB~zMY*xQcO-_JGZt`b~4>v?V1lcZvdeZ z6(8RM|FCPb&ickizCm}$86d$J0(ds8v9Ojp@4oW(p-~Enp)3K>P!nN!+=U2iK51ngcW$nVw1Sk#UBbYWip9lN%8%>x zK|`j2y0=LT`QcLg3o@LGKFzb$Rg@m{>{8m-G2AYj$;-#wg9qQ0A3fI{!W#}xLcyS}WIs=W5Yu>p4A{nE3MM@$T59_Y}P!l&bJP+L>e z6(D^XpqacJGht7*wY8I^PFZ$kGl4;H)U8$`6^t;U6+nuIMYv&uTTct^+yT}n<)@*d zN;RtmVC=JmW%433YzOa-Y(kh0b}ghhOjuU74C5@P_ADt!ajD8A;;p#&r%_WKtnl(% z#E*P%klK1}CcZI2E%IrYANF1D#kF3+4MZ66%k||4JeL}C?&qWHk}@eF?f00!_Eh$+ zlQ9g>_9%yMpPHvZ%wMxT#5ow9YM|dqe+g0cO_IaSrlC#IenV*2B4WAZQUA8MILJZ> zx|iLc3r-VYAa;eByM6&o?kUPq0ij*ImTlv^w%c1ekM(ex&F14aiY8=G178B5RvS(= z%d(JlRybw5p|0>4HmyGYTEC3x+#;(=17-8GCmd^3e`B{WI~jQ5*h2j?x}IP0i#kRw z`UveHX8b%nje9i3pQ)k+x6M-py_?2=ilpEEkYO5Rn{ThNnvqB2J7CWC=ys71Pl=A_ zG>?5-GO>6WPLn@&A8eQ)8kpP3#Ab50DpK`0#%J7ZQ!m{**DmwcM{Pn;Q#^9qdPV+> zfGfVI{ZYw2;^hc5o%&nb0(J8olSF zavFhtvsWbNG*zT%>Kuuy@8i>E=HSEh4r**duVl#i@?h@A2b(UgW%t~Ul)z#y7_I5e z2t|9P!@M&#$MW|uc;bPPqDA1f7-@nt(9h# zeXNhBIM#+zt@+thv69&lf4IVL@7>MW6e`X`uT10yX2!OQql(8D)4vWaLz>Tq=tfb- zOqoilqoN|PxvQ~XzLb3X_N~TwNzv*4OnC|*Eh~QCsGQ|}scEqoChGKVq(aC<>(eRW zCnZ8&wf$)!WVyM87Us+y*FaLcJHD zX$b9eW@f`zfvfRbjj|jaJJQP>Z=(kwJuxz7%d44_Wtp+oehQ3Y%?hp){Gsz`sY%9* z0d3t&`JxT+Y6FF-jg+~4sl*mVb{VPXs}4nmIE z2G`5f7#U+w7y2-WWvh0{A|~!aur;dC`A1nQX1l48$6VuhAe1R@3&4kLmp{|k$E{Z% z54L80zyVx2Ww!Tas`KGbRojNOkRQ!A%|tMK(-`1M-!<(=K%|8yg5dKOLWU?YwbmV) zj_>%=xJ3-mjpcrC^IKbvY;}Bu-x&rJO(XPT+$W+5&zTBWxs$*%kLTIlEqJY+k~%8R%Fko~FXkH`jGLUoZC?y}o0YZI`W>+>3p z#0QFP0kSEEY_Bt<2aFc|UTf}aT?6VxkDY8Y-X%_(dAv?|HcMbz6`~-`@){asJz8?; zqwK=x)D=#i57OY<=#RmbE$u6l8;LbKlkeCbO8RNnPN&G{Hu#f{F~y|3^#eHtJF^X- zEo^Fk&@}X9_SNVvQbqH3e!*C$R*Q&n8*hDn!G>8ake{)*2oHm|yKVxak>PK+?x~|q zpc$U8wL%(1fd+X&R0F@CRPrXBSZ5l77MPW{K-SAOgKtCoP-7?M`9??l?o4i(&VJA6 zJd>~5uij#~i`I%RYx9dg;sn66_u)sk40HVv0) zkCiWIN4+VvVq~Is_cIyV#6nIsq>o3laIz6u#nJXNb=>9(21!UUISi0n%0eY(Rmos1 z+}zn3zJ0O31t>OC>Q%+g_apIHt+r*um46FPLc=I<_yQ6|@m0^u#+@QsZodMhmA#^J z=#k`FtC?hfSVU&XxTbk&wvOv`+;Q;k8)Egt*QfXgAw>N)vyx2 zmfZj5TA^$N5~HxhsqBxg$fJ@;Em}E@HU-fW3{xznHqCX80RM%D?XxqMX);%3Qu5Qc zE?xpT#v1QI5Rmi*;4Vu>UC-q?U=0qA@thPY&n{Uh7zCkCA{q51ws7T`G(OXqP0PxD z4m$zW$5aI2gh&M#kW7d)CX^T@x3Js6uce)Qu~0Pe+zPj2UClaY%|X}`b$l2QL4((g zBhOZ%GG22LYGynkGG@H-&S0TAUP99kjoN%UXI@@RWob1Sy+Z7+0 zn<#=I1n*^zET6$ZxV0224i=vI@Urjvyqcjd@qO7o)C|ja5SS5>Wg>f=gO&Dnq%bb! z%-rv^lUcfOE)lonUV#3!&jC}0Gm?m-3eE<^fWKE6^PNcLE@7J9EfE2$r7i$`M}^i! zLLJY}EbM1c_N9soj@nGh&$Yepep#+^K(P3&?zZ+&slANeg>k$*!5EIHJhjv!cPj|8`0=;N?QD!OT(x49{~^_0R`UXKU?0@$`ld^YhA)K}y&(LPhoJ&2b$-hn(wNR!&FOS$hF zyRP)!hV)(d$RdWU9?%)|VJZO%6)%%DSE`dTV6QKWaVcQ7$t;F}A)x5P-c``UOYaMy zJ;|IaegqQ3KQ)NgtAs~bWRO_k!=*~TH2nZEOYNb~t_Q~S#wD#0QUjBRbT!Ge4q_PK zOa?NwA2^0j)H3p8=|+O$gQ09q4=IP3d);%|B!U3W94!S>3rDuowErzZx9OIlpp=c6 zbYd%vvCqP5{=&j>OI00NHYE#bn`ZmK7E}&x zq9Q)Ytb09ISRgN3?fNT+(owx+hb-W1={dJ=++y8ufGMS#o*~8;)uim3?EUp5HrZPt zx3)W46=}iAA|Pj?dO)gDVKD~_VK5*VB~px3+#xK~ulLnw7L6+7@NnS>P4cfb-EHfi z=;)Q4tW;o`xantB>1=)=5=JN6H}IbgPz;am@8fZJdtMzaMNz!@GPVo|k4;k}jG}q^ z%(Yk9qwuAaT?$^@n}C@@fG4+t0Zt}s(dXs8*PVbC(-0Z(Dl5GJbkqbZ#KE<1nvEtW~bQJJILQb3u=0Vu6%xVWu@}sQ0Z%cP9_Znt2f^x$CM`J z==6wjf}@J=R^|cta5$AqT^mPHxyx+hcE6mfjrbQS>1sG^QT6StCU4u;*!pW8&T&04RotTNSe~ol|McoBWX$K;5 zre1qb-04sCvZmp2WAz@@|NdgQl^hNJ9?(GU-e+nVNc8NeteETk$L!mRNN<4RvF6XUu5gOC9?^UQmNuG(~rRq+c` z(+PQH6VygCcIVv2Y`p}pCHt~U)M?G{FDR;aKNQT!IamdmIkEGwaOh)Ak6W3-Wm2?6 zQDCKkq#N8$Jn^FD*Sv6A+wdXR)F$_t{ysE^xhSZn<7Y1Uq=j=a- zUChvau9|2>{4T<#nkAh44XfUClmH6}pUqldEnqhRMs^E7L{y&6!jRvChu9%r{e3M{ zE!Jpc{=kwad%Rr}GSkmbkoRPL=OwDA%~ZjVH+BAhgkk{_9VMc&Ct)gwBSdNHQMmtM zKQsUu5HCU-q!#!O7n5TN&?+kb@0!2aq5nJW-hfn*ht81c^+e#LO zQXe#X=<2|mnI{4xLZL8GmOAT>emlBS=d!PsvXZa)7as@kb)upHKz$HbkXA=Yg0MSQ z#a6wA3|Zf}C#hSPyMxQYFEa}q3LyQ-32kW@;0^Eo_{*R$!e&D};3UDXyVCV*_B+io zQXxHU3=B9CKxWbfM}CbOdNPgjP{PM)heLR0(9T3j?D-(xAMh_v*9piNsUa60w*Sz5 z(CyC>IYQ#UILW`LIygYa2+{ws)A%plcMqg=`s|$PCI2A}!Lk6+93Yjw^Cx)#$mr7n z_iq1QN%{|ID9rqvDWdkyO8>{-JM4f)_y2;3q3lG@}N(0~no!luj1$r0vtJ$T*v@ppWk&BDh~5?jJ^ z$8+P(fOZpg%aUhy4~X^Gu|!N#@A!pZEW{v|8`{!}?=Y*ezE=B>otc4z-iJtvnYX&ZR^YGKIdogQ)f$G}-_4-+>8`-uD? z$Oxy6@xv&Wlv<&@5*{HPW2l&Qa4=?EDsA}rQ!=NKZd}pD6x2E>Q_P5x)2I)%asOL0 zB^6b#GZBE{xQOj{)mEX~H{)fDfjGSih@{y*$pDNwpqBGEALYsi$guo~plLgh%axFQ zyBB~e;Er5(s5g1u=-gR2gqBU zvc=!MOYM|-#3^5F{S|a!0y$)M$P(<_mg%LjQA{^!rF6N3# zOwTtaP_K<}8i6Bqx1$?7uw?M2=fGC{820Q@QPxVPIkT9vLLC5G{WdBlH+c$Jnl2 zSDXWTIK0{!NTmkf19-_$JeAC5)i7g1{qjc{Ai&0S%{6F&dQxS;;r$L&pehr6Jl@*c z!Y{}oI&G~Qkx3~nZvT#Sf4N}C>bNO6S7(#{{YZp)Y&uRmJg*=IP`CV8EOl^jU^Sm0 z&Gi-uJqOD3@E^GmhO%6KY8uvSEq3XAad>4sHR;Or;2ke`R`Xr;1-| zHJg6*0wj^Fo|o2**Xt1`XPbjcKt1Ra9kwCWXDN@{-NG#ZH{+&{nl1<8<*8DyEoYu= z!6~B!xD=ozX3CqHeEJFD4`xA%pRcdCR)8+3P-Ae|Bkig5jA@V-2pk)DJy@!zccyxd zTkn`O>pZc;@U8@BK~3Yq)lkOV@NA!QxJi*KLRkXG#rIzELmQj?7q_F=+f$NyuKOxt z)mp0K>5TmEKeXPp&E{3O`!;y_D^yA5>qPRNbXgX_EN{KZ;eWb6*ToR-@Bk{95dh*CYi8g7ng5@T3@azX9#kg|?CC@YF=tr&udamj>*#zaf{DIc1Wh(>*t|jM$=P*Bs zRxS6;xYnFjYfMPp6;RmqSkJzW5`2*5EEb>Ea(u^=CyaVtoiK7H)17c!Sn8>}w;*yc2Ez2_+c6a6%BDq&U$3tT10+bU~?lO3%>wmWDffwvRTTNRX4GtoiB!9a42Y%i z1>q-Uy@2Q%m2kcK@52up@gMeoMu=t3A*)y=%zcYW;Wwy|I%c{i)&~6T3|J$>ajntx z-)R%6nJs=$vIPW=%k2OBDs#-435ZBC$ai;lp9>C?=JXP{xOL<$zKmIJ)L^xph7j6E zzb^gfw*aV$UE{B|)#4hj0;kHp{(2n^28>W@_T%~m11_GZ6&BhycMX>4IYo(x$6@VE z9>A>^9AYo=*)u)?+sbHjHBbubm|%HjWN7&2jT-FLLQg@PZB$fzfuB0Q|jI@|P1n0I5}Ag)KXDmH={MY?ww@yvt3I*X)wi0`*!BUt~7Jc^42k8CjNaNLeLU~#iGDT`x2q_@` zq_eC;k5n~zg@(Guk0gg$;~}}V6xbb#j(dM2%^cHp5I#n!Z91fSxeUu@-mL%TG)W&O zm>RoH5*7jVHO1!j8{DAJrg*|Gn(pa70Kft<~+;4gmiEr`Pe)cYf(gVivm?~W1l`vg*`+M z3_P#$Eg#dR>}7&mfXgLB^cfK(^67+Mt_m9DROhMo8jjx9#z5nsnO2h<5vo!iRY)&y zlV%{FC)sxqZa%L}eiB=_wlJ7Zusuzo^UX|D7bBP*@V=E7c?cT zusT{VyU~RpwBI0#=R?B;f+F7akRcksxuB;a64;EQQ?G7Z1o=Dr>lcNoQd`PznsL*% zQ*=KL%7!#NwcWu7fB`P}<(^+Tv!J}|)v=i=vc#@8Zh1BDA%Pa17ROxUX!`J8KS@H1 zx?Vyb7ERKxW;(Z!z+n?4vVxx_wLezV?M%*J%nbh=X2L2=i?n2VoZ-go#7S{=CXrHC zwOG&geLe6gbDcCfNRiX@2GzU6opjqa%{q(1PdC3Hu7@gw=4_eBD2FIPcoKcDDy{g@3(k-_ zEHF*KoEg$|e8$Y>-3%7)ehcGI?N?OI9N59N2CVv&>TyB7iNZ3Le&4;_!pJ9-0(^=e z$0WQJVr4I7J^HOP-wQsz{qm*wyQ7{xXhhHFcYbO>G#(%1rN2M1@)lB$%{=`fiMufQ zx)S7Gqj`3VkbzL!bH7CF7_Q5?xWD#s@;4gDsw>VXrSM;>$fyWL%df%v=N z96pwLB(D3Fx5Yw6(PhmRL1f1YW}NAzhM{>wdIf2zSdVP>M@v~%OJ=a&h|COCW75dvk>by>#cj%=l0@ixw$aGQLGjZ2>vUu11 zfF+|%nuS4>ecXI3C^eC9?O280!zOAkLkSAT8^N|Jcj*{Wc}q%dlFoa4dzsq93i})Q zv5XorG0N)6wdv?lC3R$i)TVPEF5h6qy(>&CT8xr6wZ-#8_!x9|D)WH|)JnDNo%W<9 zm!(dzG(nS$Kfd%vY?f7zpM7NS$>}ifUHHhQi(*fKbS(u{$ulwcc(vkdijN9smP-wo4w|Xd=4q)pz~+P^B{?&}}%1B$JXft4=IL5A2P$b8iOQWm9bSc-nNttR#wI z6*Ge)dXh`!3+48#!ZsgG;pJqzZ4JqXZ=)GCh$lq1i11oPxHW4nlROmG?qCj4#huv9 z#@P3Nt_Fh`WH-bSe;OerT~=oOq=71Q4DtvS|NJdPQaCdD=6uKVEBAdB+P=HSEW_J9 z?7qh+ohIiviWvSMC*8ctx#CgrK+*`=@VD?VR40PWC*gz%peO=MsB08#P;`4Y|`S!3e=d~Q*g}4;>Md^ zFPx&2Ix2OO%7c<1B)~7eILtDfeK=G7Zn=nNU~({9*{6xywZc%pXh`Jo|FQR$L3MO( zyI>%=TS9_E@ZjzqY~vQ(B@o=*3GVLh?yf{|v`rY_B#z`0&Q3xR>%mfjNb*#zZc;l~Zbl>(29NjKFK(M@mL( znwtZ=4>(*8%(6+#9u%w|JtNy5*qPK$Rtzl?5pfDG@ZNh*P0TZKO7phJHc<(?GW(4!IJXr}7Sj73Z7#~2NM ze%;AWrE$@47k2b*PaI+!Q~pfOMnys=l{;OQZ{#D;Y$R-KOkvS;tchw@!KcGt8NbhK z%KgPTm8H>OM8H3}<`_p*QmfS`^e_;1Xe;Sxq<+$=F2)$ai25%>bL{N08*a|&`cOO# zj-JIRQz$_~$b2QZ(vr4X12NfjEZ(%$N2C^QfPVgZ#K%sK%|Uo}6>04j+8 zD2g)#fI=3fP&dNgs+!W9I5_CLpWT0%x`3Ni1W-hSL#2QJPd&`@jp|ytp{SGkS7b~H zd@D~tXy|`*z;A77e*+pWaa2?$`=>hR1qXbq5CxU-KSfgDuW}?%X!}36^FJN*|6K39 z)p3*I80mc+!2Kd4Hz=vD+M?Bf`X`lihk1SQ#Dm%hLs0g?FTuyNFN+u@4}yV#Ve75-_2xqqN2B2^O3qi%c+zyJzx5|_BI_Hx z&bxL&?^;zP0m7X%y2;AhwYy5Dx8JftQU{=M49T$C&yB}p0D~g)UmfB+ZTa#>sBk^& zgpMskW{l!1c%yG0e2=((Q!l}S1ANKo;<6_3m)rJN*cy6&jt?I{!ujSvaRF%BBBeOqTojP6M_u_*Vjt~bp`<)I)wpl_LpczqzI6uc9)ToZ^fBOdXG+lAQt*;x$WK$%AE<{Gb8!^-l`ma38U_xF=R zG&XMoW3b$GuA=j~dTG@Dc%fg%-%o4qqGpOI@%7f#>!BSqOEXbpEMJ~Nr)USTaNl&I z=$qN*%T3^hfK>*|`fBS(IG<4E9LxV(y}x#PZ_MNIm{p~G)YRFzNu>kj=L-T3+nDRE zD!CAAR%x}-=#7dC3=P1ZWF5tx;ST~7>i{7T+Xk8F{$$)i&8ZL&SsJ$H030cp6G5&` z#~0KuPSAKb@q*)~hgx!#1@e}+N08ZI1=5(){ z&Mrs{;N09UL7;MxJL2Y}{Ux!gWY+i=XFC$zRi424xHq~OO_*ETDZi0^OWaRd_65w{ z!z#=$iI_#wK+yM~FNb4&yhVG?5V8T4gJJyd^(U`q0~u+gOsLh#Q}JB?{B&bftBtC4 zSSDnDh@uJ!#{8Zmc*NmHCxCymm7Xs)c*~0f$5kF%+8g>wqf_U!aW^eGB?V_c?~u(6 z(7N|9ceItazck%BIBB8y9*&FPQ`3S%7wgRqSw6Fyk;=jK_>ekOgG6pi(T^~Tge>|{;xGmCtuKymY2pE9rFEwxGSVi{=-`TL? zM5U%uyG#cst!Lx_w*#ii<9RZF_A76UG>^2|7G^U&ceyIlmMdK`YzF06 z@Y?RrAE;S0=(&l$s_D*@Mb4DBkivc)G&#PgSps%te@)ns-0+*F4p)O=D5Q0#mQf%T(+eJAMaBcEU7>}-}8cZ`vCq7p`pp`u5 z+p{@uo*cV29PQ7J;{49Tl{{qa+n0-5&yMsGUVCHo0zIovS2Z}1`~xtqAVHZKk0;hl z+9vt&X<}lcYe2|5o~H&}*$4{$G?TFxuCtK?>uc)E{VskZpgteQm>+SbO#?uI33X=g zH(99_8{nx)5U*v`_;h;sDh51bDVhsEfEKRK6dc8A@c_e!3iu7h9E#+G^_04ffwUh1HTed*IT6JQxoTi~A{} z{xeO*vYQbeQHaQ?YwO5|%gaU}e)&(Hxyas-^*G(li30@F{DbAhKBZE_(NLO(jN(eGpst5e3Wi z&9|q!=s8T<=z`+1xE5L-Or!EI-!d^H$99*?ZVk4M9Rl1sb(irnpCfnx1J!g7WLxH) z;z`u6$uxL0oC?~(a-}-0{qn?`t409-O>Du_t4g}I@GCw(b*ioG_?_Kh?ee!BEhC|l zlIQlwC?0?qZLvUw*nZb_)dPHfuuNWx{`q_W3Nh!>%t35Ra}}#o5V0!B?^E*8$%mqn@Z$&&9p_Av#J6J@7g>CBf&&_vH!NZqOUI0ILC3=4{Ke=$U57!}O z$?bnZdSpYav1tGnhG57~2@#pbJWv|F`tvuCHYg1&0)=qB4cAg9s`%i?3q8%0k*SAfuHmTFLCQm(k|w8`^U^UCZ3e7I)L)*>FXhqbVF7 zOQWo&WUKDGE_1FIPa7N{pQ=@HT~Z?}tIi(|4a(u@5XmGWkfeFOh+XbJnr@w#YY=}I zX_YPNwRoAw>;VsH=1X10Oxo-&;&udp+LK}C2Xw6X|3N*9nwkM`zl(K${3J|FEW}U= z#fd|U7ITFsN3WZs@oLI%f-I+KZh*&3i?ZToJFp!SKIF7sfCvwf{JCW*Ax~8}zrB8kfol}#M)(WZzUM-L9^YGQV+y3}s;e#~s zEP7hB)$OF_9Uz$06QFiORNi`%#P==SOi|JjqB|Iwl&po09vs2nH|(PTws42cs9*vG zE&rwG2*gOdK~x)KCo(J+!|cnrM4~J651+|x47Thrc`%eDpPU6T9yNa#ggnj!S!dht z>6y=NAUcX4ShpqE$)O zhXt>(^%$+i1?ALZE@QP?)kkP<&_%|DCo%ZBGjIv)skuQ--Ic79cYSQv8v9o$?&1bq zTfD((L4xker_eRU!-oNXG|e93FzR-1$m9|If>aUYH&U#B98R z=srl0{YstKrX8MO7r9}|bh;-?jW)322?mT#7y6r9i}z>0LoHQ^1QDMi6C%jb6@uaX z4Wq@m>(eBKMPR8vK=i=)J1}B%s3)wA1^ym|xy}1hrK$x=Q{>q@MOkvq1<|zSH2kLG z4u%1Td-7X?^@d85CLZEA8hh!u49kV!f+X1TvfobkdlfBz#@b&gI_`DpTzm(;+skw& zBMs@WLUDH)OXPmnd1SqBN)vA)ADMFSDV4P?y+Hw8HYKRfvqvk)VY-`Ea_SYqqfO5F z^viJBkLj{Gn;>7_p?BulNOx^fL3B~mO|fj(Dk6;m?@A_44wt4M>MF#%9Kd=($0-jo zn0qiIc_Tl^)f_|z#K;C_25DlwIr=vyFta45m5^{-nJ0RtvD|nSk4DZc2doQN8}i@1 zw>`m(eVl|JK}%j63YPlJm~TWg)}R{YdF^X}@}&RmOeEVD_!>??GNpf|Mpb zBlHqv9_W$)hhCTYsB3?6HAdsYqR?)!Qq?#W_nw!~mQUNB?1vJ;JEBD6SG+EwJh^zO zwR-*iC|yD*QjVp=TtAW+A1w*Z7x!VI{rA%mt1PKbpEC1U0%b})M{;Cijb#UI&o-;sAEqQFA&-zlg!S;n(PXd2~= zF$X{U7Oy;33vP0M9K^|!937J(MNxBT&~Hb9h;{ZE3X7%GB(~A#$|_Om1_VVy642iM ztFj9Y`7Xk0Tk~n2Ckbz6|`vIduf~a_ah^;zV*%=4Jfn%}VxkKH`hgo19Cf z8Cqa~AT+KWGC?PmBvA>3m+Ai2F?nH$*08aRQJcE}0 zXcb}u6h3wf*Y{|}r!@e#YR0qbo12-FBb*+ZZPSfYmAsx1$&b6}j|bVR%l%b=>y(A? z56!i2xa9|vhUp&EsO-=RYByat#%u;nTLsZN1KaWaGw}Y!C_n|XsPn=+3scjz6Jmqo zu%ueTvgP99*CS6zQ2CTBj^RAta=39%KpdQimM!t6;xe2K4tPta$a-ZTUh$YLTS`LL z)xGCPme(eQYefg_WYGF6SSdo*^NQ`IXGLC^cOXXLGf zHV$TGbT*Bw_Y6xGX-Q~zeU7B{jE%c2u6-TdsU3B;OXRmaFyF#p2HPH%r>_pt!6mjB zIW`NVsQV`akx6+%v_#;_1t`dnVkN&=u+U(crMrr6{w^s-0SvxKwret@vUDivG@4^a z6hdhFQdHN$o` z@IS#Oe-=A%8`(b>e5regpRBGF( zT=nhLgbP9vZ%NjY2qeD*y>N{tj1SBQ%h^cUd0VBE(S^L#g6mob%aCc z#+?^`qV%c$MCwjHmm}6rruy1Fcga-q=#E{UopQ|wJjY0T0-REYls_PS>(D{V*103I zJzh}!d4X zVGBK8Uk)~8FQyR@$7D^~Z1Mq{ALmfM(C0OEO;h4qdV&2(9=9YRo|}fb3%H!M6VBW- zxl~xCAX)O-{HBAX@omd_$H~y980j3Q@573%i8j|$+mD@mp7VCDyeh@sS%SkyX0a|= zND)4<;ykdOMSk&@95?!6DKz-uG0RmsddWsNZ)n8CIJWnZQ0~e3QqL(KL|vgc77xs) zZSFHqVdI>Sy*^>L<$G+}a^CmZw)yKS;HgY#!tD~!FxsUQKVB?X35#f>I9~!69U$QG z1Sa2kd?|s)I4C@&cN;YGrYGE=05b=Js`h_#iGPzk53=zzBm2IKPuMw?LP^Q&zmS;Q zDGdC~tJAW3g0`CZO=9eu?N9M4W7D((Y;&~a5#3>zBOQu{b!XXR3rS|$jd#LP7^mMd(U0reN5K%Pnc#<%j5F@;j+FM)b@P-R; zQ?xCe>o`%JsiF*;`*x(!d9nas=B5Gvt)khZ8AeVJ21Q(ykT^%u@MYIw)0Z%@UjmBZ z(s0Ltr}y)Ui^EFm>UUtbon}+ElTb0M1U0$Sz_s&1vN~KH4dA3Ln&%!i_@e4(M+P8z zGhM)dZb`mQ`38y7hM4L^W}1HSL~;hmfYx<+p6NV#&Uy?iqo|fwJxn+P#gVO;xK=fT zb3VQ1yU82NcoKx2{qvJjHLrk_gatmB$crGQxAnEfO{;>~his50D^Uh%QoN$0)i(LDYO-F4@zNMmo(gZ!T!C$7$X#spG_S{9YUx&i#Qn&qdZ_}jLEB?OE&AF}3*6w#= zLGBN-1JjsI_;{2X((-2FzCN% z`#yXxfRcm_>JTGKCoVtSu&Vgj;dSc`PZNQPCFZkbwkOjz1}GDqGOC4D9jQ!3=Y`(^ z{=uAAbWSgRyOQM00s(!v+*0{rQTm0HQx<#R)_bOr4nmY0;*;)1{e_=WvEI=iW!OD_T=BvjHyZtLk(c) z+>SsU3)QY(<VzB5X-IJdq9_#SP*j$W z3s+%CuqOzWZWu9ug+YrT-0X*>55@GMu(`lV$UaS%1x*1OR|d}`_ieDzR5nN%>tx;YeH zAcD5M^mM#SZc_s9P2$=OLd{r&-z zhBWrnkAkbNPi1a7`Da!rUCmA#oMP1hf1Y9K*4gFH%%XJq<&oBgP+(;-Ehs5$Afja? zo*2_CMrT$kaymbq$e?LQvNeywpSYl1;09AmJe@2(s%9FpEvR>x#aDvJyEmTX-C+p; z2qYFFv3+M5W=Ca>cw)l9rFMnrfP@p5=YK&eu?{^m_HE0`=JWR+ryF_(_J2%DNsik^ zlN%G?MC==0UB3-$Z@mr-mjC%3&Sgpkn;_tojv7@-xbPD|fJjBeYdEi*S6QEH^*m!C zifvrr(|TrnwFUbxVG>Hmy%vn~(+xj*bl1>jA?OT)$!~cGK<(eIc#NK1$NYSN1xbmU zh))j7-dohG3N634_9=FO=V3TG;U4mijGBMCM?UGxJ|w>j&r1@`>bU-;*z+aqVmPn- z=4o-2EGsAyj|7MnGNqD@QYPUy;k1ufIQoT6EfyWRP8&gHr{-Pqa)WL4NS9x`&3?Za zN$4pB;ZFZ&9t<9V3WnR|iYX{WQiLfc4%QQ&VL0ncuY!oVd6}%cD$R#f7kX|cfXW{2 zhY2UF1`|W5te8Q(k*1#S#8Gjg0P;SX1hAk@zC039)VcVo#S>k5$apj?FLF6ufuGuH zaam}Saklr1#3-#01GY)$KWgKiO2YD$P{_HJ2ME$Wy3~T-Y9H{CkbV+>39mG@je4cD zL4HG}l#}`Dq?n~rIi{7xi8SOT61zNlIm0D#4!bX-J4T53NDPf4w@!f%MtEX+2_ms~ z-+^=n$fCTBiG7>ud-2JluD2V-GMFI>x@&%Y41co^@=`+K3&SC2jKtVVIQP{Sslo#c zVQL`3DCy1kW81~vlpx~oWPko<#`qw1#Fd!(8w_e(6XqU2qmi4d|GLXcGtCF0OVU$Z zq9O3o75K2#x3z(<6!u;}_RGy%!lyK_t!aa8E35D7=-&}G=s%g67yK9YE`k$Dca z_4M>q>E6RRooJ0FGKZg?YC}kMDMOn*^=}RjTvc>+4_JeD*6_xK=~Ol2HYe3|AARDD zdy~p|MZgfi;wr`Ut-3#+8oBGewA^2W(im0!7$QMQCF@Q9a1VBd7DrI0_3-u&v zwSMOMDWHBN@**b%9y^E@uNbgZLs5h1#bZ)B69G)bV8Y&!N&9SeXaA)YPzigAhxE|E z6bt^9>)-(0+iA5S`ATj^eW-I4&H{% zf0RKY!27gJam4uV{}G-&FfxIabC5cAf3NQS_IlW)xPty+OLXW0qe}V6yMp8I)jNTf z(Q(M|zWsB9+VtQGx>WZ3%DDer-D?eK88!?({4b-T;uG)?ADanEkp8(kpC!;TL|>o? z0G9se29-nJ#eNFbKvDAl=jsG(;7CU8?wz>(*-5Ac(h?XBZf@1bOKFYyj64Gv$ zjGf`c4LmNk?uj>7cobvsnr@*7xU;AJKAf+0-r(Lak)FRJ<1uw*KibSp2QHeE!2lzG zoK$<45vS)n?L+a2a<#DOk-uPDgzXXH=YJ`%greTXCW!u9fhF+v_Vxd*z!C#`jOgDA zESN;#OA-H8U=hR01O^iSOMyk84}3}B-wLcqVxZlqf62kTB7iT!{%?FUo{%x0)B=u? zYt;kttAEhP4;qXoeG{o&GOrJK5rK_-cjl!7<87T8hq!JVN7MCa*+(N?aLO-FQ?uyM zM`_wPk$ID!8Mo;44u|tJ-}^Q9q1%>X)hs~adXHvgh)Rs=YivxdU)1yEsctk!JMWft zj@W!!v#8`Oja+;xbyyIb7==2SO8Yb6O_6o`wyqg8Ud!8z_D1aoEH{Y1FbY0gACkR! zMceL;5$^5K+?jcmP%0aQodQyVBj7~LA0N8&ewn8J>FQGY0^k_`0hkLtY1;8=t(1;(^1TLX%09yipLJ{RT%yUqXO-$GcuIJ;)jQIS{w&BeN>P=ANs`UN)n+VAO z!1m(-7j$VHq}TG;rUed_3T-bc^%@za5@j9AaUj!!eJ{gDf33qS^E)LRsBVV`Ff$K! z1t2y4S_XQ0*)X<^fQ+!v9Usb=e!!{1V81FCpcW9Na@a-j`#|-h`r{Ld^^3VD@08dK zq%_*-pW_D`Jpa0mii;!VcD{oXi z`uIc`HZbg-d{{*S>Zt&e%N?a2m_IlqDf|(wPpwYekIib*cxK}FvdZF~T%pHV)MOVQ z8?QzAq4}8fdVhao2AU?bP6-V|d*<~y{mSVL^)~v<`3k2dqRD?7fEta4f{~vH_MK_pob$_?4k+0H zvcxdU>1*p<7yQKrh}OyC;@%B#b&g6&IkM3zF-_tA8MkD6Ia~!qj}?x2LBt$PO)2yb z4aG!Dafq3>oD28=`ExeE5EsCV3bsHoq|N-5aJ38BcnfrJ$K%2j~kcWUTSsg+ftz{bLoCV-u3X zQuX_B>p|0=U{N=H_)&}=ZN$Yp-|1}wVh%)0ltqxo)}gqr64>fun7s>z_X+M7*3I$Q z<>YFk_c(4D#l}bK^ITXdKD$K72E<7aIx zP>^kK7qA{xZuSB|IK%JVR_=G-f}Usq`438RY2!CAiL(yg^E>pnb@cK~7sF>Y%xOIN zaP{@2ehF|O%G>0+Tk{FMhNNXU^YL2)L~V??XMo#Dd+Ik5i*51w7N_bClXrgO>34c3 zr*}UVUjT7he>dYO)AXFON#<& zj+G05@wT{j=-t+&^iV4&U}LX0&c2hNmxTyAJizX9ONfaf257Lx=Uj>lV5LJ^jkvcT z;f3}`ycHp>2MY5=H8s-^J~Id*%_1=aY}ottK70e9pw9q`HT}aV&HDwH)6Ue?Kt&}{ zwu1M53*Bq`zF{*gI&vX@?b(0#)#LRs{mnB)IFVic)avxH{#-X$!31KK?nD( zcu>*>RyXN~_YZ>;Y8J6cY25m2p{!zkZNboo`~6vyS%l`$pIGs{v}X>J9oUElvzp8$y#{?HO@k2`A&m zT`kCyT*4;67OFG_up+-W6GR57Iwy@5x#gOUvhU*Pb#_)dEZfDW04B$PkyZH}7mpH4 z*<@kgxSlXbQZiJc*)7Sw7ajXU?8Sw3BS4edBB`yrI+zFX+^xOe2mFooCNs|f=YX#x zzBcd&N>7b zqY-|WZc^1YXjDwMS#sD*AguVKZrx7;q&iuEw2njQ#DCe5DjA5J{Eka_OU!)pej0$p zR3|{@eX<1k3m>;NHF0=Vak@R&X2b9TQw>AL>pNLqh-?&(w^RsV-cB~Y5y5wxYN6#0 zeart!aXu(C9C$W3{tDC_(|f(}PC9{@1dX>qO2!JO>*?>Ic4P8&)V%WciyEdJY=A8t zGA?B>euLK0!cOPxD#3A_o@zZmBA-XoMv;d&U|0u=XEhXG&3_?*9fA6Jt?G93UBj(5 zhenOY4c|$5;T7RqF8_f%gZ}W{ropm`k$4bNk^jLdsm0vd{BmBpPI5~hhRk+Ery*8B zvnpI21>KKyHU1*M?b7<87Y1f%XHfqS+)87k<;&dodUtX4ihoD@K$nvpJ#_G)#~9h&{mk2!QoD_c^q&!NM7v> zV2dM}daNKJ1;oJg@;McBe1U3NHZ;Uj6xVpq?f2Mk@@7%XYfb_tUD%tJWu44^*ILU@Ke9^q>(A?!%JBdt5dU ztd_o8>H~EUBU@zb>}JhLAqQ{lZGC)k!pUJ!(_wo1G^*M9&AH{dEvE=1QrqMnbHvt? zWvLZ?a^ht@3C^XZoBVC-yrmU>HD9vQibVzOI7V+UrI67fk<2n2k~5yTR{v5Ar`-}z zy<)t8(8sIAgPpMBDSx1JT}??%ZPqPU6t=q-=r(`6`909fyJhvyGjXd%6T%dxy1bVG zq&p-Ec`zP@`gig@K45<_WUHYoXOkWe#HzuRu$~iSuK2&qtu_9#1D{NFEYn+HS44#R zaOK! zA6sFPz3;B0!#TQ*NcwU9!SLHULP}w~O5sb{2f<%KKWALU3KkcR8d6&cO~nzg=63Hf zRZDnxrU^d7d#s)`)bOTC*Dv1f@~Yn`PypUSrp}w4ovb>bMZrtOa7)u>;a#lrU1^@D zQ-4EDVZF8|78FVEeYCqt^(=Ym3ZCxhj+hW$j|*UR!dfM;ty{t6FI3ez17{Ksv7dk} z3Zb1u9Rkuwa)7eY&Kytc<6Vf!g+tkoC8W#8ujOqU^#F+EMASexas9_RG(*te`ywFA zCn|vA%bj&5qqpD#P4kg%7KqD0_nvX;aSR{5!gm_%b^{=LhF0yJ&izUmg4`$NFYjui&G!L^p-dg=`nhVPb6$J&eI6@4zM6@;! z-XsXG2Wo&|XPvfbFDoHj!o+uD6CMZfIOL=7n#>VVD*Qq!TnCd$Lqiky=EJ!b4;jr1 zAxk1tvYu?W<^^qTv~&9;+~Qhii~pee?$?`^Wt6#u&Qc-Nh`+*HBvUXarM|--C3DwN zI?Z~3f>a!Klq1dH?hgS6`iwG!NDZl?-z|IAvx~+f&U_9}fs8^G6Qo~umQLIk+2?h- z*sZDkD^*3}XIOO(0x8_1#%XI@B-l|E@EVA5kwG%8uQZ60M-K~!QK}Uq7J=6ycoc`y zpJ{1CvN*tQr}`a}^$QD|PD99u&4x{YLxmHxaNX^SLpec!XlmK<^-RH* z!2X$j@2})abOC6yv7W3Tc(AfxN!o#@0b=XSS|-|G4^U zPUUt6k5z+0W&ik%26Gb8=>v_;+i4{d&KTCUVz9Z+X~;Z-_sTk7 zgtJh1>7IYD^`lxNZ(r;iNmR~hyU8$xd`V@M#ts85Rg%pP?QebfCzaTIv2@7ueX zcXvjP@K1Uf-P*iV2(M4Oyx6FIs6BSa^_lx%Zk%3 zEKy?% zgr2-o-xd}=ZRRKp5L=zI5q>vfO0`#{IK!8yzeRSiL%pbpTKZSmnTo7X<*0VJn+leF zCTBbU!lL3am5F7~ttnUAzL$Tm*%FJ9%$9o^E!~gr<1gAz=pP`NzA060_|rqJiOBc#@rwLvcm`YlgRXbxMV!4WJ}i} zbMl5HR#n&@q%ED~t;o-22c=eE6T|oxf_v`QsQMck)nrBCM(OZF3^uW?4?72l`;psw z95<^AW!w`*&-X`fG+MRJCe)-;N671UW9f%NB9Q*i|cI|$Q^*qw;~mZS0WoM zQ$_#5Pn{d!4rab(aj)>AUatByA}0&*32^#?>z#QUai(qOC0j7uBIZ#={y_t3)^ECU z2`os24Q+bvtu?`r9+a?|iYy|2ybIBFo|OAuiRhl@eT(jc_E~(ZhLW};IjaI2$5+nN zC|kF5=2&}^>%;t|3o;GrZyt}yF=6a7N7IT}{rar1msLzHt)uX?Vu8XQ>~zmL@7pa! z9gnzqRKX{w4<@Bz?Mwuu#(g<_%u}&sygEnce%6V~os&L)ofv96BoVRcLr8T^owE~a z5z9}ae7HTgs+(I>I4y~11rWNE##=l+fi&x7jL*!@Q}&2Gdq{aZqwRM~#KwZ=$i$e% zWkrDR-k(q42GC#7LWC_PxM1@5B4W&Zb{O9%j@!Tnc*z{A|M$DXp;3-Qs!gW-(hkR) z>}b5kQ_*ZuT_I@bSx1yR6@D+lEmT)}P1o~pp(`eM_v>O4P<=m^eA=kI&I0Epv#~5k zyJVTui02;1l3{nhvPZsq_d!%lh+iRVJL67=@^cU~PTr>Mm^;D*9rqLny0QVvUD)a!l(_@=)TSp@Krb z5~{G^xD{X&oeBpf0f${@QMqY)W(9sz7ihbNrHm2P?dF$nRm|ahCGayZ4Q>m^hDq-Y zr(n^O9gvjsp%Tg09X!Ks0IO2dUp>`Fo@8p&INs&0JF5Fr^Mf|P#$j*Ob9{#P z0}1zQl&@1%x!(lGU0(+#up$X)aA)>rJ}EK9@YjsnaX9kjKr@``iVrU$_ckN`wk<>< zrwd59{J`w5w?4QI>(cj(MT>Ue79c7}Tqoo^d>7rvDmB~#&su~2o`yKx^`_AXJ5F5| z1jlgq5QWd2OnahohwxzI-pdV_j%Dfho|meol4iRZDcajZUH78;+Wm}w|Bl_;1nWur zsg~Q!&I>{28w#vxs>)~G*#K>6K1m=YSArg5k9f+r4-FlaBu{_KQl->p@1ZvytX?v9 zs0Z}y&G;FjyiIOm%D8s6*y16TQoO)Cz!oN6q^2DnC+ygfU>w*e3w1SJ+9|A$No5pH z6~CegQ+`_3UBSsS^6o`Yl!wJw%D7wus8px)=-wN?e9|zI4 z>$`H}O+hcmV-(WH^;wY4JhRgky}80|KO?WOqKasPi)eU&gFXuPH9%)FJ#u_h;tM}T z2n&Zc9(LOsem}}Y6qRvAnB$!8w#hhw^71vD>muM>!wW4`^oy1fPsO6@Jjy|^moTV} z2Cwf2xo9O#ELKW|M0E@&^Q~f;RJ=plWh002of20@h3Se}Lc>%zb*Xl(SdhOSI;+KC zzMmf|Z*Lnn;zoPAqGCsLd?hn1l&pP~G{K?~=>qm`wAUBM8HG_cZUKS^Brvsf` zr=^-w_W=eZK+sR1q<52#;^fYl#5>%iwxH8t8veL7oM-`MOMYB31I{Kc5O|&wVle57`HjZ?M8y#|SRDs3atGJLK&VGX{lX^YKJuEKoSH)%D)nF8JHij|W>Eb1ptuAPa zny?+t<*AZt%_@dMijaVuHSZZn?di2{uXgRRM(+(m#p#0fN5mzygt;OSW%(r|kRT0g z(76(g*Xu2>#zh`EsYvSt`x{<<9fmT1vz+PU5P2q zWZl#9xZ)z*dA_}NdU%^{rB>T^_+9e>xp05-`$WyM@qO{sz=jJ}+499x?|iuV0d%#B zlf}&bX6?b&;^%QOY*22QU|b9`9`R46_Ao|H5J&54T23jPR#S8Z^}GF{p*Vxt1Goe| z=EPXdd*2{&NwK9hg@Z%kxy!4-(61`9#@?x1sr6sk4@Bi@WWOXtynJ#pNO|zKJwQyV zF)T%xir3r055C^*+DyPYfg~9BA|gb`)4%)3gh+U`69A1C_!}IS$b=3V2N|C4&xgE&F<3ngqyeNDJY|iD&mU5mN|@-5^{{f>>|LUZp=k${Kadkv zJn4vmg(C;^UUCaJoqau{gR-FlhZWI|;m?oC8?{IcE6V({hTQ)LMFrfC{_TX0BGLAE z!pS(d2c%8HirwzMM=O2`Vk(77Inv?ptwG6puT~|bGi}FJj>5M51q1gzZ;a0>)(c%M zY!6yH;x^8ER4UPfL{*cYaqF7ztYc{=lneUVD|way@&bI^Fz=dp#+wjtF)-G&G0P+?%-}oxbP>N{HQH4?y@Mi<`D3NE z>BcS`U*0Lc7Ft{`@-^q(weXGx)i`=cM)-9ADRZQhmMgW`cMa;|QEm~F=?nGrM4gMe z+#dpiBd_=2w)c+a+0o_s>S`XphS934vAn05esUUuQh|B~RAPxvT7Vhy>{GG>XO~&v zIS*^Q$S+TMYPiEGUZ`vi&|MM@(iQ)+$bniSH{x3(wq&H~vvZ(^lkN>x&|I^HWk>rm5cl*Zk_k6jQ zr(nY(t=E=*doy6`@}K(xN42~@p{^l?$lCH~FRiE;JN96`tq~&l@L=(ER0oBtg<1W^!dA27xK zmB7RI2N)>6A^%F?Ap%C11o6KUcnHw}P@Uml2|NMB0AL>Z?*txS3E)eA{v8Jt1+*&^ z^{+S}ls6^@;lJa6MA3kD|98F_s*LVAfwGoAVKK{IlU3w@`@b8OjY#%=Jhe*Q5r=4z z^L5<95mn{)Sy8!h;eO2u88i?`wM5R$KTK}Cyjh{W7qLk?aE)cm9v)uQ7TyxkD} zmqbtpv1sd^Z12ND}ZjKoXp#e$PV(&8V45#rhIa zu5DFROtV!OF#0AbyuX*r50X45^cUTx`Auy68|t&`^7RCbMUQ=L(cY?7+!DRyhlCRV zeIqh{?ZMP7FN}?%&(77oUG9-prSvgxQmJy+D%kFt%sH@VN3Bmw{ySfxxP$A|c4LGu zsnsE@%F8L0#drb70sF5PH9d%MBJtryg9E`M@mc875zIzX5rp+CGors^6G#ukxrI%f zZ(;zLnAqWAGpeQV&(SG^OW9UBpb5qCs4C%HcT{wT>u#%UsibQE%Nyw?^{QaM=|ax4 z9^C>MzLHCrfI`kr`dCa^S5 zcnP*(h9y0rs`VGhY_@E|{l!&G33@GWqku9V3EzWiWJqG3$=-Bw`RQ-g6(0f`Ogh?^ z>!>RC)SPlZ5@xb#n0A~A{}1W{hMDc2nV1=llz6&aaWC?&;Ntk~=I_kK6ihx8YQMe^A_1+=aT z^uc=5#kno)Cj&G}%3%v;;?70Geq(F$*Z(1Bz1<1Qdx$QU)Tx-*enfe-pEyqFtRFz& zZN*t~O`|+=lZ}`5{>dqHCI*#_2lb05&&bJ()UbB78{(5s^g~;Rp}$uDnU6?eg@(|g zFNcw%az8s~S`u8EOZwwbu-&RtaNXiiaB6$ZUvGGb3%JF4r2(>cLGNZ@%ESa4>9{sF z-XN!#(W_&Je5CHc{kzD?N)qVCeR46&CH`PB(N0vY&$pBHjbU%3nb@rpT++Ed7$eQr z^vhgMm)(wwhQ0k}U7pr~o$5fYxWq-%FTLcG-S)q$tZp!0cg!cPPwOek&&#j23xB8$ zI7+u7^+Qd(6>bKvO-*hZYo#r!sT(UQ=6U}0tK$aOk=H#~*!=@o0}W<1pJ3FJwp~&; z!3b!io>&K~%_>}o-XQa0^{q&X;O);(9obA~`X`#nc$5Eqh)QV!Q}K|}6%spK4$=7p z`l|ho$VG##Yi)Z&L$U1$LehDS-ce`F83vj7`9Z;XfQEJ_Pi$8K{Mt#G4Da{uy6eSjFk8g9#8&G=&D4Nr`Y9c{dzU z05euPh6J1B01}tXtkOU{;IqIoLspriZq4($Bt%!*a)U*&VxeV~XCww7M~Wsl5eBR) z+F@qAfDDnhqOlU^Uq4M6uZl8V#N02Z7r{Au4V&GXD#kOM;&V-kOZLrEhf!d5sQ~r; zS17|-oEq^@LZbLOSf!4U_BEV&AoO{IoOYHx2TcQ1sF`B2Y*jZJcjR=L^C}oF8WkwD zpj1ZPZuQ}?E@yD{pNz>kSYO4!bA?=GOcN@uXQsmAiErv+V!f**{Ie1!w}Z43k3I3j z7Z7QBt-RBE!b;L?g5pS6U!{a7=S_t(`=4H1`rV#XDjR>cB3oRZD(EiY&`bZbadL+h z5(?xuJ3ybzDbuT)GBErR#gR`O7bhkMNcLb;HgkFCHHutp89t^=)nfN(9`i<*ug0DF z;wtFcgA2Vt{I~yoMG18KPmb)=dfLp3b9^IadNjXN?BB-{vLyEWrMT&O@y+45=z)D) z{O97t+PDC-s>Fs`8U63nq=b@zHVLQ9^*67vgX3+tx2sw~`gaVK67Z4aeW-B!yJ&gZ zy%Fk0YPBW*UQLxBShT-tpa0E<1R{w6VqWUc&ZNH+Y>hXtvsCKX_$TI;4}69YAoy|2 zdNcne`2Bd}ZkBrX2>$);ln4SlRJ$_BpMRHyF*x8cRKbG%|3-Z(`vZ)+Lv{EW-+vav zj1RzL)PR3P{u?q`fdsTX)A+Fj_U|bE3Ot4}Bo*F2$-Mtx?VyfzJh~2!+Q7Ob;(Q^s zP!+BJzTSY(;B}>H^-X$t%%=ZjzDDpZp{&`;EvcLQ&G*#}2HwkDQ<^E_e|x4I5$Gx_ ko5J~j-ev$b_$#vdrW4*!{r_5K00R(sy85}Sb4q9e0C7-`0ssI2 literal 0 HcmV?d00001 From 720ff8d20ba61c14d238fdd01228af7208552566 Mon Sep 17 00:00:00 2001 From: Brice Pissard Date: Wed, 26 Apr 2017 14:42:39 +0200 Subject: [PATCH 2/5] Fix the duplicated line --- components/Day.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/Day.js b/components/Day.js index cfde730..494d0e0 100644 --- a/components/Day.js +++ b/components/Day.js @@ -86,7 +86,7 @@ export default class Day extends Component { ) : ( - + {caption} From 7e218ff0147df6fa661cebc25a03cf5a0267a2fb Mon Sep 17 00:00:00 2001 From: Brice Pissard Date: Tue, 9 May 2017 00:26:36 +0200 Subject: [PATCH 3/5] Add a 'pastDayButton' customStyle --- README.md | 536 ++++++++++++++++++++++++++++++++++++ components/Calendar.js | 5 +- components/Day.js | 5 +- images/pastDayButton.png | Bin 0 -> 18820 bytes images/weekendDayButton.png | Bin 39114 -> 16209 bytes 5 files changed, 543 insertions(+), 3 deletions(-) create mode 100644 README.md create mode 100644 images/pastDayButton.png diff --git a/README.md b/README.md new file mode 100644 index 0000000..ac4e12a --- /dev/null +++ b/README.md @@ -0,0 +1,536 @@ +## react-native-calendar + +A `` component for React Native + +Portrait mode only + +## Installation + +`npm install react-native-calendar --save` + +## Usage +```javascript + this.onDateSelect(date)} // Callback after date selection + onSwipeNext={this.onSwipeNext} // Callback for forward swipe event + onSwipePrev={this.onSwipePrev} // Callback for back swipe event + onTouchNext={this.onTouchNext} // Callback for next touch event + onTouchPrev={this.onTouchPrev} // Callback for prev touch event + prevButtonText={'Prev'} // Text for previous button. Default: 'Prev' + removeClippedSubviews={false} // Set to false for us within Modals. Default: true + scrollEnabled={true} // False disables swiping. Default: False + selectedDate={'2015-08-15'} // Day to be selected + showControls={true} // False hides prev/next buttons. Default: False + showEventIndicators={true} // False hides event indicators. Default:False + startDate={'2015-08-01'} // The first month that will display. Default: current month + titleFormat={'MMMM YYYY'} // Format for displaying current month. Default: 'MMMM YYYY' + today={'2017-05-16'} // Defaults to today + weekStart={1} // Day on which week starts 0 - Sunday, 1 - Monday, 2 - Tuesday, etc, Default: 1 +/> +``` + +## Available custom styles + +There are a number of pre-defined styles in the calendar. Below, we will give an example of how each of them can be changed depending on your use case. + +### calendarContainer + +`calendarContainer` changes the background of the calendar. + +```js +const Schedule = () => { + const customStyle = { + calendarContainer: { + backgroundColor: 'blue', + }, + } + return +} +``` + +![calendarContainer](images/calendarContainer.png) + +### calendarControls + +`calendarControls` changes only the bar on the top that contains the month and year by default, but can also contain controls for changing the month. + +```js +const Schedule = () => { + const customStyle = { + calendarControls: { + backgroundColor: 'blue', + }, + } + return +} +``` + +![calendarControls](images/calendarControls.png) + +### calendarHeading + +`calendarHeading` changes the bar that contains the days of the week. + +```js +const Schedule = () => { + const customStyle = { + calendarHeading: { + backgroundColor: 'blue', + }, + } + return +} +``` + +![calendarHeading](images/calendarHeading.png) + +### controlButton + +`controlButton` shows the next and previous buttons that allow you to change the current month. The `showControls` prop must be passed through to `` in order for this style to take effect. + +```js +const Schedule = () => { + const customStyle = { + controlButton: { + backgroundColor: 'blue', + }, + } + return ( + + ) +} +``` + +![controlButton](images/controlButton.png) + +### controlButtonText + +`controlButtonText` applies styles to the text that is rendered when the `showControls` prop is `true`. The text can also be changed using the `prevButtonText` and `nextButtonText` props. + +```js +const Schedule = () => { + const customStyle = { + controlButtonText: { + color: 'blue', + }, + } + return ( + + ) +} +``` + +![controlButtonText](images/controlButtonText.png) + +### currentDayCircle + +`currentDayCircle` changes the style of the background behind the currently-selected day *when the currently-selected day is today*. + +```js +const Schedule = () => { + const customStyle = { + currentDayCircle: { + backgroundColor: 'blue', + }, + } + return +} +``` + +![currentDayCircle](images/currentDayCircle.png) + +### currentDayText + +`currentDayText` changes the style of the current day (defaults to `red`) to differentiate it from other days. + +```js +const Schedule = () => { + const customStyle = { + currentDayText: { + color: 'blue', + }, + } + return +} +``` + +![currentDayText](images/currentDayText.png) + +### day + +`day` changes the text of every day other than today and weekend days. + +```js +const Schedule = () => { + const customStyle = { + day: { + color: 'blue', + }, + } + return +} +``` + +![day](images/day.png) + +### dayButton + +`dayButton` changes the background behind all valid days. + +```js +const Schedule = () => { + const customStyle = { + dayButton: { + backgroundColor: 'blue', + }, + } + return +} +``` + +![dayButton](images/dayButton.png) + +### dayButtonFiller + +`dayButtonFiller` styles the background behind all invalid days. + +```js +const Schedule = () => { + const customStyle = { + dayButtonFiller: { + backgroundColor: 'blue', + }, + } + return +} +``` + +![dayButtonFiller](images/dayButtonFiller.png) + +### dayCircleFiller + +`dayCircleFiller` styles a circle around all days other than the active day. + +```js +const Schedule = () => { + const customStyle = { + dayCircleFiller: { + backgroundColor: 'blue', + }, + } + return +} +``` + +![dayCircleFiller](images/dayCircleFiller.png) + +### dayHeading + +`dayHeading` styles the text for non-weekend days in the day of the week bar. + +```js +const Schedule = () => { + const customStyle = { + dayHeading: { + color: 'blue', + }, + } + return ( + + ) +} +``` + +![dayHeading](images/dayHeading.png) + +### eventIndicator + +`eventIndicator` styles the event indicator bubble for days that have events. Must pass either an `events` array or `eventDates` array and have `showEventIndicators` passed as `true` for the event indicators to display. + +```js +const Schedule = () => { + const customStyle = { + eventIndicator: { + backgroundColor: 'blue', + width: 10, + height: 10, + }, + } + return ( + + ) +} +``` + +![eventIndicator](images/eventIndicator.png) + +### eventIndicatorFiller + +`eventIndicatorFiller` styles the event indicator space for days that do not have events. Must pass `showEventIndicators` as `true` for the event indicators to display. + +```js +const Schedule = () => { + const customStyle = { + eventIndicatorFiller: { + backgroundColor: 'blue', + width: 10, + height: 10, + }, + } + return ( + + ) +} +``` + +![eventIndicatorFiller](images/eventIndicatorFiller.png) + +### hasEventCircle + +`hasEventCircle` styles the circle around the days that have events associated with them. Must pass either an `events` array or `eventDates` array and have `showEventIndicators` passed as `true` for the event indicators to display. + +```js +const Schedule = () => { + const customStyle = { + hasEventCircle: { + backgroundColor: 'blue', + }, + } + return ( + + ) +} +``` + +![hasEventCircle](images/hasEventCircle.png) + +### hasEventDaySelectedCircle + +`hasEventDaySelectedCircle` styles the circle around the selected day that have events associated with them. Must pass either an `events` array or `eventDates` array and have `showEventIndicators` passed as `true` for the event indicators to display. + +```js +const Schedule = () => { + const customStyle = { + hasEventCircle: { + backgroundColor: 'blue', + }, + hasEventDaySelectedCircle: { + backgroundColor: 'red', + }, + } + return ( + + ) +} +``` + + + +### hasEventText + +`hasEventText` styles the text of the days that have events associated with them. Must pass either an `events` array or `eventDates` array and have `showEventIndicators` passed as `true` for the event indicators to display. + +```js +const Schedule = () => { + const customStyle = { + hasEventText: { + backgroundColor: 'blue', + }, + } + return ( + + ) +} +``` + +![hasEventText](images/hasEventText.png) + +### monthContainer + +`monthContainer` styles the background behind the month. + +```js +const Schedule = () => { + const customStyle = { + monthContainer: { + backgroundColor: 'blue', + }, + } + return +} +``` + +![monthContainer](images/monthContainer.png) + +### selectedDayCircle + +`selectedDayCircle` styles the circle behind any selected day other than today. + +```js +const Schedule = () => { + const customStyle = { + selectedDayCircle: { + backgroundColor: 'blue', + }, + } + return +} +``` + +![selectedDayCircle](images/selectedDayCircle.png) + +### selectedDayText + +`selectedDayText` styles the text of the currently-selected day. + +```js +const Schedule = () => { + const customStyle = { + selectedDayText: { + color: 'blue', + }, + } + return +} +``` + +![selectedDayText](images/selectedDayText.png) + +### title + +`title` styles the title at the top of the calendar. + +```js +const Schedule = () => { + const customStyle = { + title: { + color: 'blue', + }, + } + return +} +``` + +![title](images/title.png) + +### pastDayButton + +`pastDayButton` styles the past days background. + +```js +const Schedule = () => { + const customStyle = { + pastDayButton: { + backgroundColor: 'red', + }, + } + return +} +``` + +![weekendDayButton](images/pastDayButton.png) + +### weekendDayButton + +`weekendDayButton` styles the weekends background. + +```js +const Schedule = () => { + const customStyle = { + weekendDayButton: { + backgroundColor: 'red', + }, + } + return +} +``` + +![weekendDayButton](images/weekendDayButton.png) + +### weekendDayText + +`weekendDayText` styles the text of weekends. + +```js +const Schedule = () => { + const customStyle = { + weekendDayText: { + color: 'blue', + }, + } + return +} +``` + +![weekendDayText](images/weekendDayText.png) + +### weekendHeading + +`weekendHeading` styles the text of the weekend heading. + +```js +const Schedule = () => { + const customStyle = { + weekendHeading: { + color: 'blue', + }, + } + return +} +``` + +![weekendHeading](images/weekendHeading.png) + +### weekRow + +`weekRow` styles the background of the row associated with each week. + +```js +const Schedule = () => { + const customStyle = { + weekRow: { + backgroundColor: 'blue', + }, + } + return +} +``` + +![weekRow](images/weekRow.png) + +## TODOS + +- [ ] Improve swipe feature +- [ ] Landscape support +- [ ] Language support + +## DEMO +![Demo gif](images/demo.gif) diff --git a/components/Calendar.js b/components/Calendar.js index 03a2eaf..0b78b6e 100644 --- a/components/Calendar.js +++ b/components/Calendar.js @@ -73,6 +73,7 @@ export default class Calendar extends Component { showEventIndicators: false, startDate: moment().format('YYYY-MM-DD'), titleFormat: 'MMMM YYYY', + today: moment(), weekStart: 1, }; @@ -201,6 +202,7 @@ export default class Calendar extends Component { do { const dayIndex = renderIndex - offset; const isoWeekday = (renderIndex + weekStart) % 7; + const selectDate = moment(startOfArgMonthMoment).set('date', dayIndex + 1); if (dayIndex >= 0 && dayIndex < argMonthDaysCount) { days.push(( @@ -209,10 +211,11 @@ export default class Calendar extends Component { isWeekend={isoWeekday === 0 || isoWeekday === 6} key={`${renderIndex}`} onPress={() => { - this.selectDate(moment(startOfArgMonthMoment).set('date', dayIndex + 1)); + this.selectDate(selectDate); }} caption={`${dayIndex + 1}`} isToday={argMonthIsToday && (dayIndex === todayIndex)} + isPast={selectDate < todayMoment} isSelected={selectedMonthIsArg && (dayIndex === selectedIndex)} event={events && events[dayIndex]} showEventIndicators={this.props.showEventIndicators} diff --git a/components/Day.js b/components/Day.js index 494d0e0..68c51c9 100644 --- a/components/Day.js +++ b/components/Day.js @@ -73,6 +73,7 @@ export default class Day extends Component { isWeekend, isSelected, isToday, + isPast, showEventIndicators, } = this.props; @@ -85,8 +86,8 @@ export default class Day extends Component { ) : ( - - + + {caption} diff --git a/images/pastDayButton.png b/images/pastDayButton.png new file mode 100644 index 0000000000000000000000000000000000000000..5be600be0f826411f6abb3123a33d4a43ac77c44 GIT binary patch literal 18820 zcmcG$1yoh<+bv27N`oLB(p}Qs-Q7q@2}pN|f^>tlbc1w!6#Q0)IY%+ zZ!0k|Wf?IsQe{W`cUJGsp`d7DOy9nxlVPCgH8y_xws(l07SYj7^~;xV)wk`xI)*xa zk#@fABF*@!ufK|mzWU4mrFV08$MbCFy^n*kXZIcx`L*7UuQ)4`9W^O=8!iH%-DIsD z*kEDF5u(%6RMXOs%(kKCc>A77Pzqlnlj_yCw7CTgDV*HzB;2U}J zSonmqy5drB@R1!6&<9xDSsGYqSiZi&WzlBaVdGBB)r|MY;@!qke`TI;5l_PnBgU!m zgGZ?TTMb36wA7C`%sNU^KYBYxp>k2NEYNd=5CRk|u=t|T2aI|<-WCmZbSws<%cXR8 zeD^_v4eX@-^tGQK9^TgmKFD?(5i<<)H>$;bx9At6w0G~}jL*1PS-vmdJv~+9!@}NC zzz4Oze0q9n-FbRy4-2@2UEdc*g`#k?S`D|sL<9SfZl$j6tgRr=Yie)HWNc<{V$S4l z`vL3|6coQZFL-Hd?rcozZu{QOiPv3#>~9NR@EY`W|Vf{3J~r2LL%?|4FoT0mzmkk&5gDFtakTF#r3t!KwU^PkEKC+|A!>i(A>6+c|+g1mAFR@c(W9-;Vr8 zkN@dRo&PwKjr+fx`Jayb>r8%T$OQh=g#KBrzn_BT5=7)@{`aL9M7%ioEC>Z93?(Bj zqV5iTkdEMuHFepe#0w1rE&Aegk^Ee#ExHfN6P4=y&oaT>lFPHVhcd{gaf zWo3o`IsodqKh*PUENH*Xarl1l68zD?upBm^3q!#PcOblgyZxr9EK>kiRb54UqsoTO zY?u~`MZ2clA0Cd}JFBLW{j2Nh?gP9ClEE8ua+I?iQS6AQCsbqi3QRsz*u74>!uyi2pAZ!6=vTl-) zMab)1SWR|*u_IVT*Rz0PGLf-ItVe-%73N6QVGcUFG{7Mr(O zj1b3qtIapL&`031e(YAlRqBZ%p|;x06!1#SAmJQT|KxjrBGq&@%ty<>FqlS-gtqtu z)z#Ilqfl8{sb2j~!Fu#tfQC+~zdt#Qj*d=b)mggRM7PgUlglodP^Pos3Uv=^Jr%Tr zg7?j4l54-;)5F!q_O=u>G_>ZzxT>0r?s!G(CBD!3n3VI@AYQEiEp3S4!?{}1hulLiCP1f{E@X!}@Gx$G531g_Fz3sm!D`>&ZF zF0^>v4%6s39oED>&xW|H4i_8qmnQjZENL{#G^ecR>ud?qh5RzQBZ+J@UeS}Te(^tt zZ@<|h$W9G6W%%x(#GNc0CG^;^JKi6GZb-KnlLmH^4+a(<`P@(WtQ&J@87@Ae+QE+H()RfpYE1ajNe}DF*-i# z=(l=uMBoeDW+EH%I`5!s6e|Bn!+H5qES=YdtzzI~gX8$bgod2abP|(6u|8*2n%=l0 zdkVKPS;#Qh$)Pfux&VJN(wTYsiWX6#!(HKV78=X`dWUx31N_#9%LVUWwYh_X^7A!T zan=HTZ!s{RH;BGn?FfiZOOtPZxJ+$qXpnI|S}xNa*pfFy|3x3Cu67t+fHpL_)=GZb@^3_bgFFg61Hu>(|cBx&oj*i)Ka4~p?I)?N+T z_a`|drEb;bD_9MsaGalIXKK(FyB^Hn2vGO0tie&}=1WBpv-{jSzX=%;dP?JU-Ird2 zsgz%v$>4RN!(R94L?Q2PbN(~#e0y%C@qYB12!)_yT*=nmvlaR$S9-gH?S#%5CfIxv z_k}v!lF)(K802!^(5)DFdAjB=`U*UAJnUBE6jRnwU%q^B;fjZac8O3*W|O$UdNck; z+OuR>KVta9=0F2A6&2l6{^D~Ke3K8ocw>S?s+nLU5oiDIIlc`Xxt=B1x zhx%^BNU6&;8UG48?|?-cjU?h5?4pR3fTvf0t$ey$c`8)O6x=!(e%0AEQKH4XsfooE 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 G`2PXxe{)&@ literal 39114 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 From 45accff5589a1574da9e2ae548179b2d4fdb90f7 Mon Sep 17 00:00:00 2001 From: Brice Pissard Date: Sat, 13 May 2017 10:39:08 +0200 Subject: [PATCH 4/5] Fix conflicts, merge with master MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - merge with your last commit. - add ‘selectedPastDayCircle’ custom style attribute — add image + README explaination - add activeOpacity={1} () to prevent lighting effect onPress. - add a Math.ceil on day width calculation to prevent the little white ray between wednesday and thurday --- README.md | 23 +- components/Calendar.js | 250 ++++++--------- components/Day.js | 18 +- components/styles.js | 5 +- images/README.md | 518 ------------------------------- images/selectedPastDayCircle.png | Bin 0 -> 18974 bytes 6 files changed, 126 insertions(+), 688 deletions(-) delete mode 100644 images/README.md create mode 100644 images/selectedPastDayCircle.png diff --git a/README.md b/README.md index b66e816..3bd5736 100644 --- a/README.md +++ b/README.md @@ -406,7 +406,25 @@ const Schedule = () => { } ``` -![selectedDayCircle](images/selectedDayCircle.png) +### selectedPastDayCircle + +`selectedDayCircle` styles the circle behind any selected day other than today. + +```js +const Schedule = () => { + const customStyle = { + pastDayButton: { + backgroundColor: 'red', + }, + selectedPastDayCircle: { + backgroundColor: 'blue', + }, + } + return +} +``` + +![selectedDayCircle](images/selectedPastDayCircle.png) ### selectedDayText @@ -446,7 +464,6 @@ const Schedule = () => { ![title](images/title.png) -<<<<<<< HEAD ### pastDayButton `pastDayButton` styles the past days background. @@ -464,8 +481,6 @@ const Schedule = () => { ![weekendDayButton](images/pastDayButton.png) -======= ->>>>>>> christopherdro/master ### weekendDayButton `weekendDayButton` styles the weekends background. diff --git a/components/Calendar.js b/components/Calendar.js index 20a88e3..0fb3c07 100644 --- a/components/Calendar.js +++ b/components/Calendar.js @@ -25,7 +25,7 @@ function getNumberOfWeeks(month, weekStart) { export default class Calendar extends Component { state = { - currentMoment: moment(this.props.startDate), + currentMonthMoment: moment(this.props.startDate), selectedMoment: moment(this.props.selectedDate), rowHeight: null, }; @@ -50,7 +50,6 @@ export default class Calendar extends Component { PropTypes.string, PropTypes.object ]), - removeClippedSubviews: PropTypes.bool, scrollEnabled: PropTypes.bool, selectedDate: PropTypes.any, showControls: PropTypes.bool, @@ -58,8 +57,7 @@ export default class Calendar extends Component { startDate: PropTypes.any, titleFormat: PropTypes.string, today: PropTypes.any, - weekStart: PropTypes.number, - calendarFormat: PropTypes.string + weekStart: PropTypes.number }; static defaultProps = { @@ -71,15 +69,13 @@ export default class Calendar extends Component { 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], nextButtonText: 'Next', prevButtonText: 'Prev', - removeClippedSubviews: true, scrollEnabled: false, showControls: false, showEventIndicators: false, startDate: moment().format('YYYY-MM-DD'), titleFormat: 'MMMM YYYY', today: moment(), - weekStart: 1, - calendarFormat: 'monthly' // weekly or monthly + weekStart: 1 }; componentDidMount() { @@ -96,74 +92,62 @@ export default class Calendar extends Component { this.setState({selectedMoment: nextProps.selectedDate}); } if (nextProps.currentMonth) { - this.setState({currentMoment: moment(nextProps.currentMonth)}); + this.setState({currentMonthMoment: moment(nextProps.currentMonth)}); } } - getStack(currentMoment) { + getMonthStack(currentMonth) { if (this.props.scrollEnabled) { - let i = -VIEW_INDEX; const res = []; - - for (i; i <= VIEW_INDEX; i++) { - if (this.props.calendarFormat === 'monthly') { - res.push(moment(currentMoment).add(i, 'month')); - } else { - res.push(moment(currentMoment).add(i, 'week')); - } + for (let i = -VIEW_INDEX; i <= VIEW_INDEX; i++) { + res.push(moment(currentMonth).add(i, 'month')); } return res; } - return [moment(currentMoment)]; + return [moment(currentMonth)]; } - prepareEventDates(eventDates, events) { + prepareEventDates(eventDates, events) { const parsedDates = {}; + // Dates without any custom properties + eventDates.forEach(event => { + const date = moment(event); + const month = moment(date).startOf('month').format(); + parsedDates[month] = parsedDates[month] || {}; + parsedDates[month][date.date() - 1] = {}; + }); + + // Dates with custom properties if (events) { events.forEach(event => { if (event.date) { - parsedDates[event.date] = event; + const date = moment(event.date); + const month = moment(date).startOf('month').format(); + parsedDates[month] = parsedDates[month] || {}; + parsedDates[month][date.date() - 1] = event; } }); - } else { - eventDates.forEach(event => { - parsedDates[event] = {}; - }); } - return parsedDates; } selectDate(date) { if (this.props.selectedDate === undefined) { - this.setState({ selectedMoment: date, - currentMoment: date}); + this.setState({ selectedMoment: date }); } - } - - selectAndJumpToToday() { - const today = new Date(); - const newMoment = moment(this.state.currentMonthMoment).set('month', today.getMonth()); - this.setState({ - selectedMoment: today, - currentMonthMoment: newMoment - }); + this.props.onDateSelect && this.props.onDateSelect(date ? date.format(): null ); } onPrev = () => { - const newMoment = this.props.calendarFormat === 'monthly' ? - moment(this.state.currentMoment).subtract(1, 'month'): - moment(this.state.currentMoment).subtract(1, 'week'); - this.setState({ currentMoment: newMoment }); + const newMoment = moment(this.state.currentMonthMoment).subtract(1, 'month'); + this.setState({ currentMonthMoment: newMoment }); this.props.onTouchPrev && this.props.onTouchPrev(newMoment); } onNext = () => { - const newMoment = this.props.calendarFormat === 'monthly' ? - moment(this.state.currentMoment).add(1, 'month'): - moment(this.state.currentMoment).add(1, 'week'); - this.setState({ currentMoment: newMoment }); + const newMoment = moment(this.state.currentMonthMoment).add(1, 'month'); + this.setState({ currentMonthMoment: newMoment }); this.props.onTouchNext && this.props.onTouchNext(newMoment); } @@ -177,11 +161,8 @@ export default class Calendar extends Component { scrollEnded(event) { const position = event.nativeEvent.contentOffset.x; const currentPage = position / this.props.width; - const newMoment = this.props.calendarFormat === 'monthly' ? - moment(this.state.currentMoment).add(currentPage - VIEW_INDEX, 'month') : - moment(this.state.currentMoment).add(currentPage - VIEW_INDEX, 'week'); - - this.setState({ currentMoment: newMoment }); + const newMoment = moment(this.state.currentMonthMoment).add(currentPage - VIEW_INDEX, 'month'); + this.setState({ currentMonthMoment: newMoment }); if (currentPage < VIEW_INDEX) { this.props.onSwipePrev && this.props.onSwipePrev(newMoment); @@ -196,42 +177,24 @@ export default class Calendar extends Component { } } - getStartMoment(calFormat, currMoment) { - const weekStart = this.props.weekStart; - - let res; - if (calFormat === 'monthly') { - res = moment(currMoment).startOf('month'); - } else { - // weekly - let sundayMoment = moment(currMoment).startOf('week'); - if (weekStart > 0) { - res = moment(currMoment).isoWeekday(weekStart); - if (res.diff(currMoment) > 0) { - res = moment(currMoment).subtract(7, 'day').isoWeekday(weekStart); - } - } else { - res = sundayMoment; - } - } - return res; - } + renderMonthView(argMoment, eventsMap) { - renderCalendarView(calFormat, argMoment, eventsMap) { - let renderIndex = 0, - weekRows = [], - days = []; + let + renderIndex = 0, + weekRows = [], + days = [], + startOfArgMonthMoment = argMoment.startOf('month'); const - startOfArgMoment = this.getStartMoment(calFormat, argMoment), - selectedMoment = moment(this.state.selectedMoment), - weekStart = this.props.weekStart, - todayMoment = moment(this.props.today), - todayIndex = todayMoment.date() - 1, - argDaysCount = calFormat === 'monthly' ? argMoment.daysInMonth(): 7, - offset = calFormat === 'monthly' ? - (startOfArgMoment.isoWeekday() - weekStart + 7) % 7: 0, - selectedIndex = moment(selectedMoment).date() - 1; + selectedMoment = moment(this.state.selectedMoment), + weekStart = this.props.weekStart, + todayMoment = moment(this.props.today), + todayIndex = todayMoment.date() - 1, + argMonthDaysCount = argMoment.daysInMonth(), + offset = (startOfArgMonthMoment.isoWeekday() - weekStart + 7) % 7, + argMonthIsToday = argMoment.isSame(todayMoment, 'month'), + selectedIndex = moment(selectedMoment).date() - 1, + selectedMonthIsArg = selectedMoment.isSame(argMoment, 'month'); const events = (eventsMap !== null) ? eventsMap[argMoment.startOf('month').format()] @@ -240,42 +203,25 @@ export default class Calendar extends Component { do { const dayIndex = renderIndex - offset; const isoWeekday = (renderIndex + weekStart) % 7; -<<<<<<< HEAD - const selectDate = moment(startOfArgMonthMoment).set('date', dayIndex + 1); -======= - const thisMoment = moment(startOfArgMoment).add(dayIndex, 'day'); ->>>>>>> christopherdro/master + const thisMoment = moment(argMoment).add(dayIndex, 'day'); - if (dayIndex >= 0 && dayIndex < argDaysCount) { + if (dayIndex >= 0 && dayIndex < argMonthDaysCount) { days.push(( { - this.selectDate(selectDate); + this.selectDate(moment(startOfArgMonthMoment).set('date', dayIndex + 1)); }} caption={`${dayIndex + 1}`} isToday={argMonthIsToday && (dayIndex === todayIndex)} - isPast={selectDate < todayMoment} + isPast={thisMoment < todayMoment} isSelected={selectedMonthIsArg && (dayIndex === selectedIndex)} -======= - startOfMonth={startOfArgMoment} - isWeekend={isoWeekday === 0 || isoWeekday === 6} - key={`${renderIndex}`} - onPress={() => { - this.selectDate(thisMoment); - this.props.onDateSelect && this.props.onDateSelect(thisMoment ? thisMoment.format(): null ); - }} - caption={`${thisMoment.format('D')}`} - isToday={todayMoment.format('YYYY-MM-DD') == thisMoment.format('YYYY-MM-DD')} - isSelected={selectedMoment.isSame(thisMoment)} ->>>>>>> christopherdro/master event={events && events[dayIndex]} showEventIndicators={this.props.showEventIndicators} customStyle={this.props.customStyle} - /> + /> )); } else { days.push(); @@ -283,36 +229,34 @@ export default class Calendar extends Component { if (renderIndex % 7 === 6) { weekRows.push( + key={weekRows.length} + onLayout={weekRows.length ? undefined : this.onWeekRowLayout} + style={[styles.weekRow, this.props.customStyle.weekRow]} + > {days} ); days = []; - if (dayIndex + 1 >= argDaysCount) { + if (dayIndex + 1 >= argMonthDaysCount) { break; } } renderIndex += 1; } while (true) const containerStyle = [styles.monthContainer, this.props.customStyle.monthContainer]; - return {weekRows}; + return {weekRows}; } renderHeading() { - let headings = []; - let i = 0; - - for (i; i < 7; ++i) { + const headings = []; + for (let i = 0; i < 7; i++) { const j = (i + this.props.weekStart) % 7; headings.push( + key={i} + style={j === 0 || j === 6 ? + [styles.weekendHeading, this.props.customStyle.weekendHeading] : + [styles.dayHeading, this.props.customStyle.dayHeading]} + > {this.props.dayHeadings[j]} ); @@ -326,27 +270,25 @@ export default class Calendar extends Component { } renderTopBar() { - let localizedMonth = this.props.monthNames[this.state.currentMoment.month()]; + let localizedMonth = this.props.monthNames[this.state.currentMonthMoment.month()]; return this.props.showControls - ? ( + ? ( + style={[styles.controlButton, this.props.customStyle.controlButton]} + onPress={this.onPrev} + > {this.props.prevButtonText} - this.props.onTitlePress && this.props.onTitlePress()}> - - {localizedMonth} {this.state.currentMoment.year()} - - + + {this.state.currentMonthMoment.format(this.props.titleFormat)} + + style={[styles.controlButton, this.props.customStyle.controlButton]} + onPress={this.onNext} + > {this.props.nextButtonText} @@ -356,14 +298,14 @@ export default class Calendar extends Component { : ( - {this.state.currentMoment.format(this.props.titleFormat)} + {this.state.currentMonthMoment.format(this.props.titleFormat)} ); } render() { - const calendarDates = this.getStack(this.state.currentMoment); + const calendarDates = this.getMonthStack(this.state.currentMonthMoment); const eventDatesMap = this.prepareEventDates(this.props.eventDates, this.props.events); const numOfWeeks = getNumberOfWeeks(this.state.currentMonthMoment, this.props.weekStart); @@ -373,26 +315,26 @@ export default class Calendar extends Component { {this.renderHeading(this.props.titleFormat)} {this.props.scrollEnabled ? this._calendar = calendar} - horizontal - scrollEnabled - pagingEnabled - removeClippedSubviews={this.props.removeClippedSubviews} - scrollEventThrottle={1000} - showsHorizontalScrollIndicator={false} - automaticallyAdjustContentInsets={false} - onMomentumScrollEnd={(event) => this.scrollEnded(event)} - style={{ - height: this.state.rowHeight ? this.state.rowHeight * numOfWeeks : null, - }} - > - {calendarDates.map((date) => this.renderCalendarView(this.props.calendarFormat, moment(date), eventDatesMap))} - - : - this._calendar = calendar}> - {calendarDates.map((date) => this.renderCalendarView(this.props.calendarFormat, moment(date), eventDatesMap))} - - } + ref={calendar => this._calendar = calendar} + horizontal + scrollEnabled + pagingEnabled + removeClippedSubviews + scrollEventThrottle={1000} + showsHorizontalScrollIndicator={false} + automaticallyAdjustContentInsets + onMomentumScrollEnd={(event) => this.scrollEnded(event)} + style={{ + height: this.state.rowHeight ? this.state.rowHeight * numOfWeeks : null, + }} + > + {calendarDates.map((date) => this.renderMonthView(moment(date), eventDatesMap))} + + : + this._calendar = calendar}> + {calendarDates.map((date) => this.renderMonthView(moment(date), eventDatesMap))} + + } ); } diff --git a/components/Day.js b/components/Day.js index 1c28e6c..6ffb0ba 100644 --- a/components/Day.js +++ b/components/Day.js @@ -20,18 +20,21 @@ export default class Day extends Component { event: PropTypes.object, isSelected: PropTypes.bool, isToday: PropTypes.bool, + isPast: PropTypes.bool, isWeekend: PropTypes.bool, onPress: PropTypes.func, showEventIndicators: PropTypes.bool, } - dayCircleStyle = (isWeekend, isSelected, isToday, event) => { + dayCircleStyle = (isWeekend, isSelected, isToday, isPast, event) => { const { customStyle } = this.props; const dayCircleStyle = [styles.dayCircleFiller, customStyle.dayCircleFiller]; if (isSelected) { if (isToday) { dayCircleStyle.push(styles.currentDayCircle, customStyle.currentDayCircle); + } else if (isPast) { + dayCircleStyle.push(styles.currentDayCircle, customStyle.selectedPastDayCircle); } else { dayCircleStyle.push(styles.selectedDayCircle, customStyle.selectedDayCircle); } @@ -72,8 +75,8 @@ export default class Day extends Component { event, isWeekend, isSelected, - isToday, isPast, + isToday, showEventIndicators, } = this.props; @@ -86,15 +89,10 @@ export default class Day extends Component { ) : ( -<<<<<<< HEAD - -======= - - ->>>>>>> christopherdro/master - - {caption} + + + {caption} {showEventIndicators && ` component for React Native - -Portrait mode only - -## Installation - -`npm install react-native-calendar --save` - -## Usage -```javascript - this.onDateSelect(date)} // Callback after date selection - onSwipeNext={this.onSwipeNext} // Callback for forward swipe event - onSwipePrev={this.onSwipePrev} // Callback for back swipe event - onTouchNext={this.onTouchNext} // Callback for next touch event - onTouchPrev={this.onTouchPrev} // Callback for prev touch event - prevButtonText={'Prev'} // Text for previous button. Default: 'Prev' - scrollEnabled={true} // False disables swiping. Default: False - selectedDate={'2015-08-15'} // Day to be selected - showControls={true} // False hides prev/next buttons. Default: False - showEventIndicators={true} // False hides event indicators. Default:False - startDate={'2015-08-01'} // The first month that will display. Default: current month - titleFormat={'MMMM YYYY'} // Format for displaying current month. Default: 'MMMM YYYY' - today={'2017-05-16'} // Defaults to today - weekStart={1} // Day on which week starts 0 - Sunday, 1 - Monday, 2 - Tuesday, etc, Default: 1 -/> -``` - -## Available custom styles - -There are a number of pre-defined styles in the calendar. Below, we will give an example of how each of them can be changed depending on your use case. - -### calendarContainer - -`calendarContainer` changes the background of the calendar. - -```js -const Schedule = () => { - const customStyle = { - calendarContainer: { - backgroundColor: 'blue', - }, - } - return -} -``` - -![calendarContainer](images/calendarContainer.png) - -### calendarControls - -`calendarControls` changes only the bar on the top that contains the month and year by default, but can also contain controls for changing the month. - -```js -const Schedule = () => { - const customStyle = { - calendarControls: { - backgroundColor: 'blue', - }, - } - return -} -``` - -![calendarControls](images/calendarControls.png) - -### calendarHeading - -`calendarHeading` changes the bar that contains the days of the week. - -```js -const Schedule = () => { - const customStyle = { - calendarHeading: { - backgroundColor: 'blue', - }, - } - return -} -``` - -![calendarHeading](images/calendarHeading.png) - -### controlButton - -`controlButton` shows the next and previous buttons that allow you to change the current month. The `showControls` prop must be passed through to `` in order for this style to take effect. - -```js -const Schedule = () => { - const customStyle = { - controlButton: { - backgroundColor: 'blue', - }, - } - return ( - - ) -} -``` - -![controlButton](images/controlButton.png) - -### controlButtonText - -`controlButtonText` applies styles to the text that is rendered when the `showControls` prop is `true`. The text can also be changed using the `prevButtonText` and `nextButtonText` props. - -```js -const Schedule = () => { - const customStyle = { - controlButtonText: { - color: 'blue', - }, - } - return ( - - ) -} -``` - -![controlButtonText](images/controlButtonText.png) - -### currentDayCircle - -`currentDayCircle` changes the style of the background behind the currently-selected day *when the currently-selected day is today*. - -```js -const Schedule = () => { - const customStyle = { - currentDayCircle: { - backgroundColor: 'blue', - }, - } - return -} -``` - -![currentDayCircle](images/currentDayCircle.png) - -### currentDayText - -`currentDayText` changes the style of the current day (defaults to `red`) to differentiate it from other days. - -```js -const Schedule = () => { - const customStyle = { - currentDayText: { - color: 'blue', - }, - } - return -} -``` - -![currentDayText](images/currentDayText.png) - -### day - -`day` changes the text of every day other than today and weekend days. - -```js -const Schedule = () => { - const customStyle = { - day: { - color: 'blue', - }, - } - return -} -``` - -![day](images/day.png) - -### dayButton - -`dayButton` changes the background behind all valid days. - -```js -const Schedule = () => { - const customStyle = { - dayButton: { - backgroundColor: 'blue', - }, - } - return -} -``` - -![dayButton](images/dayButton.png) - -### dayButtonFiller - -`dayButtonFiller` styles the background behind all invalid days. - -```js -const Schedule = () => { - const customStyle = { - dayButtonFiller: { - backgroundColor: 'blue', - }, - } - return -} -``` - -![dayButtonFiller](images/dayButtonFiller.png) - -### dayCircleFiller - -`dayCircleFiller` styles a circle around all days other than the active day. - -```js -const Schedule = () => { - const customStyle = { - dayCircleFiller: { - backgroundColor: 'blue', - }, - } - return -} -``` - -![dayCircleFiller](images/dayCircleFiller.png) - -### dayHeading - -`dayHeading` styles the text for non-weekend days in the day of the week bar. - -```js -const Schedule = () => { - const customStyle = { - dayHeading: { - color: 'blue', - }, - } - return ( - - ) -} -``` - -![dayHeading](images/dayHeading.png) - -### eventIndicator - -`eventIndicator` styles the event indicator bubble for days that have events. Must pass either an `events` array or `eventDates` array and have `showEventIndicators` passed as `true` for the event indicators to display. - -```js -const Schedule = () => { - const customStyle = { - eventIndicator: { - backgroundColor: 'blue', - width: 10, - height: 10, - }, - } - return ( - - ) -} -``` - -![eventIndicator](images/eventIndicator.png) - -### eventIndicatorFiller - -`eventIndicatorFiller` styles the event indicator space for days that do not have events. Must pass `showEventIndicators` as `true` for the event indicators to display. - -```js -const Schedule = () => { - const customStyle = { - eventIndicatorFiller: { - backgroundColor: 'blue', - width: 10, - height: 10, - }, - } - return ( - - ) -} -``` - -![eventIndicatorFiller](images/eventIndicatorFiller.png) - -### hasEventCircle - -`hasEventCircle` styles the circle around the days that have events associated with them. Must pass either an `events` array or `eventDates` array and have `showEventIndicators` passed as `true` for the event indicators to display. - -```js -const Schedule = () => { - const customStyle = { - hasEventCircle: { - backgroundColor: 'blue', - }, - } - return ( - - ) -} -``` - -![hasEventCircle](images/hasEventCircle.png) - -### hasEventDaySelectedCircle - -`hasEventDaySelectedCircle` styles the circle around the selected day that have events associated with them. Must pass either an `events` array or `eventDates` array and have `showEventIndicators` passed as `true` for the event indicators to display. - -```js -const Schedule = () => { - const customStyle = { - hasEventCircle: { - backgroundColor: 'blue', - }, - hasEventDaySelectedCircle: { - backgroundColor: 'red', - }, - } - return ( - - ) -} -``` - - - -### hasEventText - -`hasEventText` styles the text of the days that have events associated with them. Must pass either an `events` array or `eventDates` array and have `showEventIndicators` passed as `true` for the event indicators to display. - -```js -const Schedule = () => { - const customStyle = { - hasEventText: { - backgroundColor: 'blue', - }, - } - return ( - - ) -} -``` - -![hasEventText](images/hasEventText.png) - -### monthContainer - -`monthContainer` styles the background behind the month. - -```js -const Schedule = () => { - const customStyle = { - monthContainer: { - backgroundColor: 'blue', - }, - } - return -} -``` - -![monthContainer](images/monthContainer.png) - -### selectedDayCircle - -`selectedDayCircle` styles the circle behind any selected day other than today. - -```js -const Schedule = () => { - const customStyle = { - selectedDayCircle: { - backgroundColor: 'blue', - }, - } - return -} -``` - -![selectedDayCircle](images/selectedDayCircle.png) - -### selectedDayText - -`selectedDayText` styles the text of the currently-selected day. - -```js -const Schedule = () => { - const customStyle = { - selectedDayText: { - color: 'blue', - }, - } - return -} -``` - -![selectedDayText](images/selectedDayText.png) - -### title - -`title` styles the title at the top of the calendar. - -```js -const Schedule = () => { - const customStyle = { - title: { - color: 'blue', - }, - } - return -} -``` - -![title](images/title.png) - -### weekendDayButton - -`weekendDayButton` styles the weekends background. - -```js -const Schedule = () => { - const customStyle = { - weekendDayButton: { - backgroundColor: 'red', - }, - } - return -} -``` - -![weekendDayButton](images/weekendDayButton.png) - -### weekendDayText - -`weekendDayText` styles the text of weekends. - -```js -const Schedule = () => { - const customStyle = { - weekendDayText: { - color: 'blue', - }, - } - return -} -``` - -![weekendDayText](images/weekendDayText.png) - -### weekendHeading - -`weekendHeading` styles the text of the weekend heading. - -```js -const Schedule = () => { - const customStyle = { - weekendHeading: { - color: 'blue', - }, - } - return -} -``` - -![weekendHeading](images/weekendHeading.png) - -### weekRow - -`weekRow` styles the background of the row associated with each week. - -```js -const Schedule = () => { - const customStyle = { - weekRow: { - backgroundColor: 'blue', - }, - } - return -} -``` - -![weekRow](images/weekRow.png) - -## TODOS - -- [ ] Improve swipe feature -- [ ] Landscape support -- [ ] Language support - -## DEMO -![Demo gif](images/demo.gif) diff --git a/images/selectedPastDayCircle.png b/images/selectedPastDayCircle.png new file mode 100644 index 0000000000000000000000000000000000000000..5bc03331be6771eff00ea7567ed4bcd62936d9ae GIT binary patch literal 18974 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 literal 0 HcmV?d00001 From 404942ed1e261353ecc104973f983b526d9a3af1 Mon Sep 17 00:00:00 2001 From: Brice Pissard Date: Sat, 13 May 2017 10:47:04 +0200 Subject: [PATCH 5/5] Format Month position --- components/Calendar.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/Calendar.js b/components/Calendar.js index 0fb3c07..245d4d1 100644 --- a/components/Calendar.js +++ b/components/Calendar.js @@ -66,7 +66,7 @@ export default class Calendar extends Component { dayHeadings: ['S', 'M', 'T', 'W', 'T', 'F', 'S'], eventDates: [], monthNames: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', - 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], + 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], nextButtonText: 'Next', prevButtonText: 'Prev', scrollEnabled: false,