@@ -18,6 +18,8 @@ import SearchBar from "@/components/common/SearchBar";
1818import SearchButton from "@/components/common/SearchButton" ;
1919import Select from "@/components/common/Select" ;
2020
21+ import NeedLoginToGuest from "@/components/modal/NeedLoginToGuest.jsx" ;
22+
2123const GROUP_PARAMS = "group" ;
2224
2325const options = [
@@ -29,6 +31,7 @@ const options = [
2931
3032
3133export default function Group ( ) {
34+ const [ isLogin , setLogin ] = useState ( false ) ;
3235 const [ isModalOpen , setIsModalOpen ] = useState ( false ) ;
3336 const [ currentPage , setCurrentPage ] = useState ( 1 ) ;
3437 const [ searchTerm , setSearchTerm ] = useState ( "" ) ;
@@ -41,6 +44,7 @@ export default function Group() {
4144 const [ selectedGroupId , setSelectedGroupId ] = useState ( null ) ;
4245 const [ searchResult , setSearchResult ] = useState ( [ ] ) ;
4346 const [ isSearching , setIsSearching ] = useState ( false ) ;
47+ const [ isShowLogin , setIsShowLogin ] = useState ( false ) ;
4448 const navigate = useNavigate ( ) ;
4549 const tabName = searchParams . get ( GROUP_PARAMS ) || "Public" ;
4650 const isPublic = tabName === "Public" ;
@@ -51,8 +55,10 @@ export default function Group() {
5155 try {
5256 const userInfo = await userService . getUserInfo ( ) ;
5357 setMyId ( userInfo . data . id ) ;
58+ setLogin ( true ) ;
5459 } catch {
55- addToast ( "사용자 정보를 불러오는 중 오류가 발생했습니다." ) ;
60+ setLogin ( false ) ;
61+ if ( isLogin ) addToast ( "사용자 정보를 불러오는 중 오류가 발생했습니다." ) ;
5662 }
5763 } ;
5864
@@ -78,7 +84,7 @@ export default function Group() {
7884 throw new Error ( "그룹 목록 조회 실패" ) ;
7985 }
8086 } catch {
81- addToast ( "그룹 목록 조회에 실패했습니다." ) ;
87+ if ( isLogin ) addToast ( "그룹 목록 조회에 실패했습니다." ) ;
8288 }
8389 } ;
8490
@@ -88,6 +94,17 @@ export default function Group() {
8894 useEffect ( ( ) => {
8995 setSortBy ( searchParams . get ( "sortBy" ) || "mostLiked" ) ;
9096 } , [ searchParams ] ) ;
97+
98+ const handleLoginModal = ( type ) => {
99+ switch ( type ) {
100+ case "register" :
101+ navigate ( "/login" ) ;
102+ break ;
103+ case "guest" :
104+ setIsShowLogin ( false ) ;
105+ break ;
106+ }
107+ }
91108
92109 const handleSearch = async ( ) => {
93110 if ( ! searchTerm . trim ( ) ) {
@@ -109,7 +126,7 @@ export default function Group() {
109126 throw new Error ( "검색 실패" ) ;
110127 }
111128 } catch {
112- addToast ( "검색 결과를 불러오는 중 오류가 발생했습니다." ) ;
129+ if ( isLogin ) addToast ( "검색 결과를 불러오는 중 오류가 발생했습니다." ) ;
113130 }
114131 } ;
115132
@@ -151,7 +168,7 @@ export default function Group() {
151168 navigate ( `/group/${ groupId } ` ) ;
152169
153170 } catch {
154- addToast ( "그룹 정보 조회 중 오류가 발생했습니다." ) ;
171+ if ( isLogin ) addToast ( "그룹 정보 조회 중 오류가 발생했습니다." ) ;
155172 }
156173 } ;
157174
@@ -256,7 +273,7 @@ export default function Group() {
256273 </ p >
257274 < p className = "text-sm text-gray-400" > 가장 먼저 그룹을 만들어보세요!</ p >
258275 { ! isSearching && (
259- < button onClick = { ( ) => setIsModalOpen ( true ) }
276+ < button onClick = { ( ) => isLogin ? setIsModalOpen ( true ) : setIsShowLogin ( true ) }
260277 className = "mt-4 px-5 py-2 bg-normalViolet hover:bg-normalViolet-hover active:bg-normalViolet-active text-white text-sm font-medium rounded-md" >
261278 그룹 만들기
262279 </ button >
@@ -282,6 +299,7 @@ export default function Group() {
282299 onPageChange = { setCurrentPage }
283300 />
284301 </ div >
302+ { isShowLogin && < NeedLoginToGuest onClick = { handleLoginModal } /> }
285303 </ div >
286304 ) ;
287305}
0 commit comments