From ada1d89a163d4e45028bbd72473d518043161acb Mon Sep 17 00:00:00 2001 From: Ji Ho June <129824629+ho0010@users.noreply.github.com> Date: Sat, 16 Aug 2025 15:35:09 +0900 Subject: [PATCH 01/10] =?UTF-8?q?feat:=20myGroupCard=20navigate=20?= =?UTF-8?q?=EB=A1=9C=EC=A7=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/group/MyGroupBox.tsx | 7 +++++++ src/components/group/MyGroupCard.tsx | 6 ++++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/components/group/MyGroupBox.tsx b/src/components/group/MyGroupBox.tsx index 09d9915d..b1e297b1 100644 --- a/src/components/group/MyGroupBox.tsx +++ b/src/components/group/MyGroupBox.tsx @@ -3,6 +3,7 @@ import { useInfiniteCarousel } from '../../hooks/useInfiniteCarousel'; import styled from '@emotion/styled'; import rightChevron from '../../assets/common/right-Chevron.svg'; import { useState, useEffect } from 'react'; +import { useNavigate } from 'react-router-dom'; import { getJoinedRooms, type JoinedRoomItem } from '@/api/rooms/getJoinedRooms'; import { colors, typography } from '@/styles/global/global'; @@ -35,6 +36,7 @@ export function MyGroupBox({ onMyGroupsClick }: MyGroupProps) { const [groups, setGroups] = useState([]); const [loading, setLoading] = useState(false); const [error, setError] = useState(null); + const navigate = useNavigate(); const fetchJoinedRooms = async () => { try { @@ -59,6 +61,10 @@ export function MyGroupBox({ onMyGroupsClick }: MyGroupProps) { fetchJoinedRooms(); }, []); + const handleCardClick = (roomId: number | string) => { + navigate(`detail/joined/${roomId}`); + }; + const { scrollRef, cardRefs, infiniteGroups } = useInfiniteCarousel(groups); return ( @@ -87,6 +93,7 @@ export function MyGroupBox({ onMyGroupsClick }: MyGroupProps) { ref={el => { cardRefs.current[i] = el; }} + onClick={() => handleCardClick(g.id)} /> ))} diff --git a/src/components/group/MyGroupCard.tsx b/src/components/group/MyGroupCard.tsx index e06586e6..8734c2b8 100644 --- a/src/components/group/MyGroupCard.tsx +++ b/src/components/group/MyGroupCard.tsx @@ -5,11 +5,13 @@ import type { Group } from './MyGroupBox'; interface MyGroupCardProps { group: Group; + onClick?: () => void; } -export const MyGroupCard = forwardRef(({ group }, ref) => { +export const MyGroupCard = forwardRef((props, ref) => { + const { group, onClick } = props; return ( - +
From c291955f5810976c9dc6d17da205d5a70fd75952 Mon Sep 17 00:00:00 2001 From: Ji Ho June <129824629+ho0010@users.noreply.github.com> Date: Sat, 16 Aug 2025 15:47:22 +0900 Subject: [PATCH 02/10] =?UTF-8?q?design:=20bannerSection=20margin-top=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/searchBook/SearchBook.styled.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/searchBook/SearchBook.styled.ts b/src/pages/searchBook/SearchBook.styled.ts index 20f5c38c..303d62da 100644 --- a/src/pages/searchBook/SearchBook.styled.ts +++ b/src/pages/searchBook/SearchBook.styled.ts @@ -59,7 +59,7 @@ export const BannerSection = styled.section` flex-direction: column; width: 100%; padding: 20px; - margin-top: 66px; + margin-top: 24%; gap: 32px; color: ${colors.white}; z-index: 10; From a60b5d4b4f1e9d79cbe91e674651ac7fc3e16d0f Mon Sep 17 00:00:00 2001 From: Ji Ho June <129824629+ho0010@users.noreply.github.com> Date: Sat, 16 Aug 2025 15:57:33 +0900 Subject: [PATCH 03/10] feat: searchBook handleWritePostButton --- src/pages/searchBook/SearchBook.tsx | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/pages/searchBook/SearchBook.tsx b/src/pages/searchBook/SearchBook.tsx index 3aeb03b7..94e6d69e 100644 --- a/src/pages/searchBook/SearchBook.tsx +++ b/src/pages/searchBook/SearchBook.tsx @@ -123,7 +123,13 @@ const SearchBook = () => { } }; - const handleWritePostButton = () => {}; + const handleWritePostButton = () => { + if (isbn) { + navigate(`/group/create?isbn=${isbn}`); + } else { + navigate('/group/create'); + } + }; const handleSaveButton = async () => { if (!isbn || isSaving) return; From 5798717d65854aee499d73d5391215df60b47e21 Mon Sep 17 00:00:00 2001 From: Ji Ho June <129824629+ho0010@users.noreply.github.com> Date: Sat, 16 Aug 2025 16:22:48 +0900 Subject: [PATCH 04/10] =?UTF-8?q?feat:=20SearchBook=EC=97=90=EC=84=9C=20Cr?= =?UTF-8?q?eateGroup=20=EC=9D=B4=EB=8F=99=20=EC=8B=9C=20=EC=B1=85=20?= =?UTF-8?q?=EB=B6=88=EB=9F=AC=EC=98=A4=EB=8A=94=20=EB=A1=9C=EC=A7=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/group/CreateGroup.tsx | 18 ++++++++++++++++-- src/pages/searchBook/SearchBook.tsx | 4 ++-- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/src/pages/group/CreateGroup.tsx b/src/pages/group/CreateGroup.tsx index 0f9e84e0..17394ef5 100644 --- a/src/pages/group/CreateGroup.tsx +++ b/src/pages/group/CreateGroup.tsx @@ -1,5 +1,5 @@ import { useState } from 'react'; -import { useNavigate } from 'react-router-dom'; +import { useNavigate, useLocation } from 'react-router-dom'; import TitleHeader from '../../components/common/TitleHeader'; import BookSearchBottomSheet from '../../components/common/BookSearchBottomSheet/BookSearchBottomSheet'; import BookSelectionSection from '../../components/creategroup/BookSelectionSection'; @@ -24,7 +24,21 @@ interface Book { const CreateGroup = () => { const navigate = useNavigate(); - const [selectedBook, setSelectedBook] = useState(null); + const location = useLocation(); + + function convertBookDetailToBook(bookDetail: any): Book | null { + if (!bookDetail) return null; + return { + title: bookDetail.title, + author: bookDetail.authorName, + cover: bookDetail.imageUrl, + isbn: bookDetail.isbn, + }; + } + + const [selectedBook, setSelectedBook] = useState( + convertBookDetailToBook(location.state?.selectedBook), + ); const [selectedGenre, setSelectedGenre] = useState(''); const [roomTitle, setRoomTitle] = useState(''); const [roomDescription, setRoomDescription] = useState(''); diff --git a/src/pages/searchBook/SearchBook.tsx b/src/pages/searchBook/SearchBook.tsx index 94e6d69e..31310934 100644 --- a/src/pages/searchBook/SearchBook.tsx +++ b/src/pages/searchBook/SearchBook.tsx @@ -124,8 +124,8 @@ const SearchBook = () => { }; const handleWritePostButton = () => { - if (isbn) { - navigate(`/group/create?isbn=${isbn}`); + if (bookDetail) { + navigate('/group/create', { state: { selectedBook: bookDetail } }); } else { navigate('/group/create'); } From 209919fca36cab913c2ae425a6f70fa3e2e576f8 Mon Sep 17 00:00:00 2001 From: Ji Ho June <129824629+ho0010@users.noreply.github.com> Date: Sat, 16 Aug 2025 16:27:34 +0900 Subject: [PATCH 05/10] =?UTF-8?q?remove:=20SearchBook=20=EB=8D=94=EB=B3=B4?= =?UTF-8?q?=EA=B8=B0=20=EB=B2=84=ED=8A=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/searchBook/SearchBook.tsx | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/pages/searchBook/SearchBook.tsx b/src/pages/searchBook/SearchBook.tsx index 31310934..b3feb3d6 100644 --- a/src/pages/searchBook/SearchBook.tsx +++ b/src/pages/searchBook/SearchBook.tsx @@ -23,7 +23,6 @@ import { } from './SearchBook.styled'; import { useNavigate, useParams } from 'react-router-dom'; import leftArrow from '../../assets/common/leftArrow.svg'; -import moreIcon from '../../assets/common/more.svg'; import { IconButton } from '@/components/common/IconButton'; import saveIcon from '../../assets/common/SaveIcon.svg'; import filledSaveIcon from '../../assets/common/filledSaveIcon.svg'; @@ -100,8 +99,6 @@ const SearchBook = () => { const handleCloseIntroModal = () => setShowIntroModal(false); - const handleMoreButton = () => {}; - const handleRecruitingGroupButton = () => { if (bookDetail) { navigate('/search/book/group', { @@ -155,7 +152,6 @@ const SearchBook = () => {
-
{isLoading ? '로딩 중...' : error || '책 정보를 찾을 수 없습니다.'} @@ -169,7 +165,6 @@ const SearchBook = () => {
-
From 69eacbb69c398828a70b26f00a9b728c376ce4a4 Mon Sep 17 00:00:00 2001 From: Ji Ho June <129824629+ho0010@users.noreply.github.com> Date: Sat, 16 Aug 2025 16:30:25 +0900 Subject: [PATCH 06/10] =?UTF-8?q?remove:=20GroupDetail=20=EB=8D=94?= =?UTF-8?q?=EB=B3=B4=EA=B8=B0=20=EB=B2=84=ED=8A=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/groupDetail/GroupDetail.tsx | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/pages/groupDetail/GroupDetail.tsx b/src/pages/groupDetail/GroupDetail.tsx index 596974b7..f38613f8 100644 --- a/src/pages/groupDetail/GroupDetail.tsx +++ b/src/pages/groupDetail/GroupDetail.tsx @@ -27,7 +27,6 @@ import { BottomButton, } from './GroupDetail.styled'; import leftArrow from '../../assets/common/leftArrow.svg'; -import moreIcon from '../../assets/common/more.svg'; import { useNavigate, useParams } from 'react-router-dom'; import { IconButton } from '@/components/common/IconButton'; import lockIcon from '../../assets/group/lock.svg'; @@ -54,8 +53,6 @@ const GroupDetail = () => { navigate(-1); }; - const handleMoreButton = () => {}; - const convertRecommendRoomToGroup = (room: RecommendRoom): Group => { return { id: room.roomId.toString(), @@ -139,7 +136,6 @@ const GroupDetail = () => {
-
From 798057063ea081964b7c7475cc40ca4570b6d148 Mon Sep 17 00:00:00 2001 From: Ji Ho June <129824629+ho0010@users.noreply.github.com> Date: Sat, 16 Aug 2025 16:49:05 +0900 Subject: [PATCH 07/10] =?UTF-8?q?feat:=20=EB=AA=A8=EC=A7=91=EC=A4=91?= =?UTF-8?q?=EC=9D=B8=20=EB=AA=A8=EC=9E=84=EB=B0=A9=EC=97=90=EC=84=9C=20?= =?UTF-8?q?=EB=AA=A8=EC=9E=84=EB=B0=A9=20=EB=A7=8C=EB=93=A4=EA=B8=B0?= =?UTF-8?q?=EC=97=90=EC=84=9C=20=EC=B1=85=20=EB=B6=88=EB=9F=AC=EC=98=A4?= =?UTF-8?q?=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/group/CreateGroup.tsx | 14 +++++++------- src/pages/searchBook/SearchBook.tsx | 2 +- src/pages/searchBook/SearchBookGroup.tsx | 10 +++++++++- 3 files changed, 17 insertions(+), 9 deletions(-) diff --git a/src/pages/group/CreateGroup.tsx b/src/pages/group/CreateGroup.tsx index 17394ef5..845b3326 100644 --- a/src/pages/group/CreateGroup.tsx +++ b/src/pages/group/CreateGroup.tsx @@ -26,18 +26,18 @@ const CreateGroup = () => { const navigate = useNavigate(); const location = useLocation(); - function convertBookDetailToBook(bookDetail: any): Book | null { - if (!bookDetail) return null; + function convertBookInfoToBook(bookInfo: any): Book | null { + if (!bookInfo) return null; return { - title: bookDetail.title, - author: bookDetail.authorName, - cover: bookDetail.imageUrl, - isbn: bookDetail.isbn, + title: bookInfo.title, + author: bookInfo.author, + cover: bookInfo.cover, + isbn: bookInfo.isbn, }; } const [selectedBook, setSelectedBook] = useState( - convertBookDetailToBook(location.state?.selectedBook), + convertBookInfoToBook(location.state?.selectedBook ?? location.state?.bookInfo), ); const [selectedGenre, setSelectedGenre] = useState(''); const [roomTitle, setRoomTitle] = useState(''); diff --git a/src/pages/searchBook/SearchBook.tsx b/src/pages/searchBook/SearchBook.tsx index b3feb3d6..c1258224 100644 --- a/src/pages/searchBook/SearchBook.tsx +++ b/src/pages/searchBook/SearchBook.tsx @@ -182,7 +182,7 @@ const SearchBook = () => { 오른쪽 화살표 아이콘 - + 피드에 글쓰기 더하기 아이콘 diff --git a/src/pages/searchBook/SearchBookGroup.tsx b/src/pages/searchBook/SearchBookGroup.tsx index 7db261db..c3aff3d3 100644 --- a/src/pages/searchBook/SearchBookGroup.tsx +++ b/src/pages/searchBook/SearchBookGroup.tsx @@ -24,7 +24,15 @@ const SearchBookGroup = () => { const handleBackButton = () => { navigate(-1); }; - const handleMakeGroup = () => {}; + const handleMakeGroup = () => { + const selectedBook = { + title: bookInfo.title, + author: bookInfo.author, + cover: bookInfo.imageUrl, + isbn: bookInfo.isbn, + }; + navigate('/group/create', { state: { selectedBook } }); + }; const groupList = recruitingRooms?.recruitingRoomList || []; const totalCount = recruitingRooms?.totalRoomCount || 0; From 5b61563cc74df1ef8c2e7975c891cd430420c968 Mon Sep 17 00:00:00 2001 From: Ji Ho June <129824629+ho0010@users.noreply.github.com> Date: Sat, 16 Aug 2025 16:55:26 +0900 Subject: [PATCH 08/10] =?UTF-8?q?feat:=20book=EC=97=90=EC=84=9C=20?= =?UTF-8?q?=ED=94=BC=EB=93=9C=EC=97=90=20=EA=B8=80=EC=93=B0=EA=B8=B0=20?= =?UTF-8?q?=EB=B2=84=ED=8A=BC=20=EB=A1=9C=EC=A7=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/group/CreateGroup.tsx | 2 +- src/pages/post/CreatePost.tsx | 20 +++++++++++++++++--- src/pages/searchBook/SearchBook.tsx | 12 +++++++++--- 3 files changed, 27 insertions(+), 7 deletions(-) diff --git a/src/pages/group/CreateGroup.tsx b/src/pages/group/CreateGroup.tsx index 845b3326..e405b9ae 100644 --- a/src/pages/group/CreateGroup.tsx +++ b/src/pages/group/CreateGroup.tsx @@ -26,7 +26,7 @@ const CreateGroup = () => { const navigate = useNavigate(); const location = useLocation(); - function convertBookInfoToBook(bookInfo: any): Book | null { + function convertBookInfoToBook(bookInfo: Book): Book | null { if (!bookInfo) return null; return { title: bookInfo.title, diff --git a/src/pages/post/CreatePost.tsx b/src/pages/post/CreatePost.tsx index 9cf4885b..3c36d722 100644 --- a/src/pages/post/CreatePost.tsx +++ b/src/pages/post/CreatePost.tsx @@ -1,5 +1,5 @@ import { useState } from 'react'; -import { useNavigate } from 'react-router-dom'; +import { useNavigate, useLocation } from 'react-router-dom'; import TitleHeader from '../../components/common/TitleHeader'; import BookSearchBottomSheet from '../../components/common/BookSearchBottomSheet/BookSearchBottomSheet'; import BookSelectionSection from '../../components/creategroup/BookSelectionSection'; @@ -34,7 +34,7 @@ const makeIsbnCandidates = (raw: string) => { }; interface Book { - id: number; + id?: number; title: string; author: string; cover: string; @@ -43,7 +43,21 @@ interface Book { const CreatePost = () => { const navigate = useNavigate(); - const [selectedBook, setSelectedBook] = useState(null); + const location = useLocation(); + + function convertBookInfoToBook(bookInfo: Book): Book | null { + if (!bookInfo) return null; + return { + title: bookInfo.title, + author: bookInfo.author, + cover: bookInfo.cover, + isbn: bookInfo.isbn, + }; + } + + const [selectedBook, setSelectedBook] = useState( + convertBookInfoToBook(location.state?.selectedBook), + ); const [postContent, setPostContent] = useState(''); const [selectedPhotos, setSelectedPhotos] = useState([]); const [isPrivate, setIsPrivate] = useState(false); diff --git a/src/pages/searchBook/SearchBook.tsx b/src/pages/searchBook/SearchBook.tsx index c1258224..287dfcf6 100644 --- a/src/pages/searchBook/SearchBook.tsx +++ b/src/pages/searchBook/SearchBook.tsx @@ -122,9 +122,15 @@ const SearchBook = () => { const handleWritePostButton = () => { if (bookDetail) { - navigate('/group/create', { state: { selectedBook: bookDetail } }); + const selectedBook = { + title: bookDetail.title, + author: bookDetail.authorName, + cover: bookDetail.imageUrl, + isbn: bookDetail.isbn, + }; + navigate('/post/create', { state: { selectedBook } }); } else { - navigate('/group/create'); + navigate('/post/create'); } }; @@ -182,7 +188,7 @@ const SearchBook = () => { 오른쪽 화살표 아이콘 - + 피드에 글쓰기 더하기 아이콘 From 3d0f8c7053e6c4db7e1c6c1034411db7721e7c71 Mon Sep 17 00:00:00 2001 From: Ji Ho June <129824629+ho0010@users.noreply.github.com> Date: Sat, 16 Aug 2025 16:59:55 +0900 Subject: [PATCH 09/10] =?UTF-8?q?feat:=20GroupDetail=EC=97=90=EC=84=9C=20B?= =?UTF-8?q?ook=20Click=20=EB=A1=9C=EC=A7=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/groupDetail/GroupDetail.tsx | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/pages/groupDetail/GroupDetail.tsx b/src/pages/groupDetail/GroupDetail.tsx index f38613f8..910d2334 100644 --- a/src/pages/groupDetail/GroupDetail.tsx +++ b/src/pages/groupDetail/GroupDetail.tsx @@ -131,6 +131,13 @@ const GroupDetail = () => { recommendRooms, } = roomData; + const handleBookSectionClick = () => { + const isbn = roomData?.isbn; + if (isbn) { + navigate(`/search/book/${isbn}`); + } + }; + return ( @@ -175,10 +182,10 @@ const GroupDetail = () => {
- +

{bookTitle}

- +
From 3d7a9991b2615300769230efc5a4aac223996587 Mon Sep 17 00:00:00 2001 From: Ji Ho June <129824629+ho0010@users.noreply.github.com> Date: Sat, 16 Aug 2025 17:02:26 +0900 Subject: [PATCH 10/10] =?UTF-8?q?feat:=20GroupDetail=EC=97=90=EC=84=9C=20?= =?UTF-8?q?=EC=B6=94=EC=B2=9C=20=EB=AA=A8=EC=9E=84=EB=B0=A9=20=ED=81=B4?= =?UTF-8?q?=EB=A6=AD=20=EC=9D=B4=EB=B2=A4=ED=8A=B8=20=EB=A1=9C=EC=A7=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/groupDetail/GroupDetail.tsx | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/pages/groupDetail/GroupDetail.tsx b/src/pages/groupDetail/GroupDetail.tsx index 910d2334..ac9e5440 100644 --- a/src/pages/groupDetail/GroupDetail.tsx +++ b/src/pages/groupDetail/GroupDetail.tsx @@ -138,6 +138,10 @@ const GroupDetail = () => { } }; + const handleRecommendGroupCardClick = (roomId: number | string) => { + navigate(`/group/detail/${roomId}`); + }; + return ( @@ -208,6 +212,7 @@ const GroupDetail = () => { isOngoing={true} isRecommend={true} type={'modal'} + onClick={() => handleRecommendGroupCardClick(room.roomId)} /> ))}