From 4f53f0b2bdf510c82cc79c65a4e5bcad3da8c91f Mon Sep 17 00:00:00 2001 From: Tiger Ding Date: Sat, 6 Apr 2024 15:36:24 -0400 Subject: [PATCH 1/7] UI: Adds dark mode image for master slot empty state --- static/img/emptystates/masterslots-dark.png | Bin 0 -> 35421 bytes static/js/redux/ui/SideBar.tsx | 127 ++++++++++---------- 2 files changed, 65 insertions(+), 62 deletions(-) create mode 100644 static/img/emptystates/masterslots-dark.png diff --git a/static/img/emptystates/masterslots-dark.png b/static/img/emptystates/masterslots-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..f05088a9b2bb37304c85c485c1bcdaa3f8797764 GIT binary patch literal 35421 zcmeEu_dnI||9_n*qp~T0?od#u7QFbINqY_F+WM!2- zLUstB>pGnAUbpW*@O}NztJ|}4J)hV08287%!Y^v6?W19**|B5CzO(A+OFMS#M(^0M zbCPN|c#;@58w~!p)8mrb=^Z(Z9OFB7aPK&aKBenx{;QYno`7vI+meOPUGJ-XUCKo* zX9MnQ8Ecfbe#%#mI!E;~l`;9e`p4Y{Rn;$dXx-)+wv-%2QW&W3VByPoEL&}R{gp`P zy#wbzTi%yCAk308z^AH5l`=pxx3Y2e$_2r3eK~vA%`fuDGRLQzXYBOLGR>xr&3jk6 zR`w?OOiWyTo}Lt(*pyo|F|pp)S}7VxMbC{2-LVrv@gINL#a6ewLb;pwfBZ8A)eTg& z%K!Ywz2+!xsXvU}-2d&>@MGNcvwQ#Nx39C&WA|26pHTnrTce<&LM!b0&n<5~sro@l zfxIs9Y9HhOIvRqZ>AxNsu9x)PiK+Xc;dK3fy*?CGeeC}q`(Np|*F1R{Q)eyZCtIIy zp`+K<$}npfZNn9gJ*KDUY;EM-|3k$3e-V@$nJ?OX7n^`BHtkq6;2n6R&{TP`V^KLl zD?L|b)e>XA8);%w0>cE*4GS!I8ZH!3SeIW|H~%zSsR=oUoT*K_`^NJrHA%h= zLs194bk`OU(?hJJ%}0q})MM}}=dvl`n)zjRcXH;}$LU5bCs&Ke^~sKYnahczt))4e zEuM1g0cw@qzjF*7xbwj|CJRK@`bu+@{f|wBGYJlSyVY3pL_w9b#0b#8te10mQWu)(D%w-zW{$;~I=qL&5Ull=XT7K;* zwG0YcA5_&23^D6y;>amAG>N>`sK{vB*cbBa4#)8OK(WZv+}D_;tVm?Nea4bC;-Q|d zR`~6-krU^(*?J(OYFNXy_7Iyz`hg{Y2-kIA30BID*Tfj}YD4bB6?qS&u`_ks|t%_51{q7H6XL zrfUr>0{C-GD*~;~Cyu(7&o|09SyTqE7g(j57;;~m`1aB^BV#p}?oj%uA17V#&`;Tb z&FdPoO1@sv=17fqJ~|}aRb+b+H!@)}^-#TO(%O$GBjbpezTjhheo4nX#J+AXl|3SI=9r5^BV(~ zo9+qhT^U;uwDQRJdMF1(zX^G5U%ULP<3|Ym-GSkudZ?|s*f$w{D~~^b_{9SyRgIqV z71w?~k5j=lX{NU-OYe?u+=a`|&h9tRYnySFjO(xtTKFqdZSCkMsNy2wP{FE=Rthuj z<|V#*Cqj+c&OiK{Ryc=tgByWlm6)lE85{wOpW4U;37$zg@6}Sh?~BsBl|Vc6I_*P4;AH`J4q{lgbZiPiYBrv?{{?rhyU@wTN8yOk#L02zJ2XyzuSFfZen$Mk>2?|I@Pdi&v5Z3R& z9Ho`zml~PqCcM(J6TxNcl@j62l{Wrp8y(Ye# z>l`*hn_GYV`-g;?+^8Q{Fn5nv*?mpv4`jw}8dO?l_H}`PLvC%0l{2uUb zeV?#jD|~25P*p6eftk2J3Mx^Hs?36Di(Mi_M%r2Y$d<9VDY)(L%fda(Tn z^Of4Pvf_|L&`*zBm^zd0?rzQ8-=~6%_n`$IeB$*o+dR+v+Is*U_-owOfKda`Kr~L3 zB>jeup>QotWZm>DV<0fG>I#KRu(Liou%ofDQ6#ct{>pRizdJ>Vy=z@Jm#WP zUj1{$`|CTi1;+6mZ4XHs+>K0rw~C^%KSX>~MD=##yNLVBRMFK<(fWL@M6L9Y5Os9+ zZlvIa#J?5!qMK8@$9j10)^x3LnHq_tqxIi-vTBh8l?UM;E_$O&lZeEuLT=+zGJ^w- zxsB6?%pW%cr@j|*nf#cNuhh%L%PE~|b!AW1>Z|z+HSI536I_$)4@sw}r@ZrzsU8s^ zs%u_8qCf}P(6sT{<=uOdMd?B21udR?3*hQQ$kGLGZ|{vi_psmhqhmLC?nTB6jVLp7v=Z|Qix)70E;r3u4M~Z zyxHXvky?BWoW1|(z3hfJUnh$G#>K@Yovij7DY>w}=H(}^h`K!mT!(mwCq^YJV$x#N z&DynPW}4?n&-30R^jKzZHf_wE^1WxX);hk>Z~AlUt?M`fcf(Inr zRL__Onh0*ccJKKg9ugcB$Oc2-k!uh6f^*3y`2nmcWyE%iZg1KWi$LJ2GxjUeyPxBmJtcXYpzNVl>Xh+} z2kn14$8A57e%Il+;n&_x}Xm26hB^i)`V1N^D^y&_56d zjI{1rRQT=e=_L&Uq5gq{im;+a#}@E(8KXH*EDR)$+dk1c41V;ZHw;pSI*}spA0C6|&#EQ%jelGhRIH zyW6Z~ZCY4lLNLi0G*oCt5t$m)vy|D1tm-}0WM}4OZng}%p;}}^_%RJF_;IAncNE`$ zSEdPaWin)d>`tj+$4V=#7^4~dQXi7D?e^K^asEp&Uf=rSj;G~!ix3XN4-aB<$b7?;luQPTDPlkH*chGU zm&(cS79)IPm;!u*AAF;Q{&+e%9~pUC0#_|qL-wITMmw!=-8HbcoD9;sLbz^`J%GDK za=2jkWWz~@e}xm_W;D;E-IJWO1i8U*;wi?9R}O9RjoDF7ymua=6lugF)tptzcj{wyr)+Q_cg>m0o;BzeM6Kh9C3`>ucPSYSLG=(LxV zQjnB`kTmtMZfwHk1Hq{2(E}~lKg)ehhdVV!eL%;GTuf-}@{}4&yN_>EDtQLJod*B* zd~6oBPUZSyb!{yfp`J1}Ygp?JzcC`n$Y+o|VASBJFJTdm#D2*vU`*m9mvarvc8%)H zf*L)~GJ>n06$Jn07FFq53bh=Icd*Pkw=rejQafB@` zfb`0JLnNlIH{}{o)g&bO5iX#vFV430L=j*!hy@b#4EG$6MOK_V|NTFF2g!WFK*V!% zKEhXk2!7FG;O$wVs3A^_I@;PFfS)EAIS(YES}n^(Ghf76kVTZD zr@(Qs;`Ajlx*q5FMDm5=8B1iM8Au>|MyNTS@#PXfl2^1`jCc+nc#i8RzJ0;rAm+iQd`svWj53h-(-`|U*&7kq>pDpGtn|o(XGxxm0(3BJSRTpP-bo+xCIqKr;ZT<75jgYM0nPk5{wQVmxxJ=;) z+qCS$Yb(%<6qiFI59?-oOi8&IOHl*}yd5kAaj(90D-oDd&kW8m0nack`78OI|9=P< zD~JqrZ4N&=Uw!=)f%wg@0FfCCx$jeX#av!7X1$5BRze#P#Da?czzYz}?-I*$CKz3R z0VpY0uxKI&NF`^9y0y|7@&#F_moasgj*eCYkg9+vBEkchUs|7c-5hxux58|uN!S3& zvKXNizPIR&H$l(FA|c-yA>Zi^q{YbNC!F=;o|S-ig494-t-s)!W?5jGYr z3^q2zhUGimYxUS1IVBr=lR(VSDtgLTj%T7Gm^%7M#|wmwal(y7f>k$4YxAxf*xKjy zMWq>$7_;|6vY(fJ;S9F!x3HrcVbw5%D@VBM+yU?36QaOZctP&G$zi~&^t7k$x=a#n z8#jr}k0iew!BOz3kUn$UFgZ%@Tsiv8Uy4pS0$3jcVw{=@s4VPmn5a6W`k%~voWOV_ z^Tpef^<>OUh0N4}%)D`#J&S8+{Y8?x@G@;B25x6fydn5JWBNcY$3(zcz(Xc7MEkQjOwRJc%h-imT=5w{nhXmLk3FeWD;fqAj4J91X+kd~IMr3`$&Qd(d2nY3KEyMg+#RbyMqYJ*@eC~8`UE{W4BaGmN`Mfx9Nx{A z<>UORadk(j%?R?xjk3(!0wlfpND@3_tl+wz5LrC-)_3F!Q6N32N*@yT5L)F1ePkEs zDT2$ACj@u(8tlp;>ariSCQ`SOH3++)pxSGa{7u8UlkyEAr-G`5hqr`>kN*J8$xvhX zm+`S{Bp#|TyPdPf>J&f142<$W8#0!wgTu1LVwKpL+ z6P~<)DV{8VDGevH>|Z8=h3To}3k{M#o%)>5h}~OMP14HqKvdMBs5o3UgqB6x&=u1{ z7Rv8F()?B~^Sck)`rgOFBLsflf=4n1N7B{!u-`o4d5pS7d>SbvkQBm{QlkMLC%>^d zMr8A0sA3q%A+dcR?&eo-CB}*nkaka!1Cktsy#X2kd&V5mxvJ8(=zot4MI{~c%=NYX zJfinpC$NhfS|lodcpN`NrU+(SkwWG;NoeQ~{1d8!RC$rANcb|VARyXnD9MEi=Ou8_ zr!;xrD!^39v@0+NV{(aHbfzXo7}%-DcnRTu_kfHAp^b9RI;Q1z&QJ^jIg zv!}=%NPFkM=S3R9+yD#24g8wjy5~&@#Pfu%M>XW4mo(T=l%*y?tAPOTKtP|iX=BF; zD_SC16R5$f?IBqYL$dN3wi477;5-(eK3nd~!aQs}K{!VOL`Wn2iv9Hk*td42;s2U- z(%;HDof8=NO2p`5h~Kkc0as3Y$!1ZX&My?D!KvT+oJKOId8Hs%k>xU#ML>f*DyS>@ zKvyybFKbHR6yh1jA9pPfw@#t250%Bn(Uy?o!Q?;>`#lu>s9T4Z810b^xs4MCy2;mE z1kogmXe>X$oRQE-%n~wPl?jVQvsO)!)fx29ktvOShBqsLsAJIW6cPmjW89o)DuJUs zTegpcm2FHQyjpa)`f+>57*$BQN04%~?B0K%m0+WoK0$V#^90)x@u=Y%L1_~p#Q5P? zactQZHuY(JvQ=l2T@W}Up?oQgH$-U1L_tbaK}t~W_c&*b>2x7;6(}izmkdZpDPsGH zusIiq8aem{bbzg<*B2=>%MO#Bh8_e0$0w{G5f-RI$$1XF%&az$f$)*zAZcG}7!YFLN=aUnS)$)j6}6Wqk+K&mW|6i0&t_+pH+y=3kr4HXQ> zgVfOa$-2>mD(n~s zIZ2|MKM#mZ^o-QnIM_%zsRM7JuUQR+ArWGtE#)f?l8`Dg*`3CLL=kJmLY5Sf3U<($ zw}ZT$_?Z_dhNMeJ`x~-r5Y9}`-As$g&jJ9Z$}jrQHdmXo!FRqIK+3g3%AxyO+l*L= zgxiUz-!9vT7EnwR#L*B77U7Jx7J<6NYsqMmVkZkC3NBh#`eCApE=tu!DA|voNm%sk zyexqm`DkQxp~KFILV={Yh-ay~LJ2c3#@81==9e8JoZbV94papP)i98*`J{>zxg=3f_8B{j0Q1YG zxOt=!k(4ShV${C`m{W)(>QA=%SMrY`fJbP={lKQB|@xvq_1&VBrr2WVH5W$Z`K#NcZ)qrK&@EGKIMiWwV+^A#^OsRd2dAnA) zr})%v0=1{1yw%`W9Uf^j5;2yoCo-EmZwDaS5xkFM9QwwDpyZ`6G5sC7YxxkC5OuJGo<{FK0YrY28}2x?7tTZfyyY* z5m?v;z2|mKAjZd&FRy^0W0!DxHfc+CdT>iIg}W!SGhzvW4GGM^nmy_0Yqr2K)gd~j z007fM4QvZv+KX><1GNmJ04unuP`qVFGDtMCU%c#0hUXdxuW#CN{4Mv>>ifN_)3jMdKh(R6h!12$;ISrlr1kNn8N6KM22o12BC@q=N?80>;NTL6V6)rbFdI z0Ul<6>~MRmgWM&WAx2O;DtbF@lmw3Ts3rk($1Vcg$HEAReGF=^v>}(BmvbbM9aVvl z9T`~(j8E=c5rslMTREs;>dIfK}%~9M0TDw&DxVk2WKZA0>n!x;X{<7tl%`zYij2ZD#-Q z+s}I5kQ~h)>WDqLjV+ez>UO&cIz{pt?pOmJl4l>lsng)8Z+ILeAR{q{;eh@StAq5z zsm>1)+#3i7m^i$F5EceXLa3u-`k*tf0W(XKsXuLf+%yf20il|gCp|QuGJ^%8pa&)XZT1YB?fP57N zMs7j~_9dzR6U{@AFBd3Z6%gnc_P72^i3bQ~IHJHDsjX@jc9HMv7eb~VKpFVC5!|5q zR$i62x7?XPP9QSBPa$rls24Vc6GYqc30#5q%++s!`U_dH3Q!CU0EIDyn1UzS?K{4m zr>-yJJzw77y-o>)*M(LchT#J6#h%At1#fIW&Xa~#xEw;=(3ay{SC@q7Cb$ED(6*ow zpm>mQ@L{Oz>rmNwxuR_u{BV)zGaDS8N+c?mQ9sm-^a70JCaif58QBHbgxv(S9Rx`e zDW*BG-?Tvq%RFJ2hY(_mngWei7YBTo5?x@Nr6=Jcq><)zuN15;ar>YdQa!ZWXMTR+!Dbw3w`JlOpd|cA~?xV{pc9M3+4$gFuV=jX6OOibROP?1DFmf zL?mMeWYsMb&^nQd@a`+{-HrI;PQyCKSIgcHgqH!@RwYoxvLYWD*!sy5pfQ0MIED4< zCEMqjqqPX37~TPyVUnd%&3Li&lRzRWPkun7hY)KIdK&=USK!!Y50tz>=vgJwZSRNV zA3VIwCFHi9Y{aUO?A{KH$rj*bjIa??M3{ESwP#z$IC3x7Mw<#fJ#J0ZAJ9GobF(!W z-P;a4Db@HnFMwtU^al+gaRKKJ5?mnZ4Z!RhsRZ{a*C>mu~wK8V21UXdbEt4fFxBy?{epJtV7ZhxhhXpzJCX~+2Q zpSR&A>E~B!P~OJ3IpoX{QstgU0CB(Ji5o2n82E{1U;Bf1dr7{yq!gwrvtTLi#3acV zcZO=sf>(>fXMX^j;vddI-C()R1VA=k2B0kZENvU=C!FF4%0x_?2z`j+`|+?2SGst<7n0 zTSN*WmD>x&Nzoz-w0;4U1~rhfI`8eAq9{In0FzBpzYIaDj3cr^l_X?mctPus-8tu{ zTaQr09P7i&wT!aA_*-5ZEDvN^F_e7{6zXr9+R8^Fb(kQKrVp7f4{y7Ly+oH3e8#O=gAY^+)kTs82o?k6X(eIzFepkI>N#(B zHYvmkD@@FB`o2LPXy5eH3oI?ik&R2`dg1ML~m5+gE1R4Am+&I53$?ChZ4L4 zb|%Cot?zWIVI{ogFg!Fq9UoRG{^OzgeH7ZVAzZqe&SBe3JOg$$1`{MwSxlJ! z(X17%r`zC8>bby_L8Rc?kJqjQ>LJ)XkkH_Ig(Qs>`UbGeM4mstl=Ag z$#FaZKyTlX+)t$MWW5F9PIe%*^EP;r0tKlo55R9ZLGN9pbBKrlU*IJm@uS{V)?t&CilY>H;^I*QncFuO{OF!#W0m2=%YeLVTg~PAAUZ)y&Fns9&mUB7K6mS z`Jjx41PqU0*UR(IHn08@O*I%m{_phl#pj)6WZl~pwBIy67V-U8SITGF@|Cu}oU8#I zKv*9AocEl{ngN$>qm7=ABWC9yL0wq35{l7SU+Ha)1Z{$#2n|~!q@3&#piIbSB&|#` zZD3QyW+0875hT8iN|;%wDUMq!ULs&S*2<-hA0s5tqFT_|(v+5_0mJQ_P#!(>t_!wy z2O7@ub%SL{u61+3&J^_-4QtGQp#h5>0+&^X1Qz9a`@05`)Gq*UiRV)EBXeYs*gdap zd?Xbx!otr)w}Zr+a^_}@XE8Rfwi`?=iNVst%jNWT>{)C#&5`9oVX8!L z3#5r*F0sY3+*Xf}o3&(sme>Z573IK4J!7-UBe;No%;hYP7a6;9pHi!ByNZ}L*5Vb7 z4V$TpAG$%cWn>s}8_XZi;dzDn2gUXN z?hTv9u!W<1AZMU|0jh;zE(OTagIu)US`eS`>KBcIwBK zA=LJs^5+VE7Cj})bC&HVXbO3CW$O(`Ky#Bs{S~stAb%dvk|Och65ojgMr?R*a9^iJ zP3tv2-OcBGlNW&t&>QIu!Ao^k%vO|N9`lhPClCx3K~?J69@RX2V09oKb(&r(cE^zU zN6mfeBm2%!AeS?40IaIZtDxQLn(VK)4k9T%+o>bJ1Yr~2Ys~C67`?k^M&4?$XqVWN0C@w zPj6?8eQ5JMrcUa2FFuRzFTzbVZfn1F)=42eZ1Gb_8(M@*8S#-o^*Ka$X@41r*BDM3 z-{bmpk=MHKPqWY~5*K^2A+3_{ zB7CS%o4=S`W%Ks&QEsh0-v2snZMt%E!=tRM49w2mwKiI^)YIeood4^5v`zYCsmn$I z&Zg_rNUUgmL`H@{!;D|zg~?L!xc%=%!G8{$@Zxz}n4`Y}4hQ+dIz!tH394y+$05sXYgA zuav2lE)aNx`XP=0mA9$2ocFu%^Fbe2igga;4;cuv96EHU^2ipHDqU1+vRbcLH0U_3C&ym;meS>?w86f9m?kK`Zvxv{UWUlJ_r{3t$^^ z^6uA)E=1c@Uear8f@57XLEZJjS!&$*G;e7`2q%J4i{d07PGho zud<0K3$2@3xw*;-qbo%~m9o9eMt#0Ftd8($B`UB8UPy>oyz>Cp@BVF;gVj&Z!_eAw z+1Rwq|9FmB8GC@dkBi`a8za4rMG1Yq#bq#JRFPMAJZG+)0-0&5=xFi(@Xxrle=MP_ zzvkA(o)@STLk8QLb&Sru9?H(vai9A#F6*^=J}Wyxy{FA#Uw3~cr$Mf1lw(Y8_0m$C zytq<*J}tv+5g6#|H_Pr73ob<9KE{;|(m-$d{l@~b5)myh9o9SRT=14OfmU>$#VB1X z!9O`8qu;z^(Fe#=g#g!s>}>Ek759lRZYuZ6SbSNdOe;7Hasw69y1Qo%0n{*$wo#4& z6GP`hWo5m1U4+w%cg2b~IxCI$^<8MY42Md(oh1lNwWpioj17 z9e7eDr4=Tc$r* ziWD*+Nj0PeY z+Wji+7ZMd#y1@yq7abV(i$Ccl!09{oPWES^p@*VU$8y?i`ytnw;mjD`SYAGvAV3(6 zjvTW!d4^Xq9h&+JS1@%Etd03G63H=jbB>mjB-*Zuax;&6cxBIt zGFkYvCZEFIzZP-}a+RrAs`*%aZKY+Zpu&v#<6W~d@2O3@S#Ob} zk5Jb9pRI90%rF#vE1TI?sUFmmb$r{ChTn9v#-!!?8|iC1<^@~Jvq85Fl+q&is%XW_ z&i?xT{X5so$<;xb87Id{U4@0;A6`|YX#2;o^mixJ9LlZa?Cv&jEzyj&vFPdV-~2k+ zksI=+er?%)TEDWkP375z=Y`R#R3HVD4#fHOnoGNKRRr=Q+6t}$kl$-y ziEC(uG@Y_B3Z7|*ot&JU{prCK4knxTvz6SEFY_P16gV|tVC6c~USz|fIy(sIxxy)4 zvdB-3HWobovlAaZf|{90?^Mh-+rV)mP)s*~rBA>_*P2vh&bD{t2eWl}}!4{b^TATWwv9|PDUAz^cw zw)7>+`c$*aF;gHFVJ0T>q%MQzFc2*|3&rC50Kd~4>K?c@H}t9BE1-2@WYKVxbKNdp z_Elev{+FZaRg04W?z3&VZ)c7h&zvyZH1W{t@2;mrmW$oFnSCGR#$o9?Q}>u7sT2g# zu%I1*e+nPIfeJw+m5Nq^++ujXs4{>@!TlXA@icy8V1n;SLD7P?K~^G_X~lx~+u1e) zS7ouel~f_6AULhOZ2cr#Ooh9J{dste_`O_EoLjQ3+90`uJ(^WV7@F|ucTpWnhRb!( zZiq$Co(YO4h*tNyacW{1*9X3WAY(T{- zrTI{px_cS+5*jQ39$)@-A=SH+m+`jJF}H8+v=KLujNJlxSV?PO$7&A_;H?YwZc;K2nxq6p#Iz=eLcVTw^XqQ~?;+rp(6qxa)Lf^%D z2{of=ndwBEuB0Tb^vdEJ!(W0lFm*jQ1h{_(!^Vz?v^ea)=Qg&+3qb7)Uw#@xCD-Fc zW?5HnvG-QJ(yIziF2zkW(6F!Xw9a?2VJ16#21VG+qb36aWTGFAu3T^hmmDlsWF7T7 zoE>bDc}rcm%-xC}gl$K4yEsYm&v9YPzRmvHnu+jX8o#y4SS3-0`LZTanw82@V`e+pJhIBB4N zYo`s50r)|uRy`wYI{mWMcHrk-r5r#1$VHQzFEfM(7IWVMKf$!ZuVk|oi~?I2-dvP% zbXtrv7DVem|J7b11Tt+%I?&bguxJfp_!jyZ@&hL6zcg+K^DdYT+8z!pFn!m7UMAUF zwZXa9*BKeEit&?Qo)oxGf1SsTI)8DA(t{mok-6sBdMIuFiKCUp<>l+62A3reIK3D5 zkLP58(4PU028WW31}Ce)p^4!(qr)_Duyb*cp?J!(4jN!*Ywd^>SU?`TYLADIoh4RzwMJ))>Fv4QQJjGdKY|j))$|IqE zDB_!bgh5Y(BEGBE?K~z2c=k`uSET1m0`j%5(ciECdc z(BTjdz#4SYvM@a~vCj0MshX6%h1SVa0HhUcUkiY!65L!v27?{kheqPikf8;)pDrX>7zrNZUe_;U*qHI}x9VO^-kkZ4amX2;W5!iP|=i7}vz13sc~3kq;-YP7Phcs0(HZ@B{4w z#p0ZIrE0`pb|63URA1P$Vjk%r6Zb=zRc9O<&@%!;1n+{WJZV}rVlBeC7ADBs6#4A< zL1`CEhVbB{kflq%&KJ3&hWs|TpyFLivZg==WrP*(HRrYftpvYS-<*Ok+mhH?FnTcb z*i9VR(kd#-@4P&VCjvAO&DkwVa1ur*p?2)%#diniZ1>xN zQn=Y$VMnPae+|KfCyf==<|dKz7lIYE;tfGBgBojbaFB%f+l7xp%geSMSB;js#ywYq z)DmAjr8QnR_Xeta?ABx;820vlZQaUfXa)x<^{v06k=Yx=CT5HxW?97iA6W8jG9TsKo1t7rwH9b8oAvQAYQyGb}?qYG<)TY4~OP=BFW6w4zA0@!!e7?(h z$#KeW@_B;`5#TKfofZBz-bteM;^)&_XQuzA`4nSN)(0o1&;BsOe9%E^^0iD@oOw^8 z4b|S$AW69mkdiT|xO5c|twRUB(O;HXmEl6*U#3@YyszXemOMs9;C;ZA$fUdA-kJ}Q zsefi2J95?oKNmVj*)Pg>HZ(LeafnZY?0DCRT!Si@e*&2jW=(GJ$=Y}RU1YL*lv-L0 z4LVfWbv{kO8c`9|Yd^W6p-&I`4WoxGWZ%B~a94>FTzqjMzUn=NxP`yGdB|eD%(MaX zN3II*sqeYsPCFaMAD(a(ptsj)HML@_>&WklEHGZDJt=@9j!S|nD!79QG><|%vd7d0 zcE436P<~f94DQ$oPR*IT3&{6fj^(c6EVDO)md$r~n9V9+ZQ@r2xWLFA7!kEdQ*>s3 zB@LR@NN$<^KJfcgGSbRPw%5)AKYby=U~kcW8<2D?7m^Ps;6|ZneWI&(_gmq~zd9Fc z!Xb<^rL#F<&%=fQ!H3cuNBK3vojc()zfTR-W?BDr`ET6>7iZ3XEVr6wxXf_kKq&OyS z7YrO>fs zqy6u({(#+>y7D`>x$`7p<@UIt#p9wwq>$8*A7gZVG5^{*>qik+vjOE~(@-Y4_1`-? zeUbI~m4U^#)wq1;MyPTJ5`xZdbV6L+x>gW4R1M!cU78Pz*nc%(^OmA;* zOj%zU>Y3x^c_!IZILq8@zK(SWBV|wy+}ciib9{UQW=GD5HMdXZ1G}kwn4#(TWA>Nn zilB-joqpm>Z;z!S(!8^)Yeo0ad~h=d0+(~M;ld9rY@J~E;zq8JptNXBS!4#@CfGbM zeoqiw5H_=aXH&?p@y?#dw;ShQ9Ad?C=>7ULxa^%iI~N0X`wu|f4{*0p%7f*(%-Ejp zIw}OHQEFKKdyNwGbC=vVl7wKw2e}R6*r#4*AvzxO@X{>ayNd45yl#8_Rwy@thwvC1 zd1PdNq1h3-kKz`I`+yr^kk&fRb+&BI_bCOk*29AZqeXcGnJ^bin3Do}aE=z{?^wJJ zvS;Ob@{1*IA zHd8TEa&7o?jB(jJXC`WN>HXspn3I$spM#t`Y3qIx!tA!Ds4&a!Rn1uEnQlx3k0i}8 zZ?tap^vDk_JSmv1vl^|9^si2!MMqJ!zyIA~UP2EJAs7F$)f|byvC>?nL6}i-08sq* z9+@e?6#R_4qyomT;tJQ>jH zJD#S4baZs=cLxD-QIt&g9*edKnQWRq)$lJTuR=+^iL?r)_(j%ZX!fstRfc|;H|8;g z;C7xh5W$x3t7{)WHrqMqe~V-ICq0%!HM9IxZt%)*vHvjeF%w5aoS`{?EwdJI43OyJ zaX}0#Adx6dI@*}|IHAuTI9@+t24y0@UBg*k}?cs^jp;cJQ@BU`(Tc*nP z@VB@#6PhYsNl(EPSky?{$XMDdf1s@^AX7XH4EWmj_>dE>aZKl`zJHTu!z_bp(6TfM zYhkP8X@(|mNh3L*dG}!pJaBdh zeKCdyF(-h?g4}5wxKZ&zLzOHO@N) z%gVCG;0#I^6yHiYny+7xPIA3CfeD> zW#jq>O`vUmhZEBU`jVw9H-GN+@pW!@wcj84CE%8RrH0;bzxtp4h;h*Sm2N_QZ-&!W zdv|&Ndzn2}9||l0a*JNHOqA%4vq@C&n=8o|jblQ-swg>lL18hRGAHF5RS#$p>OzmBptKh?oxmE; zJJ7WgxJwoC_4)m+e>bYGj}Cxz;9bLlgzP3ACXBlLaoPA`kPoaiaW#)$KU$xk1nwwR zK0b4p0y$4pnpnjMC!>%RCL~*LxD(_~^^?`X2xZj^%8`}1a*RAkt%J(e%Bzv(+N3{* z=ig{WeJ{Avfd9ZD7GKw>gz>`S-z_m$H?)r&k@Bw3)6QJ?x|n!imc4 zm0Uml&Iz9vjCp?Nei|cc*?{*dghtlx@#H63P0UW%)(9+uWl+`eH^%|!>HHXx=mRmu zJK#e!ao7lg8&WO69gI!KJDd`L51SA&Arx~cfDQELRC3-i5Py51+aR}*^^r{%7s$MA zS|_s5phv!Xh+z`ppy?dwb`c!T+e>0jIg?Nv>m(Qt%n@frhgKB>+6|QBx;s1nECb($ zF1DY`cg$4b&%F&EX9ex~Zyzz36T)tj9Ih3!{%;p+PI2LYd$R_%ws|=bT(GzOC77*6 z;`BE!En9~~lQ&QY0weKdbkqTS-;+nOiEXCA9~is4u&g}4W;L308)To$3`fRB;?u+8@qO_U9wVJZ&b;2OAwzVlxXUK175hccNVqk5SmBy`` zSx>KqO=($#K~n`6(uW$_6Z~V(#vQP3;|E>spVzAmFaP0siV){%hH@@;C6;)lVQ5tq zxETfvB4c2%#gUR9W#y&&qPtWsKndKS_a2m`9}^6Tak zz!EQm!2IT5&L!?^rYAcX#!{+&;-^+GyNeR%DBvh1n7!0nW5jVje9s6nK_yjh_q9Pk zJr2~WnhwV$7IM>|oqzCiNfheB zwiUThZ$&oZ87&MNUBJ9~j4=i5@Is-#%s&sYw9{bC62zlgL?Mhe)UpY{p{zPF?73d zn~oq#v#l+EfEp^kmc!d@g-?-!9tu;W2B}(;r;E8HfqTAM2A$H8m6r0a-90^j4>kO} zH?l046uh+QIumR;R6PA5YP0XlH6PoNC9PT}Ke@!Hboq#f=+-y?@Ofc&ZYx) z&qgS4*+5G>Qe6U%MA|rJ|F(@OIbo!!js+^#($zR{brT}lKQdqBk3|1B0eHt zP*YdG+_w*RBf_m$y5Xu$V}erG%F?xLeaD%oi4hf*XNQj0aNpatvzyud9snv$&~H2)?HFkVvwNVm*1r+&5rDSadbC^gUT&heSZWxg7kK(XF@0)KGnd}yrEUi zwAF!QO6w2q@FW#tpILgHCObymY*g6Xu9x9ffTee0&QwpwSOYCFmwu>S|S-JXb6dJ{lp%|1h!aqzE(N zZdCEJKx;9yxswJXTMUjtW`IJdBPKY zK6u>SK}Cgc#ozO)X{qNa{pgtPO1*Q6>|sBxdeKjLTJEr0(bwU2*oF_iFnkt4qCYB$ z@|QS+rp~jbi5n{5Oy~gxPr848>@%M1FsTiCpd>I6gF-MIuw4tUiPGB{;itoP^U}H!u)rIB**;He9;(jb32cd zQS*xqg{$f^-qPq&ZL7VAlT2<8v4g^|D*q7W2~WCiN?DB?Ydhg5D^c-b*qODN<27%4 zt||t(=?gy{T(>}-W+>>PKU$*zSX{LKZ2zbG^}}-_k1oyheJZp!eJ~nUxB5N8RH3r- zs?NC}`Mn>Oy{sOOwQ9ei@X|rla5r=9Oi!+U&eOu>luGvDd&hQ`X;h=bcC~xx%e1KO z!2G4Dw#QPO`i*U0eeS)uXLRHv-5C#B+}E%=YO60+WzJ!q5x<>uhBic}nLl}`@MYzE zTDj@re6`lS!X#UtYht7(eVcPBRmvkXxrAPT5pjlFK+ql4K9kAGf(mHIUQ~H<06eQo zLwyOWOMl(&)9E*|p9^>CQIT$15&2gR(>3 zUxTy)FR~-I5#Vc?X=a;w$3FgjIG1k+uA{UlWi1ucZ}K{m$;T?UWfS99kX@o{xdG*6 zV2XY=Xj7!-F~g+qP@>g9@y(w5E%f6-u&u*Iyj6K#4*DAP~W)_{qVcNgh`;Gh^tuMqj1ux9u8eR zC49sYuLxW4!F_Zm?-@_)PX7Ckg_wB2-erKiQ2Y*!lXs9o^hkiyc~rWIA$A?9631ag zMIui_9U?C6W)4U4h8fuMU;T`RJonzoj*Me>=O}*aEr3$F5mwhY&75=EvWhbPA1rSa zU#X^3Rf8cX8B;&tk%c{tr9dCNHaP_0&c0LO$FxPlZl0Fp9tmT$YpX-c-}$xAwY`@N z)Rb8~yI?ey{KI?Krvnso0(m7G=xP>0*Ow0@$X-dcaH=Yi|4Ju+%O3mFU{8`z0o-1! zO73I_)E@ktH{858mrm zT|PN`${s5nr+L!HzkmmcjBzadK3SUbY)dH*aPN#o?$SLU{SVom=_tV2cj=~~cVJT3 zu&q>7|NPJ~o|G3I==sTeNqD7Xv1j^TifX)Mje>q|2iJ^1`n8h3=bk?dN@#uMQnP&R zOKaAZdw+vke#e4{YtA&C|FMfB>SXuFtKdQoX#s%x-1wax7L! zR^-vwS?dRrgHA>+SZrN5ux&qFWEGkMq$A~3s{JiJ= z177DiXPk5UF4y;SUDxOOT=#tsHspe~T&}%`ytedm^W(!RONY zOd22mATBQ~25(3dVI3#L9`2@&&W4AudX1SqwMd)pdS0+n)0Vysl8D;ae-a`6{^8f+ zlh45T>%WiBGF*uBtT-)JCOSo(Ly3JXWFjmMF`HxV6})u)lu$bTQH=;C(j8dRIapbi z+xzE?R#tYNVI?W+m-r&>-%A|$5lLIZS%#}nDJ8Ad;7Q=e4(g4TJT#ViECHg0Ly6J? z$UkF1LT2^< z29JFJwveV?B>kwQs`5|XO4^vk%CK04YQ;sx@+m}P?}$xJXeS+GHZ%EdQ1MuhXB=-H|I3S00g!87)P$TWnAj4rAUWIaGKnegf zbKuk2$D5_#8;7R9;qRhl!8;K2M4W7^{nlTHkjJkh9W$M(r00zC$m%v_18(ID<~Jhs zYP@5$K!p7f-RaAbPpKU0XNbOif*!+ekr3-*mo*?La+iwQbT-b3)$Nyjl$t}+-Q;XY zD&o{WuG_FA4(!zzWDKp#|vqF@+Dq z!w*mObo(VUU~+ZCBlT81V+?tD&incnl%#`NLpnG7qkoR8)3M-A0IARHYP>e<%@01GQc&%f|nD@c;`xw+I;fvQFq z!IFr9!yY`n*-1Kg2aUSUaLilS7)0Q)TKd33jydl~_IUee(Bh9NF5S+<5GCj)lw_D(gK4vc*Ou5b3H)<@R9 zR?H$TZPfmFJY@t><-AGM9T=BxLIv|4e9J8T!rl#3)=B`2i zt|z_#2Hy)X&@9<*K+M{YbY3;kc5-5eWreF}XMzgsHr>!^FNaU1W!z%^GYM;YF6#BSK9K$}*1Pox2GTt|`oF8_BDbKAkyb^BW#|V`TEhH>C^7K&} z%10J#hf=lt8;6A?A4wL{vEkFhckiufkIYtGR*lO4OVu5CeB9>QY>udtBZOT%MclF4 zA{z`@^(dEUY%>~5Q%tIFGmh4y;D<7+Q0ocCD1a$q%gW6qxOcvJiR#0wC$X`y!SLw( z6N~91YbTyibp4KGyXR3+?B^L{{SX#2m+K-qUH4%hxH0}>RF-W%8(xID=^kn20$Mj- zXkWW@Yfr)_W|2e$eNhYj0#s)Ad)o91rT2@%7IKRLHlWOfqtK17ZYn}Cp)ch89VZCn ztZ4!K!-51;c7;8y17RP&${60lu650>!3>J!0cR4A860XrPKtWYV7mCGBTXJhBjLxL0*w5}2?EGjz z!CPksf>Wz*V|6yxzgxW)DLdpV{Cap;iBnPYIUAlG*C9VlaB`Xx|0}lbpUnlO;k;9a zrv~Gg5nV z9FkZIVMzq1RUeY|>43?bk~I>44Y)PS!Yj5H;QezMqN1YgD3dQG3Qs$Cy+Ahk+po$v zi7_x^&2PWp_HvEFR_lmG(s;78{zxyfo7&?BTG{`Lo z57hdEo6bfTcys;H4Hz?&`~GRpAyQG)k1G2|g#i36SLWHcIG1aG#l%XSEZEZFuMA%H zSu-13H{%fUm1u$U97~}fI`qj$^}n*eRgkhC$`^Uj*wOBU?qnb0n#dJB_mI4tV8?9& z`ITC#Sy?v~Y224s48XFl-GGVH00SvP^#~~jX^@IMA(JXN`CCuR&lqgpu`LybcwhQ( z$#XD=gqnI8Vc{fh+CyP=7ArM>l?=sf5$wvtWHK^>UT_2y53X}&ovW}+S`%FrOO>I3 zq5fb5`3aD+YpK7@Rte+qO4Czd(cl4=4TwlD@2R}_VT~1tLSf-~CxTH1;%XH4UdO9P zQO}76Rh(V5M~YtQE5&2(4b00+W|&N#KzVqBFv?3@KDj~pLe4fjh|!+kW)bJsu5>EobA|nR7ho*+wm;c zo-5{H;zQ4740&hfKc^aT*_RBs2^%2q<{m`>E=)j)lt zFYk`_mvKGhz4CHZEINM$bwl&*1#r81(PYp1>;A^TK&zFI?Ph+Afx_#E3@fN0zcKRS zkGVk++s2}KoMvLI9^e-FdQ||N$6!=&e&6U?(>4^-t&!X5XKxP})vG6hwbgZSV>?R^ zD)J8rmBwQr*VcWNYWaW7}R>2)y5o-#V7Qg+V^R!|y~dNF#)w1W4- z)lBxbUZG~A`;1(};-BMsvx4^a_QVLs?p3gSRB{)VbokxgBGwXj@6fleonB}b>+nUE zkH39pYdg3Q+3^%L{nkh)nW^x6@WqW%U%;FWhXZv0+LB)>M&l7&+;75{A&3kXddMH< zA|K>HDjB~`3Te};e?*ThT;P6g)>XU|&Hh5TU4-uox%M|G zmL$wy2gp)kX&n(q7n?~~69;b{U#QlFavO#ULD8KVk$T%BS#f82bCetRKRhGV;1?1S zQp=n1r2*!c43IJb#eAq%t1pwO>FbS|V`{Wy_kja&iiG|+3844ip>D-w6Q30?e}NZJ~*URc?ZZTG@XyiAEr@F~~j} z*3hw~a$G@z$w|o&E9nokaR zLRKy#<-Q|0Zl7;hY>8F!ymM;->k0C26@c|BH2V^b_e`Gx!rx5kIReOyA-uSa(NgbP zmGYGJgq+s74=V5iq;u5k(!`Fj^qde3M#h4EwkN8XZxOZD?9!0HN;8|In3#@IIAmsNWupE()i@3`SpuDcP zUYHo~J^MMh)_3A$acummagH9)?v8+L`6V_jiiQXCG1K>QL2<}RW?+Ro>J0U$*%Wjh znV=MM38;9A#k_2Iq48(03hnIA;$!A`Ynl*k4YhXV@?VYzx`D)bxQ}92m=c(Um|a<9 zJ;W1(u03x9T3iK|2UkbK*ErR0-(<*QDt%RjLT^qL-ju<*(E|LPIS{q-MMVLxtP{ry zfansTo_*wyY+px5N4c)a7xN9D3bUjWd&flMk3cTTBB~gyW4^s3vlB*K9{60gU7Z4i z(*A?)ql_z>?>DwW;GfMgvHqL+7kpY-bqM4D^lQ^3)q?zoo*F3!KgxTmec*5uNemA+ zJu~^7Lti~f`X8na(g2?dsECCdGArTV)fZ2#)?7yp$luPS!J5(Tl^=Cqr$na*Gg`(1|E;U1$JpyZ#m?9e&rdbG>>6`^@-ZOIQ6QL#3xln;vnBd+YE(F0E5>g%VE}s6!t(mm*zDZKRaK*k!%VnUpLr-4ulStLxQP3*@0ulz-_el&@Rr*w9%|>tnvT1F_-Kok;%4%#EtSz? zAex(ks&#bhUTKpcp(!UKQZLezg_c#&gfn_bpfu2@i{cPf3OZ+?sTm_{c99rQ$S4D- z74>~Xh?`YtH^iRDiiH}W(ZlBJNK=LWc4*SfUz@gl+S1wmG>wf;KmFR;#Epba-)AnB zwZ|72^46pQJ?YxvJ=@3QmS1q_YvrWxuqSl`hTOSLQO-40{&6pX4Asj;DF&eiBOHE- zj0fV*@bsO8SugY=x3z$9RPIUy8O8c@tM+dj`gH*Vl_t5=-7(pn!jb*h5S6e=Ulmqe>m<8aL4M>?hpc zsNhvBj-0Kv5A(z!W{u~U*K3~lCPnIv?iV>p8|rCJJuyk01JYbV+FJCx(vH7YMVVw0 zl|HXEtii!t!vA^diO<=&NTqm6EhxjCtt|Q3@UmtR0yNXpxB*>63M6=98_fI{+Y%28 z@&!4=jp5EUTYY>Qw{JOa#GY-1A{csRoHm z|J#07-H6+#B^&0LkUs4VO7U4}o$Ecx;e&Xaul>r!HwK6g0Ea0Wa9h4u`Cu154e$eDQpfDkxTC<1FURo>r(Hb=fT&HZ6(Og8fl5e z{0Wn!4e&H4AtD|j!W?SqzFBDW^;6XDjOs)cgJ9)zb1Z zPy4mJAvaRO?2W6DdUgl3b9at8-(^fnozWFFX6*W#(ubaif>`EP#t~9(T~8=6T;?Tb z9a7QuKsQU?>=yNuJplJ&geK7Ljb><&r-6qSkU}xe#ZS=so_RURjuk4965(-ig)HCN zhYv;KbTF)-Pw%`OxakvM3Y7PnX#8&ttzYLUl9&{}w6O}s2+d#jx3wr_?~M|UC8TgV z1W9w4D^3F?Ju2TtCKf%f<-iw8yyX>iOpy(5*NNO|I8Zi#_?m?K<^^6XGS$)4`3eha zZMrhQE4Ln023wWMs)~;a34MOi_rn89fXLQh9^XL2iD+O;4It4^CJn*wM!wX6MZ)3Z z3UW24C*U~aWjSbWQC;X`>)*rY(_l>uRgB_u?a|N@I}|XvQ#w)R z;RBqyYQRm^C02RVN~d_bGa>^jow_Md?s3KR;!CZ7&yN^gkGh>@HYiR8RcAkyP=A&K zIcjOYSlEBZi@Jz5@G@#W6e4+}$HL`wCpAk|!M}Jinx~a_q!t+V1!$*DDdm-$m*kBs z+E_IL#oAm(%Z}!3X$~e_-3ZbJ+V?g?o4nQwMCV?O^JayG7jJ3aNl*TBk8>tS!*aIY zDu8BLO()QfFyY>O8rZl+)Ii^XA@v5Zhjtp(fPq?YOGT4q9(*GEmdRh1Oh)2hB@p>8TW?+i(OE;1{+dXbJyarKrfrfH}u)uz;w2_W(_nbaT z!|azoe$TOUsA+mkw}&KS{aNhfpnmOn$7UrXgDAEDOQLqJRg>&fV|m+V87%k$WvA@^lB|V26|y8>beHEed5fNMumj}To;0qJnDIvjvup?Rweyiu}G-q3e~UWhX@)+1W-`yaeW63vGdl)=T?a+9uD;oG&gT zjvqcHy&OVZZYB;b%=sOeyKQTzg?)CgEAY4V{=!>CHnZ8m)cSm>^$<*V|AOgCuzj24 zN~hj=8v#j4)_I>yzg-<|>(Nw3Xw7%hUUZtUQ1>0Y19LBt(D+C_iKm+A9lWCDBXewg z{CEJkdzJ|`J-l4vXKT^sIU-X-7M%07?wdS%;7+NXEq=hc%z#_F&;M@raFuhP?%?2H zE?;i_yIGk6n75B;8ExqLwQlg~-8JMv1|Ac8Y-Bqd1v@$ zY~{ZE0k^L8(R-!kCq*4dfm)6R#gXWF!}zISUm#*ApU7~Q1l^F4V#W;G5b;}vP>}&_ zVH5tjq%D1f|BQexgM1>sqCdhj{&J=We~CMq_~%6>v9UU-0v_$@zQ>2Z9aQY=pe=n)^)z964T(hK@dnxkGx*oJ%8q>y*O!V|Oo*+5 z!eD_({U@75=PZ#?K1v+$2ew|Oku@SX)H!n-nl9GA=E(m}SErPkSAuWe_kUjL9G?=tI3O!F4TyGv&SiX4PTLWqw z9jVvGiVED}fWd7j%-jH#6D9^DLvCZ2I5vFB`~;*IrS)rV($E|7#w#fXXxZ^gD1GCM zte!#}_m>4G<@$H+ZUr{V4V4{3y}AHX+wghBM;WdBf z0(0BnruRE+*H{yC@7ph8Rc(BHz>PDCijyom_$VFlCIO{OEn%}6&L2z+8i)BP6t#tA zYb(p75Vkb*e0eNF(zA9ZE!p_w+B8L2An69yCwCVcKASi3%MQt!9%5(t=If`a-i?Xv ztr5*Thl@zLy!e2Emx9&{ohR#U%?%FWI+WYJdO@LcBd{@a+!OiUM@Wl5KCINUh(=}b|XU1QzL+R(qAnA)kZ;Zs=EsdDLWgp}sbca5NF zH_pG0db{0D7omasBze;_@5I!o$Y|uf4SODhf$xYC&=KfjIEq5c(Y@W#u;50fRd7w< z#Z!=-SHq!a1-gD+j3S^NwBu}F?7%fkaZ$fjR{y$OniX`{YU!@i>XQGmLc}<@=6xfA zb4S|%734gCpfqpz$A1k^`zLr=bv?s4vW&> literal 0 HcmV?d00001 diff --git a/static/js/redux/ui/SideBar.tsx b/static/js/redux/ui/SideBar.tsx index 7747913d22..c26b661901 100644 --- a/static/js/redux/ui/SideBar.tsx +++ b/static/js/redux/ui/SideBar.tsx @@ -103,46 +103,46 @@ const SideBar = () => { const savedTimetables = savedTimetablesState ? savedTimetablesState.map((t: Timetable) => ( -
dispatch(loadTimetable(t))}> - {t.name} +
dispatch(loadTimetable(t))}> + {t.name} + + + {!isMobile && activeTimetable.name !== t.name && ( - - {!isMobile && activeTimetable.name !== t.name && ( - - )} -
- )) + )} +
+ )) : null; // Contains all keys for masterSlots (Iterated over for hoveredCourse, i.e. state for index of up/down keyboard shortcuts) @@ -150,33 +150,33 @@ const SideBar = () => { let masterSlots = mandatoryCourses ? mandatoryCourses.map((course) => { - const colourIndex = - course.id in courseToColourIndex - ? courseToColourIndex[course.id] - : getNextAvailableColour(courseToColourIndex); - const professors = course.sections.map((section) => section.instructors); - const sectionId = timetable.slots.find( - (slot) => slot.course === course.id - ).section; + const colourIndex = + course.id in courseToColourIndex + ? courseToColourIndex[course.id] + : getNextAvailableColour(courseToColourIndex); + const professors = course.sections.map((section) => section.instructors); + const sectionId = timetable.slots.find( + (slot) => slot.course === course.id + ).section; - masterSlotList.push(course.id); + masterSlotList.push(course.id); - return ( - dispatch(fetchCourseInfo(course.id))} - removeCourse={() => dispatch(addOrRemoveCourse(course.id))} - getShareLink={getShareLink} - colorData={colorData} - isHovered={masterSlotList[hoveredCourse] === course.id} - /> - ); - }) + return ( + dispatch(fetchCourseInfo(course.id))} + removeCourse={() => dispatch(addOrRemoveCourse(course.id))} + getShareLink={getShareLink} + colorData={colorData} + isHovered={masterSlotList[hoveredCourse] === course.id} + /> + ); + }) : null; // This detects changes to the size of masterSlotList (i.e. how many courses are on the current timetable) and updates the masterSlotList length accordingly @@ -230,7 +230,10 @@ const SideBar = () => { // @ts-ignore masterSlots = (
- No courses added. + No courses added.

Looks like you don't have any courses yet!

Your selections will appear here along with credits, professors and friends in From 6a66ef8de5bedc56d09beec2e04585828ed7866c Mon Sep 17 00:00:00 2001 From: Tiger Ding Date: Sun, 7 Apr 2024 16:37:06 -0400 Subject: [PATCH 2/7] Fix: make tslint happy --- static/js/redux/ui/SideBar.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/static/js/redux/ui/SideBar.tsx b/static/js/redux/ui/SideBar.tsx index c26b661901..cee1a43c0e 100644 --- a/static/js/redux/ui/SideBar.tsx +++ b/static/js/redux/ui/SideBar.tsx @@ -231,7 +231,7 @@ const SideBar = () => { masterSlots = (
No courses added.

Looks like you don't have any courses yet!

From 2908883bdbd2e78ca07b76322999a3b7cb26e2a2 Mon Sep 17 00:00:00 2001 From: Tiger Ding Date: Sun, 7 Apr 2024 16:47:35 -0400 Subject: [PATCH 3/7] fix: make things happy :( --- static/js/redux/ui/SideBar.tsx | 50 +++++++++++++++++----------------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/static/js/redux/ui/SideBar.tsx b/static/js/redux/ui/SideBar.tsx index b735f1d86f..e0df45db9f 100644 --- a/static/js/redux/ui/SideBar.tsx +++ b/static/js/redux/ui/SideBar.tsx @@ -169,33 +169,33 @@ const SideBar = () => { let masterSlots = mandatoryCourses ? mandatoryCourses.map((course) => { - const colourIndex = - course.id in courseToColourIndex - ? courseToColourIndex[course.id] - : getNextAvailableColour(courseToColourIndex); - const professors = course.sections.map((section) => section.instructors); - const sectionId = timetable.slots.find( - (slot) => slot.course === course.id - ).section; + const colourIndex = + course.id in courseToColourIndex + ? courseToColourIndex[course.id] + : getNextAvailableColour(courseToColourIndex); + const professors = course.sections.map((section) => section.instructors); + const sectionId = timetable.slots.find( + (slot) => slot.course === course.id + ).section; - masterSlotList.push(course.id); + masterSlotList.push(course.id); - return ( - dispatch(fetchCourseInfo(course.id))} - removeCourse={() => dispatch(addOrRemoveCourse(course.id))} - getShareLink={getShareLink} - colorData={colorData} - isHovered={masterSlotList[hoveredCourse] === course.id} - /> - ); - }) + return ( + dispatch(fetchCourseInfo(course.id))} + removeCourse={() => dispatch(addOrRemoveCourse(course.id))} + getShareLink={getShareLink} + colorData={colorData} + isHovered={masterSlotList[hoveredCourse] === course.id} + /> + ); + }) : null; // This detects changes to the size of masterSlotList (i.e. how many courses are on the current timetable) and updates the masterSlotList length accordingly From 261a4df7caf2a20ce9f63b1a8e92106546619ebe Mon Sep 17 00:00:00 2001 From: Tiger Ding Date: Sun, 7 Apr 2024 16:52:15 -0400 Subject: [PATCH 4/7] Fix: Make tslint happy --- static/js/redux/ui/SideBar.tsx | 149 ++++++++++++++++----------------- 1 file changed, 74 insertions(+), 75 deletions(-) diff --git a/static/js/redux/ui/SideBar.tsx b/static/js/redux/ui/SideBar.tsx index e0df45db9f..f15b189428 100644 --- a/static/js/redux/ui/SideBar.tsx +++ b/static/js/redux/ui/SideBar.tsx @@ -105,63 +105,63 @@ const SideBar = () => { const savedTimetables = savedTimetablesState ? savedTimetablesState.map((t: Timetable) => ( -
dispatch(loadTimetable(t))}> - {t.name} - Delete} - disableInteractive +
dispatch(loadTimetable(t))}> + {t.name} + Delete} + disableInteractive + > + - + + + + Duplicate} + disableInteractive + > + + + + {!isMobile && activeTimetable.name !== t.name && ( Duplicate} + title={Compare} disableInteractive > - - {!isMobile && activeTimetable.name !== t.name && ( - Compare} - disableInteractive - > - - - )} -
- )) + )} +
+ )) : null; // Contains all keys for masterSlots (Iterated over for hoveredCourse, i.e. state for index of up/down keyboard shortcuts) @@ -169,33 +169,33 @@ const SideBar = () => { let masterSlots = mandatoryCourses ? mandatoryCourses.map((course) => { - const colourIndex = - course.id in courseToColourIndex - ? courseToColourIndex[course.id] - : getNextAvailableColour(courseToColourIndex); - const professors = course.sections.map((section) => section.instructors); - const sectionId = timetable.slots.find( - (slot) => slot.course === course.id - ).section; + const colourIndex = + course.id in courseToColourIndex + ? courseToColourIndex[course.id] + : getNextAvailableColour(courseToColourIndex); + const professors = course.sections.map((section) => section.instructors); + const sectionId = timetable.slots.find( + (slot) => slot.course === course.id + ).section; - masterSlotList.push(course.id); + masterSlotList.push(course.id); - return ( - dispatch(fetchCourseInfo(course.id))} - removeCourse={() => dispatch(addOrRemoveCourse(course.id))} - getShareLink={getShareLink} - colorData={colorData} - isHovered={masterSlotList[hoveredCourse] === course.id} - /> - ); - }) + return ( + dispatch(fetchCourseInfo(course.id))} + removeCourse={() => dispatch(addOrRemoveCourse(course.id))} + getShareLink={getShareLink} + colorData={colorData} + isHovered={masterSlotList[hoveredCourse] === course.id} + /> + ); + }) : null; // This detects changes to the size of masterSlotList (i.e. how many courses are on the current timetable) and updates the masterSlotList length accordingly @@ -250,9 +250,8 @@ const SideBar = () => { masterSlots = (
No courses added. + src={curTheme.name === "light" ? "/static/img/emptystates/masterslots.png" : "/static/img/emptystates/masterslots-dark.png"} + alt="No courses added." />

Looks like you don't have any courses yet!

Your selections will appear here along with credits, professors and friends in From 6b248e50635ed2aa615865103c0f0eb3028edcbc Mon Sep 17 00:00:00 2001 From: Tiger Ding Date: Sun, 7 Apr 2024 16:54:44 -0400 Subject: [PATCH 5/7] Fix: Make tslint happy --- static/js/redux/ui/SideBar.tsx | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/static/js/redux/ui/SideBar.tsx b/static/js/redux/ui/SideBar.tsx index f15b189428..031f79b787 100644 --- a/static/js/redux/ui/SideBar.tsx +++ b/static/js/redux/ui/SideBar.tsx @@ -250,8 +250,11 @@ const SideBar = () => { masterSlots = (
No courses added. + src={curTheme.name === "light" ? + "/static/img/emptystates/masterslots.png" : + "/static/img/emptystates/masterslots-dark.png"} + alt="No courses added." + />

Looks like you don't have any courses yet!

Your selections will appear here along with credits, professors and friends in From 8e2e7035f32e35f6acf6543294948aeb0ed853eb Mon Sep 17 00:00:00 2001 From: Tiger Ding Date: Sun, 7 Apr 2024 17:06:21 -0400 Subject: [PATCH 6/7] Fix: Make tslint happy --- static/js/redux/ui/SideBar.tsx | 164 +++++++++++++++++---------------- 1 file changed, 83 insertions(+), 81 deletions(-) diff --git a/static/js/redux/ui/SideBar.tsx b/static/js/redux/ui/SideBar.tsx index 031f79b787..ef77703e55 100644 --- a/static/js/redux/ui/SideBar.tsx +++ b/static/js/redux/ui/SideBar.tsx @@ -55,19 +55,19 @@ const SideBar = () => { const colorData = useAppSelector(selectSlotColorData); const timetable = useAppSelector(getActiveTimetable); const mandatoryCourses = useAppSelector((state) => - getCoursesFromSlots(state, timetable.slots) + getCoursesFromSlots(state, timetable.slots), ); const semester = useAppSelector(getCurrentSemester); const savedTimetablesState = useAppSelector( - (state) => state.userInfo.data.timetables + (state) => state.userInfo.data.timetables, ); const courseToColourIndex = useAppSelector((state) => state.ui.courseToColourIndex); const courseToClassmates = useAppSelector( - (state) => state.classmates.courseToClassmates + (state) => state.classmates.courseToClassmates, ); const avgRating = useAppSelector((state) => timetable.avg_rating); const activeTimetable = useAppSelector( - (state) => state.savingTimetable.activeTimetable + (state) => state.savingTimetable.activeTimetable, ); const getShareLink = (courseCode: string) => getCourseShareLink(courseCode, semester); @@ -98,70 +98,70 @@ const SideBar = () => { }; const mobile = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test( - navigator.userAgent + navigator.userAgent, ); const isPortrait = window.matchMedia("(orientation: portrait)").matches; const isMobile = mobile && window.innerWidth < 767 && isPortrait; const savedTimetables = savedTimetablesState ? savedTimetablesState.map((t: Timetable) => ( -
dispatch(loadTimetable(t))}> - {t.name} - Delete} - disableInteractive - > - - - - Duplicate} - disableInteractive - > - - + + - {!isMobile && activeTimetable.name !== t.name && ( Compare} + title={Duplicate} disableInteractive > - )} -
- )) + + {!isMobile && activeTimetable.name !== t.name && ( + Compare} + disableInteractive + > + + + )} +

+ )) : null; // Contains all keys for masterSlots (Iterated over for hoveredCourse, i.e. state for index of up/down keyboard shortcuts) @@ -169,33 +169,33 @@ const SideBar = () => { let masterSlots = mandatoryCourses ? mandatoryCourses.map((course) => { - const colourIndex = - course.id in courseToColourIndex - ? courseToColourIndex[course.id] - : getNextAvailableColour(courseToColourIndex); - const professors = course.sections.map((section) => section.instructors); - const sectionId = timetable.slots.find( - (slot) => slot.course === course.id - ).section; + const colourIndex = + course.id in courseToColourIndex + ? courseToColourIndex[course.id] + : getNextAvailableColour(courseToColourIndex); + const professors = course.sections.map((section) => section.instructors); + const sectionId = timetable.slots.find( + (slot) => slot.course === course.id, + ).section; - masterSlotList.push(course.id); + masterSlotList.push(course.id); - return ( - dispatch(fetchCourseInfo(course.id))} - removeCourse={() => dispatch(addOrRemoveCourse(course.id))} - getShareLink={getShareLink} - colorData={colorData} - isHovered={masterSlotList[hoveredCourse] === course.id} - /> - ); - }) + return ( + dispatch(fetchCourseInfo(course.id))} + removeCourse={() => dispatch(addOrRemoveCourse(course.id))} + getShareLink={getShareLink} + colorData={colorData} + isHovered={masterSlotList[hoveredCourse] === course.id} + /> + ); + }) : null; // This detects changes to the size of masterSlotList (i.e. how many courses are on the current timetable) and updates the masterSlotList length accordingly @@ -228,7 +228,7 @@ const SideBar = () => { dispatch(addOrRemoveCourse(masterSlotList[hoveredCourse])); } }, - [hoveredCourse, masterSlotListLength] + [hoveredCourse, masterSlotListLength], ); // Attaches/unattaches event listener to document @@ -250,9 +250,11 @@ const SideBar = () => { masterSlots = (
No courses added.

Looks like you don't have any courses yet!

From 200188cc94eec1c3f742fd0b9b2c0b77454cd220 Mon Sep 17 00:00:00 2001 From: Tiger Ding Date: Sun, 7 Apr 2024 17:13:49 -0400 Subject: [PATCH 7/7] Fix: Make tslint happy --- static/js/redux/ui/SideBar.tsx | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/static/js/redux/ui/SideBar.tsx b/static/js/redux/ui/SideBar.tsx index ef77703e55..ba53ead815 100644 --- a/static/js/redux/ui/SideBar.tsx +++ b/static/js/redux/ui/SideBar.tsx @@ -55,19 +55,19 @@ const SideBar = () => { const colorData = useAppSelector(selectSlotColorData); const timetable = useAppSelector(getActiveTimetable); const mandatoryCourses = useAppSelector((state) => - getCoursesFromSlots(state, timetable.slots), + getCoursesFromSlots(state, timetable.slots) ); const semester = useAppSelector(getCurrentSemester); const savedTimetablesState = useAppSelector( - (state) => state.userInfo.data.timetables, + (state) => state.userInfo.data.timetables ); const courseToColourIndex = useAppSelector((state) => state.ui.courseToColourIndex); const courseToClassmates = useAppSelector( - (state) => state.classmates.courseToClassmates, + (state) => state.classmates.courseToClassmates ); const avgRating = useAppSelector((state) => timetable.avg_rating); const activeTimetable = useAppSelector( - (state) => state.savingTimetable.activeTimetable, + (state) => state.savingTimetable.activeTimetable ); const getShareLink = (courseCode: string) => getCourseShareLink(courseCode, semester); @@ -98,7 +98,7 @@ const SideBar = () => { }; const mobile = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test( - navigator.userAgent, + navigator.userAgent ); const isPortrait = window.matchMedia("(orientation: portrait)").matches; const isMobile = mobile && window.innerWidth < 767 && isPortrait; @@ -115,7 +115,7 @@ const SideBar = () => { onClick={(event) => stopPropagation( () => dispatch(alertsActions.alertDeleteTimetable(t)), - event, + event ) } className="row-button" @@ -150,7 +150,7 @@ const SideBar = () => { activeTimetable, comparedTimetable: t, theme: curTheme, - }), + }) ); event.stopPropagation(); }} @@ -175,7 +175,7 @@ const SideBar = () => { : getNextAvailableColour(courseToColourIndex); const professors = course.sections.map((section) => section.instructors); const sectionId = timetable.slots.find( - (slot) => slot.course === course.id, + (slot) => slot.course === course.id ).section; masterSlotList.push(course.id); @@ -228,7 +228,7 @@ const SideBar = () => { dispatch(addOrRemoveCourse(masterSlotList[hoveredCourse])); } }, - [hoveredCourse, masterSlotListLength], + [hoveredCourse, masterSlotListLength] ); // Attaches/unattaches event listener to document