UNPKG

google-maps-js-api-react

Version:

Fast, tree-shakable, and light-weight React components and hooks for integrating Google Maps API functionality

1 lines 6.55 kB
{"version":3,"sources":["../../src/utils/useHandlersAndProps.ts","../../src/utils/getConnectedEventsAndProps.ts","../../src/utils/handleHas.ts"],"names":["useConst","props","useLayoutEffect","useEffect","CHANGED"],"mappings":"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","file":"chunk-QWMSBSOL.cjs","sourcesContent":["import { useEffect, useLayoutEffect } from 'react';\nimport type { UnGet } from '../types';\nimport useConst from 'react-helpful-utils/useConst';\nimport { CHANGED } from './constants';\n\n/** @internal */\nconst useHandlersAndProps = <\n Props extends Record<string, any>,\n Instance extends google.maps.MVCObject & {\n setOptions(options: Record<string, any>): void;\n },\n>(\n props: Props,\n connectedPairs: Map<string, UnGet<keyof Instance>>,\n isKeyOmitted: (key: keyof Props) => boolean\n) =>\n useConst(() => {\n const isTriggeredBySetStateSet = new Set<string>();\n\n const handlersList: string[] = [];\n\n const propsList: string[] = [];\n\n let isUpdated: boolean;\n\n let instance: Instance;\n\n for (const key in props) {\n if (!isKeyOmitted(key)) {\n (key.startsWith('on') ? handlersList : propsList).push(key);\n }\n }\n\n return (props: Props) => {\n for (let i = propsList.length; i--; ) {\n const key = propsList[i];\n\n const value: any = props[key];\n\n useLayoutEffect(() => {\n if (isUpdated) {\n isTriggeredBySetStateSet.add(key);\n\n instance.setOptions({ [key]: value });\n }\n }, [value]);\n }\n\n if (propsList.length) {\n useLayoutEffect(() => {\n isUpdated = true;\n\n return () => {\n isUpdated = false;\n };\n }, []);\n }\n\n for (let i = handlersList.length; i--; ) {\n const key = handlersList[i];\n\n const value = props[key] as ((...args: any[]) => void) | undefined;\n\n useEffect(() => {\n if (value) {\n const eventName = (\n key.endsWith('Changed')\n ? key.slice(2, -7) + CHANGED\n : key.slice(2)\n ).toLowerCase();\n\n let fn = value;\n\n if (connectedPairs.has(eventName)) {\n const dependBy = connectedPairs.get(eventName)!;\n\n const boundFn = fn.bind(instance);\n\n if (dependBy in props) {\n isTriggeredBySetStateSet.delete(dependBy);\n\n fn = () => {\n if (!isTriggeredBySetStateSet.delete(dependBy)) {\n boundFn(instance.get(dependBy));\n }\n };\n } else if (fn.length) {\n fn = () => {\n boundFn(instance.get(dependBy));\n };\n }\n }\n\n const listener = instance.addListener(eventName, fn);\n\n return () => listener.remove();\n }\n }, [value]);\n }\n\n return (_instance: Instance) => {\n instance = _instance;\n };\n };\n })(props);\n\n/** @internal */\nexport default useHandlersAndProps;\n","import type { UnGet } from '../types';\nimport { CHANGED } from './constants';\n\n/** @internal */\nconst getConnectedEventsAndProps = <Instance>(\n arr: Array<UnGet<keyof Instance>> | undefined\n) => {\n const connectedEventsAndProps = new Map<string, UnGet<keyof Instance>>();\n\n if (arr) {\n for (let i = 0; i < arr.length; i++) {\n const item = arr[i];\n\n connectedEventsAndProps.set(\n (item as string).toLowerCase() + CHANGED,\n item\n );\n }\n }\n\n return connectedEventsAndProps;\n};\n\n/** @internal */\nexport default getConnectedEventsAndProps;\n","const handleHas = <O extends Record<string, any>>(keys: Array<keyof O>) => {\n const set = new Set(keys);\n\n return set.has.bind(set);\n};\n\nexport default handleHas;\n"]}