From c96782d7c132bce03d424a760869affa9e8e4294 Mon Sep 17 00:00:00 2001 From: youngcw Date: Fri, 1 Dec 2023 08:40:35 -0700 Subject: [PATCH 01/20] [Goals]: Sort the priorities properly (#2000) * sort properly * note --- packages/loot-core/src/server/budget/goaltemplates.ts | 4 +++- upcoming-release-notes/2000.md | 6 ++++++ 2 files changed, 9 insertions(+), 1 deletion(-) create mode 100644 upcoming-release-notes/2000.md diff --git a/packages/loot-core/src/server/budget/goaltemplates.ts b/packages/loot-core/src/server/budget/goaltemplates.ts index 9e8e5b49982..1c41d10dd43 100644 --- a/packages/loot-core/src/server/budget/goaltemplates.ts +++ b/packages/loot-core/src/server/budget/goaltemplates.ts @@ -197,7 +197,9 @@ async function processTemplate( // sort and filter down to just the requested priorities priority_list = priority_list - .sort() + .sort(function (a, b) { + return a - b; + }) .filter((item, index, curr) => curr.indexOf(item) === index); let { remainder_found, remainder_priority, remainder_weight_total } = diff --git a/upcoming-release-notes/2000.md b/upcoming-release-notes/2000.md new file mode 100644 index 00000000000..237e05dc91f --- /dev/null +++ b/upcoming-release-notes/2000.md @@ -0,0 +1,6 @@ +--- +category: Bugfix +authors: [youngcw] +--- + +Goals: Fix priority sorting From 5d1f2d48ae3637be78dbbe70a0d1efc4c32695f1 Mon Sep 17 00:00:00 2001 From: Joel Jeremy Marquez Date: Fri, 1 Dec 2023 13:10:01 -0800 Subject: [PATCH 02/20] Larger mobile autocomplete fonts and paddings (#1900) * Larger mobile autocomplete fonts and paddings * Release notes * VRT + update tests * Update tests * Update data-highlighted and tests * Use styles text * Fix tests * Fix tests * Fix tests * Fix tests * Fix tests * Fix tests * Adjust Add Transaction padding + VRT updates * Larger autocomplete text and divider * Fix rebase * Fix rebase * Fix icons * Adjust fonts * Fix lint errors * PR feedback * VRT * Update embedded autocomplete highlight hover color * Refactor create payee button * Embedded create payee button color * Dummy change to re-run CI --- ...from-accounts-id-page-1-chromium-linux.png | Bin 18561 -> 18565 bytes ...from-accounts-id-page-2-chromium-linux.png | Bin 18890 -> 18890 bytes ...ion-via-footer-button-1-chromium-linux.png | Bin 16904 -> 16907 bytes ...ion-via-footer-button-2-chromium-linux.png | Bin 17189 -> 17191 bytes ...ion-via-footer-button-3-chromium-linux.png | Bin 20205 -> 20216 bytes ...ion-via-footer-button-4-chromium-linux.png | Bin 20408 -> 20408 bytes .../desktop-client/e2e/transactions.test.js | 2 +- .../autocomplete/AccountAutocomplete.tsx | 185 +++++++---- .../autocomplete/CategoryAutocomplete.tsx | 289 ++++++++++++------ .../autocomplete/PayeeAutocomplete.tsx | 282 +++++++++++------ .../autocomplete/SavedFilterAutocomplete.tsx | 5 +- .../src/components/mobile/MobileNavTabs.tsx | 18 +- .../src/components/modals/EditField.js | 129 ++++++-- .../transactions/MobileTransaction.js | 9 +- .../transactions/TransactionsTable.test.js | 41 +-- upcoming-release-notes/1900.md | 6 + 16 files changed, 652 insertions(+), 314 deletions(-) create mode 100644 upcoming-release-notes/1900.md diff --git a/packages/desktop-client/e2e/mobile.test.js-snapshots/Mobile-creates-a-transaction-from-accounts-id-page-1-chromium-linux.png b/packages/desktop-client/e2e/mobile.test.js-snapshots/Mobile-creates-a-transaction-from-accounts-id-page-1-chromium-linux.png index fd6ae26237a66b62cf215fc801cfff9f227be873..c06b43e4a84970056a9ead189cc0143c15f376e8 100644 GIT binary patch literal 18565 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 W+1WI#GvNOUfn=o=B`d^@Km9+CgJ0AD literal 18561 zcmd741yEe;nl9WxfIx6UaCZn2+&w@Dt_hmpZo%CpSaA0c+=4s7U4mQV+PGW8zu0Ha z%)Vo1pZTY5-Ky@Qs(bORPv7@_WOb;byc8-j0Wt^#LVYJKp$r1S=z>77AD$xspD?6E zrT~9nz9>tHfyzdRc0nLA&^rlHRhP8=C1(fKx19*bChqV319ZR39I?oygv9wcsA{gL ziHJ_3ONc(hdHGhPT|+dQrhtqNLqg0nhK}s(%U!H*F(C490h6W9&TYaJFDwSEV}=8| zww)ul>#s)Alii(No!IJ1EZ;>@(T0Rb7`-JQ)2mN|4L51g^7$VJzz=9e52}PHJ z;ul`CgoNK4m(Y-B2FF;KNIfgm6jB&0aVgtZ@d@*yC-f6)!mg`o_0C;l!4w z#0kl;r(R=@!%0aW6NqiN=x4wHS3WN(5-Gnzp-7>oa3iA+YxKPnzbcDe{`iGS*w{U5 z!6NwCcUm6X&zY$CT*<2ycdbzdwTNr;N=QxMk#o;Y*zh@$kT@Rx4!sed&aKw6ZA-YK zT4nty?85HfEDB$9^>Qw>_JdPtsfivsv=?=<5hbD#%3EbG$0AZ}I`T5VpzDI9BfhMR z3Vt+F)x$-&!WIfSuo_H>rv{VfxsyiEfx8Eq?k#{D9x zV^bl1v#TkaMA#rA6_pONpYRLhm4~Ye8Fp&e;{K%ss8$zo^w*{r=RWi?D=mbLF!4BL zM()Ohn0HOvW5c21utWIr1?O`L15^72V(X&jafLquhBvz6{nd$Xexs!B>L&XP*x#E} zzlu*~AlK-(g`@>gS`14!Cw&otSC7p-@(@m%NSl4oL>Mwde=wz{oSn)-v~^kI$H_4G82y1-6cU8%gap* zJ(=IeJPHuZg?ZP!>Q+~>1nETi9ZdDEnqoj# z1=vK77;@30bB}_(3g(pqU)+`OG!2LU18G46nSo zb=8{4$T@iX$S{1UHLZH%eBG1aOV^)nYo22S)OOg4bN&}q13mgMB#ls=| zDQCD%dhom%A3li$1|fIt|D-TZ#K9qC9CP+1y&q`urV%_KjF%N6J|XbieD1j{=-}L% z917_@yUJJZ?vW8_8CbTOn|scve_4-M&WrkVul(8%pWclk_hp%T6@V|n)-^;we7Qt| zh;0nX9t@|20~p(+pL>q_@ad@W)E?@l%b<=yt>CIf?e~*1LeH-Sf+EnfCKg^7%qfMw z>a4D}?+co=n7doHPXaaseyzfA*TLDxqrp5V)~)wO@Rowv$pi%@TP%@utG?9cop^01 zmKitE^MbUCz@+FEk-Q%=JeDH&p&gI(Oo?y{`Nr)@9!Fs#saLq5Y8bYFwltX3@zB^* zpZvDxA{Vs`E3qZ3=9|Vci(jKLI9V)S5?5&jxe0Q9E0Hf>INAE*;1&jNl{p2(7Wz^8 z_=HZ5vFrW{tAUoQm4R}sTV~d*ZdTOG$0IQ7!bGc5|HeWg0)Cd_s|SLmuD1Pa1M%q{ zQRc*KSybK>l;1h#FQ~m-F2I=&NG4QNY0+6HvDqG;z!C4uW@HSWw=G8pwsJIYKy#eHV8J+~ZRv8)W%9o*k_kc7p_P3E|M4`VPxP` zTie1%;v$u8qSdW#3S?ecx_bfYPduo=ud1zC@Zr}WF7Q}xrPBST*xHIU9Bhtxmx|i2 z@$(14=|p5*CZ&z4b+&}0Unfo@=qaXzFQBQKtv)FH{$nO4R)%FAKHXKz)-mF{wOI6B zsrvJF?{Yml-F%uxJgl6#Fr8G0$kj86pm~a?yGBd{+=?C6aLVO#s};O3i+6~*FJdS! z8nJYfG2?WFywz>6pL6P)P%@D`^1K)J<2%F2{a!hb+6 zUJ+vS?REQ9C)Z*tUAD{@YAlxd>=$vX8%oO_qMIDF2g7$S$h406sq(d=3vMKj_8JI2AH`NrW|pxm5>H_7{{gTNsc^5!~%haLvht7$r$^L9fAt z!|bg+!q6_Yf!9^0yqAgOFq+K0N!%;^x~0wzmtG`KeEiGS#4FB0B$Fyh&G=OM?BD&i zXK~MhQS0qwJ30k9>K)08!4_{_dcdhyGlV^cv^lTv$TeVp)x;Ofs098H=cv$1=cxs+ zosCA*{!o>Qyj#%|MN`r2PXXun(Z}%590u7)cC?@?UDaI_oP-p$JF1%|T@XhnJFrOK zGt%4A%6CLye|-E<{lFG5>G;UL-$RN8ERkYif6FF$4bJlgJf8&0!-(hQ#PPOo27>ew z2tL!%N^NT_Dy+m&$s<-gQewX}&yv0HCW>0eN<$+%Q=itu(LjF}0+sXAuA7G4og<|( zvb}2t^48CwXi;xcLOrj@l_5TjZ;6E7(#Pd=&gqMAKBuU0tZ}jHl0u`wiv6mFGbdXd zrw5lo;9^3$`@z9+7scs(jj}!hq)9JT)PC6ehIMek%``7Ra13(JsEB`Krxh%HgioE@ z<>Gd>Y=NIzC>Vpv!2#*4!`d;&+8Nal8J}6wh}2gv{Aael0ps3agi$+#UXLE@Y@+S~7I(3N>WTB9IfV;J1t~@%x`4N2W zepC7d%koFb`{IZ2p*zpluWi733bJPMs%B+kP+j|HGfM3ay`coeKZPzeylY&SfHRj1 zR5b%LDr>^IHT7=N11H+QDlc9MOv(oyR$YY583oEB2rP=Dz7N9gZKY4n^K3v{j+JiR`oZ>2{#zO< z-MF!WOa%0r(VME+=#_T#a^tn>kNkVVMM~v~1l*&uCqQSdAJq%aW0-cMRX4Dcy>Nb7 z6Swl0$2-hLma-VVbgYt)K&K*CpdFO9CDYfWVZ$PpZn5qyOP0hO#=;c*762tq&sb@X zoMB)6_H$$p3lpk^l-@4e*56J|v37Kf@z-kJzfv6c%c>U|J_PY%Dj{`a{{Jbk|H{q& zi<13om$UHx+t@ON^^VOCb(@tlYvbP`6SK$AL!!FWhX<@`B;w85{jNE@@bpt=lHEHL zK6Jb=4HNHx>i~&5zQ=}P;ly6uFsX^&ptae;FAWLrq-7;j$COO5`H)N91GC@FR1`?sXDm~tWBba`2CZ+bSi2;Q=C4CPnBlx%lsS`w#^587HmU z-LDS7V*Y8Z~kAq#E|+CkaS#`V-Y$rh(3I708)uxNkxhJ@syS46@Wv|>$; zebbUh*2K0eSHh=Db=A4ZV*)~2?#9cdOh6*bB zqMnVb?W@Ayz9pf6Lik*sZTb&peO^i_W1}zJ1v>lu{A#e)(^e65xcF|+`4RRWHR3^YO$0r*v~L3qEp|G-2e|x25Bxu|4kxT_Y~X!YNjZR7=I$tr?|URl(}TG^e{VQO>H^?J1m7}F_FupMvy z2=O~)Q1S(4$;28g-(w@CKv}INRk!Ks?jU(RV#@RQrrA=lj;2Vp$mg96Q%5^EO0-nj zxcJM!S!bo;6vF=X2^laV*VyRVWO|3qjD$8RFA#!_qO_#=_43IHNYC z*N7mFc-~i8ZXSy0<3zn6@Tt{t(rmH3nx+|C(8vQnpphcsLcM_ z;SkXlTfv7{8HaZ+k&avzs_5^xuDbMIE}+gUC(Vwfu%M?Nz~m~3vb9|LD0KVRK^uB7EaobVLZ>^TL~%*sei@WgI-+z zGS%VF_(wcqLz509sdT;x*odH)tTf69+y{_E1mUk}h$<~Ek&~_w+0e&Cf9j1ydRH*_ zHW&eV{@nG0&Z16^m~?pM+9DSv^P{2I(WoDOYug@zcQn_uq;~6VKKD{Im zzr0N5kuzMsutro&=midf&2C2_!fEpHF{w8BbjzK=hk8@y$vyYcNIXtA9vTHNpbOzW zt)9Z4A=3wVJQX&Te{`33wV(48DY(;jR7eK~RG^&4wl$o&{z@N|HEvq*=@*e|kt!zW zcrKrD#g^x59&jh>0aV}^t?i7jhlDjDfbiIjInLd5A~#VG;4)mfP(T=jguw>A4|EA! z66c9@+`wK8g}XyD!6?Q4nZvx-^2#Xkg`ZLqsrhviQ#Y-|{UL~c$un;E?8wDt9sE32OtqT%y# zi~=zGARqbdB{>8)o$3D9Rdd>}twMHKl&tZZH?(xYpA-x3Fg)ghLLRW7a8JWJ>>D@a za8(1F4lpEUF4%hh@zo~4ED0&qT7Cq9M}29)BMi7$Sbu5dqRra_i=;>EH@IJk{2)_TzzH=YHH5WpY-&F^|q@lAdy^2)ISX{#~}C;^fTkS z#{DYFHDRg7f+cOFBzVnnf3o$%JjS?Q&LWT|Xf^B1HrP&xH9kFc1Pxk@9HmR?-ND_it&02ERv2mrM+BBckLRLAjd!hoh4<9h^Z}Q=G zemBrIIvj>VA6=OJ%IA+AbtG=O5wjC1x}jtaz_ze6pj}(}r3VA5F`w$n`UO=gREF>B zr6uziLPpK$jM%XDd0K?9aVf&38_95-oeMDhAPh=%Q6v$;gny5P`hT#Lg$RGO!~a8$ z^PelheheKUJe69smRLZA0TRhm&iT@mkaXfb+A*5t9DjEh+~Q&~j%@j{1>|UVd~U(by~GnB`T6d1d{S_e?z|+}PRpWkVSux4oj5b6`lp zhYfxg7?J#`72AzOkk2^^rLMcln^(+t1U3q;BWlJLh8&t4g;B@EN=bZn9H159VM6k1 zEyN+MQ}|b-8L*&=d8+2SaRym0YaWIK#;{q76YGm*mU2f43F^1m`2_dSa~Eby3@<*1 z$(sGOc%H81#t2@OUP_=G_+S-dvBWqU)m~VIiwS+Ne#1#vn{BB`ma%{5^0`S&LY3m$ zFmh)1*~U+IHLK7NG1I!p0^J%cbJb$M0)HuO$UTbNP!h+hBkyK{H;HBX2hIy`EC#-O z>o;uOK?bpA8MIQ2 zN@w8?U5^)|5kw)uMQZlN6Na@}Q0&oqCap?a8d#KD?HSH8jiw5qUsMvlepe626XugH zB?cC<1l&ZR3dUQE7?t0w9vy_Bl@#N8S4Je9LBys#JYhH194}tKafPd4^)~t9U)cwG zhFV_Ek=*%zOpvca+2$)ROn3B^8l=y77n9g!Mk>ZkJy-m>C-()v%8bnOu#g*wWCC-@ zbjTs;)R5S?pQ&bZaU(+ z8tOl-IQ(;`@vmqY|8V%!;60_L81U_;A*Y`TL5amdNZ($GPcDg>P$BO>6#3DQoI8h{ zx^etYDl|mqMZ7Xvi#n>mJZfIYnX11AAh$@gb`}$a{1YO~e?5TzsjTzwT1@(xMVQfK zi~nBTrYn>kH%qZ^yxz+yoK*0c+}=#T`ehU8hD-IcczS=aLeqAa@IS>QXH=Q7sEdtp>J?W}4bIcj0SgHL{qvcO=w2_IHVju#jyVGu#cFu3wSRZPx-WYXApYKj%f-2be za9>}azxUv?ajQKhKIxF9i$mrp(|Dmm8#$t`w_oFeg3pZ#AkuU58y%oSpE{}=lGwbc zGIqd7Y<(D>J9ywbQ);lw&Bycod71si!@3D2&Rh2_Ew_(t}caWs^EJSpveZp^EKw-k7x(m z>de(z!Iqm(kPWWwG1>qM?3h*loU!9o%`zhZ%NffOgk1^iMgT~&^0Mh5iF1>;&yX#1 z9~%?Ozu_LqO-+p|69_8`<3%z!Plbf(er0eI{L#DU>R=pcHTn)noKCuRCTv<`51}TD z38f!+uz!jA&fT6&-y6-Io!Qv(5CM3br@{(HS$QH`nE`Vrv!(5qC`|nqS|%;67^+{E zl{sdejURX*ICWNyPNsnXmdCtY({i!i5D`!2 zP+T64)>?aB%fG($NQXFff#F=N#PA{yb%S%8W>!@vCC_($qb(nWGi#SeDqXWMK#Vz9Ih$@n z7h}9l$ydIt!$WxR35bDc1)pEP#h;|5=kd*79Bp)c*Hm_ux6zsq=RvpMKMt zM3D*{-nFWl)C#k^C|0eKig#GGM{`j%%aSV%6{1%Ig2F`a)vekiNzprK-t}>$RGKfT z-`_*tgyVySdm9NS3qzfl2n{Z{wO%YKP~_aYI+CvqHzhr;=QO?z8Uo{a zmEd*U2vPp|udp7?excT2VT+ZCb^Z8+-E`q+WpAyl@r(I@NP8`=?>5e|p5!RQ1k>H8 z@a)ICDM!cSrxz9cM1Qn2oEiB8b+2)N`(MC6Z86u{Qa59^YTtOR5w=H*A)43#0<`K~ z;&~3=Ik&=lzAbsVe-#I5I_!a=(7;H|uJO z3B$Lx-+mcfyP<%qQP?-^@x@>-gbwI{WEC4{9H`;8rurCn=$- zd9ypkno>$K=!&A7y0LN&iy4i}!H}o1{mVrS?jKeb{|ionf0uIpa*Ij5D{Azc6|+>B zp5zn^^X=G$kIXKsX?95dW}}jkEZ}YaM7PMEV)@;FrE7@8fk=u6+6yti3Muk zb?C6H6w99if&5^hmF}ItJBYX_ZW9?NL!AE&gv?E+3q9iY$R+#t^4E2@$_-YStmp6C zn7TK!S~1H*UEeHk%BS&0g_e(YwvUxv(|f>E%&>?;`OrUib>U0P%J*xu0X)x-wzik} z$vs3f8qev&fS#=Z*k`ucUdTZ+0>UYt7=m2f{>%MDhG@-ZsVA*)9kcQZRKnG71r5&h z3fz`L?E#urELHx{Q;H7$0G&a8KvWQt|>@{8rEc4W=y?}zyAESBM@ zmp%&VdCr(|n$Bl2gYTC2{0@P1=ZnMRQYRq+z$q!!a!n-8A~n&;UzBBzK+=*@$Pfnz z-YP3xuJ7Es#KLTPn?RI_%)G_UUg9%koN3ZRB)W!1d0agX_Zyttg;vetc+xE|U}54& z`ufe#ybGCaB85Jn4gC$~WLkL2$PfTkk00#)X-O}{{$GgUQC(&pI*{|>_f2=w|HunV zz^i4&TKuO8h}G}!DXNcMwS^gX2R)UFoKuie>zd}zY;a`SbdB{m22{LBzX$RC$@GR@ z!w~>2&~Z$=2!ScpO~nX$N-8^tjyyOun1YSfodEKI0cl1Ml%{Zrbb+CBwK}A&*kM9? ziRJb{<@c0rMhf;PV59HQatt6_ARjhS7$Ex3$=7ywFH73aWf5I%ZoUzZPD$`(;eNZZ z{u~1nN4wSkYU{x8-szkJAlMzWz;#k40Y~9M6T8nq&HqjInQ;Oqq@Lc}zW!JP!|x^V z92nt*X-|=(*2!6UFRQVOH^?VbGzz@L_vv&Y%$A)T6J+~PUYykCfEt9h6TSXWpeEzN zdPeQhc9wrn0z_2UXrOFo7bblDXbvnSZ`7zz(qXOk&xLWTK9?cyv&XSoBLh%-Ls;TT z|3Czf9T$RqGD^hWR7aOd=7<+@dE(}wZm;{+JvAMUeYMqG*8!g{86;pS-=eh>$Z}*% zg4j3%hz7Gh8F)e!xIT;J7f`n|G>>L`@r)S|Hs+03D`3zHK@P4%!TyKJl$dmiOiS5*>ez~76z7-Jsj9@OrhT+JE z)-!=^yfRyOCRDs^%4X2@-ljo!`JG&6$0no&{Ghz=sCqMs?V4}{?fQ65dPZPg4T+j3 zMp&Jr|AK+*UEJ<@nUHU=Ew}uFp}g_Ybttr8#e<}|S0PjC@lAQQUX=Vb`>j^mTpbLY zo8zx<+xd5|Judi|raez1As6YB4zCBKj@|69qpDoYJ5a)jW?$f5+Vq49LdNR7m>fuN zDXgi%Cm;DAsn%w3CWWJTF>%sH{hhb&jgkP}gc9M>PqGwvbyPeEvO0E116$ZBzR8V= z#6UOQzcD>1%f46$kJXrA4RHrFh?tphj`)|%vf$5|Eg%^niJ?}?X`e_?Q^OQRj$~zg?gL1cX4=P-`-84we z1=*f2d$bYCk&;HrFuCWB7W7|3_Bb^Jff~Gg=;8U(J#KX}I`+F6KUcjA6mkMpd|n{Y zXv+Q^YkTtb>L7(lUDn+j$=n$)Ab9?=_l3=nl-rLtTHdWo50oiaD4mgh#+ zdIPNdflkyHCBo>G3}0LmuN_TNZ+@iU$c&DDLC7(rR&BQO2=}$loldQr7FS_#ZnQ=A zjF}y@&q?Da`ZW?tLig!tJy#!!zK{)TU&|eQsgLbR!#;T>N zB(cU!PNm+ShsujG&Hl0O)2nr)>Q9y6hiZ!LXjiYu^nS}WaSRJc6(2?#r)BqwDlT;vshzfnpWZNVPHS%TgK-U~p|6Vey)YO3}KyMPyvTLDf^7#{HY+7kJDOdL3=JXBC$BAr%k!jC| zRD&fjNmEBHuq0`lsTcM=OVYNb+{sKM5N?~M$iV@dR%dmaiP6#_Xz!2;X*f+)m3CFe zNSMZ&Hl$8Ma?@=nR3`SUGSt<$2pE>fgi z>?5-8vRRNC$Z>?2QD1K*_C zHWF)+Bi$Q`8laeg#^|Xxa43+uN>7w{4fN7N{2h>9&mRDV(If5bE`&9qqZ~49gnW zX89I}bRImh+Z7QYq0zqFya`RDQ8L>;i?ukCOZ9Pm-`3H1oL=$4s$$;q+WIak>1sD| zXE~Q0)P7hYPM+9#b2Vz&quUl*hs*3-EJYLhdCPC~Ge>eXK*?MQfAr74HO_o|2J+WM z%>ab^z@a(y!%x3u8%bZ2p`Fe1h>I@efViqzy;!N!a)EtL`KcIw(!uOM7PFWShxkPg~Tct|19yBDcib}GV(*6xp*stoS_tm$-{(#;YS*yy;n_Mk}b>% zIbMnRl|Vf5sIz3&mxsMes~D(n=jD6lZ87C3}5GS7TXPFNz+TtIfa|guHT zdb7}BS~^nY9*CQe2jo$)Ru+_U^<2EOOo8%J61E5JDAU5#CNiC6UWfI}XtGEbo=IG4 zeN|rkQ!Lf%49>Yyv>KVf8q$^srs(l&r@JWKI?ox}qgG@<5DMl;7oEwc*>L&&ZD)C4 zeYB|;Ec>f-s`(CkS%bM-S1Mn0bp1B^Kx~0}*`6;QV8KB?6Wc7=N9-!LH;Kpkhd4^( zUqj!EU3?XFO;{a8REbV{D|dvAG*SfdDc2o}?{BL_*@@e*>z% zcx_!m1rW-0^Cf@ufBmjXDb*?=!3)4KfCi2J{IetLjHsE!1|I?RC+71;gD52AK~7bM z_gs?`fUt4MqbjJn@GO{^H)!SNWdG1~{y&9^e;HH$>B50~YYcZL63-4A(I=EsO~9$i zZ4;2#i_$GV#bCtvxPt)BY=92J~+$}C42de`cY3wi=TpT6gr=yy)*;N7grdNg^EFsMDZV{GDNBLK>8sq08O z*>oNPkRti_5{tWLv_t3thSILx?Y$n}CaWgecE6~15w4Iq!tV|Z%eHq|G}Gs zQ_D-i055cZ&L|*k&WaG^6sTG1r&%i2mZ5X3J^N|@>%$bS)dsCMFs~W=GsN5a%-c=r z&1|gPLaFNq7dw>K7qe#n36qGa$0;R29XF@nJs!I~RwuP>3F!zr?aWTI4DbSXIt|6DvhwdNRXU89D;foErvr#Kr`v~@{|7G^b%BU?&U?9? ziJyd<32y@=CO^M>opR^5q+<3m1VIWea3Jl@`@ge*j(dNwfPv+W(h}%CSy>=yCw}GM zY{)pRuABbcH(wqv0W}GLMIx%NHKq-oCi{!!*&j{IaY`KC!5?UHIJHF1x`WE)p8w&> zak%13`#K*2aJ#E_>Eo^DF(EQ!KvGnfBP7#5da#5{2Oo9ijLzURM%-_W&PKyk@amHS zZX0IX)W@Or=9hdfu`0ixXfMF+9 zDHwj~x|5>}PFst)7``k~CoJIt2v_t^bMtaL;5@7BJ!a_#jsg|z15K`;J)35JUZ=J+ zwy{`PInJb^SAg9N9yk;&@?o`1sVk7YFWTbQf2Qcl{!G#RKI86OaysPx8#`A*wnUSI zD3R+{Q|YlP>+#c`Qs{o45%9He6luJ8FYK~(pv)FK=V!bW)L_N`IGi}1B_E-EM&7r) z^2VEClXdB4vCr4V>6G8aX%?ihz&j;ey}VAsK8Bs#&tP}`4shbw;M4rWsB^aW#Jc?- z2utaW^1q2^JY0;(BsN*!_R*;F3_G$^I`ztfBsZ(J_b|rc`u;@B`L1d`6F{)h48pf> zKq2?#6-JH-k;w-lCsi=Euh;zAp-kcWN%89m%fL2WrW_WDbI{2|@n;ULuqML1nBJ9| zcWCk~7|<7Hsxlc9^b~2$xCZ3bYd|jn`ioTn#2o~fcy@f99_6&- z#qVEu#7`{|ipMCkg+Y5Tfaib&#{m5b&tXq&xhqeJJ{w6@41sLIP&6xZgq!#^XygQI z9Bz1LJ+=O)HA>}8Nvq$db(#p0 z9llT*zkq;e9+z__NrLW9k&q*1@6|wD#a0j3Xr0_P96px=C;qM0NAg;$Fdxa>U-fpQ zpC)%!%PvetA42DH6w)!A z*|7;k1CJ(_b`+|ZR9IYHNjJoP9nZ}apE6fFo;A>^*a|B@nVMPtG+U96f&GQN_W+&b z9_L`8E>N49MZc=t|QlL?$xAqDb6bk(b|M=6W*mmP8 z7hWhsBG9OAp@qSu=Ct3SJ8$eu^RibHe0lRJ)<7J+e@cz{O0r33#cq==NCbL|PD!E9 z-spUk0=Y!IBo*tGk9z5v9gu`+4MGapg^+idr%UhQ&pqWdY%M@SeK%%{x(PScq(R03}6oyymkPDKwkom}tAZp|XENTNq=~-qZ5pNKuo=2b~MC0ze97tMLwxh9} zd#y=M&$R_GNAcsBcUc^>11R7VSE|mSvdYBjw#l*i9TX8QTSe-M-Z!V<%_Jy z<@(@z-U6Mb1cmu$K7jekH$$)~TfH&+QPA;}V{gWL zw)g;@=o+4wzlPjIBY$@t&NY5?~LaLx9g5W1sWVG_tRWdX>6Sb^BEN8J$Ry0#p=<=^vc>@)9`h57GNyLx5bl3Lx-P&`*6Rh%Wz| z>Dao{mhG%(V zzFbTM1_Rg81*+uF{wekSp^+%qHM6YyN!3@UA1_tW0xCshw{)&YDgO{@9}h&9Z#Xd% z%X(jj8Miw}vqme2LfN<9*xh=_df(uCaM|#cs3R>0Na+Ja{k7ALKtLR-Sm3vxWmzNi z^+&(WIC+^9_nibDZ?ywZk-KS+ex)xM282idFF>xAz`T%fwb66?j z9zks!%Zy%mwUV$1-MzdO0An)bVIj19~hz#zC@1D zjK~5BH}kp@xd~5?(_Ua>;snBup0x71zV;Hfdj&AzMp}USYkNPL2{^mS7a9TbccuNv z`(^b@N$=@UQJv0xXjM&4SG#@iz;$ z>*rK>kak2Ez{2Zkmlp$SJnq9C6&k7V`rpQx?XOX)yyl`ddS7+Mg8{+2K0VGa9#Z!tkqZ@Oh7{1fG%s2$_^S_V8@ayxW&M&h?ly@0Rjc)Y26EjFHz)!;B6khgbE zr5S-O$&i>567n_k$->dSghY|!jSXg#{fDP@YYO#c%o0p)|5qR!arG-rdQwm@C;_+= zMU(UV58S!_G3pOb6i@?w9xGfe*AUM=?H{%VIPV}JjxCwK1wicznSbx`1zximzH#3s zTfnoe`}f!q5^>b@Q_uTXC9?FuQF#|UG$R~Zz`x&>7y$nppQ($QJGWPv_V;oP(^WKA z+0Bt8T!Zs3K4cQRBrCfbr2`;!sxN%$Pd*-Bo+*)kIO4zJcT#y}ND0)2=0W(ol8hxW zOEbW%xMdZ_BLjx5=jRh*g?*3LoXex@@%w0t(z3z2#ePpdup*H;ISEz$kCs@!BY-%{ zrHXbk>U_P$?-Ki4)@LGgMZ~j}0GM5?8083C*ysHwBwOy`X&Gj|ZMw0`!%rfEa0>yx zq(y7pp!2aNHUA{T+g8G->p2*Vd`G^V{0A{L!Is6kA!wSko2+w>?yw9aIuWm#TKilN zzdpmfvs>c59pHm(?pmP+`79xEXt|IK<7NbR4l*`*x5kAIRE?6&C0%{gu^EIebp4ne zJ6y+`J#(ZMj7LDxg$3=m#rb}hMG8&ELen03ogfsq6m5X(r2H3pz@qPi4)OeTVy)hM>W2=tut>30FrPk0hP^&G`Q$Ul^~|Mm}^b>qXab1r#4 zNk3Ml3(`GOClS>Qv}nrID+#M}?pdEHP9CG%+*u+6Rk^7LWb#3xT2#1)U7WAvh(g)L z@?&z{1-+YbHIahaX0#4Q1Qr@Bwr?Cf&d->-7JrgS=eMu?5OpcFa4o=Li@I~Vt+}Nu z9xZ~jZ_2*D-F+qBlbWsGH}*g-_`|u_hmZWDbC_F`-uWjW**QHV1JaX3`7I2{$85po z)98)Exy8#BhO_RYeiwHWfgeKZFib@|6|^+O?36Z!#e)m>j~uJf7;#rB`d*VvCB*8) zo6tq!lyd8)NL>D)EXj|k13NEWc<%`=yS}eK@+C?Y7x7Vjf1h+`0E_k8>RR8_amMKp z*9#Rc^_jkYFh*K9w}GfCY>5-C5Q!qZ*(<~hO?Uj#qTNb2Q%6Hh;-r>4njcnezSRCj zus#|G_qJT9>)hR+Ef+owc{Ed$EmrCuf}bsp#2qU=GLT#ylnK7sbukuyoniSZ;1QyY zW}J#$j82<a%E_ia*F zdn8tgzwdmM4{bw4-jHCz#etCD)WR@U{zAaQTFI4sQ;9@p#vy4C4uirFf?69Fz?kP_ z8vcwkf(S-NY5wP>P;JxF;hTk%&f2^Q|HE3o-T6nB-QaXr_VV(Do2vtNn;+`0hoJ>%2C0R~ zM+xt^P0GL{4-y{V{>E#rqagtupI1v$rBK=)n==Y{*-h5M_+Fi)f4S(>c^QGOC%eD= zAoc?Zg1+4Q@Kus%;2lzt4iS6C^>qUk%A&PH)Xl7Mz7I`4>)HcXB5C3wZ?xb7N*!4T z(=)f$O=n_L2->r;7Gv~zZ7+eu&v8Ue#tH9E`DX16D#?^sT+`!?+kd}=Bg!CAoo}>z zD1+NnOUHQIzUo^2!}YD(#0~$Un+c>kGW|YhrG^gn zRSQ<$&4iLe1LjSy1v%`8WU~&inw|8~0Zf#-f`vxbu-%W7n#vmI8u7KPOkxn#M-JN; zIU6*|y)|JpLI^f^Nmzv)aeb>A_~$x4FR(5?a1?0Zg~vdMr6a$#Z?oh}*B)KBqUCYJ z{vymn_u#NT#KI6J`;^l3U2yl)V1$OhxCpqCz|xh1K#D8>5@OMYQ;*qW?f>~eP(eK3rqA`^@LV)s-F9u? zJK$)8>N0C7Oh$_vxeB|2>Lbey!;pM?jVA6MpGRN#6h%)~$F7!B|H-!X`(7)5Chi!p zJmGz=!-6?~^YP8w{STkx!*%pZk*uI6=``p>?lQF+Ov-s1Lk+up&ny_F_bgJQ_I*zs{e5LGe`vgR zUFUZ-GT|(sS3ABgJXM!7S;1PSC|~tbiMR1^`PTEnOu|@EWBykxTph+& zpO>`RH5;G3)Uob3<$yakf2(*w2in&mj!LIS&sL?Ya7#d{IndoNHtjlN4~H5w=hn#i zwm(~|UDKokm1LR(NnzM+Xc87_30ym<*h^dGhDHd2-<6!ZAx@9HLFb40u15b&a3MT~ z(Dxht2kY*p;Whd7^$uoEre<45mfC?7UiYlp=CK{1LEzFQR zW8#U6^(*Go>El=Thf7R39_XNZ*W_=ukn)kn<4TjSNK0^5T|0P*mQ;*1yFHov2W4jw zzH&x~M&IL?(xNgPc9oLHsVi~v6g>w-D`w%5SF)rNcr2I^qaWC!1;MPiHpoMMv`N7u zLD=J6U2njw8Y#l42W2P21=!KeE;T{CRq9Ap3G3bxs{!JG0>bu$&iY?(tV|WC9bZ2z z@kfV*bVT>kisX{qj^&OA5H-{IBcN&6zE}$lc^FM&W(f}(+x{SirW>Y&n79zE-V`RN zN0AaIAOutDgxk0%B!TZpPD*-;`VvHT?LM~Z(7Ais!Fc?}L4u>fbdmuNl>oRvu~;mV zflvjw@%XIWlbden>6do?){{SeUx)qaH+cTp5AP7+4?*wPEh&LV!a$&RZ{;P*#6J1` Ee?>WRKmY&$ diff --git a/packages/desktop-client/e2e/mobile.test.js-snapshots/Mobile-creates-a-transaction-from-accounts-id-page-2-chromium-linux.png b/packages/desktop-client/e2e/mobile.test.js-snapshots/Mobile-creates-a-transaction-from-accounts-id-page-2-chromium-linux.png index 44f47e74e9b13da39490bc4b26f562a7bd7e33d5..965e6a84b20b93fcbc4d259dca1ef736e1385bec 100644 GIT binary patch delta 2686 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 delta 2689 zcmV-{3V!vB0GAqwh=h}2 z7DIosigfbw@eIm}l|x zYv00C=~>;S5Rr=*yfs{8^9~5A6NpBE!PQ*~5xI!LO8@|=REov_nukSi{0NCe;!=N~ z`@$pe`^PJx@%C{`yL(NLe?9#4%GZ!e`N!~H!|yl&0PbrR0bg$o{M5ea(5zkc)KH59 zx};+>n@zZ$od&DbT8))abztxk0H9CDo;Z>8Cr+M^L!XX4tGk?gLbf&sZ_azKy33$y zP@xaWq1r_uQ=n_xF8Fr+JV*e{7&dp!x9%tCO-1`<9ZP-9R7mjj1-(~ z9hnvoh}O=LC0ke2wVO9Sl%wArW6#k@I=XfsX!y&h&DDIkYb{nStyng5F&8sZSn`ke zv20<w+YCg!5{`G*J`ESv+B|Q<1T0`Ko<5{(P9qz5&u(h&bedK3c*X06` znU{riODo0WR8@c9X2z&#M4ddqr~9`6a6T=8g5mDwPVWmUs6wC!{ADv`foML!;4P)6$xZ+-sET%b4@K*XYx^ zCmOYet2x(5x+lp#Y#cWiS6m!gaq!GxgK^FzpJU<1CETj2QWRf1XII*4UHH$b{~4UW zU0uz=xI=&R^YAi^{{eA{rcY+P%|PhtH+jmXU4vx{r!2tQ%9?e1H;|e4W4&@+SrM7J zS@-SRzt_2mhJb zAIw!WPVKURqn#tV2Q242Ozq7{Yp<=>kF$f8o3|?E!P&2fEHymA+B&ty!@V<~?BC3# zj8uca4f{9K-Q9!Mj?P@m%c7{Pguy>sryYOT-N)cqX}$ZYoztq!9{g|F#?b`}wVJ)h z_8HuedUWtqG)^t|)^7ZM$XMXc4J_$uGLgrkc*?~U3$=x!aWZl<$uHLNoYzo;zWa9R z&5{`l(WupmV$00SBBwBq7y1u3IImKv7~wsP_)F)EicK_aGUI)M4fFD+yh2ZWO8tKi zb$s$!^fxLP(%X++NA~jh;XTY4ITd|{p5)9_d_8?=t8HV@rn|K9UW-8te zoX>)ZbFsCu<&&>A8xcLEW~Q<9pDXcn?@B~)IDZ`bDhWR%v2@!CqsIB>{Bf3UUrCRr zJ&6boXUd349Ev~6n!R`9RubFEq%*v;F@ko^zaczm0rMt=aI^9zZ>)Qptb4YSiRRC& z@0i&}?L7&ZIi02N{q2{!9$|l^9Sb*MZ)3;YkHZ?Z#w&z)G~sW($=Xl17}Z8*yvtWy!Zs|z*3uST>7#9D5<-}cB;IDOyh2ZTh5m70h7iICveY1i z5GE#xR|p|Y%;?0MU!bFvR{Kj_ix5IIE3LFz@(YZAux)hWO-;W-w{Cx3jUGq{A%1PT zd35D+`W2(w8J&19rd*~&`}X(^8YnYgA;c4@l~#-2pn-Jg(4M4}%SN|1`U?~QR#ujH zcIiy#j!&a?ax!{QA%tko3UoSB)2@(|av8n8!szymO1we{AsSD1H3%VuiAmxWLI@L+ z#4CglCMJnj2q8>N60cDZLYSB&ULk}qF-g2a2w`H9c!dzc#3bV~K00000NkvXXu0mjf1G+jB diff --git a/packages/desktop-client/e2e/mobile.test.js-snapshots/Mobile-creates-a-transaction-via-footer-button-1-chromium-linux.png b/packages/desktop-client/e2e/mobile.test.js-snapshots/Mobile-creates-a-transaction-via-footer-button-1-chromium-linux.png index 90fef006b7171d270254ad7a97e95ff5f8369af3..c5647b3882ddbfd6200c08bdc1909e0640c3be54 100644 GIT binary patch delta 1885 zcmV-j2cr0hgaM0$0kAALldu^I7ACurlFpxZCn6F^=61UoyhKC-ajJon5DX!ItVBPi z##4Za=yoNO$%?&gk%KoUY;XN95z*~JCX>PKc6-9Ns3BaW;B~v*aJ$`bNKRy$?J!#G ze*K~*5m9BLQpypeQzJyLhDxabP_*#%`;y_@p?f9G1cOeEV7;0@{Z2%;9h*Z!me~%I z#g6J#^iZpmkjZ3zhp%73n-jW!E|&|}jW)<-GDL*xOWb)PqKYgv!wjd(h45f4!|C$MNPqYY-rQ#|xLiDtMnrV0+#_Cp!nepHULqp$7Vr@-5fKFe7L$P(7Jn%mJO> zzG;*))UTq3y!iLirV5JpbR+=4x_=|-=-DU;a0Ba)rlV&=Ls@sJ(yJb%#H#4}W!()b z0}Nh*MRH@yUs-tPzM62mfmgOB;oU*Cpi_De#g_k`hDG~QkenrAKl06?pGe<4^S$Eg>avn|d6d2Gn1TXfjhA^$dv)#{6H^FOLlkn>W6EsRW?rR=`*9X)(Mb&~|ccJ(Y!ze!hx?t2Tt`6d2Ja4A1wj2DL)w zbKj0V-wfgU?7H@xGvR}ut`y=(k`-!&3|;TgV`ks#XdIb+M?kX@I$Qw)xqg#yI~xLq z{IiWarvZOI%i?wep*lI%Kh_ZQ;*#;$cNgIX(5Fc-Ug=jI^>2)TeYKNn%HHSd!6nLm zRMmeVT(7{U;~8GtZ#n5bZ|iTlg5>;0pwq{&?P9te4yPNFx<+`-UH^KaXy+gQb=8K2 zds6^pe}LUpSC5HZB5)?f4vXaWtDPoQHK-A+#G1p`z3PrTW5lR$FTi%=>Ih%^)+kbg z+Mz0ZbI`jUryKb0&~>l*ZL0V<;=PTnJCc8aV2wQAKk7bBf)K2cBj#v2ruL|cfA_44 zH@9CwuvUTgwRPC~S0>J1w|i})kioBV1!)kjhD-*0zAqJnTZEu(0VDX9)wKxMEAV1$ z62^B9hej#K&V(#{e=H;4@&&O;F1-6=GA?I0FsMZcQcM!&#a%_`JM_>gWq!3I1Mq)J z{~DOG?h@oO8TvO3#>MM)yuC9Sy&DI4=6HSWn+(|p5XY~+2pNF;TZX_Uxv_kI8qTEH z@X4?`McOwi-#FsEjjcbDj;Q7#`5pk$C}bGeEClP0W{1qg&JlREUk!Zqdm6@kdjXd- z9GEva@2N}vmdj6_P!&ENS_j`B%fNp_U!RA)fNNNiT(>y! z=D?ao*n6ODEgcp=R1XId%^17l0$$#ngf4d&u=L@2MQUeQt57U?s4jlJV8YlH7cghn zRXo@>%xk~>*|z~rgRv^QKF*}tFn)C+{vC4(I+YBu6B?pXggQ@os<>osA3sMDl=CB( zPNx%+B;iu31$Wks5Y=re0r3C;0j)_yK~z8Tq1C*(gIBLs zAj|CEO;3o3Dl?c28~Jvok|A=jaub( zgB+7EK^K1=%!r6?2f4E__ua^fGUD}no*<{8+>c!@7u;?)gO`YI8@Yq`*6{V0-y>cC zUcoDu%RRwMM07jJ3EtcR9Pl~b966)g-2ZZx6A|4Ga>6zD^g>ZW7bxOwA#*p#&?TbV zRqiaz{a?SgFUpAbRt#Mtx?L4DY;!BoNw_6xn20IpcEx)&5D^K+;3XmwjKNDpB-sB0 Xn|L^?M19FB00000NkvXXu0mjf27aKE delta 1880 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 literal 17189 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 Re(weF`sG_lv4noW{{T#DY4ZR8 diff --git a/packages/desktop-client/e2e/mobile.test.js-snapshots/Mobile-creates-a-transaction-via-footer-button-3-chromium-linux.png b/packages/desktop-client/e2e/mobile.test.js-snapshots/Mobile-creates-a-transaction-via-footer-button-3-chromium-linux.png index 8c390cc6e72d2f471d35a87697ade1cbf875f5e4..6b193821e397dd482c9e562495a158c6c4815a74 100644 GIT binary patch delta 8848 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 delta 8885 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 H#)1C_)+KI- diff --git a/packages/desktop-client/e2e/mobile.test.js-snapshots/Mobile-creates-a-transaction-via-footer-button-4-chromium-linux.png b/packages/desktop-client/e2e/mobile.test.js-snapshots/Mobile-creates-a-transaction-via-footer-button-4-chromium-linux.png index 6d4b9adb075eddc8eae558aa438a7d2c8046bf78..9d023dffd951737f3d11a910930add920021b0ac 100644 GIT binary patch delta 2509 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 XO^`sdv+w4X00000NkvXXu0mjfmAoR) delta 2517 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 diff --git a/packages/desktop-client/e2e/transactions.test.js b/packages/desktop-client/e2e/transactions.test.js index 0fc9070ef1c..2d2f40dbfc1 100644 --- a/packages/desktop-client/e2e/transactions.test.js +++ b/packages/desktop-client/e2e/transactions.test.js @@ -63,7 +63,7 @@ test.describe('Transactions', () => { await expect(autocomplete).toMatchThemeScreenshots(); // Select the active item - await page.getByRole('button', { name: 'Clothing' }).click(); + await page.getByTestId('Clothing-category-item').click(); await filterTooltip.applyButton.click(); // Assert that there are only clothing transactions diff --git a/packages/desktop-client/src/components/autocomplete/AccountAutocomplete.tsx b/packages/desktop-client/src/components/autocomplete/AccountAutocomplete.tsx index dbd7f67e7ef..d23aec146e6 100644 --- a/packages/desktop-client/src/components/autocomplete/AccountAutocomplete.tsx +++ b/packages/desktop-client/src/components/autocomplete/AccountAutocomplete.tsx @@ -1,10 +1,11 @@ -import React, { type ComponentProps } from 'react'; +import React, { Fragment, type ComponentProps, type ReactNode } from 'react'; import { css } from 'glamor'; import { useCachedAccounts } from 'loot-core/src/client/data-hooks/accounts'; +import { type AccountEntity } from 'loot-core/src/types/models'; -import { theme } from '../../style'; +import { type CSSProperties, theme } from '../../style'; import View from '../common/View'; import Autocomplete from './Autocomplete'; @@ -14,7 +15,8 @@ function AccountList({ getItemProps, highlightedIndex, embedded, - groupHeaderStyle, + renderAccountItemGroupHeader = defaultRenderAccountItemGroupHeader, + renderAccountItem = defaultRenderAccountItem, }) { let lastItem = null; @@ -45,62 +47,18 @@ function AccountList({ return [ showGroup ? ( -
- {group} -
+ + {renderAccountItemGroupHeader({ title: group })} + ) : null, -
- {item.name} -
, + + {renderAccountItem({ + ...(getItemProps ? getItemProps({ item }) : null), + item, + highlighted: highlightedIndex === idx, + embedded, + })} + , ]; })} @@ -108,20 +66,24 @@ function AccountList({ ); } -type AutoCompleteProps = { +type AccountAutoCompleteProps = { embedded?: boolean; includeClosedAccounts: boolean; - groupHeaderStyle?: boolean; + renderAccountItemGroupHeader?: ( + props: AccountItemGroupHeaderProps, + ) => ReactNode; + renderAccountItem?: (props: AccountItemProps) => ReactNode; closeOnBlur?: boolean; } & ComponentProps; export default function AccountAutocomplete({ embedded, includeClosedAccounts = true, - groupHeaderStyle, + renderAccountItemGroupHeader, + renderAccountItem, closeOnBlur, ...props -}: AutoCompleteProps) { +}: AccountAutoCompleteProps) { let accounts = useCachedAccounts() || []; //remove closed accounts if needed @@ -151,10 +113,107 @@ export default function AccountAutocomplete({ getItemProps={getItemProps} highlightedIndex={highlightedIndex} embedded={embedded} - groupHeaderStyle={groupHeaderStyle} + renderAccountItemGroupHeader={renderAccountItemGroupHeader} + renderAccountItem={renderAccountItem} /> )} {...props} /> ); } + +type AccountItemGroupHeaderProps = { + title: string; + style?: CSSProperties; +}; + +export function AccountItemGroupHeader({ + title, + style, + ...props +}: AccountItemGroupHeaderProps) { + return ( +
+ {title} +
+ ); +} + +function defaultRenderAccountItemGroupHeader( + props: AccountItemGroupHeaderProps, +): ReactNode { + return ; +} + +type AccountItemProps = { + item: AccountEntity; + className?: string; + style?: CSSProperties; + highlighted?: boolean; + embedded?: boolean; +}; + +export function AccountItem({ + item, + className, + highlighted, + embedded, + ...props +}: AccountItemProps) { + return ( +
+ {item.name} +
+ ); +} + +function defaultRenderAccountItem(props: AccountItemProps): ReactNode { + return ; +} diff --git a/packages/desktop-client/src/components/autocomplete/CategoryAutocomplete.tsx b/packages/desktop-client/src/components/autocomplete/CategoryAutocomplete.tsx index 35266b806a1..1ed1009f978 100644 --- a/packages/desktop-client/src/components/autocomplete/CategoryAutocomplete.tsx +++ b/packages/desktop-client/src/components/autocomplete/CategoryAutocomplete.tsx @@ -3,7 +3,8 @@ import React, { Fragment, useMemo, type ReactNode, - type CSSProperties, + type SVGProps, + type ComponentType, } from 'react'; import { css } from 'glamor'; @@ -14,7 +15,7 @@ import { } from 'loot-core/src/types/models'; import Split from '../../icons/v0/Split'; -import { theme } from '../../style'; +import { type CSSProperties, theme } from '../../style'; import Text from '../common/Text'; import View from '../common/View'; @@ -26,7 +27,13 @@ export type CategoryListProps = { highlightedIndex: number; embedded: boolean; footer?: ReactNode; - groupHeaderStyle?: object; + renderSplitTransactionButton?: ( + props: SplitTransactionButtonProps, + ) => ReactNode; + renderCategoryItemGroupHeader?: ( + props: CategoryItemGroupHeaderProps, + ) => ReactNode; + renderCategoryItem?: (props: CategoryItemProps) => ReactNode; }; function CategoryList({ items, @@ -34,7 +41,9 @@ function CategoryList({ highlightedIndex, embedded, footer, - groupHeaderStyle, + renderSplitTransactionButton = defaultRenderSplitTransactionButton, + renderCategoryItemGroupHeader = defaultRenderCategoryItemGroupHeader, + renderCategoryItem = defaultRenderCategoryItem, }: CategoryListProps) { let lastGroup = null; @@ -49,57 +58,12 @@ function CategoryList({ > {items.map((item, idx) => { if (item.id === 'split') { - return ( - - - - - Split Transaction - - ); + return renderSplitTransactionButton({ + key: 'split', + ...(getItemProps ? getItemProps({ item }) : null), + highlighted: highlightedIndex === idx, + embedded, + }); } const showGroup = item.cat_group !== lastGroup; @@ -107,39 +71,20 @@ function CategoryList({ return ( {showGroup && ( -
- {`${item.group?.name}`} -
+ + {renderCategoryItemGroupHeader({ + title: item.group?.name, + })} + )} -
- {item.name} -
+ + {renderCategoryItem({ + ...(getItemProps ? getItemProps({ item }) : null), + item, + highlighted: highlightedIndex === idx, + embedded, + })} +
); })} @@ -152,7 +97,13 @@ function CategoryList({ type CategoryAutocompleteProps = ComponentProps & { categoryGroups: Array; showSplitOption?: boolean; - groupHeaderStyle?: CSSProperties; + renderSplitTransactionButton?: ( + props: SplitTransactionButtonProps, + ) => ReactNode; + renderCategoryItemGroupHeader?: ( + props: CategoryItemGroupHeaderProps, + ) => ReactNode; + renderCategoryItem?: (props: CategoryItemProps) => ReactNode; }; export default function CategoryAutocomplete({ @@ -160,7 +111,9 @@ export default function CategoryAutocomplete({ showSplitOption, embedded, closeOnBlur, - groupHeaderStyle, + renderSplitTransactionButton, + renderCategoryItemGroupHeader, + renderCategoryItem, ...props }: CategoryAutocompleteProps) { let categorySuggestions: Array< @@ -211,10 +164,166 @@ export default function CategoryAutocomplete({ embedded={embedded} getItemProps={getItemProps} highlightedIndex={highlightedIndex} - groupHeaderStyle={groupHeaderStyle} + renderSplitTransactionButton={renderSplitTransactionButton} + renderCategoryItemGroupHeader={renderCategoryItemGroupHeader} + renderCategoryItem={renderCategoryItem} /> )} {...props} /> ); } + +type CategoryItemGroupHeaderProps = { + title: string; + style?: CSSProperties; +}; + +export function CategoryItemGroupHeader({ + title, + style, + ...props +}: CategoryItemGroupHeaderProps) { + return ( +
+ {title} +
+ ); +} + +function defaultRenderCategoryItemGroupHeader( + props: CategoryItemGroupHeaderProps, +) { + return ; +} + +type SplitTransactionButtonProps = { + Icon?: ComponentType>; + highlighted?: boolean; + embedded?: boolean; + style?: CSSProperties; +}; + +// eslint-disable-next-line import/no-unused-modules +export function SplitTransactionButton({ + Icon, + highlighted, + embedded, + style, + ...props +}: SplitTransactionButtonProps) { + return ( + + + {Icon ? ( + + ) : ( + + )} + + Split Transaction + + ); +} + +function defaultRenderSplitTransactionButton( + props: SplitTransactionButtonProps, +) { + return ; +} + +type CategoryItemProps = { + item: CategoryEntity & { group?: CategoryGroupEntity }; + className?: string; + style?: CSSProperties; + highlighted?: boolean; + embedded?: boolean; +}; + +export function CategoryItem({ + item, + className, + highlighted, + embedded, + ...props +}: CategoryItemProps) { + return ( +
+ {item.name} +
+ ); +} + +function defaultRenderCategoryItem(props: CategoryItemProps) { + return ; +} diff --git a/packages/desktop-client/src/components/autocomplete/PayeeAutocomplete.tsx b/packages/desktop-client/src/components/autocomplete/PayeeAutocomplete.tsx index a1ff9db9985..708d9dcb22f 100644 --- a/packages/desktop-client/src/components/autocomplete/PayeeAutocomplete.tsx +++ b/packages/desktop-client/src/components/autocomplete/PayeeAutocomplete.tsx @@ -3,7 +3,9 @@ import React, { useState, useMemo, type ComponentProps, - type CSSProperties, + type ReactNode, + type ComponentType, + type SVGProps, } from 'react'; import { useDispatch } from 'react-redux'; @@ -19,8 +21,7 @@ import { } from 'loot-core/src/types/models'; import Add from '../../icons/v1/Add'; -import { useResponsive } from '../../ResponsiveProvider'; -import { theme } from '../../style'; +import { type CSSProperties, theme } from '../../style'; import Button from '../common/Button'; import View from '../common/View'; @@ -61,10 +62,11 @@ function PayeeList({ highlightedIndex, embedded, inputValue, - groupHeaderStyle, + renderCreatePayeeButton = defaultRenderCreatePayeeButton, + renderPayeeItemGroupHeader = defaultRenderPayeeItemGroupHeader, + renderPayeeItem = defaultRenderPayeeItem, footer, }) { - const { isNarrowWidth } = useResponsive(); let isFiltered = items.filtered; let createNew = null; items = [...items]; @@ -90,40 +92,13 @@ function PayeeList({ ...(!embedded && { maxHeight: 175 }), }} > - {createNew && ( - - - - Create Payee “{inputValue}” - - - )} + {createNew && + renderCreatePayeeButton({ + ...(getItemProps ? getItemProps({ item: createNew }) : null), + payeeName: inputValue, + highlighted: highlightedIndex === 0, + embedded, + })} {items.map((item, idx) => { let type = item.transfer_acct ? 'account' : 'payee'; @@ -139,62 +114,23 @@ function PayeeList({ return ( {title && ( -
- {title} -
+ + {renderPayeeItemGroupHeader({ title })} + )} - -
- {item.name} -
+ + {renderPayeeItem({ + ...(getItemProps ? getItemProps({ item }) : null), + item, + highlighted: highlightedIndex === idx + offset, + embedded, + })} + {showMoreMessage && (
void; onSelect?: (value: string) => void; onManagePayees: () => void; - groupHeaderStyle: CSSProperties; + renderCreatePayeeButton?: (props: CreatePayeeButtonProps) => ReactNode; + renderPayeeItemGroupHeader?: (props: PayeeItemGroupHeaderProps) => ReactNode; + renderPayeeItem?: (props: PayeeItemProps) => ReactNode; accounts?: AccountEntity[]; payees?: PayeeEntity[]; }; @@ -239,7 +177,9 @@ export default function PayeeAutocomplete({ onUpdate, onSelect, onManagePayees, - groupHeaderStyle, + renderCreatePayeeButton = defaultRenderCreatePayeeButton, + renderPayeeItemGroupHeader = defaultRenderPayeeItemGroupHeader, + renderPayeeItem = defaultRenderPayeeItem, accounts, payees, ...props @@ -386,7 +326,9 @@ export default function PayeeAutocomplete({ highlightedIndex={highlightedIndex} inputValue={inputValue} embedded={embedded} - groupHeaderStyle={groupHeaderStyle} + renderCreatePayeeButton={renderCreatePayeeButton} + renderPayeeItemGroupHeader={renderPayeeItemGroupHeader} + renderPayeeItem={renderPayeeItem} footer={ {showMakeTransfer && ( @@ -414,3 +356,157 @@ export default function PayeeAutocomplete({ /> ); } + +type CreatePayeeButtonProps = { + Icon?: ComponentType>; + payeeName: string; + highlighted?: boolean; + embedded?: boolean; + style?: CSSProperties; +}; + +export function CreatePayeeButton({ + Icon, + payeeName, + highlighted, + embedded, + style, + ...props +}: CreatePayeeButtonProps) { + return ( + + {Icon ? ( + + ) : ( + + )} + Create Payee “{payeeName}” + + ); +} + +function defaultRenderCreatePayeeButton( + props: CreatePayeeButtonProps, +): ReactNode { + return ; +} + +type PayeeItemGroupHeaderProps = { + title: string; + style?: CSSProperties; +}; + +export function PayeeItemGroupHeader({ + title, + style, + ...props +}: PayeeItemGroupHeaderProps) { + return ( +
+ {title} +
+ ); +} + +function defaultRenderPayeeItemGroupHeader( + props: PayeeItemGroupHeaderProps, +): ReactNode { + return ; +} + +type PayeeItemProps = { + item: PayeeEntity; + className?: string; + style?: CSSProperties; + highlighted?: boolean; + embedded?: boolean; +}; + +export function PayeeItem({ + item, + className, + highlighted, + embedded, + ...props +}: PayeeItemProps) { + return ( +
+ {item.name} +
+ ); +} + +function defaultRenderPayeeItem(props: PayeeItemProps): ReactNode { + return ; +} diff --git a/packages/desktop-client/src/components/autocomplete/SavedFilterAutocomplete.tsx b/packages/desktop-client/src/components/autocomplete/SavedFilterAutocomplete.tsx index 71646b65f5a..347db082639 100644 --- a/packages/desktop-client/src/components/autocomplete/SavedFilterAutocomplete.tsx +++ b/packages/desktop-client/src/components/autocomplete/SavedFilterAutocomplete.tsx @@ -43,9 +43,8 @@ function FilterList({ paddingLeft: 20, borderRadius: embedded ? 4 : 0, }} - data-testid={ - 'filter-item' + (highlightedIndex === idx ? '-highlighted' : '') - } + data-testid={`${item.name}-filter-item`} + data-highlighted={highlightedIndex === idx || undefined} > {item.name}
, diff --git a/packages/desktop-client/src/components/mobile/MobileNavTabs.tsx b/packages/desktop-client/src/components/mobile/MobileNavTabs.tsx index 454351e11c3..aa7a68792ed 100644 --- a/packages/desktop-client/src/components/mobile/MobileNavTabs.tsx +++ b/packages/desktop-client/src/components/mobile/MobileNavTabs.tsx @@ -35,43 +35,43 @@ export default function MobileNavTabs() { name: 'Budget', path: '/budget', style: navTabStyle, - icon: Wallet, + Icon: Wallet, }, { name: 'Transaction', path: '/transactions/new', style: navTabStyle, - icon: Add, + Icon: Add, }, { name: 'Accounts', path: '/accounts', style: navTabStyle, - icon: PiggyBank, + Icon: PiggyBank, }, { name: 'Schedules (Soon)', path: '/schedules/soon', style: navTabStyle, - icon: Calendar, + Icon: Calendar, }, { name: 'Payees (Soon)', path: '/payees/soon', style: navTabStyle, - icon: StoreFront, + Icon: StoreFront, }, { name: 'Rules (Soon)', path: '/rules/soon', style: navTabStyle, - icon: Tuning, + Icon: Tuning, }, { name: 'Settings', path: '/settings', style: navTabStyle, - icon: Cog, + Icon: Cog, }, ].map(tab => ); @@ -206,11 +206,11 @@ type NavTabIconProps = { type NavTabProps = { name: string; path: string; - icon: ComponentType; + Icon: ComponentType; style?: CSSProperties; }; -function NavTab({ icon: TabIcon, name, path, style }: NavTabProps) { +function NavTab({ Icon: TabIcon, name, path, style }: NavTabProps) { return ( ; +} + export default function EditField({ modalProps, name, onSubmit }) { let dateFormat = useSelector( state => state.prefs.local.dateFormat || 'MM/dd/yyyy', @@ -41,9 +56,19 @@ export default function EditField({ modalProps, name, onSubmit }) { modalProps.onClose(); } + const itemStyle = { + fontSize: 17, + fontWeight: 400, + paddingTop: 8, + paddingBottom: 8, + }; + const { isNarrowWidth } = useResponsive(); let label, editor, minWidth; - let inputStyle = { ':focus': { boxShadow: 0 } }; + let inputStyle = { + ':focus': { boxShadow: 0 }, + ...(isNarrowWidth && itemStyle), + }; let autocompleteProps = { inputProps: { style: inputStyle }, containerProps: { style: { height: isNarrowWidth ? '90vh' : 275 } }, @@ -83,13 +108,28 @@ export default function EditField({ modalProps, name, onSubmit }) { onSelect(value); } }} - groupHeaderStyle={ - isNarrowWidth - ? { - color: theme.tableTextLight, - } - : undefined - } + renderAccountItemGroupHeader={props => ( + + )} + renderAccountItem={props => ( + + )} {...autocompleteProps} /> ); @@ -115,13 +155,35 @@ export default function EditField({ modalProps, name, onSubmit }) { onSelect(value); }} isCreatable - groupHeaderStyle={ - isNarrowWidth - ? { - color: theme.tableTextLight, - } - : undefined - } + renderCreatePayeeButton={props => ( + + )} + renderPayeeItemGroupHeader={props => ( + + )} + renderPayeeItem={props => ( + + )} {...autocompleteProps} /> ); @@ -152,13 +214,28 @@ export default function EditField({ modalProps, name, onSubmit }) { onSelect={value => { onSelect(value); }} - groupHeaderStyle={ - isNarrowWidth - ? { - color: theme.tableTextLight, - } - : undefined - } + renderCategoryItemGroupHeader={props => ( + + )} + renderCategoryItem={props => ( + + )} {...autocompleteProps} /> ); diff --git a/packages/desktop-client/src/components/transactions/MobileTransaction.js b/packages/desktop-client/src/components/transactions/MobileTransaction.js index 3258b88fd6f..499f02e677b 100644 --- a/packages/desktop-client/src/components/transactions/MobileTransaction.js +++ b/packages/desktop-client/src/components/transactions/MobileTransaction.js @@ -674,6 +674,7 @@ class TransactionEditInner extends PureComponent { ) : ( - - diff --git a/packages/loot-core/src/client/actions/budgets.ts b/packages/loot-core/src/client/actions/budgets.ts index c35ca100ee9..9a5321cf3dc 100644 --- a/packages/loot-core/src/client/actions/budgets.ts +++ b/packages/loot-core/src/client/actions/budgets.ts @@ -110,10 +110,7 @@ export function closeBudgetUI() { }; } -export function deleteBudget( - id: string | undefined, - cloudFileId: string | undefined, -) { +export function deleteBudget(id?: string, cloudFileId?: string) { return async (dispatch: Dispatch) => { await send('delete-budget', { id, cloudFileId }); await dispatch(loadAllFiles()); diff --git a/packages/loot-core/src/client/state-types/modals.d.ts b/packages/loot-core/src/client/state-types/modals.d.ts index 517f1778aaa..1c12c19f09d 100644 --- a/packages/loot-core/src/client/state-types/modals.d.ts +++ b/packages/loot-core/src/client/state-types/modals.d.ts @@ -1,8 +1,8 @@ +import { type File } from '../../types/file'; import type { AccountEntity, GoCardlessToken } from '../../types/models'; import type { RuleEntity } from '../../types/models/rule'; import type { EmptyObject, StripNever } from '../../types/util'; import type * as constants from '../constants'; - export type ModalType = keyof FinanceModals; export type OptionlessModal = { @@ -70,6 +70,16 @@ type FinanceModals = { onSuccess: (data: GoCardlessToken) => Promise; }; + 'delete-budget': { file: File }; + + import: null; + + 'import-ynab4': null; + + 'import-ynab5': null; + + 'import-actual': null; + 'create-encryption-key': { recreate?: boolean }; 'fix-encryption-key': { hasExistingKey?: boolean; diff --git a/packages/loot-core/src/types/file.d.ts b/packages/loot-core/src/types/file.d.ts index 394adee0718..30301b1fb14 100644 --- a/packages/loot-core/src/types/file.d.ts +++ b/packages/loot-core/src/types/file.d.ts @@ -11,11 +11,13 @@ export type FileState = export type LocalFile = Omit & { state: 'local'; }; + export type SyncableLocalFile = Budget & { cloudFileId: string; groupId: string; state: 'broken' | 'unknown'; }; + export type SyncedLocalFile = Budget & { cloudFileId: string; groupId: string; @@ -23,6 +25,7 @@ export type SyncedLocalFile = Budget & { hasKey: boolean; state: 'synced' | 'detached'; }; + export type RemoteFile = { cloudFileId: string; groupId: string; diff --git a/upcoming-release-notes/2004.md b/upcoming-release-notes/2004.md new file mode 100644 index 00000000000..0ff9d19d9bf --- /dev/null +++ b/upcoming-release-notes/2004.md @@ -0,0 +1,6 @@ +--- +category: Maintenance +authors: [MikesGlitch] +--- + +Convert BudgetTotals, GoCardlessLink, Import, WelcomeScreen components to Typescript. From 6bfd9586e0ac99e65cfc385bfe8ae97dc44ca886 Mon Sep 17 00:00:00 2001 From: Ameek Singh Date: Sat, 2 Dec 2023 17:43:56 -0500 Subject: [PATCH 06/20] [Maintenance] Converting dateRange and useReport to tsx (#2007) --- .../reports/{DateRange.js => DateRange.tsx} | 20 +++++++++++++------ .../reports/{useReport.js => useReport.tsx} | 11 +++++++--- upcoming-release-notes/2007.md | 6 ++++++ 3 files changed, 28 insertions(+), 9 deletions(-) rename packages/desktop-client/src/components/reports/{DateRange.js => DateRange.tsx} (60%) rename packages/desktop-client/src/components/reports/{useReport.js => useReport.tsx} (61%) create mode 100644 upcoming-release-notes/2007.md diff --git a/packages/desktop-client/src/components/reports/DateRange.js b/packages/desktop-client/src/components/reports/DateRange.tsx similarity index 60% rename from packages/desktop-client/src/components/reports/DateRange.js rename to packages/desktop-client/src/components/reports/DateRange.tsx index 2e2ba1234e5..df3d6eb50ec 100644 --- a/packages/desktop-client/src/components/reports/DateRange.js +++ b/packages/desktop-client/src/components/reports/DateRange.tsx @@ -1,16 +1,24 @@ -import React from 'react'; +import React, { type ReactElement } from 'react'; import * as d from 'date-fns'; import { theme } from '../../style'; import Block from '../common/Block'; -function DateRange({ start, end }) { - start = d.parseISO(start); - end = d.parseISO(end); +type DateRangeProps = { + start: string; + end: string; +}; - let content; - if (start.getYear() !== end.getYear()) { +function DateRange({ + start: startProp, + end: endProp, +}: DateRangeProps): ReactElement { + const start = d.parseISO(startProp); + const end = d.parseISO(endProp); + + let content: string | ReactElement; + if (start.getFullYear() !== end.getFullYear()) { content = (
{d.format(start, 'MMM yyyy')} - {d.format(end, 'MMM yyyy')} diff --git a/packages/desktop-client/src/components/reports/useReport.js b/packages/desktop-client/src/components/reports/useReport.tsx similarity index 61% rename from packages/desktop-client/src/components/reports/useReport.js rename to packages/desktop-client/src/components/reports/useReport.tsx index 15d5a3fb986..0e010d13517 100644 --- a/packages/desktop-client/src/components/reports/useReport.js +++ b/packages/desktop-client/src/components/reports/useReport.tsx @@ -1,8 +1,14 @@ -import { useState, useEffect } from 'react'; +import { useState, useEffect, type SetStateAction } from 'react'; import { useSpreadsheet } from 'loot-core/src/client/SpreadsheetProvider'; -function useReport(sheetName, getData) { +function useReport( + sheetName: string, + getData: ( + spreadsheet: ReturnType, + setData: (results: unknown) => SetStateAction, + ) => Promise, +) { const spreadsheet = useSpreadsheet(); const [results, setResults] = useState(null); @@ -15,7 +21,6 @@ function useReport(sheetName, getData) { cleanup?.(); }; }, [getData]); - return results; } diff --git a/upcoming-release-notes/2007.md b/upcoming-release-notes/2007.md new file mode 100644 index 00000000000..cb0aa92f926 --- /dev/null +++ b/upcoming-release-notes/2007.md @@ -0,0 +1,6 @@ +--- +category: Maintenance +authors: [ameekSinghUniversityAcc] +--- + +Migrating the DateRange and UseReport files to typescript From 5f528018698906bef812b34660394b89d2c14154 Mon Sep 17 00:00:00 2001 From: Michael Clark <5285928+MikesGlitch@users.noreply.github.com> Date: Mon, 4 Dec 2023 19:31:38 +0000 Subject: [PATCH 07/20] [Maintenance] Adding Aria labels for accessibility (#2025) --- packages/desktop-client/src/components/NotesButton.tsx | 1 + packages/desktop-client/src/components/Notifications.tsx | 1 + packages/desktop-client/src/components/ThemeSelector.tsx | 1 + packages/desktop-client/src/components/Titlebar.tsx | 2 ++ .../desktop-client/src/components/UpdateNotification.tsx | 1 + packages/desktop-client/src/components/accounts/Header.js | 1 + .../desktop-client/src/components/budget/BudgetTotals.tsx | 1 + .../src/components/budget/MobileBudgetTable.js | 5 +++++ .../budget/report/budgetsummary/BudgetSummary.tsx | 3 ++- .../budget/rollover/budgetsummary/BudgetSummary.tsx | 3 ++- .../desktop-client/src/components/manager/BudgetList.js | 2 ++ .../src/components/schedules/SchedulesTable.tsx | 1 + .../src/components/select/RecurringSchedulePicker.js | 2 ++ .../desktop-client/src/components/sidebar/ToggleButton.tsx | 7 ++++++- .../src/components/transactions/TransactionsTable.js | 1 + .../desktop-client/src/components/util/AmountInput.tsx | 1 + upcoming-release-notes/2025.md | 6 ++++++ 17 files changed, 36 insertions(+), 3 deletions(-) create mode 100644 upcoming-release-notes/2025.md diff --git a/packages/desktop-client/src/components/NotesButton.tsx b/packages/desktop-client/src/components/NotesButton.tsx index 76d4c9a9aca..59ab1112259 100644 --- a/packages/desktop-client/src/components/NotesButton.tsx +++ b/packages/desktop-client/src/components/NotesButton.tsx @@ -188,6 +188,7 @@ export default function NotesButton({ > + ); +} diff --git a/packages/desktop-client/src/components/Page.tsx b/packages/desktop-client/src/components/Page.tsx index 6f666400f7d..d9bd447f9c2 100644 --- a/packages/desktop-client/src/components/Page.tsx +++ b/packages/desktop-client/src/components/Page.tsx @@ -1,4 +1,4 @@ -import React, { type ReactNode } from 'react'; +import React, { type ComponentPropsWithoutRef, type ReactNode } from 'react'; import { useResponsive } from '../ResponsiveProvider'; import { theme, styles, type CSSProperties } from '../style'; @@ -7,18 +7,24 @@ import Text from './common/Text'; import View from './common/View'; type PageHeaderProps = { - name: ReactNode; + title: ReactNode; + titleContainerProps?: ComponentPropsWithoutRef; style?: CSSProperties; + leftContentContainerProps?: ComponentPropsWithoutRef; leftContent?: ReactNode; + rightContentContainerProps?: ComponentPropsWithoutRef; rightContent?: ReactNode; }; const HEADER_HEIGHT = 50; function PageHeader({ - name, + title, + titleContainerProps, style, + leftContentContainerProps, leftContent, + rightContentContainerProps, rightContent, }: PageHeaderProps) { const { isNarrowWidth } = useResponsive(); @@ -28,8 +34,8 @@ function PageHeader({ {leftContent} - {name} + {title} {rightContent} @@ -80,53 +94,88 @@ function PageHeader({ ...style, }} > - {name} + {title} ); } type PageProps = { - title: ReactNode; - titleStyle?: CSSProperties; - headerLeftContent?: ReactNode; - headerRightContent?: ReactNode; + titleContainerProps?: PageHeaderProps['titleContainerProps']; + title: PageHeaderProps['title']; + headerStyle?: CSSProperties; + headerLeftContentContainerProps?: PageHeaderProps['leftContentContainerProps']; + headerLeftContent?: PageHeaderProps['leftContent']; + headerRightContentContainerProps?: PageHeaderProps['rightContentContainerProps']; + headerRightContent?: PageHeaderProps['rightContent']; + style?: CSSProperties; + padding?: number; + childrenContainerProps?: ComponentPropsWithoutRef; children: ReactNode; + footer?: ReactNode; }; export function Page({ + titleContainerProps, title, - titleStyle, + headerStyle, + headerLeftContentContainerProps, headerLeftContent, + headerRightContentContainerProps, headerRightContent, + style, + padding, + childrenContainerProps, children, + footer, }: PageProps) { - let { isNarrowWidth } = useResponsive(); - let HORIZONTAL_PADDING = isNarrowWidth ? 10 : 20; + const { isNarrowWidth } = useResponsive(); + const _padding = padding != null ? padding : isNarrowWidth ? 10 : 20; return ( - + - - {children} - + {isNarrowWidth ? ( + + {children} + + ) : ( + + {children} + + )} + {footer} ); } diff --git a/packages/desktop-client/src/components/Titlebar.tsx b/packages/desktop-client/src/components/Titlebar.tsx index 5c50871ec2b..cf594d1af91 100644 --- a/packages/desktop-client/src/components/Titlebar.tsx +++ b/packages/desktop-client/src/components/Titlebar.tsx @@ -130,7 +130,7 @@ type SyncButtonProps = { style?: CSSProperties; isMobile?: boolean; }; -export function SyncButton({ style, isMobile = false }: SyncButtonProps) { +function SyncButton({ style, isMobile = false }: SyncButtonProps) { let cloudFileId = useSelector(state => state.prefs.local.cloudFileId); let { sync } = useActions(); diff --git a/packages/desktop-client/src/components/accounts/MobileAccountDetails.js b/packages/desktop-client/src/components/accounts/MobileAccountDetails.js index 0f91f4fd0d2..b20832df9fd 100644 --- a/packages/desktop-client/src/components/accounts/MobileAccountDetails.js +++ b/packages/desktop-client/src/components/accounts/MobileAccountDetails.js @@ -1,17 +1,15 @@ import React, { useState, useMemo } from 'react'; -import { Link } from 'react-router-dom'; import { useActions } from '../../hooks/useActions'; import Add from '../../icons/v1/Add'; -import CheveronLeft from '../../icons/v1/CheveronLeft'; import SearchAlternate from '../../icons/v2/SearchAlternate'; -import { theme, styles } from '../../style'; -import Button from '../common/Button'; +import { theme } from '../../style'; import ButtonLink from '../common/ButtonLink'; import InputWithContent from '../common/InputWithContent'; import Label from '../common/Label'; -import Text from '../common/Text'; import View from '../common/View'; +import MobileBackButton from '../MobileBackButton'; +import { Page } from '../Page'; import PullToRefresh from '../responsive/PullToRefresh'; import CellValue from '../spreadsheet/CellValue'; import { TransactionList } from '../transactions/MobileTransaction'; @@ -63,9 +61,6 @@ function TransactionSearchInput({ accountName, onSearch }) { ); } -const LEFT_RIGHT_FLEX_WIDTH = 70; -const BUDGET_HEADER_HEIGHT = 50; - export default function AccountDetails({ account, prependTransactions, @@ -90,24 +85,42 @@ export default function AccountDetails({ }; return ( - } + headerRightContent={ + + + + } + padding={0} style={{ flex: 1, backgroundColor: theme.mobilePageBackground, - overflowY: 'hidden', - flexGrow: 1, }} > - - - - - ); -} - -function AccountDetailsHeader({ account }) { - return ( - - - - - - - {account.name} - - - - - - - - - + ); } diff --git a/packages/desktop-client/src/components/accounts/MobileAccounts.js b/packages/desktop-client/src/components/accounts/MobileAccounts.js index 59c9db5d172..2df04b5ac84 100644 --- a/packages/desktop-client/src/components/accounts/MobileAccounts.js +++ b/packages/desktop-client/src/components/accounts/MobileAccounts.js @@ -158,32 +158,28 @@ function AccountList({ }; return ( - - - - - } - > - {accounts.length === 0 && } - + + + + } + padding={0} + style={{ flex: 1, backgroundColor: theme.mobilePageBackground }} + > + {accounts.length === 0 && } + + {budgetedAccounts.length > 0 && ( )} @@ -213,9 +209,9 @@ function AccountList({ onSelect={onSelectAccount} /> ))} - - - + + + ); } diff --git a/packages/desktop-client/src/components/budget/MobileBudgetTable.js b/packages/desktop-client/src/components/budget/MobileBudgetTable.js index a02840ce508..0190840d578 100644 --- a/packages/desktop-client/src/components/budget/MobileBudgetTable.js +++ b/packages/desktop-client/src/components/budget/MobileBudgetTable.js @@ -19,13 +19,12 @@ import Label from '../common/Label'; import Menu from '../common/Menu'; import Text from '../common/Text'; import View from '../common/View'; +import { Page } from '../Page'; import PullToRefresh from '../responsive/PullToRefresh'; -import { useServerURL } from '../ServerContext'; import CellValue from '../spreadsheet/CellValue'; import NamespaceContext from '../spreadsheet/NamespaceContext'; import useFormat from '../spreadsheet/useFormat'; import useSheetValue from '../spreadsheet/useSheetValue'; -import { SyncButton } from '../Titlebar'; import { Tooltip, useTooltip } from '../tooltips'; import { AmountInput } from '../util/AmountInput'; // import { @@ -1695,7 +1694,6 @@ export function BudgetTable(props) { const show3Cols = width >= 360; // let editMode = false; // neuter editMode -- sorry, not rewriting drag-n-drop right now - let currentMonth = monthUtils.currentMonth(); let format = useFormat(); const mobileShowBudgetedColPref = useSelector(state => { @@ -1724,27 +1722,62 @@ export function BudgetTable(props) { borderRadius: 'unset', }; + const _onSwitchBudgetType = () => { + pushModal('switch-budget-type', { + onSwitch: onSwitchBudgetType, + }); + }; + + const onToggleHiddenCategories = () => { + savePrefs({ + 'budget.showHiddenCategories': !showHiddenCategories, + }); + }; + return ( - - + + } + headerRightContent={ + !editMode ? ( + + ) : ( + + ) + } + style={{ flex: 1 }} + > {type === 'report' ? ( = currentMonth} + projected={month >= monthUtils.currentMonth()} onClick={onShowBudgetSummary} /> ) : ( @@ -1873,123 +1906,95 @@ export function BudgetTable(props) { /> - - - {!editMode ? ( - // (this.list = el)} - // keyboardShouldPersistTaps="always" - // refreshControl={refreshControl} - // style={{ backgroundColor: colors.n10 }} - // automaticallyAdjustContentInsets={false} - // > - - - - ) : ( - // - // - // {({ - // dragging, - // onGestureEvent, - // onHandlerStateChange, - // scrollRef, - // onScroll - // }) => ( - - - + + {!editMode ? ( + // (this.list = el)} + // keyboardShouldPersistTaps="always" + // refreshControl={refreshControl} + // style={{ backgroundColor: colors.n10 }} + // automaticallyAdjustContentInsets={false} + // > + + + + ) : ( + // + // + // {({ + // dragging, + // onGestureEvent, + // onHandlerStateChange, + // scrollRef, + // onScroll + // }) => ( + + + - // - // - )} - - - + // + // + )} + + ); } -const LEFT_RIGHT_FLEX_WIDTH = 80; -const BUDGET_HEADER_HEIGHT = 50; - -function BudgetHeader({ - currentMonth, - monthBounds, - onPrevMonth, - onNextMonth, - editMode, +function BudgetMenu({ onEditMode, - showHiddenCategories, - savePrefs, - pushModal, + onToggleHiddenCategories, onSwitchBudgetType, }) { - let serverURL = useServerURL(); - - let prevEnabled = currentMonth > monthBounds.start; - let nextEnabled = currentMonth < monthUtils.subMonths(monthBounds.end, 1); - - let buttonStyle = { - padding: 10, - margin: 2, - }; - - let toggleHiddenCategories = () => { - savePrefs({ - 'budget.showHiddenCategories': !showHiddenCategories, - }); - }; - let tooltip = useTooltip(); let isReportBudgetEnabled = useFeatureFlag('reportBudget'); @@ -2000,181 +2005,123 @@ function BudgetHeader({ onEditMode?.(true); break; case 'toggle-hidden-categories': - toggleHiddenCategories(); + onToggleHiddenCategories?.(); break; case 'switch-budget-type': - pushModal('switch-budget-type', { - onSwitch: onSwitchBudgetType, - }); + onSwitchBudgetType?.(); break; default: throw new Error(`Unrecognized menu option: ${name}`); } }; + return ( + <> + + {tooltip.isOpen && ( + +