diff --git a/frontend/src/components/google-maps/marker/components/MaxDeltaAreaMarkerContainer/components/RegionMarkerRenderer.tsx b/frontend/src/components/google-maps/marker/components/MaxDeltaAreaMarkerContainer/components/RegionMarkerRenderer.tsx
index b3233bfda..0e521cfe2 100644
--- a/frontend/src/components/google-maps/marker/components/MaxDeltaAreaMarkerContainer/components/RegionMarkerRenderer.tsx
+++ b/frontend/src/components/google-maps/marker/components/MaxDeltaAreaMarkerContainer/components/RegionMarkerRenderer.tsx
@@ -1,6 +1,7 @@
-import { useEffect } from 'react';
+import { useLayoutEffect } from 'react';
+
+import { useMarker } from '@marker/hooks/useRenderMarker';
-import { useRenderRegionMarker } from '../hooks/useRenderRegionMarker';
import type { Region } from '../types';
export interface RegionMarkerProps {
@@ -8,12 +9,12 @@ export interface RegionMarkerProps {
}
const RegionMarkerRenderer = ({ region }: RegionMarkerProps) => {
- const { renderRegionMarker } = useRenderRegionMarker();
+ const { renderRegionMarker } = useMarker();
- useEffect(() => {
- const unmountRegionMarker = renderRegionMarker(region);
+ useLayoutEffect(() => {
+ const unmount = renderRegionMarker(region);
- return unmountRegionMarker;
+ return unmount;
}, []);
return <>>;
diff --git a/frontend/src/components/google-maps/marker/components/MaxDeltaAreaMarkerContainer/hooks/useRenderRegionMarker.tsx b/frontend/src/components/google-maps/marker/components/MaxDeltaAreaMarkerContainer/hooks/useRenderRegionMarker.tsx
deleted file mode 100644
index 7e2448542..000000000
--- a/frontend/src/components/google-maps/marker/components/MaxDeltaAreaMarkerContainer/hooks/useRenderRegionMarker.tsx
+++ /dev/null
@@ -1,44 +0,0 @@
-import { createRoot } from 'react-dom/client';
-
-import { useExternalValue } from '@utils/external-state';
-
-import { getGoogleMapStore, googleMapActions } from '@stores/google-maps/googleMapStore';
-
-import RegionMarker from '../components/RegionMarker';
-import type { Region } from '../types';
-
-export const useRenderRegionMarker = () => {
- const googleMap = useExternalValue(getGoogleMapStore());
-
- const renderRegionMarker = (region: Region) => {
- const { latitude, longitude, count, regionName } = region;
-
- const container = document.createElement('div');
-
- container.style.opacity = '0';
- container.classList.add('marker-animation');
- container.addEventListener('animationend', () => {
- container.classList.remove('marker-animation');
- container.style.opacity = '1';
- });
-
- const markerInstance = new google.maps.marker.AdvancedMarkerElement({
- position: { lat: latitude, lng: longitude },
- map: googleMap,
- title: regionName,
- content: container,
- });
-
- createRoot(container).render();
-
- markerInstance.addListener('click', () => {
- googleMapActions.moveTo({ lat: latitude, lng: longitude }, 12);
- });
-
- return () => {
- markerInstance.map = null;
- };
- };
-
- return { renderRegionMarker };
-};
diff --git a/frontend/src/components/google-maps/marker/components/SmallMediumDeltaAreaMarkerContainer/components/marker/CarffeineMarkerRenderer.tsx b/frontend/src/components/google-maps/marker/components/SmallMediumDeltaAreaMarkerContainer/components/marker/CarffeineMarkerRenderer.tsx
index 0b8f668d9..966b4d10b 100644
--- a/frontend/src/components/google-maps/marker/components/SmallMediumDeltaAreaMarkerContainer/components/marker/CarffeineMarkerRenderer.tsx
+++ b/frontend/src/components/google-maps/marker/components/SmallMediumDeltaAreaMarkerContainer/components/marker/CarffeineMarkerRenderer.tsx
@@ -8,7 +8,6 @@ interface Props {
station: StationMarker;
}
-// TODO: 여기다가 옵셔널로 infoWindow 열리고 닫히는 속성 넣어서 한번 컨트롤 해보기
const CarffeineMarkerRenderer = ({ station }: Props) => {
const { renderCarffeineMarker } = useMarker();
diff --git a/frontend/src/components/google-maps/marker/hooks/useRenderMarker.tsx b/frontend/src/components/google-maps/marker/hooks/useRenderMarker.tsx
index c8861951b..e7c2f8b93 100644
--- a/frontend/src/components/google-maps/marker/hooks/useRenderMarker.tsx
+++ b/frontend/src/components/google-maps/marker/hooks/useRenderMarker.tsx
@@ -1,6 +1,8 @@
import { createRoot } from 'react-dom/client';
import StyledClusterMarker from '@marker/components/LargeDeltaAreaMarkerContainer/components/StyledClusterMarker';
+import RegionMarker from '@marker/components/MaxDeltaAreaMarkerContainer/components/RegionMarker';
+import type { Region } from '@marker/components/MaxDeltaAreaMarkerContainer/types';
import CarFfeineMarker from '@marker/components/SmallMediumDeltaAreaMarkerContainer/components/CarFfeineMarker';
import {
addMarkerInstanceToExternalStore,
@@ -76,6 +78,23 @@ export const useMarker = () => {
};
};
+ const renderRegionMarker = (region: Region) => {
+ const { latitude, longitude, count, regionName } = region;
+
+ const markerInstance = createMarkerInstance(latitude, longitude);
+ const container = createMarkerDomElement();
+
+ markerInstance.title = regionName;
+ markerInstance.content = container;
+
+ bindRegionMarkerClickEvent(markerInstance, region);
+ createRoot(container).render();
+
+ return () => {
+ markerInstance.map = null;
+ };
+ };
+
const bindStationMarkerClickEvent = (
markerInstance: google.maps.marker.AdvancedMarkerElement,
stationId: string
@@ -102,9 +121,21 @@ export const useMarker = () => {
});
};
+ const bindRegionMarkerClickEvent = (
+ markerInstance: google.maps.marker.AdvancedMarkerElement,
+ region: Region
+ ) => {
+ const { latitude, longitude } = region;
+
+ markerInstance.addListener('click', () => {
+ googleMapActions.moveTo({ lat: latitude, lng: longitude }, 12);
+ });
+ };
+
return {
renderDefaultMarker,
renderCarffeineMarker,
renderClusterMarker,
+ renderRegionMarker,
};
};