From 87a50249514269531f60ed66f433a2611aef7434 Mon Sep 17 00:00:00 2001 From: MicroBlock <66859419+MicroCBer@users.noreply.github.com> Date: Fri, 23 Aug 2024 21:12:59 +0800 Subject: [PATCH] feat: click mod name to make comments close #27 --- resources/dist.rc | Bin 2348772 -> 2349540 bytes src/celemod-ui/src/context/modManage.tsx | 3 + src/celemod-ui/src/routes/Manage.scss | 28 ++++++-- src/celemod-ui/src/routes/Manage.tsx | 79 +++++++++++++++++------ src/celemod-ui/src/states.ts | 4 +- 5 files changed, 89 insertions(+), 25 deletions(-) diff --git a/resources/dist.rc b/resources/dist.rc index 74b6109f571ea2360c4539deedcb2a7ba40aebfc..2e9c41f402e79031b3162410ab8dedd294489cbd 100644 GIT binary patch delta 12787 zcmY*<2~-o;+y1>XN!UTc5Jd!UCJ7`gfe;7*Tqf+eAfmV{6GDIp1SCPkjkwp^s><8)!J%nt-TX)-?gr-`d#|_zW+IY&UsIkxicB&-ut}I^Sp2G z?lrLY!!_`|z~HVObESaI4hQc9M}uc4LGbKu3YcvQ@DT(cj{@LotpfZw0D$@90QhWy z0>oqj@HK?s#QO^Hh>Yp`JMy6dB**~R8w|jm|0uwhQULA;0`S3?3h?HJ{|=fmX#kip zhYTWrpB{?`DM4fq083T`uUHWbNl+wc5)u+p5;772BmzkUk?0#2LL!tz7>RHa5hVJN zh6}Y9Fxzrq4!N8pqaJ%e#Ek998-+iF_q>m!cqnm7PV5n9!qZ_7nT}uzfLSoz>;`OccCF(7P<-&MuQsVUSvbjiA6&7 zF?rl{ZLntmt3zp60(O3ggQ_^-%T~%UoQ?x^De*{(0e}m1e7OFypAz0^L>miOPjltl zK>6nHNK4f@>b;t>t!OY0s3yBxyF2N_lzHS|Ry_ypsoLejZ{#Q7Kf?WEayIA`iXa!e z2382{ak;wgKDP;B96SiaLQ7~sOOsvS)Kaf4^mdO^zs3#4)bCt*zC1wG+@=j){aw; z26pA&w8QPNns&l^d)hQ)KcK|mJRIMk+Jus@vWEk6-vYU8re_A0#G-V7%mam2ev&J7 zX_C1o&_VBdPwdu%523!mi=|zQg26mbmsJgNISE~8bz3!4a^?%YWO%?mqy|N%J3{CQ zd29iwRClbUV=PPvujvtic#0 z!g)U6TThn5U3!`@^Mt%?zz#8}8Pfn~&SZmz<>8>%9(arcANqywPsp|KJ>jnt@`=(d zS-+;<6Dod|v(&N0g8OIr^oY~VP&*sF{@Vs`7e9IUAOZg@AJ}zET5O$)rE)RC+Wiq( zFI0-s-6&$I?G`^{EUUrXsLnYRU?qj!g7CORI9xy_juOi_3jax*aY+376S1ptHgE_AJElU3nAL zXoczYDJ6=uT*k7*i7b{TqDVBAodo9H0v*y^)>cv8sSJ6)L6*x}i_>l6QN;1d!ElEVds?2G+l-;oGmZn^R$n=mJV)LP_T?0u%6uDB zO&E^w?)1vI_du=w3)t3DanM)olVeH!dHM53nXu-xJW7N?=jFso{Z>jmW<9a+*C z#7^Fc6(yk9IAZL71lbvR4*XN#&d3L<7FU1H8A0=CKklCi+g-yy1ukC(D8x!b^$~9t zn1Exlg#CZXGsC=7K@%Q$0NR?AN!`L1XXLAt=1JaEFbBt^sy4t{`{XfP8YsarX$jY; zHuw0Vy~F+^IR22QC48E_&SL?!IMy=m9IUhFHiKH_v!LBKA5`PGTy0d^WAxYNC&Ioz zdk^ZHv$j$8 z1fjK#Q4D^%tGv6DyGfyh1a!OcGl{*HUBF|wodcSWZbys}w%0L8c95HQj{02qzK)4c z{DA|a^!0NT$sRapqZs@q2b6D%`d7S1ED9{!hnmGP0XJk(Lce-O2`35}^~{jeQI8~0 zH0QG;vFrhQLoBy|j4QI$6`4%`e9Rq zyY)Hrq>Eb8kqTI2_*mi zJ0*|5KLImL7iAC|e(?_wsqC!Gykm4uwkadC^zoa0$F9r16s0b~UUJdf06~H;_CG~Kw8EBQkuiohzAk3J_B*O8+axw&# z@A+;fGdq<2htcdQ>0p*XXcE4k!)WOzvOo4bn8PGMDKKN{AVE2o(S^XQO!6Mh6R9X+ z%v>e|<_L@DGHgKUBVc+c^X%C*msv%1VToBX)n4mxD-Co(OLKG9^qQHV2utMteoehW zd#E;hoi~#%bGEh@Ct|5NYocFr1xw@nVcYYov2^PUBLNMd&omp0W$xknx)xje74W+# zsl?KJUa{ZuhW29gyqj_p;Mba>uC_h3oVd^^6DldX};QaYZ-UoH60o3?5yQTyT*EM%} z&Y)nCS;~jsV$MKEYU$UQ6455HOnr+v3k^mL28l5mpwo-ke4B1_)HfV{i36w+m)+@M z8nELIuqJns?_G_U`VcvB={=a4K^{An-2(=4G9Gvj9m34LguORIrRS+@aITYtS2xrWNhDbTGH4lQKzx>5!DAFF<+2T&^-Y#Y={R@?e%}ehx3&pCXlqoyIvb2X9A@+M#6+*VQ`U}clo4Q*f zb{%^GWS_S@6tyo<*%_Idfl9%A!CZ=BsVt*W{}q*E$efa-+|)eb4kb~4Ax>O|&WL5T ze&*i&YAZWwY)?khPX|A{N~2*YUCfvw%`oJc>Wr9riq49mQ?_8jFXj7tKsS;?lR5n$ zRa~5&Px$!})=1@>GOJwRWe*ddf13`H>GU&O98N9b0Q>S#4uA#MCOiww=NZATiN(SG zMWW^LNi;iMc^eqSjN6jJd}Cp@$lk_aJ`%FF3cQD5$H5#^-&XosOz*Vj_#;n{yDwn( z(pfp_h52u})}cQ{sIb0>2NY4J{ESi#r0nA9hL(;h*D%YW7eA~sbK#=?)H$R{k)Z!v z4Xqrranf|*xQ9`9J=LFI#C&Xg>b!;}OSs#j{A9wTl*BI!o=*9Tdx-n(OUy^w6VhqSw`-A-i4)ZdVdCu_x|+SXf=42|ixnEt(* zY&H8bM5AWVJQBN3F_?sZA;0<9(gTvZh?-igk-p=qvPpPqG3dZF-7 zn*=@a%Asp2mjtGBF=AG^cMPVmC>e`kHi6;rYCpgJcJ#-7&3ZAcLOEXynkPnEfn(C= zqNIj$ceZk8D>E>4gr03}YDWqj)&bG*jH^UDSF`@@qmym$ApPhh!q1Z8b)ov}w+($rF8ZQ65bO&FMt=AkaC+LkeV zIPF_V=FW>zg6?KeXF_8}k4)yO)Uxp;?G7JxJx6$Wf;1tw= zOK!r<^d6@CA|?E^glUeB8(lu8Vr=EO@l_KhPMSO=-H>6-%o4^gWh_+NSAwvVi60a= z)!Niy?R1TCChDOprF;UgV5%RO?wdF5l<@shri9A+Nnn;SMkA3DSWw%(Nno=gd58kQ(pEiF0Nn( ztgcbdmN>1|j#?a)NZXy(8nnbXV)4Z-f4ZtDm)@>6gU&VCul3d+M+5m#pc~g<87|CN z&cskdUKBc)GlR_L_rPpFc;Z%NcXX&=xXz+(%$Ro=ON=!4%P1Iv|W+!Azn|XN31wFr%oUcZDY_ zm`yBI+uoX%p}kMYN4qokhikHR1mpkz5dQ;-@LqPkevBbWz&~er+H1u$92V2|Ru89tJgO<%ro2`F|n2Zsg}+>13d1?*U>N@gS{7n!-6$ zp-Ac(iK!@^WiwEc1OPX2VctX$ZXHhxUq8nT=_;q}S_2LqLn*cFcOigP9k6UfIavA{ zk*djj8K!EVFX9~C5;Ww<6Mp@D>Maot<4KIpD+Q(IYE0@?KvFbBw{Bz9?rJo zsKL2UJY@84RI#keI&W!eLFUIpFUaf9!wRyXLJp~;FsK(pmh)*_S}`^48nxsiWkD&W z79{HdfAq*sT@6^qt;6B7F%)`at1PrUbK&-3T$Z|V|N!_P@CUt)A#!+qkA zrCiH^E;N`cxfb+2rpi5KRBfGW#3(SESanGtMRO5Wwixbcp5dNi$u6$ojo z8HKc%-@55NVZ>@CBlb-+_HOua5#({?sqFE?)GdR^!)yBZL`u0JtY(Vg4B_l*hLt`v z$QpMF(lrdL-WHOUhB&t?)lu(kX}b+aqrYlpNdtj?*C*29dSVc@42cv*u3^kwQ_*T= z0chqbXRc8yd=ZzydZi(`n;Svw9xN*b&3Vg+v5BeqA{f*Q&t8+E^O6b?HWPb;5Kxo< zPa*eX%O4=+7aJOZrDYt*f7dsdJLDU}O#@mHmJ(247hj~uVCiBX;5u>OfcSsovQAdHNGvcyB-unIB0SaEY?* zKA=p&{aSqhOyy>R=|fvR8XTy)PTR>4*=0~O=@b}eeT3F@-(_Fke^QLN2b4Z!9WyGE z4-h3SKq=BCmtjsa#?p114e;Z(zWPD`^IJjgcDtHjO%u^{O+(j%>W_@ZHc*eg zqARTK233bBVL&Q=ixw&81gcjKK2Xfbfs*T))q8ao%LwlMcGLo2x+pq+?LkXrp`+HEOZGJCX~^7 zXG_OHflN%nHt23hn#t=hZ6?+-T1=03G}}`_-A6d=4@*}kri*RMz1E&6`vtHS==~rI z=ogRZ)&T7VP%6rX<>%nw-+TalEC!iZeSpI<{Xv(ttFvuROJs@L!N%pPE}xWTT8R0-Q7|Y&kMdB z97>oaWDAn^2f5t#a>D!ynjA=YB2N$otz(j6lD_Tyhv#q@kx7=hXowimLhgsX1!f7= z>lmFT^_3z8>IK77_O2RT9)crx`@jY25Hgn>LNef5mhgP)b=gK?_d2Hk^y}d(a0u|r zh~_HAF~h{j-5l7Lf@991ca=F*OIxe@)s%x`=+g7j4Wg_Z&el~}p>np*Fpa%UFWVB# zsh59!rJt2tLJazY7&MD|M16r6IUI+@5NkzHzQ`yj<5xn?i_8eBe1ov;MaJHL=w;r9 zWs^nOP|DV3PttgYi^)T?RtRuCVG0Y^2!-nzb|k321dNuifJ^y4Ve*@@?ogywpj-sV zypQ34G7gmaa=A{RZGJPeBh${CMVXodR|C$7GBcT6NM{%Z9(07na$=P+F3zy1JsOvZ%T`Da~U7t*TFG zn_J(Y{FWf}Y~`n59-qzuiH$5TSAGJOi`eB&SEzlm>S|X@dz%f#lHEb3WQf-&akbgf z+ETC3c30YHei$uOzQjaz9iz-yeWF-uYiVk4cKYJ~M>%dAi8GdezHG<$`gj}wJ28&8=IcR7jL`U$6u$2 zWqx25UVWJv9MaKugSEKyDliG(kS~%4L0cmmMZ&(eAy(7sf(SGN0Vvq?BHZaO~4Ud^ZXNHNwJ5nMckh@P1v=OQNf>uqZ=8WaW$#B1Y!8Qwd{JpJ}j$vN}b9cRecgm zh5_Agp8<5JgXVo*y+Ylh)VQROgRdut`XMg;9lUm1*5pS7Qnq@<5pU3Nw1ZE+6n` zo8AbA8HU1@ILym|oA95Iv*+laKv{0ruym2WqsdZWAr7Gew;(P=T%#sQx}jISr_OxAcq_DkPuOAj1HUa2mk zkI`#la0drell(?U($(%rOnptf+|Xby!Am5VOq5ZNqk&)J#L+iz^gBp6>>Sje_@05S zO;($|p@pd7MSP)u;C>>8QpzzbfN4oLs2|AFd=4cJStHFw)~415!(iaXFo|lm&Ut75$m0x_3_TON!(rYNO^u`Qjs!9qHlNE zEl;TnJ=AkprU50&!haJz9vGFFw+ON`vN_)Lp%jp1%=1cOewe|Lb z5m*+73b=TBw8P~ZQ6pG3GXsmua4_)*QJm*EH;4{ikTS343A-@F$&%`*siN7$rm#!f zQ9ntBX|Amk^#l5^V`!Jn>4s5Nja+|H$Y0bbY~9Ql8OvsvR;GRf4U*V0+#?%s z;Gm_qgoyJ@bZFv4t{>@&fJIK{10nQv#>hUFwKv&Q8|+Qv&p`c5?!CbJ#*tM36veC<-{al^CGy-wC6= zOgc%>GIbBtUv1RusQIx#$!Zu!}L9K~9CAD#$|YyyO95|9;vHnED$n6-P(h zWsZrO2!6j931Mc@^uttUk=YzgWo2jN{Yi4Y0YwIyGYbo+wPzPwCQXOg>BO-#7Z*-4 zLUZP%i7-7YkMGarZE(QMVx^02&mjY(v^mFYK%+%46_G?TY0;#1F|M8u-?5Y|2m?wJ zp%wKP16oHP6<*rH4ApAy0q2x9s;aFCS=A?#r_jv~mpyl7ZXB4M@L@oM+uiEQO-oBW zFFe}9Xe=KlT*d)z`3aM8bKuz*0%4yXnCZT9)ecD8OO)H88 zX~m;J8hSnd8<>`#+9dE>nb@wy=yg#1{&x0-bD-rM^(O{Nq!xV+d=GNdQ@p|4@8|@E z3GC^f(e?+j^d5tq-Rx(6JXc);vhFkeu$UXh{k^CFV$m^(G&NW$~I+N;$d-?GTyJ+-817c zkYrzB^uoGrj4kq{NYAHhiT+3*N42|}vVRa{+er}$2&vnd{)6vOnd#|R#zInH1mU7| zt$%bZAT%)6Z-~7QDg@hhM$o#HfL+-Ui6m=KQN1+Gz zAyQqNeJ^SRajwu1C$+)_J=??Sv-vuc+>N;>FzJjT3$co2Yzmp%04c7}F{oiLo#ihiaz5ZWH z9($epNT>SPzDX@j~Gty?_z!m?1MQX18(fu z^EUHWbl1|TMFW*?=x`&`zhzGDS%U8>&jccfTy}RE3M%~-)S^Vng%)t*F~yN)1lEp1 zdBY>)TfgDr0tn38ZEl?w z!@mjrcGMxQ()T=|b;?!3;IEm4t}VV+Qi|YuW&i6{lI3j8SqbWSjVcVdHHY~S&fq;w z_?ZUSeV3^PDd-x!O9If}Hja#O{;z0i#yirXB{{X5!$$Bo0_-_}(deEFAxui8U9*BjT}uzGJEs zeh=vsTV6rj0;{REmUJnyXC?oZ#Mw3pODZwddBYap2GyEXxru`M0HcZBLpfXxS_uyK zaoMyR)moLiBqPR+Dc5TXh1vt8BcNMYet=1d$dK4w&O~=oKIN#dPu?o*Kfq-7|6S?# zWh<{DMhv`S*(HJ=;+BRj+bl$U!&sEx@h6BetzWLK`--$pk~>zo{Cd~SV zLB&_{PpdD1RDRiI*?VM=KNybS}y^;OOMs7lc#aFmVyDfm$4@)BGti?cVTb(gpe;lLRva{Xs@)Z7Lw5GdfwU zDbPe&GDjZVbz;;@T);c?Nx{!FW-ZLl7_$&&SoHHH=Hl!^ln`fFLJ{ehwiuet6EfbJ z2=j|kB$aJRulyV2=Y9fpx^prEndI4GSSw|-I#Zg2_YX4hQVY=QD}Oq*9$ZZ+R}2Z8rS{+J#-;GR2|4 z!K?xr@{4J9avg#SXX5*rfAH8o{DC8bu)Dxj6_kiskp<)e(;ImljWpq z&pxF*n;Xhi+@m$ZM~4_~WYq)uSBbT9&ZL3|dw&ImpG^?19b!0mNzi}CbVf{}##>$1 zb$p(61(%yMNBHDB#!b4Nk`FT_v3Jl?&ov*Y>W>3<5a&Rp>ZSV}^VEsMCJN6VX7rIK zhy4Or-x|Pko1rWBNzA=HKOAOs6n$Iq{hkLuFlQ(NAK3(_gx`*mb^BEK`zXWGPh~R% zbd1>-2aHc;k40%fZ-E7eK16$ccmE4+mA9VCEGwQIWA;2b77f4e^42ZuQA@cfzQSYk z%|0JD@?W(1x(HJZ2!I^+28!CM7^mbSaR2#AD<{Y5`JhY$1PK>$MSl1Lit-OW=<#^o z$e-lh<_9lf5b2NY;L zB(sL#0mFN#=V3>KX(dQaZ`x2sceGhsxt9wLfzjJTZh4t!xzzTV8xOlMD$p* z?dK^Emy{@S{c6UM^lBr@&!a=7=FQGc_)dUPC`oS6>0h}2W zmKI+ISA~U}6|w5Pk?JF)_^TNXP|{#fpYyJLun7M-CpjL#HQGDt+N{k>J8wW-%eufQLym8$#-m==fZROqlJFaX= z_rskO(i`qgs62y^ z>Q!is0*}Mfl#cOX9)aw(Nk1VY&|5nS7Shec^x@g30fQS>_Xg^*1goPPQo+n2QIzn0 zmm*Er<5ifb_7{a4UWJM}9w4MWuTX^22flg5SK+z4ZZi%R#y+oLgc03}NMVylkrv=A zgR?u>`NFf^ilt$suPG&!Scyn^2kaA?7AZ=p4ZJXGwL&S(-=a_mHx?-(wNxHjFzwOS z!lfr4(RNJl26?>_UCpkvt;#RBLcRu-ZW;ZUw)8^b`f4&wo4(#7Zc)sH)Ua}4^ftvj sYWT_(hqoz6^d~WZL=1_6Bw|SnA`wR-p2T1hh=h^^yXWvW)xeDZ0ex^Ja{vGU delta 12137 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 Xk;I~i4JC$%$%wIszu7Gxocw { + initModComments(); + const { setInstalledMods } = useInstalledMods(); const [gamePath] = useGamePath(); diff --git a/src/celemod-ui/src/routes/Manage.scss b/src/celemod-ui/src/routes/Manage.scss index 320c045..47e1aa7 100644 --- a/src/celemod-ui/src/routes/Manage.scss +++ b/src/celemod-ui/src/routes/Manage.scss @@ -7,6 +7,7 @@ .modList { .title { + html[lang="pt-BR"] &, html[lang="ru-RU"] & { font-size: 16px; @@ -36,8 +37,9 @@ } button { - html[lang="pt-BR"] & , - html[lang="ru-RU"] &{ + + html[lang="pt-BR"] &, + html[lang="ru-RU"] & { font-size: 10px !important; } } @@ -157,7 +159,7 @@ border-radius: 100px; } - + } } @@ -170,8 +172,26 @@ .modVersion { font-size: 10px; - margin: 0 6px; + margin-left: 6px; display: inline-block; color: rgba(255, 255, 255, 0.4); } + + .modComment { + font-size: 15px; + margin-left: 6px; + display: inline-block; + color: rgba(255, 255, 255, 0.575); + cursor: text; + } + + .modCommentInput { + margin: 0 6px; + padding: 0 6px; + border-radius: 10px; + border: none; + background: #222; + color: theme.$fg; + box-shadow: 0 2px 5px #00000040; + } } \ No newline at end of file diff --git a/src/celemod-ui/src/routes/Manage.tsx b/src/celemod-ui/src/routes/Manage.tsx index dd8a86f..57ca3e1 100644 --- a/src/celemod-ui/src/routes/Manage.tsx +++ b/src/celemod-ui/src/routes/Manage.tsx @@ -8,6 +8,7 @@ import { useCurrentBlacklistProfile, useGamePath, useInstalledMods, + useModComments, useStorage, } from '../states'; import { useContext, useEffect, useMemo, useRef, useState } from 'preact/hooks'; @@ -69,6 +70,8 @@ const modListContext = createContext<{ version: string; gb_file: string; }[]; + modComments: { [name: string]: string }; + setModComment: (name: string, comment: string) => void; } | null>({} as any); const ModBadge = ({ @@ -128,20 +131,20 @@ const ModMissing = ({ name, version, optional }: MissingModDepInfo) => { onClick={ gbFileID !== null ? async () => { - setState(_i18n.t('下载中')); - download.downloadMod(name, gbFileID, { - onProgress: (task, progress) => { - setState(`${progress}% (${task.subtasks.length})`); - }, - onFinished: () => { - setState(_i18n.t('下载完成')); - ctx?.reloadMods(); - }, - onFailed: () => { - setState(_i18n.t('下载失败')); - }, - }); - } + setState(_i18n.t('下载中')); + download.downloadMod(name, gbFileID, { + onProgress: (task, progress) => { + setState(`${progress}% (${task.subtasks.length})`); + }, + onFinished: () => { + setState(_i18n.t('下载完成')); + ctx?.reloadMods(); + }, + onFailed: () => { + setState(_i18n.t('下载失败')); + }, + }); + } : undefined } > @@ -214,12 +217,19 @@ const ModLocal = ({ const isAlwaysOn = ctx?.alwaysOnMods.includes(name); + const [editingComment, setEditingComment] = useState(false); + const refCommentInput = useRef(null); + useEffect(() => { + if (editingComment) { + refCommentInput.current?.focus(); + } + }, [editingComment]); + return (
setExpanded(!expanded)} > {hasDeps && (!optional || ctx?.fullTree) ? ( @@ -245,8 +255,8 @@ const ModLocal = ({ {isAlwaysOn ? _i18n.t('始终开启') : enabled - ? _i18n.t('已启用') - : _i18n.t('已禁用')} + ? _i18n.t('已启用') + : _i18n.t('已禁用')} {enabled && @@ -324,7 +334,28 @@ const ModLocal = ({ )} - {name} + setEditingComment(true)} + >{name} + {!editingComment && ctx?.modComments[name] && ( + { + setEditingComment(true); + }}>{ctx?.modComments[name]} + )} + { + editingComment && ( + ctx?.setModComment(name, (e.target as any).value)} + onKeyUp={(e) => { + if (e.keyCode === 257 || e.keyCode === 256) { // enter or esc + setEditingComment(false); + } + }} + onBlur={() => setEditingComment(false)} /> + ) + } + {version} {(!optional || ctx?.fullTree) && expanded && (
@@ -660,6 +691,7 @@ export const Manage = () => { modsTreeRef.current?.scrollTo(0, 0); }, [excludeDependents]); const globalCtx = useGlobalContext(); + const [modComments, setModComments] = useModComments() const manageCtx = useMemo( () => ({ hasUpdateMods, @@ -668,6 +700,12 @@ export const Manage = () => { else setAlwaysOnMods(alwaysOnMods.filter((v) => v !== name)); }, alwaysOnMods, + modComments, setModComment(name: string, comment: string) { + setModComments({ + ...modComments, + [name]: comment + }); + }, batchSwitchMod: (names: string[], enabled: boolean) => { if (!enabled) names = names.filter((v) => !alwaysOnMods.includes(v)); if (!currentProfile) return; @@ -804,6 +842,7 @@ export const Manage = () => { fullTree, showUpdate, alwaysOnMods, + modComments ] ); diff --git a/src/celemod-ui/src/states.ts b/src/celemod-ui/src/states.ts index c3be2ee..e937880 100644 --- a/src/celemod-ui/src/states.ts +++ b/src/celemod-ui/src/states.ts @@ -162,4 +162,6 @@ export const [initUseMultiThread, useUseMultiThread] = createPersistedStateByKey export const [initAlwaysOnMods, useAlwaysOnMods] = createPersistedStateByKey('alwaysOnMods', []) -export const [initSearchSort, useSearchSort] = createPersistedStateByKey<'new' | 'updateAdded' | 'updated' | 'views' | 'likes'>('searchSort', 'likes') \ No newline at end of file +export const [initSearchSort, useSearchSort] = createPersistedStateByKey<'new' | 'updateAdded' | 'updated' | 'views' | 'likes'>('searchSort', 'likes') + +export const [initModComments, useModComments] = createPersistedStateByKey('modComments', {}) \ No newline at end of file