udp-react-enterprise-component-library 25.18.4-beta.70 → 25.18.4-beta.71
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{AuthProvider-DeOuedJL.js → AuthProvider-BUi9oEtK.js} +2 -2
- package/dist/{AuthProvider-DeOuedJL.js.map → AuthProvider-BUi9oEtK.js.map} +1 -1
- package/dist/{Shell-DDMO_nHU.js → Shell--4lbPR7c.js} +7 -6
- package/dist/Shell--4lbPR7c.js.map +1 -0
- package/dist/{TenantProvider-Bmp6YdE2.js → TenantProvider-r35vfTMk.js} +12 -5
- package/dist/TenantProvider-r35vfTMk.js.map +1 -0
- package/dist/{UdpAppProvider-CR2R5W7e.js → UdpAppProvider-sZs_gHCc.js} +2 -2
- package/dist/{UdpAppProvider-CR2R5W7e.js.map → UdpAppProvider-sZs_gHCc.js.map} +1 -1
- package/dist/{UdpRoutes-C7Dmc6Pv.js → UdpRoutes-ClaIhJIi.js} +14 -5
- package/dist/UdpRoutes-ClaIhJIi.js.map +1 -0
- package/dist/index.js +8 -8
- package/dist/{menuUtilities-CZa7kUTV.js → menuUtilities-BIiFWeWA.js} +23 -2
- package/dist/menuUtilities-BIiFWeWA.js.map +1 -0
- package/dist/{profile-DsCMe9Hd.js → profile-grsbAKwd.js} +2 -2
- package/dist/{profile-DsCMe9Hd.js.map → profile-grsbAKwd.js.map} +1 -1
- package/dist/providers/index.js +1 -1
- package/dist/routes/index.js +1 -1
- package/dist/shell/index.js +1 -1
- package/dist/shell/ui/profile/index.js +1 -1
- package/dist/types/src/routes/UdpRoutes.d.ts.map +1 -1
- package/dist/types/src/shell/Shell.d.ts.map +1 -1
- package/dist/types/src/utilities/menus/MenuProvider.d.ts +1 -0
- package/dist/types/src/utilities/menus/MenuProvider.d.ts.map +1 -1
- package/dist/types/src/utilities/menus/menuUtilities.d.ts +1 -0
- package/dist/types/src/utilities/menus/menuUtilities.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/dist/utilities/auth/index.js +2 -2
- package/dist/utilities/menus/index.js +2 -2
- package/dist/utilities/tenant/index.js +1 -1
- package/export-map.json +3 -2
- package/package.json +1 -1
- package/dist/Shell-DDMO_nHU.js.map +0 -1
- package/dist/TenantProvider-Bmp6YdE2.js.map +0 -1
- package/dist/UdpRoutes-C7Dmc6Pv.js.map +0 -1
- package/dist/menuUtilities-CZa7kUTV.js.map +0 -1
|
@@ -6,7 +6,7 @@ import { i as storeTenant, n as getStoredTenant } from "./UnitySessionStorage-C7
|
|
|
6
6
|
import { t as useAxiosGet } from "./useAxiosGet-CRKIOaCC.js";
|
|
7
7
|
import { t as CustomNavigationClient } from "./CustomNavigationClient-B-eTMjtK.js";
|
|
8
8
|
import { r as useRouteRegistry } from "./routeRegistryStore-BmhhxWS1.js";
|
|
9
|
-
import { t as TenantProvider } from "./TenantProvider-
|
|
9
|
+
import { t as TenantProvider } from "./TenantProvider-r35vfTMk.js";
|
|
10
10
|
import { LoadingIndicator } from "./UI/loading/LoadingIndicator/index.js";
|
|
11
11
|
import React, { useEffect, useReducer, useState } from "react";
|
|
12
12
|
import { matchPath, useHistory } from "react-router-dom";
|
|
@@ -216,4 +216,4 @@ const AuthProvider = ({ children, doNotWaitForTenant = true }) => {
|
|
|
216
216
|
//#endregion
|
|
217
217
|
export { createUser as n, AuthProvider as t };
|
|
218
218
|
|
|
219
|
-
//# sourceMappingURL=AuthProvider-
|
|
219
|
+
//# sourceMappingURL=AuthProvider-BUi9oEtK.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AuthProvider-DeOuedJL.js","names":["useLocation"],"sources":["../src/utilities/auth/user.ts","../src/utilities/auth/UserProvider.jsx","../src/utilities/auth/AuthProvider.jsx"],"sourcesContent":["import { ConfigService } from '../../configService';\nimport { RoleIdEnums } from '../../enums/unitySystemEnums';\nimport { getStoredTenant } from '../storage/UnitySessionStorage';\n\nexport interface User {\n name: string | undefined;\n firstName: string | undefined;\n familyName: string | undefined;\n jobTitle: string | undefined;\n email: string | undefined;\n mobile: string | undefined;\n phone: string | undefined;\n id: string | undefined;\n location: string | undefined;\n aadId: string | undefined;\n accessToken: string | undefined;\n defaultTenantId: string | undefined;\n currentTenantId: string | undefined;\n tenantIds: Array<string> | undefined;\n roleIds: Array<string> | undefined;\n products: Array<object> | undefined;\n permissions: Array<object> | undefined;\n can: any | undefined;\n statusCode: number | undefined;\n unityId: string | undefined;\n additionalProperties: any | undefined;\n roleNames: Array<string> | undefined;\n isUnitySystemAdmin: boolean | undefined;\n}\n\n/**\n * Create a \"unified\" user object from MSAL account info and Univerus user data (in the future)\n */\nexport function createUser(userInfo: any): User {\n const tenantId: any =\n getStoredTenant() ||\n (userInfo?.defaultTenantId ??\n (userInfo?.tenantIds ? userInfo?.tenantIds[0] : ''));\n let userTenantPermissions: any = [];\n let userTenantRoles: any = [];\n let userTenantProducts: any = [];\n const currentUserTenantProperties = userInfo?.userTenantPropertiesView?.find(\n (propertyView: any) => propertyView?.tenantId === tenantId\n );\n userTenantPermissions = currentUserTenantProperties\n ? currentUserTenantProperties.permissions\n : [];\n userTenantRoles = currentUserTenantProperties\n ? currentUserTenantProperties.securityRoles\n : [];\n userTenantProducts = currentUserTenantProperties\n ? currentUserTenantProperties.products\n : [];\n\n let roleIds: any = userTenantRoles.map((role: any) => role.roleId) ?? [];\n\n return {\n name: userInfo?.displayName ?? '',\n firstName: userInfo?.givenName ?? '',\n familyName: userInfo?.surname ?? '',\n jobTitle: userInfo?.jobTitle ?? '',\n email: userInfo?.email ?? '',\n mobile: userInfo?.mobilePhone ?? '',\n phone: userInfo?.officePhone ?? '',\n id: userInfo?.userId ?? '',\n location: userInfo?.location ?? '',\n aadId: userInfo?.externalUUID ?? '',\n accessToken: userInfo?.accessToken ?? '',\n tenantIds: userInfo?.tenantIds ?? [],\n defaultTenantId: userInfo?.defaultTenantId ?? '',\n currentTenantId: ConfigService.config.UNITY_TENANT_ID\n ? ConfigService.config.UNITY_TENANT_ID\n : tenantId,\n roleIds: roleIds,\n products: userTenantProducts,\n permissions: userTenantPermissions,\n can:\n userTenantPermissions.reduce((can: any, permission: any) => {\n if (permission.value === 'false') {\n can[permission.name] = false;\n } else if (permission.value === 'true') {\n can[permission.name] = true;\n } else {\n can[permission.name] = permission.value;\n }\n return can;\n }, {}) ?? {},\n statusCode: userInfo?.statusCode ?? 200,\n unityId: userInfo?.userId ?? '',\n additionalProperties: userInfo?.additionalProperties ?? undefined,\n roleNames: userTenantRoles.map((role) => role.name) ?? [],\n isUnitySystemAdmin: !!roleIds.find(\n (id: string) => id === RoleIdEnums.Unity_System_Administrator\n )\n };\n}\n","import React, { useReducer, useEffect } from 'react';\nimport { UserContext, UserDispatchContext } from './internal';\nimport { createUser } from './user';\nimport { LoadingIndicator } from '../../UI/loading/LoadingIndicator';\nimport { useAccount } from '@azure/msal-react';\nimport { storeTenant, getStoredTenant } from '../storage/UnitySessionStorage';\nimport { useAxiosGet } from '../useAxiosGet';\nimport { TenantProvider } from '../tenant/TenantProvider';\nimport { acquireAccessToken } from './authActions';\nimport { ConfigService } from '../../configService';\nconst emptyUser = {\n name: '',\n firstName: '',\n familyName: '',\n jobTitle: '',\n email: '',\n mobile: '',\n phone: '',\n id: '',\n location: '',\n aadId: '',\n accessToken: '',\n defaultTenantId: '',\n currentTenantId: '',\n tenantIds: [],\n roleIds: [],\n products: [],\n permissions: [],\n can: {},\n statusCode: undefined,\n unityId: undefined,\n additionalProperties: undefined,\n roleNames: [],\n isUnitySystemAdmin: undefined\n};\n\nconst UserProvider = (props) => {\n const {\n children,\n setSessionExpiredModalOpen,\n setNonExistingUserModalOpen,\n setErrorMessage,\n isWhiteListed,\n doNotWaitForTenant = false,\n unityTenantId\n } = props;\n const activeAccount = useAccount();\n const idTokenClaims = activeAccount?.idTokenClaims;\n const sub = idTokenClaims?.sub;\n const shouldFetchUser = Boolean(activeAccount);\n\n //Get user info\n const [{ data: userInfo, error: userError }] = useAxiosGet(\n ConfigService.securityV1ApiUrl,\n `users/unityuser`,\n {},\n !shouldFetchUser,\n false\n );\n\n useEffect(() => {\n if (userError) {\n setErrorMessage('Unable to get user details. Please try again.');\n setNonExistingUserModalOpen(true);\n }\n }, [setErrorMessage, setNonExistingUserModalOpen, userError]);\n\n // const [{ data: aadUserInfo }] = useAxiosGet(\n // ConfigService.securityV1ApiUrl,\n // `users/${sub}`,\n // {},\n // false,\n // false\n // );\n\n const [userState, dispatch] = useReducer((state, action) => {\n switch (action.type) {\n case 'SET_USER':\n state = {\n ...state,\n user: action.user\n };\n break;\n case 'CHANGE_TENANT':\n let userTenantPermissions = [];\n let userTenantRoles = [];\n let userTenantProducts = [];\n if (state.tenantIds) {\n const currentUserTenantProperties =\n userInfo.userTenantPropertiesView?.find(\n (propertyView) => propertyView?.tenantId === action.tenantId\n );\n userTenantPermissions = currentUserTenantProperties\n ? currentUserTenantProperties.permissions\n : [];\n userTenantRoles = currentUserTenantProperties\n ? currentUserTenantProperties.securityRoles\n : [];\n userTenantProducts = currentUserTenantProperties\n ? currentUserTenantProperties.products\n : [];\n }\n state = {\n user: {\n ...state,\n currentTenantId: action.tenantId,\n products: userTenantProducts,\n permissions: userTenantPermissions,\n roleIds: userTenantRoles.map((role) => role.roleId) ?? [],\n roleNames: userTenantRoles.map((role) => role.name) ?? []\n }\n };\n break;\n default:\n throw new Error(`Unknown action type ${action.type}`);\n }\n\n return state.user;\n }, emptyUser);\n\n useEffect(() => {\n if (userInfo?.userId) {\n const user = createUser({\n ...userInfo,\n displayName: idTokenClaims?.name,\n givenName: idTokenClaims?.given_name ?? idTokenClaims?.name,\n accessToken: activeAccount?.idToken ?? '',\n surname: idTokenClaims?.family_name\n });\n sessionStorage.setItem('user-id', userInfo?.userId);\n\n dispatch({ type: 'SET_USER', user });\n }\n }, [\n userInfo,\n idTokenClaims?.name,\n idTokenClaims?.given_name,\n idTokenClaims?.family_name,\n activeAccount?.idToken\n ]);\n\n useEffect(() => {\n if (!activeAccount) {\n dispatch({ type: 'SET_USER', user: emptyUser });\n }\n }, [activeAccount]);\n\n useEffect(() => {\n if (userInfo?.defaultTenantId) {\n if (!getStoredTenant()) {\n if (unityTenantId) {\n storeTenant(unityTenantId);\n } else {\n storeTenant(userInfo.defaultTenantId);\n }\n }\n }\n }, [userInfo]);\n\n return (\n <div>\n {!doNotWaitForTenant &&\n !userState?.currentTenantId &&\n !isWhiteListed ? (\n <LoadingIndicator />\n ) : (\n <UserContext.Provider value={userState}>\n <UserDispatchContext.Provider value={dispatch}>\n <TenantProvider>{children}</TenantProvider>\n </UserDispatchContext.Provider>\n </UserContext.Provider>\n )}\n </div>\n );\n};\n\nexport default UserProvider;\n","import React, { useEffect, useState } from 'react';\nimport {\n initSignInAuthProvider,\n getSignInAuthProvider,\n} from './signInAuthProvider';\nimport { LoadingIndicator } from '../../UI/loading/LoadingIndicator';\nimport { MsalProvider } from '@azure/msal-react';\nimport { useHistory } from 'react-router-dom';\nimport CustomNavigationClient from '../CustomNavigationClient';\nimport { useLocation } from 'react-use';\nimport UserProvider from './UserProvider';\nimport { useRouteRegistry } from '../../routes/routeRegistryStore';\nimport { matchPath } from 'react-router-dom';\n\nconst useIsRoutePublic = () => {\n const location = useLocation();\n const routeRegistry = useRouteRegistry();\n\n // 1. Get all registered route patterns\n const patterns = Object.keys(routeRegistry.routeMap);\n\n // 2. Find the matching pattern\n const matchingPattern = patterns.find(pattern =>\n matchPath(location.pathname, {\n path: pattern,\n exact: true,\n strict: false\n })\n );\n\n // 3. Return config or undefined if not found\n return matchingPattern\n ? routeRegistry.routeMap[matchingPattern]?.isPublic\n : undefined;\n}\nexport const AuthProvider = ({ children, doNotWaitForTenant = true }) => {\n const [msalInstance, setMsalInstance] = useState(null);\n const [isInitialized, setIsInitialized] = useState(false);\n\n const [sessionExpiredModalOpen, setSessionExpiredModalOpen] = useState(false);\n const [nonExistingUserModalOpen, setNonExistingUserModalOpen] =\n useState(false);\n const [errorMessage, setErrorMessage] = useState('');\n\n const history = useHistory();\n const isRoutePublic = useIsRoutePublic();\n const resolvedIsPublic = isRoutePublic ?? true;\n useEffect(() => {\n const initialize = async () => {\n try {\n await initSignInAuthProvider();\n const authProvider = getSignInAuthProvider();\n const navigationClient = new CustomNavigationClient(history);\n authProvider.setNavigationClient(navigationClient);\n setMsalInstance(authProvider);\n setIsInitialized(true);\n } catch (error) {\n console.error('Failed to initialize AuthProvider:', error);\n // Handle initialization error, maybe show an error message\n }\n };\n initialize();\n }, [history]);\n\n if (!isInitialized) {\n return <LoadingIndicator />;\n }\n\n return (\n <MsalProvider instance={msalInstance}>\n <UserProvider\n sessionExpiredModalOpen={sessionExpiredModalOpen}\n setSessionExpiredModalOpen={setSessionExpiredModalOpen}\n setNonExistingUserModalOpen={setNonExistingUserModalOpen}\n setErrorMessage={setErrorMessage}\n isWhiteListed={resolvedIsPublic}\n doNotWaitForTenant={doNotWaitForTenant}\n >\n {children}\n </UserProvider>\n </MsalProvider>\n );\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"AuthProvider-BUi9oEtK.js","names":["useLocation"],"sources":["../src/utilities/auth/user.ts","../src/utilities/auth/UserProvider.jsx","../src/utilities/auth/AuthProvider.jsx"],"sourcesContent":["import { ConfigService } from '../../configService';\nimport { RoleIdEnums } from '../../enums/unitySystemEnums';\nimport { getStoredTenant } from '../storage/UnitySessionStorage';\n\nexport interface User {\n name: string | undefined;\n firstName: string | undefined;\n familyName: string | undefined;\n jobTitle: string | undefined;\n email: string | undefined;\n mobile: string | undefined;\n phone: string | undefined;\n id: string | undefined;\n location: string | undefined;\n aadId: string | undefined;\n accessToken: string | undefined;\n defaultTenantId: string | undefined;\n currentTenantId: string | undefined;\n tenantIds: Array<string> | undefined;\n roleIds: Array<string> | undefined;\n products: Array<object> | undefined;\n permissions: Array<object> | undefined;\n can: any | undefined;\n statusCode: number | undefined;\n unityId: string | undefined;\n additionalProperties: any | undefined;\n roleNames: Array<string> | undefined;\n isUnitySystemAdmin: boolean | undefined;\n}\n\n/**\n * Create a \"unified\" user object from MSAL account info and Univerus user data (in the future)\n */\nexport function createUser(userInfo: any): User {\n const tenantId: any =\n getStoredTenant() ||\n (userInfo?.defaultTenantId ??\n (userInfo?.tenantIds ? userInfo?.tenantIds[0] : ''));\n let userTenantPermissions: any = [];\n let userTenantRoles: any = [];\n let userTenantProducts: any = [];\n const currentUserTenantProperties = userInfo?.userTenantPropertiesView?.find(\n (propertyView: any) => propertyView?.tenantId === tenantId\n );\n userTenantPermissions = currentUserTenantProperties\n ? currentUserTenantProperties.permissions\n : [];\n userTenantRoles = currentUserTenantProperties\n ? currentUserTenantProperties.securityRoles\n : [];\n userTenantProducts = currentUserTenantProperties\n ? currentUserTenantProperties.products\n : [];\n\n let roleIds: any = userTenantRoles.map((role: any) => role.roleId) ?? [];\n\n return {\n name: userInfo?.displayName ?? '',\n firstName: userInfo?.givenName ?? '',\n familyName: userInfo?.surname ?? '',\n jobTitle: userInfo?.jobTitle ?? '',\n email: userInfo?.email ?? '',\n mobile: userInfo?.mobilePhone ?? '',\n phone: userInfo?.officePhone ?? '',\n id: userInfo?.userId ?? '',\n location: userInfo?.location ?? '',\n aadId: userInfo?.externalUUID ?? '',\n accessToken: userInfo?.accessToken ?? '',\n tenantIds: userInfo?.tenantIds ?? [],\n defaultTenantId: userInfo?.defaultTenantId ?? '',\n currentTenantId: ConfigService.config.UNITY_TENANT_ID\n ? ConfigService.config.UNITY_TENANT_ID\n : tenantId,\n roleIds: roleIds,\n products: userTenantProducts,\n permissions: userTenantPermissions,\n can:\n userTenantPermissions.reduce((can: any, permission: any) => {\n if (permission.value === 'false') {\n can[permission.name] = false;\n } else if (permission.value === 'true') {\n can[permission.name] = true;\n } else {\n can[permission.name] = permission.value;\n }\n return can;\n }, {}) ?? {},\n statusCode: userInfo?.statusCode ?? 200,\n unityId: userInfo?.userId ?? '',\n additionalProperties: userInfo?.additionalProperties ?? undefined,\n roleNames: userTenantRoles.map((role) => role.name) ?? [],\n isUnitySystemAdmin: !!roleIds.find(\n (id: string) => id === RoleIdEnums.Unity_System_Administrator\n )\n };\n}\n","import React, { useReducer, useEffect } from 'react';\nimport { UserContext, UserDispatchContext } from './internal';\nimport { createUser } from './user';\nimport { LoadingIndicator } from '../../UI/loading/LoadingIndicator';\nimport { useAccount } from '@azure/msal-react';\nimport { storeTenant, getStoredTenant } from '../storage/UnitySessionStorage';\nimport { useAxiosGet } from '../useAxiosGet';\nimport { TenantProvider } from '../tenant/TenantProvider';\nimport { acquireAccessToken } from './authActions';\nimport { ConfigService } from '../../configService';\nconst emptyUser = {\n name: '',\n firstName: '',\n familyName: '',\n jobTitle: '',\n email: '',\n mobile: '',\n phone: '',\n id: '',\n location: '',\n aadId: '',\n accessToken: '',\n defaultTenantId: '',\n currentTenantId: '',\n tenantIds: [],\n roleIds: [],\n products: [],\n permissions: [],\n can: {},\n statusCode: undefined,\n unityId: undefined,\n additionalProperties: undefined,\n roleNames: [],\n isUnitySystemAdmin: undefined\n};\n\nconst UserProvider = (props) => {\n const {\n children,\n setSessionExpiredModalOpen,\n setNonExistingUserModalOpen,\n setErrorMessage,\n isWhiteListed,\n doNotWaitForTenant = false,\n unityTenantId\n } = props;\n const activeAccount = useAccount();\n const idTokenClaims = activeAccount?.idTokenClaims;\n const sub = idTokenClaims?.sub;\n const shouldFetchUser = Boolean(activeAccount);\n\n //Get user info\n const [{ data: userInfo, error: userError }] = useAxiosGet(\n ConfigService.securityV1ApiUrl,\n `users/unityuser`,\n {},\n !shouldFetchUser,\n false\n );\n\n useEffect(() => {\n if (userError) {\n setErrorMessage('Unable to get user details. Please try again.');\n setNonExistingUserModalOpen(true);\n }\n }, [setErrorMessage, setNonExistingUserModalOpen, userError]);\n\n // const [{ data: aadUserInfo }] = useAxiosGet(\n // ConfigService.securityV1ApiUrl,\n // `users/${sub}`,\n // {},\n // false,\n // false\n // );\n\n const [userState, dispatch] = useReducer((state, action) => {\n switch (action.type) {\n case 'SET_USER':\n state = {\n ...state,\n user: action.user\n };\n break;\n case 'CHANGE_TENANT':\n let userTenantPermissions = [];\n let userTenantRoles = [];\n let userTenantProducts = [];\n if (state.tenantIds) {\n const currentUserTenantProperties =\n userInfo.userTenantPropertiesView?.find(\n (propertyView) => propertyView?.tenantId === action.tenantId\n );\n userTenantPermissions = currentUserTenantProperties\n ? currentUserTenantProperties.permissions\n : [];\n userTenantRoles = currentUserTenantProperties\n ? currentUserTenantProperties.securityRoles\n : [];\n userTenantProducts = currentUserTenantProperties\n ? currentUserTenantProperties.products\n : [];\n }\n state = {\n user: {\n ...state,\n currentTenantId: action.tenantId,\n products: userTenantProducts,\n permissions: userTenantPermissions,\n roleIds: userTenantRoles.map((role) => role.roleId) ?? [],\n roleNames: userTenantRoles.map((role) => role.name) ?? []\n }\n };\n break;\n default:\n throw new Error(`Unknown action type ${action.type}`);\n }\n\n return state.user;\n }, emptyUser);\n\n useEffect(() => {\n if (userInfo?.userId) {\n const user = createUser({\n ...userInfo,\n displayName: idTokenClaims?.name,\n givenName: idTokenClaims?.given_name ?? idTokenClaims?.name,\n accessToken: activeAccount?.idToken ?? '',\n surname: idTokenClaims?.family_name\n });\n sessionStorage.setItem('user-id', userInfo?.userId);\n\n dispatch({ type: 'SET_USER', user });\n }\n }, [\n userInfo,\n idTokenClaims?.name,\n idTokenClaims?.given_name,\n idTokenClaims?.family_name,\n activeAccount?.idToken\n ]);\n\n useEffect(() => {\n if (!activeAccount) {\n dispatch({ type: 'SET_USER', user: emptyUser });\n }\n }, [activeAccount]);\n\n useEffect(() => {\n if (userInfo?.defaultTenantId) {\n if (!getStoredTenant()) {\n if (unityTenantId) {\n storeTenant(unityTenantId);\n } else {\n storeTenant(userInfo.defaultTenantId);\n }\n }\n }\n }, [userInfo]);\n\n return (\n <div>\n {!doNotWaitForTenant &&\n !userState?.currentTenantId &&\n !isWhiteListed ? (\n <LoadingIndicator />\n ) : (\n <UserContext.Provider value={userState}>\n <UserDispatchContext.Provider value={dispatch}>\n <TenantProvider>{children}</TenantProvider>\n </UserDispatchContext.Provider>\n </UserContext.Provider>\n )}\n </div>\n );\n};\n\nexport default UserProvider;\n","import React, { useEffect, useState } from 'react';\nimport {\n initSignInAuthProvider,\n getSignInAuthProvider,\n} from './signInAuthProvider';\nimport { LoadingIndicator } from '../../UI/loading/LoadingIndicator';\nimport { MsalProvider } from '@azure/msal-react';\nimport { useHistory } from 'react-router-dom';\nimport CustomNavigationClient from '../CustomNavigationClient';\nimport { useLocation } from 'react-use';\nimport UserProvider from './UserProvider';\nimport { useRouteRegistry } from '../../routes/routeRegistryStore';\nimport { matchPath } from 'react-router-dom';\n\nconst useIsRoutePublic = () => {\n const location = useLocation();\n const routeRegistry = useRouteRegistry();\n\n // 1. Get all registered route patterns\n const patterns = Object.keys(routeRegistry.routeMap);\n\n // 2. Find the matching pattern\n const matchingPattern = patterns.find(pattern =>\n matchPath(location.pathname, {\n path: pattern,\n exact: true,\n strict: false\n })\n );\n\n // 3. Return config or undefined if not found\n return matchingPattern\n ? routeRegistry.routeMap[matchingPattern]?.isPublic\n : undefined;\n}\nexport const AuthProvider = ({ children, doNotWaitForTenant = true }) => {\n const [msalInstance, setMsalInstance] = useState(null);\n const [isInitialized, setIsInitialized] = useState(false);\n\n const [sessionExpiredModalOpen, setSessionExpiredModalOpen] = useState(false);\n const [nonExistingUserModalOpen, setNonExistingUserModalOpen] =\n useState(false);\n const [errorMessage, setErrorMessage] = useState('');\n\n const history = useHistory();\n const isRoutePublic = useIsRoutePublic();\n const resolvedIsPublic = isRoutePublic ?? true;\n useEffect(() => {\n const initialize = async () => {\n try {\n await initSignInAuthProvider();\n const authProvider = getSignInAuthProvider();\n const navigationClient = new CustomNavigationClient(history);\n authProvider.setNavigationClient(navigationClient);\n setMsalInstance(authProvider);\n setIsInitialized(true);\n } catch (error) {\n console.error('Failed to initialize AuthProvider:', error);\n // Handle initialization error, maybe show an error message\n }\n };\n initialize();\n }, [history]);\n\n if (!isInitialized) {\n return <LoadingIndicator />;\n }\n\n return (\n <MsalProvider instance={msalInstance}>\n <UserProvider\n sessionExpiredModalOpen={sessionExpiredModalOpen}\n setSessionExpiredModalOpen={setSessionExpiredModalOpen}\n setNonExistingUserModalOpen={setNonExistingUserModalOpen}\n setErrorMessage={setErrorMessage}\n isWhiteListed={resolvedIsPublic}\n doNotWaitForTenant={doNotWaitForTenant}\n >\n {children}\n </UserProvider>\n </MsalProvider>\n );\n};\n"],"mappings":"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"}
|
|
@@ -6,14 +6,14 @@ import { n as useBuildEnvironment } from "./useBuildEnvironment-DsBqfGwR.js";
|
|
|
6
6
|
import { t as UtilitySideBar } from "./UtilitySideBar-VhHVhVUj.js";
|
|
7
7
|
import { t as PageActionWrapper } from "./PageActionWrapper-BXBLPsC2.js";
|
|
8
8
|
import { r as useRouteRegistry } from "./routeRegistryStore-BmhhxWS1.js";
|
|
9
|
-
import {
|
|
10
|
-
import { s as useMenuContext } from "./TenantProvider-
|
|
11
|
-
import { t as UdpRoutes } from "./UdpRoutes-
|
|
9
|
+
import { n as getMenuItemsRecursively, t as findHomeRouteSlug } from "./menuUtilities-BIiFWeWA.js";
|
|
10
|
+
import { s as useMenuContext } from "./TenantProvider-r35vfTMk.js";
|
|
11
|
+
import { t as UdpRoutes } from "./UdpRoutes-ClaIhJIi.js";
|
|
12
12
|
import { c as NavigationSidebar, t as SiteHeader } from "./SiteHeader-BhJJmO1u.js";
|
|
13
13
|
import { t as FUIAppSwitcher } from "./FUIAppSwitcher-C6xv_T7_.js";
|
|
14
14
|
import { t as ActionProvider } from "./ActionProvider-CEt8Z5bT.js";
|
|
15
15
|
import { t as ChatBotProvider } from "./ChatBotProvider-C7FFww7I.js";
|
|
16
|
-
import { t as UserProfileMenuWrapper } from "./profile-
|
|
16
|
+
import { t as UserProfileMenuWrapper } from "./profile-grsbAKwd.js";
|
|
17
17
|
import { UtilityBar } from "./UI/utilityDisplay/index.js";
|
|
18
18
|
import React, { Suspense, useCallback, useEffect, useMemo, useRef, useState } from "react";
|
|
19
19
|
import { Drawer, makeStyles, useMediaQuery, useTheme } from "@material-ui/core";
|
|
@@ -115,6 +115,7 @@ const Shell = (props) => {
|
|
|
115
115
|
leftMenu,
|
|
116
116
|
menuContext
|
|
117
117
|
]);
|
|
118
|
+
const homeRoute = useMemo(() => leftMenu?.length ? findHomeRouteSlug(leftMenu) : menuContext?.homeRoute, [leftMenu, menuContext]);
|
|
118
119
|
const resolvedAppSelectorMenus = appSelectorMenus ?? menuContext?.appSelectorMenus;
|
|
119
120
|
const providedLanguages = languages ?? menuContext?.languages;
|
|
120
121
|
const resolvedLanguages = Array.isArray(providedLanguages) ? providedLanguages : [];
|
|
@@ -230,7 +231,7 @@ const Shell = (props) => {
|
|
|
230
231
|
expandedSecondary: panelExpandedSecondary,
|
|
231
232
|
setExpanded: setPanelExpanded,
|
|
232
233
|
setExpandedSecondary: setPanelExpandedSecondary
|
|
233
|
-
}), /* @__PURE__ */ React.createElement(PageActionWrapper, null, /* @__PURE__ */ React.createElement(Suspense, { fallback: /* @__PURE__ */ React.createElement(PageLoading, null) }, /* @__PURE__ */ React.createElement(Switch$1, null, children, /* @__PURE__ */ React.createElement(UdpRoutes,
|
|
234
|
+
}), /* @__PURE__ */ React.createElement(PageActionWrapper, null, /* @__PURE__ */ React.createElement(Suspense, { fallback: /* @__PURE__ */ React.createElement(PageLoading, null) }, /* @__PURE__ */ React.createElement(Switch$1, null, children, /* @__PURE__ */ React.createElement(UdpRoutes, { homeRoute }))))), /* @__PURE__ */ React.createElement(Drawer, {
|
|
234
235
|
variant: "temporary",
|
|
235
236
|
anchor: "left",
|
|
236
237
|
open: appSwitcherDesktop,
|
|
@@ -317,4 +318,4 @@ Shell.propTypes = {
|
|
|
317
318
|
//#endregion
|
|
318
319
|
export { Shell as t };
|
|
319
320
|
|
|
320
|
-
//# sourceMappingURL=Shell
|
|
321
|
+
//# sourceMappingURL=Shell--4lbPR7c.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Shell--4lbPR7c.js","names":["Switch"],"sources":["../src/shell/useShellVisibility.js","../src/shell/Shell.jsx"],"sourcesContent":["import { useEffect, useRef } from 'react';\nimport { useShellStore, useSetInitialShellVisibility } from '../stores/shellStore';\n\n/**\n * Controls shell visibility based on layout flags, user presence, and route metadata.\n * Returns the effective hidden state that callers should use for rendering.\n */\nexport const useShellVisibility = ({ hideLayout, isPublicRoute, hasUser }) => {\n const { shellHidden, setShellHidden } = useShellStore();\n const shellHiddenBaselineRef = useRef();\n\n // Respect ?withoutShell on initial load\n useSetInitialShellVisibility();\n\n const syncShellHiddenWithRouteState = () => {\n const shouldForceHideShell = hideLayout || isPublicRoute || !hasUser;\n\n if (shouldForceHideShell) {\n if (shellHiddenBaselineRef.current === undefined) {\n shellHiddenBaselineRef.current = shellHidden;\n }\n if (!shellHidden) {\n setShellHidden(true);\n }\n } else if (shellHiddenBaselineRef.current !== undefined) {\n if (shellHidden !== shellHiddenBaselineRef.current) {\n setShellHidden(shellHiddenBaselineRef.current);\n } else {\n setShellHidden(false);\n }\n shellHiddenBaselineRef.current = undefined;\n } else if (shellHidden) {\n setShellHidden(false);\n }\n };\n\n useEffect(syncShellHiddenWithRouteState, [\n hideLayout,\n isPublicRoute,\n hasUser,\n setShellHidden,\n shellHidden\n ]);\n\n return shellHidden || hideLayout || isPublicRoute || !hasUser;\n};\n","import React, {\n useState,\n useEffect,\n useMemo,\n useCallback,\n Suspense\n} from 'react';\nimport { makeStyles, Drawer, useMediaQuery, useTheme } from '@material-ui/core';\nimport NavigationSidebar from './ui/NavigationSidebar';\nimport SiteHeader from './ui/SiteHeader';\nimport { UtilityBar } from '../UI/utilityDisplay/UtilityBar';\nimport { useTranslation } from 'react-i18next';\nimport FUIAppSwitcher from './ui/appSwitcher/FUIAppSwitcher';\nimport { getMenuItemsRecursively, findHomeRouteSlug } from '../utilities/menus/menuUtilities';\nimport clsx from 'clsx';\nimport { UtilitySideBar } from '../UI/utilityDisplay/UtilitySideBar';\nimport PropTypes from 'prop-types';\nimport { useUser } from '../utilities/auth/useUser';\nimport { ActionProvider } from '../utilities/provider/ActionProvider';\nimport { PageActionWrapper } from '../actions/PageActionWrapper';\nimport { useInquiryStore } from '../stores/inquiryStore';\nimport { useShellStore } from '../stores/shellStore';\n\nimport {\n useBuildEnvironment,\n APP_RIBBON_SPACE\n} from './ui/useBuildEnvironment';\nimport { ChatBotProvider } from '../utilities/chatBot/ChatBotProvider';\nimport { UserProfileMenuWrapper } from '../shell/ui/profile';\nimport { useMenuContext } from '../utilities/menus/MenuProvider';\n//import { usePreloadPages } from '../hooks/usePreloadPages';\nimport { Switch } from 'react-router-dom';\nimport { UdpRoutes } from '../routes/UdpRoutes';\nimport { useRouteRegistry } from '../routes/routeRegistryStore';\nimport { useShellVisibility } from './useShellVisibility';\nimport { PageLoading } from '../UI';\n// load the page container module so its loaded when we need it\nvoid import('../page/PageContainer');\nconst MenuTypeEnums = {\n Left_Menu: 1,\n Application_Menu: 2,\n Builders_Menu: 3,\n Favorites_Menu: 4\n};\n\nconst useStyles = makeStyles(\n (theme) => ({\n '@global': {\n html: {\n minHeight: '100%'\n },\n 'html, body, #root': {\n display: 'flex',\n flexDirection: 'column'\n },\n 'body, #root': {\n flex: 1\n }\n },\n root: {\n flex: 1,\n minHeight: '100vh',\n display: 'grid',\n gridTemplateAreas: ['sidebar header', 'sidebar content']\n .map((line) => `\"${line}\"`)\n .join(' '),\n gridTemplateColumns: 'auto 1fr',\n gridTemplateRows: 'auto 1fr'\n },\n header: {\n gridArea: 'header'\n },\n sidebar: {\n gridArea: 'sidebar'\n },\n content: {\n gridArea: 'content',\n display: 'flex',\n flexDirection: 'column',\n position: 'relative',\n zIndex: 1,\n height: ({ appRibbonSpace }) => `calc(100vh - ${56 + appRibbonSpace}px)`,\n overflowY: 'auto'\n },\n paper: {\n width: '100%',\n [theme.breakpoints.up('sm')]: {\n width: (props) => props.drawerWidth || 520\n }\n }\n }),\n { name: 'Layout' }\n);\n\n/**\n * Core site layout common to all pages\n */\nexport const Shell = (props) => {\n const buildEnv = useBuildEnvironment();\n const classes = useStyles({\n ...props,\n ribbonSpace: buildEnv ? APP_RIBBON_SPACE : 0\n });\n const {\n children,\n userAvatar = <UserProfileMenuWrapper />,\n appContent,\n leftMenu,\n appSelectorMenus,\n siteName,\n className,\n navRoot,\n hideToggle,\n useMockData,\n mockMenus,\n user: passedInUser,\n unityUrl,\n expander,\n sidebarTitle,\n navMenuHoverOn = false,\n secondExtended,\n toggleOne,\n toggleTwo,\n closePrimary,\n closeSecondary,\n panelExpanded,\n panelExpandedSecondary,\n setPanelExpanded = false,\n setPanelExpandedSecondary = false,\n breadCrumbAltLabelList = [],\n currentLocation,\n utilitySidebarResizable,\n utilitySidebarToggleOverride,\n onUtilitySidebarToggleExpandClick,\n hideLayout = false,\n getAccessToken,\n switcherData,\n selectedItem,\n switcherWidth,\n languages,\n projectSwitcherColor,\n getWidget,\n isValidWidget,\n appSwitcherHeader,\n hamburgerMenuAccessRole,\n hideLanguageSwitcher = false,\n subheader,\n hideHelpCenter = false,\n leftMenuLoading = false\n } = props;\n const contextUser = useUser();\n const user = passedInUser ?? contextUser;\n const { setGetWidget, setIsValidWidget } = useShellStore();\n const routeConfig = useRouteRegistry(\n (state) => state.routeMap[state.currentPath]\n );\n const isPublicRoute = routeConfig?.isPublic !== false;\n const [appSwitcherMobile, setAppSwitcherMobile] = useState(false);\n const [appSwitcherDesktop, setAppSwitcherDesktop] = useState(false);\n const { i18n } = useTranslation();\n const inquiryTitle = useInquiryStore((state) => state.title);\n\n //usePreloadPages();\n\n const menuContext = useMenuContext?.();\n const resolvedLeftMenu = useMemo(\n () => (leftMenuLoading ? [] : leftMenu ?? menuContext?.leftMenu),\n [leftMenuLoading, leftMenu, menuContext]\n );\n const homeRoute = useMemo(\n () => (leftMenu?.length ? findHomeRouteSlug(leftMenu) : menuContext?.homeRoute),\n [leftMenu, menuContext]\n );\n const resolvedAppSelectorMenus =\n appSelectorMenus ?? menuContext?.appSelectorMenus;\n const providedLanguages = languages ?? menuContext?.languages;\n const resolvedLanguages = Array.isArray(providedLanguages)\n ? providedLanguages\n : [];\n useEffect(() => {\n setGetWidget(getWidget);\n return () => setGetWidget(null);\n }, [getWidget, setGetWidget]);\n\n useEffect(() => {\n setIsValidWidget(isValidWidget);\n return () => setIsValidWidget(null);\n }, [isValidWidget, setIsValidWidget]);\n\n const effectiveShellHidden = useShellVisibility({\n hideLayout,\n isPublicRoute,\n hasUser: Boolean(user?.id)\n });\n\n const getMenuItems = useCallback(\n (menuTypeId, menus) => {\n if (!menus && !useMockData) {\n return [];\n }\n const menusToFilter = useMockData ? mockMenus : menus;\n\n const foundMenus = menusToFilter.filter(\n (menu) => menu.menuTypeId === menuTypeId && menu.active\n );\n\n if (foundMenus) {\n return foundMenus.reduce((menuItemInstanceStructureViews, menu) => {\n return [\n ...menuItemInstanceStructureViews,\n ...menu.menuItemInstanceStructureViews\n ];\n }, []);\n } else {\n return [];\n }\n },\n [useMockData, mockMenus]\n );\n\n const menus = useMemo(() => {\n const menuItems = getMenuItems(1, resolvedLeftMenu);\n return getMenuItemsRecursively(menuItems, true, user);\n }, [getMenuItems, user, resolvedLeftMenu]);\n\n const theme = useTheme();\n const mobile = useMediaQuery(theme.breakpoints.up('sm'));\n\n const handleAppSwitcher = (type, bool) => {\n if (type === 'mobile') {\n setAppSwitcherMobile(bool);\n } else {\n setAppSwitcherDesktop(bool);\n }\n };\n\n const builderMenu = useMemo(() => {\n const menuItems = getMenuItems(\n MenuTypeEnums.Builders_Menu,\n resolvedAppSelectorMenus\n );\n return getMenuItemsRecursively(menuItems, true, user, getAccessToken);\n }, [getMenuItems, user, resolvedAppSelectorMenus, getAccessToken]);\n\n const favoriteMenu = useMemo(() => {\n const menuItems = getMenuItems(\n MenuTypeEnums.Favorites_Menu,\n resolvedAppSelectorMenus\n );\n return getMenuItemsRecursively(menuItems, true, user, getAccessToken);\n }, [getMenuItems, user, resolvedAppSelectorMenus, getAccessToken]);\n\n const appMenu = useMemo(() => {\n const menuItems = getMenuItems(\n MenuTypeEnums.Application_Menu,\n resolvedAppSelectorMenus\n );\n return getMenuItemsRecursively(menuItems, true, user, getAccessToken);\n }, [getMenuItems, user, resolvedAppSelectorMenus, getAccessToken]);\n\n const hideAppMenu = useMemo(\n () =>\n !resolvedAppSelectorMenus ||\n (hamburgerMenuAccessRole &&\n !user?.roleNames.includes(hamburgerMenuAccessRole)),\n [user, resolvedAppSelectorMenus, hamburgerMenuAccessRole]\n );\n\n useEffect(() => {\n i18n.changeLanguage('en-US');\n }, [i18n]);\n\n return (\n <ChatBotProvider>\n <ActionProvider>\n <div className={classes.root}>\n {!effectiveShellHidden && (\n <SiteHeader\n className={classes.header}\n siteName={siteName}\n appContent={appContent}\n userAvatar={userAvatar}\n breadCrumbRoot={navRoot}\n setAppSwitcherOpen={(type, bool) => handleAppSwitcher(type, bool)}\n breadCrumbAltLabelList={breadCrumbAltLabelList}\n currentLocation={currentLocation}\n switcherData={switcherData}\n selectedItem={selectedItem}\n switcherWidth={switcherWidth}\n hideAppLaunch={hideAppMenu}\n languages={resolvedLanguages}\n hideLanguageSwitcher={hideLanguageSwitcher}\n backgroundColor={projectSwitcherColor}\n hideHelpCenter={hideHelpCenter}\n />\n )}\n\n <div style={{ display: 'flex' }} className={classes.sidebar}>\n {!effectiveShellHidden && mobile && (\n <NavigationSidebar\n className={classes.sidebar}\n data={menus}\n navMenuHoverOn={navMenuHoverOn}\n user={user}\n useGlobalState={true}\n />\n )}\n {expander && (\n <div>\n <UtilitySideBar\n title={inquiryTitle || sidebarTitle}\n resizable={utilitySidebarResizable}\n utilitySidebarToggleOverride={utilitySidebarToggleOverride}\n onUtilitySidebarToggleExpandClick={\n onUtilitySidebarToggleExpandClick\n }\n sidebarHidden={effectiveShellHidden}\n {...props}\n />\n </div>\n )}\n </div>\n\n <div className={classes.content}>\n {!effectiveShellHidden && subheader}\n <UtilityBar\n className={clsx(className)}\n gutters={false}\n hideToggle={hideToggle}\n expander={expander}\n secondExtended={secondExtended}\n toggleOne={toggleOne}\n toggleTwo={toggleTwo}\n closePrimary={closePrimary}\n closeSecondary={closeSecondary}\n expanded={panelExpanded}\n expandedSecondary={panelExpandedSecondary}\n setExpanded={setPanelExpanded}\n setExpandedSecondary={setPanelExpandedSecondary}\n />\n\n <PageActionWrapper>\n <Suspense fallback={<PageLoading />}>\n <Switch>\n {children}\n <UdpRoutes homeRoute={homeRoute} />\n </Switch>\n </Suspense>\n </PageActionWrapper>\n </div>\n <Drawer\n variant='temporary'\n anchor='left'\n open={appSwitcherDesktop}\n classes={\n !mobile\n ? {}\n : !resolvedAppSelectorMenus\n ? {}\n : { paper: classes.paper }\n }\n onClose={() => handleAppSwitcher('desktop', false)}\n >\n {mobile && resolvedAppSelectorMenus && (\n <FUIAppSwitcher\n onClose={() => handleAppSwitcher('desktop', false)}\n favoriteMenu={favoriteMenu}\n builderMenu={builderMenu}\n appMenu={appMenu}\n unityUrl={unityUrl}\n user={user}\n header={\n appSwitcherHeader && typeof appSwitcherHeader === 'function'\n ? appSwitcherHeader(() => {\n handleAppSwitcher('desktop', false);\n })\n : appSwitcherHeader\n }\n />\n )}\n {(!mobile || (mobile && !resolvedAppSelectorMenus)) && (\n <NavigationSidebar\n toggle={false}\n className={classes.sidebar}\n data={menus}\n navMenuHoverOn={navMenuHoverOn}\n user={user}\n useGlobalState={true}\n />\n )}\n </Drawer>\n\n <Drawer\n variant='temporary'\n anchor='right'\n open={appSwitcherMobile}\n classes={{ paper: classes.paper }}\n onClose={() => handleAppSwitcher('mobile', false)}\n >\n <FUIAppSwitcher\n onClose={() => handleAppSwitcher('mobile', false)}\n favoriteMenu={favoriteMenu}\n builderMenu={builderMenu}\n appMenu={appMenu}\n unityUrl={unityUrl}\n user={user}\n header={\n appSwitcherHeader && typeof appSwitcherHeader === 'function'\n ? appSwitcherHeader(() => {\n handleAppSwitcher('mobile', false);\n })\n : appSwitcherHeader\n }\n />\n </Drawer>\n </div>\n </ActionProvider>\n </ChatBotProvider>\n );\n};\n\nShell.propTypes = {\n /**\n * The newest propTypes have been added but older ones are missing @todo: add missing propTypes for Shell.\n */\n\n /**\n * The array used to map for label and functions to list items.\n */\n switcherData: PropTypes.array,\n /**\n * The active label displayed.\n */\n selectedItem: PropTypes.string,\n /**\n * Provides a method set the selector width. Default is 100.\n */\n switcherWidth: PropTypes.number,\n /**\n * Children nodes\n */\n children: PropTypes.oneOfType([\n PropTypes.arrayOf(PropTypes.node),\n PropTypes.node\n ]).isRequired,\n\n /**\n * Name of site\n */\n siteName: PropTypes.string,\n\n /**\n * Component to render for the user Avatar\n */\n userAvatar: PropTypes.element,\n\n appContent: PropTypes.element,\n\n leftMenu: PropTypes.array,\n\n appSelectorMenus: PropTypes.array,\n\n className: PropTypes.object,\n\n navRoot: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.element,\n PropTypes.node\n ]),\n\n /**\n * Should the shell use mock data\n */\n useMockData: PropTypes.bool,\n\n mockMenus: PropTypes.array,\n\n unityUrl: PropTypes.string,\n\n expander: PropTypes.bool,\n\n sidebarTitle: PropTypes.string,\n\n navMenuHoverOn: PropTypes.bool,\n\n toggleOne: PropTypes.bool,\n\n toggleTwo: PropTypes.bool,\n\n closePrimary: PropTypes.bool,\n\n closeSecondary: PropTypes.bool,\n\n panelExpanded: PropTypes.bool,\n\n panelExpandedSecondary: PropTypes.bool,\n\n setPanelExpanded: PropTypes.func,\n\n setPanelExpandedSecondary: PropTypes.func,\n\n breadCrumbAltLabelList: PropTypes.array,\n\n currentLocation: PropTypes.object,\n\n utilitySidebarResizable: PropTypes.bool,\n\n utilitySidebarToggleOverride: PropTypes.bool,\n\n onUtilitySidebarToggleExpandClick: PropTypes.func,\n\n hideLayout: PropTypes.bool,\n\n languages: PropTypes.arrayOf(PropTypes.object),\n\n /**\n * Passes the background color on the project switcher (default: theme secondary)\n */\n projectSwitcherColor: PropTypes.string,\n getWidget: PropTypes.func,\n isValidWidget: PropTypes.func,\n currentTenant: PropTypes.object,\n hamburgerMenuAccessRole: PropTypes.string\n};\n"],"mappings":"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"}
|
|
@@ -5,7 +5,7 @@ import { r as UserDispatchContext, t as useUser } from "./useUser-GVq--Ecx.js";
|
|
|
5
5
|
import { i as storeTenant } from "./UnitySessionStorage-C79WqHjc.js";
|
|
6
6
|
import { t as useAxiosGet } from "./useAxiosGet-CRKIOaCC.js";
|
|
7
7
|
import { t as FluentDialog } from "./FluentDialog-C5PIPKcM.js";
|
|
8
|
-
import {
|
|
8
|
+
import { r as getRouteRolesMapAndMenuActiveMap, t as findHomeRouteSlug } from "./menuUtilities-BIiFWeWA.js";
|
|
9
9
|
import { LoadingIndicator } from "./UI/loading/LoadingIndicator/index.js";
|
|
10
10
|
import { t as TenantContext } from "./tenantContext-DyvQ7XuF.js";
|
|
11
11
|
import React, { createContext, forwardRef, useCallback, useContext, useEffect, useMemo } from "react";
|
|
@@ -40,11 +40,15 @@ const MenuProvider = ({ children }) => {
|
|
|
40
40
|
const [{ data: leftMenu, loading: leftMenuLoading, error: leftMenuError }, refetchLeftMenu] = useAxiosGet(ConfigService.tenantV1ApiUrl, `menus?menuTypeId=1&productId=${ConfigService.config.UNITY_PRODUCT_ID}&tenantId=${currentTenantId}`, {}, !currentTenantId);
|
|
41
41
|
const [{ data: appSelectorMenus, loading: appSelectorMenusLoading, error: appSelectorMenusError }, refetchAppSelectorMenus] = useAxiosGet(ConfigService.tenantV1ApiUrl, `menus?tenantId=${currentTenantId}&verticalId=${ConfigService.config.UNITY_VERTICAL_ID}&userId=${userId ?? ""}`, {}, !userId);
|
|
42
42
|
const [{ data: languages, loading: languagesLoading, error: languagesError }, refetchLanguages] = useAxiosGet(ConfigService.tenantV1ApiUrl, `language`, {}, !userId);
|
|
43
|
-
const { rolesMap, menuActiveMap } = useMemo(() => {
|
|
44
|
-
if (Array.isArray(leftMenu) && leftMenu.length > 0) return
|
|
43
|
+
const { rolesMap, menuActiveMap, homeRoute } = useMemo(() => {
|
|
44
|
+
if (Array.isArray(leftMenu) && leftMenu.length > 0) return {
|
|
45
|
+
...buildRouteAndActiveMaps(leftMenu),
|
|
46
|
+
homeRoute: findHomeRouteSlug(leftMenu)
|
|
47
|
+
};
|
|
45
48
|
return {
|
|
46
49
|
rolesMap: /* @__PURE__ */ new Map(),
|
|
47
|
-
menuActiveMap: /* @__PURE__ */ new Map()
|
|
50
|
+
menuActiveMap: /* @__PURE__ */ new Map(),
|
|
51
|
+
homeRoute: null
|
|
48
52
|
};
|
|
49
53
|
}, [leftMenu]);
|
|
50
54
|
const refetchAll = useCallback(() => {
|
|
@@ -72,6 +76,7 @@ const MenuProvider = ({ children }) => {
|
|
|
72
76
|
languagesError,
|
|
73
77
|
rolesMap,
|
|
74
78
|
menuActiveMap,
|
|
79
|
+
homeRoute,
|
|
75
80
|
refetchAll
|
|
76
81
|
}), [
|
|
77
82
|
leftMenu,
|
|
@@ -85,6 +90,7 @@ const MenuProvider = ({ children }) => {
|
|
|
85
90
|
languagesError,
|
|
86
91
|
rolesMap,
|
|
87
92
|
menuActiveMap,
|
|
93
|
+
homeRoute,
|
|
88
94
|
refetchAll
|
|
89
95
|
]);
|
|
90
96
|
return /* @__PURE__ */ React.createElement(MenuContext.Provider, { value }, children);
|
|
@@ -96,6 +102,7 @@ const useMenuContext = () => {
|
|
|
96
102
|
languagesLoading: false,
|
|
97
103
|
rolesMap: /* @__PURE__ */ new Map(),
|
|
98
104
|
menuActiveMap: /* @__PURE__ */ new Map(),
|
|
105
|
+
homeRoute: null,
|
|
99
106
|
refetchAll: () => Promise.resolve([])
|
|
100
107
|
};
|
|
101
108
|
};
|
|
@@ -341,4 +348,4 @@ const TenantProvider = ({ children }) => {
|
|
|
341
348
|
//#endregion
|
|
342
349
|
export { TenantSelect as a, TenantAccessDialog as i, useLocalUserActions as n, MenuProvider as o, useUserActions as r, useMenuContext as s, TenantProvider as t };
|
|
343
350
|
|
|
344
|
-
//# sourceMappingURL=TenantProvider-
|
|
351
|
+
//# sourceMappingURL=TenantProvider-r35vfTMk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TenantProvider-r35vfTMk.js","names":[],"sources":["../src/utilities/menus/MenuProvider.tsx","../src/utilities/tenant/TenantSelect.tsx","../src/utilities/tenant/TenantAccessDialog.tsx","../src/utilities/auth/users.js","../src/utilities/tenant/TenantProvider.jsx"],"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 {\n getRouteRolesMapAndMenuActiveMap,\n findHomeRouteSlug\n} from './menuUtilities';\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 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 refetchAll: () => Promise<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 const [\n { data: languages, loading: languagesLoading, error: languagesError },\n refetchLanguages\n ] = useAxiosGet(\n ConfigService.tenantV1ApiUrl,\n `language`,\n {},\n !userId\n ) as UseAxiosGetReturn<LanguagesResponse>;\n\n const { rolesMap, menuActiveMap, homeRoute } = useMemo(() => {\n if (Array.isArray(leftMenu) && leftMenu.length > 0) {\n return {\n ...buildRouteAndActiveMaps(leftMenu),\n homeRoute: (\n findHomeRouteSlug as (menu: LeftMenuResponse) => string | null\n )(leftMenu)\n };\n }\n\n return {\n rolesMap: new Map<string, string[]>(),\n menuActiveMap: new Map<string, boolean>(),\n homeRoute: 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 leftMenuError,\n appSelectorMenus,\n appSelectorMenusLoading,\n appSelectorMenusError,\n languages,\n languagesLoading,\n languagesError,\n rolesMap,\n menuActiveMap,\n homeRoute,\n refetchAll\n }),\n [\n leftMenu,\n leftMenuLoading,\n leftMenuError,\n appSelectorMenus,\n appSelectorMenusLoading,\n appSelectorMenusError,\n languages,\n languagesLoading,\n languagesError,\n rolesMap,\n menuActiveMap,\n homeRoute,\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 appSelectorMenusLoading: false,\n languagesLoading: false,\n rolesMap: new Map<string, string[]>(),\n menuActiveMap: new Map<string, boolean>(),\n homeRoute: null,\n refetchAll: () => Promise.resolve([])\n }\n );\n};\n","import React, { forwardRef, useMemo, useCallback } from 'react';\nimport { Autocomplete, AutocompleteChangeReason } from '@material-ui/lab';\nimport { TextField, TextFieldProps } from '@material-ui/core';\nimport { Tenant } from '../types';\nimport { TenantTypeEnums } from '../../enums/unitySystemEnums'\n\ninterface TenantSelectProps {\n tenants?: Tenant[] | null;\n value: Tenant | null;\n onTenantChange?: (tenant: Tenant) => void;\n id?: string;\n label?: string;\n className?: string;\n disableClearable?: boolean;\n textFieldProps?: TextFieldProps;\n recordIdPrefix?: string;\n}\n\nconst sanitizeRecordId = (tenantName: string) =>\n tenantName.replace(/\\s+/g, '');\n\nexport const TenantSelect = forwardRef<HTMLDivElement, TenantSelectProps>(\n (props, ref) => {\n const {\n tenants,\n value,\n onTenantChange,\n id = 'tenant-select',\n label = 'Current Tenant',\n className,\n disableClearable = true,\n textFieldProps,\n recordIdPrefix = 'udpRecord-TenantSelect'\n } = props;\n\n const userTenantsContainsMultipleTypes =\n tenants.some((tenant) => tenant.tenantType == TenantTypeEnums.Tenant) &&\n tenants.some((tenant) => tenant.tenantType == TenantTypeEnums.Product);\n\n const sortTenantsByNameAlphacetically = (tenants ?: Tenant[]) => {\n const tenantProperty = \"tenantName\"\n tenants.sort((tenant, otherTenant) => {\n if (tenant[tenantProperty].toLowerCase() < otherTenant[tenantProperty].toLowerCase()) {\n return -1;\n } else if (tenant[tenantProperty].toLowerCase() > otherTenant[tenantProperty].toLowerCase()) {\n return 1;\n } else {\n return 0;\n }\n });\n };\n\n const groupTenantsByTypeAndFilter = useCallback( (tenants ?: Tenant[]) => {\n if (!userTenantsContainsMultipleTypes) {\n sortTenantsByNameAlphacetically(tenants);\n return tenants;\n }\n const clientTenants = tenants.filter(\n (tenant) => tenant.tenantType == TenantTypeEnums.Tenant\n );\n sortTenantsByNameAlphacetically(clientTenants);\n const productTenants = tenants.filter(\n (tenant) => tenant.tenantType == TenantTypeEnums.Product\n );\n sortTenantsByNameAlphacetically(productTenants);\n return clientTenants.concat(productTenants);\n },[userTenantsContainsMultipleTypes]);\n\n const options = useMemo(() => tenants ? groupTenantsByTypeAndFilter(tenants) : [], [tenants, groupTenantsByTypeAndFilter]);\n\n const handleChange = useCallback(\n (\n event: React.ChangeEvent<object>,\n newValue: Tenant | null,\n reason: AutocompleteChangeReason\n ) => {\n if (reason !== 'select-option' || !newValue) {\n return;\n }\n onTenantChange?.(newValue);\n },\n [onTenantChange]\n );\n\n return (\n <Autocomplete\n ref={ref}\n className={className}\n id={id}\n value={value}\n options={options}\n disableClearable={disableClearable}\n getOptionSelected={(option, selected) =>\n option?.tenantId === selected?.tenantId\n }\n getOptionLabel={(option) => option?.tenantName ?? ''}\n onChange={handleChange}\n groupBy={(option) =>\n userTenantsContainsMultipleTypes\n ? option.tenantType === TenantTypeEnums.Product\n ? 'Product'\n : 'Client'\n : null\n }\n renderInput={(params) => (\n <TextField\n {...params}\n label={label}\n variant='standard'\n {...textFieldProps}\n />\n )}\n renderOption={(option) => (\n <li\n style={{ width: '100%', height: '100%', listStyleType: 'none' }}\n // @ts-expect-error udpRecordId is used for automation tagging\n udprecordid={`${recordIdPrefix}-${sanitizeRecordId(\n option?.tenantName ?? ''\n )}`}\n >\n {option?.tenantName ?? ''}\n </li>\n )}\n />\n );\n }\n);\n\nTenantSelect.displayName = 'TenantSelect';\n","import React from 'react';\nimport { FluentDialog } from '../../UI/feedback/FluentDialog';\nimport { TenantSelect } from './TenantSelect';\nimport { Tenant } from '../types';\n\ninterface TenantAccessDialogProps {\n open: boolean;\n tenants: Tenant[];\n currentTenant: Tenant | null;\n onTenantChange: (tenant: Tenant) => void;\n productName?: string | null;\n}\n\nexport const TenantAccessDialog: React.FC<TenantAccessDialogProps> = ({\n tenants,\n onTenantChange,\n productName\n}) => {\n const message = productName\n ? `Your current tenant does not have access to ${productName}. Please select another tenant to continue.`\n : 'Your current tenant does not have access to this application. Please select another tenant to continue.';\n\n return (\n <FluentDialog\n open={true}\n title='Tenant Access Required'\n message={message}\n buttonOneHidden={true}\n buttonTwoHidden={true}\n disableEscapeKeyDown\n disableBackdropClick\n >\n <TenantSelect\n tenants={tenants}\n value={null}\n onTenantChange={onTenantChange}\n label='Available Tenants'\n id='tenant-access-dialog-select'\n disableClearable={false}\n recordIdPrefix='udpRecord-TenantAccessDialog'\n />\n </FluentDialog>\n );\n};\n","import { useContext, useCallback } from 'react';\nimport { UserDispatchContext } from './internal';\n\nexport function useUserActions() {\n const dispatch = useContext(UserDispatchContext);\n const setUser = useCallback(\n (user) => {\n dispatch({ type: 'SET_USER', user });\n },\n [dispatch]\n );\n\n const changeTenant = useCallback(\n (tenantId) => {\n dispatch({ type: 'CHANGE_TENANT', tenantId });\n },\n [dispatch]\n );\n\n return { setUser, changeTenant };\n}\n\nexport function useLocalUserActions() {\n const dispatch = useContext(UserDispatchContext);\n const setUser = useCallback(\n (user) => {\n dispatch({ type: 'SET_USER', user });\n },\n [dispatch]\n );\n\n const setAccessToken = useCallback(\n (accessToken) => {\n dispatch({ type: 'SET_ACCESS_TOKEN', accessToken });\n },\n [dispatch]\n );\n\n return { setUser, setAccessToken };\n}\n","import React, { useCallback, useMemo, useEffect } from 'react';\nimport { useUser } from '../auth/useUser';\nimport { useAxiosGet } from '../useAxiosGet';\nimport { TenantContext } from './tenantContext';\nimport { ConfigService } from '../../configService';\nimport { FluentDialog } from '../../UI/feedback/FluentDialog';\nimport { useAccount } from '@azure/msal-react';\nimport { MenuProvider } from '../menus/MenuProvider';\nimport { TenantAccessDialog } from './TenantAccessDialog';\nimport { storeTenant } from '../storage/UnitySessionStorage';\nimport { useUserActions } from '../auth/users';\nimport { TenantTypeEnums, UnityProducts } from '../../enums/unitySystemEnums';\nimport { useTenantStore } from '../../stores/tenantStore'; // <-- Imported for the sync hook\nimport { LoadingIndicator } from '../../UI/loading/LoadingIndicator';\n\n/**\n * A hook to sync the derived active tenant with the Zustand store.\n * This is the \"necessary evil\" to keep the store updated.\n */\nconst useTenantStoreSync = (activeTenant) => {\n\n\n const setCurrentTenant = useTenantStore((state) => state.setCurrentTenant);\n\n useEffect(() => {\n if (!activeTenant?.tenantId) return;\n\n // Compare against the *current* store state at effect time (no subscription).\n const current = useTenantStore.getState().currentTenant;\n const theme = activeTenant?.theme ?? null;\n const name = activeTenant?.tenantName ?? null;\n const tenantType = activeTenant?.tenantType;\n\n if (\n current?.tenantId === activeTenant.tenantId &&\n current?.tenantType === tenantType &&\n (current?.name ?? null) === name &&\n (current?.theme ?? null) === theme\n ) {\n return;\n }\n\n setCurrentTenant({\n tenantId: activeTenant.tenantId,\n name,\n tenantType,\n theme,\n });\n // We intentionally depend on primitive fields only; object identity for\n // activeTenant is not stable.\n }, [activeTenant?.tenantId, activeTenant?.tenantName, activeTenant?.tenantType, activeTenant?.theme, setCurrentTenant]);\n};\n\n/**\n * This hook fetches all data and derives the correct tenant state.\n * It is pure and has no knowledge of Zustand.\n */\nconst useTenantData = (id, user) => {\n const activeAccount = useAccount();\n // --- Data Fetching ---\n const [{ data: tenants, loading: tenantsLoading }, refetchTenantsList] = useAxiosGet(\n ConfigService.securityV1ApiUrl,\n `users/${id ?? ''}/unitytenants`,\n { skipTenantHeader: true },\n !id\n );\n\n const [{ data: selectedProduct, loading: productsLoading }] = useAxiosGet(\n ConfigService.tenantV2ApiUrl,\n `product/${ConfigService.config.UNITY_PRODUCT_ID}`,\n { skipTenantHeader: true},\n !activeAccount?.idToken\n );\n\n // --- State Derivation ---\n const unityProductIdString = ConfigService.config.UNITY_PRODUCT_ID;\n const unityProductId = unityProductIdString\n ? Number(unityProductIdString)\n : null;\n const shouldFilterByProduct =\n typeof unityProductId === 'number' && !Number.isNaN(unityProductId) && unityProductId !== UnityProducts.Unity;\n const hasTenantsData = Array.isArray(tenants);\n\n // When the selected product is marked as Unity default, product-type tenants (tenantType=2)\n // should always be allowed to access it.\n const isUnityDefaultProduct = selectedProduct?.isUnityDefault === true;\n\n const filteredTenantsList = useMemo(() => {\n if (!Array.isArray(tenants)) {\n return null;\n }\n if (!shouldFilterByProduct || unityProductId === null) {\n return tenants;\n }\n return tenants.filter((tenant) => {\n // Special access rule: Unity-default products are accessible by product tenants.\n if (isUnityDefaultProduct && tenant?.tenantType === TenantTypeEnums.Product) {\n return true;\n }\n return !!tenant?.products?.find(\n (product) => product?.productId === unityProductId\n );\n });\n }, [tenants, shouldFilterByProduct, unityProductId, isUnityDefaultProduct]);\n\n // This is the correctly derived tenant\n const activeTenant =\n user?.currentTenantId && Array.isArray(tenants)\n ? tenants.find((tenant) => tenant.tenantId === user.currentTenantId) ??\n null\n : null;\n\n // This is derived from the correct tenant\n const isProductTenant =\n activeTenant?.tenantType === TenantTypeEnums.Product;\n\n // --- Dialog Logic & Derived Flags ---\n\n const userHasLoaded = user?.statusCode === 200;\n\n const noTenantsAvailable =\n Array.isArray(tenants) && tenants.length === 0 && userHasLoaded;\n\n const hasFilteredTenants =\n Array.isArray(filteredTenantsList) && filteredTenantsList.length > 0;\n\n const currentTenantAllowed = !shouldFilterByProduct\n ? true\n : filteredTenantsList?.some(\n (tenant) => tenant.tenantId === user?.currentTenantId\n ) ?? false;\n\n const zeroTenantAccess =\n userHasLoaded &&\n shouldFilterByProduct &&\n Array.isArray(filteredTenantsList) &&\n filteredTenantsList.length === 0;\n\n const shouldShowTenantMismatchDialog =\n userHasLoaded &&\n shouldFilterByProduct &&\n hasFilteredTenants &&\n !currentTenantAllowed &&\n unityProductId !== UnityProducts.Unity;\n\n const allowedTenants = useMemo(\n () => (Array.isArray(filteredTenantsList) ? filteredTenantsList : []),\n [filteredTenantsList]\n );\n\n const selectedTenantForDialog = currentTenantAllowed\n ? activeTenant\n : allowedTenants[0] ?? null;\n\n // Return everything the Provider needs\n return {\n tenantsList: tenants ?? null,\n filteredTenantsList,\n activeTenant, // The correct tenant\n isProductTenant, // Derived from the correct tenant\n refresh: refetchTenantsList,\n noTenantsAvailable,\n zeroTenantAccess,\n shouldShowTenantMismatchDialog,\n allowedTenants,\n selectedTenantForDialog,\n unityProductName: selectedProduct?.productName,\n tenantsLoading,\n productsLoading,\n shouldFilterByProduct,\n hasTenantsData,\n hasProductsData: typeof selectedProduct === 'object' && selectedProduct !== null,\n };\n};\n\n\nexport const TenantProvider = ({ children }) => {\n const user = useUser();\n const activeAccount = useAccount();\n const id = user?.id;\n const { changeTenant } = useUserActions();\n\n // Call the main data hook to get the correct state\n const {\n tenantsList,\n filteredTenantsList,\n activeTenant, // This is the correct value\n isProductTenant,\n refresh,\n noTenantsAvailable,\n zeroTenantAccess,\n shouldShowTenantMismatchDialog,\n allowedTenants,\n selectedTenantForDialog,\n unityProductName,\n tenantsLoading,\n productsLoading,\n shouldFilterByProduct,\n hasTenantsData,\n hasProductsData,\n } = useTenantData(id, user);\n\n useTenantStoreSync(activeTenant);\n\n // Callback for changing the tenant (triggers API call)\n const handleTenantChange = useCallback(\n (tenant) => {\n if (!tenant) return;\n storeTenant(tenant.tenantId);\n changeTenant(tenant.tenantId); // This will cause `user` to update, re-running the hooks.\n },\n [changeTenant]\n );\n\n const userHasLoaded = user?.statusCode === 200;\n const shouldBlockForUser = Boolean(activeAccount) && !userHasLoaded;\n const shouldBlockForTenantData =\n Boolean(activeAccount) &&\n userHasLoaded &&\n (tenantsLoading || !hasTenantsData || (shouldFilterByProduct && (productsLoading || !hasProductsData)));\n\n if (shouldBlockForUser) {\n return <LoadingIndicator />;\n }\n\n if (shouldBlockForTenantData) {\n return <LoadingIndicator />;\n }\n\n // Render blocking dialog if user has no access\n if (noTenantsAvailable || zeroTenantAccess) {\n return (\n <FluentDialog\n title='No Access'\n message='Your user does not have access to any tenants. Please contact your support team.'\n open={true}\n buttonOneHidden={true}\n buttonTwoHidden={true}\n />\n );\n }\n if (shouldShowTenantMismatchDialog) {\n return (\n\n <TenantAccessDialog\n open={true}\n tenants={allowedTenants}\n currentTenant={selectedTenantForDialog}\n onTenantChange={handleTenantChange}\n productName={unityProductName}\n />\n );\n }\n\n // Provide the correct values to the Context\n return (\n <TenantContext.Provider\n value={{\n tenantsList,\n filteredTenantsList,\n activeTenant,\n isProductTenant,\n refresh,\n }}\n >\n <MenuProvider>\n {children}\n </MenuProvider>\n </TenantContext.Provider>\n );\n};\n"],"mappings":"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"}
|
|
@@ -4,7 +4,7 @@ import { r as storeInitialTenant } from "./UnitySessionStorage-C79WqHjc.js";
|
|
|
4
4
|
import { n as getRouteConfig, t as getCurrentRouteInitialized } from "./routeRegistryStore-BmhhxWS1.js";
|
|
5
5
|
import { ThemeProvider } from "./utilities/theme/index.js";
|
|
6
6
|
import { i as storeInitialPath } from "./LocalRedirectUrlStorage-D46ZyuMk.js";
|
|
7
|
-
import { t as AuthProvider } from "./AuthProvider-
|
|
7
|
+
import { t as AuthProvider } from "./AuthProvider-BUi9oEtK.js";
|
|
8
8
|
import React, { useEffect } from "react";
|
|
9
9
|
import { SnackbarProvider } from "notistack";
|
|
10
10
|
import { BrowserRouter } from "react-router-dom";
|
|
@@ -113,4 +113,4 @@ const UdpAppProvider = ({ children, snackbarProps, authProps, i18nOptions }) =>
|
|
|
113
113
|
//#endregion
|
|
114
114
|
export { getI18nInstance as n, initializeUnityI18n as r, UdpAppProvider as t };
|
|
115
115
|
|
|
116
|
-
//# sourceMappingURL=UdpAppProvider-
|
|
116
|
+
//# sourceMappingURL=UdpAppProvider-sZs_gHCc.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UdpAppProvider-
|
|
1
|
+
{"version":3,"file":"UdpAppProvider-sZs_gHCc.js","names":[],"sources":["../src/utilities/i18n/initializeI18n.js","../src/providers/UdpAppProvider.tsx"],"sourcesContent":["import i18n from 'i18next';\nimport { initReactI18next } from 'react-i18next';\nimport LanguageDetector from 'i18next-browser-languagedetector';\nimport { apiMutate } from '../useAxiosMutate';\nimport { ConfigService } from '../../configService';\nimport { getRouteConfig, getCurrentRouteInitialized } from '../../routes/routeRegistryStore';\n\n/**\n * @typedef {Object} TenantTranslationItem\n * @property {string} label\n * @property {string} value\n */\n\n/**\n * @callback TranslationLoader\n * @param {string} language\n * @returns {Promise<Record<string, string>>}\n */\n\n/**\n * @typedef {Object} InitializeI18nOptions\n * @property {TranslationLoader} [loadTranslations]\n * @property {Partial<import('i18next').InitOptions>} [i18nConfig]\n * @property {string} [fallbackLanguage]\n */\n\nlet isInitialized = false;\n\n/**\n * Convert the API response into an i18next resource bundle.\n * @param {TenantTranslationItem[]} languageData\n * @returns {Record<string, string>}\n */\nconst buildTranslationMap = (languageData = []) => {\n return languageData.reduce((acc, item) => {\n if (item?.label) {\n acc[item.label] = item?.value ?? '';\n }\n return acc;\n }, /** @type {Record<string, string>} */ ({}));\n};\n\n/** @type {TranslationLoader} */\nconst defaultTranslationLoader = async (language) => {\n await ConfigService.waitForConfig?.();\n\n const routeConfig = getRouteConfig?.();\n const routeInitialized = getCurrentRouteInitialized?.();\n\n const shouldSkip =\n !routeInitialized ||\n (routeConfig?.isPublic && !routeConfig?.attemptSilentAuth);\n\n if (shouldSkip) {\n return {};\n }\n\n const response = await apiMutate(\n ConfigService.tenantV1ApiUrl,\n `translation/language/${language}`,\n { method: 'get' }\n );\n\n const languageData = Array.isArray(response?.data) ? response.data : [];\n return buildTranslationMap(languageData);\n};\n\n/**\n * Initializes the shared i18n instance used across UDP React applications.\n * Safe to call multiple times – initialization will only occur once per runtime.\n * @param {InitializeI18nOptions} [options]\n * @returns {import('i18next').i18n}\n */\nexport const initializeUnityI18n = (options = {}) => {\n if (isInitialized) {\n return i18n;\n }\n\n const fallbackLanguage = options.fallbackLanguage ?? 'en-US';\n const loadTranslations = options.loadTranslations ?? defaultTranslationLoader;\n\n /**\n * Lazy-load translations when the language changes.\n * @param {string} language\n */\n const handleLanguageChanged = async (language) => {\n if (i18n.hasResourceBundle(language, 'translation')) {\n return;\n }\n\n try {\n const bundle = await loadTranslations(language);\n i18n.addResourceBundle(language, 'translation', bundle, true, true);\n i18n.changeLanguage(language);\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error('Failed to load translations', error);\n }\n };\n\n i18n.on('languageChanged', handleLanguageChanged);\n\n i18n\n .use(LanguageDetector)\n .use(initReactI18next)\n .init({\n fallbackLng: fallbackLanguage,\n debug: false,\n detection: {\n order: ['queryString', 'cookie'],\n cache: ['cookie']\n },\n interpolation: {\n escapeValue: false\n },\n backend: {\n loadPath: ''\n },\n ...(options.i18nConfig ?? {})\n });\n\n isInitialized = true;\n return i18n;\n};\n\n/**\n * Convenience accessor for the shared i18n instance.\n * @returns {import('i18next').i18n}\n */\nexport const getI18nInstance = () => i18n;\n","import React, { ReactNode, useEffect } from 'react';\nimport { SnackbarProvider, SnackbarProviderProps } from 'notistack';\nimport { ThemeProvider } from '../utilities/theme';\nimport { AuthProvider } from '../utilities/auth/AuthProvider';\nimport {\n initializeUnityI18n,\n InitializeI18nOptions\n} from '../utilities/i18n/initializeI18n';\nimport { storeInitialPath } from '../utilities/redirect';\nimport { storeInitialTenant } from '../utilities/storage';\nimport { BrowserRouter } from 'react-router-dom';\n\nexport interface UdpAppProviderProps {\n children: ReactNode;\n /**\n * Props forwarded to the SnackbarProvider from notistack.\n */\n snackbarProps?: SnackbarProviderProps;\n /**\n * Props forwarded to the AuthProviderWrapper.\n */\n authProps?: {\n doNotWaitForTenant?: boolean;\n };\n /**\n * Optional configuration overrides for the shared i18n instance.\n */\n i18nOptions?: InitializeI18nOptions;\n}\n\n/**\n * Bundles the core UDP providers (theme, snackbar, auth) and ensures the shared\n * i18n instance is initialised exactly once. Intended to be rendered beneath a\n * react-router <Router /> so the auth provider has access to history.\n */\nexport const UdpAppProvider: React.FC<UdpAppProviderProps> = ({\n children,\n snackbarProps,\n authProps,\n i18nOptions\n}) => {\n useEffect(() => {\n initializeUnityI18n(i18nOptions);\n }, [i18nOptions]);\n storeInitialPath();\n storeInitialTenant();\n return (\n <AuthProvider {...authProps}>\n <ThemeProvider>\n <BrowserRouter>\n <SnackbarProvider maxSnack={3} {...snackbarProps}>\n {children}\n </SnackbarProvider>\n </BrowserRouter>\n </ThemeProvider>\n </AuthProvider>\n );\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0BA,IAAI,gBAAgB;;;;;;AAOpB,MAAM,uBAAuB,eAAe,EAAE,KAAK;AACjD,QAAO,aAAa,QAAQ,KAAK,SAAS;AACxC,MAAI,MAAM,MACR,KAAI,KAAK,SAAS,MAAM,SAAS;AAEnC,SAAO;IACiC,EAAE,CAAE;;;AAIhD,MAAM,2BAA2B,OAAO,aAAa;AACnD,OAAM,cAAc,iBAAiB;CAErC,MAAM,cAAc,kBAAkB;AAOtC,KAHE,CAHuB,8BAA8B,IAIpD,aAAa,YAAY,CAAC,aAAa,kBAGxC,QAAO,EAAE;CAGX,MAAM,WAAW,MAAM,UACrB,cAAc,gBACd,wBAAwB,YACxB,EAAE,QAAQ,OAAO,CAClB;AAGD,QAAO,oBADc,MAAM,QAAQ,UAAU,KAAK,GAAG,SAAS,OAAO,EAAE,CAC/B;;;;;;;;AAS1C,MAAa,uBAAuB,UAAU,EAAE,KAAK;AACnD,KAAI,cACF,QAAO;CAGT,MAAM,mBAAmB,QAAQ,oBAAoB;CACrD,MAAM,mBAAmB,QAAQ,oBAAoB;;;;;CAMrD,MAAM,wBAAwB,OAAO,aAAa;AAChD,MAAI,KAAK,kBAAkB,UAAU,cAAc,CACjD;AAGF,MAAI;GACF,MAAM,SAAS,MAAM,iBAAiB,SAAS;AAC/C,QAAK,kBAAkB,UAAU,eAAe,QAAQ,MAAM,KAAK;AACnE,QAAK,eAAe,SAAS;WACtB,OAAO;AAEd,WAAQ,MAAM,+BAA+B,MAAM;;;AAIvD,MAAK,GAAG,mBAAmB,sBAAsB;AAEjD,MACG,IAAI,iBAAiB,CACrB,IAAI,iBAAiB,CACrB,KAAK;EACJ,aAAa;EACb,OAAO;EACP,WAAW;GACT,OAAO,CAAC,eAAe,SAAS;GAChC,OAAO,CAAC,SAAS;GAClB;EACD,eAAe,EACb,aAAa,OACd;EACD,SAAS,EACP,UAAU,IACX;EACD,GAAI,QAAQ,cAAc,EAAE;EAC7B,CAAC;AAEJ,iBAAgB;AAChB,QAAO;;;;;;AAOT,MAAa,wBAAwB;;;;;;;;AC9FrC,MAAa,kBAAiD,EAC5D,UACA,eACA,WACA,kBACI;AACJ,iBAAgB;AACd,sBAAoB,YAAY;IAC/B,CAAC,YAAY,CAAC;AACjB,mBAAkB;AAClB,qBAAoB;AACpB,QACE,sBAAA,cAAC,cAAiB,WAChB,sBAAA,cAAC,eAAA,MACC,sBAAA,cAAC,eAAA,MACC,sBAAA,cAAC,kBAAD;EAAkB,UAAU;EAAG,GAAI;EAEhB,EADhB,SACgB,CACL,CACF,CACH"}
|
|
@@ -7,14 +7,14 @@ import { t as useIsUnityAuthenticated } from "./useIsUnityAuthenticated-BspO6YQz
|
|
|
7
7
|
import { r as useRouteRegistry } from "./routeRegistryStore-BmhhxWS1.js";
|
|
8
8
|
import { useTheme } from "./utilities/theme/index.js";
|
|
9
9
|
import { t as PageForbiddenRoute } from "./PageForbiddenRoute-LzOoMfuJ.js";
|
|
10
|
-
import { s as useMenuContext } from "./TenantProvider-
|
|
10
|
+
import { s as useMenuContext } from "./TenantProvider-r35vfTMk.js";
|
|
11
11
|
import { LoadingIndicator } from "./UI/loading/LoadingIndicator/index.js";
|
|
12
12
|
import { o as storeRedirectPath } from "./LocalRedirectUrlStorage-D46ZyuMk.js";
|
|
13
13
|
import { t as PasswordResetRedirect$1 } from "./PasswordResetRedirect-BuWVcybJ.js";
|
|
14
14
|
import { t as useTenant } from "./useTenant-DryxTalu.js";
|
|
15
15
|
import React, { Suspense, lazy, useEffect, useMemo } from "react";
|
|
16
16
|
import { InteractionType } from "@azure/msal-browser";
|
|
17
|
-
import { Route, Switch, useLocation } from "react-router-dom";
|
|
17
|
+
import { Redirect, Route, Switch, useLocation } from "react-router-dom";
|
|
18
18
|
import { useTranslation } from "react-i18next";
|
|
19
19
|
import { MsalAuthenticationTemplate } from "@azure/msal-react";
|
|
20
20
|
//#region src/routes/useRegisterRoute.ts
|
|
@@ -150,8 +150,17 @@ const PageContainer = lazy(() => import("./page/PageContainer/index.js").then((m
|
|
|
150
150
|
const Reports = lazy(() => import("./Reports-Dl7UfyPu.js").then((n) => n.t));
|
|
151
151
|
const Inquiry = lazy(() => import("./Inquiry-BK7AvAqh.js").then((module) => ({ default: module.Inquiry })));
|
|
152
152
|
const UdpRoutes = (props) => {
|
|
153
|
-
const { ...other } = props;
|
|
154
|
-
|
|
153
|
+
const { homeRoute, ...other } = props;
|
|
154
|
+
const { leftMenuLoading } = useMenuContext();
|
|
155
|
+
return /* @__PURE__ */ React.createElement(Suspense, { fallback: /* @__PURE__ */ React.createElement(PageLoading, null) }, /* @__PURE__ */ React.createElement(Switch, null, homeRoute && /* @__PURE__ */ React.createElement(Redirect, {
|
|
156
|
+
exact: true,
|
|
157
|
+
from: "/",
|
|
158
|
+
to: homeRoute
|
|
159
|
+
}), leftMenuLoading && /* @__PURE__ */ React.createElement(Route, {
|
|
160
|
+
exact: true,
|
|
161
|
+
path: "/",
|
|
162
|
+
component: PageLoading
|
|
163
|
+
}), /* @__PURE__ */ React.createElement(PrivateRoute, {
|
|
155
164
|
path: "/virtual/:id",
|
|
156
165
|
render: (props) => /* @__PURE__ */ React.createElement(VirtualBrowser, {
|
|
157
166
|
...props,
|
|
@@ -221,4 +230,4 @@ const UdpRoutes = (props) => {
|
|
|
221
230
|
//#endregion
|
|
222
231
|
export { PublicRoute as n, PrivateRoute as r, UdpRoutes as t };
|
|
223
232
|
|
|
224
|
-
//# sourceMappingURL=UdpRoutes-
|
|
233
|
+
//# sourceMappingURL=UdpRoutes-ClaIhJIi.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UdpRoutes-ClaIhJIi.js","names":["PasswordResetRedirect"],"sources":["../src/routes/useRegisterRoute.ts","../src/routes/PrivateRoute.tsx","../src/routes/PublicRoute.tsx","../src/routes/UdpRoutes.jsx"],"sourcesContent":["import { useEffect } from 'react';\nimport type { Location } from 'history';\nimport { useLocation } from 'react-router-dom';\nimport { useRouteRegistry } from './routeRegistryStore';\n\ninterface UseRegisterRouteOptions {\n isPublic: boolean;\n attemptSilentAuth?: boolean;\n}\n\n/**\n * Registers the current route in the registry and keeps the current path in sync.\n * Returns the current location so callers can reuse it without calling useLocation again.\n */\nexport const useRegisterRoute = ({\n isPublic,\n attemptSilentAuth\n}: UseRegisterRouteOptions): Location => {\n const location = useLocation();\n const registerRoute = useRouteRegistry((state) => state.registerRoute);\n const setPath = useRouteRegistry((state) => state.setPath);\n\n const syncRouteRegistration = () => {\n const path = location.pathname;\n setPath(path);\n registerRoute(path, {\n isPublic,\n ...(attemptSilentAuth !== undefined ? { attemptSilentAuth } : {})\n });\n };\n\n useEffect(syncRouteRegistration, [\n attemptSilentAuth,\n isPublic,\n location.pathname,\n registerRoute,\n setPath\n ]);\n\n return location;\n};\n","import React, { useMemo } from 'react';\nimport { Route, RouteProps } from 'react-router-dom';\nimport { useTheme } from '../utilities/theme';\nimport { useTranslation } from 'react-i18next';\nimport type { RedirectRequest } from '@azure/msal-browser';\nimport { InteractionType } from '@azure/msal-browser';\nimport { MsalAuthenticationTemplate } from '@azure/msal-react';\nimport { useIsUnityAuthenticated } from '../utilities/auth/useIsUnityAuthenticated';\nimport { useUser } from '../utilities/auth/useUser';\nimport { PageForbiddenRoute } from './components/PageForbiddenRoute';\nimport { useMenuContext } from '../utilities/menus/MenuProvider';\nimport { useRegisterRoute } from './useRegisterRoute';\nimport { LoadingIndicator } from '../UI/loading/LoadingIndicator';\nimport { PasswordResetRedirect } from './components/PasswordResetRedirect';\nimport { getLoginRequest } from '../utilities/auth/signInAuthProvider';\nimport { useTenant } from '../utilities/tenant';\nimport { storeRedirectPath } from '../utilities/redirect/LocalRedirectUrlStorage';\n\n/**\n * Route guard for protected pages.\n *\n * - Triggers login redirect when the user is not authenticated.\n * - Blocks rendering until user/tenant/theme are initialized after login.\n * - Enforces tenant membership, menu activation, and role-based access.\n */\nexport interface PrivateRouteProps extends RouteProps {\n /**\n * Optional map of pathname -> required role IDs.\n * If a path is present and has roles, the user must have at least one.\n */\n rolesMap?: Map<string, string[]>;\n /**\n * Optional map of pathname -> menu active status.\n * If a path is present and inactive, access is denied.\n */\n menuActiveMap?: Map<string, boolean>;\n}\n\nexport const PrivateRoute = ({\n rolesMap: propRolesMap,\n menuActiveMap: propMenuActiveMap,\n ...routeProps\n}: PrivateRouteProps) => {\n const location = useRegisterRoute({ isPublic: false });\n const isAuthenticated = useIsUnityAuthenticated();\n const user = useUser();\n const tenant = useTenant();\n const theme = useTheme();\n const { t } = useTranslation();\n const menuContext = useMenuContext?.();\n const rolesMap = menuContext?.rolesMap ?? propRolesMap;\n const menuActiveMap = menuContext?.menuActiveMap ?? propMenuActiveMap;\n const userRoles = useMemo(() => {\n return Array.isArray(user?.roleIds) ? user.roleIds : [];\n }, [user]);\n\n const userHasAccessToTenant = useMemo(() => {\n if (user?.tenantIds?.includes(user.currentTenantId)) {\n return true;\n }\n return false;\n }, [user]);\n\n const userHasRoles = useMemo(() => {\n if (rolesMap?.size > 0) {\n if (!rolesMap.has(routeProps.location?.pathname)) {\n return false;\n }\n const routeRoles = rolesMap.get(routeProps.location?.pathname);\n if (!routeRoles?.length) {\n return true;\n }\n return routeRoles.some((element) => userRoles.includes(element));\n }\n return true;\n }, [userRoles, rolesMap, routeProps.location?.pathname]);\n\n const menuIsActive = useMemo(() => {\n if (\n menuActiveMap?.size > 0 &&\n menuActiveMap.has(routeProps.location?.pathname)\n ) {\n return menuActiveMap.get(routeProps.location?.pathname);\n }\n }, [menuActiveMap, routeProps.location?.pathname]);\n\n const activeTenant = tenant?.activeTenant ?? null;\n const isUserInitialized = Boolean(user?.id);\n const isTenantInitialized = Boolean(activeTenant?.tenantId);\n const isThemeInitialized = Boolean(theme?.isInitialized);\n\n const shouldWaitForProtectedContext =\n isAuthenticated && (!isUserInitialized || !isTenantInitialized);\n const shouldWaitForTheme = isAuthenticated && !isThemeInitialized;\n if (shouldWaitForProtectedContext || shouldWaitForTheme) {\n return <LoadingIndicator />;\n }\n\n if (!isAuthenticated) {\n storeRedirectPath(location.pathname, location.search);\n let loginRequest: RedirectRequest | null = null;\n try {\n loginRequest = getLoginRequest();\n } catch {\n loginRequest = null;\n }\n\n if (!loginRequest) {\n return <LoadingIndicator />;\n }\n\n return (\n <MsalAuthenticationTemplate\n interactionType={InteractionType.Redirect}\n authenticationRequest={loginRequest}\n loadingComponent={() => <LoadingIndicator />}\n errorComponent={(props) => <PasswordResetRedirect {...props} />}\n >\n <Route {...routeProps} />\n </MsalAuthenticationTemplate>\n );\n }\n\n if (!userHasAccessToTenant && user?.statusCode === 200) {\n return (\n <Route\n path='*'\n render={() => (\n <PageForbiddenRoute\n message={t(\n 'You do not have access to this tenant. Please select a different Tenant.'\n )}\n showButton={false}\n />\n )}\n />\n );\n }\n\n if (rolesMap?.has(routeProps.location?.pathname) && !menuIsActive) {\n return (\n <Route\n path='*'\n render={() => (\n <PageForbiddenRoute\n message={t(\n 'Trying to access inactive menu. Please check your menu configurations'\n )}\n showButton={false}\n />\n )}\n />\n );\n }\n\n if (!user?.isUnitySystemAdmin && rolesMap?.size > 0 && !userHasRoles) {\n return (\n <Route\n path='*'\n render={() => (\n <PageForbiddenRoute\n message={t(\n 'You do not have the required roles to access this page. Please contact an administrator to get access'\n )}\n showButton={false}\n />\n )}\n />\n );\n }\n\n if (user?.statusCode === 200) {\n return <Route {...routeProps} />;\n }\n\n return <LoadingIndicator />;\n};\n","import React from 'react';\nimport { Route, RouteProps } from 'react-router-dom';\nimport { useRegisterRoute } from './useRegisterRoute';\n\n/**\n * Route that is always treated as public.\n * Useful for pages that should bypass auth gating and shell blocking.\n */\nexport interface PublicRouteProps extends RouteProps {\n /**\n * When true, allows public pages to attempt silent auth for downstream calls.\n */\n attemptSilentAuth?: boolean;\n}\n\nexport const PublicRoute = ({\n attemptSilentAuth = false,\n ...props\n}: PublicRouteProps) => {\n useRegisterRoute({ isPublic: true, attemptSilentAuth });\n\n // Returns the actual Route component so it works inside Switch (v5) or as a direct route\n return <Route {...props} />;\n};\n","import React, { Suspense, lazy } from 'react';\nimport { Route, Switch, Redirect } from 'react-router-dom';\nimport { PrivateRoute } from './PrivateRoute';\nimport { UdpPageEnums } from '../enums/pageEnums';\nimport { ConfigService } from '../configService';\nimport { PageLoading } from '../UI/feedback/PageLoading';\nimport { PublicRoute } from './PublicRoute';\nimport { useMenuContext } from '../utilities/menus/MenuProvider';\n\n// Lazy load route components\nconst VirtualBrowser = lazy(() =>\n import('../maintenanceEngine/virtualBrowser/VirtualBrowser')\n);\nconst MenuPage = lazy(() => import('../menuPage/MenuPage'));\nconst UdpPublicForm = lazy(() => import('../udp/pages/UdpFormsPublicForm'));\nconst WorkflowContainer = lazy(() => import('../workflow/WorkflowContainer'));\nconst PasswordResetRedirect = lazy(() =>\n import('./components/PasswordResetRedirect')\n);\nconst MyExportsPage = lazy(() => import('../udp/export/MyExportsPage'));\nconst PageNotFoundRoute = lazy(() => import('./components/PageNotFoundRoute'));\nconst UdpMaintenanceConfigPage = lazy(() =>\n import('../udp/pages/UdpMaintenanceConfigPage')\n);\nconst UdpMaintenanceEnginePage = lazy(() =>\n import('../udp/pages/UdpMaintenanceEnginePage')\n);\nconst AadCallback = lazy(() => import('../utilities/auth/AadCallback'));\n\nconst UdpTransactionsPage = lazy(() =>\n import('../udp/pages/UdpTransactionsPage')\n);\n\nconst UdpTransactionTypesPage = lazy(() =>\n import('../udp/pages/UdpTransactionTypesPage')\n);\n\nconst PageContainer = lazy(() =>\n import('../page/PageContainer').then((module) => ({\n default: module.PageContainer\n }))\n);\n\nconst Reports = lazy(() => import('../reports/Reports'));\n\nconst Inquiry = lazy(() =>\n import('../inquiry/Inquiry').then((module) => ({ default: module.Inquiry }))\n);\n\nexport const UdpRoutes = (props) => {\n const { homeRoute, ...other } = props;\n const { leftMenuLoading } = useMenuContext();\n return (\n <Suspense fallback={<PageLoading />}>\n <Switch>\n {homeRoute && <Redirect exact from='/' to={homeRoute} />}\n {leftMenuLoading && <Route exact path='/' component={PageLoading} />}\n <PrivateRoute\n path='/virtual/:id'\n render={(props) => <VirtualBrowser {...props} {...other} />}\n />\n <PrivateRoute\n path='/menupage/:id'\n render={(props) => <MenuPage {...props} {...other} />}\n />\n\n <PublicRoute\n path={`/page/${UdpPageEnums.Udp_Forms_Renderer_Page_Public}`}\n render={(props) => <UdpPublicForm {...props} {...other} />}\n />\n <PublicRoute\n path={`/passwordresetsuccess`}\n render={(props) => <PasswordResetRedirect props={props} />}\n />\n <PrivateRoute\n path='/workflowtask/:id'\n render={(props) => <WorkflowContainer {...props} {...other} />}\n />\n <PrivateRoute\n path='/myexports'\n render={(props) => (\n <MyExportsPage\n productId={ConfigService.config.UNITY_PRODUCT_ID}\n {...props}\n {...other}\n />\n )}\n />\n <PrivateRoute\n path='/crudbrowser'\n render={(props) => <UdpMaintenanceEnginePage {...props} />}\n />\n <PrivateRoute\n path='/tablebrowser'\n render={(props) => <UdpMaintenanceConfigPage {...props} />}\n />\n\n <Route path='/aad_callback' component={AadCallback} />\n <PrivateRoute\n path='/transactionsPage'\n render={(props) => <UdpTransactionsPage {...props} />}\n />\n <PrivateRoute\n path='/transactionTypesPage'\n render={(props) => <UdpTransactionTypesPage {...props} />}\n />\n <PrivateRoute path='/reports/:id' exact component={Reports} />\n <PrivateRoute\n path='/inquiry/:id'\n render={(props) => <Inquiry {...props} />}\n />\n <PrivateRoute\n path='/page/:id'\n render={(props) => <PageContainer fromMenu={true} {...props} />}\n />\n <PrivateRoute path='*' component={PageNotFoundRoute} />\n </Switch>\n </Suspense>\n );\n};\n"],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -149,9 +149,9 @@ import { n as corporateColorsHint, r as productCategoryColors, t as corporateCol
|
|
|
149
149
|
import { ThemeProvider, useSystemColor, useTheme } from "./utilities/theme/index.js";
|
|
150
150
|
import { t as PageStatus } from "./PageStatus-C-kVMouE.js";
|
|
151
151
|
import { t as PageForbiddenRoute } from "./PageForbiddenRoute-LzOoMfuJ.js";
|
|
152
|
-
import { n as getRouteRolesMapAndMenuActiveMap, t as
|
|
153
|
-
import { n as useLocalUserActions, o as MenuProvider, r as useUserActions, s as useMenuContext } from "./TenantProvider-
|
|
154
|
-
import { n as PublicRoute, r as PrivateRoute, t as UdpRoutes } from "./UdpRoutes-
|
|
152
|
+
import { n as getMenuItemsRecursively, r as getRouteRolesMapAndMenuActiveMap, t as findHomeRouteSlug } from "./menuUtilities-BIiFWeWA.js";
|
|
153
|
+
import { n as useLocalUserActions, o as MenuProvider, r as useUserActions, s as useMenuContext } from "./TenantProvider-r35vfTMk.js";
|
|
154
|
+
import { n as PublicRoute, r as PrivateRoute, t as UdpRoutes } from "./UdpRoutes-ClaIhJIi.js";
|
|
155
155
|
import { LoadingIndicator } from "./UI/loading/LoadingIndicator/index.js";
|
|
156
156
|
import { a as storePath, i as storeInitialPath, n as getStoredPath, o as storeRedirectPath, r as storeCurrentPath, t as clearStoredPath } from "./LocalRedirectUrlStorage-D46ZyuMk.js";
|
|
157
157
|
import { t as PasswordResetRedirect } from "./PasswordResetRedirect-BuWVcybJ.js";
|
|
@@ -166,11 +166,11 @@ import { i as InquiryHeaderTitleTarget, n as InquiryHeaderControlTarget, r as In
|
|
|
166
166
|
import { n as useCurrentPageReturnTo, r as useIsAuthed, t as useAuthedUser } from "./useAuthedUser-117rOeGZ.js";
|
|
167
167
|
import { t as useDefaultFormValues } from "./useDefaultFormValues-DEhrc770.js";
|
|
168
168
|
import { t as ActionProvider } from "./ActionProvider-CEt8Z5bT.js";
|
|
169
|
-
import { n as FluentProfileMenuCard } from "./profile-
|
|
169
|
+
import { n as FluentProfileMenuCard } from "./profile-grsbAKwd.js";
|
|
170
170
|
import { n as getStoredExternalPath, r as storeExternalPath, t as clearStoredExternalPath } from "./ExternalRedirectUrlStorage-B80_V9pU.js";
|
|
171
|
-
import { n as createUser, t as AuthProvider } from "./AuthProvider-
|
|
171
|
+
import { n as createUser, t as AuthProvider } from "./AuthProvider-BUi9oEtK.js";
|
|
172
172
|
import { AuthProviderWrapper, useAccessToken, useSingleLogout } from "./utilities/auth/index.js";
|
|
173
|
-
import { t as Shell } from "./Shell
|
|
173
|
+
import { t as Shell } from "./Shell--4lbPR7c.js";
|
|
174
174
|
import { UdpStepper } from "./UI/stepper/index.js";
|
|
175
175
|
import { n as FluentSimpleTab, t as FluentSimpleTabs } from "./FluentSimpleTabs-DESD8CK6.js";
|
|
176
176
|
import { PAHAdditionalTitleComponent, UtilityTabHeader } from "./UI/utilityDisplay/utilityHeader/index.js";
|
|
@@ -310,7 +310,7 @@ import { n as FieldType, t as FieldArrayCard } from "./FieldArrayCard-Bna7N7_E.j
|
|
|
310
310
|
import { n as ApprovalIcon, t as RejectIcon } from "./RejectIcon-Cvqx_oPs.js";
|
|
311
311
|
import { t as MyExportsPage } from "./MyExportsPage-BroILsIj.js";
|
|
312
312
|
import { UdpAccordion, UdpAutocomplete, UdpAvatar, UdpBadge, UdpButton, UdpCard, UdpCheckbox, UdpChip, UdpCompoundButton, UdpContainerQuery, UdpContainerQueryGrid, UdpCounterBadge, UdpDateInput, UdpDatePicker, UdpDateTimeInput, UdpDialog, UdpDivider, UdpDrawer, UdpDropdown, UdpDurationInput, UdpFlexbox, UdpIcon, UdpIconButton, UdpIconGrid, UdpImage, UdpLink, UdpList, UdpListItem, UdpMenu, UdpMessageBar, UdpPopover, UdpPrimaryActionHeader, UdpProgressBar, UdpRadioGroup, UdpSearchInput, UdpSlider, UdpSpinner, UdpSwatchPicker, UdpSwitch, UdpTablist, UdpText, UdpTextInput, UdpTextarea, UdpTimeInput, UdpToggleButton, UdpTooltip, UdpTree, UdpTreeContext, UdpTreeItem, UdpVerticalSpacer } from "./UI/fluent-web-components/index.js";
|
|
313
|
-
import { n as getI18nInstance, r as initializeUnityI18n, t as UdpAppProvider } from "./UdpAppProvider-
|
|
313
|
+
import { n as getI18nInstance, r as initializeUnityI18n, t as UdpAppProvider } from "./UdpAppProvider-sZs_gHCc.js";
|
|
314
314
|
import { t as UdpMaintenanceConfigPage } from "./UdpMaintenanceConfigPage-DzqJeImf.js";
|
|
315
315
|
import "./errorBoundary/index.js";
|
|
316
316
|
import { UdpPagesLazy, UdpPagesLoaders } from "./udp/pages/UdpPagesLazy/index.js";
|
|
@@ -1597,6 +1597,6 @@ const TransactionAttachmentPdfStitcher = (props) => {
|
|
|
1597
1597
|
})));
|
|
1598
1598
|
};
|
|
1599
1599
|
//#endregion
|
|
1600
|
-
export { ADUserTypeEnums, Accordion, AccountFlags, ActionContext, ActionDispatchContext, ActionForm, ActionModal, ActionPanelPlacement, ActionProvider, ActionSideSheet, ActionSpeedDial, ActionSplitScreen, ActionSummaryCard, ActionSummaryHeader, ActionSummaryListContainer, ActionSummaryListItem, ActionSummaryPopover, ActionWrapper, ActionsRenderer, AddUser, AddressListItem, Adornment, AgTable, AgTableButtons, AlertContainer, AlertFlag, AmChart, AmbientAlert, AmbientAutoComplete, AmbientCard, AmbientCardButton, AmbientCardTitle, AmbientDateRangeSelector, AmbientGridTemplate, AmbientList, AmbientListItem, AmbientPopoverMenuItem, AmbientProjectSwitcher, AmbientSingleDateSelector, AmbientSplitStatCard, AmbientStepper, AmbientSummaryListHeader, AmbientTextField, AmbientToast, AmbientToggleButton, AmbientToggleButtonGroup, AmbientTokenButton, AmbientVisualizationCard, AmbientVisualizer, ApiMethodInstanceUdpGrid, AppMenu, AppMenuItem, AppMenuItemComponent, ApprovalIcon, Attachments, AuthProvider, AuthProviderWrapper, AutoCompletePropertyWidget_exports as AutoCompletePropertyWidget, AvatarAlphabet, BackwardsCompatibleGrid, BarChartWidget_exports as BarChartWidget, BaseSideSheet, BioCard, Block, BooleanPropertyWidget_exports as BooleanPropertyWidget, Box, BreadCrumbMenu, BubbleWidget_exports as BubbleWidget, CardList, CardinalityTypeEnums, ChatContainer, ChatMessage, CheckboxGroup, CheckboxList, ChipAlphabet, CircleGaugeWidget, CircularProgress, CkRichEditor, ClickOpenEnums, ClientSideUdpGrid, ColorKey, CompactCard, CompactDataList, CompactDataListItem, ConfigService, ContainerTypeEnums, ContentContainer, Controls, CoreLayoutFloorplan, CrudForm, CustomMenuPage, DateField, DatePropertyWidget_exports as DatePropertyWidget, DateTimeField, DateTimePropertyWidget_exports as DateTimePropertyWidget, DateTrendWidget_exports as DateTrendWidget, DensePlotWidget_exports as DensePlotWidget, DeviceTypeEnums, DiffChecker, Directory, DirectoryListItem, Divider, DonutChartWidget_exports as DonutChartWidget, DragDropFileUpload, DraggableSidebarTemplate, DynamicContainerWithMenu, EMPTY_GUID, Ellipse, EmptyStateDisplay, EntityAttributeEnums, EntityHeader, ExecuteApiDialog, ExpandRenderer, ExportSidesheet, ExtenderToggle, Field, FieldArrayCard, FieldType, FileUpload, FileViewer, FilterOperators, FilterSearch, FlagBlock, FloatPropertyWidget_exports as FloatPropertyWidget, FluentActivity, FluentActivityRow, FluentButton, FluentCard, FluentCardActions, FluentCardContent, FluentCardHeader, FluentCardText, FluentCheckbox, FluentColorPicker, FluentCompoundButton, FluentDataTable, FluentDatePicker, FluentDateTimePicker, FluentDialog, FluentIcon, FluentIconButton, FluentImageMap, FluentLink, FluentListElement, FluentListItem, FluentMap, FluentMenuListButton, FluentMenuListItem, FluentProfileMenuCard, FluentRadio, FluentRadioGroup, FluentScrollLoadAutocompleteMenu, FluentSearchField, FluentSelectGroupMenu, FluentSelectMenu, FluentSideNav, FluentSimpleSelect, FluentSimpleTab, FluentSimpleTabs, FluentTabPanel, FluentTabUtility, FluentTagField, FluentTagFieldComponent, FluentTextField, FluentTextFieldAutoComplete, FluentTextFieldComponent, FluentTimePicker, FluentTimeline, FluentToggle, FluentUploadButton, FluentUploadIconButton, Form, FormButtons, FormControl, FormControlLabel, FormError, FormHeader, FormSpy, FormSubHeader, FullScreenControl, GaugeWidget, GeoMap, GraphCard, Grid, GridActionBar, GridEnums, GridExcelStyleEnums, GridGroup, GridGroupingHeader, GridGroupingSidebar, GridRow, GridSidebarContainer, GridStateTypeEnums, GridUnit, HeaderExpander, HeaderLayout, IconButtonWithTooltip, IconKey, IconRenderer, IframeContainer, ImageLayer, ImportDataFromFileMapping, IndicatorChip, InfoCard, InputAdornment, InputFieldType, Inquiry, InquiryAdvancedSearch, InquiryAdvancedSearchForm, InquiryContainer, InquiryDashboard, InquiryHeaderControl, InquiryHeaderControlTarget, InquiryHeaderSecondary, InquiryHeaderSecondaryAlert, InquiryHeaderSecondaryAlertTarget, InquiryHeaderSecondaryTarget, InquiryHeaderTitle, InquiryHeaderTitleTarget, InquiryNodeControls, InquirySearchContainer, InquirySearchDatasource, InquirySearchTable, InquiryTreeMenu, InquiryTreeMenuItem, InquiryWrapper, InsightRenderer, IntegerPropertyWidget_exports as IntegerPropertyWidget, ItemDescription, ItemsWidgetCard, JobStatusIdMapping, JobTypeIdMapping, KeyValueTextField, Layers, LayoutUnit, LicenseKey, LineAndSparklinesWidget_exports as LineAndSparklinesWidget, LineGraphWidget_exports as LineGraphWidget, LinearProgress, Link, ListCard, ListElement, ListSearch, LoadingIndicator, LogicalSearchOperatorEnums, LoginForm, LookupTypeEnums, LookupTypeIdEnums, MAX_FILE_SIZE_MB, Map, MapFilterBar, MapLayout, MapSheet, MenuItemEnums, MenuProvider, MenuTypeEnums, MttMainTimeline, MttSummary, MttTimeline, MultilineTextPropertyWidget_exports as MultilineTextPropertyWidget, MyExportsPage, NavLink, NestParent, NestWrapper, NestedGrid, NewsCard, NodeActionEnums, NodeActionTriggerEnums, NodeColumnHeader, NodeDetails, NodeGroupOutlierEnums, NodeGroupTypeEnums, NodeList, NodeLoader, Note, Notes, NotesScreen, NotificationElement, NumericPropertyWidget_exports as NumericPropertyWidget, OpenPage, OutlookCallback, OutlookIntegrationBanner, OutlookIntegrationCallbackPage, OutlookIntegrationSideSheet, PAHAdditionalRightComponent, PAHAdditionalTitleComponent, PAHExport, PDFViewer, Page, PageContainer, PageContent, PageForbiddenRoute, PageHeader, PageLoading, PageNotFoundRoute, PageRenderer, PageSectionHeader, PageSectionSpacer, PageStatus, PageSubHeaderAction, PageSubHeaderActionsTarget, PanelPositionEnums, ParamsMappingForm, PasswordResetRedirect, PaymentForm, PaymentMethodTypeEnum, PaymentReversalForm, PaymentTenderTypeEnum, PaymentVendorFactoryEnum, PopoverCard, PowerBIReport, PrimaryActionButton, PrimaryActionHeader, PrivateRoute, ProductEnums, ProductNameEnums, ProgressBarWidget_exports as ProgressBarWidget, Prompt, PropertyField, PropertyFields, PropertyTypeEnum, PublicRoute, QuickViewCard, RecentlyLoadedNodesTable, RecentlyLoadedNodesWidget_exports as RecentlyLoadedNodesWidget, Redirect, RejectIcon, RemindersScreen, RemindersWidget_exports as RemindersWidget, RequiredFieldsMappingForm, RoleIdEnums, RoleNameEnums, RoleTypeEnums, Route, SapFlexibleTemplate, SearchGroupingType, SearchMethodUdpGrid, SearchOperators, SearchServiceDatasource, SearchSortDirection, SearchValueType, SelectGroupMenu, SelectPropertyWidget_exports as SelectPropertyWidget, ServerSideUdpGrid, SeverityTypeEnums, Shell, ShellDropdown, SideBarTemplate, SideSheet, SideSheetHeader, SiteHeaderRightComponent, SiteHeaderRightComponentTarget, SparklineWidget_exports as SparklineWidget, SparsePlotWidget_exports as SparsePlotWidget, SplitScreenTypeEnums, StandardTitle, Statistic, StatusCellRenderer, StatusChip, StatusLineItem, Sticky, StylizedTitle, SubHeaderAction, SubHeaderActionsTarget, SubmitButton, SummaryBlock, SupportCaseSideSheet, SvgIcon, Switch, TableColumnDefs, TableContainer, TeleportSource, TenantTypeEnums, TestFullStencilPage, TestStencilWrappedComponentsPage, TextPropertyWidget_exports as TextPropertyWidget, ThemeProvider, TicketCard, TileDisplay, TileLayer, TimeField, TimeLine, TimePropertyWidget_exports as TimePropertyWidget, TimelineCalendar, TimelinePreloaderNode, ToggleSection, Token, TokenGroupItem, ToolBarButton, TransactionActionTypeEnums, TransactionAttachmentPdfStitcher, TransactionEventTypeEnums, TransactionUiActionTypeEnums, TreeViewModeEnums, TrimForAvatar, Typography, UdpAccordion, UdpAdvancedSearchBuilder, UdpAppProvider, UdpAutocomplete, UdpAvatar, UdpBadge, UdpBarChart, UdpButton, UdpCalendar, UdpCalendarDayView, UdpCalendarMonthView, UdpCalendarWeekView, UdpCalendarYearView, UdpCard, UdpCheckbox, UdpChip, UdpCompoundButton, UdpContainerQuery, UdpContainerQueryGrid, UdpCounterBadge, UdpCrudFormFields, UdpDateInput, UdpDatePicker, UdpDateRangeSelector, UdpDateSelector, UdpDateTimeInput, UdpDetailList, UdpDetailListItem, UdpDialog, UdpDivider, UdpDonutChart, UdpDrawer, UdpDropdown, UdpDurationInput, UdpEnums, UdpFlexbox, UdpFormRenderer, UdpFormsBuilderPage, UdpFormsListPage, UdpFormsSubmissionGrid, UdpFormsSubmissionGridManagerPage, UdpFormsSubmissionGridResponderPage, UdpGridTemplate, UdpIcon, UdpIconButton, UdpIconGrid, UdpImage, UdpKeywordEnums, UdpKpiCard, UdpKpiCards, UdpLineChart, UdpLink, UdpList, UdpListItem, UdpMaintenanceConfigPage, UdpMaintenanceEnginePage, UdpMap, UdpMapComponent, UdpMapToolbar, UdpMenu, UdpMessageBar, UdpPageEnums, UdpPages, UdpPagesLazy, UdpPagesLoaders, UdpPopover, UdpPrimaryActionHeader, UdpPrivateForm, UdpProgressBar, UdpPublicForm, UdpRadioGroup, UdpReminderFiledForType, UdpRoutes, UdpSearchEnums, UdpSearchInput, UdpSlider, UdpSpinner, UdpStepper, UdpSwatchPicker, UdpSwitch, UdpTabPanel, UdpTabUtility, UdpTablist, UdpTabs, UdpText, UdpTextInput, UdpTextarea, UdpTimeInput, UdpTimeSelector, UdpTimeline, UdpTimelineConnector, UdpTimelineContent, UdpTimelineDot, UdpTimelineItem, UdpTimelineSeparator, UdpToggleButton, UdpTooltip, UdpTransactionActionEnums, UdpTransactionEmailForm, UdpTransactionTypesPage, UdpTransactionsPage, UdpTree, UdpTreeContext, UdpTreeItem, UdpVerticalSpacer, UnityFluentIcon, UnityIcon, UnityProducts, UserContext, UserDispatchContext, UserForm, UserFormFields, UtilityBar, UtilityBarInport, UtilityBarInportTarget, UtilityTabHeader, VectorLayer, VerticalEnums, VisibilityTypeEnums, WidgetCard, WorkOrderCard, WorkflowContainer, ZoomControl, acquireAccessToken, allowedExtensions, apiMutate, apiResponseArrayToOptions, arrayMutators, camelToPascalCaseWithSpace, checkAndAuthenticate, checkNodeIsHidden, clearGridState, clearStoredExternalPath, clearStoredPath, clearStoredTenant, collapseAllNodes, colors, constructBusinessObjectArrFromTree, constructDynamicNodeGroups, constructDynamicNodeGroups2, constructPreloadedTree, constructStaticNodeGroups, corporateColors, corporateColorsHint, createTimeline, createUser, csvStrToArray, csvStrToArrayOfObjects, defaultColumnActionsDef, deleteGridState, deleteNode, deleteNodeAndChildren, disconnect, ensureOutlookStatusLoaded, evaluateRule, exchangeAuthorizationCode, executeQueryAdHoc, executeQueryInstance, executeQueryInstanceWithApiMethodInstance, executeQueryWithParameters, expandAllNodes, findAllParentIds, findLastNode, findNodeById, findNodeByIdAndLabel, findNodesByIdAndLabel, findTermByType, fluentLibraryIcons, formatBytes, mttFunctions_exports as formatDataWithTimelineCategoryNameOrderedByDate, formatDateToLocaleString, formatTreeLabel, formatTreeMenuItem, generatePath, getAccessToken, getAllChildrenNodesToDelete, getApiAccessScope, getApiMethodIdByPath, getAuthorizeUrl, getBaseMethod, getCommonEntityName, getDisplayDetails, getDisplayName, getEntityAttributes, getFieldValuesForProperties, getFullyQualifiedName, getGridState, getHeaderTitle, getI18nInstance, getIconFromName, getLazyLoadChildrenArr, getLoginRequest, getMenuItemsRecursively, getMergedConfig, getNodeIdForRightBorder, getOrderedDynamicGroups, getOutlookRedirectUri, getOutlookStatus, getPathObject, getPathParametersObj, getPrimaryKeyValues, getPropertiesForFieldValues, getPropertyMappingList, getPropertyMappingObj, getRatio, getRouteRolesMapAndMenuActiveMap, getSanitizedName, getSearchIdentifiers, getSearchObject, getSearchValueString, getSignInAuthProvider, getStatus, getStoredExternalPath, getStoredPath, getStoredTenant, getSuccessAction, getTokenRequest, getUnityIconFromName, greyScale, handleResponseErrors, initSignInAuthProvider, initializeUnityI18n, isOutlookConnected, loginRedirect, makeDynamicGroupStructures, makeDynamicTreeStructure, makeTreeStaticGroupStructure, makeTreeStructure, mapNodeGroupChildren, mapNodeObjValuesToSearchParameters, mapRule, mapRuleData, matchPath, onFirstDataRendered, parseSearchParamsIntoFilterObjects, pluralize, processCatalogObjectKeysInOrder, processItemForDynamicNodeGroups, processItemForStaticNodeGroup, processObjIndex, processObjectToTree, processOrderedTreeData, processReferences, productCategoryColors, refreshOutlookStatus, removeWhiteSpace, resetOutlookStatus, saveGridState, searchForMatchingNode, searchTree, sendMail, setOutlookDisconnected, storeCurrentPath, storeExternalPath, storeInitialPath, storeInitialTenant, storePath, storeRedirectPath, storeTenant, subscribeOutlookStatus, toLowerFirstChar, toTitleCase, toUpperFirstChar, toUtcDate, toggleHeader, transformMenuPageTree, trimStringAfter, unityIcons, updateTreeIds, useAccessToken, useActionState, useActions, useAgGridApi, useAllTeleporters, useApiCatalog, useAuthedUser, useAxiosGet, useAxiosGetQuery, useAxiosMutate, useCatalogStore, useControlZoom, useConvertFilterModelToSearchFilters, useCrudActions, useCurrentPageReturnTo, useDateLocale, useDefaultFormValues, useDynamicListCalculation, useExport, useField, useFieldChangeListener, useFluentIcon, useForm, useFormState, useGridClear, useGridFormat, useHandleAction, useHandleAxiosSnackbar, useHistory, useIsAuthed, useIsUnityAuthenticated, useItemSubCard, useLocalUserActions, useLocation, useLoginAction, useLogoutAction, useLookupsStore, useMenuContext, useNoticeUpdate, useOutlook, usePageContext, useParams, usePosition, useProductVersion, usePromotedLookupMethods, usePromotedMethodEntity, useQueryExecutors, useQuickFilter, useRouteMatch, useScreenControl, useSearchFilterParamsMap, useServerSideDatasource, useSetInitialShellVisibility, useSetLocationState, useShellStore, useSingleLogout, useStyles, useSystemColor, useTenant, useTenantStore, useTheme, useTypeScale, useUdpExport, useUdpWebSocket, useUser, useUserActions, useWorkflowStore, verticalPrimary, verticalSecondary, whitelistedPaths, withRouter };
|
|
1600
|
+
export { ADUserTypeEnums, Accordion, AccountFlags, ActionContext, ActionDispatchContext, ActionForm, ActionModal, ActionPanelPlacement, ActionProvider, ActionSideSheet, ActionSpeedDial, ActionSplitScreen, ActionSummaryCard, ActionSummaryHeader, ActionSummaryListContainer, ActionSummaryListItem, ActionSummaryPopover, ActionWrapper, ActionsRenderer, AddUser, AddressListItem, Adornment, AgTable, AgTableButtons, AlertContainer, AlertFlag, AmChart, AmbientAlert, AmbientAutoComplete, AmbientCard, AmbientCardButton, AmbientCardTitle, AmbientDateRangeSelector, AmbientGridTemplate, AmbientList, AmbientListItem, AmbientPopoverMenuItem, AmbientProjectSwitcher, AmbientSingleDateSelector, AmbientSplitStatCard, AmbientStepper, AmbientSummaryListHeader, AmbientTextField, AmbientToast, AmbientToggleButton, AmbientToggleButtonGroup, AmbientTokenButton, AmbientVisualizationCard, AmbientVisualizer, ApiMethodInstanceUdpGrid, AppMenu, AppMenuItem, AppMenuItemComponent, ApprovalIcon, Attachments, AuthProvider, AuthProviderWrapper, AutoCompletePropertyWidget_exports as AutoCompletePropertyWidget, AvatarAlphabet, BackwardsCompatibleGrid, BarChartWidget_exports as BarChartWidget, BaseSideSheet, BioCard, Block, BooleanPropertyWidget_exports as BooleanPropertyWidget, Box, BreadCrumbMenu, BubbleWidget_exports as BubbleWidget, CardList, CardinalityTypeEnums, ChatContainer, ChatMessage, CheckboxGroup, CheckboxList, ChipAlphabet, CircleGaugeWidget, CircularProgress, CkRichEditor, ClickOpenEnums, ClientSideUdpGrid, ColorKey, CompactCard, CompactDataList, CompactDataListItem, ConfigService, ContainerTypeEnums, ContentContainer, Controls, CoreLayoutFloorplan, CrudForm, CustomMenuPage, DateField, DatePropertyWidget_exports as DatePropertyWidget, DateTimeField, DateTimePropertyWidget_exports as DateTimePropertyWidget, DateTrendWidget_exports as DateTrendWidget, DensePlotWidget_exports as DensePlotWidget, DeviceTypeEnums, DiffChecker, Directory, DirectoryListItem, Divider, DonutChartWidget_exports as DonutChartWidget, DragDropFileUpload, DraggableSidebarTemplate, DynamicContainerWithMenu, EMPTY_GUID, Ellipse, EmptyStateDisplay, EntityAttributeEnums, EntityHeader, ExecuteApiDialog, ExpandRenderer, ExportSidesheet, ExtenderToggle, Field, FieldArrayCard, FieldType, FileUpload, FileViewer, FilterOperators, FilterSearch, FlagBlock, FloatPropertyWidget_exports as FloatPropertyWidget, FluentActivity, FluentActivityRow, FluentButton, FluentCard, FluentCardActions, FluentCardContent, FluentCardHeader, FluentCardText, FluentCheckbox, FluentColorPicker, FluentCompoundButton, FluentDataTable, FluentDatePicker, FluentDateTimePicker, FluentDialog, FluentIcon, FluentIconButton, FluentImageMap, FluentLink, FluentListElement, FluentListItem, FluentMap, FluentMenuListButton, FluentMenuListItem, FluentProfileMenuCard, FluentRadio, FluentRadioGroup, FluentScrollLoadAutocompleteMenu, FluentSearchField, FluentSelectGroupMenu, FluentSelectMenu, FluentSideNav, FluentSimpleSelect, FluentSimpleTab, FluentSimpleTabs, FluentTabPanel, FluentTabUtility, FluentTagField, FluentTagFieldComponent, FluentTextField, FluentTextFieldAutoComplete, FluentTextFieldComponent, FluentTimePicker, FluentTimeline, FluentToggle, FluentUploadButton, FluentUploadIconButton, Form, FormButtons, FormControl, FormControlLabel, FormError, FormHeader, FormSpy, FormSubHeader, FullScreenControl, GaugeWidget, GeoMap, GraphCard, Grid, GridActionBar, GridEnums, GridExcelStyleEnums, GridGroup, GridGroupingHeader, GridGroupingSidebar, GridRow, GridSidebarContainer, GridStateTypeEnums, GridUnit, HeaderExpander, HeaderLayout, IconButtonWithTooltip, IconKey, IconRenderer, IframeContainer, ImageLayer, ImportDataFromFileMapping, IndicatorChip, InfoCard, InputAdornment, InputFieldType, Inquiry, InquiryAdvancedSearch, InquiryAdvancedSearchForm, InquiryContainer, InquiryDashboard, InquiryHeaderControl, InquiryHeaderControlTarget, InquiryHeaderSecondary, InquiryHeaderSecondaryAlert, InquiryHeaderSecondaryAlertTarget, InquiryHeaderSecondaryTarget, InquiryHeaderTitle, InquiryHeaderTitleTarget, InquiryNodeControls, InquirySearchContainer, InquirySearchDatasource, InquirySearchTable, InquiryTreeMenu, InquiryTreeMenuItem, InquiryWrapper, InsightRenderer, IntegerPropertyWidget_exports as IntegerPropertyWidget, ItemDescription, ItemsWidgetCard, JobStatusIdMapping, JobTypeIdMapping, KeyValueTextField, Layers, LayoutUnit, LicenseKey, LineAndSparklinesWidget_exports as LineAndSparklinesWidget, LineGraphWidget_exports as LineGraphWidget, LinearProgress, Link, ListCard, ListElement, ListSearch, LoadingIndicator, LogicalSearchOperatorEnums, LoginForm, LookupTypeEnums, LookupTypeIdEnums, MAX_FILE_SIZE_MB, Map, MapFilterBar, MapLayout, MapSheet, MenuItemEnums, MenuProvider, MenuTypeEnums, MttMainTimeline, MttSummary, MttTimeline, MultilineTextPropertyWidget_exports as MultilineTextPropertyWidget, MyExportsPage, NavLink, NestParent, NestWrapper, NestedGrid, NewsCard, NodeActionEnums, NodeActionTriggerEnums, NodeColumnHeader, NodeDetails, NodeGroupOutlierEnums, NodeGroupTypeEnums, NodeList, NodeLoader, Note, Notes, NotesScreen, NotificationElement, NumericPropertyWidget_exports as NumericPropertyWidget, OpenPage, OutlookCallback, OutlookIntegrationBanner, OutlookIntegrationCallbackPage, OutlookIntegrationSideSheet, PAHAdditionalRightComponent, PAHAdditionalTitleComponent, PAHExport, PDFViewer, Page, PageContainer, PageContent, PageForbiddenRoute, PageHeader, PageLoading, PageNotFoundRoute, PageRenderer, PageSectionHeader, PageSectionSpacer, PageStatus, PageSubHeaderAction, PageSubHeaderActionsTarget, PanelPositionEnums, ParamsMappingForm, PasswordResetRedirect, PaymentForm, PaymentMethodTypeEnum, PaymentReversalForm, PaymentTenderTypeEnum, PaymentVendorFactoryEnum, PopoverCard, PowerBIReport, PrimaryActionButton, PrimaryActionHeader, PrivateRoute, ProductEnums, ProductNameEnums, ProgressBarWidget_exports as ProgressBarWidget, Prompt, PropertyField, PropertyFields, PropertyTypeEnum, PublicRoute, QuickViewCard, RecentlyLoadedNodesTable, RecentlyLoadedNodesWidget_exports as RecentlyLoadedNodesWidget, Redirect, RejectIcon, RemindersScreen, RemindersWidget_exports as RemindersWidget, RequiredFieldsMappingForm, RoleIdEnums, RoleNameEnums, RoleTypeEnums, Route, SapFlexibleTemplate, SearchGroupingType, SearchMethodUdpGrid, SearchOperators, SearchServiceDatasource, SearchSortDirection, SearchValueType, SelectGroupMenu, SelectPropertyWidget_exports as SelectPropertyWidget, ServerSideUdpGrid, SeverityTypeEnums, Shell, ShellDropdown, SideBarTemplate, SideSheet, SideSheetHeader, SiteHeaderRightComponent, SiteHeaderRightComponentTarget, SparklineWidget_exports as SparklineWidget, SparsePlotWidget_exports as SparsePlotWidget, SplitScreenTypeEnums, StandardTitle, Statistic, StatusCellRenderer, StatusChip, StatusLineItem, Sticky, StylizedTitle, SubHeaderAction, SubHeaderActionsTarget, SubmitButton, SummaryBlock, SupportCaseSideSheet, SvgIcon, Switch, TableColumnDefs, TableContainer, TeleportSource, TenantTypeEnums, TestFullStencilPage, TestStencilWrappedComponentsPage, TextPropertyWidget_exports as TextPropertyWidget, ThemeProvider, TicketCard, TileDisplay, TileLayer, TimeField, TimeLine, TimePropertyWidget_exports as TimePropertyWidget, TimelineCalendar, TimelinePreloaderNode, ToggleSection, Token, TokenGroupItem, ToolBarButton, TransactionActionTypeEnums, TransactionAttachmentPdfStitcher, TransactionEventTypeEnums, TransactionUiActionTypeEnums, TreeViewModeEnums, TrimForAvatar, Typography, UdpAccordion, UdpAdvancedSearchBuilder, UdpAppProvider, UdpAutocomplete, UdpAvatar, UdpBadge, UdpBarChart, UdpButton, UdpCalendar, UdpCalendarDayView, UdpCalendarMonthView, UdpCalendarWeekView, UdpCalendarYearView, UdpCard, UdpCheckbox, UdpChip, UdpCompoundButton, UdpContainerQuery, UdpContainerQueryGrid, UdpCounterBadge, UdpCrudFormFields, UdpDateInput, UdpDatePicker, UdpDateRangeSelector, UdpDateSelector, UdpDateTimeInput, UdpDetailList, UdpDetailListItem, UdpDialog, UdpDivider, UdpDonutChart, UdpDrawer, UdpDropdown, UdpDurationInput, UdpEnums, UdpFlexbox, UdpFormRenderer, UdpFormsBuilderPage, UdpFormsListPage, UdpFormsSubmissionGrid, UdpFormsSubmissionGridManagerPage, UdpFormsSubmissionGridResponderPage, UdpGridTemplate, UdpIcon, UdpIconButton, UdpIconGrid, UdpImage, UdpKeywordEnums, UdpKpiCard, UdpKpiCards, UdpLineChart, UdpLink, UdpList, UdpListItem, UdpMaintenanceConfigPage, UdpMaintenanceEnginePage, UdpMap, UdpMapComponent, UdpMapToolbar, UdpMenu, UdpMessageBar, UdpPageEnums, UdpPages, UdpPagesLazy, UdpPagesLoaders, UdpPopover, UdpPrimaryActionHeader, UdpPrivateForm, UdpProgressBar, UdpPublicForm, UdpRadioGroup, UdpReminderFiledForType, UdpRoutes, UdpSearchEnums, UdpSearchInput, UdpSlider, UdpSpinner, UdpStepper, UdpSwatchPicker, UdpSwitch, UdpTabPanel, UdpTabUtility, UdpTablist, UdpTabs, UdpText, UdpTextInput, UdpTextarea, UdpTimeInput, UdpTimeSelector, UdpTimeline, UdpTimelineConnector, UdpTimelineContent, UdpTimelineDot, UdpTimelineItem, UdpTimelineSeparator, UdpToggleButton, UdpTooltip, UdpTransactionActionEnums, UdpTransactionEmailForm, UdpTransactionTypesPage, UdpTransactionsPage, UdpTree, UdpTreeContext, UdpTreeItem, UdpVerticalSpacer, UnityFluentIcon, UnityIcon, UnityProducts, UserContext, UserDispatchContext, UserForm, UserFormFields, UtilityBar, UtilityBarInport, UtilityBarInportTarget, UtilityTabHeader, VectorLayer, VerticalEnums, VisibilityTypeEnums, WidgetCard, WorkOrderCard, WorkflowContainer, ZoomControl, acquireAccessToken, allowedExtensions, apiMutate, apiResponseArrayToOptions, arrayMutators, camelToPascalCaseWithSpace, checkAndAuthenticate, checkNodeIsHidden, clearGridState, clearStoredExternalPath, clearStoredPath, clearStoredTenant, collapseAllNodes, colors, constructBusinessObjectArrFromTree, constructDynamicNodeGroups, constructDynamicNodeGroups2, constructPreloadedTree, constructStaticNodeGroups, corporateColors, corporateColorsHint, createTimeline, createUser, csvStrToArray, csvStrToArrayOfObjects, defaultColumnActionsDef, deleteGridState, deleteNode, deleteNodeAndChildren, disconnect, ensureOutlookStatusLoaded, evaluateRule, exchangeAuthorizationCode, executeQueryAdHoc, executeQueryInstance, executeQueryInstanceWithApiMethodInstance, executeQueryWithParameters, expandAllNodes, findAllParentIds, findHomeRouteSlug, findLastNode, findNodeById, findNodeByIdAndLabel, findNodesByIdAndLabel, findTermByType, fluentLibraryIcons, formatBytes, mttFunctions_exports as formatDataWithTimelineCategoryNameOrderedByDate, formatDateToLocaleString, formatTreeLabel, formatTreeMenuItem, generatePath, getAccessToken, getAllChildrenNodesToDelete, getApiAccessScope, getApiMethodIdByPath, getAuthorizeUrl, getBaseMethod, getCommonEntityName, getDisplayDetails, getDisplayName, getEntityAttributes, getFieldValuesForProperties, getFullyQualifiedName, getGridState, getHeaderTitle, getI18nInstance, getIconFromName, getLazyLoadChildrenArr, getLoginRequest, getMenuItemsRecursively, getMergedConfig, getNodeIdForRightBorder, getOrderedDynamicGroups, getOutlookRedirectUri, getOutlookStatus, getPathObject, getPathParametersObj, getPrimaryKeyValues, getPropertiesForFieldValues, getPropertyMappingList, getPropertyMappingObj, getRatio, getRouteRolesMapAndMenuActiveMap, getSanitizedName, getSearchIdentifiers, getSearchObject, getSearchValueString, getSignInAuthProvider, getStatus, getStoredExternalPath, getStoredPath, getStoredTenant, getSuccessAction, getTokenRequest, getUnityIconFromName, greyScale, handleResponseErrors, initSignInAuthProvider, initializeUnityI18n, isOutlookConnected, loginRedirect, makeDynamicGroupStructures, makeDynamicTreeStructure, makeTreeStaticGroupStructure, makeTreeStructure, mapNodeGroupChildren, mapNodeObjValuesToSearchParameters, mapRule, mapRuleData, matchPath, onFirstDataRendered, parseSearchParamsIntoFilterObjects, pluralize, processCatalogObjectKeysInOrder, processItemForDynamicNodeGroups, processItemForStaticNodeGroup, processObjIndex, processObjectToTree, processOrderedTreeData, processReferences, productCategoryColors, refreshOutlookStatus, removeWhiteSpace, resetOutlookStatus, saveGridState, searchForMatchingNode, searchTree, sendMail, setOutlookDisconnected, storeCurrentPath, storeExternalPath, storeInitialPath, storeInitialTenant, storePath, storeRedirectPath, storeTenant, subscribeOutlookStatus, toLowerFirstChar, toTitleCase, toUpperFirstChar, toUtcDate, toggleHeader, transformMenuPageTree, trimStringAfter, unityIcons, updateTreeIds, useAccessToken, useActionState, useActions, useAgGridApi, useAllTeleporters, useApiCatalog, useAuthedUser, useAxiosGet, useAxiosGetQuery, useAxiosMutate, useCatalogStore, useControlZoom, useConvertFilterModelToSearchFilters, useCrudActions, useCurrentPageReturnTo, useDateLocale, useDefaultFormValues, useDynamicListCalculation, useExport, useField, useFieldChangeListener, useFluentIcon, useForm, useFormState, useGridClear, useGridFormat, useHandleAction, useHandleAxiosSnackbar, useHistory, useIsAuthed, useIsUnityAuthenticated, useItemSubCard, useLocalUserActions, useLocation, useLoginAction, useLogoutAction, useLookupsStore, useMenuContext, useNoticeUpdate, useOutlook, usePageContext, useParams, usePosition, useProductVersion, usePromotedLookupMethods, usePromotedMethodEntity, useQueryExecutors, useQuickFilter, useRouteMatch, useScreenControl, useSearchFilterParamsMap, useServerSideDatasource, useSetInitialShellVisibility, useSetLocationState, useShellStore, useSingleLogout, useStyles, useSystemColor, useTenant, useTenantStore, useTheme, useTypeScale, useUdpExport, useUdpWebSocket, useUser, useUserActions, useWorkflowStore, verticalPrimary, verticalSecondary, whitelistedPaths, withRouter };
|
|
1601
1601
|
|
|
1602
1602
|
//# sourceMappingURL=index.js.map
|