From 46d61e5dd62a74515303ad1cad6cbb2cca649359 Mon Sep 17 00:00:00 2001 From: syddl0 <137189866+shroqkf@users.noreply.github.com> Date: Mon, 19 May 2025 14:40:28 +0900 Subject: [PATCH 1/7] =?UTF-8?q?Chore:=20svg=20=ED=8C=8C=EC=9D=BC=20?= =?UTF-8?q?=EC=A0=95=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/svgs/{ => common}/Ic_All.svg | 0 public/svgs/{ => common}/Ic_Arrow_Left.svg | 0 public/svgs/{ => common}/Ic_Heart-Empty.svg | 0 public/svgs/{ => common}/Ic_Heart_Fill.svg | 0 public/svgs/{ => common}/Ic_X.svg | 0 public/svgs/{ => common}/Ic_X_Btn.svg | 0 public/svgs/{ => common}/favicon.svg | 0 src/pages/join/components/GoHome.jsx | 2 +- src/pages/join/components/LocationStep.jsx | 4 ++-- src/pages/join/components/NameStep.jsx | 4 ++-- src/pages/join/components/OwnerStep.jsx | 2 +- src/pages/join/components/ProfileImageStep.jsx | 2 +- src/pages/map/MapPage.jsx | 4 ++-- src/pages/map/components/IntroModal.jsx | 2 +- src/pages/map/components/PlaceBottomSheet.jsx | 6 +++++- src/pages/map/components/PlaceContent.jsx | 10 ++++++---- src/pages/search/components/RecentSearchList.jsx | 2 +- src/pages/search/components/SearchBar.jsx | 2 +- src/pages/support/components/ConsumerTab.jsx | 6 +++++- 19 files changed, 28 insertions(+), 18 deletions(-) rename public/svgs/{ => common}/Ic_All.svg (100%) rename public/svgs/{ => common}/Ic_Arrow_Left.svg (100%) rename public/svgs/{ => common}/Ic_Heart-Empty.svg (100%) rename public/svgs/{ => common}/Ic_Heart_Fill.svg (100%) rename public/svgs/{ => common}/Ic_X.svg (100%) rename public/svgs/{ => common}/Ic_X_Btn.svg (100%) rename public/svgs/{ => common}/favicon.svg (100%) diff --git a/public/svgs/Ic_All.svg b/public/svgs/common/Ic_All.svg similarity index 100% rename from public/svgs/Ic_All.svg rename to public/svgs/common/Ic_All.svg diff --git a/public/svgs/Ic_Arrow_Left.svg b/public/svgs/common/Ic_Arrow_Left.svg similarity index 100% rename from public/svgs/Ic_Arrow_Left.svg rename to public/svgs/common/Ic_Arrow_Left.svg diff --git a/public/svgs/Ic_Heart-Empty.svg b/public/svgs/common/Ic_Heart-Empty.svg similarity index 100% rename from public/svgs/Ic_Heart-Empty.svg rename to public/svgs/common/Ic_Heart-Empty.svg diff --git a/public/svgs/Ic_Heart_Fill.svg b/public/svgs/common/Ic_Heart_Fill.svg similarity index 100% rename from public/svgs/Ic_Heart_Fill.svg rename to public/svgs/common/Ic_Heart_Fill.svg diff --git a/public/svgs/Ic_X.svg b/public/svgs/common/Ic_X.svg similarity index 100% rename from public/svgs/Ic_X.svg rename to public/svgs/common/Ic_X.svg diff --git a/public/svgs/Ic_X_Btn.svg b/public/svgs/common/Ic_X_Btn.svg similarity index 100% rename from public/svgs/Ic_X_Btn.svg rename to public/svgs/common/Ic_X_Btn.svg diff --git a/public/svgs/favicon.svg b/public/svgs/common/favicon.svg similarity index 100% rename from public/svgs/favicon.svg rename to public/svgs/common/favicon.svg diff --git a/src/pages/join/components/GoHome.jsx b/src/pages/join/components/GoHome.jsx index 6e5d7e1..775c4ac 100644 --- a/src/pages/join/components/GoHome.jsx +++ b/src/pages/join/components/GoHome.jsx @@ -1,5 +1,5 @@ import { ImgDone } from "@assets/svgs/signup"; -import BackIcon from "/svgs/Ic_Arrow_Left.svg"; +import BackIcon from "/svgs/common/Ic_Arrow_Left.svg"; const GoHome = ({ onNext, onBack }) => { const handleSubmit = () => { diff --git a/src/pages/join/components/LocationStep.jsx b/src/pages/join/components/LocationStep.jsx index 86b5b95..3e85bf2 100644 --- a/src/pages/join/components/LocationStep.jsx +++ b/src/pages/join/components/LocationStep.jsx @@ -1,6 +1,6 @@ import { useState, useRef } from "react"; -import XIcon from "/svgs/Ic_X_Btn.svg"; -import BackIcon from "/svgs/Ic_Arrow_Left.svg"; +import XIcon from "/svgs/common/Ic_X_Btn.svg"; +import BackIcon from "/svgs/common/Ic_Arrow_Left.svg"; import { IcCheck, IcNonCheck } from "@assets/svgs/signup"; import useBottomOffset from "../hooks/useBottomOffset"; diff --git a/src/pages/join/components/NameStep.jsx b/src/pages/join/components/NameStep.jsx index 32d3f2f..9d90d4e 100644 --- a/src/pages/join/components/NameStep.jsx +++ b/src/pages/join/components/NameStep.jsx @@ -1,6 +1,6 @@ import { useState, useRef } from "react"; -import XIcon from "/svgs/Ic_X_Btn.svg"; -import BackIcon from "/svgs/Ic_Arrow_Left.svg"; +import XIcon from "/svgs/common/Ic_X_Btn.svg"; +import BackIcon from "/svgs/common/Ic_Arrow_Left.svg"; import useBottomOffset from "../hooks/useBottomOffset"; const NameStep = ({ onNext, onBack }) => { diff --git a/src/pages/join/components/OwnerStep.jsx b/src/pages/join/components/OwnerStep.jsx index ddb903a..5b98dca 100644 --- a/src/pages/join/components/OwnerStep.jsx +++ b/src/pages/join/components/OwnerStep.jsx @@ -1,5 +1,5 @@ import { useState } from "react"; -import BackIcon from "/svgs/Ic_Arrow_Left.svg"; +import BackIcon from "/svgs/common/Ic_Arrow_Left.svg"; import { IcCheck, IcUnselected } from "@assets/svgs/signup"; const OwnerStep = ({ onNext, onBack }) => { diff --git a/src/pages/join/components/ProfileImageStep.jsx b/src/pages/join/components/ProfileImageStep.jsx index fb1d04d..2d2dff8 100644 --- a/src/pages/join/components/ProfileImageStep.jsx +++ b/src/pages/join/components/ProfileImageStep.jsx @@ -1,5 +1,5 @@ import { useState } from "react"; -import BackIcon from "/svgs/Ic_Arrow_Left.svg"; +import BackIcon from "/svgs/common/Ic_Arrow_Left.svg"; import { IcCheck, ImgOrange, diff --git a/src/pages/map/MapPage.jsx b/src/pages/map/MapPage.jsx index 250d943..cff6c1e 100644 --- a/src/pages/map/MapPage.jsx +++ b/src/pages/map/MapPage.jsx @@ -190,8 +190,8 @@ const MapPage = () => { 찜 필터 { aria-label="닫기" > 닫기 diff --git a/src/pages/map/components/PlaceBottomSheet.jsx b/src/pages/map/components/PlaceBottomSheet.jsx index aa7e5da..0a76f1b 100644 --- a/src/pages/map/components/PlaceBottomSheet.jsx +++ b/src/pages/map/components/PlaceBottomSheet.jsx @@ -155,7 +155,11 @@ const PlaceBottomSheet = ({ className="absolute top-3 right-3 p-2 z-10" aria-label="닫기" > - 닫기 버튼 + 닫기 버튼 )} diff --git a/src/pages/map/components/PlaceContent.jsx b/src/pages/map/components/PlaceContent.jsx index 74807c5..f8a4140 100644 --- a/src/pages/map/components/PlaceContent.jsx +++ b/src/pages/map/components/PlaceContent.jsx @@ -129,9 +129,7 @@ const PlaceContent = ({ place, onToggleLike, showMapLink = true }) => { {temperature}도 - - 방문자 리뷰 {reviewCount} - + 방문자 리뷰 {reviewCount}

@@ -176,7 +174,11 @@ const PlaceContent = ({ place, onToggleLike, showMapLink = true }) => { className="w-14 h-14 flex items-center justify-center rounded-md bg-gray-2" > 좋아요 버튼 diff --git a/src/pages/search/components/RecentSearchList.jsx b/src/pages/search/components/RecentSearchList.jsx index 655d37b..4277a9b 100644 --- a/src/pages/search/components/RecentSearchList.jsx +++ b/src/pages/search/components/RecentSearchList.jsx @@ -26,7 +26,7 @@ const RecentSearchList = ({ recentSearches, onSearch, setRecentSearches }) => { }} > 삭제 diff --git a/src/pages/search/components/SearchBar.jsx b/src/pages/search/components/SearchBar.jsx index 5a98a5a..d2bf170 100644 --- a/src/pages/search/components/SearchBar.jsx +++ b/src/pages/search/components/SearchBar.jsx @@ -6,7 +6,7 @@ const SearchBar = ({ keyword, setKeyword, onSearch, onFocus }) => { return (
diff --git a/src/pages/support/components/ConsumerTab.jsx b/src/pages/support/components/ConsumerTab.jsx index fd57efa..33cdff0 100644 --- a/src/pages/support/components/ConsumerTab.jsx +++ b/src/pages/support/components/ConsumerTab.jsx @@ -68,7 +68,11 @@ const ConsumerTab = () => { onClick={() => navigate("/consumer/list")} >

전체 보기

- 전체 보기 + 전체 보기
{topCategory && ( From 010fe682ab09f7822e5714903ba99208e9c94e89 Mon Sep 17 00:00:00 2001 From: syddl0 <137189866+shroqkf@users.noreply.github.com> Date: Mon, 19 May 2025 16:59:11 +0900 Subject: [PATCH 2/7] =?UTF-8?q?Refactor:=20=EC=98=A8=EB=8F=84=20=ED=91=9C?= =?UTF-8?q?=EA=B8=B0=20=EC=A0=95=EC=88=98=EB=A1=9C=20=EB=90=98=EB=8F=84?= =?UTF-8?q?=EB=A1=9D=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/map/components/PlaceContent.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/map/components/PlaceContent.jsx b/src/pages/map/components/PlaceContent.jsx index f8a4140..e58e80a 100644 --- a/src/pages/map/components/PlaceContent.jsx +++ b/src/pages/map/components/PlaceContent.jsx @@ -127,7 +127,7 @@ const PlaceContent = ({ place, onToggleLike, showMapLink = true }) => {

- {temperature}도 + {temperature.toFixed(0)}도 방문자 리뷰 {reviewCount}

From 77287cc8765c40f1a83d1a6e295cc3eda047edcb Mon Sep 17 00:00:00 2001 From: syddl0 <137189866+shroqkf@users.noreply.github.com> Date: Mon, 19 May 2025 17:16:45 +0900 Subject: [PATCH 3/7] =?UTF-8?q?Fix:=20=EA=B2=80=EC=83=89=EB=90=9C=20?= =?UTF-8?q?=ED=95=80=20=EB=88=84=EB=A5=B4=EB=A9=B4=20=EB=8B=A4=EC=8B=9C=20?= =?UTF-8?q?=EB=B0=94=ED=85=80=EC=8B=9C=ED=8A=B8=20=EC=97=B4=EB=A6=AC?= =?UTF-8?q?=EB=8F=84=EB=A1=9D=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/search/SearchPage.jsx | 2 +- src/pages/search/hooks/useMapViewer.js | 13 +------------ 2 files changed, 2 insertions(+), 13 deletions(-) diff --git a/src/pages/search/SearchPage.jsx b/src/pages/search/SearchPage.jsx index 993b4d5..e865134 100644 --- a/src/pages/search/SearchPage.jsx +++ b/src/pages/search/SearchPage.jsx @@ -226,7 +226,7 @@ const SearchPage = () => { {step === 5 && (
{ handleMarkerClick(place); - console.log("marker"); }); }); - - if (markerPosition) { - new window.naver.maps.Marker({ - position: new window.naver.maps.LatLng( - markerPosition.lat, - markerPosition.lng, - ), - map: mapInstance.current, - icon: createMarkerIcon(true), - }); - } }); }, [ userCoords, From 056b38a1a4f73a4e5574b595169393baff57a9cd Mon Sep 17 00:00:00 2001 From: syddl0 <137189866+shroqkf@users.noreply.github.com> Date: Mon, 19 May 2025 17:25:26 +0900 Subject: [PATCH 4/7] =?UTF-8?q?Design:=20=EC=9D=B4=EB=A6=84=20=EC=9E=85?= =?UTF-8?q?=EB=A0=A5=20=EB=8B=A8=EA=B3=84=20=EB=92=A4=EB=A1=9C=EA=B0=80?= =?UTF-8?q?=EA=B8=B0=20=EB=B2=84=ED=8A=BC=20=EC=9C=84=EC=B9=98=20=EC=A1=B0?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/join/components/NameStep.jsx | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/src/pages/join/components/NameStep.jsx b/src/pages/join/components/NameStep.jsx index 9d90d4e..2668c96 100644 --- a/src/pages/join/components/NameStep.jsx +++ b/src/pages/join/components/NameStep.jsx @@ -21,13 +21,11 @@ const NameStep = ({ onNext, onBack }) => { onSubmit={handleSubmit} className="flex flex-col justify-start mt-48 bg-white h-screen overflow-auto relative" > - +
+ +

이름을 입력해주세요.

@@ -79,9 +77,7 @@ const NameStep = ({ onNext, onBack }) => { type="submit" disabled={!name.trim()} className={`w-full py-6 text-center b1 ${ - name.trim() - ? "bg-primary-8 text-white" - : "bg-gray-4 text-white" + name.trim() ? "bg-primary-8 text-white" : "bg-gray-4 text-white" }`} > 확인 From 3cad75a91e6ed49855256bfed99354791f46fa65 Mon Sep 17 00:00:00 2001 From: syddl0 <137189866+shroqkf@users.noreply.github.com> Date: Mon, 19 May 2025 17:29:28 +0900 Subject: [PATCH 5/7] =?UTF-8?q?Feat:=20authStore=EC=97=90=20isSignedUp=20?= =?UTF-8?q?=EC=83=81=ED=83=9C=20=EC=B6=94=EA=B0=80=20=EB=B0=8F=20=EA=B0=80?= =?UTF-8?q?=EC=9E=85=20=EC=99=84=EB=A3=8C=20=EC=B2=98=EB=A6=AC=20=EB=B6=84?= =?UTF-8?q?=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/join/SignUp.jsx | 2 ++ src/pages/kakaoAuth/kakaoAuth.jsx | 1 + src/store/authStore.js | 2 ++ 3 files changed, 5 insertions(+) diff --git a/src/pages/join/SignUp.jsx b/src/pages/join/SignUp.jsx index f4e38d9..0a86dd2 100644 --- a/src/pages/join/SignUp.jsx +++ b/src/pages/join/SignUp.jsx @@ -8,6 +8,7 @@ import LocationStep from "./components/LocationStep"; import OwnerStep from "./components/OwnerStep"; import GoHome from "./components/GoHome"; import { signup } from "@apis/member/signup"; +import useAuthStore from "@/store/authStore"; const SignUpPage = () => { const [step, setStep] = useState(1); @@ -37,6 +38,7 @@ const SignUpPage = () => { }; try { await signup(finalData); + useAuthStore.getState().completeSignup(); setStep((prev) => prev + 1); } catch (error) { console.error("회원가입 실패:", error); diff --git a/src/pages/kakaoAuth/kakaoAuth.jsx b/src/pages/kakaoAuth/kakaoAuth.jsx index 70a0d4e..4d747f5 100644 --- a/src/pages/kakaoAuth/kakaoAuth.jsx +++ b/src/pages/kakaoAuth/kakaoAuth.jsx @@ -24,6 +24,7 @@ const KakaoAuth = () => { if (isNewUser) { navigate("/signup"); } else { + useAuthStore.getState().completeSignup(); // 기존 유저라면 바로 가입 완료 navigate("/"); } } catch (err) { diff --git a/src/store/authStore.js b/src/store/authStore.js index 346066c..53780e4 100644 --- a/src/store/authStore.js +++ b/src/store/authStore.js @@ -3,8 +3,10 @@ import { getMyProfile } from "@apis/member/auth"; const useAuthStore = create((set) => ({ isLoggedIn: false, + isSignedUp: false, login: () => set({ isLoggedIn: true }), logout: () => set({ isLoggedIn: false }), + completeSignup: () => set({ isSignedUp: true }), checkAuth: async () => { try { const profile = await getMyProfile(); From 43cd05740fe85922305da0679e140f42ef040e75 Mon Sep 17 00:00:00 2001 From: syddl0 <137189866+shroqkf@users.noreply.github.com> Date: Tue, 20 May 2025 00:29:51 +0900 Subject: [PATCH 6/7] =?UTF-8?q?Refactor:=20=EC=B0=9C=20=EA=B8=B0=EB=8A=A5?= =?UTF-8?q?=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/map/hooks/useToggleLike.js | 20 ++++------------- src/pages/search/SearchPage.jsx | 33 ++++++++++++---------------- 2 files changed, 18 insertions(+), 35 deletions(-) diff --git a/src/pages/map/hooks/useToggleLike.js b/src/pages/map/hooks/useToggleLike.js index 79afefa..0190efe 100644 --- a/src/pages/map/hooks/useToggleLike.js +++ b/src/pages/map/hooks/useToggleLike.js @@ -28,33 +28,21 @@ export const useToggleLike = ({ return; } - const currentPlace = placesWithDistance.find((p) => p.id === targetId); + const currentPlace = + placesWithDistance.find((p) => p.id === targetId) || selectedPlace; + if (!currentPlace || isProcessing) return; setIsProcessing(true); setLoading(true); try { - // 서버 liked 상태 확인 (불일치 방지용) + // 서버 liked 상태 확인 const likedList = await getLikedCompanies(); const isActuallyLiked = likedList.some( (c) => String(c.companyId) === String(targetId), ); - // 로컬 상태와 서버 상태 불일치 시 보정 - if (currentPlace.liked !== isActuallyLiked) { - const corrected = placesWithDistance.map((p) => - p.id === targetId ? { ...p, liked: isActuallyLiked } : p, - ); - setPlacesWithDistance(corrected); - if (selectedPlace?.id === targetId) { - setSelectedPlace({ - ...selectedPlace, - liked: isActuallyLiked, - }); - } - } - // 서버 상태 기준으로 실제 토글 실행 if (isActuallyLiked) { await unlikeCompany(targetId); diff --git a/src/pages/search/SearchPage.jsx b/src/pages/search/SearchPage.jsx index e865134..12e63aa 100644 --- a/src/pages/search/SearchPage.jsx +++ b/src/pages/search/SearchPage.jsx @@ -8,7 +8,6 @@ import { formatDistance } from "../map/utils/formatDistance"; import { getCompanyPreview } from "@apis/company/getCompanyPreview"; import { useCompanyData } from "./hooks/useCompanyData"; import { useUserCoords } from "./hooks/useUserCoords"; -import useAuthStore from "@/store/authStore"; import HaveToLoginModal from "@components/common/HaveToLoginModal"; import MapViewer from "./components/MapViewer"; import { useToggleLike } from "../map/hooks/useToggleLike"; @@ -21,7 +20,6 @@ const SearchPage = () => { const [isSearched, setIsSearched] = useState(false); const [selectedPlace, setSelectedPlace] = useState(null); const [moveToCurrentLocation, setMoveToCurrentLocation] = useState(false); - const [isBottomSheetExpanded, setIsBottomSheetExpanded] = useState(false); const [isBottomSheetVisible, setIsBottomSheetVisible] = useState(false); const [step, setStep] = useState(1); @@ -29,24 +27,22 @@ const SearchPage = () => { const [bottomSheetHeight, setBottomSheetHeight] = useState(220); const [isDesktop, setIsDesktop] = useState(false); + const { companies: allPlaces } = useCompanyData(); + const userCoords = useUserCoords(); + useEffect(() => { - const updateSize = () => { - setIsDesktop(window.innerWidth >= 1024); - }; + const updateSize = () => setIsDesktop(window.innerWidth >= 1024); updateSize(); window.addEventListener("resize", updateSize); return () => window.removeEventListener("resize", updateSize); }, []); - const { companies: allPlaces, loading: isCompanyLoading } = useCompanyData(); - const userCoords = useUserCoords(); - const isLoggedIn = useAuthStore((state) => state.isLoggedIn); - useEffect(() => { const stored = localStorage.getItem(LOCAL_STORAGE_KEY); if (stored) { - setRecentSearches(JSON.parse(stored)); - setStep(JSON.parse(stored).length > 0 ? 2 : 1); + const parsed = JSON.parse(stored); + setRecentSearches(parsed); + setStep(parsed.length > 0 ? 2 : 1); } }, []); @@ -63,7 +59,6 @@ const SearchPage = () => { const filteredPlaces = useMemo(() => { if (!isSearched || !keyword.trim()) return []; - const searchText = keyword.toLowerCase(); return allPlaces @@ -91,10 +86,7 @@ const SearchPage = () => { }; }) .filter(Boolean) - .sort((a, b) => { - if (a.distance == null || b.distance == null) return 0; - return a.distance - b.distance; - }); + .sort((a, b) => (a.distance ?? 0) - (b.distance ?? 0)); }, [allPlaces, keyword, isSearched, userCoords]); useEffect(() => { @@ -118,7 +110,6 @@ const SearchPage = () => { setKeyword(text); setIsSearched(true); setStep(4); - setSelectedPlace(null); setIsBottomSheetVisible(false); setIsBottomSheetExpanded(false); @@ -138,7 +129,7 @@ const SearchPage = () => { setSelectedPlace(enriched); setIsBottomSheetVisible(true); setIsBottomSheetExpanded(false); - setStep?.(5); // SearchPage인 경우 + setStep?.(5); } catch (err) { console.error("기업 상세 정보 불러오기 실패:", err); } @@ -171,6 +162,7 @@ const SearchPage = () => { /> )} + {/* Search Bar */} {step === 5 ? (
{
)} + {/* 단계별 뷰 */} {step === 1 && (
{ showEmptyMessage={true} /> )} + {step === 5 && (
{ disableAutoUserPan={true} /> + {/* 현위치 버튼 */} {!isBottomSheetExpanded && (
Date: Tue, 20 May 2025 15:59:23 +0900 Subject: [PATCH 7/7] =?UTF-8?q?Fix:=20=EC=A7=80=EB=8F=84=20=ED=8E=98?= =?UTF-8?q?=EC=9D=B4=EC=A7=80=EC=99=80=20=EA=B2=80=EC=83=89=20=ED=8E=98?= =?UTF-8?q?=EC=9D=B4=EC=A7=80=20=EC=B0=9C=20=EA=B8=B0=EB=8A=A5=20=EC=98=A4?= =?UTF-8?q?=EB=A5=98=20=ED=95=B4=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/map/MapPage.jsx | 10 +++++++++- src/pages/map/components/PlaceBottomSheet.jsx | 1 - src/pages/map/hooks/useToggleLike.js | 5 +++-- src/pages/search/SearchPage.jsx | 16 ++++++++++++---- 4 files changed, 24 insertions(+), 8 deletions(-) diff --git a/src/pages/map/MapPage.jsx b/src/pages/map/MapPage.jsx index cff6c1e..406f644 100644 --- a/src/pages/map/MapPage.jsx +++ b/src/pages/map/MapPage.jsx @@ -160,7 +160,15 @@ const MapPage = () => { const handleMarkerClick = async (place) => { try { const preview = await getCompanyPreview(place.id); - setSelectedPlace({ ...place, ...preview }); + + let liked = false; + const isAuthenticated = await useAuthStore.getState().checkAuth(); + if (isAuthenticated) { + const likedList = await getLikedCompanies(); + liked = likedList.some((c) => c.companyId === place.id); + } + + setSelectedPlace({ ...place, ...preview, liked }); } catch (err) { console.error("프리뷰 불러오기 실패:", err); } diff --git a/src/pages/map/components/PlaceBottomSheet.jsx b/src/pages/map/components/PlaceBottomSheet.jsx index 0a76f1b..0b5bb95 100644 --- a/src/pages/map/components/PlaceBottomSheet.jsx +++ b/src/pages/map/components/PlaceBottomSheet.jsx @@ -166,7 +166,6 @@ const PlaceBottomSheet = ({ diff --git a/src/pages/map/hooks/useToggleLike.js b/src/pages/map/hooks/useToggleLike.js index 0190efe..8782344 100644 --- a/src/pages/map/hooks/useToggleLike.js +++ b/src/pages/map/hooks/useToggleLike.js @@ -57,12 +57,13 @@ export const useToggleLike = ({ setPlacesWithDistance(updated); if (selectedPlace?.id === targetId) { - setSelectedPlace({ + const newSelected = { ...selectedPlace, liked: !isActuallyLiked, distance: currentPlace.distance, formattedDistance: currentPlace.formattedDistance, - }); + }; + requestAnimationFrame(() => setSelectedPlace(newSelected)); } if (setFilteredPlaces) { diff --git a/src/pages/search/SearchPage.jsx b/src/pages/search/SearchPage.jsx index 12e63aa..5ac22f2 100644 --- a/src/pages/search/SearchPage.jsx +++ b/src/pages/search/SearchPage.jsx @@ -11,6 +11,8 @@ import { useUserCoords } from "./hooks/useUserCoords"; import HaveToLoginModal from "@components/common/HaveToLoginModal"; import MapViewer from "./components/MapViewer"; import { useToggleLike } from "../map/hooks/useToggleLike"; +import useAuthStore from "@/store/authStore"; +import { getLikedCompanies } from "@/apis/company/getLikedCompanies"; const LOCAL_STORAGE_KEY = "recentSearches"; @@ -121,10 +123,19 @@ const SearchPage = () => { const handleSelectPlace = async (place) => { try { const preview = await getCompanyPreview(place.id); + + // 찜 여부 재확인 + let liked = false; + const isAuthenticated = await useAuthStore.getState().checkAuth(); + if (isAuthenticated) { + const likedList = await getLikedCompanies(); + liked = likedList.some((c) => c.companyId === place.id); + } + const enriched = { ...place, ...preview, - liked: preview.isSaved ?? false, + liked, }; setSelectedPlace(enriched); setIsBottomSheetVisible(true); @@ -162,7 +173,6 @@ const SearchPage = () => { /> )} - {/* Search Bar */} {step === 5 ? (
{
)} - {/* 단계별 뷰 */} {step === 1 && (
{ disableAutoUserPan={true} /> - {/* 현위치 버튼 */} {!isBottomSheetExpanded && (