udp-react-enterprise-component-library 26.2.1-beta.2 → 26.2.1-beta.4

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 (72) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/UI/dataDisplay/FluentDataTable/FluentCell/index.d.ts.map +1 -1
  3. package/dist/UI/dataDisplay/FluentDataTable/FluentCell/index.js +7 -7
  4. package/dist/UI/dataDisplay/FluentDataTable/FluentCell/index.js.map +1 -1
  5. package/dist/UI/dataDisplay/FluentDataTable/FluentCell/index.mjs +2 -2
  6. package/dist/UI/dataDisplay/FluentDataTable/FluentCell/index.mjs.map +1 -1
  7. package/dist/UI/forms/PaymentReversalForm.js +4 -4
  8. package/dist/UI/forms/PaymentReversalForm.js.map +1 -1
  9. package/dist/UI/forms/PaymentReversalForm.mjs +4 -4
  10. package/dist/UI/forms/PaymentReversalForm.mjs.map +1 -1
  11. package/dist/UI/utilityDisplay/utilityHeader/PrimaryActionHeader.d.ts.map +1 -1
  12. package/dist/UI/utilityDisplay/utilityHeader/PrimaryActionHeader.js +68 -67
  13. package/dist/UI/utilityDisplay/utilityHeader/PrimaryActionHeader.js.map +1 -1
  14. package/dist/UI/utilityDisplay/utilityHeader/PrimaryActionHeader.mjs +4 -4
  15. package/dist/UI/utilityDisplay/utilityHeader/PrimaryActionHeader.mjs.map +1 -1
  16. package/dist/UI/widgets/ItemsWidgetCard.d.ts.map +1 -1
  17. package/dist/UI/widgets/ItemsWidgetCard.js +21 -21
  18. package/dist/UI/widgets/ItemsWidgetCard.js.map +1 -1
  19. package/dist/UI/widgets/ItemsWidgetCard.mjs +2 -2
  20. package/dist/UI/widgets/ItemsWidgetCard.mjs.map +1 -1
  21. package/dist/actions/ActionWrapper.d.ts.map +1 -1
  22. package/dist/actions/ActionWrapper.js +33 -41
  23. package/dist/actions/ActionWrapper.js.map +1 -1
  24. package/dist/actions/ActionWrapper.mjs +80 -117
  25. package/dist/actions/ActionWrapper.mjs.map +1 -1
  26. package/dist/dataBrowser/DataBrowserContainer.d.ts.map +1 -1
  27. package/dist/dataBrowser/DataBrowserContainer.js +35 -36
  28. package/dist/dataBrowser/DataBrowserContainer.js.map +1 -1
  29. package/dist/dataBrowser/DataBrowserContainer.mjs +2 -2
  30. package/dist/dataBrowser/DataBrowserContainer.mjs.map +1 -1
  31. package/dist/hooks/crudForeignKeyData.d.ts +11 -0
  32. package/dist/hooks/crudForeignKeyData.d.ts.map +1 -0
  33. package/dist/hooks/crudForeignKeyData.js +63 -0
  34. package/dist/hooks/crudForeignKeyData.js.map +1 -0
  35. package/dist/hooks/crudForeignKeyData.mjs +68 -0
  36. package/dist/hooks/crudForeignKeyData.mjs.map +1 -0
  37. package/dist/index.mjs +4 -4
  38. package/dist/inquiry/InquiryContainer.mjs +1 -1
  39. package/dist/maintenanceEngine/tableBrowser/TableColumnDefs.d.ts +1 -1
  40. package/dist/maintenanceEngine/tableBrowser/TableColumnDefs.d.ts.map +1 -1
  41. package/dist/maintenanceEngine/virtualBrowser/VirtualBrowser.d.ts.map +1 -1
  42. package/dist/maintenanceEngine/virtualBrowser/VirtualBrowser.js +21 -34
  43. package/dist/maintenanceEngine/virtualBrowser/VirtualBrowser.js.map +1 -1
  44. package/dist/maintenanceEngine/virtualBrowser/VirtualBrowser.mjs +2 -2
  45. package/dist/maintenanceEngine/virtualBrowser/VirtualBrowser.mjs.map +1 -1
  46. package/dist/shell/Shell.d.ts.map +1 -1
  47. package/dist/shell/Shell.js +32 -49
  48. package/dist/shell/Shell.js.map +1 -1
  49. package/dist/shell/Shell.mjs +9 -10
  50. package/dist/shell/Shell.mjs.map +1 -1
  51. package/dist/udp/fileImportMapping/FileImportConfigCard.mjs +1 -1
  52. package/dist/udp/fileImportMapping/FileImportMappingWizard.mjs +1 -1
  53. package/dist/udp/lookups/LookupCreationSheet.mjs +1 -1
  54. package/dist/udp/pages/UdpLookupManagementPage/UdpLookupManagementPage.mjs +1 -1
  55. package/dist/utilities/auth/UserErrorModal.d.ts +12 -0
  56. package/dist/utilities/auth/UserErrorModal.d.ts.map +1 -0
  57. package/dist/utilities/auth/UserErrorModal.js +16 -0
  58. package/dist/utilities/auth/UserErrorModal.js.map +1 -0
  59. package/dist/utilities/auth/UserErrorModal.mjs +50 -0
  60. package/dist/utilities/auth/UserErrorModal.mjs.map +1 -0
  61. package/dist/utilities/auth/UserProvider.d.ts.map +1 -1
  62. package/dist/utilities/auth/UserProvider.js +8 -8
  63. package/dist/utilities/auth/UserProvider.js.map +1 -1
  64. package/dist/utilities/auth/UserProvider.mjs +29 -49
  65. package/dist/utilities/auth/UserProvider.mjs.map +1 -1
  66. package/dist/utilities/tenant/TenantAccessDialog.mjs +1 -1
  67. package/dist/utilities/tenant/TenantProvider.d.ts.map +1 -1
  68. package/dist/utilities/tenant/TenantProvider.js +17 -13
  69. package/dist/utilities/tenant/TenantProvider.js.map +1 -1
  70. package/dist/utilities/tenant/TenantProvider.mjs +7 -7
  71. package/dist/utilities/tenant/TenantProvider.mjs.map +1 -1
  72. package/package.json +11 -3
@@ -1 +1 @@
1
- {"version":3,"file":"Shell.mjs","names":["React","useState","useEffect","useMemo","useCallback","Suspense","makeStyles","Drawer","useMediaQuery","useTheme","NavigationSidebar","SiteHeader","UtilityBar","useTranslation","FUIAppSwitcher","getMenuItemsRecursively","findHomeRouteSlug","clsx","UtilitySideBar","PropTypes","useUser","ActionProvider","PageActionWrapper","useInquiryStore","useWidgetRegistry","useBuildEnvironment","APP_RIBBON_SPACE","ChatBotProvider","UserProfileMenuWrapper","useMenuContext","Switch","UdpRoutes","useRouteRegistry","useShellVisibility","PageLoading","ErrorBoundary","MenuTypeEnums","Left_Menu","Application_Menu","Builders_Menu","Favorites_Menu","useStyles","theme","html","minHeight","display","flexDirection","flex","root","gridTemplateAreas","map","line","join","gridTemplateColumns","gridTemplateRows","header","gridArea","sidebar","content","position","zIndex","height","appRibbonSpace","overflowY","paper","width","breakpoints","up","props","drawerWidth","name","Shell","buildEnv","classes","ribbonSpace","children","userAvatar","appContent","leftMenu","appSelectorMenus","siteName","className","navRoot","hideToggle","useMockData","mockMenus","user","passedInUser","unityUrl","expander","sidebarTitle","navMenuHoverOn","secondExtended","toggleOne","toggleTwo","closePrimary","closeSecondary","panelExpanded","panelExpandedSecondary","setPanelExpanded","setPanelExpandedSecondary","breadCrumbAltLabelList","currentLocation","utilitySidebarResizable","utilitySidebarToggleOverride","onUtilitySidebarToggleExpandClick","hideLayout","getAccessToken","switcherData","selectedItem","switcherWidth","languages","projectSwitcherColor","widgets","getWidget","getWidgetProp","isValidWidget","isValidWidgetProp","appSwitcherHeader","hamburgerMenuAccessRole","hideLanguageSwitcher","subheader","hideHelpCenter","leftMenuLoading","contextUser","routeConfig","state","routeMap","currentPath","isPublicRoute","isPublic","appSwitcherMobile","setAppSwitcherMobile","appSwitcherDesktop","setAppSwitcherDesktop","i18n","inquiryTitle","title","menuContext","resolvedLeftMenu","homeRoute","length","resolvedAppSelectorMenus","providedLanguages","resolvedLanguages","Array","isArray","effectiveShellHidden","hasUser","Boolean","id","getMenuItems","menuTypeId","menus","menusToFilter","foundMenus","filter","menu","active","reduce","menuItemInstanceStructureViews","menuItems","mobile","handleAppSwitcher","type","bool","builderMenu","favoriteMenu","appMenu","hideAppMenu","roleNames","includes","changeLanguage","propTypes","array","string","number","oneOfType","arrayOf","node","isRequired","element","object","func","currentTenant"],"sources":["../../src/shell/Shell.jsx"],"sourcesContent":["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 { useWidgetRegistry } from './useWidgetRegistry';\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';\nimport ErrorBoundary from '../errorBoundary/ErrorBoundary';\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 widgets,\n /** @deprecated Use `widgets` prop instead */\n getWidget: getWidgetProp,\n /** @deprecated Use `widgets` prop instead */\n isValidWidget: isValidWidgetProp,\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 useWidgetRegistry({ widgets, getWidget: getWidgetProp, isValidWidget: isValidWidgetProp });\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 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 leftMenuLoading={leftMenuLoading || menuContext?.leftMenuLoading}\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 <ErrorBoundary>\n <PageActionWrapper>\n <Suspense fallback={<PageLoading />}>\n <Switch>\n {children}\n <UdpRoutes homeRoute={homeRoute} />\n </Switch>\n </Suspense>\n </PageActionWrapper>\n </ErrorBoundary>\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 leftMenuLoading={leftMenuLoading || menuContext?.leftMenuLoading}\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 /**\n * Map of widget identifiers to React.lazy components.\n * Internally merged with UdpPagesLazy. Preferred over getWidget/isValidWidget.\n */\n widgets: PropTypes.object,\n /** @deprecated Use `widgets` prop instead */\n getWidget: PropTypes.func,\n /** @deprecated Use `widgets` prop instead */\n isValidWidget: PropTypes.func,\n currentTenant: PropTypes.object,\n hamburgerMenuAccessRole: PropTypes.string\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"Shell.mjs","names":["React","lazy","useState","useEffect","useMemo","useCallback","Suspense","makeStyles","Drawer","useMediaQuery","useTheme","NavigationSidebar","SiteHeader","UtilityBar","useTranslation","getMenuItemsRecursively","findHomeRouteSlug","clsx","PropTypes","useUser","ActionProvider","PageActionWrapper","useInquiryStore","useWidgetRegistry","useBuildEnvironment","APP_RIBBON_SPACE","ChatBotProvider","UserProfileMenuWrapper","useMenuContext","Switch","UdpRoutes","useRouteRegistry","useShellVisibility","PageLoading","ErrorBoundary","FUIAppSwitcher","UtilitySideBar","then","m","default","MenuTypeEnums","Left_Menu","Application_Menu","Builders_Menu","Favorites_Menu","useStyles","theme","html","minHeight","display","flexDirection","flex","root","gridTemplateAreas","map","line","join","gridTemplateColumns","gridTemplateRows","header","gridArea","sidebar","content","position","zIndex","height","appRibbonSpace","overflowY","paper","width","breakpoints","up","props","drawerWidth","name","Shell","buildEnv","classes","ribbonSpace","children","userAvatar","appContent","leftMenu","appSelectorMenus","siteName","className","navRoot","hideToggle","useMockData","mockMenus","user","passedInUser","unityUrl","expander","sidebarTitle","navMenuHoverOn","secondExtended","toggleOne","toggleTwo","closePrimary","closeSecondary","panelExpanded","panelExpandedSecondary","setPanelExpanded","setPanelExpandedSecondary","breadCrumbAltLabelList","currentLocation","utilitySidebarResizable","utilitySidebarToggleOverride","onUtilitySidebarToggleExpandClick","hideLayout","getAccessToken","switcherData","selectedItem","switcherWidth","languages","projectSwitcherColor","widgets","getWidget","getWidgetProp","isValidWidget","isValidWidgetProp","appSwitcherHeader","hamburgerMenuAccessRole","hideLanguageSwitcher","subheader","hideHelpCenter","leftMenuLoading","contextUser","routeConfig","state","routeMap","currentPath","isPublicRoute","isPublic","appSwitcherMobile","setAppSwitcherMobile","appSwitcherDesktop","setAppSwitcherDesktop","i18n","inquiryTitle","title","menuContext","resolvedLeftMenu","homeRoute","length","resolvedAppSelectorMenus","providedLanguages","resolvedLanguages","Array","isArray","effectiveShellHidden","hasUser","Boolean","id","getMenuItems","menuTypeId","menus","menusToFilter","foundMenus","filter","menu","active","reduce","menuItemInstanceStructureViews","menuItems","mobile","handleAppSwitcher","type","bool","builderMenu","favoriteMenu","appMenu","hideAppMenu","roleNames","includes","changeLanguage","propTypes","array","string","number","oneOfType","arrayOf","node","isRequired","element","object","func","currentTenant"],"sources":["../../src/shell/Shell.jsx"],"sourcesContent":["import React, { lazy, useState, useEffect, useMemo, useCallback, Suspense } 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 { getMenuItemsRecursively, findHomeRouteSlug } from '../utilities/menus/menuUtilities';\nimport clsx from 'clsx';\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 { useWidgetRegistry } from './useWidgetRegistry';\n\nimport { useBuildEnvironment, APP_RIBBON_SPACE } 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';\nimport ErrorBoundary from '../errorBoundary/ErrorBoundary';\n\n// Lazy-load components that only render in response to user interaction or\n// optional props, so they don't get pulled into the Shell entry chunk.\nconst FUIAppSwitcher = lazy(() => import('./ui/appSwitcher/FUIAppSwitcher'));\nconst UtilitySideBar = lazy(() =>\n import('../UI/utilityDisplay/UtilitySideBar').then((m) => ({\n default: m.UtilitySideBar,\n })),\n);\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'].map((line) => `\"${line}\"`).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 widgets,\n /** @deprecated Use `widgets` prop instead */\n getWidget: getWidgetProp,\n /** @deprecated Use `widgets` prop instead */\n isValidWidget: isValidWidgetProp,\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 useWidgetRegistry({ widgets, getWidget: getWidgetProp, isValidWidget: isValidWidgetProp });\n const routeConfig = useRouteRegistry((state) => state.routeMap[state.currentPath]);\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 = appSelectorMenus ?? menuContext?.appSelectorMenus;\n const providedLanguages = languages ?? menuContext?.languages;\n const resolvedLanguages = Array.isArray(providedLanguages) ? providedLanguages : [];\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 [...menuItemInstanceStructureViews, ...menu.menuItemInstanceStructureViews];\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(MenuTypeEnums.Builders_Menu, resolvedAppSelectorMenus);\n return getMenuItemsRecursively(menuItems, true, user, getAccessToken);\n }, [getMenuItems, user, resolvedAppSelectorMenus, getAccessToken]);\n\n const favoriteMenu = useMemo(() => {\n const menuItems = getMenuItems(MenuTypeEnums.Favorites_Menu, resolvedAppSelectorMenus);\n return getMenuItemsRecursively(menuItems, true, user, getAccessToken);\n }, [getMenuItems, user, resolvedAppSelectorMenus, getAccessToken]);\n\n const appMenu = useMemo(() => {\n const menuItems = getMenuItems(MenuTypeEnums.Application_Menu, resolvedAppSelectorMenus);\n return getMenuItemsRecursively(menuItems, true, user, getAccessToken);\n }, [getMenuItems, user, resolvedAppSelectorMenus, getAccessToken]);\n\n const hideAppMenu = useMemo(\n () =>\n !resolvedAppSelectorMenus ||\n (hamburgerMenuAccessRole && !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 leftMenuLoading={leftMenuLoading || menuContext?.leftMenuLoading}\n />\n )}\n {expander && (\n <div>\n <Suspense fallback={null}>\n <UtilitySideBar\n title={inquiryTitle || sidebarTitle}\n resizable={utilitySidebarResizable}\n utilitySidebarToggleOverride={utilitySidebarToggleOverride}\n onUtilitySidebarToggleExpandClick={onUtilitySidebarToggleExpandClick}\n sidebarHidden={effectiveShellHidden}\n {...props}\n />\n </Suspense>\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 <ErrorBoundary>\n <PageActionWrapper>\n <Suspense fallback={<PageLoading />}>\n <Switch>\n {children}\n <UdpRoutes homeRoute={homeRoute} />\n </Switch>\n </Suspense>\n </PageActionWrapper>\n </ErrorBoundary>\n </div>\n <Drawer\n variant=\"temporary\"\n anchor=\"left\"\n open={appSwitcherDesktop}\n classes={!mobile ? {} : !resolvedAppSelectorMenus ? {} : { paper: classes.paper }}\n onClose={() => handleAppSwitcher('desktop', false)}\n >\n {mobile && resolvedAppSelectorMenus && (\n <Suspense fallback={null}>\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 </Suspense>\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 leftMenuLoading={leftMenuLoading || menuContext?.leftMenuLoading}\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 <Suspense fallback={null}>\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 </Suspense>\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([PropTypes.arrayOf(PropTypes.node), PropTypes.node]).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([PropTypes.string, PropTypes.element, PropTypes.node]),\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 /**\n * Map of widget identifiers to React.lazy components.\n * Internally merged with UdpPagesLazy. Preferred over getWidget/isValidWidget.\n */\n widgets: PropTypes.object,\n /** @deprecated Use `widgets` prop instead */\n getWidget: PropTypes.func,\n /** @deprecated Use `widgets` prop instead */\n isValidWidget: PropTypes.func,\n currentTenant: PropTypes.object,\n hamburgerMenuAccessRole: PropTypes.string,\n};\n"],"mappings":"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"}
@@ -1,8 +1,8 @@
1
- import { UdpText } from "../../UI/fluent-web-components/UdpText.mjs";
2
1
  import { UdpDetailListItem } from "../../UI/dataDisplay/UdpDetailListItem.mjs";
3
2
  import { UdpCard } from "../../UI/fluent-web-components/UdpCard.mjs";
4
3
  import { UdpDivider } from "../../UI/fluent-web-components/UdpDivider.mjs";
5
4
  import { UdpIcon } from "../../UI/fluent-web-components/UdpIcon.mjs";
5
+ import { UdpText } from "../../UI/fluent-web-components/UdpText.mjs";
6
6
  import React, { useMemo, useState } from "react";
7
7
  //#region src/udp/fileImportMapping/FileImportConfigCard.jsx
8
8
  const FileImportConfigCard = (props) => {
@@ -10,13 +10,13 @@ import { usePromotedMethodEntity } from "../../hooks/usePromotedMethodEntity.mjs
10
10
  import { executeQueryAdHoc } from "../utilities/methodUtils.mjs";
11
11
  import { UdpButton } from "../../UI/fluent-web-components/UdpButton.mjs";
12
12
  import { UdpAutocomplete } from "../../UI/fluent-web-components/UdpAutocomplete.mjs";
13
- import { UdpText } from "../../UI/fluent-web-components/UdpText.mjs";
14
13
  import { UdpCard } from "../../UI/fluent-web-components/UdpCard.mjs";
15
14
  import { UdpFileInput } from "../../UI/fluent-web-components/UdpFileInput.mjs";
16
15
  import { AmbientStepper } from "../../UI/inputs/menus/AmbientStepper/AmbientStepper.mjs";
17
16
  import { UdpDivider } from "../../UI/fluent-web-components/UdpDivider.mjs";
18
17
  import { UdpDropdown } from "../../UI/fluent-web-components/UdpDropdown.mjs";
19
18
  import { UdpIcon } from "../../UI/fluent-web-components/UdpIcon.mjs";
19
+ import { UdpText } from "../../UI/fluent-web-components/UdpText.mjs";
20
20
  import { UdpTextInput } from "../../UI/fluent-web-components/UdpTextInput.mjs";
21
21
  import { handleExcelFileUpload, handleJsonFileUpload, handleTextFileUpload } from "./fileUtils.mjs";
22
22
  import { FileImportConfigCard } from "./FileImportConfigCard.mjs";
@@ -1,5 +1,4 @@
1
1
  import { UdpButton } from "../../UI/fluent-web-components/UdpButton.mjs";
2
- import { UdpText } from "../../UI/fluent-web-components/UdpText.mjs";
3
2
  import { UdpCard } from "../../UI/fluent-web-components/UdpCard.mjs";
4
3
  import { UdpDrawer } from "../../UI/fluent-web-components/UdpDrawer.mjs";
5
4
  import { UdpBadge } from "../../UI/fluent-web-components/UdpBadge.mjs";
@@ -7,6 +6,7 @@ import { UdpDropdown } from "../../UI/fluent-web-components/UdpDropdown.mjs";
7
6
  import { UdpFlexbox } from "../../UI/fluent-web-components/UdpFlexbox.mjs";
8
7
  import { UdpIconButton } from "../../UI/fluent-web-components/UdpIconButton.mjs";
9
8
  import { UdpMessageBar } from "../../UI/fluent-web-components/UdpMessageBar.mjs";
9
+ import { UdpText } from "../../UI/fluent-web-components/UdpText.mjs";
10
10
  import { UdpTextInput } from "../../UI/fluent-web-components/UdpTextInput.mjs";
11
11
  import React, { useCallback, useEffect, useMemo, useState } from "react";
12
12
  import { LookupColumnTypeId, LookupTypeId, isCatalogModelObject } from "udp-stencil-component-library";
@@ -4,8 +4,8 @@ import { useAxiosGet } from "../../../utilities/useAxiosGet.mjs";
4
4
  import { useApiCatalog } from "../../../hooks/useApiCatalog.mjs";
5
5
  import { UdpButton } from "../../../UI/fluent-web-components/UdpButton.mjs";
6
6
  import { UdpDialog } from "../../../UI/fluent-web-components/UdpDialog.mjs";
7
- import { UdpText } from "../../../UI/fluent-web-components/UdpText.mjs";
8
7
  import { ClientSideUdpGrid } from "../../../UI/templates/newGrid/ClientSideUdpGrid.mjs";
8
+ import { UdpText } from "../../../UI/fluent-web-components/UdpText.mjs";
9
9
  import { useLookups } from "../../lookups/useLookups.mjs";
10
10
  import LookupCreationSheet from "../../lookups/LookupCreationSheet.mjs";
11
11
  import React, { useCallback, useMemo, useState } from "react";
@@ -0,0 +1,12 @@
1
+ import React from 'react';
2
+ /**
3
+ * Error modal shown when fetching the authed user fails. Extracted into its
4
+ * own module so the stencil-based UdpDialog/UdpText/UdpButton — which pull in
5
+ * the full stencil web-component graph (~574 KB udp-fluent-icon, etc.) — only
6
+ * load when this rare error path renders, not on every initial app load.
7
+ */
8
+ declare const UserErrorModal: ({ errorMessage }: {
9
+ errorMessage: any;
10
+ }) => React.JSX.Element;
11
+ export default UserErrorModal;
12
+ //# sourceMappingURL=UserErrorModal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UserErrorModal.d.ts","sourceRoot":"","sources":["../../../src/utilities/auth/UserErrorModal.jsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAM1B;;;;;GAKG;AACH,QAAA,MAAM,cAAc;;uBAenB,CAAC;AAEF,eAAe,cAAc,CAAC"}
@@ -0,0 +1,16 @@
1
+ import React from 'react';
2
+ import { UdpDialog } from '../../UI/fluent-web-components/UdpDialog';
3
+ import { UdpText } from '../../UI/fluent-web-components/UdpText';
4
+ import { UdpButton } from '../../UI/fluent-web-components/UdpButton';
5
+ import { getSignInAuthProvider } from './signInAuthProvider';
6
+ /**
7
+ * Error modal shown when fetching the authed user fails. Extracted into its
8
+ * own module so the stencil-based UdpDialog/UdpText/UdpButton — which pull in
9
+ * the full stencil web-component graph (~574 KB udp-fluent-icon, etc.) — only
10
+ * load when this rare error path renders, not on every initial app load.
11
+ */
12
+ const UserErrorModal = ({ errorMessage }) => (React.createElement(UdpDialog, { open: true, showHeaderCloseButton: false }, React.createElement(UdpText, { variant: "subtitle2" }, errorMessage ? errorMessage : 'An unexpected error has ocurred.'), React.createElement(UdpButton, { slot: "action", appearance: "primary", onClick: () => {
13
+ getSignInAuthProvider().logoutRedirect();
14
+ } }, "Logou")));
15
+ export default UserErrorModal;
16
+ //# sourceMappingURL=UserErrorModal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UserErrorModal.js","sourceRoot":"","sources":["../../../src/utilities/auth/UserErrorModal.jsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,SAAS,EAAE,MAAM,0CAA0C,CAAC;AACrE,OAAO,EAAE,OAAO,EAAE,MAAM,wCAAwC,CAAC;AACjE,OAAO,EAAE,SAAS,EAAE,MAAM,0CAA0C,CAAC;AACrE,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAE7D;;;;;GAKG;AACH,MAAM,cAAc,GAAG,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC,CAC3C,oBAAC,SAAS,IAAC,IAAI,QAAC,qBAAqB,EAAE,KAAK,IAC1C,oBAAC,OAAO,IAAC,OAAO,EAAC,WAAW,IACzB,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,kCAAkC,CACzD,EACV,oBAAC,SAAS,IACR,IAAI,EAAC,QAAQ,EACb,UAAU,EAAC,SAAS,EACpB,OAAO,EAAE,GAAG,EAAE,CAAC;QACb,qBAAqB,EAAE,CAAC,cAAc,EAAE,CAAC;IAAA,CAC1C,YAGS,CACF,CACb,CAAC;AAEF,eAAe,cAAc,CAAC"}
@@ -0,0 +1,50 @@
1
+ import { getSignInAuthProvider } from "./signInAuthProvider.mjs";
2
+ import { UdpButton } from "../../UI/fluent-web-components/UdpButton.mjs";
3
+ import { UdpDialog } from "../../UI/fluent-web-components/UdpDialog.mjs";
4
+ import { UdpText } from "../../UI/fluent-web-components/UdpText.mjs";
5
+ import { c } from "react-compiler-runtime";
6
+ import React from "react";
7
+ //#region src/utilities/auth/UserErrorModal.jsx
8
+ /**
9
+ * Error modal shown when fetching the authed user fails. Extracted into its
10
+ * own module so the stencil-based UdpDialog/UdpText/UdpButton — which pull in
11
+ * the full stencil web-component graph (~574 KB udp-fluent-icon, etc.) — only
12
+ * load when this rare error path renders, not on every initial app load.
13
+ */
14
+ const UserErrorModal = (t0) => {
15
+ const $ = c(5);
16
+ const { errorMessage } = t0;
17
+ const t1 = errorMessage ? errorMessage : "An unexpected error has ocurred.";
18
+ let t2;
19
+ if ($[0] !== t1) {
20
+ t2 = /* @__PURE__ */ React.createElement(UdpText, { variant: "subtitle2" }, t1);
21
+ $[0] = t1;
22
+ $[1] = t2;
23
+ } else t2 = $[1];
24
+ let t3;
25
+ if ($[2] === Symbol.for("react.memo_cache_sentinel")) {
26
+ t3 = /* @__PURE__ */ React.createElement(UdpButton, {
27
+ slot: "action",
28
+ appearance: "primary",
29
+ onClick: _temp
30
+ }, "Logout");
31
+ $[2] = t3;
32
+ } else t3 = $[2];
33
+ let t4;
34
+ if ($[3] !== t2) {
35
+ t4 = /* @__PURE__ */ React.createElement(UdpDialog, {
36
+ open: true,
37
+ showHeaderCloseButton: false
38
+ }, t2, t3);
39
+ $[3] = t2;
40
+ $[4] = t4;
41
+ } else t4 = $[4];
42
+ return t4;
43
+ };
44
+ function _temp() {
45
+ getSignInAuthProvider().logoutRedirect();
46
+ }
47
+ //#endregion
48
+ export { UserErrorModal as default };
49
+
50
+ //# sourceMappingURL=UserErrorModal.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UserErrorModal.mjs","names":["React","UdpDialog","UdpText","UdpButton","getSignInAuthProvider","UserErrorModal","t0","$","_c","errorMessage","t1","t2","t3","Symbol","for","_temp","t4","logoutRedirect"],"sources":["../../../src/utilities/auth/UserErrorModal.jsx"],"sourcesContent":["import React from 'react';\nimport { UdpDialog } from '../../UI/fluent-web-components/UdpDialog';\nimport { UdpText } from '../../UI/fluent-web-components/UdpText';\nimport { UdpButton } from '../../UI/fluent-web-components/UdpButton';\nimport { getSignInAuthProvider } from './signInAuthProvider';\n\n/**\n * Error modal shown when fetching the authed user fails. Extracted into its\n * own module so the stencil-based UdpDialog/UdpText/UdpButton — which pull in\n * the full stencil web-component graph (~574 KB udp-fluent-icon, etc.) — only\n * load when this rare error path renders, not on every initial app load.\n */\nconst UserErrorModal = ({ errorMessage }) => (\n <UdpDialog open showHeaderCloseButton={false}>\n <UdpText variant=\"subtitle2\">\n {errorMessage ? errorMessage : 'An unexpected error has ocurred.'}\n </UdpText>\n <UdpButton\n slot=\"action\"\n appearance=\"primary\"\n onClick={() => {\n getSignInAuthProvider().logoutRedirect();\n }}\n >\n Logout\n </UdpButton>\n </UdpDialog>\n);\n\nexport default UserErrorModal;\n"],"mappings":";;;;;;;;;;;;;AAYA,MAAMK,kBAAiBC,OAAA;CAAA,MAAAC,IAAAC,EAAA,EAAA;CAAC,MAAA,EAAAC,iBAAAH;CAGjB,MAAAI,KAAAD,eAAAA,eAAA;CAAgE,IAAAE;AAAA,KAAAJ,EAAA,OAAAG,IAAA;AADnEC,OAAA,sBAAA,cAAC,SAAD,EAAiB,SAAA,aAEP,EADPD,GACO;AAAAH,IAAA,KAAAG;AAAAH,IAAA,KAAAI;OAAAA,MAAAJ,EAAA;CAAA,IAAAK;AAAA,KAAAL,EAAA,OAAAM,OAAAC,IAAA,4BAAA,EAAA;AACVF,OAAA,sBAAA,cAAC,WAAD;GACO,MAAA;GACM,YAAA;GACF,SAAAG;GAKC,EAFX,SAEW;AAAAR,IAAA,KAAAK;OAAAA,MAAAL,EAAA;CAAA,IAAAS;AAAA,KAAAT,EAAA,OAAAI,IAAA;AAZdK,OAAA,sBAAA,cAAC,WAAD;GAAW,MAAA;GAA4B,uBAAA;GAa3B,EAZVL,IAGAC,GASU;AAAAL,IAAA,KAAAI;AAAAJ,IAAA,KAAAS;OAAAA,MAAAT,EAAA;AAAA,QAbZS;;AADqB,SAAAD,QAAA;AASfX,wBAAuB,CAAAa,gBAAiB"}
@@ -1 +1 @@
1
- {"version":3,"file":"UserProvider.d.ts","sourceRoot":"","sources":["../../../src/utilities/auth/UserProvider.jsx"],"names":[],"mappings":"AAAA,OAAO,KAAoD,MAAM,OAAO,CAAC;AAezE,QAAA,MAAM,YAAY,mCA2FjB,CAAC;AAEF,eAAe,YAAY,CAAC"}
1
+ {"version":3,"file":"UserProvider.d.ts","sourceRoot":"","sources":["../../../src/utilities/auth/UserProvider.jsx"],"names":[],"mappings":"AAAA,OAAO,KAAoE,MAAM,OAAO,CAAC;AAkBzF,QAAA,MAAM,YAAY,mCA+EjB,CAAC;AAEF,eAAe,YAAY,CAAC"}
@@ -1,4 +1,4 @@
1
- import React, { useCallback, useEffect, useState, useMemo } from 'react';
1
+ import React, { lazy, Suspense, useCallback, useEffect, useState, useMemo } from 'react';
2
2
  import { keepPreviousData } from '@tanstack/react-query';
3
3
  import { UserContext, UserDispatchContext } from './internal';
4
4
  import { User } from './user';
@@ -9,9 +9,11 @@ import { useApiQuery } from '../useApiQuery';
9
9
  import { TenantProvider } from '../tenant/TenantProvider';
10
10
  import { ConfigService } from '../../configService';
11
11
  import { getSignInAuthProvider } from './signInAuthProvider';
12
- import { UdpDialog } from '../../UI/fluent-web-components/UdpDialog';
13
- import { UdpText } from '../../UI/fluent-web-components/UdpText';
14
- import { UdpButton } from '../../UI/fluent-web-components/UdpButton';
12
+ // Lazy-load the error modal — it only renders when the user-info API call
13
+ // fails, which is rare. Statically importing UdpDialog/UdpText/UdpButton drags
14
+ // the entire stencil web-component graph (incl. ~574 KB udp-fluent-icon) into
15
+ // the entry chunk for every user.
16
+ const UserErrorModal = lazy(() => import('./UserErrorModal'));
15
17
  const UserProvider = (props) => {
16
18
  const { children, isWhiteListed, doNotWaitForTenant = false, unityTenantId } = props;
17
19
  const activeAccount = useAccount();
@@ -28,7 +30,7 @@ const UserProvider = (props) => {
28
30
  const unityUserUrl = activeTenantId
29
31
  ? `user/unityuser?tenantId=${encodeURIComponent(activeTenantId)}`
30
32
  : 'user/unityuser';
31
- const { data: userInfo, error: userError, isLoading: userInfoLoading } = useApiQuery(ConfigService.securityV2ApiUrl, unityUserUrl, {}, {
33
+ const { data: userInfo, error: userError, isLoading: userInfoLoading, } = useApiQuery(ConfigService.securityV2ApiUrl, unityUserUrl, {}, {
32
34
  enabled: !!activeAccount,
33
35
  staleTime: 0,
34
36
  placeholderData: keepPreviousData,
@@ -55,9 +57,7 @@ const UserProvider = (props) => {
55
57
  const loadingValue = Boolean(activeAccount) && !user && !userError && userInfoLoading;
56
58
  const shouldBlockForUser = loadingValue && !isWhiteListed;
57
59
  if (isErrorModalOpen) {
58
- return (React.createElement(UdpDialog, { open: true, showHeaderCloseButton: false }, React.createElement(UdpText, { variant: "subtitle2" }, errorMessage ? errorMessage : 'An unexpected error has ocurred.'), React.createElement(UdpButton, { slot: "action", appearance: "primary", onClick: () => {
59
- getSignInAuthProvider().logoutRedirect();
60
- } }, "Logou")));
60
+ return (React.createElement(Suspense, { fallback: React.createElement(LoadingIndicator, null) }, React.createElement(UserErrorModal, { errorMessage: errorMessage })));
61
61
  }
62
62
  if (!doNotWaitForTenant && shouldBlockForUser) {
63
63
  return React.createElement(LoadingIndicator, null);
@@ -1 +1 @@
1
- {"version":3,"file":"UserProvider.js","sourceRoot":"","sources":["../../../src/utilities/auth/UserProvider.jsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"UserProvider.js","sourceRoot":"","sources":["../../../src/utilities/auth/UserProvider.jsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AACzF,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAC9D,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AACrE,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAC9E,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAE7D,4EAA0E;AAC1E,+EAA+E;AAC/E,8EAA8E;AAC9E,kCAAkC;AAClC,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,CAAC;AAE9D,MAAM,YAAY,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC;IAC9B,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,kBAAkB,GAAG,KAAK,EAAE,aAAa,EAAE,GAAG,KAAK,CAAC;IAErF,MAAM,aAAa,GAAG,UAAU,EAAE,CAAC;IAEnC,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,CAAC,GAAG,EAAE,CAAC;QACzD,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC3D,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACzC,IAAI,SAAS;YAAE,OAAO,SAAS,CAAC;QAEhC,MAAM,YAAY,GAAG,eAAe,EAAE,CAAC;QACvC,IAAI,YAAY;YAAE,OAAO,YAAY,CAAC;QAEtC,OAAO,aAAa,IAAI,IAAI,CAAC;IAAA,CAC9B,CAAC,CAAC;IAEH,MAAM,YAAY,GAAG,cAAc;QACjC,CAAC,CAAC,2BAA2B,kBAAkB,CAAC,cAAc,CAAC,EAAE;QACjE,CAAC,CAAC,gBAAgB,CAAC;IAErB,MAAM,EACJ,IAAI,EAAE,QAAQ,EACd,KAAK,EAAE,SAAS,EAChB,SAAS,EAAE,eAAe,GAC3B,GAAG,WAAW,CACb,aAAa,CAAC,gBAAgB,EAC9B,YAAY,EACZ,EAAE,EACF;QACE,OAAO,EAAE,CAAC,CAAC,aAAa;QACxB,SAAS,EAAE,CAAC;QACZ,eAAe,EAAE,gBAAgB;KAClC,CACF,CAAC;IAEF,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAE/E,MAAM,gBAAgB,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;IAC5C,MAAM,YAAY,GAAG,SAAS,CAAC,CAAC,CAAC,+CAA+C,CAAC,CAAC,CAAC,EAAE,CAAC;IAEtF,SAAS,CAAC,GAAG,EAAE,CAAC;QACd,IAAI,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,MAAM;YAAE,cAAc,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAEjE,IAAI,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,eAAe,KAAI,CAAC,cAAc,EAAE,CAAC;YAC7C,WAAW,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YAClC,iBAAiB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAC1C,CAAC;IAAA,CACF,EAAE,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC;IAE3B,MAAM,YAAY,GAAG,WAAW,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;QAChD,IAAI,CAAC,WAAW;YAAE,OAAO;QACzB,WAAW,CAAC,WAAW,CAAC,CAAC;QACzB,iBAAiB,CAAC,WAAW,CAAC,CAAC;IAAA,CAChC,EAAE,EAAE,CAAC,CAAC;IAEP,6EAA2E;IAC3E,gFAAgF;IAChF,MAAM,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,SAAS,IAAI,eAAe,CAAC;IACtF,MAAM,kBAAkB,GAAG,YAAY,IAAI,CAAC,aAAa,CAAC;IAE1D,IAAI,gBAAgB,EAAE,CAAC;QACrB,OAAO,CACL,oBAAC,QAAQ,IAAC,QAAQ,EAAE,oBAAC,gBAAgB,OAAG,IACtC,oBAAC,cAAc,IAAC,YAAY,EAAE,YAAY,GAAI,CACrC,CACZ,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,kBAAkB,IAAI,kBAAkB,EAAE,CAAC;QAC9C,OAAO,oBAAC,gBAAgB,OAAG,CAAC;IAC9B,CAAC;IAED,OAAO,CACL,oBAAC,WAAW,CAAC,QAAQ,IAAC,KAAK,EAAE,IAAI,IAC/B,oBAAC,mBAAmB,CAAC,QAAQ,IAAC,KAAK,EAAE,EAAE,YAAY,EAAE,IACnD,oBAAC,cAAc,QAAE,QAAQ,CAAkB,CACd,CACV,CACxB,CAAC;AAAA,CACH,CAAC;AAEF,eAAe,YAAY,CAAC"}
@@ -1,21 +1,18 @@
1
1
  import { ConfigService } from "../../configService/index.mjs";
2
- import { getSignInAuthProvider } from "./signInAuthProvider.mjs";
3
2
  import { UserContext, UserDispatchContext } from "./internal.mjs";
4
3
  import { getStoredTenant, storeTenant } from "../storage/UnitySessionStorage.mjs";
5
4
  import { useApiQuery } from "../useApiQuery.mjs";
6
- import { UdpButton } from "../../UI/fluent-web-components/UdpButton.mjs";
7
5
  import { LoadingIndicator } from "../../UI/loading/LoadingIndicator/LoadingIndicator.mjs";
8
- import { UdpDialog } from "../../UI/fluent-web-components/UdpDialog.mjs";
9
6
  import { TenantProvider } from "../tenant/TenantProvider.mjs";
10
7
  import { User } from "./user.mjs";
11
- import { UdpText } from "../../UI/fluent-web-components/UdpText.mjs";
12
8
  import { c } from "react-compiler-runtime";
13
- import React, { useEffect, useState } from "react";
9
+ import React, { Suspense, lazy, useEffect, useState } from "react";
14
10
  import { keepPreviousData } from "@tanstack/react-query";
15
11
  import { useAccount } from "@azure/msal-react";
16
12
  //#region src/utilities/auth/UserProvider.jsx
13
+ const UserErrorModal = lazy(() => import("./UserErrorModal.mjs"));
17
14
  const UserProvider = (props) => {
18
- const $ = c(24);
15
+ const $ = c(22);
19
16
  const { children, isWhiteListed, doNotWaitForTenant: t0, unityTenantId } = props;
20
17
  const doNotWaitForTenant = t0 === void 0 ? false : t0;
21
18
  const activeAccount = useAccount();
@@ -91,64 +88,47 @@ const UserProvider = (props) => {
91
88
  const changeTenant = t8;
92
89
  const shouldBlockForUser = Boolean(activeAccount) && !user && !userError && userInfoLoading && !isWhiteListed;
93
90
  if (isErrorModalOpen) {
94
- const t9 = errorMessage ? errorMessage : "An unexpected error has ocurred.";
95
- let t10;
96
- if ($[12] !== t9) {
97
- t10 = /* @__PURE__ */ React.createElement(UdpText, { variant: "subtitle2" }, t9);
91
+ let t9;
92
+ if ($[12] === Symbol.for("react.memo_cache_sentinel")) {
93
+ t9 = /* @__PURE__ */ React.createElement(LoadingIndicator, null);
98
94
  $[12] = t9;
99
- $[13] = t10;
100
- } else t10 = $[13];
101
- let t11;
102
- if ($[14] === Symbol.for("react.memo_cache_sentinel")) {
103
- t11 = /* @__PURE__ */ React.createElement(UdpButton, {
104
- slot: "action",
105
- appearance: "primary",
106
- onClick: _temp
107
- }, "Logout");
108
- $[14] = t11;
109
- } else t11 = $[14];
110
- let t12;
111
- if ($[15] !== t10) {
112
- t12 = /* @__PURE__ */ React.createElement(UdpDialog, {
113
- open: true,
114
- showHeaderCloseButton: false
115
- }, t10, t11);
116
- $[15] = t10;
117
- $[16] = t12;
118
- } else t12 = $[16];
119
- return t12;
95
+ } else t9 = $[12];
96
+ let t10;
97
+ if ($[13] !== errorMessage) {
98
+ t10 = /* @__PURE__ */ React.createElement(Suspense, { fallback: t9 }, /* @__PURE__ */ React.createElement(UserErrorModal, { errorMessage }));
99
+ $[13] = errorMessage;
100
+ $[14] = t10;
101
+ } else t10 = $[14];
102
+ return t10;
120
103
  }
121
104
  if (!doNotWaitForTenant && shouldBlockForUser) {
122
105
  let t9;
123
- if ($[17] === Symbol.for("react.memo_cache_sentinel")) {
106
+ if ($[15] === Symbol.for("react.memo_cache_sentinel")) {
124
107
  t9 = /* @__PURE__ */ React.createElement(LoadingIndicator, null);
125
- $[17] = t9;
126
- } else t9 = $[17];
108
+ $[15] = t9;
109
+ } else t9 = $[15];
127
110
  return t9;
128
111
  }
129
112
  let t9;
130
- if ($[18] === Symbol.for("react.memo_cache_sentinel")) {
113
+ if ($[16] === Symbol.for("react.memo_cache_sentinel")) {
131
114
  t9 = { changeTenant };
132
- $[18] = t9;
133
- } else t9 = $[18];
115
+ $[16] = t9;
116
+ } else t9 = $[16];
134
117
  let t10;
135
- if ($[19] !== children) {
118
+ if ($[17] !== children) {
136
119
  t10 = /* @__PURE__ */ React.createElement(UserDispatchContext.Provider, { value: t9 }, /* @__PURE__ */ React.createElement(TenantProvider, null, children));
137
- $[19] = children;
138
- $[20] = t10;
139
- } else t10 = $[20];
120
+ $[17] = children;
121
+ $[18] = t10;
122
+ } else t10 = $[18];
140
123
  let t11;
141
- if ($[21] !== t10 || $[22] !== user) {
124
+ if ($[19] !== t10 || $[20] !== user) {
142
125
  t11 = /* @__PURE__ */ React.createElement(UserContext.Provider, { value: user }, t10);
143
- $[21] = t10;
144
- $[22] = user;
145
- $[23] = t11;
146
- } else t11 = $[23];
126
+ $[19] = t10;
127
+ $[20] = user;
128
+ $[21] = t11;
129
+ } else t11 = $[21];
147
130
  return t11;
148
131
  };
149
- function _temp() {
150
- getSignInAuthProvider().logoutRedirect();
151
- }
152
132
  //#endregion
153
133
  export { UserProvider as default };
154
134
 
@@ -1 +1 @@
1
- {"version":3,"file":"UserProvider.mjs","names":["React","useCallback","useEffect","useState","useMemo","keepPreviousData","UserContext","UserDispatchContext","User","LoadingIndicator","useAccount","storeTenant","getStoredTenant","useApiQuery","TenantProvider","ConfigService","getSignInAuthProvider","UdpDialog","UdpText","UdpButton","UserProvider","props","$","_c","children","isWhiteListed","doNotWaitForTenant","t0","unityTenantId","undefined","activeAccount","t1","params","URLSearchParams","window","location","search","urlTenant","get","storedTenant","activeTenantId","setActiveTenantId","unityUserUrl","encodeURIComponent","t2","Symbol","for","t3","t4","enabled","staleTime","placeholderData","data","userInfo","error","userError","isLoading","userInfoLoading","securityV2ApiUrl","t5","user","isErrorModalOpen","Boolean","errorMessage","t6","t7","userId","sessionStorage","setItem","currentTenantId","t8","newTenantId","changeTenant","loadingValue","shouldBlockForUser","t9","t10","t11","_temp","t12","logoutRedirect"],"sources":["../../../src/utilities/auth/UserProvider.jsx"],"sourcesContent":["import React, { useCallback, useEffect, useState, useMemo } from 'react';\nimport { keepPreviousData } from '@tanstack/react-query';\nimport { UserContext, UserDispatchContext } from './internal';\nimport { User } from './user';\nimport { LoadingIndicator } from '../../UI/loading/LoadingIndicator';\nimport { useAccount } from '@azure/msal-react';\nimport { storeTenant, getStoredTenant } from '../storage/UnitySessionStorage';\nimport { useApiQuery } from '../useApiQuery';\nimport { TenantProvider } from '../tenant/TenantProvider';\nimport { ConfigService } from '../../configService';\nimport { getSignInAuthProvider } from './signInAuthProvider';\nimport { UdpDialog } from '../../UI/fluent-web-components/UdpDialog';\nimport { UdpText } from '../../UI/fluent-web-components/UdpText';\nimport { UdpButton } from '../../UI/fluent-web-components/UdpButton';\n\nconst UserProvider = (props) => {\n const {\n children,\n isWhiteListed,\n doNotWaitForTenant = false,\n unityTenantId\n } = props;\n\n const activeAccount = useAccount();\n\n const [activeTenantId, setActiveTenantId] = useState(() => {\n const params = new URLSearchParams(window.location.search);\n const urlTenant = params.get('tenantId');\n if (urlTenant) return urlTenant;\n\n const storedTenant = getStoredTenant();\n if (storedTenant) return storedTenant;\n\n return unityTenantId || null;\n });\n\n const unityUserUrl = activeTenantId\n ? `user/unityuser?tenantId=${encodeURIComponent(activeTenantId)}`\n : 'user/unityuser';\n\n const { data: userInfo, error: userError, isLoading: userInfoLoading } = useApiQuery(\n ConfigService.securityV2ApiUrl,\n unityUserUrl,\n {},\n {\n enabled: !!activeAccount,\n staleTime: 0,\n placeholderData: keepPreviousData,\n }\n );\n\n const user = useMemo(() => (userInfo ? new User(userInfo) : null), [userInfo]);\n\n const isErrorModalOpen = Boolean(userError);\n const errorMessage = userError ? 'Unable to get user details. Please try again.' : '';\n\n useEffect(() => {\n if (user?.userId) sessionStorage.setItem('user-id', user.userId);\n\n if (user?.currentTenantId && !activeTenantId) {\n storeTenant(user.currentTenantId);\n setActiveTenantId(user.currentTenantId);\n }\n }, [user, activeTenantId]);\n\n const changeTenant = useCallback((newTenantId) => {\n if (!newTenantId) return;\n storeTenant(newTenantId);\n setActiveTenantId(newTenantId);\n }, []);\n\n // Only block on initial load — when switching tenants we keep the previous\n // user rendered (placeholderData) so children don't unmount and flash a loader.\n const loadingValue = Boolean(activeAccount) && !user && !userError && userInfoLoading;\n const shouldBlockForUser = loadingValue && !isWhiteListed;\n\n if (isErrorModalOpen) {\n return (\n <UdpDialog open showHeaderCloseButton={false}>\n <UdpText variant='subtitle2'>\n {errorMessage ? errorMessage : 'An unexpected error has ocurred.'}\n </UdpText>\n <UdpButton\n slot='action'\n appearance='primary'\n onClick={() => {\n getSignInAuthProvider().logoutRedirect();\n }}\n >\n Logout\n </UdpButton>\n </UdpDialog>\n );\n }\n\n if (!doNotWaitForTenant && shouldBlockForUser) {\n return <LoadingIndicator />;\n }\n\n return (\n <UserContext.Provider value={user}>\n <UserDispatchContext.Provider value={{ changeTenant }}>\n <TenantProvider>{children}</TenantProvider>\n </UserDispatchContext.Provider>\n </UserContext.Provider>\n );\n};\n\nexport default UserProvider;\n"],"mappings":"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"}
1
+ {"version":3,"file":"UserProvider.mjs","names":["React","lazy","Suspense","useCallback","useEffect","useState","useMemo","keepPreviousData","UserContext","UserDispatchContext","User","LoadingIndicator","useAccount","storeTenant","getStoredTenant","useApiQuery","TenantProvider","ConfigService","getSignInAuthProvider","UserErrorModal","UserProvider","props","$","_c","children","isWhiteListed","doNotWaitForTenant","t0","unityTenantId","undefined","activeAccount","t1","params","URLSearchParams","window","location","search","urlTenant","get","storedTenant","activeTenantId","setActiveTenantId","unityUserUrl","encodeURIComponent","t2","Symbol","for","t3","t4","enabled","staleTime","placeholderData","data","userInfo","error","userError","isLoading","userInfoLoading","securityV2ApiUrl","t5","user","isErrorModalOpen","Boolean","errorMessage","t6","t7","userId","sessionStorage","setItem","currentTenantId","t8","newTenantId","changeTenant","loadingValue","shouldBlockForUser","t9","t10","t11"],"sources":["../../../src/utilities/auth/UserProvider.jsx"],"sourcesContent":["import React, { lazy, Suspense, useCallback, useEffect, useState, useMemo } from 'react';\nimport { keepPreviousData } from '@tanstack/react-query';\nimport { UserContext, UserDispatchContext } from './internal';\nimport { User } from './user';\nimport { LoadingIndicator } from '../../UI/loading/LoadingIndicator';\nimport { useAccount } from '@azure/msal-react';\nimport { storeTenant, getStoredTenant } from '../storage/UnitySessionStorage';\nimport { useApiQuery } from '../useApiQuery';\nimport { TenantProvider } from '../tenant/TenantProvider';\nimport { ConfigService } from '../../configService';\nimport { getSignInAuthProvider } from './signInAuthProvider';\n\n// Lazy-load the error modal — it only renders when the user-info API call\n// fails, which is rare. Statically importing UdpDialog/UdpText/UdpButton drags\n// the entire stencil web-component graph (incl. ~574 KB udp-fluent-icon) into\n// the entry chunk for every user.\nconst UserErrorModal = lazy(() => import('./UserErrorModal'));\n\nconst UserProvider = (props) => {\n const { children, isWhiteListed, doNotWaitForTenant = false, unityTenantId } = props;\n\n const activeAccount = useAccount();\n\n const [activeTenantId, setActiveTenantId] = useState(() => {\n const params = new URLSearchParams(window.location.search);\n const urlTenant = params.get('tenantId');\n if (urlTenant) return urlTenant;\n\n const storedTenant = getStoredTenant();\n if (storedTenant) return storedTenant;\n\n return unityTenantId || null;\n });\n\n const unityUserUrl = activeTenantId\n ? `user/unityuser?tenantId=${encodeURIComponent(activeTenantId)}`\n : 'user/unityuser';\n\n const {\n data: userInfo,\n error: userError,\n isLoading: userInfoLoading,\n } = useApiQuery(\n ConfigService.securityV2ApiUrl,\n unityUserUrl,\n {},\n {\n enabled: !!activeAccount,\n staleTime: 0,\n placeholderData: keepPreviousData,\n }\n );\n\n const user = useMemo(() => (userInfo ? new User(userInfo) : null), [userInfo]);\n\n const isErrorModalOpen = Boolean(userError);\n const errorMessage = userError ? 'Unable to get user details. Please try again.' : '';\n\n useEffect(() => {\n if (user?.userId) sessionStorage.setItem('user-id', user.userId);\n\n if (user?.currentTenantId && !activeTenantId) {\n storeTenant(user.currentTenantId);\n setActiveTenantId(user.currentTenantId);\n }\n }, [user, activeTenantId]);\n\n const changeTenant = useCallback((newTenantId) => {\n if (!newTenantId) return;\n storeTenant(newTenantId);\n setActiveTenantId(newTenantId);\n }, []);\n\n // Only block on initial load — when switching tenants we keep the previous\n // user rendered (placeholderData) so children don't unmount and flash a loader.\n const loadingValue = Boolean(activeAccount) && !user && !userError && userInfoLoading;\n const shouldBlockForUser = loadingValue && !isWhiteListed;\n\n if (isErrorModalOpen) {\n return (\n <Suspense fallback={<LoadingIndicator />}>\n <UserErrorModal errorMessage={errorMessage} />\n </Suspense>\n );\n }\n\n if (!doNotWaitForTenant && shouldBlockForUser) {\n return <LoadingIndicator />;\n }\n\n return (\n <UserContext.Provider value={user}>\n <UserDispatchContext.Provider value={{ changeTenant }}>\n <TenantProvider>{children}</TenantProvider>\n </UserDispatchContext.Provider>\n </UserContext.Provider>\n );\n};\n\nexport default UserProvider;\n"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
- import { UdpDialog } from "../../UI/fluent-web-components/UdpDialog.mjs";
2
1
  import { UdpTenantSelect } from "./UdpTenantSelect.mjs";
2
+ import { UdpDialog } from "../../UI/fluent-web-components/UdpDialog.mjs";
3
3
  import { c } from "react-compiler-runtime";
4
4
  import React from "react";
5
5
  //#region src/utilities/tenant/TenantAccessDialog.tsx
@@ -1 +1 @@
1
- {"version":3,"file":"TenantProvider.d.ts","sourceRoot":"","sources":["../../../src/utilities/tenant/TenantProvider.jsx"],"names":[],"mappings":"AAAA,OAAO,KAAsD,MAAM,OAAO,CAAC;AAmD3E,eAAO,MAAM,cAAc;;uBA0G1B,CAAC"}
1
+ {"version":3,"file":"TenantProvider.d.ts","sourceRoot":"","sources":["../../../src/utilities/tenant/TenantProvider.jsx"],"names":[],"mappings":"AAAA,OAAO,KAAsE,MAAM,OAAO,CAAC;AA6D3F,eAAO,MAAM,cAAc;;uBAgH1B,CAAC"}