UNPKG

react-naver-maps

Version:

React Navermaps API integration for modern development.

1 lines 4.49 kB
{"version":3,"sources":["../src/overlays/info-window.tsx"],"sourcesContent":["import pick from 'lodash.pick';\nimport { 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 'content',\n 'zIndex',\n 'maxWidth',\n 'pixelOffset',\n 'backgroundColor',\n 'borderColor',\n 'borderWidth',\n 'disableAutoPan',\n 'disableAnchor',\n 'anchorSkew',\n 'anchorSize',\n 'anchorColor',\n] as const;\nconst kvoKeys = [\n ...primitiveKvoKeys,\n 'position',\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 InfoWindowOptions = {\n /**\n * position\n * @type naver.maps.Coord | naver.maps.CoordLiteral\n */\n position?: naver.maps.Coord | naver.maps.CoordLiteral;\n content: string;\n zIndex?: number;\n maxWidth?: number;\n /**\n * @type naver.maps.Point | naver.maps.PointLiteral\n */\n pixelOffset?: naver.maps.Point | naver.maps.PointLiteral;\n backgroundColor?: string;\n borderColor?: string;\n borderWidth?: number;\n disableAutoPan?: boolean;\n disableAnchor?: boolean;\n anchorSkew?: boolean;\n /**\n * @type naver.maps.Size | naver.maps.SizeLiteral\n */\n anchorSize?: naver.maps.Size | naver.maps.SizeLiteral;\n anchorColor?: string;\n};\n\nexport type Props = InfoWindowOptions & {\n onPositionChanged?: (value: naver.maps.Coord) => void;\n onContentChanged?: (value: HTMLElement) => void;\n onZIndexChanged?: (value: number) => void;\n onMaxWidthChanged?: (value: number) => void;\n onPixelOffsetChanged?: (value: naver.maps.Point) => void;\n onBackgroundColorChanged?: (value: string) => void;\n onBorderColorChanged?: (value: string) => void;\n onBorderWidthChanged?: (value: number) => void;\n onDisableAutoPanChanged?: (value: boolean) => void;\n onDisableAnchorChanged?: (value: boolean) => void;\n onAnchorSkewChanged?: (value: boolean) => void;\n onAnchorSizeChanged?: (value: naver.maps.Size) => void;\n onAnchorColorChanged?: (value: string) => void;\n} & UIEventHandlers<typeof uiEvents>;\n\nexport const InfoWindow = forwardRef<naver.maps.InfoWindow, Props>(function InfoWindow(props, ref) {\n const { position } = props;\n const navermaps = useNavermaps();\n const [infoWindow] = useState(() => new navermaps.InfoWindow(omitUndefined(pick(props, [...kvoKeys])) as InfoWindowOptions));\n\n useImperativeHandle<naver.maps.InfoWindow | undefined, naver.maps.InfoWindow | undefined>(ref, () => infoWindow);\n\n useEffect(() => {\n infoWindow.setOptions(omitUndefined(pick(props, primitiveKvoKeys)) as InfoWindowOptions); // TODO: FIX DefinilyTyped\n }, primitiveKvoKeys.map(key => props[key]));\n\n useEffect(() => {\n if (position && infoWindow.getPosition().equals(position as naver.maps.Point)) {\n infoWindow.setPosition(position);\n }\n }, [position]);\n\n return (\n <Overlay element={infoWindow} autoMount={false}>\n <HandleEvents events={events} listeners={props as any} />\n </Overlay>\n );\n});\n"],"mappings":";;;;;;;;;;;;;;AAAA,OAAO,UAAU;AACjB,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,aAAa;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;AA4ClC,IAAM,aAAa,WAAyC,SAASA,YAAW,OAAO,KAAK;AACjG,QAAM,EAAE,SAAS,IAAI;AACrB,QAAM,YAAY,aAAa;AAC/B,QAAM,CAAC,UAAU,IAAI,SAAS,MAAM,IAAI,UAAU,WAAW,cAAc,KAAK,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC,CAAsB,CAAC;AAE3H,sBAA0F,KAAK,MAAM,UAAU;AAE/G,YAAU,MAAM;AACd,eAAW,WAAW,cAAc,KAAK,OAAO,gBAAgB,CAAC,CAAsB;AAAA,EACzF,GAAG,iBAAiB,IAAI,SAAO,MAAM,IAAI,CAAC;AAE1C,YAAU,MAAM;AACd,QAAI,YAAY,WAAW,YAAY,EAAE,OAAO,QAA4B,GAAG;AAC7E,iBAAW,YAAY,QAAQ;AAAA,IACjC;AAAA,EACF,GAAG,CAAC,QAAQ,CAAC;AAEb,SACE,oBAAC;AAAA,IAAQ,SAAS;AAAA,IAAY,WAAW;AAAA,IACvC,8BAAC;AAAA,MAAa;AAAA,MAAgB,WAAW;AAAA,KAAc;AAAA,GACzD;AAEJ,CAAC;","names":["InfoWindow"]}