UNPKG

@davedev42/react-naver-maps

Version:

React Navermaps API integration for modern development.

1 lines 4.55 kB
{"version":3,"sources":["../src/overlays/circle.tsx"],"sourcesContent":["import { forwardRef, useEffect, useImperativeHandle, useState } from 'react';\n\nimport { HandleEvents } from '../helpers/event';\nimport { Overlay } from '../overlay';\nimport type { UIEventHandlers } from '../types/event';\nimport { useNavermaps } from '../use-navermaps';\nimport { omitUndefined } from '../utils/omit-undefined';\n\nconst primitiveKvoKeys = [\n 'radius',\n 'strokeWeight',\n 'strokeOpacity',\n 'strokeColor',\n 'strokeStyle',\n 'strokeLineCap',\n 'strokeLineJoin',\n 'fillColor',\n 'fillOpacity',\n 'clickable',\n 'visible',\n 'zIndex',\n] as const;\nconst kvoKeys = [\n ...primitiveKvoKeys,\n 'center',\n] as const;\nconst kvoEvents = kvoKeys.map(key => `${key}_changed`);\nconst uiEvents = [\n 'mousedown',\n 'mouseup',\n 'click',\n 'dblclick',\n 'rightclick',\n 'mouseover',\n 'mouseout',\n 'mousemove',\n] as const;\nconst events = [...uiEvents, ...kvoEvents];\n\ntype CircleOptions = {\n /**\n * center\n * @type naver.maps.Coord | naver.maps.CoordLiteral\n */\n center: naver.maps.Coord | naver.maps.CoordLiteral;\n radius?: number;\n strokeWeight?: number;\n strokeOpacity?: number;\n strokeColor?: string;\n strokeStyle?: naver.maps.StrokeStyleType;\n strokeLineCap?: naver.maps.StrokeLineCapType;\n strokeLineJoin?: naver.maps.StrokeLineJoinType;\n fillColor?: string;\n fillOpacity?: number;\n clickable?: boolean;\n visible?: boolean;\n zIndex?: number;\n};\n\nexport type Props = CircleOptions & {\n onCenterChanged?: (value: naver.maps.Coord) => void;\n onRadiusChanged?: (value: number) => void;\n onStrokeWeightChanged?: (value: number) => void;\n onStrokeOpacityChanged?: (value: number) => void;\n onStrokeColorChanged?: (value: string) => void;\n onStrokeStyleChanged?: (value: naver.maps.StrokeStyleType) => void;\n onStrokeLineCapChanged?: (value: naver.maps.StrokeLineCapType) => void;\n onStrokeLineJoinChanged?: (value: naver.maps.StrokeLineJoinType) => void;\n onFillColorChanged?: (value: string) => void;\n onFillOpacityChanged?: (value: number) => void;\n onClickableChanged?: (event: boolean) => void;\n onVisibleChanged?: (event: boolean) => void;\n onZIndexChanged?: (event: number) => void;\n} & UIEventHandlers<typeof uiEvents>;\n\nexport const Circle = forwardRef<naver.maps.Circle, Props>(function Circle(props, ref) {\n const { center } = props;\n const navermaps = useNavermaps();\n const [circle] = useState(() => new navermaps.Circle(omitUndefined({\n ...Object.fromEntries(kvoKeys.map(key => [key, props[key]])),\n center: props.center,\n }) as CircleOptions));\n\n useImperativeHandle<naver.maps.Circle | undefined, naver.maps.Circle | undefined>(ref, () => circle);\n\n useEffect(() => {\n if (center && !circle.getCenter().equals(center as naver.maps.Point)) {\n circle.setCenter(center);\n }\n }, [center]);\n\n useEffect(() => {\n const options = omitUndefined(Object.fromEntries(primitiveKvoKeys.map(key => [key, props[key]])));\n if (Object.keys(options).length > 0) {\n circle.setOptions(options as unknown as CircleOptions);\n }\n }, primitiveKvoKeys.map(key => props[key]));\n\n return (\n <Overlay element={circle}>\n <HandleEvents events={events} listeners={props as any} />\n </Overlay>\n );\n});\n"],"mappings":";;;;;;;;;;;;;;AAAA,SAAS,YAAY,WAAW,qBAAqB,gBAAgB;AAoG/D;AA5FN,IAAM,mBAAmB;AAAA,EACvB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AACA,IAAM,UAAU;AAAA,EACd,GAAG;AAAA,EACH;AACF;AACA,IAAM,YAAY,QAAQ,IAAI,SAAO,GAAG,GAAG,UAAU;AACrD,IAAM,WAAW;AAAA,EACf;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AACA,IAAM,SAAS,CAAC,GAAG,UAAU,GAAG,SAAS;AAsClC,IAAM,SAAS,WAAqC,SAASA,QAAO,OAAO,KAAK;AACrF,QAAM,EAAE,OAAO,IAAI;AACnB,QAAM,YAAY,aAAa;AAC/B,QAAM,CAAC,MAAM,IAAI,SAAS,MAAM,IAAI,UAAU,OAAO,cAAc;AAAA,IACjE,GAAG,OAAO,YAAY,QAAQ,IAAI,SAAO,CAAC,KAAK,MAAM,GAAG,CAAC,CAAC,CAAC;AAAA,IAC3D,QAAQ,MAAM;AAAA,EAChB,CAAC,CAAkB,CAAC;AAEpB,sBAAkF,KAAK,MAAM,MAAM;AAEnG,YAAU,MAAM;AACd,QAAI,UAAU,CAAC,OAAO,UAAU,EAAE,OAAO,MAA0B,GAAG;AACpE,aAAO,UAAU,MAAM;AAAA,IACzB;AAAA,EACF,GAAG,CAAC,MAAM,CAAC;AAEX,YAAU,MAAM;AACd,UAAM,UAAU,cAAc,OAAO,YAAY,iBAAiB,IAAI,SAAO,CAAC,KAAK,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;AAChG,QAAI,OAAO,KAAK,OAAO,EAAE,SAAS,GAAG;AACnC,aAAO,WAAW,OAAmC;AAAA,IACvD;AAAA,EACF,GAAG,iBAAiB,IAAI,SAAO,MAAM,GAAG,CAAC,CAAC;AAE1C,SACE,oBAAC,WAAQ,SAAS,QAChB,8BAAC,gBAAa,QAAgB,WAAW,OAAc,GACzD;AAEJ,CAAC;","names":["Circle"]}