Skip to content

Commit 9f30d90

Browse files
committed
(#329)style: 탭바 글씨 삭제, 헤더 fix, 붕어빵 오류 처리했습니다.
1 parent 82005bc commit 9f30d90

File tree

3 files changed

+159
-13
lines changed

3 files changed

+159
-13
lines changed

src/asset/sass/pages/myPage/infoEditPage.scss

Lines changed: 72 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -157,4 +157,75 @@
157157
font-family : pretendard-SemiBold;
158158
letter-spacing: -1px;
159159
margin-top:1rem;
160-
}
160+
}
161+
162+
//닉네임 모달===========================
163+
164+
.report-popup-overlay {
165+
position: fixed;
166+
top: 0;
167+
left: 0;
168+
width: 100%;
169+
height: 100%;
170+
background-color: rgba(0, 0, 0, 0.5);
171+
z-index: 100;
172+
}
173+
.change-nickname-btn{
174+
margin-top: 3.4rem;
175+
display: flex;
176+
177+
& div{
178+
width: 50%;
179+
height: 5rem;
180+
margin: 0;
181+
border: 0.5px solid #cacaca;
182+
display: flex;
183+
justify-content: center;
184+
align-items: center;
185+
font-size : 2rem;
186+
letter-Spacing : -1px;
187+
font-family: pretendard-bold;
188+
cursor: pointer;
189+
}
190+
191+
.submit-nickname{
192+
border-bottom-right-radius:1.5rem;
193+
color : #428238;
194+
195+
}
196+
197+
.close-nickname-popup {
198+
border-bottom-left-radius:1.5rem;
199+
}
200+
}
201+
.nickname-popup {
202+
z-index: 999;
203+
position: fixed;
204+
top: 50%;
205+
left: 50%;
206+
transform: translate(-50%, -50%);
207+
width: 325px;
208+
height: 205px;
209+
background-color: white;
210+
border-radius: 15px;
211+
box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
212+
213+
.nickname-title {
214+
letter-spacing: -1px;
215+
margin-top: 5rem;
216+
margin-bottom: 5%;
217+
text-align: center;
218+
font-size: 20px;
219+
font-family: pretendard-bold;
220+
}
221+
222+
.nickname-sub-title {
223+
letter-spacing: -1px;
224+
text-align: center;
225+
font-size: 1.5rem;
226+
color : #474646;
227+
margin-bottom: 0.5rem;
228+
}
229+
230+
}
231+

src/components/pages/myPage/infoEditPage.tsx

Lines changed: 86 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
import React, { useEffect, useState } from 'react';
1+
import React, { useEffect, useState, useRef } from 'react';
22
import styled from 'styled-components';
3-
import { useDispatch } from 'react-redux';
3+
import { useSelector, useDispatch } from 'react-redux';
44
import { setRewardCount } from '../../../store/actions/userActions.js';
55
import { useNavigate } from 'react-router-dom';
66
import '../../../asset/sass/pages/myPage/infoEditPage.scss';
@@ -12,7 +12,6 @@ import { ACCESS_TOKEN } from '../../global/constants';
1212
import { showErrorToast, showSuccessToast } from '../../ui/toast/toast.tsx';
1313
import { fetchAPI } from '../../global/utils/apiUtil.js';
1414
import Button from '../../ui/button/Button/Button.jsx';
15-
1615
interface UserData {
1716
email: string;
1817
nickname: string;
@@ -31,6 +30,13 @@ interface UserResponse {
3130
statusCode: string;
3231
data: UserData;
3332
}
33+
interface UserState {
34+
rewardCount: number;
35+
}
36+
37+
interface AppState {
38+
user: UserState;
39+
}
3440

3541
const Divider = styled.div`
3642
height: 1px;
@@ -64,6 +70,7 @@ const ageReverseMapping = {
6470
};
6571

6672
function InfoEditPage() {
73+
const { rewardCount } = useSelector((state: AppState) => state.user);
6774
const dispatch = useDispatch();
6875
const navigate = useNavigate();
6976
const [nickname, setNickname] = useState('');
@@ -74,6 +81,11 @@ function InfoEditPage() {
7481
const [selectedGender, setSelectedGender] = useState('');
7582
const [selectedAge, setSelectedAge] = useState('');
7683

84+
// 팝업 관련
85+
const [isShowModal, setIsShowModal] = useState(false);
86+
const [isShowNicknameModal, setIsShowNicknameModal] = useState(false);
87+
const reportMenuRef = useRef<HTMLDivElement>(null);
88+
7789
const handleSelectTag = (tag: string) => setSelectedTag(tag);
7890
const handleSelectGender = (gender: string) => setSelectedGender(gender);
7991
const handleSelectAge = (age: string) => setSelectedAge(age);
@@ -89,6 +101,40 @@ function InfoEditPage() {
89101
}
90102
}, []);
91103

104+
useEffect(() => {
105+
const handleOutsideClick = (event) => {
106+
if (
107+
reportMenuRef.current &&
108+
!reportMenuRef.current.contains(event.target)
109+
) {
110+
setIsShowModal(false);
111+
}
112+
};
113+
114+
if (isShowModal) {
115+
window.addEventListener('click', handleOutsideClick);
116+
} else {
117+
window.removeEventListener('click', handleOutsideClick);
118+
}
119+
120+
return () => {
121+
window.removeEventListener('click', handleOutsideClick);
122+
};
123+
}, [isShowModal]);
124+
125+
126+
const toggleReportPopup = () => {
127+
setIsShowModal((showReport) => !showReport);
128+
setIsShowNicknameModal((showReportModal) => !showReportModal);
129+
};
130+
131+
const handleOutSideClick = (event: React.MouseEvent<HTMLDivElement>) => {
132+
if (event?.target === event?.currentTarget) {
133+
setIsShowNicknameModal(false);
134+
}
135+
};
136+
137+
// 데이터 불러오기 관련
92138
const loadUserData = async () => {
93139
try {
94140
const data = (await fetchAPI('/api/member/me', 'GET')) as UserResponse;
@@ -142,10 +188,20 @@ function InfoEditPage() {
142188
};
143189

144190
const handleModifyNickname = async () => {
191+
145192
try {
146-
const data = await fetchAPI('/api/member/nickname', 'PATCH');
147-
setNickname(data.nickname);
148-
showSuccessToast('닉네임이 성공적으로 변경되었습니다.');
193+
if(rewardCount<20){
194+
setIsShowNicknameModal(false)
195+
showErrorToast("붕어빵 갯수가 부족합니다.")
196+
197+
}else if(rewardCount>20) {
198+
const data = await fetchAPI('/api/member/nickname', 'PATCH');
199+
setNickname(data.nickname);
200+
showSuccessToast('닉네임이 성공적으로 변경되었습니다.');
201+
setIsShowNicknameModal(false)
202+
loadUserData()
203+
}
204+
149205
} catch (error) {
150206
showErrorToast('닉네임 변경 중 예상치 못한 오류가 발생했습니다.');
151207
}
@@ -159,18 +215,41 @@ function InfoEditPage() {
159215
);
160216
};
161217

218+
219+
162220
return (
163221
<StyledPage className="main-page-container">
164222
<StyledHeader>
165223
<TitleHeader pageTitle="내 정보 수정" handleGoBack={handleGoBack} />
166224
<UserInfoHeader />
225+
167226

168227
<div className="modify-nick-container">
228+
{isShowNicknameModal && (
229+
<div onClick={handleOutSideClick} className="report-popup-overlay">
230+
<div className="nickname-popup">
231+
<div className="nickname-title">닉네임을 변경하시겠습니까?</div>
232+
<div className="nickname-sub-title">닉네임 변경 시,</div>
233+
<div className="nickname-sub-title">붕어빵 20개가 차감됩니다. </div>
234+
<div className="change-nickname-btn">
235+
<div
236+
className="close-nickname-popup"
237+
onClick={()=>{ setIsShowNicknameModal(false)}}
238+
>
239+
아니요
240+
</div>
241+
<div className="submit-nickname" onClick={handleModifyNickname}>
242+
243+
</div>
244+
</div>
245+
</div>
246+
</div>
247+
)}
169248
<div className="modify-info">
170249
<span className="modify-nick">닉네임</span>
171250
<div className="modify-nick-info">
172251
<span className="modify-nickname">{nickname}</span>
173-
<div className="modify-nickname-btn" onClick={handleModifyNickname}>
252+
<div className="modify-nickname-btn" onClick={toggleReportPopup}>
174253
변경
175254
</div>
176255
</div>

src/components/ui/calendar/calendar.tsx

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -46,11 +46,7 @@ const Box = styled.div`
4646
const DateContainer = styled(DatePicker)`
4747
width: 135px;
4848
height: 28px;
49-
50-
.react-datepicker__navigation{
51-
width:auto !impotant;
52-
}
53-
.react-datepicker__navigation--next
49+
5450
`;
5551

5652
const Slash = styled.p`

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy