From 8d655f98cef8e006fb80d8c77a3a50cd47525c36 Mon Sep 17 00:00:00 2001 From: yunseok Date: Sat, 10 Aug 2024 17:45:17 +0900 Subject: [PATCH 1/2] =?UTF-8?q?feat:=20=EC=B1=8C=EB=A6=B0=EC=A0=80=20Defau?= =?UTF-8?q?lt=20=EC=BB=B4=ED=8F=AC=EB=84=8C=ED=8A=B8=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/assets/images/no-challenger-medal.png | Bin 0 -> 35774 bytes src/components/Challenge/BestChallenger.tsx | 45 ++++++----- .../ChallengeDetail/Challengers.tsx | 51 +++++++----- src/components/Common/NoChallenger.tsx | 34 ++++++++ src/components/Common/PageHeader.tsx | 68 +++++++++------- src/components/MyPage/CanaryModal.tsx | 5 +- src/components/MyPage/Header.tsx | 2 +- src/pages/Challenge.tsx | 3 +- src/pages/Sponsor.tsx | 76 +++++++++--------- 9 files changed, 171 insertions(+), 113 deletions(-) create mode 100644 src/assets/images/no-challenger-medal.png create mode 100644 src/components/Common/NoChallenger.tsx diff --git a/src/assets/images/no-challenger-medal.png b/src/assets/images/no-challenger-medal.png new file mode 100644 index 0000000000000000000000000000000000000000..632d85c359720ff7eb5b56cbeca7cc1442666e85 GIT binary patch literal 35774 zcmV)lK%c*fP)(#5JZ&c;Wdo%M!Mn;~0oHb4W z49cJk%AgF&pbW~O49cJk%AgF&pbW~O49cJk%AgF&pbW~OoS7nEP|Aup$#;2@?}Kul zmH{BbA`1KBXI|tfd>)kZtRyffR7A<%ZV?^0)SP=z6FlFb@R^qZIL@>3NC!k25C{O# z)~yhCyX)gLP2)Vzqtsk5CWMTlD39YXAXYX=5ziapI!?%6#U%qkEH}6=U z9UqU=B$>^Q9RtEm1|A$>_5uc=I4{a0Rfp)~2nd8qyFFHY!4Exd%bS1YhBs{6IPuDA zHQNx!Sp+hRBD_)xNn|al0S;>}L^1$L!_uJpUW7o&t{KtRu%~q?@t4~j-2R$%2 z=KvT0n6^C4D%t#Ewqw`sV{d!iufFv&tya=&G-i4S4=P|}P_B0j$~jgZX@Dpy%gOlo zcukeI8G4<2m;83Pl0pMLZ0@12@jTpDnU zbH6-N0MQ4AXmqsx?!WnspL^2vm;Co6POEX;izAVts*t02q`@GR&QPRTtU?`UT_+4c z=otP;N(4tv+(P7OUP~92@&_M0wD`YX^NYX#&q|bY+yQnxf6Vw-k0z;<3Aah0ZVnsKD=Mw&_xdjPWQt9bZ!AWt9I7{{Nexl4g&_= zoQqQI#(kd$VOXP{ij9cwK~w6Bbfjn&`x&R_rOAGrR~x7JZiiX#F-YQ&^WaRm(sPvjCbm#~0v zMf%T@-OPT{T!PWA;Gd(MbPVmsh%z+SrbnmqZ`||1;rG7r&42Obc01|SYO}o~NBWfS zLL*AQpX~UcoTOZcfG9fM5(Gozy>I{3A9>bOu6j>3?x6xrVCW%tKzbuEAP}Syl`QRP z>rw~^eZ-Fb4hYhn>1zV91q%*oL@H3nw2pxrf+HqipdTa2+TD2nu07N5c>lkC=W`$Y z*DoHcR4Qq;dMrcB)WZ!8Io0b1#gq$8WajL$>P9V00QR{zLY89(ltm5%O@m>V+f5rqR=S3c@(24l_dGt`pL%gp7qo# zUj3>cea5CdlDqD{Z@x1&CeSz1jE9GZ?hDXSFT0nN2>Ci7}KyO`}-Zp&MjTj{;GKk(qKfA_wBy>tKmBds`& z@`VK*WGHmNp^W1rxCfc+2l-&gO^PDdO8ZBAxex$R8l*?z7;pFwKYGb8zxMg>86S&GUJA$W+p*{1;i;MZpZwA-(+@s) zcqxvTat;{19g$4*8kl)kDCa96M9F6^CRKmp<y7}`r|xnLWxus^Cpf8!J-=?3@ptaL6fUC zCR%BSIBj>*qsvRZ9mnSuKljde|Ldne^@UqeX`fAx9_ELrM+j<3?(g}924S)Syb zUc4}Mbm_yN_~Om~@aOOR;Ldt|u8SO_3>c5NaxMWvoaD0`MiB&2XTt_Ho2}VQlRy2< zH$L&&D>weghKHL<2Xg#0!JZ6iCPLMI+jEr*Qg-Zs3@=b;iF6c_Qh}9 z{AYjg=l{H8dV0D8k8n_&Z9s^^zIe>OWwCWDM0QH&&`=gX{YlqN{QPTQ@X{+T+3-^I zxjii*y-^?tB5le<&Va*YZm1#zffJ9U^)nPX0~3)f2m+k~G?3gO_SsUqQ!Gk&hyZrI z7o&s}?E6Z90H%-wSP*z6-d=Ajjf!0=r3oj=QJl(TEnRMjy}$Fj?|u2lzVYQl)6?*X z2F2L`#7ZCt06_XcmaUI00G@c+l|!$(;RmjJ+|}EjKRi@@;>76C^_2=#(aab}g2J_l z4suloMXZW~7{o)l1HFJL(y|~TIgrSHv5AORTKlWF!+K0e9qOTIoMA%|uITRoeL%RQ z+NtL`M`)D_yUZUm#|5uFVxks!y#z?)LKAPUOuXrGud(Y-|MJ7H`lnBP;^47k(1k}R zDAp1XqGa#IpzRR#dYh07bQ1!=mMs?#{pxFf=(?+}+Wds!;mXq|#)h9>sfcP!qL88i zraADN-VEOx|6^3Dg*C zKmcY&Ti=Kez(;;A8i6Bi3H^$*uSXLVBXD-D`)vsqvBh!;=sUwCtD=bHfFT$yo9~9Z z2oQzirp5xN2(Ra2mj#uM$knk`F~wE&_D^M>{JG!wi{IG$y`9rXz=7fs!zI=N5QVn^ z@rDf>Dr6OU){`$EeaZ8G;HoD*?xG*vIN5l1qaHsxNn|CCk@#^4Lk=Kxh=bIkkZNr% zyhOl308D&gL|XzB=Q{|*BXg!qe=xsygkJ=K<0zi{7!8(nLxG+|nLc2N6%?`RuaOg* zfbT(soCA1$(0>m46?dy+NV*5<6Iq1fQ@y)$|I+)O`{Td+mihVlWhkG>bitN035X(B za89$=zx=ryf9`cZ{OgnB)#o*9`DP)y$OW>PCiJT)1flGQjsx_~ODKG{L~O++CpHyF z?J@@&6MwvT6#~KCLozNS4d<}O&~77Xlg8_v>rfCVYlkIXVE`bE{~cSL3!#0mfe5T#Ua{|`yFoD0 z7r_yTOyO^x^`}oCC=rdQn2}y@pgBR7L6)Uzj~Xc+LQtfc;R=@P2!>Iv%zG~4=__|5 zzoPjV!H`rC2eePjcLIq1Y(b$oNK|mx0YIPPEy7pB#VKJdPS*N_-faR!*6mfg5A19G z{tJHU5B`2`ZmtE75YcJ1!@oHYsHZFAi7Q3EB|ieWbMV3sE3xKUZN)S z3*|G=B9YMjECeSM@Siz2`nZGn?(k6#1b>JFfz{^0g&*sG=;3!gS6WPq!`=~ z3@KesL|Q}Qv|AOQqk=sU8^X0j96Js`#}p?}pYa+QX(p0M$a^Vncn{oiydT|{z-PG+ z=U}S2euQ8uhE?cg_;vssI0ZZA&r7Fjj5M2%J#u8>6Tv%RyWatsA35Wm;C?Zwk zc(nfR|MB{lJnxxTy?b;dxg4Em6$-pWn+8&aidqIs?ERo%FRiZ>LMCLuFCYXHm!b-s zL-y+lUPRJ50da&J2{KgxAVMXsK;2eHdT%0KSFslpLrZq_M*@~6qE==~oKg-!`fPO! z>phoVG!#ysuqIK^+z3HI0LfF_6K7KG%KC83dq5OEh@dBB0FELujQmPLQMJch`KZzV z{g2=J5}L!g3HE|5s|^U77P9)NM_oDo_y6C|zv)TWZTq7}O^zT663P)wlVWIMjxeHv zehs~DNZcUX#y-lpbQA1SS8tKcg%=6PUbiIfg(l%LI;76l4RFF(PbDxP}lN1 ziAs47xkneT@8R|MIoF?sOhaIR0Rwn&XeXfwCo$jYT1x0})SmxqQcdqx9WYuU?uYSt)*WUj5uiv%1)oNYvTw=A79Xsx@9qat@ zSH5Dye|+_`|9H!~+AAW_s)#64J_IBJVW(>9m^1rh!^B;jj+b!Di!2=#9p{h?AWV!B z5|}K{L@A~ytItL}B5sgVnkF#anI)}{*%7y?$OSnfb()%qvj^V|RJ z>PJodY6Qy_kjt@|j2Y9n-&=Dn ziPODO#Yyt4qelF+vxM6sq+!H zSB8g2hkorpzT~fKNjfI-R)Qh~%|$R-Ews2Gj3~-QB)u2jVQZ}}g1tn0M=lDLiA4OG zkbyuS80^TLTVb-0(Nx?vy^peH-_NVq7eqecN>B99%tQH`Y?og>r z*8cWS-t?oFZX5ooh`<1C9AH`hjop^hL(>f`u*NR7ZG7D;J*CdM$}bR%ZX zBrrIWs*rBe@{8^hsw+ZKCq{53^>ql0%}^a4hon)rPHQLH2?uPikgFcZwE`|lzbFg_ zLikV+CxU_XY6CyPhaO>H40=t+*R5Z7{2xDZ%PpNw=YmzRR|60(t^B%mmD;bo{-wV< zQtv%RK-+N#J2}UVRbHBKTwH*6R7HY0s-mbUGdW$r9`c@P_lJ#=P{J7itZ7yG5z(;T)C&130}Q;1rxW*iSl|jLc5eEgLsvAN}x6-X$lqjd0n)sWCATVP$8=M?xV3eigY~`&bP$<1u zdYTfRs6??vvT&>{1jE!vV30CFOU-6Anr7W&kTg*|8Xi}AK_tAm22jvlP9S0@Tahe)#!F4nzhq*Ty z{8o6t7)3(0bYytwapN1-efoR1-!gq6I_n}h{i1q}LbxZ#YS+rNMKj+`luZsiq6sPu!rg(y z69($Yh88j6&HXbP7dQ0J+2>m!8;tWsunn}CmaI|WG7Q>`A#K$!&55gEWc&3nwCNHA z@-Tup0Y|z{hY$)B>GBeE7Z;(|Y9a7DN(t8vL;D`|^9H|l&!oVJdPE-8DtYyJ&w9*% zt#w9Fvr=Yzo+RzOFRR5N;*GUh^%wrb3w~jwDX)ouVi_pQg`dOhDXuBb#quVuHiU}<{A-Nsz{WoG)M7x zS8)p)Wos2{t2Zbww-U1eTzGk8vwHYva()WN5{;&zcvhocx$KEgx@OmBzI^A7cDtRy z1;imv2M|tN!YvtESFQchYhUoDT9R$1?0Dpavz}NX!k6iYO#y((-Zp5BEG|fx93$=3a!2hJ{C6oNA{A};-<*F62#JDpK0ItjP{M5oo@5Tc2u^BZ3F+-=uied!xwpg9gHiAzHA z?0A;ps$cqHS1`}1joq;prWif1QDa=q=z>m5v-?0^2iN`jqYU&@`%Wz=b@&ikjFNHu zFoR-7Lxoi9rzsM%e@O3PUTFv{91WJ+DqL2q1lyINY@Z%E4l#v!)njvw8`k{~oTwC5 z=Uf8nONL{}FtY4T_?(#vGa+3>FzcKGi0TgwKs!N6`+V$7J<-PkokSIB@v+&cU3=N~ zE#Lb3_jVpc(dmM4)~yPMptA44T&tI+E%imwEFW3HcNM4DkZR3Q=?5nD7Er;B8Y)J| zd#KE{0s>sf01}K{7-JVPE>W34j7~$PUe%%3t{s*ulw|S)Psf6{y#OAt9FU*m1_bx0 z1ulXLe(U%l=*%4im|Fti0e`?amJ0$jqA2Zou%HVl>>|NR#Vwkf9*v?DdDE+4r=wb~ zl_MC^b_+Sh0`A*d*_NpZdoOZE&jl%~35D-h;w*Xo4_)&=s?}a?!v;V$3o*dT4E%g3 zs{)Al2*^)=^^RHWtXZWd26C?N7fTm{69*pzr5&ivOV3P%D9ts9lb|kNWZ@0S!ddVy zRy45MWi(rogDnBaIRbD(*q{P2NGOD)OZH&JhbehL;+nY$Ezff^sVLS8Z+GE1^yc;e zEGcs)z0DL4Eil7~cFCsEtjckwOmwR_IjLHf#rh!Gi*IHJO3+ z;=6v4{GMuriJ~ZrhwE_pC*JesUvIZZYT&I-QSeI6qjEZcaO8vInp|8w)aiE9`CJp2 z8CV6lJ$M<*4w8Or9*U`bR_pv6%?K@;%Ye$*$r;B^LoK=*RojP;oV zg#?$-nScQu9010VQ(O=A$xSGR*3|PmtDb2SfuTn_g#m@MqOL6TjRghi5`q$orckJ;~EB}bMM-#kKTp6I0!wk58 zhB#vj@|h_JryX zh+E*#?C+(yJb@yO>(y-Nx~sSR(fj`Dm!CC0K3>x=?ELgkteU4fYBZ7?Ui{>zj15<= zr-cl`WX}uilY;Bh9x!gS3O+|_{&3tNhtmYsgGzO0Nrxhs(C9LCp|5$0#`OGSnl7MK zZ^lgo8x_P#k0@98488&8@5+`hu1`s@6N8j<4A1qB9K|MPMw~+_9c`IWbr@Bs3RsP{ z|Bi+G6>cu9<;?6O#Ua;Y{XHc3ww`t8DwLjs5$98ejYI`ldb=|?qlf_i9?4Y`N20cI z-RQF>H;#Sfd$;VFK_&YXMw)Z4td>%(5-4@Ly?vU}RDhmz2q^mj`wLKvR5c&Wh^cZ1 zMHLs@Uq0^0($CsQRYg#xCZUafPu2_yQuh7&RO)4H!yOUD=DQPYgtZ9^a<*6nN7<>nh+_@saOtv9~pa!M=#=OL$9H4f2iHsj|$^@{BmZJl_D z%C%~;>jgw3Otw4@C8Ay3vLbDXJ%8ds(x7@*R>GUj8P6|miR$Ja9Jp&bES|qhO;${=tKb9K_ zr=N)x8=|eaUf-c-PU;)+TU$*|>azr@e#^WmHZeXRYs+I|EBmBgTdfieJ^J$P&sdo6 zeSX*e`9=E-L%GVL=mXLgdrlhY%X)MxieC$m33WYaV730ljHGI|K!(R{r;h$^~3Ae!+8@3xN15C_2c*M+qux`W($7q z7<+CjnmDrHtfENkmP#d=uCTA?@p~IeSOMSlH%d}?hV;3N9H)|jxMA)X)+G7y6Fj*6 z{R)_Ldk$Wsi-G86H#N_BMNVHSZfRsYMhfqkb0@o$N8->rJqieZvSNxfNrZ{e(MXP}r zSuoMCOuRINuf--5=P0X(?MNmzIpNTDv-*RkkZQE?hL=D0+0zTrzdyL|zH?ruSgpKF zDlsVP)yYr2UyO0YMV(&HvXy7 z*b24LjViyBFeYvrFGkZ*d*sDNeL_1Ejqv7{7W2B2p96zZg6JX6dX#`+ zVd_*bMX=Ow7&B6U;DY2{M}Ez^wk^`e1tsfWi|6M3G_uI&w0vYHeI}Rek%bK{ieA`^IVi7VTY2*nwb4qi?X z&Ai}s8E`(4lSe7(2bUoeDY?eBE4O)FRp_-%MQOHn2hGYI3b%r!L1xz!f_$FtBmNe3 zsi;1R7sl)+B`sJ{2a>iy=;vUeB?h#|WCE}B?oL_e_ zz1eD2Y<|iUu6+8;G4Z+G2k&dMdD-VgSuH?NiH3)V<4$)WeZe!Y|2Y9E<#H9^oO5gd z2gf+fOR&HYp&nuE-q+skG>Yzipx4f|Tq^;_ty3sMMpnAblW3 z5eLn-F@j8V(An2Q1s#=mv9y53I|O1IkJYR0*;W492-}7FgzIa|4QyBk&39KJ<>q#V z>RnsycMA&bs8L;xI>q|yu6^`l-uIEOezMW%%5%w2v8o(mWMnzswXf6t`Ja6DFI5v+ z6%>$Q7DVJqHE<3Q@jY|Y8N!WYJsQy=l~yG+RuD!o;XE4qhKNwQ0ARTSKyh`RNJQa6 zC3ejP;7w(X=EV~EDd0ha0d)M5U0Fye)A%ezu((BS+yIHTq7xaElLrR{a+TH`L|qEB zt7xL_5#gt5_MK><#fpf28I|?+68hifA#cs%HVt`u28n$Zxxl=NY!$MmW2P#JyKz(< zN1!5?=yt&SZG21AdKF{=O!U12$7XRHu@Zoa@X@+NkCp@2n+PU>aBdXq^%+FuM?ftCTSr$OE;((BJy@`INw=3?>=LG4E^AB4nI|OV z6sr)CNgcd+g08mCIUFG%T}1!H@-ZaLrV@8@FiLW6GmjS{Y)v)l=NSsL8Hzr2nyE*m zV5X0vm`Q^}b!0oFZ5+N^QrBrEEm|j|gStdgMQ?Z0J)85Lo4`xk1JY%Ar({wo>J*eU zR#vxdtiAfv@B3rPn8s-qheCm>U=jZmhG^_ms5m`l&h zFX8WwcLv*R{dpEqN}D7}D;ICB{rJb<{d;dInM-k2xWsCjUDbww$d_Bay=qJ_U=U1s z)t~?Xd){#kCJu1Rla+w-%!hr0CAMO(m096K;_?#j9VGD7krnX3hFc<=exTUO6 zx8#Y}c&LVUwt?|6*b!PF0Y<1R2$bhz)Kx3J2x>SwH?lg!8OrqJFA@3vxZWRlI|B<@wVY-s+>yZ_=%KR7u#dDf?)uGabxw#aBf z$i;ShUWhTN1IhfT0*ouT@Ci{oE|?hQeFHX5--4jXQ|+;mF9WCC1dI%XlGBwMu&|1NSNcGw+AV}|^3?3q`#_js!ue;ElO^ zoV|>Is|^T1B;dP^<~3(92MrPGt}$S+AYjE`&O{XYot1-Ku$(Wlu!o=yE7L;Ah^?rm zLYol`_%bB{L)G6?mKnWrk0y|!c3|&7$pK(l6M57l0Ay-YYd=U!_<9`(E6-c8#mV!z zG|9_C@(v!bY@F;n&N-m~XK4^-6tG|*=9N~_0k;n1NX0&hAyjn*sP*oInQ@2xK~b?u z^Em4MJv~Sma?KT&=&G!MwJn!`m^&7Vd&NGJx_;LhndxCKN|8}j9{-kKf89^N=rue4 z24L1Yo$~&NJF{iALN_ecMD=>T^14?)^D*nkho46*G17TS1=tku=1Q9$UO^;?U-G(x zp2whLXY$;y`NsRFL`yJ7X)?XBqcc;kGAjxlTCOq!)*1k`I#6Pg804C;ov(w7LuOM! zZrF~_;bXA8XAg9zr=Yh;^7}LbYgvUqkW8QVT4tdY962+uK_%T3lZTVqzGdoBBvw*6d<6-h9eLS+$5Hs_PwVh6Vc)^_Yd$smjngBOa!O zc8I>ldFhYHLZwm0eFj6#(I>1MAOE+T@4Ct6jm=?=%c?5Xwq!DHgOxI<@Rw-7;5w`9 z#hMX3vWZkxO=e`ZwU*LO893PWj;MrDs1ub4O{j%VOd^BGue#$KtVdBwppdgkJ`yc6 zOVe|(cz6aD4o}0vp;=hidkk8~=Wx_Cll9FaiEheh5aJ*qus)rr2neL2ewJ9$k<4L9 zx1qQ_5syMVG6H!8JSf42Vi+-zCs9+n1S;6Ib;u<~v{f!LKmgqzDy(DSI7CBR!A&F* zWo`2Mgw&m=?mV|J^Fu zTvP%VpKm6sfO&}p;s{0@N5eT2t~>=fY)0C`1gJ z)PS+aUk#Ow>yY>bbQe=-&$pp9+k*C78@fv!G+TC+nKGAr5qBt|{}TX07B*3GPL%v! z`i{yo5_KAo439xp&kaE`rQ7-%z-AElU?EUMqN3uQD9fQUG?2cLOTAoi3$3Qfm`+S> z855K}tLM578ptImsv#D6ykXtYv!8IyWn&PAb*x!gEkHOr8y?Q1b>l;ip?N|Ou{Tl# zMp+eBwzppD$j0SsLgJJ3oy09diGz)a;Y)!~&{7zhjx5H-rCr=MY9IQ z8LU;wnmVPaJ84v5}PaV2p(xCKKseD;JD`yvF;`dhLu22{G#s4?FG_t5-XCal|mEZ3^dvPB0Pw2hV^)CM0v=#EUenY znUkwEyf1MQTHU99=|&j3dK<*!Bg)>dMX8SB7VU)&beGXG(ufh`)S@`T8Y=sI? zB#ei#Emf&?Bs;nbZ+a{KJn*lu9KE!}S5&Q=jNyJ}o#GPc)fTdj{Z}`XRjxyTJ>{&1 zq@R&(o2*Wm*tCA^D%4HRii2)d*QusOQ~uyrUiX}8ENY5D2njw!IcJaNfx+c}CoTyc zRd%uDGbD7n-=D*iC~a9vRiq=6}&Ts9(Mj#7L9Ek2J?X9fK5a;vBse ztxavY#X~5T$O2;Pry=6BSp^CUSw<$$D?m8^f>-U8U&|%bfK?q+b-J03LUVEA66yQ{ z_{`hDCRQ#b>2Mq|!jcnnQMrbR5h>T4J5V`Y4&j8J?Zk|0wdzo#_7t=!(|l@BL0uwu zqjT|x!ArCpLM=~Q)$^#Sm~0Pruqlqpwn$r_{g+b;>J% z=Gh){4Ft+^PZ7hZB~WIC>8HVG`!Q=FPW>}Dafyc#NM1o$p|kR->nOw|*2=Z5Pb+Q8 zf<__jvU3yxGwPgu<&E{QbAqt;s1u)@6@C%FH7%>5L#VDz(=>kKb(daEIe92X#RZyK zc55D82+3r9u1srjgAxje#;9I7$R!A1FRIW*HfdM!1Q8WE_Pk`HIRvm7YXD3AkD@A^ zPzpE1i(b4S;+8tZL5+UKG9t)PMTJa!`A`k`3Pv}UK1)1OKgSqD7 zRqdpss9AhS{aey0XvwnW1L&mN1fo3yYW)iTqF_ZS)C zG`aHPjW0u6Q!GS=bYn7ZxD`B$As1myN)e^ewANHJ!O(uEPD#rlPS6NH%J?EVK}oCp zd1Y9t<*R1F&jGL%QcD{6{)UZXFxDw+Omr-Pj1*w2oT@g*eA6CpJ;l;&_&GM5LWP+V z=Sg&6VKUx?>h?*Xgv?ntS4wwOGx|$^Pr0WnEnMp1k552do_52J{U=@DN!DlJD`4R& zeqhrvPNF(t@;KSrKnMKM8g}g|oqm+-fTDzT71^0qCScBEDJ?Mw8$cYAtGhB3SMJAg+39yMVdn>&$BH& z6j@E%L=STBIOsJLxO}1PGWcOwPf%cM+i9`LD5H@PrA(x(0!F2xHbwj-`X%~%WWMVy z@gP!r6hB6r5N{e&6Lv_sPJ75@)~$n;Im8J#M=%KczLuQ@h$vLs$(Itssp#G`UN*eA zfy7vwC}drr3D!pyn2ND)({2|Bk6ek1AWp*N+^vLS;W@tZ!$+nML{z~VgMrHFatKvN zuQ#4N=c!jex01lPT8>u`n>4ev9IKU3BH0*Ls)>w(?L<6*9Ztkh;hk0506q|UU4o4| zDq=MOFAM8YOpjzF>yqj=15P|J;MDUpMv3nkYZOmN5IHZp1w~|l5yi0~bOQo2#gf*P zb|9c^7RAX(xK+l7^}GTcOH%Y~M~y8HSz-!0hVRt}d>`{uYCeXy9EF2Zz>Nc4OZpfr zH^B*kY%FokXQNK*0VkuWtVxA6N)*}z;6yabAoMK4{NU8g;V7CuuS6y{9-})eURO)2 z+c%Hj5Jwq~6DcioDRk&C*CSTo4#F$bqBe|jH~Iz8Nhak+ZKWxUFp~XItlA)=kZ0U* z3DOgcgU+#klP!-HYp1!!`9W~vfo+p|QOKpDAr%&G6aE5^#$}coFv$zR0Yn4B5q`qB z2u(;b;#J6P(3?E24GGGGnZ?ZPdH?obR`%T> z*L{JCvsKV_*9dU=bGs;xR+@g00oK1@z{Va+8iiUyBENmpjzdC}Kh2pgr>#S@CnuBN zdGmjI=EzXxI)T~M23fEs zd9GuD5t0rmfVI$Ppt@OuLQifvgx?n-APQ9#=@FwUyn~BOzzj1wA~#l>5Z0Wy#fffIAunucg`vBWr${EzC%l51=1G5G5vd@lyo6&U_2ZvQ=m*Y zdcDfiuD|>z5?YE^pt)71+QJ0f{~#?#1)j&q=EGKV6Pjbl9UkQXpqyk;&3p#;t5EUt z1CSnH!bZ}yM6AlrA^Gp6nwy~X2(*NV+F`uM2!LxDD08bM#{lJ)jMxj;C(R9{`|cH1 zJRE6#$)=hi!j6>JUAhs7-gad6G=+_F(8@%3jz}jcWo0jezQXAkq!Cl3l@i_j5@|zD zEEiQhj^fPhK?EOq<*SJUcKJ<=|0Wm(%sV9sAlJGd%{!68lZLW1rN<#jwz#UL2-{xx zsG6&Fh-fFx%ZHF9tywuO4uQ&a^1_!tWBtTP^+h0hvC;|yQOQ~*Bot%+-KechfQecz zSExWcOMHn5w2S(CgtOYy?W{w1W5| zpfBuN_&OpNKxZzED_(SR@^`G~Z<~R^qFd#F6(Em~V=Jo7BlLRs;a%=_bmi2!~l z5k3k5Pqw?+)Y4L9M%1-057!T&o|2U5pL^vG|3n=1s!CjPinOs;J7wBhG=v|?Bk9FT zHR+@Qz#@LNSuke3Cfr|H-~{$+HTgxqN;6k`*`KVqSqNOQ_$4HmB ztiWbyzOh*!TYWE#q!!~GhU~izM=;`+$rwW7l*W-%`UG(kHPX`h5H{Q$^t|UNLO?=s z833s>dLsq(IypM?(5lnUH2`RqA99+c8mU;RSgl5+#WG=mX_}ZV;|RWhmbB4PBX$ZW za+VLtoP<>i@!4bLS2m`CoSz9 zk`z467il~YLA5m(M~A87i+3@T>zV`OVRHxy)p+SM9=CC{89l~u2N%ev<6bPM;1VeF zO}jV>vl1ueZi~$lykJtW( zzK6mw6Lo-F7NNOV9MywYFb6_UFVzMK=p*g$kTEGCAij6|t_R|H`mFdMs61??y4UL^ zKl_u4f`a63I9U_Vr4$X{)lQ5kT)Xe32djNkvdkKBC1s& znHWaJc^T5PY(1RT>qBU(~#IIr`N_&=dFt|aX8g-y0 ziU|tr`EDt*VMCWOXjzsM<=?;g&Ka|+*EtV}K5=Q=hT#`SqK(Z*afy5nPKPjH0A^9* zlWZKZ`(6VpDh^C~QBx{^y`BoRyB5Z~uX#>)9 z!4NLfC1~WQHguLCTG$KmD1tB^)`5s*j_oe1h+An^`f(;nCn?F2&=Lj?hGOTbmk_F# zc20m+4fG-O1k-9lx#cRku86|Nfkx$K9a4(5g2a#86rODsViA+W2#g^}X9ySzXl|wK zemxBg1VyEeo^%366`yJP0L1l2>)ftlrRZ1Q+0s3wL_>%$7A<{FKp+MS)(z6?6Rc0b z1eq(aNAmu?vu#R=3gI2stUN3ZLE_SXdCdzh!*_B$5{eR+6bPg-4hZk~5u%I%(@1NL zj;T^0Rp%mMMoTEqSF73?Mlx@1V(`KC3}@jG9I@T&&I^7fRr9B1wrF06A!H(QyB@j~RdAFq(98~$1jQ+rUE3(iQYoxR}x)#fU#rzu@P&JiYYYmQ0n_BXg1OGJvOA9CH!bE`LntH)#oa(Y^+SS{gG$a zd5?*g(4UmreAf&nlAUfg&3q7Nr93PSL6NPOY+ZkYfQ}KDD7rNb0l`_WGwEgE){qv4 zEz^*w#Q9Vw|D`&}1B@@TM?|b9n~1)S)FW(v<3a|{zmb^}&8!KU8dL3=)-N>&o9-#c z5iK(!mYp~wjd|ARR+4Vy?>8js`vkgwp>68CWC0QULFkKlR+qZdoF=@+6_oWG2|hzt zhkFzNV?dn0k~rweI%ruUGk#_!ED5ill5?=OVH|23*Fo?29CQvGg&ye`lzp#@M$hIn z)SGqfurr;_BqXp&2yA3IfOO6Rote>3N7cy(GIQ&IZ7smd#r$}~T6Hp)ZQAz=G< zh&r8mWo)#0eUvT}5R@}cS&FRx!4jJkW-?j<1a4Ggqd#>)q(@8|WpW$pK~a;2ID=6I z3gefRK6qn+GkGeRN*kZ`7K~0~k6Q&>=mlAnkHGst+yt3Cv<9xkp#sBD5g07!igO#s zeayUS;t)~PR;TpBpbe;uj6tv3RiYB8nT3{cwSJaI+7d=HcynQ_Vg#_Cx(& z*Fk;5By^@`p>v3U(S!EPJk%yPfLs^5Ueq%U?PCj9hkeFe`t(V{?p^0+P<%hUaF~!F zy43C+7YmHdp9Nr?Dj*!4kw`x>QmImiw+hoxvb9mBrLi!%ng51zT?~+Z*~$j5-i+Z8 zkx{^N;aM(~UP=pdL6AbftW_nQ?ZqaB6h-K0ilh~CvL*0I2f!$#`o$=q#5wz&y$JxY zQM-6QyJG{YnUn-2MS|s0oX=2qXhy5KEXntIN+wnu)f))b*v`!3QMmfI5fNvu-vh7} zib&G81CO2Erovi~6ErX04E1drp?hQ+{Ss}Eg(Z0b6YDM#hu&zQ?o6+#_>U&utW_}l}*5~>S~)8detJETq+mTsL@W@5eu zhvpQdeEV5mHUt}>-1ixl5F^qIYiMPuqAsz#2u!Fm!9{uooU-*x=_cveM9r=qfPxed zg2CZblnG6qyVz`mI=V%lbCM(;>&?!RzfI>ooW+r$K*rhQtOUIMqDh!t*FJlfwd;m1=a zWVq{Cq5}Fv=^p+w1Sx`HJrbNy@v zB%gEu7-taWkE@WInkP{`tNYW`LwTp{J+$OdUZ)*1hnkHm8kV+Z<*3WCAHdV8Y}rk_Ia2Mw^NoTFB|vQS5h??Fv$KBynR++QqQ0mWu){a8R_{D zl&U5|PBt_-3B6hu?24>zVt=BQYQaQI9a(G5ubJZ@5pfA}a)Rwo`#hF_4Yv~JT?o_2 z;sX{!R*8#7G7H|ZW*cUZa~ah2PefmDnEFhhTdfvfo@FvZKbP1KXQ!MhAOiBLsUx~` zwL`_62tXkjHvn)fRnfi5_iUmq*$AgNg*0F=BbG@gqX1-ZCXG0wy`v&%rk7QV3PvEz zC@(l=w9Z;bLReYpAhLQz#Bv6EVXf~Lz_>yI4C>BiWE2d@6b+lHZn3MO#%jIl9{CD- zIgF0416h|!Z&33mO!79cMg}JOsP3lgB&}(ZYw#Ffi)w%7h7*0Q%^U*y{RtT~Jm{|y zY&(aier6M}2wESE%)lq@c7XImpb9z6lFr8HA_XXDIp~G~r8kjjq#i1%6Lo9Wa-a*&E_CBBMc=6r90)@Vi7GUv9pZkOBd%Ymh@tT&0A~LC0i+IQzv+bpJ7VQ~Is*i@e zs(lgs#jDSD*fHv_bxcu*nWSHCIJco0dguZ(d>XOdI(l-$CA5g4b#5~{6%u?*}*rXQMn+4ndEWO?SJUJMP){ z2brjlpqtAmmR^tr?|8BxF>9~+QJ!%HGvep`IL&5bD+XDInA@|(4Bcm!PNsw#1jjA8 zYA!(wl*g#JTFfZ)F1dwb%kWK`VC+bb1eKC50dY#-ku2rG2eH}y_ z>mVv7rKd?m0A{5huLD@h6@8CvMXJbh6r+Qv>8vze)g1R6Lh$Z6F>|#561kqp#7Np% znAG)#dqANM2wdyxeT zDcCe)Z#1mG=rEHE6zVzbbFuRdd<=t3)bhk-2~mW^YD5|^i3)fk1MZ6v&NeFw&jbC# zyi(d@@C($(-Z}+lxdAsDPy&RxX#k+uc5@T;-FTuc*D_qp#-8!t6e-&`Q}v&qjWo** z6V0=h=$Ohw0R*EW=yj`$op-$N%YVAmfrBzmG9gs1b>m>dkEqVF;6 zM*2-vpG>YQVa&&-&CdVMxx@;nu%=#m#A-EqQrgVpt)4d56cnek z3aRLHI`E}`zjMc{Uh>q(HLCHW%$$0~0{3YesFN z2a~ZIj4l8tTONRSQK6-ReG2a@80QdSJyKuq1KJG-QRzH;#?KI$?1rFb;l;7xJd!u6 ztcd;%i6u_z$-bk@|M%{LJLi{|Av-|@XQZ6&vb?f3+=VS0Hr#RTqqn^RJEIY~^lR~?#DiN#{;caD~0m}5Ka)G zbfGuiabWR>pYizK#);wQM3E6lg>{*Q&*KL%5maOeRq(md?rt)?vzrxX5#jfa_&FFv zKR2*7K%o_A=|E64_56rD?YlxZr{s6Meb5gCC(HM>#aMa3j?zA{G8nTgUwp)7FR{gQ zKOWsBg68?q6v2K4E0CIbYk}n|kx)6R2!2j zuaL7Osng~jPNB|CLLtd?m(aoI>bEo~!;#t>0SaIat^p^HOD$Ohuff*YXGLQ>|3|X^ zFEmerGkoyh7fVEoz$lBVd8dkF05b`fltNv7)f!Gh%kwsB(Pc)lez^4cu*>O+Ot#4R zgHydb_8k1$lb`U|ts_IVtCZ_asQC~~s^C0Rg!7-p3Y^1=KgBzmz88ghx#(fPuf!!( z!^>;eAqdGBiUn;w8ahIj1%~C1`-b_mo?-A&+Y)`4gh9IJ(jt?H%IKk}&749B2mkpyUw*|ao_oGDLk*}F&;%wEQ3pn69BeE$>!gJdzV}#3f#aPvktBmsW=#A z>@jvZ!)AD#A1H9oqA25-nirRpD5uii&~X*_0u(_IQMQlRKTA1k*8A65v0e=sjSI}#F@R1!wY2<_ zSO4B`ADoTfmRCl4GOlM)(x9Y4*r_$6Q)s+!(2g&iau zUzH)?rGHLsR7sr;5^IQ(Ip)B{ONGGD*LkH^7f}j|qEf1fMn~S#YNXYX zt#~AHgzpw#3GUB{U;0E#oG@+J2QXkT&oBoM|7qCGY;#k+*}WkIEq{7_f>$a1eQg^c z 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 S^6|0&0000 { title="베스트 챌린저" desc="금주의 베스트 챌린저! 베스트 챌린저는 어떤 챌린지에 참여했을까요?" /> -
- {topChallengersData.data.map( - (challenger: BestChallengerProps, index: number) => ( - - ) - )} -
+ {topChallengersData.length > 0 ? ( +
+ {topChallengersData.data.map( + (challenger: BestChallengerProps, index: number) => ( + + ) + )} +
+ ) : ( + + )} ); }; diff --git a/src/components/ChallengeDetail/Challengers.tsx b/src/components/ChallengeDetail/Challengers.tsx index 47b1f6c..9a5952f 100644 --- a/src/components/ChallengeDetail/Challengers.tsx +++ b/src/components/ChallengeDetail/Challengers.tsx @@ -7,6 +7,7 @@ import { scroll } from "../Challenge/BestChallenger"; import { useQuery } from "@tanstack/react-query"; import { getChallengeParticipants } from "../../apis/challenge"; import { BestChallengerProps } from "../../@types/challenge"; +import NoChallenger from "../Common/NoChallenger"; type ChallengerProps = { challengeId?: string; @@ -60,28 +61,34 @@ const Challengers = ({ /> )} -
- {challengerData.data.map( - (challenger: BestChallengerProps, index: number) => ( - - ) - )} -
+ {challengerData.length > 0 ? ( +
+ {challengerData.data.map( + (challenger: BestChallengerProps, index: number) => ( + + ) + )} +
+ ) : ( + + )} ); }; diff --git a/src/components/Common/NoChallenger.tsx b/src/components/Common/NoChallenger.tsx new file mode 100644 index 0000000..723e696 --- /dev/null +++ b/src/components/Common/NoChallenger.tsx @@ -0,0 +1,34 @@ +import styled from "styled-components"; +import tw from "twin.macro"; +import medal from "../../assets/images/no-challenger-medal.png"; + +type NoChallengerProps = { + text: string; +}; + +const NoChallenger = ({ text }: NoChallengerProps) => { + return ( + +
아직 {text} 챌린저가 없어요!
+ no-challenger-medal +
+ ); +}; + +export default NoChallenger; + +const Container = styled.div` + ${tw` + w-full h-[415px] flex flex-col gap-[4px] items-center justify-center + `} + div { + ${tw` + text-medium-20 font-medium text-fontColor2 + `} + } + img { + ${tw` + opacity-[63%] + `} + } +`; diff --git a/src/components/Common/PageHeader.tsx b/src/components/Common/PageHeader.tsx index df29bb9..9e05c48 100644 --- a/src/components/Common/PageHeader.tsx +++ b/src/components/Common/PageHeader.tsx @@ -2,44 +2,50 @@ import React from "react"; import styled from "styled-components"; import tw from "twin.macro"; interface PageHeaderProps { - title: string; - desc: string; - imgSrc: string; + title: string; + desc: string; + desc2?: string; + imgSrc: string; } -function PageHeader({ title, desc, imgSrc }: PageHeaderProps) { - return ( - <> - {/* 헤더 */} -
-
- {title} - {desc} -
-
- 헤더이미지 -
-
- - ); +function PageHeader({ title, desc, desc2, imgSrc }: PageHeaderProps) { + return ( + <> + {/* 헤더 */} +
+
+ {title} + {desc} + {desc2 && {desc2}} +
+
+ 헤더이미지 +
+
+ + ); } export default PageHeader; const Header = styled.div` - ${tw`flex flex-row mt-20 h-[528px] w-[1280px] m-auto justify-between`} + ${tw`flex flex-row mt-20 h-[528px] w-[1280px] m-auto justify-between`} - .text-wrapper { - ${tw`flex flex-col w-1/2 mt-36`} - .title-text { - ${tw`text-bold-48 font-sans text-fontColor1 font-bold mb-5`} + .text-wrapper { + ${tw`flex flex-col w-1/2 mt-36`} + .title-text { + ${tw`text-bold-48 font-sans text-fontColor1 font-bold mb-5`} + } + .description-text { + ${tw`text-medium-20 text-fontColor3 font-sans w-[498px] font-medium `} + } } - .description-text { - ${tw`text-medium-20 text-fontColor3 font-sans w-[498px] font-medium `} + .image-background { + width: 50%; + height: 528px; + background: radial-gradient( + 50% 50% at 50% 50%, + #ffd7c0 0%, + #faf8f5 100% + ); } - } - .image-background { - width: 50%; - height: 528px; - background: radial-gradient(50% 50% at 50% 50%, #ffd7c0 0%, #faf8f5 100%); - } `; diff --git a/src/components/MyPage/CanaryModal.tsx b/src/components/MyPage/CanaryModal.tsx index 5aae49d..1f72272 100644 --- a/src/components/MyPage/CanaryModal.tsx +++ b/src/components/MyPage/CanaryModal.tsx @@ -252,8 +252,9 @@ const ImageInput = styled.div` `} span { ${tw` - absolute left-0 top-0 w-full h-full flex items-center ml-[21px] - `} + absolute left-0 top-0 w-[500px] h-full flex items-center ml-[21px] + overflow-hidden whitespace-nowrap + `} } } `; diff --git a/src/components/MyPage/Header.tsx b/src/components/MyPage/Header.tsx index 3a86b71..2806121 100644 --- a/src/components/MyPage/Header.tsx +++ b/src/components/MyPage/Header.tsx @@ -107,7 +107,7 @@ const Profile = styled.div` .change-name { ${tw` - text-medium-20 font-medium text-fontColor2 underline underline-offset-4 decoration-1 cursor-pointer + text-medium-20 font-medium text-fontColor2 underline underline-offset-4 decoration-1 cursor-pointer mt-[10px] `} } `; diff --git a/src/pages/Challenge.tsx b/src/pages/Challenge.tsx index 3f021fc..3d1ab5b 100644 --- a/src/pages/Challenge.tsx +++ b/src/pages/Challenge.tsx @@ -19,7 +19,8 @@ const Challenge = () => { {/* 챌린지 페이지 헤더 */} diff --git a/src/pages/Sponsor.tsx b/src/pages/Sponsor.tsx index 3cfcb7f..a87fe70 100644 --- a/src/pages/Sponsor.tsx +++ b/src/pages/Sponsor.tsx @@ -10,50 +10,52 @@ import DefaultLayout from "../components/Common/DefaultLayout"; import DeadlinePosts from "../components/Sponsor/DeadlinePosts"; function Sponsor() { - return ( - - - {/* 헤더 */} - + return ( + + + {/* 헤더 */} + - {/* 기한 임박 후원글 목록 */} - - 기한 임박 후원글 - - 곧 후원 기간이 끝나는 후원글이에요! 청년들에게 도움의 손길을 - 건네주세요. - - - + {/* 기한 임박 후원글 목록 */} + + 기한 임박 후원글 + + 곧 후원 기간이 끝나는 후원글이에요! 청년들에게 도움의 + 손길을 건네주세요. + + + - {/* 모든 후원글 목록 */} - - 후원글 목록 - - 당신의 작은 도움이 자립준비청년들의 큰 가능성을 열어갑니다. - - - - - - ); + {/* 모든 후원글 목록 */} + + 후원글 목록 + + 당신의 작은 도움이 자립준비청년들의 큰 가능성을 + 열어갑니다. + + + + + + ); } export default Sponsor; const Wrapper = styled.div` - ${tw` flex flex-col m-auto items-center`} + ${tw` flex flex-col m-auto items-center`} `; const ContentWrapper = styled.div` - ${tw`flex flex-col mt-24 w-[1280px] m-auto`} - .main-text { - ${tw`text-bold-36 font-sans font-bold text-fontColor1`} - } - .sub-text { - ${tw`text-medium-20 font-sans font-medium text-fontColor3 mt-1`} - } + ${tw`flex flex-col mt-24 w-[1280px] m-auto`} + .main-text { + ${tw`text-bold-36 font-sans font-bold text-fontColor1`} + } + .sub-text { + ${tw`text-medium-20 font-sans font-medium text-fontColor3 mt-1`} + } `; From 6de850236bbe3d84a31241f0ad04f589f13f1a7a Mon Sep 17 00:00:00 2001 From: yunseok Date: Sat, 10 Aug 2024 18:16:08 +0900 Subject: [PATCH 2/2] =?UTF-8?q?feat:=20=EC=9A=B0=ED=8E=B8=EB=B2=88?= =?UTF-8?q?=ED=98=B8=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/apis/canary.ts | 2 +- src/components/ChallengeDetail/Header.tsx | 23 ++-- src/components/MyPage/CanaryModal.tsx | 78 +++++++++--- src/components/MyPage/PostalCode.tsx | 138 ++++++++++++---------- 4 files changed, 148 insertions(+), 93 deletions(-) diff --git a/src/apis/canary.ts b/src/apis/canary.ts index ca16dea..c022ea3 100644 --- a/src/apis/canary.ts +++ b/src/apis/canary.ts @@ -10,7 +10,7 @@ export type CanaryApplyForm = { gender: boolean; address: string; detailAddress: string; - zip: string; + zip: string | number; certificateFilePath: string; latitude: number; longitude: number; diff --git a/src/components/ChallengeDetail/Header.tsx b/src/components/ChallengeDetail/Header.tsx index 0c166ff..1436ce6 100644 --- a/src/components/ChallengeDetail/Header.tsx +++ b/src/components/ChallengeDetail/Header.tsx @@ -25,12 +25,14 @@ const Header = ({ return ( - {categories?.map((category) => ( -
- {challengeType.find((type) => type.id === category) - ?.label || category} -
- ))} +
+ {categories?.map((category) => ( +
+ {challengeType.find((type) => type.id === category) + ?.label || category} +
+ ))} +

{title}

{desc}

@@ -80,15 +82,20 @@ const ChallengeInfo = styled.div` ${tw` w-[1280px] flex flex-col items-start `} + .categories { + ${tw` + flex gap-[8px] mb-[20px] + `} + } .category { ${tw` text-medium-20 font-medium text-white - bg-mainColor rounded-[37px] p-[1px 13px] + bg-mainColor rounded-[37px] p-[3px 13px] pb-[6px] `} } .title { ${tw` - text-bold-64 font-bold mt-[6.5px] text-fontColor1 + text-bold-64 font-bold mt-[-20px] text-fontColor1 `} } .desc { diff --git a/src/components/MyPage/CanaryModal.tsx b/src/components/MyPage/CanaryModal.tsx index 1f72272..4b5d57e 100644 --- a/src/components/MyPage/CanaryModal.tsx +++ b/src/components/MyPage/CanaryModal.tsx @@ -9,7 +9,18 @@ import useAuthStore from "../../storage/useAuthStore"; import { getPresignedUrl, uploadImageToS3 } from "../../apis/file-upload"; import { postCanaryApply } from "../../apis/canary"; -const CanaryModal = ({ onClick }: { onClick: () => void }) => { +interface postCode { + address: string; + zonecode: number | string; + detailAddress?: string; +} + +// prop 타입 정의 +interface CanaryModalProps { + onClick: () => void; +} + +const CanaryModal = ({ onClick }: CanaryModalProps) => { const { userData } = useAuthStore.getState(); const [success, setSuccess] = useState(false); const [image, setImage] = useState(null); @@ -28,34 +39,40 @@ const CanaryModal = ({ onClick }: { onClick: () => void }) => { gender: true, address: "", detailAddress: "", - zip: "", + zip: "" as number | string, certificateFilePath: "", latitude: 0, longitude: 0, }); - const handleApplyData = useCallback( - (data: any, key: string) => { - setApplyData({ ...applyData, [key]: data }); - }, - [applyData] - ); + const handleApplyData = (value: any, field: any) => { + let formattedValue = value; + + // 필드에 따라 포맷팅 처리 + if (field === "phone") { + formattedValue = formatPhoneNumber(value); + } + + setApplyData({ + ...applyData, + [field]: formattedValue, + }); + }; + const handleBirthData = useCallback( (data: any, key: string) => { setBirthData({ ...birthData, [key]: data }); }, [birthData] ); - const handleAddressChange = useCallback( - (data: any) => { - setApplyData({ - ...applyData, - address: data.address, - detailAddress: data.detailAddress, - zip: data.zonecode, - }); - }, - [applyData] - ); + + const handleAddressChange = (data: postCode) => { + setApplyData({ + ...applyData, + address: data.address, + detailAddress: data.detailAddress!, + zip: data.zonecode, + }); + }; const handleImageChange = useCallback( (e: React.ChangeEvent) => { @@ -67,6 +84,26 @@ const CanaryModal = ({ onClick }: { onClick: () => void }) => { [] ); + const formatPhoneNumber = (value: any) => { + // 숫자만 남기기 + const numbersOnly = value.replace(/\D/g, ""); + + // 3자리, 4자리, 4자리로 나누어 하이픈 추가 + let formattedNumber = numbersOnly; + if (numbersOnly.length > 3 && numbersOnly.length <= 7) { + formattedNumber = `${numbersOnly.slice(0, 3)}-${numbersOnly.slice( + 3 + )}`; + } else if (numbersOnly.length > 7) { + formattedNumber = `${numbersOnly.slice(0, 3)}-${numbersOnly.slice( + 3, + 7 + )}-${numbersOnly.slice(7, 11)}`; + } + + return formattedNumber; + }; + const convertToISO = (year: number, month: number, day: number): string => { const date = new Date(year, month - 1, day); return date.toISOString(); @@ -97,6 +134,9 @@ const CanaryModal = ({ onClick }: { onClick: () => void }) => { } } }, [accesstoken, applyData, image, birthData]); + + console.log(applyData); + return ( { diff --git a/src/components/MyPage/PostalCode.tsx b/src/components/MyPage/PostalCode.tsx index f3f434a..4d8d131 100644 --- a/src/components/MyPage/PostalCode.tsx +++ b/src/components/MyPage/PostalCode.tsx @@ -6,92 +6,100 @@ import { useState, useEffect } from "react"; import DaumPost from "../Common/DaumPost"; interface postCode { - address: string; - zonecode: number | string; - detailAddress?: string; + address: string; + zonecode: number | string; + detailAddress?: string; } interface PostalCodeProps { - initialAddress?: postCode; - onChange?: (data: postCode) => void; + initialAddress?: postCode; + onChange?: (data: postCode) => void; } const PostalCode = ({ initialAddress, onChange }: PostalCodeProps) => { - const [popup, setPopup] = useState(false); + const [popup, setPopup] = useState(false); - const [form, setForm] = useState({ - address: "", - zonecode: "", - detailAddress: "", - }); + const [form, setForm] = useState({ + address: "", + zonecode: "", + detailAddress: "", + }); - const handlePopup = () => { - setPopup(!popup); - }; + const handlePopup = () => { + setPopup(!popup); + }; - useEffect(() => { - if (initialAddress) { - setForm(initialAddress); - } - }, [initialAddress]); + useEffect(() => { + if (initialAddress) { + setForm(initialAddress); + } + }, [initialAddress]); - useEffect(() => { - if (onChange && form.address !== initialAddress?.address) { - onChange(form); - } - }, [form, initialAddress]); + useEffect(() => { + if (onChange && form.address !== initialAddress?.address) { + onChange(form); + } + }, [form, initialAddress?.address]); - const handleDetailAddressChange = ( - e: React.ChangeEvent - ) => { - setForm((prevForm) => ({ ...prevForm, detailAddress: e.target.value })); - }; + useEffect(() => { + if (onChange && form.detailAddress !== initialAddress?.detailAddress) { + onChange(form); + } + }, [form.detailAddress, initialAddress?.detailAddress]); - return ( - <> - - - - -