{"version":3,"file":"MapModules.mjs","sources":[""],"sourcesContent":["import {\r\n  FullscreenControl,\r\n  GeolocationControl,\r\n  RulerControl,\r\n  SearchControl,\r\n  TrafficControl,\r\n  ZoomControl,\r\n  TypeSelector,\r\n} from \"@pbe/react-yandex-maps\";\r\nimport type { FC, PropsWithChildren, ReactNode } from \"react\";\r\nimport { useMemo } from \"react\";\r\nimport { mapDefaults } from \"../config\";\r\nimport type { IMap, TAPI, TUserFactory } from \"../config/types\";\r\nimport { getLayoutConstructor } from \"../lib\";\r\nimport { isNeedFactory } from \"../lib/modules\";\r\n\r\nexport type TMapModulesProps = Pick<IMap, \"modules\"> & PropsWithChildren<{\r\n  ymaps: TAPI;\r\n}>;\r\n\r\ntype TModuleName = keyof TMapModulesProps[\"modules\"];\r\ntype TModuleProps = TMapModulesProps[\"modules\"][TModuleName];\r\n\r\nconst MapModule: FC<{\r\n  name: TModuleName;\r\n  data: TModuleProps;\r\n  ymaps: TAPI;\r\n}> = ({ name = \"\", data = {}, ymaps }): ReactNode => {\r\n\r\n  const computedProps = useMemo(() => {\r\n    const props: {\r\n      [key: string]: unknown;\r\n    } = { ...data };\r\n    // Adds factory instance from user field\r\n    if (isNeedFactory(data)) {\r\n      const { html, methods, callback } = (data as TUserFactory).factory;\r\n      props.options = {\r\n        ...(props?.options ?? {}),\r\n        layout: getLayoutConstructor(ymaps, html, callback, data, methods),\r\n      };\r\n      delete props.factory;\r\n    }\r\n    return props;\r\n  }, [ data ]);\r\n\r\n\r\n  switch (name) {\r\n    case \"FullscreenControl\":\r\n      return <FullscreenControl {...computedProps} />;\r\n    case \"GeolocationControl\":\r\n      return <GeolocationControl {...computedProps} />;\r\n    case \"RulerControl\":\r\n      return <RulerControl {...computedProps} />;\r\n    case \"SearchControl\":\r\n      return <SearchControl {...computedProps} />;\r\n    case \"TrafficControl\":\r\n      return <TrafficControl {...computedProps} />;\r\n    case \"TypeSelector\":\r\n      return <TypeSelector {...computedProps} />;\r\n    case \"ZoomControl\":\r\n      return <ZoomControl {...computedProps} />;\r\n    default:\r\n      return null;\r\n  }\r\n};\r\n\r\n/**\r\n * Внутренний компонент модулей карты\r\n * @returns {ReactElement}\r\n */\r\nconst MapModules: FC<TMapModulesProps> = ({ children, modules = mapDefaults.modules, ymaps }: TMapModulesProps): ReactNode => {\r\n\r\n  const elements = useMemo<[ TModuleName, TModuleProps ][]>(() => {\r\n    return Object.entries(modules || {})\r\n      .filter(([ name, props ]) => {\r\n        return !!name && !!props;\r\n      }) as [ TModuleName, TModuleProps ];\r\n  }, [ modules ]);\r\n\r\n  return (\r\n    <>\r\n      {elements.map(([ name, props ]: [ TModuleName, TModuleProps ]) => {\r\n        return <MapModule ymaps={ymaps} name={name} data={props} key={name} />;\r\n      })}\r\n      {children}\r\n    </>\r\n  );\r\n\r\n};\r\n\r\nexport {\r\n  MapModules,\r\n};\r\n"],"names":["MapModule","name","data","ymaps","computedProps","useMemo","props","isNeedFactory","html","methods","callback","factory","options","layout","getLayoutConstructor","_jsx","FullscreenControl","GeolocationControl","RulerControl","SearchControl","TrafficControl","TypeSelector","ZoomControl","MapModules","children","modules","mapDefaults","elements","Object","entries","filter","_jsxs","_Fragment","map"],"mappings":"4WAuBA,MAAMA,UAID,EAAGC,UAAO,GAAIC,UAAO,CAAA,EAAIC,gBAE5B,MAAMC,cAAgBC,QAAQ,KAC5B,MAAMC,MAEF,IAAKJ;wCAET;GAAIK,cAAcL,MAAO,CACvB,MAAMM,KAAEA,KAAIC,QAAEA,QAAOC,SAAEA,UAAcR,KAAsBS,QAC3DL,MAAMM,QAAU,IACVN,OAAOM,SAAW,GACtBC,OAAQC,qBAAqBX,MAAOK,KAAME,SAAUR,KAAMO,iBAErDH,MAAMK,OACf,CACA,OAAOL,OACN,CAAEJ,OAGL,OAAQD,MACN,IAAK;AACH,OAAOc,IAACC,kBAAiB,IAAKZ,gBAChC,IAAK;AACH,OAAOW,IAACE,mBAAkB,IAAKb,gBACjC,IAAK;AACH,OAAOW,IAACG,aAAY,IAAKd,gBAC3B,IAAK;AACH,OAAOW,IAACI,cAAa,IAAKf,gBAC5B,IAAK;AACH,OAAOW,IAACK,eAAc,IAAKhB,gBAC7B,IAAK;AACH,OAAOW,IAACM,aAAY,IAAKjB,gBAC3B,IAAK;AACH,OAAOW,IAACO,YAAW,IAAKlB,gBAC1B,QACE,OAAO;;;;GAQb,MAAMmB,WAAmC,EAAGC,kBAAUC,gBAAUC,YAAYD,QAAStB,gBAEnF,MAAMwB,SAAWtB,QAAyC,IACjDuB,OAAOC,QAAQJ,SAAW,CAAA,GAC9BK,OAAO,EAAG7B,KAAMK,WACNL,QAAUK,OAEtB,CAAEmB;AAEL,OACEM,KAAAC,SAAA,CAAAR,SAAA,CACGG,SAASM,IAAI,EAAGhC,KAAMK,SACdS,IAACf,UAAS,CAACG,MAAOA,MAAOF,KAAMA,KAAMC,KAAMI,OAAYL,OAE/DuB"}