{"version":3,"file":"static/js/9059.2dd34e8f.chunk.js","mappings":"wNAQO,SAASA,EAASC,GACvB,MAAM,OAAEC,EAAM,SAAEC,GAAaF,GAEtBG,EAAMC,IAAWC,EAAAA,EAAAA,YAkBxB,OAhBAC,EAAAA,EAAAA,YAAU,KACR,IAAIC,GAAS,EAUb,OATIN,GAAUC,GACZ,WACE,MAAMM,QAAaC,EAAAA,EAAAA,IAAUR,EAAQC,GACjCK,GAAUC,GAEZJ,GAAQ,IAAMI,GAEjB,EAND,GAQK,KACLD,GAAS,CAAK,CACf,GACA,CAACN,EAAQC,IAELC,EAAOO,IAAAA,cAACP,EAAI,MAAM,IAC3B,C,cCpBA,MAAMQ,EAAmB,CAAC,WAAY,OAAQ,QAAS,KAAM,QAUtDC,eAAeC,EAAYZ,GAChC,MAAMa,QAAmBC,EAAAA,EAAAA,IAAgCd,EAAQ,UACjE,IAAKa,EAAY,CACf,MAAME,QAAeC,EAAAA,EAAAA,IAAYhB,GACjC,OAAOe,GAAQE,QAAU,EAC3B,CA4CA,OA1CeJ,EACZK,KAAKC,KAhBV,SAA2BnB,EAAgBmB,GACzC,IAAK,MAAMC,KAAQD,EACZT,EAAiBW,SAASD,IAC7BE,QAAQC,KAAM,qBAAoBH,eAAkBpB,YAG1D,CAWMwB,CAAkBxB,EAAQmB,GAC1B,MAAM,SAAEM,EAAQ,KAAEC,EAAI,MAAEC,EAAK,GAAEC,EAAE,KAAErB,GAASY,EAE5C,OAAIZ,EACEoB,EACK,CACLE,QACEpB,IAAAA,cAACqB,EAAAA,eAAc,CACbL,SACEA,EACEhB,IAAAA,cAACX,EAAQ,CAACE,OAAQA,EAAQC,SAAUwB,IAClC,KAENE,MAAOA,GAEPlB,IAAAA,cAACX,EAAQ,CAACE,OAAQA,EAAQC,SAAUM,KAGxCmB,QAIG,CACLG,QAASpB,IAAAA,cAACX,EAAQ,CAACE,OAAQA,EAAQC,SAAUM,IAC7CmB,QAGAE,EACK,CACLC,QAASpB,IAAAA,cAACsB,EAAAA,SAAQ,CAACC,SAAO,EAACJ,GAAIA,IAC/BF,SAIJJ,QAAQW,MAAO,yBAAwBjC,IAAUmB,GAE1C,KAAI,IAEZe,OAAOC,QAGZ,CAEOxB,eAAeyB,EAAaC,GACjC,MAAMC,EAAiD,GAEvDD,EAAQE,SAASvC,IACfsC,EAASE,KAAK5B,EAAYZ,GAAQ,IAGpC,MAAMyC,QAAqCC,QAAQC,IAAIL,GAEvD,IAAIM,EAAwB,GAQ5B,OANAH,EAA6BF,SAASM,IAChCA,IACFD,EAASA,EAAOE,OAAOD,GACzB,IAGKD,CACT,CCrFO,SAASG,EAAY/C,GAC1B,MAAOiB,EAAQ+B,IAAa5C,EAAAA,EAAAA,YAyB5B,OAvBAC,EAAAA,EAAAA,YAAU,KACR,IAAIC,GAAS,EAiBb,OAhBIN,GACF,WACE,IACE,MAAMiD,QAAWrC,EAAYZ,GACzBM,GACF0C,EAAUC,EAEd,CAAE,MAAOhB,GAEPX,QAAQW,MAAM,yBAA0BA,GACpC3B,GACF0C,OAAUE,EAEd,CACD,EAbD,GAeK,KACL5C,GAAS,CAAK,CACf,GACA,CAACN,IAEGiB,CACT,C","sources":["webpack:///./src/routing/LazyView.tsx","webpack:///./src/routing/getMfRoutes.tsx","webpack:///./src/routing/useMfRoutes.ts"],"sourcesContent":["import React, { useEffect, useState } from 'react';\nimport { getMfView } from '@im/ui-lib/mf-utils';\n\ntype Props = {\n  mfName: string;\n  viewName: string;\n};\n\nexport function LazyView(props: Props) {\n  const { mfName, viewName } = props;\n\n  const [View, setView] = useState<React.FC | undefined>();\n\n  useEffect(() => {\n    let active = true;\n    if (mfName && viewName) {\n      (async () => {\n        const view = await getMfView(mfName, viewName);\n        if (active && view) {\n          // https://github.com/facebook/react/issues/19098\n          setView(() => view);\n        }\n      })();\n    }\n    return () => {\n      active = false;\n    };\n  }, [mfName, viewName]);\n\n  return View ? <View /> : null;\n}\n","import React from 'react';\nimport { Navigate, RouteObject } from 'react-router-dom';\nimport { LazyView } from './LazyView';\nimport {\n  getMfExposedModule,\n  getMfOutlet,\n  RouteSpec,\n} from '@im/ui-lib/mf-utils';\nimport { PermissionGate } from '../auth';\n\nconst ROUTE_SPEC_PROPS = ['fallback', 'path', 'roles', 'to', 'view'];\n\nfunction validateRouteSpec(mfName: string, routeSpec: any) {\n  for (const name in routeSpec) {\n    if (!ROUTE_SPEC_PROPS.includes(name)) {\n      console.warn(`Invalid property '${name}' found in ${mfName} routes.`);\n    }\n  }\n}\n\nexport async function getMfRoutes(mfName: string): Promise<RouteObject[]> {\n  const routeSpecs = await getMfExposedModule<RouteSpec[]>(mfName, 'routes');\n  if (!routeSpecs) {\n    const outlet = await getMfOutlet(mfName);\n    return outlet?.routes || [];\n  }\n\n  const routes = routeSpecs\n    .map((routeSpec) => {\n      validateRouteSpec(mfName, routeSpec);\n      const { fallback, path, roles, to, view } = routeSpec;\n\n      if (view) {\n        if (roles) {\n          return {\n            element: (\n              <PermissionGate\n                fallback={\n                  fallback ? (\n                    <LazyView mfName={mfName} viewName={fallback} />\n                  ) : null\n                }\n                roles={roles}\n              >\n                <LazyView mfName={mfName} viewName={view} />\n              </PermissionGate>\n            ),\n            path,\n          };\n        }\n\n        return {\n          element: <LazyView mfName={mfName} viewName={view} />,\n          path,\n        };\n      }\n      if (to) {\n        return {\n          element: <Navigate replace to={to} />,\n          path,\n        };\n      }\n\n      console.error(`Invalid Route Spec in ${mfName}`, routeSpec);\n\n      return null;\n    })\n    .filter(Boolean);\n\n  return routes as RouteObject[];\n}\n\nexport async function getMfsRoutes(mfNames: string[]): Promise<RouteObject[]> {\n  const promises: Promise<RouteObject[] | undefined>[] = [];\n\n  mfNames.forEach((mfName) => {\n    promises.push(getMfRoutes(mfName));\n  });\n\n  const routeObjectsOrUndefinedArray = await Promise.all(promises);\n\n  let result: RouteObject[] = [];\n\n  routeObjectsOrUndefinedArray.forEach((routeObjects) => {\n    if (routeObjects) {\n      result = result.concat(routeObjects);\n    }\n  });\n\n  return result;\n}\n","import { useEffect, useState } from 'react';\nimport { RouteObject } from 'react-router-dom';\n\nimport { getMfRoutes } from './getMfRoutes';\n\nexport function useMfRoutes(mfName: string) {\n  const [routes, setRoutes] = useState<RouteObject[] | undefined>();\n\n  useEffect(() => {\n    let active = true;\n    if (mfName) {\n      (async () => {\n        try {\n          const ro = await getMfRoutes(mfName);\n          if (active) {\n            setRoutes(ro);\n          }\n        } catch (error) {\n          // Log error but keep the loading state\n          console.error('Failed to load routes:', error);\n          if (active) {\n            setRoutes(undefined);\n          }\n        }\n      })();\n    }\n    return () => {\n      active = false;\n    };\n  }, [mfName]);\n\n  return routes;\n}\n"],"names":["LazyView","props","mfName","viewName","View","setView","useState","useEffect","active","view","getMfView","React","ROUTE_SPEC_PROPS","async","getMfRoutes","routeSpecs","getMfExposedModule","outlet","getMfOutlet","routes","map","routeSpec","name","includes","console","warn","validateRouteSpec","fallback","path","roles","to","element","PermissionGate","Navigate","replace","error","filter","Boolean","getMfsRoutes","mfNames","promises","forEach","push","routeObjectsOrUndefinedArray","Promise","all","result","routeObjects","concat","useMfRoutes","setRoutes","ro","undefined"],"sourceRoot":""}