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 4.32 kB
{"version":3,"sources":["../../src/utils/handleComponent.ts"],"names":["handleHas_default","getConnectedEventsAndProps_default","MAPS","forwardRef","GoogleMapsLoader","useContext","MapContext_default","useLayoutEffect","setRef","useHandlersAndProps_default"],"mappings":";;;;;;;;;;;;;AA4BA,IAAM,eAAeA,mCAAoD,CAAA;AAAA,EACvE,gBAAA;AAAA,EACA;AACF,CAAC,CAAA;AAGD,IAAM,eAAA,GAAkB,CAKtB,YAAA,EACA,cACG,KAAA;AACH,EAAM,MAAA,uBAAA,GAA0BC,qDAA2B,cAAc,CAAA;AAEzE,EAAM,MAAA,CAAC,OAAS,EAAA,SAAS,CAAI,GAAA,YAAA;AAK7B,EAAA,IAAI,WAAW,OAAW,IAAAC,sBAAA;AAE1B,EAAI,IAAA,aAAA;AAEJ,EAAO,OAAAC,gBAAA,CAIL,CAAC,KAAA,EAAO,GAAQ,KAAA;AAChB,IAAA,IAAI,QAAU,EAAA;AACZ,MAAM,MAAA,MAAA,GAASC,sCAAiB,CAAA,SAAA,CAAU,OAAO,CAAA;AAEjD,MAAA,IAAI,UAAU,QAAU,EAAA;AACtB,QACE,MAAA,CAAA,MAAA,IAAU,OACL,GAAA,KAAA,CAA2B,WAC1B,GAAAA,sCAAA,CAAiB,gBACjBA,sCAAiB,CAAA,IAAA,GACnBA,sCAAiB,CAAA,QAAA,EACrB,OAAO,CAAA;AAAA,OACJ,MAAA;AACL,QAAW,QAAA,GAAA,KAAA;AAAA;AACb;AAGF,IAAM,MAAA,GAAA,GAAMC,iBAAWC,oCAAU,CAAA;AAEjC,IAAAC,qBAAA,CAAgB,MAAM;AACpB,MAAA,IAAI,CAAC,aAAe,EAAA;AAClB,QAAA,aAAA,GAAgBH,sCAAiB,CAAA,GAAA,CAAI,OAAO,CAAA,CAAG,SAAS,CAAA;AAAA;AAG1D,MAAM,MAAA,QAAA,GAAqB,IAAI,aAAc,CAAA;AAAA,QAC3C,GAAA;AAAA,QACA,GAAG,KAAM,CAAA,cAAA;AAAA,QACT,GAAG;AAAA,OACJ,CAAA;AAED,MAAA,WAAA,CAAY,QAAQ,CAAA;AAEpB,MAAAI,uBAAA,CAAO,KAAK,QAAQ,CAAA;AAEpB,MAAA,OAAO,MAAM;AACX,QAAA,QAAA,CAAS,OAAO,IAAI,CAAA;AAEpB,QAAAA,uBAAA,CAAO,KAAK,IAAI,CAAA;AAAA,OAClB;AAAA,KACF,EAAG,EAAE,CAAA;AAEL,IAAA,MAAM,WAAc,GAAAC,6CAAA;AAAA,MAClB,KAAA;AAAA,MACA,uBAAA;AAAA,MACA;AAAA,KACF;AAEA,IAAO,OAAA,IAAA;AAAA,GACR,CAAA;AACH,CAAA;AAGA,IAAO,uBAAQ,GAAA","file":"chunk-SPLLOINP.cjs","sourcesContent":["import { forwardRef, useContext, useLayoutEffect } from 'react';\nimport type {\n ClassType,\n CombineProps,\n PathTo,\n TypicalInstance,\n PossibleHandlers,\n PossibleProps,\n UnGet,\n CommonProps,\n PreventLoadProps,\n} from '../types';\nimport useHandlersAndProps from './useHandlersAndProps';\nimport getConnectedEventsAndProps from './getConnectedEventsAndProps';\nimport setRef from 'react-helpful-utils/setRef';\nimport handleHas from './handleHas';\nimport {\n type GoogleMapsLibraries,\n type GoogleMapsLibrary,\n GoogleMapsLoader,\n} from 'google-maps-js-api-loader';\nimport { MAPS } from './constants';\nimport MapContext from './MapContext';\n\ntype MapChild = TypicalInstance & {\n setMap(map: google.maps.Map | null): void;\n};\n\nconst isKeyOmitted = handleHas<CommonProps<MapChild> & PreventLoadProps>([\n 'defaultOptions',\n 'preventLoad',\n]);\n\n/** @internal */\nconst handleComponent = <\n Instance extends MapChild,\n H extends PossibleHandlers,\n P extends PossibleProps<Instance>,\n>(\n instancePath: PathTo<Instance>,\n connectedProps?: UnGet<keyof Instance>[]\n) => {\n const connectedEventsAndProps = getConnectedEventsAndProps(connectedProps);\n\n const [library, className] = instancePath as [\n GoogleMapsLibrary,\n keyof GoogleMapsLibraries[GoogleMapsLibrary],\n ];\n\n let isUnsafe = library != MAPS;\n\n let InstanceClass: ClassType<Instance>;\n\n return forwardRef<\n Instance,\n CombineProps<Instance, H, P> &\n (PathTo<Instance> extends [typeof MAPS, string] ? {} : PreventLoadProps)\n >((props, ref) => {\n if (isUnsafe) {\n const status = GoogleMapsLoader.getStatus(library);\n\n if (status != 'loaded') {\n throw (\n status != 'error'\n ? (props as PreventLoadProps).preventLoad\n ? GoogleMapsLoader.getCompletion\n : GoogleMapsLoader.load\n : GoogleMapsLoader.getError\n )(library);\n } else {\n isUnsafe = false;\n }\n }\n\n const map = useContext(MapContext);\n\n useLayoutEffect(() => {\n if (!InstanceClass) {\n InstanceClass = GoogleMapsLoader.get(library)![className];\n }\n\n const instance: Instance = new InstanceClass({\n map,\n ...props.defaultOptions,\n ...props,\n });\n\n setInstance(instance);\n\n setRef(ref, instance);\n\n return () => {\n instance.setMap(null);\n\n setRef(ref, null);\n };\n }, []);\n\n const setInstance = useHandlersAndProps(\n props,\n connectedEventsAndProps,\n isKeyOmitted as any\n );\n\n return null;\n });\n};\n\n/** @internal */\nexport default handleComponent;\n"]}