udp-react-enterprise-component-library 25.18.1-beta.63 → 25.18.1-beta.64

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.
Files changed (33) hide show
  1. package/dist/{AuthProvider-C8qG0V63.js → AuthProvider-J79EBNDc.js} +2 -2
  2. package/dist/{AuthProvider-C8qG0V63.js.map → AuthProvider-J79EBNDc.js.map} +1 -1
  3. package/dist/{MenuProvider-BuTAUs0Z.js → MenuProvider-BqEZve2y.js} +2 -2
  4. package/dist/{MenuProvider-BuTAUs0Z.js.map → MenuProvider-BqEZve2y.js.map} +1 -1
  5. package/dist/{Shell-a2L-cKzs.js → Shell-BE_Aq6W2.js} +5 -5
  6. package/dist/{Shell-a2L-cKzs.js.map → Shell-BE_Aq6W2.js.map} +1 -1
  7. package/dist/{TenantProvider-CCrrxyiD.js → TenantProvider-BeFMHYP8.js} +2 -2
  8. package/dist/{TenantProvider-CCrrxyiD.js.map → TenantProvider-BeFMHYP8.js.map} +1 -1
  9. package/dist/{UdpAppProvider-BuJv7P-y.js → UdpAppProvider-DXgzyeHZ.js} +2 -2
  10. package/dist/{UdpAppProvider-BuJv7P-y.js.map → UdpAppProvider-DXgzyeHZ.js.map} +1 -1
  11. package/dist/{auth-DZmqyrT1.js → auth-BWJ4-JF-.js} +2 -2
  12. package/dist/{auth-DZmqyrT1.js.map → auth-BWJ4-JF-.js.map} +1 -1
  13. package/dist/index.js +9 -9
  14. package/dist/{menuUtilities-Da5uVIJ8.js → menuUtilities-BOnqojY6.js} +12 -10
  15. package/dist/menuUtilities-BOnqojY6.js.map +1 -0
  16. package/dist/{profile-BA_cbWI8.js → profile-7BieC5qc.js} +3 -3
  17. package/dist/{profile-BA_cbWI8.js.map → profile-7BieC5qc.js.map} +1 -1
  18. package/dist/providers/index.js +1 -1
  19. package/dist/routes/index.js +1 -1
  20. package/dist/{routes-DM7kVvCm.js → routes-DafRlYVQ.js} +11 -9
  21. package/dist/routes-DafRlYVQ.js.map +1 -0
  22. package/dist/shell/index.js +1 -1
  23. package/dist/shell/ui/profile/index.js +1 -1
  24. package/dist/types/src/routes/PrivateRoute.d.ts.map +1 -1
  25. package/dist/types/src/utilities/menus/menuUtilities.d.ts.map +1 -1
  26. package/dist/types/tsconfig.tsbuildinfo +1 -1
  27. package/dist/utilities/auth/index.js +3 -3
  28. package/dist/utilities/menus/index.js +1 -1
  29. package/dist/utilities/tenant/index.js +1 -1
  30. package/export-map.json +1 -1
  31. package/package.json +1 -1
  32. package/dist/menuUtilities-Da5uVIJ8.js.map +0 -1
  33. package/dist/routes-DM7kVvCm.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"profile-BA_cbWI8.js","names":["useStyles","useHistory","useHistoryNoType","useStyles","UserAvatar","UserProfileMenuWrapper: FC<UserProfileMenuWrapperProps>","Link","MenuOpener","UserAvatar"],"sources":["../src/shell/ui/profile/MenuOpener.jsx","../src/shell/ui/profile/UserAvatar.jsx","../src/shell/ui/profile/FluentProfileMenuCard.tsx","../src/shell/ui/profile/UserProfileMenuWrapper.tsx"],"sourcesContent":["import { Menu } from '@material-ui/core';\nimport {\n bindMenu,\n bindTrigger,\n usePopupState,\n} from 'material-ui-popup-state/hooks';\nimport React, {\n cloneElement,\n ElementType,\n FC,\n ReactElement,\n ReactNode,\n useCallback,\n} from 'react';\n\n/**\n * Helper to handle open a menu when a button is clicked\n */\nexport const MenuOpener = ({\n MenuComponent = Menu,\n name,\n button,\n menuProps,\n children,\n}) => {\n /* @fixme useId as string to bypass error */\n const popupId = 'useId(name)';\n const popupState = usePopupState({ variant: 'popover', popupId });\n const { close } = popupState;\n\n const click = useCallback(\n e => {\n const isButton = e.target.matches(\n 'a, button, input[type=\"button\"], input[type=\"image\"], [role=\"button\"], [role=\"link\"], a *, button *, [role=\"button\"] *, [role=\"link\"] *'\n );\n const isDropdownButton = e.target.matches(\n '.MuiAutocomplete-endAdornment *'\n );\n\n const closePopup = isButton && !isDropdownButton;\n\n if (closePopup) {\n close();\n }\n },\n [close]\n );\n\n return (\n <>\n {cloneElement(button, bindTrigger(popupState))}\n <MenuComponent {...menuProps} {...bindMenu(popupState)} onClick={click}>\n {children}\n </MenuComponent>\n </>\n );\n};\n\nexport default MenuOpener;\n","import { Avatar, makeStyles } from '@material-ui/core'\nimport clsx from 'clsx'\nimport React from 'react'\nimport useDevicePixelRatio from '../../../utilities/useDevicePixelRatio.ts'\nimport useGravatar from '../../../utilities/useGravatar.ts'\n\nconst useStyles = makeStyles(\n (theme) => ({\n root: {},\n default: {},\n toolbar: {\n width: 32,\n height: 32\n },\n large: {\n width: 80,\n height: 80\n }\n }),\n { name: 'UserAvatar' }\n)\n\n/**\n * Inteligent user Avatar element\n *\n * - Loads a Gravatar based on the email if one exists\n * - Falls back to a text avatar while loading and when a Gravatar does not exist\n * - Automatically chooses image size based on size prop and device pixel density (and updates if device pixel density changes)\n */\nconst UserAvatar = (props) => {\n const classes = useStyles(props)\n const { name, email, size = 'default', className, ...other } = props\n const dppx = useDevicePixelRatio()\n const dimension = { toolbar: 32, large: 80 }[size] || 40\n const avatar = useGravatar(email, { size: dimension * dppx })\n\n return (\n <Avatar\n alt={name}\n aria-label={`${name}'s avatar`}\n {...other}\n className={clsx(className, classes[size])}\n src={avatar}\n >\n {name?.trim()?.charAt(0) || '?'}\n </Avatar>\n )\n}\n\nexport default UserAvatar\n","import React, { forwardRef, useCallback } from 'react';\nimport { Button, CardContent, makeStyles, Typography } from '@material-ui/core';\nimport UserAvatar from './UserAvatar';\nimport { clearStoredPath } from '../../../utilities/redirect/LocalRedirectUrlStorage';\nimport { clearStoredExternalPath } from '../../../utilities/redirect/ExternalRedirectUrlStorage';\nimport {\n clearStoredTenant,\n storeTenant\n} from '../../../utilities/storage/UnitySessionStorage';\nimport { useTranslation } from 'react-i18next';\nimport { useUserActions } from '../../../utilities/auth/users';\nimport { User } from '../../../utilities/auth';\n// @ts-expect-error RRDv5 types are incompatible with react 18\nimport { useHistory as useHistoryNoType} from 'react-router-dom';\nimport { Tenant } from '../../../utilities';\nimport {History} from 'history';\nimport { TenantSelect } from '../../../utilities/tenant';\n\nconst useHistory = useHistoryNoType as () => History;\nconst useStyles = makeStyles((theme) => ({\n root: {\n '& > *': {\n margin: theme.spacing(1)\n },\n '&:last-child': {\n paddingBottom: theme.spacing(2)\n }\n },\n cardHeader: {\n display: 'flex',\n marginBottom: theme.spacing(3)\n },\n currentTenant: {\n margin: 'auto',\n width: '85%',\n marginBottom: theme.spacing(4)\n },\n buttonGroup: {\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center'\n },\n basicInfoContainer: {\n marginLeft: theme.spacing(1)\n },\n basicInfo: {\n paddingLeft: theme.spacing(1)\n },\n divider: {\n height: theme.spacing(3)\n },\n avatar: {\n fontSize: 40\n }\n}));\n\ninterface FluentProfileMenuCardProps {\n userTenants: Tenant[];\n currentTenant: Tenant | null;\n user: User | null;\n setUser: (user: User | null) => void;\n logout: () => void;\n unityUrl?: string;\n displayProfileButton?: boolean;\n}\n\nexport const FluentProfileMenuCard = forwardRef<HTMLDivElement, FluentProfileMenuCardProps>((props, ref) => {\n const classes = useStyles();\n const devUnityUrl = 'https://unity-dev.univerus.com/';\n const {\n userTenants,\n currentTenant,\n user,\n logout,\n unityUrl = devUnityUrl,\n } = props;\n const history = useHistory();\n const redirectToHome = useCallback(() => history.push('/'), [history]);\n // eslint-disable-next-line\n const { t } = useTranslation() as {t: (key: string) => string};\n const { changeTenant } = useUserActions();\n\n const handleTenantChange = useCallback(\n (tenant: Tenant) => {\n storeTenant(tenant.tenantId);\n changeTenant(tenant.tenantId);\n redirectToHome();\n },\n [changeTenant, redirectToHome]\n );\n\n\n\n // const handleProfileClick = () => {\n // // if this is unity (productid is 1), go to the profile slug, otherwise open the profile page in a new tab\n // if(ConfigService.config.UNITY_PRODUCT_ID === '1') history.push('/profile')\n // else window.open(unityUrl + '/profile');\n\n // }\n\n if (!user) return null;\n\n return (\n <CardContent ref={ref} className={classes.root}>\n <div className={classes.cardHeader}>\n <UserAvatar\n name={user?.name}\n email={user?.email}\n size='large'\n className={classes.avatar}\n />\n <div className={classes.basicInfoContainer}>\n <Typography className={classes.basicInfo} variant='subtitle2'>\n {user?.name}\n </Typography>\n <Typography className={classes.basicInfo} variant='body2'>\n {user?.email}\n </Typography>\n {/* {displayProfileButton && (\n <div className={classes.buttonGroup}>\n <Button\n id='udpRecord-FluentProfileMenuCard-MyProfile'\n udprecordid='udpRecord-FluentProfileMenuCard-MyProfile'\n onClick={handleProfileClick}\n target='_blank'\n color='secondary'\n >\n {t('My Profile')}\n </Button>\n </div>\n )} */}\n </div>\n </div>\n {userTenants && user && changeTenant && (\n <TenantSelect\n className={classes.currentTenant}\n id='current-tenant'\n tenants={userTenants}\n value={currentTenant}\n onTenantChange={handleTenantChange}\n label={t('Current Tenant')}\n recordIdPrefix='udpRecord-FluentProfileMenuCard'\n />\n )}\n <Button\n id='udpRecord-FluentProfileMenuCard-SignOut'\n // @ts-expect-error Custom automation attribute not typed by MUI\n udprecordid='udpRecord-FluentProfileMenuCard-SignOut'\n onClick={() => {\n clearStoredPath();\n clearStoredExternalPath();\n clearStoredTenant();\n logout();\n }}\n variant='outlined'\n color='secondary'\n >\n {t('Sign out')}\n </Button>\n </CardContent>\n );\n});\n\nFluentProfileMenuCard.displayName = 'FluentProfileMenuCard';\n","import React, { FC } from 'react';\nimport { Button, makeStyles, IconButton } from '@material-ui/core';\nimport { Link } from 'react-router-dom';\nimport MenuOpener from './MenuOpener';\nimport UserAvatar from './UserAvatar';\nimport { FluentProfileMenuCard } from './FluentProfileMenuCard';\nimport { ConfigService } from '../../../configService';\nimport { useSingleLogout, useUserActions } from '../../../utilities/auth';\nimport { useUser } from '../../../utilities/auth/useUser';\nimport { useTenant } from '../../../utilities/tenant/useTenant';\n\nconst useStyles = makeStyles((theme) => ({\n root: {},\n avatar: {\n background: theme.palette.secondary.main\n }\n}));\n\n\n\nexport interface UserProfileMenuWrapperProps {\n returnTo?: string;\n}\n\nexport const UserProfileMenuWrapper: FC<UserProfileMenuWrapperProps> = ({\n returnTo\n}) => {\n const classes = useStyles();\n const user = useUser();\n const singleLogout = useSingleLogout();\n const { setUser } = useUserActions();\n const tenantContext = useTenant();\n\n const currentTenant = tenantContext?.activeTenant ?? null;\n const availableTenants =\n tenantContext?.filteredTenantsList ??\n tenantContext?.tenantsList ??\n [];\n\n const enforcedTenantId = ConfigService.config.UNITY_TENANT_ID;\n\n const profileMenuTenants =\n !enforcedTenantId || enforcedTenantId === ''\n ? availableTenants\n : availableTenants.filter(\n (option) => option.tenantId === enforcedTenantId\n );\n\n if (!user) {\n const fallbackPath =\n returnTo ??\n (typeof window !== 'undefined' ? window.location.pathname : '/');\n\n return (\n <div className={classes.root}>\n <Button\n component={Link as React.ElementType} // react-router-dom@5 is incompatible with @types/react@18 so we have to assert the type manually\n to={{\n pathname: '/login',\n state: { returnTo: fallbackPath ?? '/' }\n }}\n color='inherit'\n >\n Sign in\n </Button>\n </div>\n );\n }\n\n return (\n <div className={classes.root}>\n <MenuOpener\n name = \"udp-user-profile-popover\"\n button={\n <IconButton>\n <UserAvatar\n name={user?.name}\n email={user?.email}\n size='toolbar'\n className={classes.avatar}\n />\n </IconButton>\n }\n menuProps={{\n keepMounted: true,\n getContentAnchorEl: null,\n variant: 'menu',\n anchorOrigin: { vertical: 'bottom', horizontal: 'right' },\n transformOrigin: { vertical: 'top', horizontal: 'right' }\n }}\n >\n <FluentProfileMenuCard\n userTenants={profileMenuTenants}\n currentTenant={currentTenant}\n user={user}\n setUser={setUser}\n logout={singleLogout}\n unityUrl={ConfigService.config.UNITY_URL}\n />\n </MenuOpener>\n </div>\n );\n};\n\nexport default UserProfileMenuWrapper;\n"],"mappings":"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"}
1
+ {"version":3,"file":"profile-7BieC5qc.js","names":["useStyles","useHistory","useHistoryNoType","useStyles","UserAvatar","UserProfileMenuWrapper: FC<UserProfileMenuWrapperProps>","Link","MenuOpener","UserAvatar"],"sources":["../src/shell/ui/profile/MenuOpener.jsx","../src/shell/ui/profile/UserAvatar.jsx","../src/shell/ui/profile/FluentProfileMenuCard.tsx","../src/shell/ui/profile/UserProfileMenuWrapper.tsx"],"sourcesContent":["import { Menu } from '@material-ui/core';\nimport {\n bindMenu,\n bindTrigger,\n usePopupState,\n} from 'material-ui-popup-state/hooks';\nimport React, {\n cloneElement,\n ElementType,\n FC,\n ReactElement,\n ReactNode,\n useCallback,\n} from 'react';\n\n/**\n * Helper to handle open a menu when a button is clicked\n */\nexport const MenuOpener = ({\n MenuComponent = Menu,\n name,\n button,\n menuProps,\n children,\n}) => {\n /* @fixme useId as string to bypass error */\n const popupId = 'useId(name)';\n const popupState = usePopupState({ variant: 'popover', popupId });\n const { close } = popupState;\n\n const click = useCallback(\n e => {\n const isButton = e.target.matches(\n 'a, button, input[type=\"button\"], input[type=\"image\"], [role=\"button\"], [role=\"link\"], a *, button *, [role=\"button\"] *, [role=\"link\"] *'\n );\n const isDropdownButton = e.target.matches(\n '.MuiAutocomplete-endAdornment *'\n );\n\n const closePopup = isButton && !isDropdownButton;\n\n if (closePopup) {\n close();\n }\n },\n [close]\n );\n\n return (\n <>\n {cloneElement(button, bindTrigger(popupState))}\n <MenuComponent {...menuProps} {...bindMenu(popupState)} onClick={click}>\n {children}\n </MenuComponent>\n </>\n );\n};\n\nexport default MenuOpener;\n","import { Avatar, makeStyles } from '@material-ui/core'\nimport clsx from 'clsx'\nimport React from 'react'\nimport useDevicePixelRatio from '../../../utilities/useDevicePixelRatio.ts'\nimport useGravatar from '../../../utilities/useGravatar.ts'\n\nconst useStyles = makeStyles(\n (theme) => ({\n root: {},\n default: {},\n toolbar: {\n width: 32,\n height: 32\n },\n large: {\n width: 80,\n height: 80\n }\n }),\n { name: 'UserAvatar' }\n)\n\n/**\n * Inteligent user Avatar element\n *\n * - Loads a Gravatar based on the email if one exists\n * - Falls back to a text avatar while loading and when a Gravatar does not exist\n * - Automatically chooses image size based on size prop and device pixel density (and updates if device pixel density changes)\n */\nconst UserAvatar = (props) => {\n const classes = useStyles(props)\n const { name, email, size = 'default', className, ...other } = props\n const dppx = useDevicePixelRatio()\n const dimension = { toolbar: 32, large: 80 }[size] || 40\n const avatar = useGravatar(email, { size: dimension * dppx })\n\n return (\n <Avatar\n alt={name}\n aria-label={`${name}'s avatar`}\n {...other}\n className={clsx(className, classes[size])}\n src={avatar}\n >\n {name?.trim()?.charAt(0) || '?'}\n </Avatar>\n )\n}\n\nexport default UserAvatar\n","import React, { forwardRef, useCallback } from 'react';\nimport { Button, CardContent, makeStyles, Typography } from '@material-ui/core';\nimport UserAvatar from './UserAvatar';\nimport { clearStoredPath } from '../../../utilities/redirect/LocalRedirectUrlStorage';\nimport { clearStoredExternalPath } from '../../../utilities/redirect/ExternalRedirectUrlStorage';\nimport {\n clearStoredTenant,\n storeTenant\n} from '../../../utilities/storage/UnitySessionStorage';\nimport { useTranslation } from 'react-i18next';\nimport { useUserActions } from '../../../utilities/auth/users';\nimport { User } from '../../../utilities/auth';\n// @ts-expect-error RRDv5 types are incompatible with react 18\nimport { useHistory as useHistoryNoType} from 'react-router-dom';\nimport { Tenant } from '../../../utilities';\nimport {History} from 'history';\nimport { TenantSelect } from '../../../utilities/tenant';\n\nconst useHistory = useHistoryNoType as () => History;\nconst useStyles = makeStyles((theme) => ({\n root: {\n '& > *': {\n margin: theme.spacing(1)\n },\n '&:last-child': {\n paddingBottom: theme.spacing(2)\n }\n },\n cardHeader: {\n display: 'flex',\n marginBottom: theme.spacing(3)\n },\n currentTenant: {\n margin: 'auto',\n width: '85%',\n marginBottom: theme.spacing(4)\n },\n buttonGroup: {\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center'\n },\n basicInfoContainer: {\n marginLeft: theme.spacing(1)\n },\n basicInfo: {\n paddingLeft: theme.spacing(1)\n },\n divider: {\n height: theme.spacing(3)\n },\n avatar: {\n fontSize: 40\n }\n}));\n\ninterface FluentProfileMenuCardProps {\n userTenants: Tenant[];\n currentTenant: Tenant | null;\n user: User | null;\n setUser: (user: User | null) => void;\n logout: () => void;\n unityUrl?: string;\n displayProfileButton?: boolean;\n}\n\nexport const FluentProfileMenuCard = forwardRef<HTMLDivElement, FluentProfileMenuCardProps>((props, ref) => {\n const classes = useStyles();\n const devUnityUrl = 'https://unity-dev.univerus.com/';\n const {\n userTenants,\n currentTenant,\n user,\n logout,\n unityUrl = devUnityUrl,\n } = props;\n const history = useHistory();\n const redirectToHome = useCallback(() => history.push('/'), [history]);\n // eslint-disable-next-line\n const { t } = useTranslation() as {t: (key: string) => string};\n const { changeTenant } = useUserActions();\n\n const handleTenantChange = useCallback(\n (tenant: Tenant) => {\n storeTenant(tenant.tenantId);\n changeTenant(tenant.tenantId);\n redirectToHome();\n },\n [changeTenant, redirectToHome]\n );\n\n\n\n // const handleProfileClick = () => {\n // // if this is unity (productid is 1), go to the profile slug, otherwise open the profile page in a new tab\n // if(ConfigService.config.UNITY_PRODUCT_ID === '1') history.push('/profile')\n // else window.open(unityUrl + '/profile');\n\n // }\n\n if (!user) return null;\n\n return (\n <CardContent ref={ref} className={classes.root}>\n <div className={classes.cardHeader}>\n <UserAvatar\n name={user?.name}\n email={user?.email}\n size='large'\n className={classes.avatar}\n />\n <div className={classes.basicInfoContainer}>\n <Typography className={classes.basicInfo} variant='subtitle2'>\n {user?.name}\n </Typography>\n <Typography className={classes.basicInfo} variant='body2'>\n {user?.email}\n </Typography>\n {/* {displayProfileButton && (\n <div className={classes.buttonGroup}>\n <Button\n id='udpRecord-FluentProfileMenuCard-MyProfile'\n udprecordid='udpRecord-FluentProfileMenuCard-MyProfile'\n onClick={handleProfileClick}\n target='_blank'\n color='secondary'\n >\n {t('My Profile')}\n </Button>\n </div>\n )} */}\n </div>\n </div>\n {userTenants && user && changeTenant && (\n <TenantSelect\n className={classes.currentTenant}\n id='current-tenant'\n tenants={userTenants}\n value={currentTenant}\n onTenantChange={handleTenantChange}\n label={t('Current Tenant')}\n recordIdPrefix='udpRecord-FluentProfileMenuCard'\n />\n )}\n <Button\n id='udpRecord-FluentProfileMenuCard-SignOut'\n // @ts-expect-error Custom automation attribute not typed by MUI\n udprecordid='udpRecord-FluentProfileMenuCard-SignOut'\n onClick={() => {\n clearStoredPath();\n clearStoredExternalPath();\n clearStoredTenant();\n logout();\n }}\n variant='outlined'\n color='secondary'\n >\n {t('Sign out')}\n </Button>\n </CardContent>\n );\n});\n\nFluentProfileMenuCard.displayName = 'FluentProfileMenuCard';\n","import React, { FC } from 'react';\nimport { Button, makeStyles, IconButton } from '@material-ui/core';\nimport { Link } from 'react-router-dom';\nimport MenuOpener from './MenuOpener';\nimport UserAvatar from './UserAvatar';\nimport { FluentProfileMenuCard } from './FluentProfileMenuCard';\nimport { ConfigService } from '../../../configService';\nimport { useSingleLogout, useUserActions } from '../../../utilities/auth';\nimport { useUser } from '../../../utilities/auth/useUser';\nimport { useTenant } from '../../../utilities/tenant/useTenant';\n\nconst useStyles = makeStyles((theme) => ({\n root: {},\n avatar: {\n background: theme.palette.secondary.main\n }\n}));\n\n\n\nexport interface UserProfileMenuWrapperProps {\n returnTo?: string;\n}\n\nexport const UserProfileMenuWrapper: FC<UserProfileMenuWrapperProps> = ({\n returnTo\n}) => {\n const classes = useStyles();\n const user = useUser();\n const singleLogout = useSingleLogout();\n const { setUser } = useUserActions();\n const tenantContext = useTenant();\n\n const currentTenant = tenantContext?.activeTenant ?? null;\n const availableTenants =\n tenantContext?.filteredTenantsList ??\n tenantContext?.tenantsList ??\n [];\n\n const enforcedTenantId = ConfigService.config.UNITY_TENANT_ID;\n\n const profileMenuTenants =\n !enforcedTenantId || enforcedTenantId === ''\n ? availableTenants\n : availableTenants.filter(\n (option) => option.tenantId === enforcedTenantId\n );\n\n if (!user) {\n const fallbackPath =\n returnTo ??\n (typeof window !== 'undefined' ? window.location.pathname : '/');\n\n return (\n <div className={classes.root}>\n <Button\n component={Link as React.ElementType} // react-router-dom@5 is incompatible with @types/react@18 so we have to assert the type manually\n to={{\n pathname: '/login',\n state: { returnTo: fallbackPath ?? '/' }\n }}\n color='inherit'\n >\n Sign in\n </Button>\n </div>\n );\n }\n\n return (\n <div className={classes.root}>\n <MenuOpener\n name = \"udp-user-profile-popover\"\n button={\n <IconButton>\n <UserAvatar\n name={user?.name}\n email={user?.email}\n size='toolbar'\n className={classes.avatar}\n />\n </IconButton>\n }\n menuProps={{\n keepMounted: true,\n getContentAnchorEl: null,\n variant: 'menu',\n anchorOrigin: { vertical: 'bottom', horizontal: 'right' },\n transformOrigin: { vertical: 'top', horizontal: 'right' }\n }}\n >\n <FluentProfileMenuCard\n userTenants={profileMenuTenants}\n currentTenant={currentTenant}\n user={user}\n setUser={setUser}\n logout={singleLogout}\n unityUrl={ConfigService.config.UNITY_URL}\n />\n </MenuOpener>\n </div>\n );\n};\n\nexport default UserProfileMenuWrapper;\n"],"mappings":"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"}
@@ -1,3 +1,3 @@
1
- import { t as UdpAppProvider } from "../UdpAppProvider-BuJv7P-y.js";
1
+ import { t as UdpAppProvider } from "../UdpAppProvider-DXgzyeHZ.js";
2
2
 
3
3
  export { UdpAppProvider };
@@ -1,3 +1,3 @@
1
- import { n as PrivateRoute, t as UdpRoutes } from "../routes-DM7kVvCm.js";
1
+ import { n as PrivateRoute, t as UdpRoutes } from "../routes-DafRlYVQ.js";
2
2
 
3
3
  export { PrivateRoute, UdpRoutes };
@@ -4,7 +4,7 @@ import { t as useUser } from "./useUser-wpHGo6jU.js";
4
4
  import { t as PageLoading } from "./PageLoading-GD6E2uMU.js";
5
5
  import { t as useIsUnityAuthenticated } from "./useIsUnityAuthenticated-Cc_l9meR.js";
6
6
  import { t as PageForbiddenRoute } from "./PageForbiddenRoute-Dnm9vt8t.js";
7
- import { n as useMenuContext } from "./MenuProvider-BuTAUs0Z.js";
7
+ import { n as useMenuContext } from "./MenuProvider-BqEZve2y.js";
8
8
  import React, { Suspense, lazy, useMemo } from "react";
9
9
  import { Route, Switch } from "react-router-dom";
10
10
  import { useTranslation } from "react-i18next";
@@ -18,7 +18,7 @@ const PrivateRoute = ({ rolesMap: propRolesMap, menuActiveMap: propMenuActiveMap
18
18
  const rolesMap = menuContext?.rolesMap ?? propRolesMap;
19
19
  const menuActiveMap = menuContext?.menuActiveMap ?? propMenuActiveMap;
20
20
  const userRoles = user.roleIds;
21
- let pathAsKey = routeProps.path.toLowerCase().replaceAll(" ", "").replace("/", "");
21
+ let pathAsKey = routeProps.location?.pathname.toLowerCase().replaceAll(" ", "").replace("/", "");
22
22
  pathAsKey = pathAsKey.split("/:")[0];
23
23
  const userHasAccessToTenant = useMemo(() => {
24
24
  if (user?.tenantIds?.includes(user.currentTenantId)) return true;
@@ -26,18 +26,20 @@ const PrivateRoute = ({ rolesMap: propRolesMap, menuActiveMap: propMenuActiveMap
26
26
  }, [user]);
27
27
  const userHasRoles = useMemo(() => {
28
28
  if (rolesMap?.size > 0) {
29
- if (!rolesMap.has(routeProps.path)) return true;
30
- return rolesMap.get(routeProps.path).every((element) => userRoles.includes(element));
29
+ if (!rolesMap.has(routeProps.location?.pathname)) return false;
30
+ const routeRoles = rolesMap.get(routeProps.location?.pathname);
31
+ if (!routeRoles?.length) return true;
32
+ return routeRoles.some((element) => userRoles.includes(element));
31
33
  }
32
34
  return true;
33
35
  }, [
34
36
  userRoles,
35
37
  rolesMap,
36
- routeProps.path
38
+ routeProps.location?.pathname
37
39
  ]);
38
40
  const menuIsActive = useMemo(() => {
39
- if (menuActiveMap?.size > 0 && menuActiveMap.has(routeProps.path)) return menuActiveMap.get(routeProps.path);
40
- }, [menuActiveMap, routeProps.path]);
41
+ if (menuActiveMap?.size > 0 && menuActiveMap.has(routeProps.location?.pathname)) return menuActiveMap.get(routeProps.location?.pathname);
42
+ }, [menuActiveMap, routeProps.location?.pathname]);
41
43
  if (!userHasAccessToTenant && isAuthenticated && user?.statusCode === 200) return /* @__PURE__ */ React.createElement(Route, {
42
44
  path: "*",
43
45
  render: (props) => /* @__PURE__ */ React.createElement(PageForbiddenRoute, {
@@ -45,7 +47,7 @@ const PrivateRoute = ({ rolesMap: propRolesMap, menuActiveMap: propMenuActiveMap
45
47
  showButton: false
46
48
  })
47
49
  });
48
- if (rolesMap?.has(routeProps.path) && !menuIsActive) return /* @__PURE__ */ React.createElement(Route, {
50
+ if (rolesMap?.has(routeProps.location?.pathname) && !menuIsActive) return /* @__PURE__ */ React.createElement(Route, {
49
51
  path: "*",
50
52
  render: (props) => /* @__PURE__ */ React.createElement(PageForbiddenRoute, {
51
53
  message: t("Trying to access inactive menu. Please check your menu configurations"),
@@ -152,4 +154,4 @@ const UdpRoutes = (props) => {
152
154
 
153
155
  //#endregion
154
156
  export { PrivateRoute as n, UdpRoutes as t };
155
- //# sourceMappingURL=routes-DM7kVvCm.js.map
157
+ //# sourceMappingURL=routes-DafRlYVQ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routes-DafRlYVQ.js","names":["props"],"sources":["../src/routes/PrivateRoute.jsx","../src/routes/UdpRoutes.jsx"],"sourcesContent":["import React, { useMemo } from 'react';\r\nimport { Route } from 'react-router-dom';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { useIsUnityAuthenticated } from '../utilities/auth/useIsUnityAuthenticated';\r\nimport { useUser } from '../utilities/auth/useUser';\r\nimport { PageForbiddenRoute } from './components/PageForbiddenRoute';\r\nimport { useMenuContext } from '../utilities/menus/MenuProvider';\r\n\r\nexport const PrivateRoute = ({\r\n rolesMap: propRolesMap,\r\n menuActiveMap: propMenuActiveMap,\r\n ...routeProps\r\n}) => {\r\n const isAuthenticated = useIsUnityAuthenticated();\r\n const user = useUser();\r\n const { t } = useTranslation();\r\n const menuContext = useMenuContext?.();\r\n const rolesMap = menuContext?.rolesMap ?? propRolesMap;\r\n const menuActiveMap = menuContext?.menuActiveMap ?? propMenuActiveMap;\r\n const userRoles = user.roleIds;\r\n //path is passed from frontend so making sure it meets expected fromat of all lowercase, no spaces, and has format /pathname or /pathname/:param\r\n let pathAsKey = routeProps.location?.pathname\r\n .toLowerCase()\r\n .replaceAll(' ', '')\r\n .replace('/', '');\r\n pathAsKey = pathAsKey.split('/:')[0];\r\n\r\n const userHasAccessToTenant = useMemo(() => {\r\n if (user?.tenantIds?.includes(user.currentTenantId)) {\r\n return true;\r\n }\r\n return false;\r\n }, [user]);\r\n\r\n const userHasRoles = useMemo(() => {\r\n if (rolesMap?.size > 0) {\r\n if (!rolesMap.has(routeProps.location?.pathname)) {\r\n return false;\r\n }\r\n const routeRoles = rolesMap.get(routeProps.location?.pathname);\r\n if (!routeRoles?.length) {\r\n return true;\r\n }\r\n return routeRoles.some((element) => userRoles.includes(element));\r\n }\r\n return true;\r\n }, [userRoles, rolesMap, routeProps.location?.pathname]);\r\n\r\n const menuIsActive = useMemo(() => {\r\n if (\r\n menuActiveMap?.size > 0 &&\r\n menuActiveMap.has(routeProps.location?.pathname)\r\n ) {\r\n return menuActiveMap.get(routeProps.location?.pathname);\r\n }\r\n }, [menuActiveMap, routeProps.location?.pathname]);\r\n\r\n if (!userHasAccessToTenant && isAuthenticated && user?.statusCode === 200) {\r\n return (\r\n <Route\r\n path='*'\r\n render={(props) => (\r\n <PageForbiddenRoute\r\n message={t(\r\n 'You do not have access to this tenant. Please select a different Tenant.'\r\n )}\r\n showButton={false}\r\n />\r\n )}\r\n />\r\n );\r\n }\r\n\r\n if (rolesMap?.has(routeProps.location?.pathname) && !menuIsActive) {\r\n return (\r\n <Route\r\n path='*'\r\n render={(props) => (\r\n <PageForbiddenRoute\r\n message={t(\r\n 'Trying to access inactive menu. Please check your menu configurations'\r\n )}\r\n showButton={false}\r\n />\r\n )}\r\n />\r\n );\r\n }\r\n\r\n if (!user.isUnitySystemAdmin && rolesMap?.size > 0 && !userHasRoles) {\r\n return (\r\n <Route\r\n path='*'\r\n render={(props) => (\r\n <PageForbiddenRoute\r\n message={t(\r\n 'You do not have the required roles to access this page. Please contact an administrator to get access'\r\n )}\r\n showButton={false}\r\n />\r\n )}\r\n />\r\n );\r\n }\r\n\r\n if (isAuthenticated && user?.statusCode === 200) {\r\n return <Route {...routeProps} />;\r\n }\r\n\r\n return null;\r\n};\r\n","import React, { Suspense, lazy } from 'react';\nimport { Route, Switch } from 'react-router-dom';\nimport { PrivateRoute } from './PrivateRoute';\nimport { UdpPageEnums } from '../enums/pageEnums';\nimport { ConfigService } from '../configService';\nimport { PageLoading } from '../UI/feedback/PageLoading';\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\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 => ({ default: module.PageContainer }))\n);\n\nconst Reports = lazy(() => import('../reports/Reports'));\n\nconst Inquiry = lazy(() => import('../inquiry/Inquiry'));\n\nexport const UdpRoutes = (props) => {\n const { ...other } = props;\n return (\n <Suspense fallback={<PageLoading />}>\n <Switch>\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 <Route\n path={`/page/${UdpPageEnums.Udp_Public_Forms_Page}`}\n render={(props) => <UdpPublicForm {...props} {...other} />}\n />\n <Route\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 => (\n <PageContainer fromMenu={true} {...props} />\n )}\n />\n <PrivateRoute path='*' component={PageNotFoundRoute} />\n </Switch>\n </Suspense>\n );\n};\n"],"mappings":";;;;;;;;;;;;AAQA,MAAa,gBAAgB,EAC3B,UAAU,cACV,eAAe,mBACf,GAAG,iBACC;CACJ,MAAM,kBAAkB,yBAAyB;CACjD,MAAM,OAAO,SAAS;CACtB,MAAM,EAAE,MAAM,gBAAgB;CAC9B,MAAM,cAAc,kBAAkB;CACtC,MAAM,WAAW,aAAa,YAAY;CAC1C,MAAM,gBAAgB,aAAa,iBAAiB;CACpD,MAAM,YAAY,KAAK;CAEvB,IAAI,YAAY,WAAW,UAAU,SAClC,aAAa,CACb,WAAW,KAAK,GAAG,CACnB,QAAQ,KAAK,GAAG;AACnB,aAAY,UAAU,MAAM,KAAK,CAAC;CAElC,MAAM,wBAAwB,cAAc;AAC1C,MAAI,MAAM,WAAW,SAAS,KAAK,gBAAgB,CACjD,QAAO;AAET,SAAO;IACN,CAAC,KAAK,CAAC;CAEV,MAAM,eAAe,cAAc;AACjC,MAAI,UAAU,OAAO,GAAG;AACtB,OAAI,CAAC,SAAS,IAAI,WAAW,UAAU,SAAS,CAC9C,QAAO;GAET,MAAM,aAAa,SAAS,IAAI,WAAW,UAAU,SAAS;AAC9D,OAAI,CAAC,YAAY,OACf,QAAO;AAET,UAAO,WAAW,MAAM,YAAY,UAAU,SAAS,QAAQ,CAAC;;AAElE,SAAO;IACN;EAAC;EAAW;EAAU,WAAW,UAAU;EAAS,CAAC;CAExD,MAAM,eAAe,cAAc;AACjC,MACE,eAAe,OAAO,KACtB,cAAc,IAAI,WAAW,UAAU,SAAS,CAEhD,QAAO,cAAc,IAAI,WAAW,UAAU,SAAS;IAExD,CAAC,eAAe,WAAW,UAAU,SAAS,CAAC;AAElD,KAAI,CAAC,yBAAyB,mBAAmB,MAAM,eAAe,IACpE,QACE,oCAAC;EACC,MAAK;EACL,SAAS,UACP,oCAAC;GACC,SAAS,EACP,2EACD;GACD,YAAY;IACZ;GAEJ;AAIN,KAAI,UAAU,IAAI,WAAW,UAAU,SAAS,IAAI,CAAC,aACnD,QACE,oCAAC;EACC,MAAK;EACL,SAAS,UACP,oCAAC;GACC,SAAS,EACP,wEACD;GACD,YAAY;IACZ;GAEJ;AAIN,KAAI,CAAC,KAAK,sBAAsB,UAAU,OAAO,KAAK,CAAC,aACrD,QACE,oCAAC;EACC,MAAK;EACL,SAAS,UACP,oCAAC;GACC,SAAS,EACP,wGACD;GACD,YAAY;IACZ;GAEJ;AAIN,KAAI,mBAAmB,MAAM,eAAe,IAC1C,QAAO,oCAAC,OAAU,WAAc;AAGlC,QAAO;;;;;ACrGT,MAAM,iBAAiB,WACrB,OAAO,gCACR;AACD,MAAM,WAAW,WAAW,OAAO,0BAAwB;AAC3D,MAAM,gBAAgB,WAAW,OAAO,2CAAmC;AAC3E,MAAM,oBAAoB,WAAW,OAAO,mCAAiC;AAC7E,MAAM,wBAAwB,WAC5B,OAAO,uCACR;AACD,MAAM,gBAAgB,WAAW,OAAO,+BAA+B;AACvE,MAAM,oBAAoB,WAAW,OAAO,mCAAkC;AAC9E,MAAM,2BAA2B,WAC/B,OAAO,iDACR;AACD,MAAM,2BAA2B,WAC/B,OAAO,iDACR;AACD,MAAM,cAAc,WAAW,OAAO,6BAAiC;AAGvE,MAAM,sBAAsB,WAC1B,OAAO,4CACR;AAED,MAAM,0BAA0B,WAC9B,OAAO,gDACR;AAED,MAAM,gBAAgB,WACpB,OAAO,iCAAyB,MAAK,YAAW,EAAE,SAAS,OAAO,eAAe,EAAE,CACpF;AAED,MAAM,UAAU,WAAW,OAAO,yBAAsB;AAExD,MAAM,UAAU,WAAW,OAAO,yBAAsB;AAExD,MAAa,aAAa,UAAU;CAClC,MAAM,EAAE,GAAG,UAAU;AACrB,QACE,oCAAC,YAAS,UAAU,oCAAC,kBAAc,IACjC,oCAAC,cACC,oCAAC;EACC,MAAK;EACL,SAAS,YAAU,oCAAC;GAAe,GAAIA;GAAO,GAAI;IAAS;GAC3D,EACF,oCAAC;EACC,MAAK;EACL,SAAS,YAAU,oCAAC;GAAS,GAAIA;GAAO,GAAI;IAAS;GACrD,EAEF,oCAAC;EACC,MAAM,SAAS,aAAa;EAC5B,SAAS,YAAU,oCAAC;GAAc,GAAIA;GAAO,GAAI;IAAS;GAC1D,EACF,oCAAC;EACC,MAAM;EACN,SAAS,YAAU,oCAAC,yBAAsB,OAAOA,UAAS;GAC1D,EACF,oCAAC;EACC,MAAK;EACL,SAAS,YAAU,oCAAC;GAAkB,GAAIA;GAAO,GAAI;IAAS;GAC9D,EACF,oCAAC;EACC,MAAK;EACL,SAAS,YACP,oCAAC;GACC,WAAW,cAAc,OAAO;GAChC,GAAIA;GACJ,GAAI;IACJ;GAEJ,EACF,oCAAC;EACC,MAAK;EACL,SAAS,YAAU,oCAAC,0BAA6BA,QAAS;GAC1D,EACF,oCAAC;EACC,MAAK;EACL,SAAS,YAAU,oCAAC,0BAA6BA,QAAS;GAC1D,EAEF,oCAAC;EAAM,MAAK;EAAgB,WAAW;GAAe,EACtD,oCAAC;EACC,MAAK;EACL,SAAS,YAAU,oCAAC,qBAAwBA,QAAS;GACrD,EACF,oCAAC;EACC,MAAK;EACL,SAAS,YAAU,oCAAC,yBAA4BA,QAAS;GACzD,EACF,oCAAC;EAAa,MAAK;EAAe;EAAM,WAAW;GAAW,EAChE,oCAAC;EACC,MAAK;EACL,SAAQ,YAAS,oCAAC,SAAYA,QAAS;GACvC,EACF,oCAAC;EACC,MAAK;EACL,SAAQ,YACN,oCAAC;GAAc,UAAU;GAAM,GAAIA;IAAS;GAE9C,EACA,oCAAC;EAAa,MAAK;EAAI,WAAW;GAAqB,CAChD,CACA"}
@@ -2,7 +2,7 @@ import { n as SiteHeaderRightComponentTarget, t as SiteHeaderRightComponent } fr
2
2
  import { n as useBuildEnvironment, t as APP_RIBBON_SPACE } from "../useBuildEnvironment-2gdqpmBX.js";
3
3
  import { t as SidebarCollapseButton } from "../SidebarCollapseButton-_UUtsftD.js";
4
4
  import { a as LanguageSwitcher, i as HelpCenter, o as ShellDropdown, r as EnvironmentRibbon, s as AmbientProjectSwitcher, t as SiteHeaderSpacer } from "../SiteHeader-CuOFCr7D.js";
5
- import { t as Shell } from "../Shell-a2L-cKzs.js";
5
+ import { t as Shell } from "../Shell-BE_Aq6W2.js";
6
6
  import { r as isPasswordValid, t as UserForm } from "../UserForm-DNgeQvad.js";
7
7
  import "./ui/index.js";
8
8
 
@@ -1,3 +1,3 @@
1
- import { t as UserProfileMenuWrapper } from "../../../profile-BA_cbWI8.js";
1
+ import { t as UserProfileMenuWrapper } from "../../../profile-7BieC5qc.js";
2
2
 
3
3
  export { UserProfileMenuWrapper };
@@ -1 +1 @@
1
- {"version":3,"file":"PrivateRoute.d.ts","sourceRoot":"","sources":["../../../../src/routes/PrivateRoute.jsx"],"names":[],"mappings":"AAAA,OAAO,KAAkB,MAAM,OAAO,CAAC;AAQvC,eAAO,MAAM,YAAY;;;;uBA4FxB,CAAC"}
1
+ {"version":3,"file":"PrivateRoute.d.ts","sourceRoot":"","sources":["../../../../src/routes/PrivateRoute.jsx"],"names":[],"mappings":"AAAA,OAAO,KAAkB,MAAM,OAAO,CAAC;AAQvC,eAAO,MAAM,YAAY;;;;uBAsGxB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"menuUtilities.d.ts","sourceRoot":"","sources":["../../../../../src/utilities/menus/menuUtilities.js"],"names":[],"mappings":"AAKA,eAAO,MAAM,uBAAuB,gFAoGnC,CAAC;AAeF,eAAO,MAAM,gCAAgC;;;CAiB5C,CAAA"}
1
+ {"version":3,"file":"menuUtilities.d.ts","sourceRoot":"","sources":["../../../../../src/utilities/menus/menuUtilities.js"],"names":[],"mappings":"AAKA,eAAO,MAAM,uBAAuB,gFAoGnC,CAAC;AAeF,eAAO,MAAM,gCAAgC;;;CA0B5C,CAAC"}