From 8a256d23820e7c48f66337dd265947d02514adc8 Mon Sep 17 00:00:00 2001 From: Seok93 Date: Tue, 19 Nov 2024 16:17:47 +0900 Subject: [PATCH 01/10] =?UTF-8?q?Config:=20reat-helmet-async=20=EB=9D=BC?= =?UTF-8?q?=EC=9D=B4=EB=B8=8C=EB=9F=AC=EB=A6=AC=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 1 + yarn.lock | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/package.json b/package.json index ddd9ba29..b5de9617 100644 --- a/package.json +++ b/package.json @@ -29,6 +29,7 @@ "react": "^18.2.0", "react-big-calendar": "^1.13.0", "react-dom": "^18.2.0", + "react-helmet-async": "^2.0.5", "react-hook-form": "^7.51.4", "react-icons": "^5.2.1", "react-markdown": "^9.0.1", diff --git a/yarn.lock b/yarn.lock index 73b0f386..0237c2bf 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4850,6 +4850,20 @@ react-dom@^18.2.0: loose-envify "^1.1.0" scheduler "^0.23.2" +react-fast-compare@^3.2.2: + version "3.2.2" + resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-3.2.2.tgz#929a97a532304ce9fee4bcae44234f1ce2c21d49" + integrity sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ== + +react-helmet-async@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/react-helmet-async/-/react-helmet-async-2.0.5.tgz#cfc70cd7bb32df7883a8ed55502a1513747223ec" + integrity sha512-rYUYHeus+i27MvFE+Jaa4WsyBKGkL6qVgbJvSBoX8mbsWoABJXdEO0bZyi0F6i+4f0NuIb8AvqPMj3iXFHkMwg== + dependencies: + invariant "^2.2.4" + react-fast-compare "^3.2.2" + shallowequal "^1.1.0" + react-hook-form@^7.51.4: version "7.51.4" resolved "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.51.4.tgz" @@ -5309,6 +5323,11 @@ set-function-name@^2.0.1, set-function-name@^2.0.2: functions-have-names "^1.2.3" has-property-descriptors "^1.0.2" +shallowequal@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/shallowequal/-/shallowequal-1.1.0.tgz#188d521de95b9087404fd4dcb68b13df0ae4e7f8" + integrity sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ== + shebang-command@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" From c366c8f1baf00b986eeb94506ed0299b4a2a2a9f Mon Sep 17 00:00:00 2001 From: Seok93 Date: Tue, 19 Nov 2024 17:28:09 +0900 Subject: [PATCH 02/10] =?UTF-8?q?Remove:=20#197=20.gitkeep=20=ED=8C=8C?= =?UTF-8?q?=EC=9D=BC=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/.gitkeep | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 public/.gitkeep diff --git a/public/.gitkeep b/public/.gitkeep deleted file mode 100644 index e69de29b..00000000 From a0a8e69ba9f221353c446e2b1078cf50c5c55a49 Mon Sep 17 00:00:00 2001 From: Seok93 Date: Tue, 19 Nov 2024 17:29:28 +0900 Subject: [PATCH 03/10] =?UTF-8?q?Config:=20#197=20favicon=20=EC=95=84?= =?UTF-8?q?=EC=9D=B4=EC=BD=98=20=EC=84=A4=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- index.html | 3 +-- public/favicon.ico | Bin 0 -> 3890 bytes 2 files changed, 1 insertion(+), 2 deletions(-) create mode 100644 public/favicon.ico diff --git a/index.html b/index.html index 77d6abce..84f92b33 100644 --- a/index.html +++ b/index.html @@ -2,9 +2,8 @@ - + - Vite + React + TS
diff --git a/public/favicon.ico b/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..d127d08e52f3d18d7e1fdfc6ad2e218d22394cc7 GIT binary patch literal 3890 zcmcgvc~DhV7{6$iT4^?AO$t0P7o;>LvrNq~b!yVA#3jdNqD)f+kxda2QE*8`g*3(j zM8pM5G-y;30T;wIQ429yTp$#1VUhjU_nr6d2JiWoao(JJ&pXSvf4}csNwT7!!CK;{ z)V;GLb(JKk4|N0eA=G)ETVN+i>e0{G#RNS-?Rse;f)8)Tlx^<#W|tp!olinVO%?LW zZX)@wqe#AT6q)%K(9qbx+m%*Wej5=dcjDXKOE4*VKE8_c!RkLEkX866Y8&d5eUBSt z=AXyl&@W)+@j4`TJJCCOJL2n|i?Cqd3Ur_`_x@|f;@16t6;g+Dj$z>1Pw~{k-pV;X z--hVC5-=EZ^unO^pW{{1LD)l<%gqi!2g3xJ z)Z9#TBzaVs?a_JBTX0%89_>8I9?BU5CPujmUs~edUQ37M?y`6w&fLgGR8~R@S|3Na zpuVvlY1d8>e@Eg&dNME4^=;yvQ<8_F8z-rDpmmm$W5`nL6Ea$-=hL2jaNzP0lsqhj zL&z9)jeKhzIFw@b1`5cpw#$ZT*6i`x()Wa|mmdlv{uDdKk<{3I&I0rVSN5hHirpryD^RoXSTq?Q>#vVh^aGjnnEpbA2Q4Ye7#i;rSyV(kS zs&9s0vOxaH>-Bs{&v^+;2@4lfj@uY{n6Sx;VmdM_9*s?n7`Jtn?wl3z;H7M#NSw$s`Z6SCi>kj#PnVs( zxKmL^_%u!@n-;&cym?$uehc=?N2s*O&M*26#Mv8{nr{{Vo6scQsktZdtj`-Hw~PaJ z=(pw*lvI>bP4Lt4=bV)Bt2xm+suiF8GDp9k^ogMO=UDSOunH5ST`_r^o9NSHJ#nQt zSMYIIslf=6<9XkH$Sk;km^1r~HHGaWY-0f9*Q5HH=Iq7)bw__z{bjP{j94#G$DAYQ zLUQd!@(~u8dU(b*ac*jihjC8kL$=#MvCi^wtg3ls2OGk#Yj+FG^5>e_g>0_f@3`tC z+^sAZ{#WKrvbn_h3OeD(wyX9xtvN@{LwVJGk*nJLk@3r%0LDC=uJM7rz_FB^<4C`L zx&_{U5cZ|Os4R;07ZwlD$=!3sNQ(7hcia$Hb)wF-I6cRC~e?=SKBgdy}cf!=^A_h3-wYK5=QFPW`<*c~@-`$Q- zZu7m)Y3+E}63*ICz2!UDEXr%XA81=X-4nU?%-$0~wg|xN-TnypJyh5^s6{=t71*FX zZ)waJTV8!%U_IA-uAvQ$jh42Xoj>$<2F0=Fu0*lJ^_c5aYqXp9iV6Ea)Wrbb)lLyc zwMOHb$Ji-iLyljH=dg^J)?hEb8G=(btNA1_%0PDnH<54uw-EddBWjDBgUp}uknco~ z!=fiC*SVXQF^ck0;0j|2$-)?U(!!nWN%EFy6+gU#@8Sc*J%elZ_OprdQmefyYpVq= OupDw7mcK(=^Zg&1PhIi= literal 0 HcmV?d00001 From 52e05fc7eedc2b769fba0645b677537b11aa5f0d Mon Sep 17 00:00:00 2001 From: Seok93 Date: Tue, 19 Nov 2024 23:56:56 +0900 Subject: [PATCH 04/10] =?UTF-8?q?Feat:=20MetaData=20=EC=B6=94=EA=B0=80?= =?UTF-8?q?=EB=A5=BC=20=EC=9C=84=ED=95=9C=20=EC=BB=B4=ED=8F=AC=EB=84=8C?= =?UTF-8?q?=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/components/common/Meta.tsx | 20 ++++++++++++++++++++ src/main.tsx | 11 +++++++---- 2 files changed, 27 insertions(+), 4 deletions(-) create mode 100644 src/components/common/Meta.tsx diff --git a/src/components/common/Meta.tsx b/src/components/common/Meta.tsx new file mode 100644 index 00000000..f45c9171 --- /dev/null +++ b/src/components/common/Meta.tsx @@ -0,0 +1,20 @@ +import { Helmet } from 'react-helmet-async'; +import logo from '@assets/logo.svg'; + +type MetaProps = { + title?: string; +}; + +export default function Meta({ title = 'Grow up' }: MetaProps) { + return ( + + {title} + + + + + + + + ); +} diff --git a/src/main.tsx b/src/main.tsx index 18f99bbf..ffa11156 100644 --- a/src/main.tsx +++ b/src/main.tsx @@ -5,6 +5,7 @@ import { ReactQueryDevtools } from '@tanstack/react-query-devtools'; import MainRouter from '@routes/MainRouter.tsx'; import { queryClient } from '@hooks/query/queryClient'; import '@/globals.css'; +import { HelmetProvider } from 'react-helmet-async'; async function enableMocking() { if (!import.meta.env.DEV) return; @@ -16,10 +17,12 @@ async function enableMocking() { enableMocking().then(() => { ReactDOM.createRoot(document.getElementById('root')!).render( - - - - + + + + + + , ); }); From 9499ac5332c72f9c68a52e8e237e1144728b4ca4 Mon Sep 17 00:00:00 2001 From: Seok93 Date: Tue, 19 Nov 2024 23:58:31 +0900 Subject: [PATCH 05/10] =?UTF-8?q?Feat:=20#197=20Page=20=EC=BB=B4=ED=8F=AC?= =?UTF-8?q?=EB=84=8C=ED=8A=B8=EC=97=90=20Meta=20=EC=BB=B4=ED=8F=AC?= =?UTF-8?q?=EB=84=8C=ED=8A=B8=20=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/NotFoundPage.tsx | 2 + src/pages/project/CalendarPage.tsx | 2 + src/pages/project/KanbanPage.tsx | 36 +++-- src/pages/setting/TeamInvitedPage.tsx | 90 ++++++----- src/pages/setting/TeamJoinedPage.tsx | 87 +++++----- src/pages/setting/UserAuthenticatePage.tsx | 64 ++++---- src/pages/setting/UserPasswordSettingPage.tsx | 64 ++++---- src/pages/setting/UserSettingPage.tsx | 128 +++++++-------- src/pages/team/TeamPage.tsx | 148 +++++++++--------- src/pages/user/SearchIdPage.tsx | 22 +-- src/pages/user/SearchPasswordPage.tsx | 18 ++- src/pages/user/SignInPage.tsx | 2 + src/pages/user/SignUpPage.tsx | 148 +++++++++--------- 13 files changed, 428 insertions(+), 383 deletions(-) diff --git a/src/pages/NotFoundPage.tsx b/src/pages/NotFoundPage.tsx index 192f156c..1c458d50 100644 --- a/src/pages/NotFoundPage.tsx +++ b/src/pages/NotFoundPage.tsx @@ -1,10 +1,12 @@ import { PiSmileySadFill } from 'react-icons/pi'; import { Link } from 'react-router-dom'; +import Meta from '@components/common/Meta'; import Header from '@components/common/Header'; export default function NotFoundPage() { return ( <> +
diff --git a/src/pages/project/CalendarPage.tsx b/src/pages/project/CalendarPage.tsx index 4711bf46..7911583e 100644 --- a/src/pages/project/CalendarPage.tsx +++ b/src/pages/project/CalendarPage.tsx @@ -1,6 +1,7 @@ import { useCallback, useEffect, useMemo, useState } from 'react'; import { DateTime, Settings } from 'luxon'; import { Calendar, luxonLocalizer, Views } from 'react-big-calendar'; +import Meta from '@components/common/Meta'; import Spinner from '@components/common/Spinner'; import DetailModalTask from '@components/modal/task/DetailModalTask'; import UpdateModalTask from '@components/modal/task/UpdateModalTask'; @@ -117,6 +118,7 @@ export default function CalendarPage() { ) : ( <> + - - {(statusDropProvided) => ( -
- {localStatusTaskList.map((statusTask) => ( - - ))} - {statusDropProvided.placeholder} -
- )} -
- + <> + + + + {(statusDropProvided) => ( +
+ {localStatusTaskList.map((statusTask) => ( + + ))} + {statusDropProvided.placeholder} +
+ )} +
+
+ ); } diff --git a/src/pages/setting/TeamInvitedPage.tsx b/src/pages/setting/TeamInvitedPage.tsx index c77e1b73..82ebb27e 100644 --- a/src/pages/setting/TeamInvitedPage.tsx +++ b/src/pages/setting/TeamInvitedPage.tsx @@ -1,3 +1,4 @@ +import Meta from '@components/common/Meta'; import Spinner from '@components/common/Spinner'; import { useApproveTeamInvitation, useRejectTeamInvitation, useReadTeams } from '@hooks/query/useTeamQuery'; @@ -8,50 +9,53 @@ export default function InvitedTeamPage() { if (isLoading) return ; return ( -
- {invitedTeamList && invitedTeamList.length > 0 ? ( -
    - {invitedTeamList.map((invite) => ( -
  • -
    -
    - team -

    {invite.teamName}

    + <> + +
    + {invitedTeamList && invitedTeamList.length > 0 ? ( +
      + {invitedTeamList.map((invite) => ( +
    • +
      +
      + team +

      {invite.teamName}

      +
      +
      + head +

      {invite.creator}

      +
      +
      + desc +

      {invite.content}

      +
      -
      - head -

      {invite.creator}

      +
      + +
      -
      - desc -

      {invite.content}

      -
      -
      -
      - - -
      -
    • - ))} -
    - ) : ( -
    - 현재 가입 대기중인 팀이 없습니다!
    - 팀에 가입해 보세요 😄 -
    - )} -
    +
  • + ))} +
+ ) : ( +
+ 현재 가입 대기중인 팀이 없습니다!
+ 팀에 가입해 보세요 😄 +
+ )} +
+ ); } diff --git a/src/pages/setting/TeamJoinedPage.tsx b/src/pages/setting/TeamJoinedPage.tsx index b12f3618..c545928c 100644 --- a/src/pages/setting/TeamJoinedPage.tsx +++ b/src/pages/setting/TeamJoinedPage.tsx @@ -1,6 +1,6 @@ +import Meta from '@components/common/Meta'; import Spinner from '@components/common/Spinner'; import { useDeleteTeam, useLeaveTeam, useReadTeams } from '@hooks/query/useTeamQuery'; - import { useStore } from '@stores/useStore'; export default function JoinedTeamPage() { @@ -11,52 +11,55 @@ export default function JoinedTeamPage() { if (isLoading) return ; return ( -
- {joinedTeamList && joinedTeamList.length > 0 ? ( -
    - {joinedTeamList.map((team) => ( -
  • -
    -
    - team -

    {team.teamName}

    -
    -
    - head -

    {team.creator}

    + <> + +
    + {joinedTeamList && joinedTeamList.length > 0 ? ( +
      + {joinedTeamList.map((team) => ( +
    • +
      +
      + team +

      {team.teamName}

      +
      +
      + head +

      {team.creator}

      +
      +
      + desc +

      {team.content}

      +
      -
      - desc -

      {team.content}

      -
      -
    -
    - {team.creatorId === userInfo.userId && ( +
    + {team.creatorId === userInfo.userId && ( + + )} - )} - -
    -
  • - ))} -
- ) : ( -
- 현재 가입된 팀이 없습니다!
- 팀에 가입해 보세요 😄 -
- )} -
+ + + ))} + + ) : ( +
+ 현재 가입된 팀이 없습니다!
+ 팀에 가입해 보세요 😄 +
+ )} + + ); } diff --git a/src/pages/setting/UserAuthenticatePage.tsx b/src/pages/setting/UserAuthenticatePage.tsx index 7bd03079..2dbfc99e 100644 --- a/src/pages/setting/UserAuthenticatePage.tsx +++ b/src/pages/setting/UserAuthenticatePage.tsx @@ -3,6 +3,7 @@ import { AxiosError } from 'axios'; import { useForm } from 'react-hook-form'; import { USER_AUTH_VALIDATION_RULES } from '@constants/formValidationRules'; import useEmailVerification from '@hooks/useEmailVerification'; +import Meta from '@components/common/Meta'; import ValidationInput from '@components/common/ValidationInput'; import VerificationButton from '@components/user/auth-form/VerificationButton'; import useToast from '@hooks/useToast'; @@ -38,41 +39,44 @@ function UserAuthenticatePage() { }; return ( -
-
-

- 개인정보 변경을 위한 이메일 인증 단계입니다. -
- 인증요청 버튼 클릭 후, 이메일로 발송된 인증번호를 입력해주세요. -

+ <> + +
+
+

+ 개인정보 변경을 위한 이메일 인증 단계입니다. +
+ 인증요청 버튼 클릭 후, 이메일로 발송된 인증번호를 입력해주세요. +

-
- {/* 이메일 */} - - - {isVerificationRequested && ( + + {/* 이메일 */} - )} - {/* 인증 요청 및 확인 버튼 */} - requestVerificationCode(watch('email')))} - expireVerificationCode={expireVerificationCode} - buttonLabel="확인" - /> - + {isVerificationRequested && ( + + )} + + {/* 인증 요청 및 확인 버튼 */} + requestVerificationCode(watch('email')))} + expireVerificationCode={expireVerificationCode} + buttonLabel="확인" + /> + +
-
+ ); } diff --git a/src/pages/setting/UserPasswordSettingPage.tsx b/src/pages/setting/UserPasswordSettingPage.tsx index b7b8cb92..9d538837 100644 --- a/src/pages/setting/UserPasswordSettingPage.tsx +++ b/src/pages/setting/UserPasswordSettingPage.tsx @@ -2,6 +2,7 @@ import { useEffect } from 'react'; import { useNavigate } from 'react-router-dom'; import { AxiosError } from 'axios'; import { useForm } from 'react-hook-form'; +import Meta from '@components/common/Meta'; import ValidationInput from '@components/common/ValidationInput'; import { USER_AUTH_VALIDATION_RULES } from '@constants/formValidationRules'; import useToast from '@hooks/useToast'; @@ -43,38 +44,41 @@ export default function UserPasswordSettingPage() { }; return ( -
-
- {/* 현재 비밀번호 */} - + <> + +
+ + {/* 현재 비밀번호 */} + - {/* 신규 비밀번호 */} - + {/* 신규 비밀번호 */} + - {/* 신규 비밀번호 확인 */} - + {/* 신규 비밀번호 확인 */} + -
- -
- -
+
+ +
+ +
+ ); } diff --git a/src/pages/setting/UserSettingPage.tsx b/src/pages/setting/UserSettingPage.tsx index edad2b27..caef0dd1 100644 --- a/src/pages/setting/UserSettingPage.tsx +++ b/src/pages/setting/UserSettingPage.tsx @@ -1,5 +1,6 @@ import { FormProvider, useForm } from 'react-hook-form'; import { USER_AUTH_VALIDATION_RULES } from '@constants/formValidationRules'; +import Meta from '@components/common/Meta'; import ValidationInput from '@components/common/ValidationInput'; import ProfileImageContainer from '@components/user/auth-form/ProfileImageContainer'; import LinkContainer from '@components/user/auth-form/LinkContainer'; @@ -48,74 +49,77 @@ export default function UserSettingPage() { }; return ( - -
-
- {/* 프로필 이미지 */} - setValue('profileImageName', url)} - /> - - {/* 아이디 */} - + <> + + +
+ + {/* 프로필 이미지 */} + setValue('profileImageName', url)} + /> - {/* 이메일 */} - + {/* 아이디 */} + - {/* 닉네임, 중복 확인 */} - + {/* 이메일 */} + - {/* 자기소개 */} -
- -