{"version":3,"file":"Map.mjs","sources":[""],"sourcesContent":["import { Map, YMaps } from \"@pbe/react-yandex-maps\";\r\nimport type {\r\n  ReactElement, FC, PropsWithChildren, NamedExoticComponent,\r\n} from \"react\";\r\nimport {\r\n  useContext, memo, useEffect, useState, useRef,\r\n} from \"react\";\r\nimport type { IMapState, IMapOptions, Clusterer } from \"yandex-maps\";\r\nimport type {\r\n  TMapContext, TCluster, TLangs, TAPI, TMapInstance,\r\n} from \"../config/types\";\r\nimport { MapContext } from \"../context\";\r\nimport { MapItems } from \"../ui/MapItems\";\r\nimport type { TMapItemsProps } from \"../ui/MapItems\";\r\nimport { MapModules } from \"../ui/MapModules\";\r\nimport type { TMapModulesProps } from \"../ui/MapModules\";\r\nimport { MapPanel } from \"../ui/MapPanel\";\r\nimport type { TMapPanelProps } from \"../ui/MapPanel\";\r\n\r\nconst MemoModules: NamedExoticComponent<TMapModulesProps> = memo((props) => <MapModules {...props} />);\r\nMemoModules.displayName = \"MapModules\";\r\n\r\nconst MemoItems: NamedExoticComponent<TMapItemsProps> = memo((props) => <MapItems {...props} />);\r\nMemoItems.displayName = \"MapItems\";\r\n\r\nconst MemoPanel: NamedExoticComponent<TMapPanelProps> = memo((props) => <MapPanel {...props} />);\r\nMemoPanel.displayName = \"MapPanel\";\r\n\r\n/**\r\n * Внутренний компонент карты\r\n\r\n * @returns {ReactElement}\r\n */\r\nconst YandexMap: FC<PropsWithChildren & {\r\n  onReady: (instance: TAPI, clusters: Clusterer[]) => void;\r\n  onError: (err: Error) => void;\r\n  state: IMapState;\r\n  options: IMapOptions;\r\n  query: {\r\n    apikey: string;\r\n    lang: TLangs;\r\n  };\r\n  clusters: TCluster[];\r\n}> = ({\r\n  onReady,\r\n  onError,\r\n  children,\r\n  query,\r\n  state,\r\n  clusters,\r\n  options,\r\n}): ReactElement => {\r\n\r\n  const { instanceRef, getCN } = useContext<TMapContext>(MapContext);\r\n\r\n  const [ apiInstance, setApiInstance ] = useState<TAPI>(null);\r\n  const [ clustersInstance, setClustersInstance ] = useState<Clusterer[] | null>(null);\r\n  const isReadyCalled = useRef<boolean>(false);\r\n\r\n  const onClustersReady = (clusters: Clusterer[]) => {\r\n    setClustersInstance(clusters);\r\n  };\r\n\r\n  const onMapReady = (ymaps: TAPI) => {\r\n    setApiInstance(ymaps);\r\n  };\r\n\r\n  const saveInstance = (instance: TMapInstance) => {\r\n    if (instance) { // can be null\r\n      instanceRef.current = instance;\r\n    }\r\n  };\r\n\r\n  useEffect(() => {\r\n    if (apiInstance && clustersInstance && !isReadyCalled.current && typeof onReady === \"function\") {\r\n      isReadyCalled.current = true;\r\n      onReady(apiInstance, clustersInstance);\r\n    }\r\n  }, [ apiInstance, clustersInstance, onReady ]);\r\n\r\n  return (\r\n    <YMaps query={query}>\r\n      <Map\r\n        className={getCN(\"map\")}\r\n        state={state}\r\n        defaultState={state}\r\n        defaultOptions={options}\r\n        options={options}\r\n        onLoad={onMapReady}\r\n        onError={onError}\r\n        width={\"100%\"}\r\n        height={\"100%\"}\r\n        instanceRef={saveInstance}>\r\n        <MemoItems onReady={onClustersReady} clusters={clusters}>\r\n          {children}\r\n        </MemoItems>\r\n      </Map>\r\n    </YMaps>\r\n  );\r\n\r\n};\r\n\r\nexport default YandexMap;\r\n"],"names":["MemoModules","memo","props","_jsx","MapModules","displayName","MemoItems","MapItems","MemoPanel","MapPanel","YandexMap","onReady","onError","children","query","state","clusters","options","instanceRef","getCN","useContext","MapContext","apiInstance","setApiInstance","useState","clustersInstance","setClustersInstance","isReadyCalled","useRef","onClustersReady","onMapReady","ymaps","saveInstance","instance","current","useEffect","YMaps","Map","className","defaultState","defaultOptions","onLoad","width","height"],"mappings":"8SAmBA,MAAMA,YAAsDC,KAAMC,OAAUC,IAACC,WAAU,IAAKF,SAC5FF,YAAYK,YAAc,aAE1B,MAAMC,UAAkDL,KAAMC,OAAUC,IAACI,SAAQ,IAAKL,SACtFI,UAAUD,YAAc,WAExB,MAAMG,UAAkDP,KAAMC,OAAUC,IAACM,SAAQ,IAAKP,SACtFM,UAAUH,YAAc;;;;;GAOxB,MAAMK,UAUD,EACHC,gBACAC,gBACAC,kBACAC,YACAC,YACAC,kBACAC,oBAGA,MAAMC,YAAEA,YAAWC,MAAEA,OAAUC,WAAwBC,YAEvD,MAAQC,YAAaC,gBAAmBC,SAAe,MACvD,MAAQC,iBAAkBC,qBAAwBF,SAA6B,MAC/E,MAAMG,cAAgBC,OAAgB,OAEtC,MAAMC,gBAAmBb,WACvBU,oBAAoBV,WAGtB,MAAMc,WAAcC,QAClBR,eAAeQ,QAGjB,MAAMC,aAAgBC,WACpB,GAAIA;;AACFf,YAAYgB,QAAUD,UAI1BE,UAAU,KACR,GAAIb,aAAeG,mBAAqBE,cAAcO,gBAAkBvB,UAAY,WAAY,CAC9FgB,cAAcO,QAAU,KACxBvB,QAAQW,YAAaG,iBACvB,GACC,CAAEH,YAAaG,iBAAkBd;AAEpC,OACER,IAACiC,MAAK,CAACtB,MAAOA,MAAMD,SAClBV,IAACkC,IAAG,CACFC,UAAWnB,MAAM,OACjBJ,MAAOA,MACPwB,aAAcxB,MACdyB,eAAgBvB,QAChBA,QAASA,QACTwB,OAAQX,WACRlB,QAASA,QACT8B,MAAO,OACPC,OAAQ,OACRzB,YAAac,aAAanB,SAC1BV,IAACG,UAAS,CAACK,QAASkB,gBAAiBb,SAAUA,SAASH,SACrDA"}