From 9ec5f9f0deb64aaed7c7d862c54c77ed539a85eb Mon Sep 17 00:00:00 2001 From: Bill Date: Mon, 14 Mar 2022 06:39:09 -0400 Subject: [PATCH] Update profiles --- src/App.scss | 4 +- src/assets/images/groups/no-group-1.png | Bin 0 -> 5007 bytes src/assets/images/groups/no-group-2.png | Bin 0 -> 4401 bytes src/assets/images/groups/no-group-3.png | Bin 0 -> 4566 bytes .../images/groups/no-group-spritesheet.png | Bin 0 -> 29386 bytes src/common/index.scss | 2 +- .../user-profile/UserProfileVew.scss | 129 ++++++------------ .../user-profile/UserProfileView.tsx | 56 ++++---- .../views/BadgesContainerView.tsx | 30 ++-- .../views/FriendsContainerView.tsx | 15 +- .../views/GroupsContainerView.tsx | 75 ++++++---- .../views/RelationshipsContainerView.tsx | 97 ++++++------- .../user-profile/views/UserContainerView.tsx | 83 ++++++----- 13 files changed, 232 insertions(+), 259 deletions(-) create mode 100644 src/assets/images/groups/no-group-1.png create mode 100644 src/assets/images/groups/no-group-2.png create mode 100644 src/assets/images/groups/no-group-3.png create mode 100644 src/assets/images/groups/no-group-spritesheet.png diff --git a/src/App.scss b/src/App.scss index 8a14b0eb..e888fa9e 100644 --- a/src/App.scss +++ b/src/App.scss @@ -35,8 +35,8 @@ $navigator-height: 420px; $chat-input-style-selector-widget-width: 210px; $chat-input-style-selector-widget-height: 200px; -$user-profile-width: 560px; -$user-profile-height: 500px; +$user-profile-width: 470px; +$user-profile-height: 460px; $nitro-widget-custom-stack-height-width: 275px; $nitro-widget-custom-stack-height-height: 220px; diff --git a/src/assets/images/groups/no-group-1.png b/src/assets/images/groups/no-group-1.png new file mode 100644 index 0000000000000000000000000000000000000000..caf0182de3d431cbed221d3ed663a458ca9f4d33 GIT binary patch literal 5007 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 literal 0 HcmV?d00001 diff --git a/src/assets/images/groups/no-group-2.png b/src/assets/images/groups/no-group-2.png new file mode 100644 index 0000000000000000000000000000000000000000..797c946800de6e8f40e72da9a1beac732e6e0445 GIT binary patch literal 4401 zcmcgv`9Bl>A0LY$CM7wW4p%8fuF+<>OURicl;p}i46|XbTyqw3e)>3ajfA8yi$t z1w6hR-}aau16zQZ{vANgkoem1M}Z{C8+UXZVs9 zY8d{|)jKywYHDuQ(bnl48ZtIE_P);kK#9-J@`0zbnd({2#ijZ4d;noh^OHA~H1yr8 z%5tD));(Vv`dbQ@2%-NLR-n=7jyhCyc9D<0_s2v;Vq#)NhTB1(>(}g1ulS^-m-q>t zJDyw|I#wY`g&pppxp_6;>HM$Rq92c|1kt0&5X@i|MvsfP9$KC+jILG*aQFo;LiVo zt;eVQ=`mR_)InIdX*axP*`2W#>c(5@@YbREPXL9_MoW?szMG8<3jGWM*|K|9>$*Q0 zsPLMYV6o!DNdZIo%^AF1u;GJrLq!s7o8iAQ)V1;eW=fNL`n04_Dg0%>Dl!A|NItOr z^eW3$Q-?0oH72?ESGxDVbofgxRwin%ozV)O4z*^CJ`$w2@~n9TA2Z|-HP$9GS!DCEKMB_mNtTKHMoSW6$6^XJ+}q;UN1Zt8YrYT?}dAm4%% zDIfB#ngaau>kYDL&huvB;-tASxnF~LXxE$eW|_7;pmk;9(y$ z5A#X=KZT2V2<8{SzG&wf<=910C1xz|xgwMv9`5o)Ip{6}6RN5%mVVV5%9qJvtXu{` z%nRoj87AKvAT69x>P|QcV>oy_g9$uW=9&{=g0lGzCKQ zhJvlqG#{QZZx?ME0XWBkpPAmy-!8ux8EyDjtH$BaJ^3#gghiOLTJm=Joix1e0f9$c za!{A?Y(yKlNpnZboIP25weaH%UjF@_^x|ta@rQ-%Kv4e0pmW%xY+t8u!@ai;GPgN1 zmL^MQB=Q1s&6ohbQy4Z!<)Xti+t)Z}V@vW_dnf+4^G=i@<6P+u*jW9M2-fWWEp(G4 zT#cM@m~&Dc6!)Q)R2ZR@mU5DwTLkU5Zp>OuAUzd?e^YX&>Vt=Fa2Gfgseo4OuvsSW zqyQM`zMA72ktiTNqA#aL7qaZv$1=Q^;tQeC^z|>`e^A*=e2TDxfl(9RepMjBOdLA{ z>JfH0Y0>K%GX90g^qZAfpwAXx1JNWPVtMuPH!q=%b`I0lw@%Sd_ikDy(BC-AvFy9| z4^|lIP&F3kz07WiB{$jy&yH21-0Wh9EX$Ei_WlK5x~+EC`)34hY%B&W46E1Hc2@NP zClAFQPL!KZAZUcP!6^2Hsj!j?>AH>AKeQ3j>n+P{lXi#z8$hJR|BJ?x`5SO(cV z^%B8)-lN-%1@csX@qEtf^U0))K75Mh_0UMURH^lLUpV#4VRduCd9OO^y0VQ_!KebE znn3t#T^c2z0|k{2ipE;E$}Rt`|E@{B8sINOxu?v9&XPs*UH7aKlF%yrq9ZU{mKL)^ zErwGmn!y5aH@a9lJJVY^xy{O%p7dy~T!83F2Ujk;1FH*QxJ?7+| zujiR3-A&tHOQBbaYW8FHx7ufa=WE>XXWo8n`TZ3_=acO10d@^~?KvaPS9QW7iB@to z@M!v|3FG%wdvEe0$GaU>wV+dQ(qrJc6p7qXt1}Nf9vknMC}FtJ&}_;zO53w=wT%Z} zUhF5|H-0J*;yQG5Sa?GIz>I`&_l>Nr6CN=B1ad1sjqEG;9 z+=as$-mp4hA*LAb(Aft6&=d6{|1UlP~z=~SJL`^8>u9YJ$|MqO?Atdfb5j-{E+YM;bm*Q z@j{u`Jmp(MCV!~2pC3kgc`Q<_Y!%QdbY;9}*_SJB{AsQ9y^ZUgJyYZFd{WjS*V`Bj z?&*((G{R!D_F8hRh})q$Oj@faqb+KU@70K+j4Cn*r>8P)neAlrsZN;zKFrHFOuHfCT`k51PzN<}?(SiD&5_qTn+kPS2l3QGrV@)+G?CgF(o@= z7Oz!FueYm;oQ`tL$t!fUC%RZ}x<{cbW5=~BNI!enkRvUGeYPDLjN71ngmyw)2F)6@ zZnoeB;C7l2k09kvc^H^i3_knAhS784{CvTj^s~)j4BKF-8=jp_&UG9bjYc~d; zI4?VTH^bJcOx86M5wD=vYW=#)+f6yi>}!gcu}an$~@?j zOKh9KReJx7bKgS8m+k9)M6~azOBvqy7 zC(80OKDEckHoEWzJF;OqQY`a$z-cqven_`PN5STJA*Y36O7rLHNkzR;c2@NaKEUa< zFJ{AOe@z^6jrsDt=)s5N{LMHsn{s)1BR4CIeOZjp(3W50d#YTD-Y|f(-K2b68Isg* zZRVn0JC+YhjhfURbP6~#iF>OU!8b}2o(nJ|JoyjxgQDqM z3(f_)VGmB#p)v-10mS)B?0%3lae#fY@Z(TfB_vwp9<{Q;Ru>DO+A|`~kJD9qt{ud~ zDZY06-I-u{rVf(fB$9gs5FSoR`^v&&)7IAk&!@`>$$RPsP8E5fuBzhhs73a79%R9p2YDsxwRjxtm7(JfL0a2#58M~KIQ#13p;iI zNV>e#mmza`j5Cbtg~F>zz)7w`McbHNatRqWC(VX|HuAfX$lcwy>U0;xZ5**qGmOT&Z4y+#u)4C)g7~(S z`k+-_2~#{yXR@%r)L9%k^eh6c@^G0d1~GCNJRks2?qx;;B7(8Y@`T=CTb zp~NNTUm*8LS18M063@wMl88-%hrt9j4B77r}BHG+eWeM}^ZZW(1FJUi$% zS3fZd9G5RIWPmX?>u0V+-^^urf{F8RvLrCgxhrXID}qo+TX?AR=2b?<=XTYPv<8?B zyIl?m9NNd7j-@|2OE?~-D4HUyRwA}ojr!Lo8-$q0iWk61% z)!cT6OxFG?42ZTFDmf)OV{)}Uh2i*keUqI~>K#5o6O4{R+xx`6Wf2s6-h#zfHk|tu zr60}lnR&EtO+a1~CO@Pog)$H#8IhfGpZiCg7oU9-H@L`DuI=785%rb9TVRSODVv;N+ogxYv{gVfn<5n?WdX`m%rD8dkG+v2UePm2u7A&89dN2u1sw zbxlgh^D`n-_Wc*gl5ae@Px_PLeixaah@Lc)i{T>z3nb-3f2ZX7%6-?^$fic7wkYWKafKUZ6QHL*;=VF!-GMNlLxCg78gjiJG9*^ zx}05YA-GE&=0JMrOF4!T9K-B_t_L&%?M}`6kmh;|3}@&*r1Jm~mLDa0-qOCr>IUjh z%YvAg*!H)h5STIgFUi1%)Y>rnR@)B@jTgkyO6$^|KhNu4c@e_+bsem7_XT!mOTuJl zGasF|Iwtz7p}N{_I|qDA%dg@RH(ktz{RP@h)u0jOOnjH6nZR(}XX7lwZ%A*Gq_)j) zOWFdCYo8-l7RrWtBasdkOOUR^Jhq|a^$cODvX0RN0rh_-pVOG(=|Zw~ERw*-__2tl z16ihkOj%H3l=$;c&UcLGl$d;b*$zyW{wjt0#8w^BxyYZ5>`|q6Kp>FdsDrIV(m+83% zOB>l+m|NV)7_zms&2*6sK73Y2P+F7rx@(j=R#?+t>zoK3)<&5u?HgkH1>N-|_ zXO(2NuLBnYFgJ;$Yw2$@n=9`Z)x15(I<)QAOny)^N+7KiP5!K1T)AI1fGPfu)RXt3 z=WA)h>$GWRbo-p+OOU1`=z3z>l^Bp~O&|7ET1-xUM)}9$&tKx3x*x?S`4`vR&Hrc- z0`ktulTrh5mcQW3tIGXByQN(J`q9to8u>NP8(eoZy>bod;`R3Xd}K}ILAOl+WXl1C z2VS?e=ls73D5LY;pMx@v_+7dk00Ieh{vW`-zVF;YAYt@n3sVPA^SYOb;o=u1yS*K6 zNm1$&z8IUdojD{}ps3QNdFj%Lxv@~22hWoPF1f&Jsx-moBDIl{lTILk<@(I8EOKFi1mn529fEm_VcTEb}EGSwm%+`Gf|zMgT29)?8~Xd z)!^0^xe&7a4hHd68gr4Yu$BRMaTg^}b3bW(XK6N&Pj#;iqn$}hPaR?|{+GFwT6DKJ z#Us#JUjI2`XZ<%3F!e%Dcf)xXrwmZvWb%kG6f>S9yJ7E{{DAvhOIE7Sg1M(!79+>b(Ypoqaou^T<0)*W4fu>l49`Ea!vCp?7^ zg%VVStjg%bZ)i@Y)6s#Qj?lO@K5mYS)Q|AZx#;ksNS%{};3RAz35m5O*gYg4Aqcw- zYPMKK0{5)y zzdc>L1YWD{28dH6x*DQw7Yo!TIQ9z7nXvdn=mac9VBoe8;wug#K zq0u&dgec@#g!6Yb@|svhg&0jt&atn~T2Wgxx{x+oSX_NV)!voaehS>6U83cK0qpKW@D1#7=iPVea*QAOT!NK{D0zCd{Phd9I8-vm?2BV^LggQ18+J;4nVoZH>!afpn8@|x`W zIzYl;7Hlt?d2zs8Itro=f`_U9lOYu;@S)#PLFIE7fVWCn;utH%56HaWu(h-o^yHKi z-+tC=>A9`@cdmGzv+%e6#cOG4OJqwUiWCsWGUXK~=@(Te8_?^NGfS{m?N*Y@_#6B4 zNl&Z|h|Fu1T%XPrP_U&Lq1!`0ZI<;w$Cb%37j-R+p=aI0k%~ z1w}oBpJGv5_6#3C&6NNHV>GF{{upw-WXr51=l0+g%3wQD{{C8X=8cdEYTI84lX=n^ zc03R2eGLk$8~gQa%-3PX?=IR-4R+^2#5scBk`wGgiWF+~O7B*`RL|KL-1i;$+E75j zLq+yaKY9Uoe#3cI<0%q$3ygoO?XsmbCDW%Wj}>SWV7dXXiPSXUfry+j2B%|A5ko@s z9cb~WR4^@|X<-;7Bq9{d&uT9I<1O?qO1~kJM`7aHCUJV&VM{|q@OH4@D|&XQLs?FQ ztl3K2qy*_sOB9kPUe(R$7H-_gWF}y495$zf8O2MI=+j+DKGahMBhEHAVaJ@-!j&Du z#S`cI#Avs5`l|0z?cqr_j^Efh*Ztstpg*hm$`o#x1LD$CAGP+V9FJ z490gpGx%KmZ(+tJ`o!{0dP$cf?TH;t0NUg}w@{PnTlQQaiMA(bw{YurfL_?8G3VBh zmBL8QS?>96tL?gQQdO(loHYq7|Ig>B91Z-b1GBHeGNsER3{2#4FX$Tl98UMWm`d#qJc;=4aOmZ2$#dO#HVXK#T;67igd%uQ9V1*PZC#GP~H8VJ3V$V=>YTKL6I4iHWkG(qT z-hO>{AXM~hW%O9@Nz2?`4Fe*2pJg5AkmAQ?OttN%8=H>3?J~T8)l%f#f3Mx(6JnHX zJScE5wvMVwn0KSXTXIc3j6`&pJl z{i{Dj5eDwqQdRck;UV`5v6W*)U#=dsbyra*lS29H>ssTI4ei6|dSDB7J(vuvJA_YB7u(u7V4Swi$7*K z5+qS$Fu^Nq4$8E2bNwZ-HUS;@+bwb0r|gu18;Bzle%jqLtf~Fu&=Ael)m1Xs_0@o; z#lcRwIdan)i?ocPB40A4>5hV~#V6_2RMT{)huHnNd|Zc;%k1MJ?et>-A|zKk1L>L3 z$7%CY(;VE$Nr-XiLh_0%Tqa;)_(82^_hQn(7gMkKFL8|SAjoVtk3+@j1?0J<2X0H; zp2_|OE*-e&zd9E#+)XB$>+o#ZM@41%C89o9!W3*&VnT_=sf-iy9nxIaV_r(|q{X#0 zH%3#qMS*R#5A{b|Hl|#L7G9@Y_w6#0Ed%70b2@NWb)o8}KdJ^zS=9W>nK_vl#!Eck zjIA>vnko(PTYfbh>iJM!|2p6#b{vW7v{T0Cce=1umINODZhK}RY&07HFI`&heI>Y9 z8cHtKe8Fl6&lYkb^*FMXwlvYw2q6?`8!#wi`OiA|NNhGah22>lWGxawkb^BXx=M+vG1h8?NCBm{?kc0M=HLTYIzXA0lt+B+_Cx7Us!J~8 z+|on3g(0)x6A=-4mtAqAVwHwAqg(|()gAYPiX%u9N2P*1{>gogr+U-HIPuR-E53JZ zb%~SiiF0ZIowD1r9-~qQ73+JsmFq(9UhD8h4Xe4?H#s>S5tcui3ixA1+I+$IyzbGo~GRbBE+L|0})nLSA5hFb2hJQAz(#8*RFJ9hp3NL_Z;i?G|C;(i}Wpogij zX<$roq54B@(4CFfAxVoPT*oi3Z!dBE7Y%K?C$L6ecwa_ES~oMuvm>PRH=BtbG_>Pv zB$vE_J*~T5R431Vz7A{ z(R*5e@Gjzk&{3CP79%es^mx@_VO@#U`@O)wBl@Jkb0*&&=xbgfTtbG>%qM{(&mlZ2 zkY(TgHaT8Dz1Rxv-C?D%E39a%{M8sC<_B?o&RpkE6fattr4Vxap;uWEN3EHz{DvFh z>q}^R*cZvl%gcrI`6s(Jp$Dk37m+w#gq6`QlGv^!BaKH_%+LA^v|qQxdxmIsY=1>~ zVBM)dHTol2WOAOmv_Rm8{Zd=}t@lSwEGF59=dxG8oNFN`j47;pH1FHiSo_%4+Pln- zLcy)h?OK{*WG+n>hF`dLYY2#ja*ttx!*p7gNjQvAMRS3Q{tW{~#Rjx~x;{zg7x%d#7Rme(kMAmvYC z25I{#w=VuUwLRftYXKYw!=2JMN&xue{z!y}>vD~7M8w(lMe*$!8qJKTnXraB*r!ht za<5UP-k=Bhp@sVd>%G*uoj3KjP@_LdfwKwFE}jS}`0KR}@l%31k5iro(i1om*k<1Q z`%kM>R0!%@4HTQ4G#vxrZft4aZjQ}aqlE;{-ybbmK+7BIbA2Cho6c}R8G7`3NbOYE zbt6o)3}OzGcyEcPQck!%3h=pVqGOD5YR7L;b_0$%>~?J?udT0(YT(GGX|Fjda1ptJ zcK%}yKpdXVrJl$o`xcNOsE<9t>4FG5&aEn(e*VhnBn>0L^O@?Eehs#gk5)QzpIBk4N2|&;><+6V9>+vs+qn3Pefpj{mwcQnQ&;?X)^TA4Dd+P7wjd zR)3xmMf9Svt!1l{Dlr|^RbC|2c*e73W$kf?*@t7dqNh+oR6+ zxkC5ghRg|xFA45ti*t#s_RUHgl&F)$< literal 0 HcmV?d00001 diff --git a/src/assets/images/groups/no-group-spritesheet.png b/src/assets/images/groups/no-group-spritesheet.png new file mode 100644 index 0000000000000000000000000000000000000000..3eed4b97d09288588d38528eec838cd259d5d529 GIT binary patch literal 29386 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 Z;?L|^6!j} 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 = props => const onLeaveGroup = useCallback(() => { - if(userProfile && userProfile.id === GetSessionDataManager().userId) - { - GetUserProfile(userProfile.id); - } + if(!userProfile || (userProfile.id !== GetSessionDataManager().userId)) return; + + GetUserProfile(userProfile.id); }, [ userProfile ]); const onUserCurrentBadgesEvent = useCallback((event: UserCurrentBadgesEvent) => @@ -43,7 +42,7 @@ export const UserProfileView: FC<{}> = props => UseMessageEventHook(UserCurrentBadgesEvent, onUserCurrentBadgesEvent); - const OnUserRelationshipsEvent = useCallback((event: RelationshipStatusInfoEvent) => + const onUserRelationshipsEvent = useCallback((event: RelationshipStatusInfoEvent) => { const parser = event.getParser(); @@ -52,27 +51,22 @@ export const UserProfileView: FC<{}> = props => setUserRelationships(parser); }, [ userProfile ]); - UseMessageEventHook(RelationshipStatusInfoEvent, OnUserRelationshipsEvent); + UseMessageEventHook(RelationshipStatusInfoEvent, onUserRelationshipsEvent); const onUserProfileEvent = useCallback((event: UserProfileEvent) => { const parser = event.getParser(); - - if(userProfile) - { - BatchUpdates(() => - { - setUserProfile(null); - setUserBadges([]); - setUserRelationships(null); - }); - } - setUserProfile(parser); + BatchUpdates(() => + { + setUserProfile(parser); + setUserBadges([]); + setUserRelationships(null); + }); SendMessageComposer(new UserCurrentBadgesComposer(parser.id)); SendMessageComposer(new UserRelationshipsComposer(parser.id)); - }, [ userProfile ]); + }, []); UseMessageEventHook(UserProfileEvent, onUserProfileEvent); @@ -81,22 +75,26 @@ export const UserProfileView: FC<{}> = props => return ( - - - + + + - + + + - { - userRelationships && - } + { userRelationships && + } - - {LocalizeText('extendedprofile.rooms')} + + + + { LocalizeText('extendedprofile.rooms') } + - + ) diff --git a/src/components/user-profile/views/BadgesContainerView.tsx b/src/components/user-profile/views/BadgesContainerView.tsx index 365dcada..06180be6 100644 --- a/src/components/user-profile/views/BadgesContainerView.tsx +++ b/src/components/user-profile/views/BadgesContainerView.tsx @@ -1,27 +1,25 @@ import { FC } from 'react'; -import { Grid, LayoutBadgeImageView, LayoutGridItem } from '../../../common'; +import { Column, FlexProps, LayoutBadgeImageView } from '../../../common'; -interface BadgesContainerViewProps +interface BadgesContainerViewProps extends FlexProps { badges: string[]; } export const BadgesContainerView: FC = props => { - const { badges = null } = props; + const { badges = null, gap = 1, justifyContent = 'between', ...rest } = props; return ( -
- - { badges && (badges.length > 0) && badges.map((badge, index) => - { - return ( - - - - ) - }) } - -
- ) + <> + { badges && (badges.length > 0) && badges.map((badge, index) => + { + return ( + + + + ); + }) } + + ); } diff --git a/src/components/user-profile/views/FriendsContainerView.tsx b/src/components/user-profile/views/FriendsContainerView.tsx index b206fc80..756616e6 100644 --- a/src/components/user-profile/views/FriendsContainerView.tsx +++ b/src/components/user-profile/views/FriendsContainerView.tsx @@ -1,6 +1,7 @@ import { RelationshipStatusInfoMessageParser } from '@nitrots/nitro-renderer'; import { FC } from 'react'; import { LocalizeText } from '../../../api'; +import { Column, Text } from '../../../common'; import { RelationshipsContainerView } from './RelationshipsContainerView'; interface FriendsContainerViewProps @@ -14,12 +15,14 @@ export const FriendsContainerView: FC = props => const { relationships = null, friendsCount = null } = props; return ( -
-
-
{LocalizeText('extendedprofile.relstatus')}
-
+ + + { LocalizeText('extendedprofile.friends.count') } { friendsCount } + + { LocalizeText('extendedprofile.relstatus') } + -
-
+ + ) } diff --git a/src/components/user-profile/views/GroupsContainerView.tsx b/src/components/user-profile/views/GroupsContainerView.tsx index a971afc3..843842ea 100644 --- a/src/components/user-profile/views/GroupsContainerView.tsx +++ b/src/components/user-profile/views/GroupsContainerView.tsx @@ -1,12 +1,11 @@ import { GroupFavoriteComposer, GroupInformationComposer, GroupInformationEvent, GroupInformationParser, HabboGroupEntryData } from '@nitrots/nitro-renderer'; -import classNames from 'classnames'; import { FC, useCallback, useEffect, useState } from 'react'; import { SendMessageComposer } from '../../../api'; -import { LayoutBadgeImageView } from '../../../common'; -import { UseMessageEventHook } from '../../../hooks'; +import { AutoGrid, Base, Column, Flex, Grid, GridProps, LayoutBadgeImageView, LayoutGridItem } from '../../../common'; +import { BatchUpdates, UseMessageEventHook } from '../../../hooks'; import { GroupInformationView } from '../../groups/views/GroupInformationView'; -interface GroupsContainerViewProps +interface GroupsContainerViewProps extends GridProps { itsMe: boolean; groups: HabboGroupEntryData[]; @@ -15,16 +14,17 @@ interface GroupsContainerViewProps export const GroupsContainerView: FC = props => { - const { itsMe = null, groups = null, onLeaveGroup = null } = props; - + const { itsMe = null, groups = null, onLeaveGroup = null, overflow = 'hidden', gap = 2, ...rest } = props; const [ selectedGroupId, setSelectedGroupId ] = useState(null); const [ groupInformation, setGroupInformation ] = useState(null); + const favoriteGroup = (groupId: number) => SendMessageComposer(new GroupFavoriteComposer(groupId)); + const onGroupInformationEvent = useCallback((event: GroupInformationEvent) => { const parser = event.getParser(); - if(!selectedGroupId || selectedGroupId !== parser.id || parser.flag) return; + if(!selectedGroupId || (selectedGroupId !== parser.id) || parser.flag) return; if(groupInformation) setGroupInformation(null); @@ -35,37 +35,54 @@ export const GroupsContainerView: FC = props => useEffect(() => { - if(groups.length > 0 && !selectedGroupId) setSelectedGroupId(groups[0].groupId); - }, [ groups, selectedGroupId ]); + if(!selectedGroupId) return; + + SendMessageComposer(new GroupInformationComposer(selectedGroupId, false)); + }, [ selectedGroupId ]); useEffect(() => { - if(selectedGroupId) SendMessageComposer(new GroupInformationComposer(selectedGroupId, false)); - }, [ selectedGroupId ]); + BatchUpdates(() => + { + setGroupInformation(null); - const favoriteGroup = useCallback((groupId: number) => + if(groups.length > 0) setSelectedGroupId(groups[0].groupId); + }); + }, [ groups ]); + + if(!groups || !groups.length) { - SendMessageComposer(new GroupFavoriteComposer(groupId)); - }, []); - - if(!groups) return null; + return ( + + + + + + + + ); + } return ( -
-
-
+ + + { groups.map((group, index) => { - return
setSelectedGroupId(group.groupId) } className={ 'profile-groups-item position-relative flex-shrink-0 d-flex align-items-center justify-content-center cursor-pointer' + classNames({ ' active': selectedGroupId === group.groupId }) }> - { itsMe && favoriteGroup(group.groupId) } /> } - -
+ return ( + setSelectedGroupId(group.groupId) } className="p-1"> + { itsMe && + favoriteGroup(group.groupId) } /> } + + + ) }) } -
-
-
- { groupInformation && } -
-
+ + + + { groupInformation && + } + + ); } diff --git a/src/components/user-profile/views/RelationshipsContainerView.tsx b/src/components/user-profile/views/RelationshipsContainerView.tsx index 3ed16601..9b698ecd 100644 --- a/src/components/user-profile/views/RelationshipsContainerView.tsx +++ b/src/components/user-profile/views/RelationshipsContainerView.tsx @@ -1,75 +1,62 @@ -import { RelationshipStatusEnum, RelationshipStatusInfo, RelationshipStatusInfoMessageParser } from '@nitrots/nitro-renderer'; -import { FC, useCallback } from 'react'; +import { RelationshipStatusEnum, RelationshipStatusInfoMessageParser } from '@nitrots/nitro-renderer'; +import { FC } from 'react'; import { GetUserProfile, LocalizeText } from '../../../api'; -import { LayoutAvatarImageView } from '../../../common'; +import { Column, Flex, LayoutAvatarImageView, Text } from '../../../common'; interface RelationshipsContainerViewProps { relationships: RelationshipStatusInfoMessageParser; - simple?: boolean; +} + +interface RelationshipsContainerRelationshipViewProps +{ + type: number; } export const RelationshipsContainerView: FC = props => { - const { relationships = null, simple = false } = props; + const { relationships = null } = props; - const OnUserClick = useCallback((user: RelationshipStatusInfo) => - { - if(!user) return; - - GetUserProfile(user.randomFriendId); - }, []); - - const RelationshipComponent = useCallback(({ type }) => + const RelationshipComponent = ({ type }: RelationshipsContainerRelationshipViewProps) => { const relationshipInfo = (relationships && relationships.relationshipStatusMap.hasKey(type)) ? relationships.relationshipStatusMap.getValue(type) : null; - - if(simple && !relationshipInfo) return null; - const relationshipName = RelationshipStatusEnum.RELATIONSHIP_NAMES[type].toLocaleLowerCase(); return ( -
- -
- - OnUserClick(relationshipInfo)}> - { - (relationshipInfo && relationshipInfo.friendCount > 0) ? relationshipInfo.randomFriendName : LocalizeText('extendedprofile.add.friends') - } - - { - (simple && relationshipInfo && relationshipInfo.friendCount > 1) && - - {' ' + LocalizeText(`extendedprofile.relstatus.others.${relationshipName}`, ['count'], [(relationshipInfo.friendCount - 1).toString()])} - - } - { - (!simple && relationshipInfo && relationshipInfo.friendCount > 0) && - - } - - - { - !simple &&
- { - (relationshipInfo && relationshipInfo.friendCount > 1) ? LocalizeText(`extendedprofile.relstatus.others.${relationshipName}`, ['count'], [(relationshipInfo.friendCount - 1).toString()]) : '' - } - { - (relationshipInfo && relationshipInfo.friendCount < 1) ? LocalizeText('extendedprofile.no.friends.in.this.category') : '' - } -
- } -
-
+ + + + + + + (relationshipInfo && (relationshipInfo.randomFriendId >= 1) && GetUserProfile(relationshipInfo.randomFriendId)) }> + { (!relationshipInfo || (relationshipInfo.friendCount === 0)) && + LocalizeText('extendedprofile.add.friends') } + { (relationshipInfo && (relationshipInfo.friendCount >= 1)) && + relationshipInfo.randomFriendName } + + { (relationshipInfo && (relationshipInfo.friendCount >= 1)) && + + + } + + + { (!relationshipInfo || (relationshipInfo.friendCount === 0)) && + LocalizeText('extendedprofile.no.friends.in.this.category') } + { (relationshipInfo && (relationshipInfo.friendCount > 1)) && + LocalizeText(`extendedprofile.relstatus.others.${ relationshipName }`, [ 'count' ], [ (relationshipInfo.friendCount - 1).toString() ]) } +   + + + ); - }, [OnUserClick, relationships, simple]); + } return ( -
- - - -
+ <> + + + + ); } diff --git a/src/components/user-profile/views/UserContainerView.tsx b/src/components/user-profile/views/UserContainerView.tsx index 99847ef8..0dd17d33 100644 --- a/src/components/user-profile/views/UserContainerView.tsx +++ b/src/components/user-profile/views/UserContainerView.tsx @@ -1,7 +1,7 @@ import { FriendlyTime, UserProfileParser } from '@nitrots/nitro-renderer'; -import { FC, useCallback } from 'react'; +import { FC } from 'react'; import { GetSessionDataManager, LocalizeText } from '../../../api'; -import { LayoutAvatarImageView } from '../../../common'; +import { Button, Column, Flex, LayoutAvatarImageView, Text } from '../../../common'; interface UserContainerViewProps { @@ -11,42 +11,51 @@ interface UserContainerViewProps export const UserContainerView: FC = props => { const { userProfile = null } = props; - - const OnlineIcon = useCallback(() => -{ - if(userProfile.isOnline) return (); - else return (); - }, [ userProfile ]); - - const FriendRequestComponent = useCallback(() => -{ - if(userProfile.id === GetSessionDataManager().userId) return ({LocalizeText('extendedprofile.me')} ); - - if(userProfile.isMyFriend) return ({LocalizeText('extendedprofile.friend')}); - - if(userProfile.requestSent) return ({LocalizeText('extendedprofile.friendrequestsent')}); - - return () - }, [ userProfile ]); + const isOwnProfile = (userProfile.id === GetSessionDataManager().userId); + const canSendFriendRequest = (!isOwnProfile && !userProfile.isMyFriend && !userProfile.requestSent); return ( -
-
- -
-
-
-
{userProfile.username}
-
{userProfile.motto}
-
-
-
{LocalizeText('extendedprofile.achievementscore')} {userProfile.achievementPoints}
-
- - -
-
-
-
+ + + + + + + { userProfile.username } + { userProfile.motto }  + + + + { LocalizeText('extendedprofile.created') } { userProfile.registration } + + + { LocalizeText('extendedprofile.last.login') } { FriendlyTime.format(userProfile.secondsSinceLastVisit, '.ago', 2) } + + + { LocalizeText('extendedprofile.achievementscore') } { userProfile.achievementPoints } + + + + { userProfile.isOnline && + } + { !userProfile.isOnline && + } + + { canSendFriendRequest && + } + { !canSendFriendRequest && + <> + + { isOwnProfile && + { LocalizeText('extendedprofile.me') } } + { userProfile.isMyFriend && + { LocalizeText('extendedprofile.friend') } } + { userProfile.requestSent && + { LocalizeText('extendedprofile.friendrequestsent') } } + } + + + + ) }