import { CSSProperties, ForwardedRef, forwardRef, PropsWithChildren, useImperativeHandle, useLayoutEffect, useRef } from 'react' type Props = PropsWithChildren<{ id?: string className?: string onClick?: (event: naver.maps.PointerEvent) => void onRightClick?: (event: naver.maps.PointerEvent) => void mapOptions?: naver.maps.MapOptions style?: CSSProperties }> const NaverMap = forwardRef(function NaverMap(props: Props, ref: ForwardedRef) { const {id, className, mapOptions, style} = props const divRef = useRef(null), mapRef = useRef(null) useLayoutEffect(() => { const listeners: naver.maps.MapEventListener[] = [] if (divRef.current) { mapRef.current = new naver.maps.Map(divRef.current, mapOptions) if (props.onClick) { listeners.push(mapRef.current!.addListener('click', props.onClick)) } if (props.onRightClick) { listeners.push(mapRef.current!.addListener('rightclick', props.onRightClick)) } } return () => { naver.maps.Event.removeListener(listeners) } }, [divRef.current]) useImperativeHandle(ref, () => mapRef.current) return ( // Wrapper
{/* Map */}
{props.children}
) }) export default NaverMap