{"version":3,"file":"UserProvider.mjs","names":["React","lazy","Suspense","useCallback","useEffect","useState","useMemo","keepPreviousData","UserContext","UserDispatchContext","User","LoadingIndicator","useAccount","storeTenant","getStoredTenant","useApiQuery","TenantProvider","ConfigService","getSignInAuthProvider","refreshUserTranslations","UserErrorModal","UserProvider","props","$","_c","children","isWhiteListed","doNotWaitForTenant","t0","unityTenantId","undefined","activeAccount","t1","params","URLSearchParams","window","location","search","urlTenant","get","storedTenant","activeTenantId","setActiveTenantId","unityUserUrl","encodeURIComponent","t2","Symbol","for","t3","t4","enabled","staleTime","placeholderData","data","userInfo","error","userError","isLoading","userInfoLoading","isPlaceholderData","isUserFromPreviousTenant","refetch","refetchUserInfo","securityV2ApiUrl","t5","user","isErrorModalOpen","Boolean","errorMessage","t6","t7","userId","sessionStorage","setItem","currentTenantId","t8","newTenantId","changeTenant","t9","t10","t11","selectedTenantId","isTenantSwitching","userActions","loadingValue","shouldBlockForUser","t12","t13","t14"],"sources":["../../../src/utilities/auth/UserProvider.jsx"],"sourcesContent":["import React, { lazy, Suspense, useCallback, useEffect, useState, useMemo } from 'react';\nimport { keepPreviousData } from '@tanstack/react-query';\nimport { UserContext, UserDispatchContext } from './internal';\nimport { User } from './user';\nimport { LoadingIndicator } from '../../UI/loading/LoadingIndicator';\nimport { useAccount } from '@azure/msal-react';\nimport { storeTenant, getStoredTenant } from '../storage/UnitySessionStorage';\nimport { useApiQuery } from '../useApiQuery';\nimport { TenantProvider } from '../tenant/TenantProvider';\nimport { ConfigService } from '../../configService';\nimport { getSignInAuthProvider } from './signInAuthProvider';\nimport { refreshUserTranslations } from '../i18n/initializeI18n';\n\n// Lazy-load the error modal — it only renders when the user-info API call\n// fails, which is rare. Statically importing UdpDialog/UdpText/UdpButton drags\n// the entire stencil web-component graph (incl. ~574 KB udp-fluent-icon) into\n// the entry chunk for every user.\nconst UserErrorModal = lazy(() => import('./UserErrorModal'));\n\nconst UserProvider = (props) => {\n  const { children, isWhiteListed, doNotWaitForTenant = false, unityTenantId } = props;\n\n  const activeAccount = useAccount();\n\n  const [activeTenantId, setActiveTenantId] = useState(() => {\n    const params = new URLSearchParams(window.location.search);\n    const urlTenant = params.get('tenantId');\n    if (urlTenant) return urlTenant;\n\n    const storedTenant = getStoredTenant();\n    if (storedTenant) return storedTenant;\n\n    return unityTenantId || null;\n  });\n\n  const unityUserUrl = activeTenantId\n    ? `user/unityuser?tenantId=${encodeURIComponent(activeTenantId)}`\n    : 'user/unityuser';\n\n  const {\n    data: userInfo,\n    error: userError,\n    isLoading: userInfoLoading,\n    isPlaceholderData: isUserFromPreviousTenant,\n    refetch: refetchUserInfo\n  } = useApiQuery(\n    ConfigService.securityV2ApiUrl,\n    unityUserUrl,\n    {},\n    {\n      enabled: !!activeAccount,\n      staleTime: 0,\n      placeholderData: keepPreviousData,\n    }\n  );\n\n  const user = useMemo(() => (userInfo ? new User(userInfo) : null), [userInfo]);\n\n  const isErrorModalOpen = Boolean(userError);\n  const errorMessage = userError ? 'Unable to get user details. Please try again.' : '';\n\n  useEffect(() => {\n    if (user?.userId) {\n      sessionStorage.setItem('user-id', user.userId);\n      // Second phase of translation loading: the anonymous system bundle was\n      // fetched at startup; now the user is known, re-fetch with their\n      // personal overrides merged in. Fire-and-forget by design: overridden\n      // labels swap in when the fetch lands rather than blocking first render.\n      refreshUserTranslations(user.userId);\n    }\n\n    if (user?.currentTenantId && !activeTenantId) {\n      storeTenant(user.currentTenantId);\n      setActiveTenantId(user.currentTenantId);\n    }\n  }, [user, activeTenantId]);\n\n  const changeTenant = useCallback((newTenantId) => {\n    if (!newTenantId) return;\n    storeTenant(newTenantId);\n    setActiveTenantId(newTenantId);\n    refetchUserInfo();\n  }, [refetchUserInfo]);\n\n  // While placeholderData is in play the `user` below — and so every request\n  // keyed on user.currentTenantId — still describes the tenant we are leaving.\n  // Publish that so consumers can tell it apart from settled data rather than\n  // redirecting or rendering off the previous tenant. See useIsTenantSwitching.\n  const userActions = useMemo(\n    () => ({\n      changeTenant,\n      selectedTenantId: activeTenantId ?? null,\n      isTenantSwitching: Boolean(isUserFromPreviousTenant)\n    }),\n    [changeTenant, activeTenantId, isUserFromPreviousTenant]\n  );\n\n  // Only block on initial load — when switching tenants we keep the previous\n  // user rendered (placeholderData) so children don't unmount and flash a loader.\n  const loadingValue = Boolean(activeAccount) && !user && !userError && userInfoLoading;\n  const shouldBlockForUser = loadingValue && !isWhiteListed;\n\n  if (isErrorModalOpen) {\n    return (\n      <Suspense fallback={<LoadingIndicator />}>\n        <UserErrorModal errorMessage={errorMessage} />\n      </Suspense>\n    );\n  }\n\n  if (!doNotWaitForTenant && shouldBlockForUser) {\n    return <LoadingIndicator />;\n  }\n\n  return (\n    <UserContext.Provider value={user}>\n      <UserDispatchContext.Provider value={userActions}>\n        <TenantProvider>{children}</TenantProvider>\n      </UserDispatchContext.Provider>\n    </UserContext.Provider>\n  );\n};\n\nexport default UserProvider;\n"],"mappings":"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"}