{"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"]}