Skip to content

Commit 645c527

Browse files
authored
feat: 롤링페이퍼 기능 구현 (mock api) (#35)
* feat: Tanstack query를 이용한 데이터 가져오는 커스텀 훅 useFetchQuery 구현 * feat: NoticeRollingPaper에 데이터 패칭 적용 - NoticeRolling -> NoticeRollingPaper로 컴포넌트 명 수정 * feat: 홈 페이지에 공용 컴포넌트 적용 * rename: MessageDetailModal -> CommentDetailModal 컴포넌트 명 수정 * rename: Message -> Comment 컴포넌트 명 수정 * feat: 롤링페이퍼 조회 기능 구현 * refactor: 중복되는 배경 컴포넌트 적용 및 불필요한 에셋 제거 * refactor: 중복되는 메모 배경 컴포넌트 적용 및 불필요한 에셋 제거 * remove: 중복 에셋 제거 * refactor: 중복되는 모달 배경 컴포넌트 적용 및 불필요한 에셋 제거 * style: 커스텀 훅 제거 및 queryClient 기본값 설정 * feat: 삭제 모달 추가 및 삭제 mock api 연결 * feat: 편지 추가 mock api 연결 * fix: 신고 ui 제거 * style: 사용하지 않는 코드 제거 * style: 엔드포인트 오타 수정 * style: 더미 제거
1 parent 70ae3a3 commit 645c527

38 files changed

+443
-297
lines changed

src/apis/rolling.ts

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
import client from './client';
2+
3+
export const getCurrentRollingPaper = async (): Promise<RollingPaperInformation> => {
4+
const {
5+
data: { data },
6+
} = await client.get('/api/event-posts');
7+
return data;
8+
};
9+
10+
export const getRollingPaperDetail = async (
11+
rollingPaperId: string | number,
12+
): Promise<RollingPaper> => {
13+
const {
14+
data: { data },
15+
} = await client.get(`/api/event-posts/${rollingPaperId}`);
16+
return data;
17+
};
18+
19+
export const postRollingPaperComment = async (rollingPaperId: string | number, content: string) => {
20+
const {
21+
data: { data },
22+
} = await client.post(`/api/event-posts/${rollingPaperId}/comments`, {
23+
content,
24+
});
25+
return data;
26+
};
27+
28+
export const deleteRollingPaperComment = async (commentId: string | number) => {
29+
try {
30+
const {
31+
data: { data },
32+
} = await client.delete(`/api/event-posts/comments/${commentId}`);
33+
return data;
34+
} catch (error) {
35+
console.error(error);
36+
throw error;
37+
}
38+
};

src/assets/images/letter-pink.png

-90.7 KB
Binary file not shown.

src/assets/images/memo-pink.png

-225 KB
Binary file not shown.

src/assets/images/memo-yellow.png

-292 KB
Binary file not shown.

src/assets/images/modal-pink.png

-133 KB
Binary file not shown.

src/assets/images/modal-yellow.png

-228 KB
Binary file not shown.
-1.08 KB
Binary file not shown.

src/components/ConfirmModal.tsx

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
1-
import ModalBg from '@/assets/images/modal-yellow.png';
2-
3-
import BackgroundImageWrapper from './BackgroundImageWrapper';
1+
import ModalBackgroundWrapper from './ModalBackgroundWrapper';
42
import ModalOverlay from './ModalOverlay';
53

64
interface ConfirmModalProps {
@@ -28,13 +26,13 @@ const ConfirmModal = ({
2826
return (
2927
<ModalOverlay>
3028
<div className="w-73">
31-
<BackgroundImageWrapper as="section" className="mb-12 rounded-lg p-5" imageUrl={ModalBg}>
29+
<ModalBackgroundWrapper className="relative mb-12 rounded-lg p-5">
3230
<div className="flex flex-col gap-1">
3331
<p className="body-m text-gray-80">{title}</p>
3432
<p className="caption-r text-black">{description}</p>
3533
</div>
3634
{children}
37-
</BackgroundImageWrapper>
35+
</ModalBackgroundWrapper>
3836
<section className="flex items-center gap-6">
3937
<button
4038
type="button"
Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,18 @@
11
import { twMerge } from 'tailwind-merge';
22

3-
interface ListItemWrapperProps {
3+
interface LetterWrapperProps {
44
isSender?: boolean;
55
className?: string;
66
children: React.ReactNode;
77
onClick?: (e: React.MouseEvent<HTMLElement>) => void;
88
}
99

10-
const ListItemWrapper = ({
11-
isSender = false,
12-
className,
13-
children,
14-
onClick,
15-
}: ListItemWrapperProps) => {
10+
const LetterWrapper = ({ isSender = false, className, children, onClick }: LetterWrapperProps) => {
1611
return (
1712
<article
1813
className={twMerge(
1914
'relative flex overflow-hidden rounded-sm p-4',
20-
isSender ? 'list-sender-bg' : 'list-receiver-bg',
15+
isSender ? 'letter-sender-bg' : 'letter-receiver-bg',
2116
className,
2217
)}
2318
onClick={onClick}
@@ -28,4 +23,4 @@ const ListItemWrapper = ({
2823
);
2924
};
3025

31-
export default ListItemWrapper;
26+
export default LetterWrapper;

src/components/MemoWrapper.tsx

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
import { twMerge } from 'tailwind-merge';
2+
3+
interface MemoWrapperProps {
4+
isSender?: boolean;
5+
className?: string;
6+
children: React.ReactNode;
7+
onClick?: (e: React.MouseEvent<HTMLElement>) => void;
8+
}
9+
10+
const MemoWrapper = ({ isSender = false, className, children, onClick }: MemoWrapperProps) => {
11+
return (
12+
<article
13+
className={twMerge(
14+
'relative flex overflow-hidden p-4',
15+
isSender ? 'memo-sender-bg' : 'letter-receiver-bg',
16+
className,
17+
)}
18+
onClick={onClick}
19+
>
20+
<div className="z-10 w-full">{children}</div>
21+
<div
22+
className={twMerge(
23+
'absolute inset-0 z-0 blur-xl',
24+
isSender ? 'bg-white/50' : 'bg-white/70',
25+
)}
26+
/>
27+
</article>
28+
);
29+
};
30+
31+
export default MemoWrapper;

0 commit comments

Comments
 (0)