From f9ae6cc962814a8c2097577de08effd85e7b538f Mon Sep 17 00:00:00 2001 From: GreenWizard2015 Date: Sat, 13 Jan 2024 18:21:26 +0000 Subject: [PATCH] "Hold to pour" button added to UI --- ui/public/valve.png | Bin 0 -> 24268 bytes ui/src/App.css | 6 +++++ ui/src/App.js | 2 ++ ui/src/components/HoldToPour.js | 40 ++++++++++++++++++++++++++++++++ 4 files changed, 48 insertions(+) create mode 100644 ui/public/valve.png create mode 100644 ui/src/components/HoldToPour.js diff --git a/ui/public/valve.png b/ui/public/valve.png new file mode 100644 index 0000000000000000000000000000000000000000..9b53ded7aef3fbc8497f26fb24021994d034138c GIT binary patch literal 24268 zcmXt9XCRgD8-Ct1IQHJ_*n5P`;uxW_5+Y?6$@&=~>m{osic+@BmXR6aWD}7TB96T| zB93|fzWkpr@B4mv*84p7b>G*0-4D%84e6-4sR00V7mf5S0Dw+kA%H=iKJLD^u>=4K z%#AHCD45s@YF-l4y`pXJEp1?>YU!eU#eqjzS3u2xQ$b79)}2fy^Q##MYF-r9GM2h< z_55{rF&*Q*a5h%BZu;oudkntq_S9oO~)-D1(p?t^E0T6m(LW_JIMl zvAum%@Z{vft7sH7zqUTTw7f$imC_<=*{O0dPzoB7Gq~!DfHE)$F(Vt&!@vS+1cHh| z!_v`=ibBfx#=(>Ov{GtgT5`R=exFq4?8W>?+}%B?%@0RHk2=|$H$`5WFrKlPP^Uc9~&5wA*1o19%> z5u9-0x~rB;faM*(7G=rUw9KvBmg}MJ{5n@ge~;S+MycC-b4i`8l;HDD$-d+pmH)mn zqv)-!$NeUDjJ(d}nwD06MNNHL>OU5^It9@yP9EYK7mBJI)Gt}>-nIQ5A128o^tGf2 z=3)DI_jXfsSnG?lY_&5hW533FdZeWkhw5vmGoQZ@;>mG!{^MZQYp8Wz*HBRvca@8C zzPfy={Y$Tdb*81+EotdH>`c`cbs}%M#+;EE{?Gl%1>LR1MO`tejF?ytJ-w^u)+Iqz z(x+E~Ccwh<>iYlN#`@;NZ=C?x`Cio5u?+s*^zyt9iwVZls1PA6GkidsKPUr57M2Z>gG>TV2OSR$!5RVn#zChdjUV7DgXO>{+C2EMJ8 z`MBJ5aiJl^dfu8S_4R+aN{-5u{=_sY^tkF%<;AiKDyk~?7?>NQKMQcLKRZ9TzVcbK zex0?$$%$8N_p;pHp4~a35AQoQjiE;0mse88T_Zy28~&)%JDGiP<3orw2v3+yG=yFr zJ44*%My<(FB~0JJ;qJEwookqs#auzFt&(n+$74*GOw*XqgI^rAII)e3+EYBeY^aGd zB3g1f&&Df-5h99Z^IPS~1JjFmY5oU=M00H2zc*|+=LpP8q&4i$`Ih5J>Ug8K(Uy`%#ei!=g*2cafp_C^kHG9xz4ZN#V>`aNm4q2J^M=UJky&ADKrX zwUsze`Vfgjm(us=l&J}L9O#PcUUFpd6)J=VBJX?9m#s)SmTp}@%FK9Vf?aYRtD_#n ziB?#NRWcRsAUu_T)qE0i#rYEJkLo%@jla7Em+pe7?*V5^B^3O0g zM3XAKm+qvF~ zvf#Z-?HK5b(2qtbyz^u!;pjmmE5RHd;(x&g(0(M;s7b}qYH_m+>A+ksexDBG`!_I8 zk!5C19}~x#M-dG^-D^VJ`$Vxs^k*sr0%W16kcV4dugHhQknn0#U(2_6y7rosL>(FE zVXg-bT|pHMt`anL#`Xyvngl!zb~Dn4?77B+-g&%p`#jG=UWXQ_C7I)%QYi$mV-B6# zuR+Q<2u=m9$j!)y14sRczY~5JBwTI7#3(=XWFDa4iH`Z*cU=CtgPfIP&3{^Wb_O zM>>g2M!ccmE-l_>BXU6A1y2`RLvnfJM(h$2>>PNTuOT~19~BNL!yMXVaMcp-Z)a^wh2@t~`Z5Q?>z}t6BU;MpP5pl|>&JcHjU6 zA`44E=E=+Gwt-=m{JwJ;SXCiH@|AWaX)*vct#02>X zl!G;d?r|4I={fw|9LHb(Ij^0o_f-csZ`kjOB_U%UJNIUM<_ol)S6B1y z-n$j!__?EFl_NQ4GBc^Ju50#=GsVsyn+Offh=Yxhc=^-OQM8^wiC_d1qMVk zUke8*%}UA`*L8IzM>J(rH!=1p)3u|&(7GZ(=II4lhb)4*A{Vq3tsl3PFh~phAdCH6 zv(I=uqc&-!+9+{-%$;Kw@h(QpOW)P)QqAETI$fk|v&CPR*JE7mUjhE*eYiRXI5fSB!=NkTWaO}NS@Y!xw zi&eu0Kd6if3ye*4dq4qxJFUkuIxuG#2)bsY>iMVJ7$JfZmIMB4mg|{&oIW1X_a*-D zdrI4t&Za#xLH(A;UI^q}`Dy_MM+XF6fC4WGWN87)9o4;4Cx##A%LotO^tCmu_Rxm-%jdo-#55IDAx|S(L)nGx&1_dxO0HB81VUjcmJBHr$`0SOx;MY^6 zk;?9PqY|&07_~=k9r!Z$I9$ql^tMnr$`lZs^7bGvuEBdzw=_TkkRYRQ`{g!++LNxC z7Y6aB5+Kw zF|edj{u51e7!8+39z8wj?>hU#sf*<6b)Ut*ef8@oL#IKBU)2x0cSk2+?cm%cEu)B7 zAM{bCc!^tRi2+yi6YPO|Dh=volr?%s;SW73NGx`&S^zExVY){UsF zu4<>gyB(Roz1trEum!#p=gkkTH)a zPXQla^V_bI`TRUt*M5AIq4tHJ|F~n;MCx8fqqwGGc8}}dx5cg>8#TvXEvtnT-WKu_ zL0-DGx;~ksa`${k!PsEh_!~NXG=7-EIvoOc3I=Jx410Gx);lUL@**7HA_ZM5`xW)P zBVRH=o^0Koe-mv(#_7+AWdfh_D>3a3&#oAs!7)P19eGjVO2)JDX$P^PNpQp7XP6 z_;<&V(WVRI39y=gKe`G1m)hv#uJ-twE?ZtdS6NwUYwn|sGZyN{ABqa9c&=zWktQS8 zmSQiPytx~zo1b5n4@DMbEV$k793S`5HKNcF^rxUjHNRb+NG}zwJ9wbi@$ZFgUJiCh z28-|=7;)LX39~!X0kT+W1F8Zd9CRhRk!^;fh^xB};s5q85XGMah&H8ia9O?ai`6^{ z&<;|Z(Bdgb93K%j;_K4nreg&VwtVk-(^dt4ZqAqTW)PigG?KMkI5_30&9MEZp}D*4 zPh-&fBTi?K(r$juJ%dXeB|ga3kjkfR2;-5c&qyaa9c6a;Pg%QxIR3`~_Z$e@)cEND z61zOKdlz>VO}yCx2vU>2F|*e*`IoZUcag$|{KC7wQ60*ANo0V05sp+J z0fEU#bzFv)e53DO3HcL8ohs##Ym4ZQ(b(5wdx1}plnnS5K?+Bc2jL|EwhUSyBAOIP zi)osfiiBC^;9rcXelS2_)T56Dr5^Zs;lAnGLPOdP3@<1v3~F!?E)bN|pgn#JyfWO| z%P_PYcz4kwJV9%$gfPG%M9J_)t57h3;3ejJK_p5ikKV)RCT9x;7>7k_FYoi z;jBqGB|V>pk%nWpKK=%hao>=RQyqumE;~z?_-1hImAWD`(P}^3f8QVE%_aQo%q$crtYE)D=>@~=?iq+M%p4?PWqW=_A-!c!=N~(DTYvYEXmRoie^v^0DSF`5ivaus(?Pq-fR`fbAb(I+9HUmlP2vF_ zRKK7+%-j{5%b<+B!jnNhSbXOjrbEh1y(w;f_~vGOq!+kzIa8P%!#N-Rz)(R z%5HLRwi+ux%af`I*@b#>y-Wg0lfEBtU9NF!q~n}%kg&m&?{uD`8L!ONB9Z2hGjh#- zyBx4$aBr8FsDvs?LWC;*u#j>#RhdXbw;A)~x(m#i^W;j8l)y7KydMp)gK#S$x%On$ zM^bI~=iIZ2HY#vquJa)W(P6I9X^d zrR72)z|rCu&A|&s5DGCOTu>5VE%zh-XTg3;O&bIGVMaDFGJ<#7?cyOdh|di`e>89~ z1(JUw1pqC=qzzjU-wS>?ekI8Mdzp=C&yg)3d<15=Z7_Ih3P837VGOPp!J>FS8J~dz zUCj=KSs|9gR;*p*m0Y~B^zZhMDChqycE3DTLjR<7&bGJ?7yft{gMESEQF)FvA5xBY zH)i1fpuFbT6)Vb1*P|>e*3QT_@zvt0^jSO4{mHt%!+zQy3mkDTe!OYU4cZLf^J;o= zBm0`=ue$brt+@@d$^2BmR#3A1vcNOocgf$ccU6L7hQ`{kJ%+OGbBQp5G_(yG_ zEUa&|PTzC74P|?%JOupy>(<_b$Yk%RHcusn&kKOG z$bs)8^yGk#Jq|3&Q(1RxaV2~Q|2AL zlT4w+8_Ieta$G->SYIlWdl|LkGqrH$=r;v!KR$eK>)I!6tFe;P4vi2me`J}QF|U$T z5mE59Kw>H|HbqK%8Jb!@v!)XgJ7lO%_~BYqDHl!@7DJ341QqEt?u|8yvR_YH@VR&8 zklF0;H}Tp@&*!^nVuk!n?jZ++r;-stJa=$b#H{(GSm73{K9Bf~bJj$299NVg$P94T z8Hs?^n=k5VO-_7tj@lx_?@g{Ppvz|E*BRyoa&?mMxMJ<}ofZ=)MbJD4jo6|(n_R>g z)uE+9|aMECDM25@6CCIn%=o1duwc^nm-xEu`RUeOG_w;j&E8^6o2 z?L%*`Q8h3XDImqQU&IMFZ?*77%;!GBQkv&HS9P%uyEX43DJUrDm6!nh9DhpP z^yxVn4?#*#$yBkz)vHcFse&nS*!bPek#!gI6OKQurn9*Y4w{XnoA!PCm%PX1S6c=p z$(AloPWhFC-M4<`p8p#YANdqW0g)(5Q+@~0yRstZ$Y6C{lXRlS%PfVI2N>B9!GAz{Hs-UQi2vhCGTgGiEI^q1MBb9 zagZa5SxUOanCjuH!7DRuQ2Tew!5B`$a~!KqHyZ4e1NX~t!)#ccZ58Br^7z1EIFdW^ zL!{NQ|@_A@0}v-&{S91OjNbUqo_p5=`UwSGvfC|0REQH*TPk&*eAR5 zWpHWqH3S%+Rz|M;@?eLjD{aUku8a9(r<0=4vqu%=_09B?bG`-zr=Adl9$0D&i!o08 zRep3-Wl9}&-fbY~sYd96%*jgfc2RlyGZ9#w8vp*|0oPXQ9Vtu>G52l75doGLfMQt>bbRyUq!#=oDa z{+%-y6EpL3`iqXNe;`*DTvoTYo>{(lCQpckT$iPAioB`&Xq14=Dl$s_I=q?v3P!MkV-5Pf+qaq7!?brvW08+V#UA_4Y+k-tn@)@ z;x$SN!$4c>r^oH>j~|tF6c{8G%J_a#SVA~fa{w0r^UDBnre zo=Kd$am;6OVPy7h^UNMXSm@u=?~9L4`79>L7E*_8QF*0W>Q2As(w!e57gZ~^;sc(< zJz-K!F1{pjEDZ*yki_j^wtLrNf1_=x(Mp84-h-yM)#8pezZWguY3t(zUmT5>v%*d? z{fUdzf2H45Ig&rr*#{&6#!?fCs3W>*9UWQGcg(Mz$;fWf3Y>k$#E3befiHS<%pR}3 z%VNV8h(7v-S3_Ks?zq9Q*{gN*?(@`_N{MLe!{-Paj-)4oBxjxf`VVOy!aL=VLZ+_c z_1m7l-A8flw5B+>sg~J{%nPDv;jj?a9|ql=5Mocx$QsVPG|Wnzq^q2k%zRe0{q`d} zfK$49v_Bktz(oC7kfw#>h4Kl;6Efae*V09yZdyh`SW4kmZ*f8%;l+*!6JoixuAD1k z+lU=e3LAR^gZq?NOgHu5^Fjn(MNa5kQN32V+&bH6U|sn=?TXDJc^O)x?3M-Uwbfs| z3B{d6?9C5lAuSDZmsbTqwV(ovW(*~_F$U6m{Uv4iBe|HVAOSF9$o7!Y!*zv!DlytO zo4w1#fI(MWSH#%Wo9S_<{%}ru?p)6zf$H6vzEXzqpZ(U%xr#8J558j-(11M8ANLf0`G@)>ScY4 z*bb!=LiO=&+ABGe^i-7)k0GrbP}XdX#2t*7K8O%_8(2}4DiGE&r^@fPwePwUjW z85}zOJeT3gkH$nd{2dHBb9bik%&wd*f2*W(7C++ome z5)=x)k&YI0R1`!t@E$h{$6Xbiy9O|A+Q^iVwu`)Y11m)1o*=kA!)@%nk03qYJ%5}? z6M5BtmtQMr@Mb;=KaC=;9P|r>H>*?BK6ue^w=G@%bLSC<(J4|ZCq+`h^LW1 zoga2QX6zgaY&3k6Z_s&4pBp0PIWno>6GyR$kMe@Sk^L+%Hsx}3Bn8}$WLOkN?FMG{ zv`~4hG~eco1;q$)$b?5(1e}-}>ESmY=s&1JeKQ12mJSZ-<8}H;jjJE7aYxQa9;}ww z1)ZI-Wz}C;&bO=#0!m8pL&m4)2206^_%zglFi#dDuBD|r>qUDmKNKr|EEig$9Sg_d z3$kEw5OT(#Db+%}KtR^wD|}1SWm!bI@vS;#zm|dhw=fSQWC&i%b-lW%J` z>)865>|*ob*aDk06>hHnKgt0%4i18yG`|{g6T+IH0JL=R<+*v=z8FDGKK6Rm%>Lp> zwHr=toY0m6_3rrr^hCt9VmrE~GU@NO2o-)DOWH%`(aF8&_>csXlRhnx<5|y=rcZCZ z1sm5JS3h1cnyPNe{JJ&WJD`0q^V|Iw-?YDaiG~(q zMx2p)84KKf#t&7x*dyN}nrLw!DV}tmmE?k!n9qWVM8ZpZy*OIyL(?_XjFh9*c9!Z> zgtzMC&uos53}j~fD$=L_k}!&9TaNSjj)iMh=%Ui}r%R=AT9=+HpP*oE+*1_60ZPa{ zw?5{Um>x&TzjXFL5a*pKYa9nKModxp5WeN>6A3N$swY$Z1{5*+g<)e#!VFy4$6rH| zkKWCcKa7m%)+Sn8%jLwdtp`qGDjvB&7rsay*S9IqST#FH#%Ra70wYi%56wY98o^*X z#+t}mN2RTiJ0h^>mLt8_%;L$VI$d48pbgh4-Pxcg40Lof<9buoyI&}<4H1I3Z`8Y;hytVi zMR31@H+W-ggg8`IfC5s)TONMA#1cmHi`c7p8bA%!zms0xqCi4e)RXh0)LFk$Z~nAD zX+>}y_;{=_tdrSD0-P`P#MM!FHP3#(Ag>a=zj4QZ?lt--&x02yKMO;4OgcY>F64r= zFB-uO&`TXFqE1$Nyw58dK=e@wsHu*n<57uz24g1PJj&w$a}JH-VO^m+PqJH#E6}kn z^h^27#J>p1TMn~Rfh4Y|?Ax(mcJ1*DsMr};c>62iEhaR^ zYJnRt@kJB-#CY7rdx?GxMBpyEVH@&t?x(>+ z>Dj1>O-&DR9Mg#i@20a}sv-Qve=$golKB16G%Z*^aUJ<3_r9a*%*ik7N80s24>(SB zK<}wd!**|Y2B-Y#gI-=fxPof846Z7Tsn|s0lla52{2j06g=_3HP>G>$&ro@{@dc%6 z?Ul&MHz@?~Bn-(9BuHx^)h1(`5QALj02bwuUHo-rm;c&tyXUJL4!|hq-1_uG7Ns{B z8)G)(VwFQ;r6P(E3E*=?6xJVi{<-KC0Z%_IOh`znS)%?*_vx$uo~mw;50pO zG`lEZ4_qz#yllv?PP(@wZnnn`;G9iTwGRIcZoQF1i+XAzJ`D zJ3&r%dmM{^O9HB8aiCOGE%+t7Ru=B}t$6`~Nu?|Rc>xTdLJ`ziqe_o~XNFw@5;|3Kd44S62+0`a5*YhW_4_OW`lFESuNr0<8flk&gE-#Prg#!(R0 z&Re2%8;pI;q?XB8WqdA@pah91;-JBA4<3O7Jl~6XVtHHoKtuR2<=&t!mU3$&;`{N# ztJb8tgWtUL@!{{k|Nj05BIh5_oC6eoj3+5qv?H@C8h2Oq43o2>pYUt${JhRYNk8?{ zNTqwRl&!P_8AD?okmRIdSTf0dyKCqRJMNYcDY(p#sx(&zh?y3e=Jk6n04a_2W+#_h zYyf(KM*>s9o;~%Ev@*J%%ixlo&fv5hL|VKW-#nxATK3TlYhVz3}Ysg{zLL#v&Mjh;#X0L;?mh(eqdie6YpHL~o z%=$D@IZf3I?}y&Z+101N9tUs2lJ4#@6p`oa<9C30)mh5r$QSz~drG*w4B6U`-!%U> zQubMQR7p}R-yr_zrCK<-|`4H`$vQU$fD2ce8FY z@{YInNm<~?md}!4LnLh@mmaVvPzMD*uPJb1-n4yorF4Lbkn>7%I_hQ|bJ?fkS}LbB zBnCReB=HH6qKTl!{}CPU_;>kco0c)+IY=45mh&J>{4ngNw6Zc-o$ve_Ye1UPN$f4y zcWntLN`D9ur~1Rtvh(k3osU!V)&UGHGLIZ?jTNIAu@Hd{KM-~_Yd-O$ zVwyZpxqN?p*N2`@^WM_k00_~xS5gH#j+_A(8C+1NQox!HcGm|EiWkY;U=QF@L5ls* z9U7YFr?*UNZUDN}JdhyoQ+e38TDLU&bnrMw5&$P+?uuRX_wyDH zR`&kvHLc{cz)`84MH?S2c&wEyLVoGF-!f36r|>6et2{csWs_8x&3V5{^zlsmveJGb4v>zJum3< z*pRJ@^ucBTFS4Ts5fwmXjuRiy0nQh(ym^0khLaH50d&=G=qvV|>F=K`rmMq24yfo& zQew_pR4oFhap}jVC11zDx^`m(;&V!MgIeushkcrEYrwmoRgD7(-=aZpeQjjf`oTeyS%4Rj2B2LpMx~zD4pp4vcRg^ zNA%3OS{Pqob~6)El)z6l_#n-`;Z#`pvVYO^XFi8Bt4+6f_rEZDZcpCa)-fEGQG2yt zZf@<~Jl9`*An&OP*-D2oc%K$hLxNjUaLK8h;2jv`4qbRC^b=9{{jCinjxH<;xNq@n zG9YoV z$Zc~Q!~E*Pz(M2pnkh4-xirX%*uI(I%%O;=mjF$>PkUU8p*{d-yfj9yYOD1D!WEX4v2P8f$JEI<0QwYz>K}zft?gQ_+C|f5;7r_ZVB4aA0~BRIKV|0f3uN0f@s>P+I5GBOwiN7q|KD zcWb}jtBhx z`Ovgzb#+noG1x!@D$th+RxmixjZCYzfL;-_;2~;&%Eyg-`U*}*tfZbOP{-BaUx0%k z3@E!#4=b6M2P*twNTHnghtaXz8Zz+9}E?7!#v%LZ;HbpVaA$rCq!w` zzG1;yp5wy5D|&Bqu;gv7f!=d+C9$>s;Oldn0gU#SdJBnPR1+1e1d zU>#_eaF=vM!9*yp#RUf(A233t9#~2uv4i90&Mn4qQ32!#9hdbxrE2Rjs;qBIN_u^Vebh>d$v?SN%I%0f(#1_`LLK`x*WV&5RxPoxxwYeO^^Md7yxTFT# zLl^mger7*MX9cV0bq#3P9uS`j$fEG?5o-DX>jd6L{j{OaY%IuU48jHNeIC!j39th1 zlOWIvF+`L@?w>f4sRbMX_e*rlH(hKVBBi@qivlnA?+j3qfWGoPLv!IMIN2y(-sROr z;$_kTKE3^m!sY)??=*FsgV|)B`6M~#xBym)yrf+nJ4Ign847{|CV?c0e6m?y+L`^d z)fzZb+do%tDW!C6$mFgH0}|U~ zQO-qgj=^ab0ZQMaK^;E0%@VO|eJ!_D$L{lP%G>7A4MPYgjSxDK1sKYdjmu1+Z4PGnmuA_5|1erJ`M*(Y-@Qnt1ehRFxUR z-7LIvrx2a34g)n+D64@2tU^BzcW0Wu2#imx-_ZV-twiPkDfg}z0n$uZXXop#YvkP- z;hOpR(&*FKepBQKzKFn^Qs6h5>l>9_t|)_x)#?Z5H$*`<^PR^$cwO;Gtfs=w;0{u9 zHK_u}2HAW$8^dMDNRI`_w|`tv{qTe}2T{`%%y!NQ6@27Li-LW2S?Q&pu(L;&)|C&O zNfVJqld<#l?WOn zBO74n0$-`EKu=k(;&;~a-tjk+Qqr8s$AEx@^OeDb*yW?CDt1tU^$yn zaWs@yR3tilfBEAJ#GW@5ZZ*dF>)HcUUd;~(s2F*3brvAv)nPSmsOPJF3O}4hTmnYy zIS5mFd<~~)GVKi=n(hnPZ(mnEc#{#LO9$$Me$6?wDjFdNU9LeDLCkW6tfk=&K&@}~ z8npJV49D@94SQdRaYakD4`My_ayurW-7b*2E3 z?}Tvl_XDH*Vv)C0fSM7CUN}N3>QH*OQp{KDcWbN|vEVnl`X_!0!q6-UeXwL zz?z(58AZ$vs20H;F`7;VJBqaJX4N{)dXa1SLMQWth*F`>Z5>w0=}a&i$Wfr894)w- z^l~X{iTG4RBP^$ZuQNN~{==Y%*nhh{og#oljBL0B*ndxWcUeu?2rvRxD6e0m6%ekx z4QD$vYYte#V%#YJ7{(`B8`j6#%jTX9;_##Nq{F8mTTiuM6W=rcV+rh5iOzks)gOi2 zoSw4;=2XK~^7MJt0dDce7gr<{U$s865(89+HZE6xDy|YuB>3-Iil)#ni&5Yf{7iop zWpct#w0*zM^?mH0UF8)A`S%dm!}losY=Mcqa4a{N159d|e1tj0nr4*CQf84k=hp1I zcjcQJAnya@jskhoKLi0vo}&Q6TdGfwMCEhJFP<5ulTv=e=l0|Igz@z9MbY-f23a!}w+2Q+aUE`|ig{H#&JCB2or zFq!~~MSb}SxmI8pP}c#0#c*(o7pnMOJU}{5eDqWO3n{mU5~P^T7HVP`?KQ*YPxo9NO}(ekWK z3SJmZ9!G-@bc!fDK)8rC#ok|fSMKR8V2>Sa3Gd2Tyn9ncP zw0h--n@u7M=qTqJido!eVnEfGNF{Ud%+qJ+EGbEJ7^EY~8r0li>^6YREUK~)i=MVG2|s)uLP~%*2(eKE zU_(tidg)czbYe$`gFqf{a3%&siOEwkdY1%|s31&DOa>R+BB8nWvbI;@F^|g;W#ALf znc?YM_bYA%R`bbjDc)3ovRDk_IL|-aVo>Imeo6cLwxH`5$08bKD;{R*)33odeCdyF zbaM9eaz5yZa}n*eislsVF3lDRE8AJ~+GP;XB2PDzVZE{C3at;=)-gQ4#AG?8}MRs4pXt|l&Iqj>7c5gRZ5qXss z`&J=iHT&i_vm+PkGJ0BriWNOyyW7bj;BEil!aD0}^G2cQMLvW4Kg-)H5d33yi`4X> z!3fBIen^yr>|fJ%-!Bj{l;1f&{a5i*M$T9R1iMqNB?tj9fjGjvm0d5p+`%s0<4pC| zY8d0te!1x}EW`yOv~mZ2yf#s&4n99=^PrN?E6R^R+$0rx*D|jrl;aVWWxV%49APF? zZZv!M>gqXAns^;d#nu+d0|fYke^yrI6`a=&X@ZH`VJD#zCu#+Aen1E_e3OK-%s@G;eZ)b25 z_f*Sj|7T-vy6Mkbd2i#IWo1J)AFu>#x^Au+^PO+IW2fSjespr@a^|01J007xG`{rj z+b^$h`i}&ib5TCGz$5Yx37?8fDNhl6@+lpxZX+MiS%1!+VUF&}RASXFSCD)Oq-o`; zIqHG`Kt;iu{bxsSbQV2xa61+>3Zho>YVqukP1^umu-MP2D( z9qIB|MfcaQ4yX5Wt-rlD?ho^+6h7(X5&JEgJY8aP<;Vw1GAiOD%|(zb2RDrTKt4`;o*E!N%uR z`!gf@C^jTryyE!pF6zPHw&QMPBW+yvzjEFOACs7XIm+l6G}Naq+0e|%0O8Kk-=2Io zewsRg2<#v)T)&C7f+UQY2zT&wBMq6*)YnjHyr&$bdI%Vegg|iM#qm@V-3=arKCR4S zsYy2$)J+Ei373NhZSe!ft}*Yk@Y4*`k#^g5GJjQ@t7|>WbdJz8+s*}TwYPPpjK?P? z3r4}Mb|%|BpULV!?nW!0x8;tGlFKOZQl~ShU06z8eH4Bpr?Q@j0{cono(-hv6RZ)q zN42mY{ZzQ!Y^$F2_fFRuKC5?r)Za0j5EfR8vhagdQhipw@MYSB=~6nuUreZS&jfaRg0h3Oie#7~}qnY9W&dPi-E36UyuTd1GDno#{$ z+>~V_TgnxW*I+Fvft+-X(@~~#`31&xW2h9uZ6^co#nb3TBAc;QFre~J+daVO_1d9& zM^t2~?+xW1VO}{FoN)y9NiO4vl*7*WmTFhS#L`WN!^cSNzxifm^5Oxk08wMgWeMspuOe*;zTAIoS~SCT$`8L3a)ZX8y^dXm*b6OF3tijy-U(kV(ui<$kdh&) z*jp~3IN?nUUMV-?K05*q{m()MiMum+jidLa4wr=OtGc|j;bY>}p6Q{#(ls=x7u1Ai zH4>Zi-0%IbfwS;y>I=j8x!ZuzL%N5cbO{1VjYdfc2}P!WAV?^w#6~C}DEvT0RA7pV zppr^Rjg*jXsnH>&(v0o5`w!gvc|Yf#_nhbXKJRIF&p!_4JUo`;5mOJLR& zO6tO1e`1a2rZp%Q!iSN2coycDtznZ_>!wW9{1E{0))vzq{ZR(3y=?MWXB&O??`b{gJIAP?`2h{$vO7jlpKujoBZ~>U--} z3!Be!&bd|>E49b1s%uNCHBuv!&Kl8KStN@1$3L2N5VZfE(Ua9h88n@y$Q`pIkkZ%! zF<^*QOcJ%lJ`p+9D=!_q7oZ@$i}rya2pPQf)SJZKok zS|1jDm!3eKZ|~{OI${BbRymr-(jdZt6*SsUNJ(W=kO-b(!wyL^ui3qvZmeyPys%QK zlIB@xZ|<+={_K37iVmUVX(+*zUCz?u1~GSG`-kzXuxQ-|D@fwl9mGI#vkx$n(E z$|S$&iH*b2_-&bX$eAA?+t~1Gfbg_I<00S~{nOT4>{U@QHZH{W>b;EKC-o+nDGY@X zBOyELV@JNR@+w}d449!zf`C>1CSe$OVQ+|?P&`bMW|sL!^(y~G4teF3^(yBe^46_e z-uG`tbw3LB&u!9)Xfpp6(D4ZJk}yIguU?`jQ2y8!0nC!ovi@sJtTcKFxZuWszCFu> z9_01}&Iub^JVE!2%lcu%4nVVkSx|oaw_s~*NF2LUmczG#xr0Hba}e4Z45}+Zm?rEo z$pwM-9|S8;PDCflo_hbxBVAW5N$q<@^ef4$j!U-tGxlYf-ZQGRdrxf1`VI>4-ahMk zIzVrg)hM@5;~U;xqVd^ii6JLVR0N*Vy*8BZ4>Oejlh08YZj1r5p{%T9 zLJ|`B-)z$*=0AwMlK{{O4gluQ4?~X3gOYA1f+{N2nTV6{qX9gr+@P#iVk!_k3>QLM>^G( zN==yg##ALo?aN@juX=2xK1~W8-iD3~7^2Io1$E^!mihWlV|g?xmwYVoDj(k|ot6K5 zNUusiM;KWeYliIXRM?X>TGW(Pj~B$8;n(U*&L@AIfv2fV)PBFc=xO|h`v#@U{f`5! zLDu+9$Hs^yN`~g?oB+t02A0$xtV*K|Lum(<&LqIaU45rX&=;6XLzZ1_r#BwH&&Y9GvQ zPM>FkOSvdrT8X)I7OPEbRcH$sjl9~>VFP~OoPJzl_=mw-A)@z?_~Oh-&VLeu57^?H zJ{bv$10x$A3A-_}uUaR$pTAs}@UhYT=9x@$Zfgq>3z$fetVZg|Wk<3QK6UL@P|zxi zGy5b*;1hr^dpD5K!Pw{G~g+p6ewp6|)@bfXb5 zbNz&Lhx-e>Yew;nRj8?-VXT>U>;dM$r+>* z%nxRS%RtiFN`#r9?OYB}>PTmPfj^0Hg#9jE;f4)Mu^7I37)oW7^2H~CW`A#e;h+np ziQ?_QUdP1pB_;xOz4n-w>>H`u)qh!3s2Ix0qf&yEH@ofe4>T!H+ihTAR7)qNn(+9V zXkpY+h&D_jX{iIoW_tLsX_MT^1TF&3S*yY_(?25>+kTIi=o79oQEtu3{r0 zlAt-dynVMyuBlyC!=fO)ki|t*@y#PzE+llk3}K^sdd_0_}BF5LtoAHw$p-MIGh4U zcLeM%WxUiBH`493T`)ceM-OVuMzWenhML3S#e27ceKlW-EUs~E- z)zcHiIe)K}#7=j5Qvepm!nV;utoU%W0FZ!>o~ZW?RN@P{FEO?*{!1dVB??7DJ{kF9 zBmQ|g{I&?bls(HRg3Ar;NfdwZVN*g&Bg-ZDUc~2o8KiyiZe7G#r@V}&lp69)Z`6mr zVbfqJ#T_J^C-5^87@g+#m18&hCspyr&PYSJ;}S6SL-Y-x7l2%`??C4Up-J3KNWgSZ zL{VdFQ7;V73q$X}lanuMMEseeR|a8m%s??JNTOb<;-#3it+3gJK7;eZI{(EwG&;=o z#F{Tocx7^fAVI|Rb&Z?FdNyWj$KzuxXhEznU^=dc08E;p+;?N`x8Jtj+Mne27yt2f z5MME{ZJ2r7B3^8`V!~A17(c(op?wq#Hg~u&!?eNvU z<4sdU-E&5+w4*21t@ja(#4E`_!E-|jZ71u&+E6z5yv40K=&4DQ&dOsg z#O?3-0;hSXQpQAta@KHSon?x!j-aw}dP5MQIpndj^0nob6XNOywOfsXx&H-Re|zg>E6*w9 z3FZek-(XEl3F66OZj5cznQu`!f!zan@&9BFeWf*?S8gsvH7poisZjzw0te6qdBHB)Zd<2S9+Qr zQY_J#IGd+6byhR`ZujmCRYm}FyD#IoOGW05M%n9wfR{HTLhVsl zkF3zL{(&e%|4jEr^XN0Nlh%w-Bx?56cAU1hD>O4Mhy-xrQf_2aBv+ZgefIjs&Bmf9 zK|lFLBm3ErM2sN_aFSypkgimBfy*%MJCo3DutiN_)QHCXBJw}R_{MQTIB5s+IV;!$ zas@noW?iW~=8bw`O@RTRFHT5-+dKG{6rzDwj5)}mS3XoY6yW|Qn;tOwsk8|BaqgP< zE>+|}cRRA$b8Y(Ct!4J@i_n$`8m#H{(qZ@X=rJ4skLkLtw&$x*^z6u+R2i;$CQx|u zdgudvBJ!GT#ztL1(d65tN*zw{i0CQ0dRhADL0EkFwa9(XBZHttTV*T~LFx}z+0u=o zB>nIgTz`6{1Re%Y1*42!eTdIr@Z$st%sM<8>-$DayEaYbaDFa#Kg50Iu-D8Gk7|>B zfrK$mJ;RYZPy}|?y1z5QE#RnSkCS_)|K=WQ+{6rmPKXl_L>x?z*kTnvO66ig3vp5{ znFBaUte9?gGuSUF808P^)h~Dzwu@B_Rk6z<49KftR90bFEV1Tc^gD7r*@+vVh(|e5 z8bMiV%rQV^zY*@ISQ=jX>G`#)P{2nmi4|3NzW4RGcKUCy_M27E91LEcvj!6k0F5bq z!l(g5!9Nz|A_qV7cDNQ5-{sAy=!qsuP1PaA0PH4Kj~IF!&qo(U6)w7qi0&!G7FBjX zaolXI8I6Bv8iUCKpLgqzcNg-t7bv?^0|yT!TX)zT`D20rz&PV20FA@@T1iik0p2{` zCt(XW4u1<@-gs7x?$uE_A2jolDLMrwbLZ>NHhw0Sf*VideCg3w%7eP zBRXi8h zKN$uzAu&2=GD2^}bobEU{_zm`-zAu2L&Z{d{yt9i)s7pimm&;isr4|gGU#I@5w)f6 z(L;HWa|V0}QScLP(G*Wi33!ve`al5E!yY}tKV$M^FY33nlrHYo=b`A_k6>|hauz6P`h8r|kp9$a1;}!~W&*O@2 z5Pedu*%Y~_Bh){#AprY{(MX6y9>q>cMFWda-GH-b39_(z56^3p0OHH*W|Hh+{ zbPo5E25Dqy8W!JHHzX{xfXiylaon6K%F&Uh{EPk(6J*mM4g8`lVcu1U`DcR)kSwg9 zj%>AKwL^_dF}@zTAlt0j({hti6BGL9jgLAVWJ_dCQR=>LUsTUZdPIj=Gdl{uv+WI| zxEW24vpbOY%!em$ullM}4h)eDcqmMgM4?&ppKoDK-!T1!z4CzQX6u;=gySePFrWrVqhc?2brg!8YURzGy?lQkxjTza%Dyp2r zw-tL#ecLS84Jlf$|5Q+4;UC^tK{oU_=Iu!TlKDOTw?6|0gh^t&3EdsQF6E7*crk?V z@zHnj?A#fU4X>zyGT zJRWS+N+eq?z%x&)8s+0Yfe9wmUTO}c;X-7E4CUS-y}x%qy(0O~9?=n4H`!a}Z*+KK zFCZ*#C7TaGjTU!*R{L0;II1CQVCq!MUz%=TKiJ$~JhWv7gs-VxLpp{>Ik)k5Q6yn- zodm;H<(W9LU^tM$<6% zV1)+xs#ZTU!p%UDA7K#WQqMEaW6$IIeemP&3>W_(O~9xyhnh6i!0qnH29 zU7Y<@c>k}0XJpu)l7B0+isbuIxwj106xZhCRXjD_Dd$Sy%RGE(uv7$%+ulZyLi9O7 zEr+$J1k5VLC_bDfAXNC3ie$M?Yg2!>>Pbv+{5F$w5v~UGPvJUUVmFq~Z2g%{KMqw) zj{5qPFl5y{z#CcJ-oT-g}freQb z8T@8tO@F`y)lj<|4@G-wO7Cow139#I&XpZDEYk(SSs@t1g#6OPzcHeuZspYziy zR*Nh4OME>lzpFD8r}=*@tO|$C9#sz|D!VWfFyAF^ENyi!>UrOu%?`;~p8O#hxbd7U zo^RJeZ8~VY6j_=(l1*)^=faOe8qjS0hebUIeDk`O5e<|EP@G`}pH!m0X0N$+s{L#_ z=DexjwOz!zzj!m{WTmy?0%inUlzHrh&9Vh@jBG6)dai$lbpmfNPrm?kC4!7O!>1BE%x>n9j7bV4K^;DQ7 z=*6IGI^)&K?anNp>rMQ0Tj#%JjcbD2zVBa=TcaMLlDEzCd_-3^jmZo9RwMOu)C-LG zxhYHF=ZDx1xSe8n0=fk^Bwf`Q#4WBl7hZBv=#ZAv&Dq(2dukGe(&8lnvtZCFE)rL~p39#Hif{t{^3oJQCXJyd0 zfVbqw4$M+jU|)dezcKeaXEbx(p8N9lJI6f9cKV=VWOy%ky;k|lwf8zaR0mkmF~!Gi zqsAZ0v7v4|L|a68NzsFuzIM1^N)vUqe$fu>@gMD%GFDQ=!s1EOhWK$}x=U8p(%U}) zA7_4QptRmCe!IDlqqbp3SW$`$?OhVAsV<3%Ks`wezU1#7PF1R{44w+Tb8k+`Yoc?N zmUACyl26gPuu?Hx-%qWAmJc)J!QEqK@E5~C?OhY25I?3Tk(=|a@<9c^U^Vs-qNdK$$V@AEQUD(;yv zx_42<`ih_kNqp4irTm1`ltATe9IIvXalTP~)@0heyh|&bj`~sx6IX51oB@}g6EAzEW=QCcLOf?yrZg?iC zs%nM3{OjqGtwq~icC($}XlHVuT6=YQil$;z=fJ_r4O@c9Zn!V?`WJ8N#v#=N$gvVN z;S)^BI0aawW8BH*e#GpIse@18@%8Jay^fM|S6Vw%zdH3Lya!ZFlBiaC*3X?0`c<|Y zgGU8x2A9c`Ejs`zZoJ8)-KJFa zRi}q&C($z)_Vv%IiAh2Wr|m&R2^XITn^D-D+fn~GKfau^*_fpw}f2$ecw-{rnP=>s5RpEy`=u1!edO}J&!Z4T1hFUpC1R#Ngi45 zl;KRfaF)Q5fmk03R2kuth#>W|L))ab(HN>N%?Z9wq$lt@as*t7HXXq$z&h|lOx28f2ot^a znch2$D8F~=cL}|t6I_Fqu`Id$%%ZpCJOdA|9<~~Mu?TKDJE=UmTeU^F}a<~Z`q{p9p7bMGYTp1gXv zm%>(FEl%qN>vc;C^+CFA?MpdWc@Eqm#v=fdO`0)U7X1sI^exF-F1UU17JxCaKlE4%#hJ3hN z;5Pdr%`vnqX|!%Xbk09$^{^VaOS!kF$^H&O*zCvAQ{4REt5iJ7lwS$9L2rNlmXr4R z(ysB{_s5!)u{1ayjs}i?qWET2Nqn6djj}>v=rs_pVFN6cd|L}`SzyOj3Z8Y3v>8-ti_4tE&=ct- zBoexXxQa}GY*8$EGID1AV;LK`GZZmT_?APvA7H^VhCP96aa4N0txf=`1+)v5AAKW6 zsnRJUn0Iq+s&v|8GwKA8-#iS3DpkbAvGm!L9k?wrHRd%W4Zi^KArWTJBma95x*qDh zviGwdPIST1lTMPlQe_)7VK$s98$SFT@M3*VrWb3&xg^~@Mz`*l6y z3LW(W-h{rAO@mGd&Kv7H{!L+beIes-D7ozQkS;eq@^%})1~(=N;AIeU2$qHxlJC`; zvU_8PV|Bkp&lh}Yne;EJmzrlKZp5uo2U$`Bcd#5vgL*_XfX5KIUTY-Wi74^C?_LsK zzS*2(QK?C&K2!j0tFRDyDJUE9(BhCEUnnSs5wre6G(w}UCi;f2oFcnV%i|!@aJ@R7 zK@N0Z#)d|7N~gNEx%GD7*`Pd32FxHpkJPXuzbL$SW7-9$74{Pc!(>Q8s0d4Lvdbs_ z`ErhC42lgldj2-PR#LsT4L6Yf7ff!yw$_w*q+*fSFIIbv?-7T`_tE*EGIbkA!A44+ zxVoqKJantr97Y-IY_y(9cBcH;*+WzwAxJFvyD?{wh7#z$gF4)i8E=><0>(Lj&Q}uR z?&*GiNSl^b^JvxkSQz-f`4PQ9O04n3at~O#D>PPIaOCu2j z|7q>KnRFTy$PXU8?D{*06NxuL`jPL7A>*Q_3pcY+eBh~Pbfg%%#$($1NdLHRO%%jn zWwRfLX;>rAz;|OC#Paf#u@{`YzdMS0e^T7NReJ*8_>G0dW!=XCsbqQ{X~;|@+|!T` zK4{989NIg%Gg)-Zjt?Ybj%4)%#2KQA>U7++*}|&^bBwX}#3S0|2JLqnYfN + ) : null} diff --git a/ui/src/components/HoldToPour.js b/ui/src/components/HoldToPour.js new file mode 100644 index 0000000..2471575 --- /dev/null +++ b/ui/src/components/HoldToPour.js @@ -0,0 +1,40 @@ +import React, { useState, useEffect } from 'react'; +import { connect } from 'react-redux'; +import { Container } from 'react-bootstrap'; +import { useWaterPumpAPI } from '../contexts/WaterPumpAPIContext'; +import { startPump, stopPump } from '../store/slices/SystemStatus.js'; + +export function HoldToPourComponent({ startPump, stopPump }) { + const pouringTime = 1500; + const api = useWaterPumpAPI().API; + const [isPouring, setIsPouring] = useState(false); + + useEffect(() => { + if (!isPouring) return; + + const tid = setInterval(() => { + startPump({ api, pouringTime }); + }, pouringTime - 500); + + return () => { + clearInterval(tid); + stopPump({ api }); + }; + }, [isPouring, api, startPump, stopPump]); + + const handlePress = () => { setIsPouring(true); }; + const handleRelease = () => { setIsPouring(false); }; + + return ( + + Hold to pour button + + ); +} + +export default connect( + state => ({}), + { startPump, stopPump } +)(HoldToPourComponent); \ No newline at end of file