{"version":3,"file":"layouts-CyC0F2JS.js","sources":["../../src/layouts/nav-bar/UserProfile.tsx","../../src/layouts/nav-bar/nav-bar.utils.ts","../../src/layouts/nav-bar/NavBar.tsx","../../src/layouts/MainLayout.tsx","../../src/layouts/SideNavLayout.tsx"],"sourcesContent":["import { config } from \"@libs/config/config\";\n\nimport { observer } from \"mobx-react\";\n\nimport { useMsal } from \"@azure/msal-react\";\nimport {\n ActionButton,\n IContextualMenuItem,\n IPersonaProps,\n MessageBar,\n MessageBarType,\n Persona,\n PersonaSize\n} from \"@bps/fluent-ui\";\nimport {\n useCurrentUserImpersonation,\n useCurrentUserQuery,\n useEnvAllRoles\n} from \"@libs/api/gateways/env/env-gateway.hooks\";\n\ninterface Props {\n personaProps?: IPersonaProps;\n}\n\nexport const UserProfile = observer(({ personaProps }: Props) => {\n const { instance: msal } = useMsal();\n\n const handleLogout = async () => {\n await msal.logoutRedirect({\n account: msal.getActiveAccount(),\n postLogoutRedirectUri: \"/\"\n });\n };\n\n const {\n data: allRoles,\n error: allRolesError,\n isLoading: allRolesIsLoading\n } = useEnvAllRoles();\n\n const { data: currentUser } = useCurrentUserQuery();\n const activeImpersonation = currentUser?.impersonatingRole !== undefined;\n const userImpersonation = useCurrentUserImpersonation();\n\n const handleLogoutClicked = () => {\n handleLogout().then(() => {});\n };\n\n const menuItems: IContextualMenuItem[] = [\n {\n key: \"logout\",\n iconProps: { iconName: \"SignOut\" },\n text: \"Logout\",\n onClick: handleLogoutClicked\n },\n {\n key: \"role-impersonate-on\",\n text: \"Impersonate Role\",\n iconProps: { iconName: \"Family\" },\n disabled: allRolesIsLoading,\n onRenderContent: (props, defaultRenders) => {\n if (props && defaultRenders) {\n if (allRolesError) {\n return (\n \n {allRolesError.message}\n \n );\n }\n return (\n <>\n {defaultRenders.renderItemIcon(props)}{\" \"}\n {defaultRenders.renderItemName(props)}\n \n );\n }\n return null;\n },\n data: {\n permissions: [],\n permissionsOperator: \"or\"\n },\n subMenuProps: {\n items:\n allRoles\n ?.filter(r => r.code !== \"ADMIN\")\n .map(r => ({ key: `role-${r.code}`, text: `${r.code}` })) || [],\n onItemClick: (ev, item) => {\n // Update the current user impersonatingRole\n userImpersonation(item?.text);\n }\n }\n },\n {\n key: \"role-impersonate-off\",\n text: \"Cancel Role Impersonation\",\n iconProps: { iconName: \"AutoEnhanceOn\" },\n disabled: !activeImpersonation,\n onClick: () => {\n // Update the current user impersonatingRole\n userImpersonation(undefined);\n }\n }\n ];\n\n return (\n \n config.env === \"prod\" ? m.key === \"logout\" : true\n )\n }}\n >\n \n \n );\n});\n","import { Permissions } from \"@libs/permissions/permissions.enum\";\nimport { ItemData } from \"./NavBar.types\";\nimport { IContextualMenuItem, IButtonProps } from \"@bps/fluent-ui\";\nimport { verifyHasPermissions } from \"@libs/permissions/permissions.utils\";\n\nexport const filterItemsByUserPermissions = (\n userPermissions: Permissions[],\n items: IButtonProps[]\n) => {\n return items.reduce((acc, item) => {\n const itemData = item.data as ItemData;\n\n if (\n itemData &&\n itemData.permissions &&\n !verifyHasPermissions(\n userPermissions,\n itemData.permissions,\n itemData.permissionsOperator\n )\n ) {\n return acc;\n }\n\n const itemResult = { ...item };\n\n if (itemResult.menuProps) {\n itemResult.menuProps.items = filterMenuItemsByUserPermissions(\n userPermissions,\n itemResult.menuProps.items\n );\n\n // Don't add the menu item to the available items if all the submenu items are inaccessible, unless the parent\n // item has it's on 'to' link.\n if (!(itemResult.menuProps.items.length || itemData?.to)) {\n return acc;\n }\n }\n\n return [...acc, itemResult];\n }, [] as IButtonProps[]);\n};\n\nexport const filterMenuItemsByUserPermissions = (\n userPermissions: Permissions[],\n items: IContextualMenuItem[]\n) => {\n return items.reduce((acc, item) => {\n if (item.data?.permissions) {\n if (\n !verifyHasPermissions(\n userPermissions,\n item.data.permissions,\n item.data.permissionsOperator\n )\n ) {\n return acc;\n }\n }\n return [...acc, item];\n }, [] as IContextualMenuItem[]);\n};\n","import { EnvName } from \"@components/EnvName\";\nimport { UserProfile } from \"./UserProfile\";\nimport { useNavigate } from \"react-router-dom\";\n\nimport {\n ActionButton,\n Header,\n IButtonProps,\n IButtonStyles,\n IStyle,\n ITheme,\n useTheme\n} from \"@bps/fluent-ui\";\n\nimport { ItemData } from \"./NavBar.types\";\nimport { filterItemsByUserPermissions } from \"./nav-bar.utils\";\nimport { useCurrentUserQuery } from \"@libs/api/gateways/env/env-gateway.hooks\";\n\nexport const navBarActionButtonStyles = (\n theme: ITheme\n): Partial => {\n const style: IStyle = { color: theme.palette.white };\n return {\n icon: style,\n menuIcon: style,\n iconHovered: style,\n iconPressed: style\n };\n};\n\nexport const NavBar = () => {\n const theme = useTheme();\n const { data: user } = useCurrentUserQuery();\n const userPermissions = user?.impersonatingRole\n ? user.impersonatingRole.permissions\n : user?.permissions || [];\n\n const navigate = useNavigate();\n const handleMenuItemClick = (item: ItemData) => {\n navigate(item.to);\n };\n\n const filteredItems: IButtonProps[] = filterItemsByUserPermissions(\n userPermissions,\n [\n {\n text: \"Tenants\",\n iconProps: {\n iconName: \"Package\"\n },\n onClick: () =>\n handleMenuItemClick({\n to: \"/tenants\"\n })\n },\n {\n text: \"Users\",\n iconProps: {\n iconName: \"People\"\n },\n onClick: () =>\n handleMenuItemClick({\n to: \"/users\"\n })\n },\n {\n text: \"Systems\",\n iconProps: {\n iconName: \"Settings\"\n },\n menuProps: {\n items: [\n {\n key: \"system-environment\",\n text: \"Environment\",\n onClick: () => handleMenuItemClick({ to: \"/system/env\" })\n },\n {\n key: \"system-platform\",\n text: \"Platform\",\n onClick: () => handleMenuItemClick({ to: \"/system/plt\" })\n },\n {\n key: \"system-pros\",\n text: \"Premier Online\",\n onClick: () => handleMenuItemClick({ to: \"/system/pros\" })\n },\n {\n key: \"best-health\",\n text: \"Best Health\",\n onClick: () => handleMenuItemClick({ to: \"/system/bh\" })\n },\n {\n key: \"omni\",\n text: \"Omni\",\n onClick: () => handleMenuItemClick({ to: \"/system/omni\" })\n },\n {\n text: \"BP Mobile\",\n onClick: () => handleMenuItemClick({ to: \"/system/bp-mobile\" }),\n key: \"bp-mobile\"\n }\n ]\n }\n },\n {\n text: \"Field Devices\",\n iconProps: {\n iconName: \"PC1\"\n },\n onClick: () => handleMenuItemClick({ to: \"/field-mgmt\" })\n },\n {\n text: \"Customers\",\n iconProps: {\n iconName: \"Package\"\n },\n onClick: () => handleMenuItemClick({ to: \"/cam\" })\n }\n ]\n );\n\n return (\n \n }}\n userBox={}\n hoverEffectItems\n >\n {!!filteredItems.length &&\n filteredItems.map(i => (\n \n ))}\n \n );\n};\n","import { ComponentType, PropsWithChildren } from \"react\";\n\nimport { Stack, useTheme } from \"@bps/fluent-ui\";\nimport { Notifications } from \"@components/Notifications\";\n\nimport { NavBar } from \"./nav-bar/NavBar\";\n\nexport interface MainLayoutProps {\n toolbar?: ComponentType;\n}\n\nexport const MainLayout = (props: PropsWithChildren) => {\n const { semanticColors } = useTheme();\n document.body.style.backgroundColor = semanticColors.disabledBackground;\n\n return (\n \n \n \n\n \n {props.children}\n \n \n );\n};\n","import React from \"react\";\n\nimport { IStackProps, mergeStyleSets, Stack, useTheme } from \"@bps/fluent-ui\";\n\ninterface SideNavLayoutProps {\n nav: React.ReactNode;\n bodyProps?: IStackProps;\n}\n\nexport const SideNavLayout: React.FC = ({\n nav,\n children,\n bodyProps\n}) => {\n const theme = useTheme();\n\n const stackTokens = {\n childrenGap: theme.spacing.s1\n };\n\n return (\n \n \n {nav}\n \n\n \n {children}\n \n \n );\n};\n"],"names":["UserProfile","observer","personaProps","msal","useMsal","handleLogout","allRoles","allRolesError","allRolesIsLoading","useEnvAllRoles","currentUser","useCurrentUserQuery","activeImpersonation","userImpersonation","useCurrentUserImpersonation","menuItems","props","defaultRenders","MessageBar","MessageBarType","jsxs","Fragment","r","ev","item","jsx","ActionButton","config","m","Persona","_a","PersonaSize","filterItemsByUserPermissions","userPermissions","items","acc","itemData","verifyHasPermissions","itemResult","filterMenuItemsByUserPermissions","navBarActionButtonStyles","theme","style","NavBar","useTheme","user","navigate","useNavigate","handleMenuItemClick","filteredItems","Header","EnvName","createElement","MainLayout","semanticColors","Stack","Notifications","SideNavLayout","nav","children","bodyProps","stackTokens","mergeStyleSets"],"mappings":"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"}