{"version":3,"file":"MenuProvider.mjs","names":["React","createContext","useCallback","useContext","useMemo","ReactNode","useUser","useAxiosGet","ConfigService","useAvailableLanguages","getRouteRolesMapAndMenuActiveMap","findHomeRoute","useIsMenuStale","AxiosError","LeftMenuResponse","AppSelectorMenuResponse","LanguagesResponse","MenuContextValue","leftMenu","leftMenuLoading","leftMenuStale","leftMenuError","appSelectorMenus","appSelectorMenusLoading","appSelectorMenusError","languages","languagesLoading","languagesError","rolesMap","Map","menuActiveMap","homeRoute","homeRouteState","HomeRouteState","refetchAll","Promise","label","params","Record","MenuProviderProps","children","MenuContext","RefetchFn","config","options","UseAxiosGetReturn","data","TData","loading","error","buildRouteAndActiveMaps","menu","rawResult","forEach","value","key","normalizedKey","normalizedValue","Array","isArray","map","roleId","String","set","Boolean","MenuProvider","FC","t0","$","_c","user","currentTenantId","userId","id","t1","Symbol","for","t2","refetchLeftMenu","tenantV1ApiUrl","UNITY_PRODUCT_ID","t3","t4","refetchAppSelectorMenus","UNITY_VERTICAL_ID","t5","refetchLanguages","t6","bb0","length","t7","slug","state","home","t8","t9","t10","t11","refetchPromises","push","all","useMenuContext","context","_temp","resolve"],"sources":["../../../src/utilities/menus/MenuProvider.tsx"],"sourcesContent":["import React, {\n  createContext,\n  useCallback,\n  useContext,\n  useMemo,\n  ReactNode\n} from 'react';\nimport { useUser } from '../auth/useUser';\nimport { useAxiosGet } from '../useAxiosGet';\nimport { ConfigService } from '../../configService';\nimport { useAvailableLanguages } from '../i18n/languageSource';\nimport {\n  getRouteRolesMapAndMenuActiveMap,\n  findHomeRoute\n} from './menuUtilities';\nimport { useIsMenuStale } from './useIsMenuStale';\nimport type { AxiosError } from 'axios';\n\ntype LeftMenuResponse = unknown[];\ntype AppSelectorMenuResponse = unknown[];\ntype LanguagesResponse = unknown[];\n\ninterface MenuContextValue {\n  leftMenu?: LeftMenuResponse;\n  leftMenuLoading: boolean;\n  /**\n   * True while `leftMenu` (and everything derived from it, `homeRoute`\n   * included) still describes the tenant we just switched away from.\n   * @see useIsMenuStale\n   */\n  leftMenuStale: boolean;\n  leftMenuError?: AxiosError<unknown>;\n  appSelectorMenus?: AppSelectorMenuResponse;\n  appSelectorMenusLoading: boolean;\n  appSelectorMenusError?: AxiosError<unknown>;\n  languages?: LanguagesResponse;\n  languagesLoading: boolean;\n  languagesError?: AxiosError<unknown>;\n  rolesMap: Map<string, string[]>;\n  menuActiveMap: Map<string, boolean>;\n  homeRoute: string | null;\n  /**\n   * Location state to redirect `/` with, carrying the home menu item's\n   * parameters. Without it the home page renders with no menu params.\n   */\n  homeRouteState: HomeRouteState | null;\n  refetchAll: () => Promise<unknown[]>;\n}\n\ninterface HomeRouteState {\n  label: string;\n  params: Record<string, unknown>;\n}\n\ninterface MenuProviderProps {\n  children?: ReactNode;\n}\n\nexport const MenuContext = createContext<MenuContextValue | null>(null);\n\ntype RefetchFn = (config?: unknown, options?: unknown) => Promise<unknown>;\n\ntype UseAxiosGetReturn<TData> = [\n  {\n    data?: TData;\n    loading: boolean;\n    error?: AxiosError<unknown>;\n  },\n  RefetchFn\n];\n\nconst buildRouteAndActiveMaps = (\n  menu: LeftMenuResponse\n): { rolesMap: Map<string, string[]>; menuActiveMap: Map<string, boolean> } => {\n  const rawResult = getRouteRolesMapAndMenuActiveMap(menu) as {\n    rolesMap?: Map<unknown, unknown>;\n    menuActiveMap?: Map<unknown, unknown>;\n  };\n\n  const rolesMap = new Map<string, string[]>();\n  if (rawResult?.rolesMap instanceof Map) {\n    rawResult.rolesMap.forEach((value, key) => {\n      if (typeof key !== 'string') return;\n      const normalizedKey = key;\n      const normalizedValue = Array.isArray(value)\n        ? value.map((roleId) => String(roleId))\n        : [];\n      rolesMap.set(normalizedKey, normalizedValue);\n    });\n  }\n\n  const menuActiveMap = new Map<string, boolean>();\n  if (rawResult?.menuActiveMap instanceof Map) {\n    rawResult.menuActiveMap.forEach((value, key) => {\n      if (typeof key !== 'string') return;\n      menuActiveMap.set(key, Boolean(value));\n    });\n  }\n\n  return { rolesMap, menuActiveMap };\n};\n\nexport const MenuProvider: React.FC<MenuProviderProps> = ({ children }) => {\n  const user = useUser();\n\n  const currentTenantId = user?.currentTenantId;\n  const userId = user?.id;\n  const [\n    { data: leftMenu, loading: leftMenuLoading, error: leftMenuError },\n    refetchLeftMenu\n  ] = useAxiosGet(\n    ConfigService.tenantV1ApiUrl,\n    `menus?menuTypeId=1&productId=${ConfigService.config.UNITY_PRODUCT_ID}&tenantId=${currentTenantId}`,\n    {},\n    !currentTenantId\n  ) as UseAxiosGetReturn<LeftMenuResponse>;\n\n  const [\n    {\n      data: appSelectorMenus,\n      loading: appSelectorMenusLoading,\n      error: appSelectorMenusError\n    },\n    refetchAppSelectorMenus\n  ] = useAxiosGet(\n    ConfigService.tenantV1ApiUrl,\n    `menus?tenantId=${currentTenantId}&verticalId=${\n      ConfigService.config.UNITY_VERTICAL_ID\n    }&userId=${userId ?? ''}`,\n    {},\n    !userId\n  ) as UseAxiosGetReturn<AppSelectorMenuResponse>;\n\n  // Switcher languages: the product application's generated language list,\n  // falling back to the legacy Unity list (see useAvailableLanguages).\n  const [\n    { data: languages, loading: languagesLoading, error: languagesError },\n    refetchLanguages\n  ] = useAvailableLanguages(!userId);\n\n  // A menu request that failed — or that was never issued, because there is no\n  // tenant to scope it to (see the `isManual` guard on the fetch above) — never\n  // produces data. Without these clauses `useIsMenuStale` reads \"no data\" as\n  // \"stale\" forever and the `/` guard in UdpRoutes holds the home route on a\n  // loader for good.\n  const leftMenuStale =\n    useIsMenuStale(leftMenu, leftMenuLoading) &&\n    !leftMenuError &&\n    Boolean(currentTenantId);\n\n  const { rolesMap, menuActiveMap, homeRoute, homeRouteState } = useMemo(() => {\n    if (Array.isArray(leftMenu) && leftMenu.length > 0) {\n      const home = (\n        findHomeRoute as (\n          menu: LeftMenuResponse\n        ) => { slug: string; state: HomeRouteState } | null\n      )(leftMenu);\n      return {\n        ...buildRouteAndActiveMaps(leftMenu),\n        homeRoute: home?.slug ?? null,\n        homeRouteState: home?.state ?? null\n      };\n    }\n\n    return {\n      rolesMap: new Map<string, string[]>(),\n      menuActiveMap: new Map<string, boolean>(),\n      homeRoute: null,\n      homeRouteState: null\n    };\n  }, [leftMenu]);\n\n  const refetchAll = useCallback(() => {\n    const refetchPromises: Promise<unknown>[] = [];\n\n    if (currentTenantId) {\n      refetchPromises.push(refetchLeftMenu());\n    }\n\n    if (userId) {\n      refetchPromises.push(refetchAppSelectorMenus());\n    }\n\n    refetchPromises.push(refetchLanguages());\n\n    return Promise.all(refetchPromises);\n  }, [\n    currentTenantId,\n    refetchAppSelectorMenus,\n    refetchLanguages,\n    refetchLeftMenu,\n    userId\n  ]);\n\n  const value = useMemo<MenuContextValue>(\n    () => ({\n      leftMenu,\n      leftMenuLoading,\n      leftMenuStale,\n      leftMenuError,\n      appSelectorMenus,\n      appSelectorMenusLoading,\n      appSelectorMenusError,\n      languages,\n      languagesLoading,\n      languagesError,\n      rolesMap,\n      menuActiveMap,\n      homeRoute,\n      homeRouteState,\n      refetchAll\n    }),\n    [\n      leftMenu,\n      leftMenuLoading,\n      leftMenuStale,\n      leftMenuError,\n      appSelectorMenus,\n      appSelectorMenusLoading,\n      appSelectorMenusError,\n      languages,\n      languagesLoading,\n      languagesError,\n      rolesMap,\n      menuActiveMap,\n      homeRoute,\n      homeRouteState,\n      refetchAll\n    ]\n  );\n\n  return <MenuContext.Provider value={value}>{children}</MenuContext.Provider>;\n};\n\nexport const useMenuContext = (): MenuContextValue => {\n  const context = useContext(MenuContext);\n  return (\n    context ?? {\n      leftMenuLoading: false,\n      leftMenuStale: false,\n      appSelectorMenusLoading: false,\n      languagesLoading: false,\n      rolesMap: new Map<string, string[]>(),\n      menuActiveMap: new Map<string, boolean>(),\n      homeRoute: null,\n      homeRouteState: null,\n      refetchAll: () => Promise.resolve([])\n    }\n  );\n};\n"],"mappings":"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"}