From 52290e162e063e5bb4f57c7b919515c851a852a6 Mon Sep 17 00:00:00 2001 From: Kirill Date: Thu, 21 May 2026 20:42:59 +0500 Subject: [PATCH] fix: use mutation variables in onSuccess, fix null displayName handling --- .../admin-settings/ui/AdminSettingsPage.tsx | 13 ++++++------- server/prisma/prisma/dev.db | Bin 364544 -> 364544 bytes server/src/routes/api/admin-profile.js | 3 ++- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/client/src/pages/admin-settings/ui/AdminSettingsPage.tsx b/client/src/pages/admin-settings/ui/AdminSettingsPage.tsx index fff9454..40908a8 100644 --- a/client/src/pages/admin-settings/ui/AdminSettingsPage.tsx +++ b/client/src/pages/admin-settings/ui/AdminSettingsPage.tsx @@ -72,13 +72,12 @@ export function AdminSettingsPage() { avatarType?: string | null avatarStyle?: string | null }) => apiClient.patch('admin/profile', params), - onSuccess: () => { - const name = profileForm.getValues('displayName').trim() - const p: UpdateProfileParams = { displayName: name.length ? name : null } - if (hasUnsavedPreview) { - p.avatar = previewSrc - p.avatarType = 'generated' - p.avatarStyle = previewStyle + onSuccess: (_data, variables) => { + const p: UpdateProfileParams = { displayName: variables.displayName ?? null } + if (variables.avatar !== undefined) { + p.avatar = variables.avatar + p.avatarType = variables.avatarType ?? null + p.avatarStyle = variables.avatarStyle ?? null } updateProfileFx(p) void qc.invalidateQueries({ queryKey: ['admin', 'profile'] }) diff --git a/server/prisma/prisma/dev.db b/server/prisma/prisma/dev.db index 10de6af9e72246757d55f061e46b93998eae7136..1802321d0f448b0133ea0c2bc2151f83944c02ae 100644 GIT binary patch delta 12225 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 N(abNX=MU){{~JJw&ZhtX delta 7505 zcmds5Yit}>72esMaqPUthB(B~ByK8~Mq!4z^BxIUr%g*Dnnwj~+S1T$*1NG2$95id zlOVAz@C$x4$bu0_v?xc}W_k@$iAh(uy+nOx1R$k*9_a)h0$72i<-5l=~~H zXZH2ZJ+-lMw?4UN5oDKoOC@{Nu|98^-MIgQ#=>g#)|Hhv-@l<`S@k_r&8T@u-Q#&G z+A%V5czW;j=(IQ1)E)cpo%B5KAUo>Ko&LSM#==0=yn5ir4mz4ngsYSCqIReqwWJm| zA!+6--?%w@-BHGa8@8=k#p~^lP|fn<(=)oH>7WciBE$vj1+MeWK6! zjXm??#jax)E}p6m*ZlF(!_Ym*4(^%AYKQmUJ35&_pXX2ARldfoT0H~-gU0q_P|QJ- zhmv6bzR^(`bm;i7@shn#h7Xu)te!15Zd$it(|hmUvi6RRH*WesF=&g?Gu-ZZ+4#JD z-R)bAu4<1}t%~50{fevC>fzYFaM$#x8f~PQ^Q))U=MS$n2im`T$S`}C)aDr0zW7bU z>czI6D%nrjXO8u4`L3PceV5stKXb}hkw3E5?4Lht_|JhvN9>Iw#=NSrx}w*Pn%c65 zY1wSYjsv?V?-?&Y`}lJof9{i=Yw4Fiy&?%_j!X<3KWdz{m(D3^QQMd@<_)&Hr;LBB z{7kRW-R}0v#-Q;qRLN~;8&I$c6r$#VY!s9Us7Yh59|p~&0Ti~~eqOE@@&`AY14CET zgq9b6pDA72UbwydU3+Hx;ELr}RjOjWImL_S{TZoM&RZ2bB5JAZwJzw^WO8$%U=SucD@cXpgKDW8DtapCdG)wmPOw<17%q@f0wd3uT zTPjAB?^4#*q4t*Y;;On~Xm$Ue`Vj^{*dp5 z_$mBi{P?Wo!iUh|`yh6FC&EqYr0hEs#-ggi4gM^v zRH81maAZGq@ebz?w#)_ZxIC_b96w+3BYoB04_`O~Z}>7e_F3%>12wqRE{d6+u4kD) z9;oJcR9RlB<}W>H_UBvHnU+;1Rq`V(b71}~mwpM4I%!|`_R6h2|4q0%ex!1K0<>GR zW^cK-x~6A&X`s8i@@8&Fdpbf$04*Yhka*gwNBbwz{5uybLz@^punAmc+j9k^y~dSf z9)!%4G7s(^4fjn(p2)lg(hiBtLxs%CFMd#DTVeMfp+R}672G(o5|#%>6#ep8GRM%UNh$~dQ4?et75-n zak!`jubEg>xj(A3Kl+0Ck#c2Q-^#~NeACW9y%7fd;oatql{2Lbj&EwmU;T>X&yl+% z%hy_r?`oNM_1B`tPAKcejKpzsEIxD~*(v_{R%&~4yS|bh75ikx{Aul?JH%)wsCWBD^bFjvgI*6|bO zIeXcL7w?$b*_deTs~u>Jj8E=sj5o&U6#3DHwZcg9t5;cXdrv}dQo;HltI^^3{gEbqklvGrXo5DzIHWi8i_YndDJzG!9zIuQi89|ecwMg6SWENAK4vX%|Ey{C8m%C5GsYj~)v^VJM5R6jt-s^x*QTk4%L^f$laYA)AWA@TI&s=c16$%x@ds^8_-7I z5NdA#w0!MWYY9jg1yPWnddVCx(o48_aLl^7oWFdt)!m9|h&Y0Wq^{B=h#du%a&I9$ zByhc$7L73?i*NzYd^l3^GVsAmj7`C3ac`Bln#}=m@grCsEqS;$_S}SHJFPd=()=Ms zlrO9sg=>Hl*{q+3E_ohmM-4zuLEVEwc#X9}5JyN1+E7Q~E0-nrgx=`abW6cfPqczV ziC0k;caT!IlwF;+sX5EcELnKcS*d04o84 zxDyZNLg@08VC4`g_QB6XhZ=K7)Ol@;D8q$2?W>i+TI>w{J2z&5>tk;%Plaw8)!{H{ zKs+cL9!Hys~|3HT#g6=7nmUWW)7ER%!PHub_x;9QL#%jU@S#l6U0?mi(_O# zH^IRUV2~P}_Elhb!Vbmghd>c)4598G71jYn2Hg?39L4aW6y*X2(2EzT1SM`lM=YSQ zOTwdc_=IXv_McaW&JNa&^M{A6W%=M=Oe_D%Ide(=`7ZXoDPpH{5&ddb1BmA|3NZu&|IH5ONDKq;LnArMO^=ooLy- zW<@fOem;$b{5m@U1st98BVrcoJP^R+Zcr)sMIjj(hE~Oa1a_UpVP$HWrZt7zNI;aE zD&BV1MY6;k>BG7y6JV+%XcS{H&=us6mP_6ypwZK=5@O}^c7S5eDr;VTu4xSyz$X7c zz(%hDmL?{e0&M)h1eTx`2_i(963%9ZRr$S>*2J2xzi$ib&aZ#%mf4!HHeEYVtJU`H zXH|&51^C^L-=@6xMRTQbYukI#eD(p8UHQ{B>k};{RSqkL;5Mba^>KQeJk%1DN+fEh z?T~}92FEtW&FK)8z-SWR=4Wo4z0M3wZ9K#TYa0;ikvIJOxqq0;T8Ot%2ylD`BqRqnVzP``=_9x!HcD#3D-p*!3BeeZ z2F@f!@$3f}8%8)7Py+UgT;pL(v{t83GU-xQiSF=hAIF=a6;S-O17KPz2|x7cMea?Wvs2t{^=G>G&l znG$CM7J7g{GI0U}$LNF2bXG*&;wEn3V|x*E04R{+J|snuJAe?91FeB1QuO12r9TI^ zIs>KTL{2B6P)dNhxB<{vQ2}8B?7^}ICj>u2$tKIQLcwdiMHYc-1P!dDl9Z3KA*M2H zut#Kj>;(zb#U~<2jGdONKro1teeqz0?YdzNVC&CJMLTOL`UlN`0s@s*f*p$I5kPJd z8azp4LF&R3oyA4eH*fPoy8GV6Hz2t z1w$D}1Yuu%CxaY%GGZX!VV;18IT|{Q(ZB%c3bansT4je3?ehdA?Z^%_`=U)TztiYVG8YIkTIq~>3nid zX6WKs1?3yI07GM=@KIj)wU7Xj2k=zH9Lyvgd=iNx;IXOG(q9_@k*=2sKdK-HOG(f| zTm&-u0D|!~)T$9(u+zRm9ah@{RaR%Mi9`-MfxNvxj;e&hA z9tHDrH+(=wBnA@xU_?}d+ysv^)JVTh7iJjJRqwf znnP#FI57&%B6z~M09O)4=C)9tb0U;MoGH95=9|L#U;r7)Q-od)O@<|WY6_Hv@<37C zMs(n5q6kZP4^tP_J@Z$=QlKVfeA=QAI5rcZHUZd$!vgOCxxxhT#f*dlLuE~T?*IW& zG1FEWN(4>4X{<$m!#G6y;(*OiTZA#ZK^N=|GEo-zhq$F*aZQ>GAmV5!GH~in$yts? zYy)$77ZX997~wp)CnL%B&X*g&4h3h2%7-m11ln+o;;4;qq8OrJWWFtq*+|kqICk_Zr>l8E@@_<$>jm4GFB zxGsMRi|Cx!34UQL5iS7X=u7}RmDmLlJn>1X$!q`$$QK2PT|8VO4lq>cKn=DCcNRcp cxO|9ysb`kt*`)P&{|nWNmsi4%-e>jx8yHj1zyJUM diff --git a/server/src/routes/api/admin-profile.js b/server/src/routes/api/admin-profile.js index ab7f5c2..64aaeff 100644 --- a/server/src/routes/api/admin-profile.js +++ b/server/src/routes/api/admin-profile.js @@ -18,7 +18,8 @@ export async function registerAdminProfileRoutes(fastify) { fastify.patch('/api/admin/profile', { preHandler: [fastify.verifyAdmin] }, async (request, reply) => { const userId = request.user.sub const nameRaw = request.body?.displayName - const displayName = nameRaw === null || nameRaw === undefined ? undefined : String(nameRaw).trim() + const displayName = + nameRaw === undefined ? undefined : nameRaw === null ? null : nameRaw === '' ? null : String(nameRaw).trim() const avatarRaw = request.body?.avatar const avatar = avatarRaw === null || avatarRaw === undefined ? undefined : String(avatarRaw).trim() const avatarTypeRaw = request.body?.avatarType