{"version":3,"file":"Shell.mjs","names":["React","lazy","useState","useMemo","useCallback","Suspense","makeStyles","Drawer","useMediaQuery","useTheme","NavigationSidebar","SiteHeader","UtilityBar","getMenuItemsRecursively","findHomeRoute","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","inquiryTitle","title","menuContext","resolvedLeftMenu","leftMenuStale","home","length","homeRoute","slug","homeRouteState","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","propTypes","array","string","number","oneOfType","arrayOf","node","isRequired","element","object","func","currentTenant"],"sources":["../../src/shell/Shell.jsx"],"sourcesContent":["import React, { lazy, useState, 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 {\n  getMenuItemsRecursively,\n  findHomeRoute\n} 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 {\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\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']\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({\n    widgets,\n    getWidget: getWidgetProp,\n    isValidWidget: isValidWidgetProp\n  });\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 inquiryTitle = useInquiryStore((state) => state.title);\n\n  //usePreloadPages();\n\n  const menuContext = useMenuContext?.();\n  const resolvedLeftMenu = useMemo(() => {\n    if (leftMenuLoading) return [];\n    // A caller passing its own menu owns its freshness via leftMenuLoading; the\n    // context menu we have to check ourselves, otherwise the previous tenant's\n    // items stay on screen for the whole switch.\n    if (leftMenu) return leftMenu;\n    return menuContext?.leftMenuStale ? [] : menuContext?.leftMenu;\n  }, [leftMenuLoading, leftMenu, menuContext]);\n  // Both the slug and the menu item's params: the `/` redirect has to push the\n  // params as location state, otherwise the home page renders with none.\n  const home = useMemo(\n    () => (leftMenu?.length ? findHomeRoute(leftMenu) : null),\n    [leftMenu]\n  );\n  const homeRoute = leftMenu?.length\n    ? (home?.slug ?? null)\n    : menuContext?.homeRoute;\n  const homeRouteState = leftMenu?.length\n    ? (home?.state ?? null)\n    : (menuContext?.homeRouteState ?? null);\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  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={\n                  leftMenuLoading ||\n                  menuContext?.leftMenuLoading ||\n                  menuContext?.leftMenuStale\n                }\n              />\n            )}\n            {expander && (\n              <div>\n                <Suspense fallback={null}>\n                  <UtilitySideBar\n                    title={inquiryTitle || sidebarTitle}\n                    resizable={utilitySidebarResizable}\n                    utilitySidebarToggleOverride={utilitySidebarToggleOverride}\n                    onUtilitySidebarToggleExpandClick={\n                      onUtilitySidebarToggleExpandClick\n                    }\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\n                      homeRoute={homeRoute}\n                      homeRouteState={homeRouteState}\n                    />\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              <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={\n                  leftMenuLoading ||\n                  menuContext?.leftMenuLoading ||\n                  menuContext?.leftMenuStale\n                }\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([\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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"}