Skip to content

Commit fba77e3

Browse files
authored
[SSD-152] feat: 타임페이퍼 잠금 페이지 예외처리 (#90)
1 parent f5a2235 commit fba77e3

File tree

3 files changed

+32
-22
lines changed

3 files changed

+32
-22
lines changed

frontend/src/pages/time-paper-detail/TimePaperDetail.jsx

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@ export default function TimePaperDetail() {
2323
const [selectedPostit, setSelectedPostit] = useState(null); // 선택된 포스트잇 저장
2424
const [isError, setIsError] = useState(false);
2525
const [errorMessage, setErrorMessage] = useState('');
26+
27+
const [isScrollLoading, setIsScrollLoading] = useState(false)
2628
const navigate = useNavigate();
2729
const dispatch = useDispatch();
2830

@@ -40,7 +42,6 @@ export default function TimePaperDetail() {
4042
dispatch(startLoading());
4143
try {
4244
const timePaperResponse = await api.getTimepaper(timepaperId);
43-
console.log(timePaperResponse.data.data);
4445
if (timePaperResponse && timePaperResponse.data && timePaperResponse.data.data) {
4546
const timePaperData = timePaperResponse.data.data;
4647
if (timePaperData.locked) {
@@ -72,17 +73,18 @@ export default function TimePaperDetail() {
7273
}
7374

7475
dispatch(startLoading());
76+
setIsScrollLoading(true)
7577

7678
try {
7779
const response = await api.getPostits(timepaperId, currentPage);
7880
const postits = response.data.data.postits;
7981
const next = response.data.data.hasNext;
80-
console.log(hasNext);
8182
setHasNext(next);
8283
setPostits((prev) => [...prev, ...postits]);
8384
} catch {
8485
} finally {
8586
dispatch(finishLoading());
87+
setIsScrollLoading(false)
8688
}
8789
};
8890

@@ -131,14 +133,11 @@ export default function TimePaperDetail() {
131133

132134
const handleScroll = useCallback(
133135
([entry], observer) => {
134-
if (entry.isIntersecting && hasNext && !isFirstRender && !isLoading) {
135-
console.log(hasNext);
136-
console.log(!isFirstRender);
137-
console.log(!isLoading);
136+
if (entry.isIntersecting && hasNext && !isFirstRender && !isScrollLoading) {
138137
setCurrentPage(currentPage + 1);
139138
}
140139
},
141-
[currentPage, isFirstRender, isLoading, hasNext],
140+
[currentPage, isFirstRender, isScrollLoading, hasNext],
142141
);
143142

144143
useEffect(() => {
@@ -245,6 +244,7 @@ export default function TimePaperDetail() {
245244
</div>
246245
</div>
247246
<div ref={bottomRef}></div>
247+
{isScrollLoading && <div>로딩중......</div>}
248248
</>
249249
);
250250
}

frontend/src/pages/time-paper-detail/TimePaperDetail.module.css

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,15 +42,17 @@
4242

4343
.overlay {
4444
position: absolute;
45-
top: 20%;
45+
top: 30%;
4646
left: 0;
47+
bottom: 0%;
4748
width: 100%;
48-
height: 100%;
49+
height: 60%;
4950
display: flex;
5051
justify-content: flex-start;
5152
align-items: flex-start;
5253
overflow: auto;
53-
padding: 16px;
54+
padding-left: 16px;
55+
padding-right: 16px;
5456
box-sizing: border-box;
5557
}
5658

frontend/src/pages/time-paper-set-lock/TimePaperSetLock.jsx

Lines changed: 20 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,17 @@ import 'react-datepicker/dist/react-datepicker.css';
88
import { api } from '../../api/api';
99
import { useDispatch } from 'react-redux';
1010
import { setPageTitle } from '../../store/slices/headerSlice';
11+
import { finishLoading, startLoading } from '../../store/slices/loadingSlice';
12+
import Alert from '../../components/Alert/Alert';
1113

1214
export default function TimePaperSetLock() {
1315
const [email, setEmail] = useState('');
14-
const [loading, setLoading] = useState(false);
1516
const [error, setError] = useState(false);
1617
const [errorMessage, setErrorMessage] = useState('제목을 입력해주세요.');
1718
const [releaseDate, setReleaseDate] = useState(null);
18-
const [isLoginButtonEnable, setIsLoginButtonEnable] = useState(false);
19+
const [isCapsuleButtonEnable, setIsCapsuleButtonEnable] = useState(false);
20+
const [isShowAlert, setIsShowAlert] = useState(false);
21+
const [alertMessage, setAlertMessage] = useState('');
1922
const { timepaperId } = useParams();
2023
const navigate = useNavigate();
2124
const location = useLocation();
@@ -37,41 +40,46 @@ export default function TimePaperSetLock() {
3740

3841
const handleSubmit = async (e) => {
3942
e.preventDefault();
40-
setIsLoginButtonEnable(false);
43+
setIsCapsuleButtonEnable(false);
4144

42-
setLoading(true);
45+
dispatch(startLoading());
4346

4447
try {
4548
const response = await api.lockTimepaper(timepaperId, email, releaseDate);
4649
navigate(`/timepaper/${response.id}/lock`, { replace: true });
4750
} catch (err) {
4851
console.error(err);
49-
setError(true);
50-
setErrorMessage('타임페이퍼 캡슐화 중 오류가 발생했습니다.');
52+
setIsShowAlert(true)
53+
setAlertMessage('타임페이퍼 캡슐화 중 오류가 발생했습니다.');
5154
} finally {
52-
setLoading(false);
53-
setIsLoginButtonEnable(true);
55+
dispatch(finishLoading());
56+
setIsCapsuleButtonEnable(true);
5457
}
5558
};
5659

5760
useEffect(() => {
5861
if (!error && email.trim().length !== 0 && releaseDate !== null) {
59-
setIsLoginButtonEnable(true);
62+
setIsCapsuleButtonEnable(true);
6063
} else {
61-
setIsLoginButtonEnable(false);
64+
setIsCapsuleButtonEnable(false);
6265
}
6366
}, [email, releaseDate]);
6467

6568
useEffect(() => {
6669
dispatch(setPageTitle('타임캡슐 생성'));
6770
}, []);
6871

72+
const handleAlertButtonClick = () => {
73+
setIsShowAlert(false);
74+
};
75+
6976
if (!location.state?.authorEmail) {
7077
return <Navigate to="/404" replace />;
7178
}
7279

7380
return (
7481
<>
82+
{isShowAlert && <Alert message={alertMessage} buttonTitle={"확인"} onClick={handleAlertButtonClick}></Alert>}
7583
<form>
7684
<div className={styles.container}>
7785
<div className={styles.inputContainer}>
@@ -101,9 +109,9 @@ export default function TimePaperSetLock() {
101109
</div>
102110
</div>
103111
<BottomButton
104-
title={loading ? '시간 자물쇠 거는 중...' : '타임페이퍼 캡슐화'}
112+
title={'타임페이퍼 캡슐화'}
105113
onClick={handleSubmit}
106-
isEnable={isLoginButtonEnable}
114+
isEnable={isCapsuleButtonEnable}
107115
/>
108116
</div>
109117
</form>

0 commit comments

Comments
 (0)