From 3074b09286fa06bc8b544e1e69be7c6098933ec7 Mon Sep 17 00:00:00 2001 From: rina1201 Date: Tue, 28 Apr 2026 01:43:01 +0900 Subject: [PATCH 1/5] =?UTF-8?q?feat:=20=EC=9E=A5=EC=86=8C=20=ED=81=B4?= =?UTF-8?q?=EB=A6=AD=20=EC=8B=9C=20=EC=9E=A5=EC=86=8C=20=EC=A0=95=EB=B3=B4?= =?UTF-8?q?=20=EB=AA=A8=EB=8B=AC=20UI=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/assets/map-marker-selected.png | Bin 0 -> 107659 bytes src/app/router/index.tsx | 2 + src/components/map/KakaoMapView.tsx | 34 ++- .../place/BusinessHoursAccordion.tsx | 87 ++++++++ src/components/place/PlaceDetailSheet.tsx | 67 ++++++ .../map/hooks/use-place-filter-data.ts | 15 +- src/pages/MapHomePage.tsx | 12 +- src/pages/MyHomePage_WithDetail.tsx | 49 +++++ src/pages/dev/DevClickPlacePage.tsx | 28 +++ src/pages/dev/DevSelectOptionPage.tsx | 114 +++++++++- src/pages/map/MapHomePage.tsx | 13 +- src/pages/map/map-home-mock.ts | 81 ++++++- src/shared/lib/kakao-map-sdk.ts | 5 + src/shared/lib/place-business-hours.ts | 200 ++++++++++++++++++ src/shared/types/map-home.ts | 31 +++ src/store/placeDetailStore.ts | 25 +++ 16 files changed, 740 insertions(+), 23 deletions(-) create mode 100644 public/assets/map-marker-selected.png create mode 100644 src/components/place/BusinessHoursAccordion.tsx create mode 100644 src/components/place/PlaceDetailSheet.tsx create mode 100644 src/pages/MyHomePage_WithDetail.tsx create mode 100644 src/pages/dev/DevClickPlacePage.tsx create mode 100644 src/shared/lib/place-business-hours.ts create mode 100644 src/store/placeDetailStore.ts diff --git a/public/assets/map-marker-selected.png b/public/assets/map-marker-selected.png new file mode 100644 index 0000000000000000000000000000000000000000..2773bbdcb25f2f8e10d739eb9d763416efeed15c GIT binary patch literal 107659 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¬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 z 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 R+-blMebrd^xwd`O{{SvkE_wg} literal 0 HcmV?d00001 diff --git a/src/app/router/index.tsx b/src/app/router/index.tsx index 120e0a2..c9c6aa6 100644 --- a/src/app/router/index.tsx +++ b/src/app/router/index.tsx @@ -5,6 +5,7 @@ import { RootLayout } from "@/app/layouts/RootLayout"; import { OnboardingGate } from "@/app/router/OnboardingGate"; import { ProtectedRoute } from "@/app/router/ProtectedRoute"; import AuthCallbackPage from "@/pages/AuthCallbackPage"; +import DevClickPlacePage from "@/pages/dev/DevClickPlacePage"; import DevSelectOptionPage from "@/pages/dev/DevSelectOptionPage"; import EntryPage from "@/pages/EntryPage"; import LoginPage from "@/pages/LoginPage"; @@ -26,6 +27,7 @@ export const router = createBrowserRouter([ children: [ { index: true, element: }, { path: "dev/splash", element: }, + { path: "dev/click_place", element: }, { path: "dev/SelectOption", element: }, { path: "login", element: }, { path: "app", element: }, diff --git a/src/components/map/KakaoMapView.tsx b/src/components/map/KakaoMapView.tsx index 30543e5..38f783a 100644 --- a/src/components/map/KakaoMapView.tsx +++ b/src/components/map/KakaoMapView.tsx @@ -9,6 +9,7 @@ import { loadKakaoMapSdk, } from "@/shared/lib/kakao-map-sdk"; import type { MapCoordinate, SavedPlace } from "@/shared/types/map-home"; +import { PLACE_DETAIL_OPEN_EVENT, usePlaceDetailStore } from "@/store/placeDetailStore"; export type KakaoMapViewProps = { appKey?: string; @@ -33,8 +34,10 @@ export function KakaoMapView({ appKey, places, center, level = 4, className }: K const mapRef = useRef(null); const mapsRef = useRef(null); const markerImageRef = useRef(null); + const selectedMarkerImageRef = useRef(null); const markerInstancesRef = useRef([]); const [loadState, setLoadState] = useState("loading"); + const selectedPlaceId = usePlaceDetailStore((state) => state.selectedPlaceId); const clearMarkers = () => { markerInstancesRef.current.forEach((marker) => marker.setMap(null)); @@ -74,6 +77,11 @@ export function KakaoMapView({ appKey, places, center, level = 4, className }: K new kakao.maps.Size(30, 40), { offset: new kakao.maps.Point(15, 39) }, ); + selectedMarkerImageRef.current = new kakao.maps.MarkerImage( + "/assets/map-marker-selected.png", + new kakao.maps.Size(42, 56), + { offset: new kakao.maps.Point(21, 55) }, + ); setLoadState("ready"); }) @@ -88,6 +96,7 @@ export function KakaoMapView({ appKey, places, center, level = 4, className }: K mapRef.current = null; mapsRef.current = null; markerImageRef.current = null; + selectedMarkerImageRef.current = null; }; }, [hasMapKey, mapKey]); @@ -102,27 +111,44 @@ export function KakaoMapView({ appKey, places, center, level = 4, className }: K // effect C: places 변경 시 marker만 갱신 useEffect(() => { - if (loadState !== "ready" || !mapRef.current || !mapsRef.current || !markerImageRef.current) { + if ( + loadState !== "ready" || + !mapRef.current || + !mapsRef.current || + !markerImageRef.current || + !selectedMarkerImageRef.current + ) { return; } const maps = mapsRef.current; const mapInstance = mapRef.current; const markerImage = markerImageRef.current; + const selectedMarkerImage = selectedMarkerImageRef.current; clearMarkers(); markerInstancesRef.current = places.map((place) => { - return new maps.Marker({ + const marker = new maps.Marker({ map: mapInstance, title: place.name, position: new maps.LatLng(place.latitude, place.longitude), - image: markerImage, + image: place.id === selectedPlaceId ? selectedMarkerImage : markerImage, }); + + maps.event.addListener(marker, "click", () => { + window.dispatchEvent( + new CustomEvent(PLACE_DETAIL_OPEN_EVENT, { + detail: { placeId: place.id }, + }), + ); + }); + + return marker; }); return () => { clearMarkers(); }; - }, [loadState, places]); + }, [loadState, places, selectedPlaceId]); return (
diff --git a/src/components/place/BusinessHoursAccordion.tsx b/src/components/place/BusinessHoursAccordion.tsx new file mode 100644 index 0000000..32cdf26 --- /dev/null +++ b/src/components/place/BusinessHoursAccordion.tsx @@ -0,0 +1,87 @@ +import { ChevronDown } from "lucide-react"; +import { useMemo, useState } from "react"; + +import { cn } from "@/lib/utils"; +import type { ResolvedPlaceBusinessHours } from "@/shared/types/map-home"; + +type BusinessHoursAccordionProps = { + businessHours: ResolvedPlaceBusinessHours | null | undefined; +}; + +function buildStatusSummary(businessHours: ResolvedPlaceBusinessHours): string { + if (businessHours.openTime) { + return `${businessHours.status} ${businessHours.openTime} 오픈`; + } + + return businessHours.status; +} + +export function BusinessHoursAccordion({ + businessHours, +}: BusinessHoursAccordionProps) { + const [isExpanded, setIsExpanded] = useState(false); + + const todayHours = useMemo(() => { + return ( + businessHours?.weeklyHours.find((row) => row.isToday) ?? businessHours?.weeklyHours[0] ?? null + ); + }, [businessHours]); + + if (!businessHours) { + return ( +
+

영업시간

+

정보 없음

+
+ ); + } + + return ( +
+
+

{buildStatusSummary(businessHours)}

+ {businessHours.holidayNotice ? ( +

{businessHours.holidayNotice}

+ ) : null} +
+ + {todayHours ? ( +
+ + + {isExpanded ? ( +
+ {businessHours.weeklyHours.map((row) => ( +
+ {row.label} + {row.hours} +
+ ))} +
+ ) : null} +
+ ) : null} +
+ ); +} diff --git a/src/components/place/PlaceDetailSheet.tsx b/src/components/place/PlaceDetailSheet.tsx new file mode 100644 index 0000000..6f90eda --- /dev/null +++ b/src/components/place/PlaceDetailSheet.tsx @@ -0,0 +1,67 @@ +import { ExternalLink, MapPin } from "lucide-react"; +import { useEffect, useMemo, type JSX } from "react"; + +import { BusinessHoursAccordion } from "@/components/place/BusinessHoursAccordion"; +import { BottomSheet } from "@/components/ui/BottomSheet"; +import { SAVED_PLACE_MOCKS } from "@/pages/map/map-home-mock"; +import { + resolveSavedPlacesBusinessHours, + useKoreanNow, +} from "@/shared/lib/place-business-hours"; +import { usePlaceDetailStore } from "@/store/placeDetailStore"; + +export function PlaceDetailSheet(): JSX.Element | null { + const { isOpen, selectedPlaceId, closeDetail } = usePlaceDetailStore((state) => state); + const now = useKoreanNow(); + const places = useMemo(() => resolveSavedPlacesBusinessHours(SAVED_PLACE_MOCKS, now), [now]); + + const place = places.find((item) => item.id === selectedPlaceId) ?? null; + + useEffect(() => { + if (isOpen && selectedPlaceId && !place) { + closeDetail(); + } + }, [closeDetail, isOpen, place, selectedPlaceId]); + + if (!place) { + return null; + } + + return ( + +
+
+ +
+

{place.name}

+
+ +

{place.address}

+
+
+ + {place.reelsUrl ? ( + + ) : null} + + +
+ + ); +} diff --git a/src/features/map/hooks/use-place-filter-data.ts b/src/features/map/hooks/use-place-filter-data.ts index ca727b3..3cf42ac 100644 --- a/src/features/map/hooks/use-place-filter-data.ts +++ b/src/features/map/hooks/use-place-filter-data.ts @@ -6,7 +6,7 @@ import { type MapPrimaryCategory, } from "@/shared/types/map-home"; -import type { Category } from "../api/place-taxonomy-types"; +import type { Category, PlaceFilterData } from "../api/place-taxonomy-types"; import { usePlaceFilterOptionsQuery } from "./use-place-filter-options-query"; const EMPTY_FILTER_CATEGORIES: Category[] = []; @@ -20,14 +20,15 @@ type UsePlaceFilterDataResult = { retryLoad: () => Promise; }; -export function usePlaceFilterData(): UsePlaceFilterDataResult { +export function usePlaceFilterData(filterDataOverride?: PlaceFilterData | null): UsePlaceFilterDataResult { const { data: placeFilterData, isPending, isError, refetch } = usePlaceFilterOptionsQuery(); + const resolvedFilterData = filterDataOverride ?? placeFilterData; - const hasInitialData = Boolean(placeFilterData); + const hasInitialData = Boolean(resolvedFilterData); const filterCategories = useMemo( - () => placeFilterData?.categories ?? EMPTY_FILTER_CATEGORIES, - [placeFilterData], + () => resolvedFilterData?.categories ?? EMPTY_FILTER_CATEGORIES, + [resolvedFilterData], ); const categories = useMemo( @@ -53,8 +54,8 @@ export function usePlaceFilterData(): UsePlaceFilterDataResult { categories, categoryNameByCode, filterCategories, - isInitialLoading: !hasInitialData && isPending, - isInitialError: !hasInitialData && isError, + isInitialLoading: !filterDataOverride && !hasInitialData && isPending, + isInitialError: !filterDataOverride && !hasInitialData && isError, retryLoad, }; } diff --git a/src/pages/MapHomePage.tsx b/src/pages/MapHomePage.tsx index 12ce64d..6361789 100644 --- a/src/pages/MapHomePage.tsx +++ b/src/pages/MapHomePage.tsx @@ -1,13 +1,21 @@ import { type JSX } from "react"; -import { MapHomePageContent } from "@/pages/map/MapHomePage"; +import type { PlaceFilterData } from "@/features/map/api/place-taxonomy-types"; +import MyHomePage_WithDetail from "@/pages/MyHomePage_WithDetail"; type MapHomePageProps = { defaultFilterPanelOpen?: boolean; + filterDataOverride?: PlaceFilterData | null; }; export default function MapHomePage({ defaultFilterPanelOpen = false, + filterDataOverride = null, }: MapHomePageProps): JSX.Element { - return ; + return ( + + ); } diff --git a/src/pages/MyHomePage_WithDetail.tsx b/src/pages/MyHomePage_WithDetail.tsx new file mode 100644 index 0000000..6c4b207 --- /dev/null +++ b/src/pages/MyHomePage_WithDetail.tsx @@ -0,0 +1,49 @@ +import { type JSX, useEffect } from "react"; + +import { PlaceDetailSheet } from "@/components/place/PlaceDetailSheet"; +import type { PlaceFilterData } from "@/features/map/api/place-taxonomy-types"; +import { MapHomePageContent } from "@/pages/map/MapHomePage"; +import { PLACE_DETAIL_OPEN_EVENT, usePlaceDetailStore } from "@/store/placeDetailStore"; + +type MyHomePageWithDetailProps = { + defaultFilterPanelOpen?: boolean; + filterDataOverride?: PlaceFilterData | null; +}; + +type PlaceDetailOpenEvent = CustomEvent<{ + placeId: string; +}>; + +export default function MyHomePage_WithDetail({ + defaultFilterPanelOpen = false, + filterDataOverride = null, +}: MyHomePageWithDetailProps): JSX.Element { + const openDetail = usePlaceDetailStore((state) => state.openDetail); + + useEffect(() => { + const handleOpenDetail = (event: Event) => { + const { detail } = event as PlaceDetailOpenEvent; + if (!detail?.placeId) { + return; + } + + openDetail(detail.placeId); + }; + + window.addEventListener(PLACE_DETAIL_OPEN_EVENT, handleOpenDetail); + + return () => { + window.removeEventListener(PLACE_DETAIL_OPEN_EVENT, handleOpenDetail); + }; + }, [openDetail]); + + return ( + <> + + + + ); +} diff --git a/src/pages/dev/DevClickPlacePage.tsx b/src/pages/dev/DevClickPlacePage.tsx new file mode 100644 index 0000000..908af38 --- /dev/null +++ b/src/pages/dev/DevClickPlacePage.tsx @@ -0,0 +1,28 @@ +import { useLayoutEffect } from "react"; + +import MyHomePage_WithDetail from "@/pages/MyHomePage_WithDetail"; +import { useRoomSelectionStore } from "@/store/room-selection-store"; + +const DEV_ROOM = { + id: "dev-room-click-place", + name: "친구 님과의 데이트 지도", + memberCount: 3, +}; + +export default function DevClickPlacePage() { + const selectRoom = useRoomSelectionStore((state) => state.selectRoom); + const selectedRoom = useRoomSelectionStore((state) => state.selectedRoom); + const isDevRoomReady = selectedRoom?.id === DEV_ROOM.id; + + useLayoutEffect(() => { + if (!isDevRoomReady) { + selectRoom(DEV_ROOM); + } + }, [isDevRoomReady, selectRoom]); + + if (!isDevRoomReady) { + return null; + } + + return ; +} diff --git a/src/pages/dev/DevSelectOptionPage.tsx b/src/pages/dev/DevSelectOptionPage.tsx index 137fcb3..3a4587f 100644 --- a/src/pages/dev/DevSelectOptionPage.tsx +++ b/src/pages/dev/DevSelectOptionPage.tsx @@ -1,5 +1,6 @@ import { lazy, Suspense, useLayoutEffect } from "react"; +import type { PlaceFilterData } from "@/features/map/api/place-taxonomy-types"; import { useRoomSelectionStore } from "@/store/room-selection-store"; const MapHomePage = lazy(() => import("@/pages/MapHomePage")); @@ -10,6 +11,117 @@ const DEV_ROOM = { memberCount: 4, }; +const DEV_FILTER_DATA: PlaceFilterData = { + categories: [ + { + code: "\uB9DB\uC9D1", + name: "\uB9DB\uC9D1", + sortOrder: 1, + tagGroups: [ + { + code: "\uB9DB\uC9D1-default", + name: null, + sortOrder: 1, + tags: [ + { code: "\uB9DB\uC9D1-\uD55C\uC2DD", name: "\uD55C\uC2DD", sortOrder: 1 }, + { code: "\uB9DB\uC9D1-\uC911\uC2DD", name: "\uC911\uC2DD", sortOrder: 2 }, + { code: "\uB9DB\uC9D1-\uC77C\uC2DD", name: "\uC77C\uC2DD", sortOrder: 3 }, + { code: "\uB9DB\uC9D1-\uC591\uC2DD", name: "\uC591\uC2DD", sortOrder: 4 }, + { code: "\uB9DB\uC9D1-\uBD84\uC2DD", name: "\uBD84\uC2DD", sortOrder: 5 }, + { + code: "\uB9DB\uC9D1-\uC544\uC2DC\uC544\uC2DD", + name: "\uC544\uC2DC\uC544\uC2DD", + sortOrder: 6, + }, + { code: "\uB9DB\uC9D1-\uC220\uC9D1", name: "\uC220\uC9D1", sortOrder: 7 }, + { code: "\uB9DB\uC9D1-\uAE30\uD0C0", name: "\uAE30\uD0C0", sortOrder: 8 }, + ], + }, + ], + }, + { + code: "\uCE74\uD398", + name: "\uCE74\uD398", + sortOrder: 2, + tagGroups: [ + { + code: "\uCE74\uD398-default", + name: null, + sortOrder: 1, + tags: [ + { + code: "\uCE74\uD398-\uC81C\uACFC/\uBCA0\uC774\uCEE4\uB9AC", + name: "\uC81C\uACFC/\uBCA0\uC774\uCEE4\uB9AC", + sortOrder: 1, + }, + ], + }, + ], + }, + { + code: "\uB180\uAC70\uB9AC", + name: "\uB180\uAC70\uB9AC", + sortOrder: 3, + tagGroups: [ + { + code: "\uB180\uAC70\uB9AC-default", + name: null, + sortOrder: 1, + tags: [ + { + code: "\uB180\uAC70\uB9AC-\uD14C\uB9C8\uD30C\uD06C", + name: "\uD14C\uB9C8\uD30C\uD06C", + sortOrder: 1, + }, + { + code: "\uB180\uAC70\uB9AC-\uBCF4\uB4DC\uCE74\uD398", + name: "\uBCF4\uB4DC\uCE74\uD398", + sortOrder: 2, + }, + { + code: "\uB180\uAC70\uB9AC-\uB9CC\uD654\uCE74\uD398", + name: "\uB9CC\uD654\uCE74\uD398", + sortOrder: 3, + }, + { + code: "\uB180\uAC70\uB9AC-\uBB38\uD654/\uC608\uC220", + name: "\uBB38\uD654/\uC608\uC220", + sortOrder: 4, + }, + { + code: "\uB180\uAC70\uB9AC-\uBC29\uD0C8\uCD9C\uCE74\uD398", + name: "\uBC29\uD0C8\uCD9C\uCE74\uD398", + sortOrder: 5, + }, + { + code: "\uB180\uAC70\uB9AC-\uC2A4\uD3EC\uCE20", + name: "\uC2A4\uD3EC\uCE20", + sortOrder: 6, + }, + { + code: "\uB180\uAC70\uB9AC-\uCC1C\uC9C8\uBC29", + name: "\uCC1C\uC9C8\uBC29", + sortOrder: 7, + }, + { code: "\uB180\uAC70\uB9AC-\uACF5\uC6D0", name: "\uACF5\uC6D0", sortOrder: 8 }, + { + code: "\uB180\uAC70\uB9AC-\uC0DD\uD65C\uC6A9\uD488\uC810", + name: "\uC0DD\uD65C\uC6A9\uD488\uC810", + sortOrder: 9, + }, + { + code: "\uB180\uAC70\uB9AC-\uC544\uCFE0\uC544\uB9AC\uC6C0", + name: "\uC544\uCFE0\uC544\uB9AC\uC6C0", + sortOrder: 10, + }, + { code: "\uB180\uAC70\uB9AC-\uAE30\uD0C0", name: "\uAE30\uD0C0", sortOrder: 11 }, + ], + }, + ], + }, + ], +}; + export default function DevSelectOptionPage() { const selectRoom = useRoomSelectionStore((state) => state.selectRoom); const selectedRoom = useRoomSelectionStore((state) => state.selectedRoom); @@ -27,7 +139,7 @@ export default function DevSelectOptionPage() { return ( - + ); } diff --git a/src/pages/map/MapHomePage.tsx b/src/pages/map/MapHomePage.tsx index 03de77e..2a15952 100644 --- a/src/pages/map/MapHomePage.tsx +++ b/src/pages/map/MapHomePage.tsx @@ -6,6 +6,7 @@ import { BottomNavToast } from "@/components/common/BottomNavToast"; import { FriendFloatingMenu } from "@/components/map/FriendFloatingMenu"; import { MapHeader } from "@/components/map/MapHeader"; import { MapSearchOverlay } from "@/components/map/MapSearchOverlay"; +import type { PlaceFilterData } from "@/features/map/api/place-taxonomy-types"; import { useMapSearchFilters } from "@/features/map/hooks/use-map-search-filters"; import { usePlaceFilterData } from "@/features/map/hooks/use-place-filter-data"; import { useBottomNavController } from "@/hooks/use-bottom-nav-controller"; @@ -14,6 +15,10 @@ import { MAP_SEARCH_PLACEHOLDER, SAVED_PLACE_MOCKS, } from "@/pages/map/map-home-mock"; +import { + resolveSavedPlacesBusinessHours, + useKoreanNow, +} from "@/shared/lib/place-business-hours"; import type { RoomFriend } from "@/shared/types/map-home"; import type { SelectedRoom } from "@/store/room-selection-store"; import { useRoomSelectionStore } from "@/store/room-selection-store"; @@ -34,15 +39,19 @@ const KakaoMapView = lazy(() => type MapHomePageContentProps = { defaultFilterPanelOpen?: boolean; + filterDataOverride?: PlaceFilterData | null; }; export function MapHomePageContent({ defaultFilterPanelOpen = false, + filterDataOverride = null, }: MapHomePageContentProps): JSX.Element { const selectedRoom = useRoomSelectionStore((s) => s.selectedRoom); const { toastMessage, handleSelectBottomNav } = useBottomNavController(); const [friendMenuOpen, setFriendMenuOpen] = useState(false); + const now = useKoreanNow(); const mapTitle = selectedRoom ? selectedRoom.name : "데이트 지도"; + const places = useMemo(() => resolveSavedPlacesBusinessHours(SAVED_PLACE_MOCKS, now), [now]); const { categories, categoryNameByCode, @@ -50,7 +59,7 @@ export function MapHomePageContent({ isInitialLoading, isInitialError, retryLoad, - } = usePlaceFilterData(); + } = usePlaceFilterData(filterDataOverride); const { keyword, @@ -66,7 +75,7 @@ export function MapHomePageContent({ resetFocusedCategoryTags, filteredPlaces, } = useMapSearchFilters({ - places: SAVED_PLACE_MOCKS, + places, filterCategories, initialFocusedCategory: defaultFilterPanelOpen ? (filterCategories[0]?.code ?? null) : null, }); diff --git a/src/pages/map/map-home-mock.ts b/src/pages/map/map-home-mock.ts index 678cbc6..613a20e 100644 --- a/src/pages/map/map-home-mock.ts +++ b/src/pages/map/map-home-mock.ts @@ -1,6 +1,6 @@ import type { MapCoordinate, SavedPlace } from "@/shared/types/map-home"; -export const MAP_HOME_TITLE = "친구1 님과의 데이트 지도"; +export const MAP_HOME_TITLE = "친구 1님과의 데이트 지도"; export const MAP_SEARCH_PLACEHOLDER = "저장해놓은 장소를 검색해보세요"; export const MAP_INITIAL_CENTER: MapCoordinate = { @@ -11,56 +11,123 @@ export const MAP_INITIAL_CENTER: MapCoordinate = { export const SAVED_PLACE_MOCKS: SavedPlace[] = [ { id: "place-1", - name: "릴스 저장 맛집 - 경희대 파스타공방", + name: "경희대 파스타공방", category: "맛집", tagKeys: ["맛집-양식"], latitude: 37.59429, longitude: 127.05973, address: "서울 동대문구 회기로 157", + reelsUrl: "https://www.instagram.com/reel/example-place-1", + businessHours: { + holidayNotice: "공휴일 정상 영업", + weeklySchedule: [ + { dayOfWeek: 1, openTime: "10:40", closeTime: "19:30" }, + { dayOfWeek: 2, openTime: "10:40", closeTime: "19:30" }, + { dayOfWeek: 3, openTime: "10:40", closeTime: "19:30" }, + { dayOfWeek: 4, openTime: "10:40", closeTime: "19:30" }, + { dayOfWeek: 5, openTime: "10:40", closeTime: "20:30" }, + { dayOfWeek: 6, openTime: "11:00", closeTime: "20:00" }, + { dayOfWeek: 0, openTime: "11:00", closeTime: "18:00" }, + ], + }, }, { id: "place-2", - name: "릴스 저장 카페 - 휘경 브루잉랩", + name: "휘경 부루잉랩", category: "카페", tagKeys: ["카페-제과-베이커리"], latitude: 37.5924, longitude: 127.06106, address: "서울 동대문구 망우로 32", + reelsUrl: null, + businessHours: { + holidayNotice: "라스트 오더 20:30", + weeklySchedule: [ + { dayOfWeek: 1, openTime: "11:00", closeTime: "21:00" }, + { dayOfWeek: 2, openTime: "11:00", closeTime: "21:00" }, + { dayOfWeek: 3, openTime: "11:00", closeTime: "21:00" }, + { dayOfWeek: 4, openTime: "11:00", closeTime: "21:00" }, + { dayOfWeek: 5, openTime: "11:00", closeTime: "22:00" }, + { dayOfWeek: 6, openTime: "12:00", closeTime: "22:00" }, + { dayOfWeek: 0, openTime: "12:00", closeTime: "20:00" }, + ], + }, }, { id: "place-3", - name: "릴스 저장 놀거리 - 회기 보드게임 라운지", + name: "회기 보드게임 라운지", category: "놀거리", tagKeys: ["놀거리-보드카페"], latitude: 37.59161, longitude: 127.06044, address: "서울 동대문구 이문로 96", + reelsUrl: "https://www.instagram.com/reel/example-place-3", + businessHours: { + holidayNotice: "입장 마감 18:30", + weeklySchedule: [ + { dayOfWeek: 1, openTime: "10:00", closeTime: "19:00" }, + { dayOfWeek: 2, openTime: "10:00", closeTime: "19:00" }, + { dayOfWeek: 3, openTime: "10:00", closeTime: "19:00" }, + { dayOfWeek: 4, openTime: "10:00", closeTime: "19:00" }, + { dayOfWeek: 5, openTime: "10:00", closeTime: "20:00" }, + { dayOfWeek: 6, openTime: "11:00", closeTime: "20:00" }, + { dayOfWeek: 0, openTime: null, closeTime: null }, + ], + }, }, { id: "place-4", - name: "릴스 저장 기타 - 산책 포토스팟", + name: "산책 포토스팟", category: "기타", tagKeys: [], latitude: 37.59094, longitude: 127.06281, address: "서울 동대문구 휘경로 12", + reelsUrl: null, + businessHours: null, }, { id: "place-5", - name: "릴스 저장 맛집 - 이문동 스테이크 키친", + name: "이문동 스테이크 키친", category: "맛집", tagKeys: ["맛집-한식"], latitude: 37.59511, longitude: 127.06307, address: "서울 동대문구 이문로 121", + reelsUrl: null, + businessHours: { + holidayNotice: "브레이크 타임 15:00 ~ 17:00", + weeklySchedule: [ + { dayOfWeek: 1, openTime: "11:30", closeTime: "22:00" }, + { dayOfWeek: 2, openTime: "11:30", closeTime: "22:00" }, + { dayOfWeek: 3, openTime: "11:30", closeTime: "22:00" }, + { dayOfWeek: 4, openTime: "11:30", closeTime: "22:00" }, + { dayOfWeek: 5, openTime: "11:30", closeTime: "23:00" }, + { dayOfWeek: 6, openTime: "12:00", closeTime: "23:00" }, + { dayOfWeek: 0, openTime: "12:00", closeTime: "21:00" }, + ], + }, }, { id: "place-6", - name: "릴스 저장 카페 - 우디 시나몬", + name: "우디 시나몬", category: "카페", tagKeys: ["카페-제과-베이커리"], latitude: 37.59457, longitude: 127.05786, address: "서울 동대문구 한천로 44", + reelsUrl: "https://www.instagram.com/reel/example-place-6", + businessHours: { + holidayNotice: "매주 화요일 휴무", + weeklySchedule: [ + { dayOfWeek: 1, openTime: "09:00", closeTime: "20:00" }, + { dayOfWeek: 2, openTime: null, closeTime: null }, + { dayOfWeek: 3, openTime: "09:00", closeTime: "20:00" }, + { dayOfWeek: 4, openTime: "09:00", closeTime: "20:00" }, + { dayOfWeek: 5, openTime: "09:00", closeTime: "21:00" }, + { dayOfWeek: 6, openTime: "10:00", closeTime: "21:00" }, + { dayOfWeek: 0, openTime: "10:00", closeTime: "19:00" }, + ], + }, }, ]; diff --git a/src/shared/lib/kakao-map-sdk.ts b/src/shared/lib/kakao-map-sdk.ts index c7572f8..0ca7891 100644 --- a/src/shared/lib/kakao-map-sdk.ts +++ b/src/shared/lib/kakao-map-sdk.ts @@ -42,6 +42,10 @@ export type KakaoMarker = { setMap: (map: KakaoMapInstance | null) => void; }; +type KakaoEvent = { + addListener: (target: KakaoMarker, eventName: string, handler: () => void) => void; +}; + export type KakaoMaps = { load: (callback: () => void) => void; LatLng: new (latitude: number, longitude: number) => KakaoLatLng; @@ -54,6 +58,7 @@ export type KakaoMaps = { options?: KakaoMarkerImageOptions, ) => KakaoMarkerImage; Marker: new (options: KakaoMarkerOptions) => KakaoMarker; + event: KakaoEvent; }; export type KakaoNamespace = { diff --git a/src/shared/lib/place-business-hours.ts b/src/shared/lib/place-business-hours.ts new file mode 100644 index 0000000..6424c21 --- /dev/null +++ b/src/shared/lib/place-business-hours.ts @@ -0,0 +1,200 @@ +import { useEffect, useState } from "react"; + +import type { + PlaceBusinessHourRow, + PlaceBusinessHours, + ResolvedSavedPlace, + ResolvedPlaceBusinessHours, + SavedPlace, +} from "@/shared/types/map-home"; + +const KOREA_TIME_ZONE = "Asia/Seoul"; +const DAY_LABELS = ["일", "월", "화", "수", "목", "금", "토"] as const; +const DEFAULT_CLOSING_SOON_MINUTES = 60; + +type KoreaNowParts = { + year: number; + month: number; + day: number; + dayOfWeek: 0 | 1 | 2 | 3 | 4 | 5 | 6; + minutesOfDay: number; +}; + +function getKoreanNowParts(now: Date): KoreaNowParts { + const dateParts = new Intl.DateTimeFormat("en-CA", { + timeZone: KOREA_TIME_ZONE, + year: "numeric", + month: "2-digit", + day: "2-digit", + }).formatToParts(now); + + const timeParts = new Intl.DateTimeFormat("en-GB", { + timeZone: KOREA_TIME_ZONE, + hour: "2-digit", + minute: "2-digit", + hour12: false, + }).formatToParts(now); + + const weekdayText = new Intl.DateTimeFormat("en-US", { + timeZone: KOREA_TIME_ZONE, + weekday: "short", + }).format(now); + + const year = Number(dateParts.find((part) => part.type === "year")?.value ?? "0"); + const month = Number(dateParts.find((part) => part.type === "month")?.value ?? "0"); + const day = Number(dateParts.find((part) => part.type === "day")?.value ?? "0"); + const hour = Number(timeParts.find((part) => part.type === "hour")?.value ?? "0"); + const minute = Number(timeParts.find((part) => part.type === "minute")?.value ?? "0"); + + return { + year, + month, + day, + dayOfWeek: weekdayToIndex(weekdayText), + minutesOfDay: hour * 60 + minute, + }; +} + +function weekdayToIndex(weekday: string): 0 | 1 | 2 | 3 | 4 | 5 | 6 { + switch (weekday) { + case "Sun": + return 0; + case "Mon": + return 1; + case "Tue": + return 2; + case "Wed": + return 3; + case "Thu": + return 4; + case "Fri": + return 5; + case "Sat": + return 6; + default: + return 0; + } +} + +function parseTimeToMinutes(value: string): number { + const [hours, minutes] = value.split(":").map(Number); + return hours * 60 + minutes; +} + +function buildTodayLabel(parts: KoreaNowParts): string { + return `${DAY_LABELS[parts.dayOfWeek]}(${parts.month}/${parts.day})`; +} + +function buildWeeklyHours( + businessHours: PlaceBusinessHours, + parts: KoreaNowParts, +): PlaceBusinessHourRow[] { + return businessHours.weeklySchedule.map((row) => { + const isToday = row.dayOfWeek === parts.dayOfWeek; + const label = isToday ? buildTodayLabel(parts) : DAY_LABELS[row.dayOfWeek]; + const hours = + row.openTime && row.closeTime ? `${row.openTime} ~ ${row.closeTime}` : "휴무"; + + return { + label, + hours, + isToday, + }; + }); +} + +function isPlaceBusinessHoursSource( + businessHours: PlaceBusinessHours | ResolvedPlaceBusinessHours | null | undefined, +): businessHours is PlaceBusinessHours { + return Array.isArray((businessHours as PlaceBusinessHours | undefined)?.weeklySchedule); +} + +export function resolvePlaceBusinessHours( + businessHours: PlaceBusinessHours | ResolvedPlaceBusinessHours | null | undefined, + now: Date, +): ResolvedPlaceBusinessHours | null { + if (!businessHours) { + return null; + } + + if (!isPlaceBusinessHoursSource(businessHours)) { + return businessHours; + } + + const parts = getKoreanNowParts(now); + const todaySchedule = businessHours.weeklySchedule.find((row) => row.dayOfWeek === parts.dayOfWeek); + const weeklyHours = buildWeeklyHours(businessHours, parts); + + if (!todaySchedule || !todaySchedule.openTime || !todaySchedule.closeTime) { + return { + status: "휴무", + openTime: null, + holidayNotice: businessHours.holidayNotice, + weeklyHours, + }; + } + + const openingMinutes = parseTimeToMinutes(todaySchedule.openTime); + const closingMinutes = parseTimeToMinutes(todaySchedule.closeTime); + const closingSoonMinutes = businessHours.closingSoonMinutes ?? DEFAULT_CLOSING_SOON_MINUTES; + + if (parts.minutesOfDay < openingMinutes) { + return { + status: "영업 전", + openTime: todaySchedule.openTime, + holidayNotice: businessHours.holidayNotice, + weeklyHours, + }; + } + + if (parts.minutesOfDay >= closingMinutes) { + return { + status: "영업 종료", + openTime: null, + holidayNotice: businessHours.holidayNotice, + weeklyHours, + }; + } + + if (closingMinutes - parts.minutesOfDay <= closingSoonMinutes) { + return { + status: "곧 마감", + openTime: null, + holidayNotice: businessHours.holidayNotice, + weeklyHours, + }; + } + + return { + status: "영업 중", + openTime: null, + holidayNotice: businessHours.holidayNotice, + weeklyHours, + }; +} + +export function resolveSavedPlacesBusinessHours( + places: SavedPlace[], + now: Date, +): ResolvedSavedPlace[] { + return places.map((place) => ({ + ...place, + businessHours: resolvePlaceBusinessHours(place.businessHours, now), + })); +} + +export function useKoreanNow(tickMs = 60_000): Date { + const [now, setNow] = useState(() => new Date()); + + useEffect(() => { + const timer = window.setInterval(() => { + setNow(new Date()); + }, tickMs); + + return () => { + window.clearInterval(timer); + }; + }, [tickMs]); + + return now; +} diff --git a/src/shared/types/map-home.ts b/src/shared/types/map-home.ts index 1e28518..1190a66 100644 --- a/src/shared/types/map-home.ts +++ b/src/shared/types/map-home.ts @@ -15,6 +15,37 @@ export type SavedPlace = { latitude: number; longitude: number; address: string; + reelsUrl?: string | null; + businessHours?: PlaceBusinessHours | ResolvedPlaceBusinessHours | null; +}; + +export type ResolvedSavedPlace = Omit & { + businessHours?: ResolvedPlaceBusinessHours | null; +}; + +export type PlaceBusinessHourRow = { + label: string; + hours: string; + isToday?: boolean; +}; + +export type PlaceBusinessHours = { + holidayNotice?: string | null; + weeklySchedule: PlaceBusinessScheduleRow[]; + closingSoonMinutes?: number; +}; + +export type ResolvedPlaceBusinessHours = { + status: string; + openTime?: string | null; + holidayNotice?: string | null; + weeklyHours: PlaceBusinessHourRow[]; +}; + +export type PlaceBusinessScheduleRow = { + dayOfWeek: 0 | 1 | 2 | 3 | 4 | 5 | 6; + openTime: string | null; + closeTime: string | null; }; export type RoomFriend = { diff --git a/src/store/placeDetailStore.ts b/src/store/placeDetailStore.ts new file mode 100644 index 0000000..e7ec73b --- /dev/null +++ b/src/store/placeDetailStore.ts @@ -0,0 +1,25 @@ +import { create } from "zustand"; + +export const PLACE_DETAIL_OPEN_EVENT = "place-detail:open"; + +type PlaceDetailState = { + selectedPlaceId: string | null; + isOpen: boolean; + openDetail: (placeId: string) => void; + closeDetail: () => void; +}; + +export const usePlaceDetailStore = create((set) => ({ + selectedPlaceId: null, + isOpen: false, + openDetail: (placeId) => + set({ + selectedPlaceId: placeId, + isOpen: true, + }), + closeDetail: () => + set({ + selectedPlaceId: null, + isOpen: false, + }), +})); From b1b97e7519b6a9c34cc1c52b9dfd1681a4f82096 Mon Sep 17 00:00:00 2001 From: rina1201 Date: Tue, 28 Apr 2026 02:31:05 +0900 Subject: [PATCH 2/5] =?UTF-8?q?fix:=20npm=20run=20lint=20=EC=98=A4?= =?UTF-8?q?=EB=A5=98=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/place/PlaceDetailSheet.tsx | 2 +- src/shared/lib/place-business-hours.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/place/PlaceDetailSheet.tsx b/src/components/place/PlaceDetailSheet.tsx index 6f90eda..cdbdde9 100644 --- a/src/components/place/PlaceDetailSheet.tsx +++ b/src/components/place/PlaceDetailSheet.tsx @@ -1,5 +1,5 @@ import { ExternalLink, MapPin } from "lucide-react"; -import { useEffect, useMemo, type JSX } from "react"; +import { type JSX,useEffect, useMemo } from "react"; import { BusinessHoursAccordion } from "@/components/place/BusinessHoursAccordion"; import { BottomSheet } from "@/components/ui/BottomSheet"; diff --git a/src/shared/lib/place-business-hours.ts b/src/shared/lib/place-business-hours.ts index 6424c21..f68e0e0 100644 --- a/src/shared/lib/place-business-hours.ts +++ b/src/shared/lib/place-business-hours.ts @@ -3,8 +3,8 @@ import { useEffect, useState } from "react"; import type { PlaceBusinessHourRow, PlaceBusinessHours, - ResolvedSavedPlace, ResolvedPlaceBusinessHours, + ResolvedSavedPlace, SavedPlace, } from "@/shared/types/map-home"; From a1dd6222312776bdbd6edaf1abdcc053f413c081 Mon Sep 17 00:00:00 2001 From: 1000hyehyang Date: Tue, 28 Apr 2026 15:08:43 +0900 Subject: [PATCH 3/5] =?UTF-8?q?fix:=20lint=20=EC=97=90=EB=9F=AC=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/place/BusinessHoursAccordion.tsx | 4 +--- src/components/place/PlaceDetailSheet.tsx | 7 ++----- src/features/map/hooks/use-place-filter-data.ts | 4 +++- src/pages/map/MapHomePage.tsx | 5 +---- src/shared/lib/place-business-hours.ts | 7 ++++--- 5 files changed, 11 insertions(+), 16 deletions(-) diff --git a/src/components/place/BusinessHoursAccordion.tsx b/src/components/place/BusinessHoursAccordion.tsx index 32cdf26..8df8712 100644 --- a/src/components/place/BusinessHoursAccordion.tsx +++ b/src/components/place/BusinessHoursAccordion.tsx @@ -16,9 +16,7 @@ function buildStatusSummary(businessHours: ResolvedPlaceBusinessHours): string { return businessHours.status; } -export function BusinessHoursAccordion({ - businessHours, -}: BusinessHoursAccordionProps) { +export function BusinessHoursAccordion({ businessHours }: BusinessHoursAccordionProps) { const [isExpanded, setIsExpanded] = useState(false); const todayHours = useMemo(() => { diff --git a/src/components/place/PlaceDetailSheet.tsx b/src/components/place/PlaceDetailSheet.tsx index cdbdde9..1e932d4 100644 --- a/src/components/place/PlaceDetailSheet.tsx +++ b/src/components/place/PlaceDetailSheet.tsx @@ -1,13 +1,10 @@ import { ExternalLink, MapPin } from "lucide-react"; -import { type JSX,useEffect, useMemo } from "react"; +import { type JSX, useEffect, useMemo } from "react"; import { BusinessHoursAccordion } from "@/components/place/BusinessHoursAccordion"; import { BottomSheet } from "@/components/ui/BottomSheet"; import { SAVED_PLACE_MOCKS } from "@/pages/map/map-home-mock"; -import { - resolveSavedPlacesBusinessHours, - useKoreanNow, -} from "@/shared/lib/place-business-hours"; +import { resolveSavedPlacesBusinessHours, useKoreanNow } from "@/shared/lib/place-business-hours"; import { usePlaceDetailStore } from "@/store/placeDetailStore"; export function PlaceDetailSheet(): JSX.Element | null { diff --git a/src/features/map/hooks/use-place-filter-data.ts b/src/features/map/hooks/use-place-filter-data.ts index 3cf42ac..00cd0bc 100644 --- a/src/features/map/hooks/use-place-filter-data.ts +++ b/src/features/map/hooks/use-place-filter-data.ts @@ -20,7 +20,9 @@ type UsePlaceFilterDataResult = { retryLoad: () => Promise; }; -export function usePlaceFilterData(filterDataOverride?: PlaceFilterData | null): UsePlaceFilterDataResult { +export function usePlaceFilterData( + filterDataOverride?: PlaceFilterData | null, +): UsePlaceFilterDataResult { const { data: placeFilterData, isPending, isError, refetch } = usePlaceFilterOptionsQuery(); const resolvedFilterData = filterDataOverride ?? placeFilterData; diff --git a/src/pages/map/MapHomePage.tsx b/src/pages/map/MapHomePage.tsx index 2a15952..56ec25b 100644 --- a/src/pages/map/MapHomePage.tsx +++ b/src/pages/map/MapHomePage.tsx @@ -15,10 +15,7 @@ import { MAP_SEARCH_PLACEHOLDER, SAVED_PLACE_MOCKS, } from "@/pages/map/map-home-mock"; -import { - resolveSavedPlacesBusinessHours, - useKoreanNow, -} from "@/shared/lib/place-business-hours"; +import { resolveSavedPlacesBusinessHours, useKoreanNow } from "@/shared/lib/place-business-hours"; import type { RoomFriend } from "@/shared/types/map-home"; import type { SelectedRoom } from "@/store/room-selection-store"; import { useRoomSelectionStore } from "@/store/room-selection-store"; diff --git a/src/shared/lib/place-business-hours.ts b/src/shared/lib/place-business-hours.ts index f68e0e0..85b5b85 100644 --- a/src/shared/lib/place-business-hours.ts +++ b/src/shared/lib/place-business-hours.ts @@ -92,8 +92,7 @@ function buildWeeklyHours( return businessHours.weeklySchedule.map((row) => { const isToday = row.dayOfWeek === parts.dayOfWeek; const label = isToday ? buildTodayLabel(parts) : DAY_LABELS[row.dayOfWeek]; - const hours = - row.openTime && row.closeTime ? `${row.openTime} ~ ${row.closeTime}` : "휴무"; + const hours = row.openTime && row.closeTime ? `${row.openTime} ~ ${row.closeTime}` : "휴무"; return { label, @@ -122,7 +121,9 @@ export function resolvePlaceBusinessHours( } const parts = getKoreanNowParts(now); - const todaySchedule = businessHours.weeklySchedule.find((row) => row.dayOfWeek === parts.dayOfWeek); + const todaySchedule = businessHours.weeklySchedule.find( + (row) => row.dayOfWeek === parts.dayOfWeek, + ); const weeklyHours = buildWeeklyHours(businessHours, parts); if (!todaySchedule || !todaySchedule.openTime || !todaySchedule.closeTime) { From 04022e0be42141147fbbf59e1ec8a8e9f4a0e9e8 Mon Sep 17 00:00:00 2001 From: rina1201 Date: Wed, 29 Apr 2026 15:15:16 +0900 Subject: [PATCH 4/5] =?UTF-8?q?fix:=20=EC=98=81=EC=97=85=EC=A0=95=EB=B3=B4?= =?UTF-8?q?=20=ED=86=A0=EA=B8=80=20=EC=97=86=EC=95=A0=EA=B8=B0=20=EB=B0=8F?= =?UTF-8?q?=20=EB=AA=A8=EB=8B=AC=20=EC=82=AC=EC=9D=B4=EC=A6=88=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 --- .../place/BusinessHoursAccordion.tsx | 55 +++++++------------ src/components/place/PlaceDetailSheet.tsx | 2 +- 2 files changed, 20 insertions(+), 37 deletions(-) diff --git a/src/components/place/BusinessHoursAccordion.tsx b/src/components/place/BusinessHoursAccordion.tsx index 32cdf26..de81d1f 100644 --- a/src/components/place/BusinessHoursAccordion.tsx +++ b/src/components/place/BusinessHoursAccordion.tsx @@ -1,5 +1,4 @@ -import { ChevronDown } from "lucide-react"; -import { useMemo, useState } from "react"; +import { useMemo } from "react"; import { cn } from "@/lib/utils"; import type { ResolvedPlaceBusinessHours } from "@/shared/types/map-home"; @@ -19,8 +18,6 @@ function buildStatusSummary(businessHours: ResolvedPlaceBusinessHours): string { export function BusinessHoursAccordion({ businessHours, }: BusinessHoursAccordionProps) { - const [isExpanded, setIsExpanded] = useState(false); - const todayHours = useMemo(() => { return ( businessHours?.weeklyHours.find((row) => row.isToday) ?? businessHours?.weeklyHours[0] ?? null @@ -39,6 +36,7 @@ export function BusinessHoursAccordion({ return (
+

영업시간

{buildStatusSummary(businessHours)}

{businessHours.holidayNotice ? (

{businessHours.holidayNotice}

@@ -47,39 +45,24 @@ export function BusinessHoursAccordion({ {todayHours ? (
- +

+ {todayHours.label} {todayHours.hours} +

- {isExpanded ? ( -
- {businessHours.weeklyHours.map((row) => ( -
- {row.label} - {row.hours} -
- ))} -
- ) : null} +
+ {businessHours.weeklyHours.map((row) => ( +
+ {row.label} + {row.hours} +
+ ))} +
) : null}
diff --git a/src/components/place/PlaceDetailSheet.tsx b/src/components/place/PlaceDetailSheet.tsx index cdbdde9..d94d25f 100644 --- a/src/components/place/PlaceDetailSheet.tsx +++ b/src/components/place/PlaceDetailSheet.tsx @@ -34,7 +34,7 @@ export function PlaceDetailSheet(): JSX.Element | null { hideHandle className="z-40" overlayClassName="bg-black/10" - panelClassName="min-h-[38dvh] max-h-[45dvh] rounded-t-3xl shadow-xl" + panelClassName="rounded-t-3xl shadow-xl" >
From 386b618e09669814251cf4fab67deacf31a5e34d Mon Sep 17 00:00:00 2001 From: 1000hyehyang Date: Wed, 29 Apr 2026 18:57:48 +0900 Subject: [PATCH 5/5] =?UTF-8?q?fix:=20=EC=98=81=EC=97=85=EC=8B=9C=EA=B0=84?= =?UTF-8?q?=20=EC=95=84=EC=BD=94=EB=94=94=EC=96=B8=20=EC=83=81=ED=83=9C=20?= =?UTF-8?q?=EC=B2=98=EB=A6=AC=20=EC=98=A4=EB=A5=98=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../place/BusinessHoursAccordion.tsx | 46 +++++++++++++------ 1 file changed, 31 insertions(+), 15 deletions(-) diff --git a/src/components/place/BusinessHoursAccordion.tsx b/src/components/place/BusinessHoursAccordion.tsx index 22e1798..1274ff1 100644 --- a/src/components/place/BusinessHoursAccordion.tsx +++ b/src/components/place/BusinessHoursAccordion.tsx @@ -1,4 +1,5 @@ -import { useMemo } from "react"; +import { ChevronDown } from "lucide-react"; +import { useMemo, useState } from "react"; import { cn } from "@/lib/utils"; import type { ResolvedPlaceBusinessHours } from "@/shared/types/map-home"; @@ -49,20 +50,35 @@ export function BusinessHoursAccordion({ businessHours }: BusinessHoursAccordion {todayHours.label} {todayHours.hours}

-
- {businessHours.weeklyHours.map((row) => ( -
- {row.label} - {row.hours} -
- ))} -
+ + + {isExpanded ? ( +
+ {businessHours.weeklyHours.map((row) => ( +
+ {row.label} + {row.hours} +
+ ))} +
+ ) : null}
) : null}