From 301595a5ce95bcf300581dbaa65b394c7d2e19ed Mon Sep 17 00:00:00 2001 From: ukkodeveloper Date: Fri, 29 Sep 2023 21:43:36 +0900 Subject: [PATCH 01/18] =?UTF-8?q?feat:=20useMutation=20promise=20=EA=B0=9D?= =?UTF-8?q?=EC=B2=B4=20=EB=B0=98=ED=99=98=ED=95=98=EB=8F=84=EB=A1=9D=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/src/shared/hooks/useMutation.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/frontend/src/shared/hooks/useMutation.ts b/frontend/src/shared/hooks/useMutation.ts index a7289a371..d35673ffe 100644 --- a/frontend/src/shared/hooks/useMutation.ts +++ b/frontend/src/shared/hooks/useMutation.ts @@ -24,6 +24,9 @@ export const useMutation = (mutateFn: (...params: P) => Prom try { const responseBody = await mutateFn(...params); setData(responseBody); + + //event handler에서 바로 처리하기 위해서 response를 return한다. + return responseBody; } catch (error) { if (error instanceof AuthError) { logout(); From a05b47b7b276e250dff1ffd8b8605027d7707487 Mon Sep 17 00:00:00 2001 From: ukkodeveloper Date: Fri, 29 Sep 2023 21:44:16 +0900 Subject: [PATCH 02/18] =?UTF-8?q?feat:=20nickname=20=EB=B3=80=EA=B2=BD=20a?= =?UTF-8?q?pi=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/src/features/member/remotes/nickname.ts | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 frontend/src/features/member/remotes/nickname.ts diff --git a/frontend/src/features/member/remotes/nickname.ts b/frontend/src/features/member/remotes/nickname.ts new file mode 100644 index 000000000..5a3b2cd51 --- /dev/null +++ b/frontend/src/features/member/remotes/nickname.ts @@ -0,0 +1,8 @@ +import fetcher from '@/shared/remotes'; + +export const updateNickname = + (memberId: number | undefined, nickname: string | undefined) => () => { + return fetcher(`/members/${memberId}/nickname`, 'PATCH', { + nickname, + }); + }; From e0c1a3136033418185d286b435c95d12faf2702e Mon Sep 17 00:00:00 2001 From: ukkodeveloper Date: Fri, 29 Sep 2023 21:45:45 +0900 Subject: [PATCH 03/18] =?UTF-8?q?feat:=20=ED=94=84=EB=A1=9C=ED=95=84=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD=20=ED=8E=98=EC=9D=B4=EC=A7=80=EC=97=90?= =?UTF-8?q?=EC=84=9C=20nickname=20=EB=B3=80=EA=B2=BD=20=ED=95=B8=EB=93=A4?= =?UTF-8?q?=EB=9F=AC=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/src/pages/EditProfilePage.tsx | 35 ++++++++++++++++++++------ 1 file changed, 28 insertions(+), 7 deletions(-) diff --git a/frontend/src/pages/EditProfilePage.tsx b/frontend/src/pages/EditProfilePage.tsx index 1ca633601..00ea0d748 100644 --- a/frontend/src/pages/EditProfilePage.tsx +++ b/frontend/src/pages/EditProfilePage.tsx @@ -1,18 +1,27 @@ +import { useMemo, useState } from 'react'; import { useNavigate } from 'react-router-dom'; import styled, { css } from 'styled-components'; import shookshook from '@/assets/icon/shookshook.svg'; import { useAuthContext } from '@/features/auth/components/AuthProvider'; import WithdrawalModal from '@/features/member/components/WithdrawalModal'; import { deleteMember } from '@/features/member/remotes/member'; +import { updateNickname } from '@/features/member/remotes/nickname'; import useModal from '@/shared/components/Modal/hooks/useModal'; import Spacing from '@/shared/components/Spacing'; import ROUTE_PATH from '@/shared/constants/path'; import { useMutation } from '@/shared/hooks/useMutation'; const EditProfilePage = () => { - const { user, logout } = useAuthContext(); + const { user, logout, login } = useAuthContext(); + + const [nickname, setNickname] = useState(user?.nickname); const { isOpen, openModal, closeModal } = useModal(); - const { mutateData } = useMutation(deleteMember(user?.memberId)); + const { mutateData: withdrawMember } = useMutation(deleteMember(user?.memberId)); + const updateNicknameCallback = useMemo(() => { + return updateNickname(user?.memberId, nickname); + }, [nickname]); + const { mutateData: changeNickname } = useMutation(updateNicknameCallback); + const navigate = useNavigate(); if (!user) { @@ -21,11 +30,21 @@ const EditProfilePage = () => { } const handleWithdrawal = async () => { - await mutateData(); + await withdrawMember(); logout(); navigate(ROUTE_PATH.ROOT); }; + const changeNicknameInput: React.ChangeEventHandler = (event) => { + setNickname(event.currentTarget.value); + }; + + const submitNicknameChanged = async () => { + const { accessToken } = await changeNickname(); + login(accessToken); + //TODO: 성공 모달 + }; + return ( 프로필 수정 @@ -33,14 +52,16 @@ const EditProfilePage = () => { - +