udp-react-enterprise-component-library 25.1.0-beta.2 → 25.1.0-beta.6

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 (52) hide show
  1. package/dist/{AmbientGridTemplate-BLwgiqwK.js → AmbientGridTemplate-BqlMt5Su.js} +152 -137
  2. package/dist/AmbientGridTemplate-BqlMt5Su.js.map +1 -0
  3. package/dist/{EnvironmentRibbon-BMvQEZPZ.js → EnvironmentRibbon-DaDmKAPO.js} +2 -2
  4. package/dist/{EnvironmentRibbon-BMvQEZPZ.js.map → EnvironmentRibbon-DaDmKAPO.js.map} +1 -1
  5. package/dist/{MenuPage-DLsNc-P8.js → MenuPage-CO6_GWwB.js} +97 -27
  6. package/dist/MenuPage-CO6_GWwB.js.map +1 -0
  7. package/dist/{MyExportsPage-BYH2Wl9k.js → MyExportsPage-CX9tzqHk.js} +5 -5
  8. package/dist/{MyExportsPage-BYH2Wl9k.js.map → MyExportsPage-CX9tzqHk.js.map} +1 -1
  9. package/dist/MyExportsPage-CkzQ0MRq.js +8 -0
  10. package/dist/{PageContainer-B65gsUfF.js → PageContainer-k8KCfGsM.js} +2 -2
  11. package/dist/{PageContainer-B65gsUfF.js.map → PageContainer-k8KCfGsM.js.map} +1 -1
  12. package/dist/{SearchUtilities-dbXvMYoa.js → SearchUtilities-Bor3HbfB.js} +2 -2
  13. package/dist/{SearchUtilities-dbXvMYoa.js.map → SearchUtilities-Bor3HbfB.js.map} +1 -1
  14. package/dist/{SideSheet-CPHhyWLB.js → SideSheet-DUsxG1FN.js} +3 -3
  15. package/dist/{SideSheet-CPHhyWLB.js.map → SideSheet-DUsxG1FN.js.map} +1 -1
  16. package/dist/{UdpPublicForm-DFCL1GzD.js → UdpPublicForm-Caa1tH6z.js} +2 -2
  17. package/dist/{UdpPublicForm-DFCL1GzD.js.map → UdpPublicForm-Caa1tH6z.js.map} +1 -1
  18. package/dist/UdpPublicForm-Cvw5tOHe.js +4 -0
  19. package/dist/{UtilitySideBar-B4r2IAv5.js → UtilitySideBar-D4CXGtW2.js} +12 -9
  20. package/dist/UtilitySideBar-D4CXGtW2.js.map +1 -0
  21. package/dist/{VirtualBrowser-C_IJ0I6f.js → VirtualBrowser-BXL0hdy0.js} +7 -7
  22. package/dist/{VirtualBrowser-C_IJ0I6f.js.map → VirtualBrowser-BXL0hdy0.js.map} +1 -1
  23. package/dist/{WorkflowContainer-DKwRWi1i.js → WorkflowContainer-DrqzuQtU.js} +35 -7
  24. package/dist/WorkflowContainer-DrqzuQtU.js.map +1 -0
  25. package/dist/WorkflowContainer-Q8gtuaB7.js +9 -0
  26. package/dist/{apiHelpers-t3rfkjFZ.js → apiHelpers-DZots3og.js} +2 -2
  27. package/dist/apiHelpers-DZots3og.js.map +1 -0
  28. package/dist/index.js +2624 -2468
  29. package/dist/index.js.map +1 -1
  30. package/dist/{propertyTypeEnums-DTGsK5-s.js → propertyTypeEnums-Civy7RJv.js} +2 -2
  31. package/dist/{propertyTypeEnums-DTGsK5-s.js.map → propertyTypeEnums-Civy7RJv.js.map} +1 -1
  32. package/dist/types/AGLicense.d.ts +1 -1
  33. package/dist/types/UI/maps/UdpMap.d.ts +2 -0
  34. package/dist/types/UI/maps/UdpMapComponent.d.ts +2 -0
  35. package/dist/types/UI/utilityDisplay/ChipSection.d.ts +2 -1
  36. package/dist/types/UI/utilityDisplay/GridPrimaryBar.d.ts +2 -1
  37. package/dist/types/hooks/usePromotedMethodEntities.d.ts +6 -0
  38. package/dist/types/index.d.ts +1 -0
  39. package/dist/types/stores/catalogStore.d.ts +2 -0
  40. package/dist/types/stores/inquiryStore.d.ts +3 -0
  41. package/dist/types/tsconfig.tsbuildinfo +1 -1
  42. package/dist/types/utilities/catalog/CatalogUtilities.d.ts +1 -0
  43. package/dist/types/utilities/tree/TreeUtilities.d.ts +1 -1
  44. package/package.json +2 -2
  45. package/dist/AmbientGridTemplate-BLwgiqwK.js.map +0 -1
  46. package/dist/MenuPage-DLsNc-P8.js.map +0 -1
  47. package/dist/MyExportsPage-CVUIXWTf.js +0 -8
  48. package/dist/UdpPublicForm-BrVSSMCN.js +0 -4
  49. package/dist/UtilitySideBar-B4r2IAv5.js.map +0 -1
  50. package/dist/WorkflowContainer-8-mmebY0.js +0 -9
  51. package/dist/WorkflowContainer-DKwRWi1i.js.map +0 -1
  52. package/dist/apiHelpers-t3rfkjFZ.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"EnvironmentRibbon-BMvQEZPZ.js","names":["useStyles","UserContext: React.Context<User | null>","UserDispatchContext: React.Context<Dispatch | null>","useStyles","props","useStyles","useStyles","useSetInitialShellVisibility: () => void","useStyles","colors","colors","useStyles","Typography","MuiTypography","useStyles","LayoutUnit: React.FC<any>","useStyles","enableAxiosInterceptors","useStyles","Typography"],"sources":["../src/UI/inputs/buttons/FluentButton.jsx","../src/utilities/axiosInterceptors.js","../src/utilities/auth/internal.ts","../src/utilities/auth/useUser.ts","../src/utilities/input/StringUtilities.js","../src/utilities/FluentIcon.jsx","../src/UI/inputs/buttons/FluentIconButton.jsx","../src/enums/unitySystemEnums.ts","../src/utilities/UnityIcon.jsx","../src/utilities/UnityFluentIcon.jsx","../src/stores/shellStore.ts","../src/UI/inputs/buttons/PrimaryActionButton.jsx","../src/utilities/style/colors.js","../src/utilities/style/colorConverter.js","../src/UI/dataDisplay/typography/Typography.jsx","../src/layout/LayoutUnit.tsx","../src/UI/dataDisplay/typography/StandardTitle.jsx","../src/utilities/useAxiosGet.js","../src/UI/widgets/utils/useId.js","../src/UI/dataDisplay/StatusChip.jsx","../src/udp/utilities/methodUtils.js","../src/utilities/tenant/tenantContext.ts","../src/utilities/tenant/useTenant.ts","../src/shell/ui/EnvironmentRibbon.tsx"],"sourcesContent":["import React from 'react';\nimport { makeStyles } from '@material-ui/core';\nimport { Button, CircularProgress } from '@material-ui/core';\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n borderRadius: 2,\n height: (props) => (props.height ? props.height : 32),\n padding: '0 16px',\n minWidth: (props) => (props.minWidth ? props.minWidth : 80),\n border: (props) => `1px solid ${props.color}`\n },\n label: {\n textTransform: 'capitalize',\n fontSize: '0.875rem',\n fontWeight: 600\n }\n}));\n\nexport const FluentButton = (props) => {\n const classes = useStyles(props);\n const { children, id, udprecordid, minWidth, progress, disabled, ...otherProps } =\n props;\n return (\n <Button\n {...otherProps}\n disableElevation\n classes={{\n root: classes.root,\n label: classes.label\n }}\n margin='dense'\n id={id}\n udprecordid={udprecordid}\n minWidth={minWidth}\n disabled={disabled || progress}\n >\n {progress && (\n <CircularProgress\n id={id + '-ButtonProgress'}\n udprecordid={udprecordid + '-ButtonProgress'}\n size={18}\n color='primary'\n />\n )}\n {!progress && children}\n </Button>\n );\n};\n","import Axios from 'axios';\nimport { getAccessToken, getMergedConfig } from './apiHelpers';\nimport { whitelistedPaths } from './auth/whitelistedPaths';\n\nconst axiosInterceptors = () => {\n Axios.interceptors.request.use(\n async (config) => {\n // don't want to change the access token if it's already there, this rule is already applied in getMergedConfig\n // we don't want to call getAccessToken until it is actually need it because it might log the user out\n if (!whitelistedPaths.includes(window.location.pathname)) {\n let accessToken = '';\n if(!config?.headers?.Authorization){\n accessToken = await getAccessToken()\n }\n return getMergedConfig(accessToken, config);\n }\n return config;\n },\n (error) => Promise.reject(error)\n );\n\n Axios.interceptors.response.use(\n (response) => response,\n async (error) => {\n const config = error?.config;\n if (\n error?.response?.status === 401 &&\n !config?._retry &&\n !whitelistedPaths.includes(window.location.pathname)\n ) {\n config.headers.Authorization = `Bearer ${await getAccessToken()}`;\n config._retry = true;\n\n return Axios(config);\n }\n\n return Promise.reject(error);\n }\n );\n};\n\nexport default axiosInterceptors;\n","import { createContext } from 'react';\nimport { User } from './user';\n\nexport type UserAction = { type: 'SET_USER' };\nexport type AccessTokenAction = { type: 'SET_ACCESS_TOKEN' };\nexport type Dispatch = (action: UserAction | AccessTokenAction) => void;\nexport const UserContext: React.Context<User | null> = createContext<User | null>(null);\nexport const UserDispatchContext: React.Context<Dispatch | null> = createContext<Dispatch | null>(null);\n","import { useContext } from 'react';\nimport { UserContext } from './internal';\nimport { User } from './user';\n\n/**\n * Get the current User object (or null if not logged in)\n *\n * Does not redirect to login\n * @see {@link useAuthedUser}\n */\nexport function useUser(): User | null {\n return useContext(UserContext);\n}\n","export const removeWhiteSpace = (str) => {\n if (!str) {\n return '';\n }\n return str.replace(/\\s/g, '');\n};\n\nexport const camelToPascalCaseWithSpace = (str) => {\n const capitalizedStr = str.charAt(0).toUpperCase() + str.slice(1);\n return capitalizedStr.replace(/([a-z0-9])([A-Z])/g, '$1 $2');\n};\n\nexport const trimStringAfter = (str, character) => {\n const lastIndex = str.lastIndexOf(character);\n return str.substring(0, lastIndex === -1 ? str.length : lastIndex);\n};\n\nexport const toLowerFirstChar = (field) => {\n return field?.charAt(0)?.toLowerCase() + field?.slice(1);\n};\n\nexport const toUpperFirstChar = (field) => {\n return field?.charAt(0)?.toUpperCase() + field?.slice(1);\n};\n\nexport const toTitleCase = (str) => {\n const result = str\n .replace(/([A-Z][a-z]+)/g, ' $1')\n .replace(/([A-Z]+)\\b/g, ' $1')\n .replace(/_/g, ' ')\n .trim();\n return result.charAt(0).toUpperCase() + result.slice(1);\n};\n\nexport const pluralize = (str) => {\n const last = str.charAt(str.length - 1);\n if (last === 's') {\n return str;\n } else {\n return `${str}s`;\n }\n};\n","import React from 'react';\nimport { makeStyles } from '@material-ui/core';\nimport clsx from 'clsx';\n\nconst useStyles = makeStyles(\n (props) => ({\n root: {\n display: 'inline-block',\n '& > svg': {\n display: 'inherit'\n }\n },\n default: {\n fontSize: 18,\n width: 18,\n height: 18\n },\n large: {\n fontSize: 24,\n width: 24,\n height: 24\n },\n medium: {\n fontSize: 16,\n width: 16,\n height: 16\n },\n small: {\n fontSize: 14,\n width: 14,\n height: 14\n },\n xs: {\n fontSize: 12,\n width: 12,\n height: 12\n },\n color: {\n color: (props) => props.color\n },\n customSize: {\n fontSize: (props) => props.size,\n width: (props) => props.size,\n height: (props) => props.size\n }\n }),\n { name: 'FluentIcon' }\n);\n\n/**\n * Wrapper for @fluentui/react-icons to provide it with required size\n */\nexport const FluentIcon = (props) => {\n const classes = useStyles(props);\n const {\n component: IconComponent,\n size = 'default',\n className,\n color,\n customSize = false,\n ...otherProps\n } = props;\n\n return (\n <IconComponent\n {...otherProps}\n className={clsx(\n classes.root,\n className,\n (customSize && typeof size === 'number' && classes['customSize']) ||\n classes[size],\n color && classes['color']\n )}\n />\n );\n};\n","import React from 'react'\nimport { makeStyles, IconButton } from '@material-ui/core'\nimport { FluentIcon } from '../../../utilities/FluentIcon'\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n borderRadius: (props) => (props.rounded ? 50 : 2),\n width: (props) => (props.rounded ? theme.spacing(4) : theme.spacing(1)),\n height: (props) => (props.rounded ? theme.spacing(4) : theme.spacing(1)),\n border: (props) => props.rounded && `1px solid ${theme.palette.divider}`,\n background: (props) => props.rounded && theme.palette.common.white\n }\n}))\n\nexport const FluentIconButton = (props) => {\n const classes = useStyles(props)\n const { icon, size = 'medium', id, udprecordid, ...otherProps } = props\n return (\n <IconButton\n {...otherProps}\n classes={{\n root: classes.root\n }}\n udprecordid={udprecordid}\n >\n <FluentIcon component={icon} size={size} id={id} />\n </IconButton>\n )\n}\n","export enum GridEnums {\n Ideas = 'f3c1bf72-15fd-4dcd-904c-b67850525cff',\n Tickets = '787a2afc-26df-440a-9040-9a3e5c5333d5',\n Users = '4ea9fe5d-0af3-4102-af95-4d4a5ca886e1',\n Tenants = 'b543fc1d-6f45-469e-87ae-2b18b8200955',\n Roles = '9af2eebb-7687-4b3c-91fa-607efb0a5fea',\n Inquiry = 'ac0b9a3a-d113-4590-93db-dea62bcb89a2',\n Groups = 'c599b6ff-fee3-4ade-bf78-16700fddb5b9'\n}\n\nexport enum GridStateTypeEnums {\n Column = 1,\n Pivot_Mode = 2,\n Column_Sort = 3,\n Column_Filter = 4,\n Column_Group = 5\n}\n\nexport enum MenuTypeEnums {\n Left_Menu = 1,\n Application_Menu = 2,\n Builders_Menu = 3,\n Favorites_Menu = 4\n}\n\nexport enum VerticalEnums {\n Engage = 1,\n Manage = 2,\n Build = 3,\n Play = 4\n}\n\nexport enum MenuItemEnums {\n Container = 'b36cec3c-fe05-47ed-a687-70be22b0e200',\n External_Link = '11758dfd-ac3a-4996-b86c-767947776ff8',\n Data_Browser = 'afc3833e-e288-4cf6-8155-a069ec4ddc5a',\n Report = '22763e92-2477-43c3-92db-124a84e5ff7f',\n Page = 'd506aeef-ba1b-49a8-9032-beba450b11bc',\n Page_Builder = '16df758b-c456-4c8c-8ca3-2ae167b3b078',\n Route = 'ec5f1c26-e7e1-4f19-8e6e-143308995a40',\n Tree_Builder = 'd4379c4f-6496-4caa-bc0d-5f297fea580f',\n Inquiry = 'b45f660f-a172-4444-8dd8-8f51d56e0725',\n Scheduler = '4007feb9-e50c-44f9-8502-a1f337d82bcf',\n Config = 'aeb48be9-09ea-49b3-9f21-486fe3545b2d',\n Action = 'a66e9458-2540-4166-9b26-1e9b44a2b080',\n Inner_Menu = 'c4f7b46c-00b8-428e-b982-1639c03fde20'\n}\n\nexport enum ADUserTypeEnums {\n Guest = 'Guest',\n Member = 'Member'\n}\n\nexport enum ProductEnums {\n Unity = 1\n}\n\nexport enum RoleTypeEnums {\n System = 1,\n Tenant = 2\n}\n\nexport enum LookupTypeEnums {\n No_Lookup = 'NO_LOOKUP',\n Api = 'API',\n Csv = 'CSV',\n Domain = 'DOMAIN',\n Lookup = 'LOOKUP'\n}\n\nexport enum SearchValueType {\n String = 'String',\n Int = 'Int',\n Long = 'Long',\n Double = 'Double',\n Boolean = 'Boolean',\n DateTime = 'DateTime'\n}\n\nexport enum SearchGroupingType {\n Distinct = 'DISTINCT',\n Aggregate = 'AGGREGATE'\n}\n\nexport enum SearchSortDirection {\n Asc = 'ASC',\n Desc = 'DESC'\n}\n\nexport enum RoleNameEnums {\n System_Administrator = 'System Administrator',\n Company_Administrator = 'Company Administrator',\n Developer = 'Developer'\n}\n\nexport enum ProductNameEnums {\n Asset_Management = 'Asset Management',\n Asset_Routing = 'Asset Routing',\n AVI = 'AVI',\n Cashiering = 'Cashiering',\n Citizen_Portal = 'Citizen Portal',\n Compliance = 'Compliance',\n Consumer_Engagement = 'Consumer Engagement',\n Consumer_Information = 'Consumer Information',\n Contact_Center = 'Contact Center',\n Course_Management = 'Course Management',\n Crew_Routing = 'Crew Routing',\n Dispatch = 'Dispatch',\n Dispatch_Admin = 'Dispatch Admin',\n Employee_Network = 'Employee Network',\n Energy_Management = 'Energy Management',\n Equipment_Inspection = 'Equipment Inspection',\n Facility_Management = 'Facility Management',\n Field_Mobility = 'Field Mobility',\n Fixed_Assets = 'Fixed Assets',\n Fleet_Management = 'Fleet Management',\n Health_And_Safety = 'Health & Safety',\n Instructor_Application = 'Instructor Application',\n MDM = 'MDM',\n Member_Management = 'Member Management',\n Page_Builder = 'Page Builder',\n Project_Management = 'Project Management',\n Rentals = 'Rentals',\n Unity = 'Unity',\n Work_Orders = 'Work Orders'\n}\n\nexport enum LogicalSearchOperatorEnums {\n And = 1,\n Or = 2\n}\n\nexport enum NodeActionTriggerEnums {\n On_Node_Drop = 1\n}\n\nexport enum NodeActionEnums {\n Load_Inquiry_Page = 1,\n Execute_Api = 2,\n Start_Workflow = 3,\n Create = 4,\n Update = 5,\n Delete = 6,\n Retrieve = 7,\n Open_Inquiry = 8,\n Open_Maintenance_Engine = 9,\n Redirect = 10,\n Open_External_Link = 11,\n Hide = 12,\n Disable = 13,\n Open_Page_Split_Screen = 14,\n Open_Shell_Split_Screen = 15,\n Open_Notes = 16,\n Open_Reminders = 17,\n Execute_Function = 18\n}\n\nexport enum TreeViewModeEnums {\n Classic = 1,\n Compact = 2\n}\n\nexport enum PanelPositionEnums {\n Site_Header = 1,\n Site_Header_Summary = 2,\n Speed_Dial = 3,\n Inquiry_Header = 4,\n Inquiry_Header_Summary = 5\n}\n\nexport enum CardinalityTypeEnums {\n One_To_One = 0,\n One_To_Many = 1,\n Many_To_Many = 2,\n Many_To_One = 3\n}\n\nexport enum SplitScreenTypeEnums {\n Entity = 1,\n Notes = 2,\n Page = 3,\n Reminders = 4\n}\n\nexport enum UdpEnums {\n Udp_Note_Type = 'UdpNoteType',\n Udp_Note_Template = 'UdpNoteTemplate',\n Udp_Note = 'UdpNote',\n Udp_Note_Filed_For = 'UdpNoteFiledFor',\n Udp_Shortcut_Content = 'UdpShortcutContent',\n Udp_Lookup = 'UdpLookup',\n Udp_Reminder_Type = 'UdpReminderType',\n Udp_Reminder_Template = 'UdpReminderTemplate',\n Udp_Reminder = 'UdpReminder',\n Udp_Reminder_Filed_For = 'UdpReminderFiledFor'\n}\n\nexport enum NodeGroupTypeEnums {\n Static = 'static',\n Dynamic = 'dynamic'\n}\n\nexport enum NodeGroupOutlierEnums {\n Hide = 'hide',\n Group = 'group',\n Individual = 'individual'\n}\n\nexport enum LookupTypeIdEnums {\n Api = 1,\n Csv = 2,\n Domain = 3,\n Lookup = 4\n}\n\nexport enum VisibilityTypeEnums {\n Private = 1,\n Public = 2\n}\n\nexport enum SeverityTypeEnums {\n Success = 'success',\n Error = 'error',\n Warning = 'warning',\n Info = 'info',\n Default = 'default'\n}\n\nexport enum UdpKeywordEnums {\n Udp_Tenant_Id = 'UDP_TENANT_ID',\n Udp_Product_Id = 'UDP_PRODUCT_ID',\n Udp_Language_Id = 'UDP_LANGUAGE_ID'\n}\n\nexport const enum JobStatusIdMapping {\n PENDING = 1,\n IN_PROGRESS = 2,\n COMPLETED = 3,\n FAILED = 4\n}\n\nexport const enum JobTypeIdMapping {\n IMPORT = 1,\n EXPORT = 2\n}\n\nexport enum UdpReminderFiledForType {\n User = 1,\n System = 2\n}\n\nexport enum DeviceTypeEnums {\n Desktop = 1,\n Tablet = 2,\n Mobile = 3\n}\n\nexport enum ContainerTypeEnums {\n Sidesheet = 1,\n SplitScreen = 2,\n Page = 3\n}\n\nexport enum TenantTypeEnums {\n Tenant = 1,\n Product = 2\n}\n\nexport enum EntityAttributeEnums {\n Is_Product_ShortcutContent = 'IsProductShortcutContent',\n Is_Product_Lookup = 'IsProductLookup',\n User_Defined = 'UserDefined',\n Domain_Name = 'DomainName'\n}\n\nexport enum RoleIdEnums {\n Unity_System_Administrator = '302dacf5-bf16-412d-bf66-519d4c3491c3'\n}\n","import React from 'react';\nimport { makeStyles } from '@material-ui/core';\nimport clsx from 'clsx';\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n display: 'flex',\n fill: (props) => props.color || 'black'\n },\n showcase: {\n fontSize: 38,\n width: 38,\n height: 38\n },\n large: {\n fontSize: 20,\n width: 20,\n height: 20\n },\n default: {\n fontSize: 18,\n width: 18,\n height: 18\n },\n medium: {\n fontSize: 16,\n width: 16,\n height: 16\n },\n small: {\n fontSize: 14,\n width: 14,\n height: 14\n },\n xs: {\n fontSize: 12,\n width: 12,\n height: 12\n }\n}));\n\nexport const UnityIcon = (props) => {\n const { component, size = 'default', className, ...otherProps } = props;\n const classes = useStyles(props);\n\n return (\n <div\n {...otherProps}\n className={clsx(classes.root, className, classes[size])}\n >\n {component}\n </div>\n );\n};\n","import React from 'react';\nimport { UnityIcon } from './UnityIcon';\nimport { FluentIcon } from './FluentIcon';\n\nexport const UnityFluentIcon = (props) => {\n const { type, icon, color, ...other } = props;\n\n if (!icon) {\n return null;\n }\n\n return type === 'unity' ? (\n <UnityIcon component={icon} color={color} {...other} />\n ) : (\n <FluentIcon component={icon} style={{ color: color || '' }} {...other} />\n );\n};\n","import { useEffect } from 'react';\nimport { create } from 'zustand';\nimport { devtools } from 'zustand/middleware';\nimport { ContainerTypeEnums } from '../enums/unitySystemEnums';\n\ninterface ShellState {\n subHeaderActionHasChildren: boolean | null | undefined;\n setSubHeaderActionHasChildren: (subHeaderActionHasChildren: boolean) => void;\n navigationExpanded: boolean | null | undefined;\n setNavigationExpanded: (navigationExpanded: boolean) => void;\n setIsValidWidget: (isValidWidget: (a: string) => boolean) => void;\n isValidWidget: (a: string) => boolean;\n setGetWidget: (getWidget: (a: string) => any) => void;\n getWidget: (a: string) => any;\n shellHidden: boolean | null | undefined;\n setShellHidden: (shellHidden: boolean) => void;\n currentContainerId: string | null | undefined;\n setCurrentContainerId: (containerId: string) => void;\n}\n\nexport const useShellStore = create<ShellState>()(\n devtools((set) => ({\n subHeaderActionHasChildren: false,\n setSubHeaderActionHasChildren: (subHeaderActionHasChildren) =>\n set((state) => ({\n subHeaderActionHasChildren: subHeaderActionHasChildren\n })),\n navigationExpanded: true,\n setNavigationExpanded: (navigationExpanded) =>\n set((state) => ({\n navigationExpanded: navigationExpanded\n })),\n isValidWidget: (a) => false,\n setIsValidWidget: (isValidWidget) =>\n set((state) => ({\n isValidWidget: isValidWidget\n })),\n getWidget: (a) => null,\n setGetWidget: (getWidget) =>\n set((state) => ({\n getWidget: getWidget\n })),\n shellHidden: false,\n setShellHidden: (shellHidden) =>\n set((state) => ({\n shellHidden: shellHidden\n })),\n currentContainerId: null,\n setCurrentContainerId: (currentContainerId) =>\n set((state) => ({ currentContainerId: currentContainerId }))\n }))\n);\n\nexport const useSetInitialShellVisibility: () => void = () => {\n const searchParams = new URLSearchParams(window.location.search);\n const withoutShell =\n searchParams.has('withoutShell') === true\n ? searchParams.get('withoutShell') === 'true'\n ? true\n : false\n : false;\n\n const setShellHidden = useShellStore((state) => state.setShellHidden);\n\n useEffect(() => {\n if (withoutShell) {\n setShellHidden(true);\n }\n }, [setShellHidden, withoutShell]);\n};\n","import React from 'react'\nimport { makeStyles, Button } from '@material-ui/core'\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n borderRadius: 0,\n padding: 'calc(.875rem - 3px) 23px calc(.875rem - 3px) 15px'\n },\n label: {\n textTransform: 'none'\n },\n endIcon: {\n display: 'flex',\n justifyContent: 'flex-end',\n marginLeft: theme.spacing(2)\n }\n}))\n\nexport const PrimaryActionButton = ({ children, icon, ...otherProps }) => {\n const classes = useStyles()\n\n return (\n <div>\n <Button\n {...otherProps}\n disableElevation\n classes={{\n root: classes.root,\n label: classes.label,\n endIcon: classes.endIcon\n }}\n variant='contained'\n color='secondary'\n endIcon={icon}\n >\n {children}\n </Button>\n </div>\n )\n}\nexport default PrimaryActionButton\n","export const colors = {\n systemIcon: {\n trigger: {\n main: '#FFCD27',\n hint: '#FDFAF0',\n hover: { outline: '#AF9027', background: '#FFFDEF' }\n },\n action: {\n main: '#1542FF',\n hint: '#F3F5FE',\n hover: { outline: '#40529D', background: '#ECEFFA' }\n },\n condition: {\n main: '#AE14FF',\n hint: '#F9EEFF',\n hover: { outline: '#844EA0', background: '#FAF2FE' }\n },\n sequence: {\n main: '#FD7F12',\n hint: '#FFF6EE',\n hover: { outline: '#A86123', background: '#FDF4EC' }\n }\n },\n unity: {\n success: {\n hint: '#F3FAF3'\n },\n warning: {\n hint: '#FFF6EA'\n },\n info: {\n hint: '#F3F9FE'\n },\n error: {\n hint: '#FDF7F6'\n }\n },\n categoryColors: {\n one: {\n hint: '#F8BBD0',\n main: '#F3FAF3'\n },\n two: {\n hint: '#FFF6EA',\n main: '#FFF6EA'\n },\n three: {\n hint: '#FFF6EA',\n main: '#FFF6EA'\n },\n four: {\n hint: '#F8BBD0',\n main: '#f3e0eb'\n },\n five: {\n hint: '#F8BBD0',\n main: 'rgb(194 223 218)'\n },\n six: {\n hint: '#F8BBD0',\n main: 'rgb(222 217 235)'\n }\n }\n};\n","import { colors } from './colors';\n\nexport const getEllipseColor = (theme, color, variant = 'main') => {\n if (!theme) {\n return '';\n }\n let ellipseColor = theme.palette.primary[variant];\n switch (color) {\n case 'action':\n ellipseColor = theme.palette.action?.[variant];\n break;\n case 'sequence':\n ellipseColor = theme.palette.sequence?.[variant];\n break;\n case 'trigger':\n ellipseColor = theme.palette.trigger?.[variant];\n break;\n case 'condition':\n ellipseColor = theme.palette.condition?.[variant];\n break;\n case 'primary':\n ellipseColor = theme.palette.primary[variant];\n break;\n case 'secondary':\n ellipseColor = theme.palette.secondary[variant];\n break;\n case 'info':\n ellipseColor = theme.palette.info[variant];\n break;\n case 'warning':\n ellipseColor = theme.palette.warning[variant];\n break;\n case 'error':\n ellipseColor = theme.palette.error[variant];\n break;\n case 'success':\n ellipseColor = theme.palette.success[variant];\n break;\n default:\n ellipseColor = theme.palette.secondary[variant];\n break;\n }\n return ellipseColor;\n};\n\nexport const getCustomHintColor = (color) => {\n // if (!theme) {\n // return '';\n // }\n let customHintColor = colors.unity.info.hint;\n switch (color) {\n // case 'primary':\n // customHintColor = theme.palette.primary.hint;\n // break;\n // case 'secondary':\n // customHintColor = theme.palette.secondary.hint;\n // break;\n case 'info':\n customHintColor = colors.unity.info.hint;\n break;\n case 'warning':\n customHintColor = colors.unity.warning.hint;\n break;\n case 'error':\n customHintColor = colors.unity.error.hint;\n break;\n case 'success':\n customHintColor = colors.unity.success.hint;\n break;\n default:\n customHintColor = colors.unity.info.hint;\n }\n\n return customHintColor;\n};\n\nexport const getCategoryColor = (color) => {\n // if (!theme) {\n // return '';\n // }\n let highlightColor = colors.unity.info.hint;\n switch (color) {\n case 'info':\n highlightColor = colors.unity.info.hint;\n break;\n case 'warning':\n highlightColor = colors.unity.warning.hint;\n break;\n case 'error':\n highlightColor = colors.unity.error.hint;\n break;\n case 'four':\n highlightColor = colors.categoryColors.four.main;\n break;\n case 'five':\n highlightColor = colors.categoryColors.five.main;\n break;\n case 'six':\n highlightColor = colors.categoryColors.six.main;\n break;\n default:\n highlightColor = colors.unity.info.hint;\n }\n\n return highlightColor;\n};\n","import React from 'react';\nimport { Typography as MuiTypography, makeStyles } from '@material-ui/core';\nimport clsx from 'clsx';\nimport { getEllipseColor } from '../../../utilities/style/colorConverter';\n\nconst useStyles = makeStyles((theme) => ({\n typography: {\n color: (props) => props?.color && getEllipseColor(theme, props?.color)\n }\n}));\nexport const Typography = (props) => {\n const {\n variant,\n align,\n children,\n className,\n noWrap = false,\n paragraph = false,\n color\n } = props;\n const classes = useStyles(props);\n\n return (\n <MuiTypography\n variant={variant}\n align={align}\n className={clsx({[classes.typography]: color}, className)}\n noWrap={noWrap}\n paragraph={paragraph}\n >\n {children}\n </MuiTypography>\n );\n};\n","import React from 'react'\nimport { makeStyles, Badge } from '@material-ui/core'\nimport clsx from 'clsx'\n\ntype LayoutUnitProps = {\n unit: 'nudge' | 'xxs' | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | 'xxl',\n highlight: any\n}\n\nconst useStyles = makeStyles((theme) => ({\n highlight: {\n background: 'pink',\n opacity: (props:LayoutUnitProps) => (props.highlight ? 0.2 : 0)\n },\n nudge: {\n height: theme.spacing(1)\n },\n xxs: {\n height: theme.spacing(2)\n },\n xs: {\n height: theme.spacing(3)\n },\n sm: {\n height: theme.spacing(4)\n },\n md: {\n height: theme.spacing(5)\n },\n lg: {\n height: theme.spacing(8)\n },\n xl: {\n height: theme.spacing(12)\n },\n xxl: {\n height: theme.spacing(20)\n }\n}))\n\n\n\n\nexport const LayoutUnit: React.FC<any> = (props: LayoutUnitProps) => {\n const classes = useStyles(props)\n\n let spaceUnit\n const { unit, highlight } = props\n\n switch (unit) {\n case 'nudge':\n spaceUnit = (\n <div className={clsx(classes.nudge, classes.highlight)}>\n {highlight && <Badge color='secondary' badgeContent='Nudge' />}\n </div>\n )\n break\n case 'xxs':\n spaceUnit = (\n <div className={clsx(classes.xxs, classes.highlight)}>\n {highlight && <Badge color='secondary' badgeContent='XXS' />}\n </div>\n )\n break\n case 'xs':\n spaceUnit = (\n <div className={clsx(classes.xs, classes.highlight)}>\n {highlight && <Badge color='secondary' badgeContent='XS' />}\n </div>\n )\n break\n case 'sm':\n spaceUnit = (\n <div className={clsx(classes.sm, classes.highlight)}>\n {highlight && <Badge color='secondary' badgeContent='SM' />}\n </div>\n )\n break\n case 'md':\n spaceUnit = (\n <div className={clsx(classes.md, classes.highlight)}>\n {highlight && <Badge color='secondary' badgeContent='MD' />}\n </div>\n )\n break\n case 'lg':\n spaceUnit = (\n <div className={clsx(classes.lg, classes.highlight)}>\n {highlight && <Badge color='secondary' badgeContent='LG' />}\n </div>\n )\n break\n case 'xl':\n spaceUnit = (\n <div className={clsx(classes.xl, classes.highlight)}>\n {highlight && <Badge color='secondary' badgeContent='XL' />}\n </div>\n )\n break\n case 'xxl':\n spaceUnit = (\n <div className={clsx(classes.xxl, classes.highlight)}>\n {highlight && <Badge color='secondary' badgeContent='XXL' />}\n </div>\n )\n break\n default:\n }\n\n return spaceUnit\n}\n","import React from 'react'\nimport { makeStyles, Typography } from '@material-ui/core'\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n marginTop: props => props?.removeMarginTop ? 0 : theme.spacing(1),\n whiteSpace: 'nowrap',\n // overflow: 'hidden',\n textOverflow: 'ellipsis'\n }\n}))\n\nexport const StandardTitle = (props) => {\n const classes = useStyles(props)\n const { children, ...other } = props\n\n return (\n <Typography component='h2' variant='h6' className={classes.root} {...other}>\n {children}\n </Typography>\n )\n}\n","import { useEffect, useMemo } from 'react';\nimport useAxios from 'axios-hooks';\nimport { handleResponseErrors, getMergedConfig } from './apiHelpers';\nimport enableAxiosInterceptors from './axiosInterceptors';\nimport { useUser } from './auth/useUser';\nimport { getStoredTenant } from './storage/UnitySessionStorage';\n\nenableAxiosInterceptors();\n/**\n * A custom hook for making GET requests with query parameters.\n * @template T - The expected type of the response data.\n * @param {string} url - The URL for the request.\n * @param {object} [params] - Optional object for query parameters.\n * @param {import('axios').AxiosRequestConfig} [config] - Optional Axios request config.\n * @param {boolean} [isManual] - If true, the request is not made automatically.\n * @returns {import('axios-hooks').AxiosHooksResult<T>}\n */\nexport const useAxiosGetQuery = (url, params, config, isManual) => {\n const user = useUser();\n\n if (!user?.accessToken) {\n isManual = true;\n }\n const headers = useMemo(() => {\n const currentHeaders = config.headers ?? {}\n currentHeaders.currentTenantId ||= user?.currentTenantId ?? ''\n return currentHeaders\n }, [user, config])\n config.headers = headers\n\n const [{ data, loading, error }, refetch] = useAxios(\n { url, params, ...config },\n { manual: isManual }\n );\n useEffect(() => {\n handleResponseErrors(error);\n }, [error]);\n\n return [{ data, loading, error }, refetch];\n};\n/**\n * A custom hook for making GET requests with Axios.\n * @template T - The expected type of the response data.\n * @param {string} baseURL - The base URL for the request.\n * @param {string} url - The URL path for the request.\n * @param {import('axios').AxiosRequestConfig} [config={}] - Optional Axios request config.\n * @param {boolean} [isManual] - If true, the request is not made automatically.\n * @param {boolean} [useCache=true] - If true, caching is enabled.\n * @returns {import('axios-hooks').AxiosHooksResult<T>}\n */\nexport const useAxiosGet = (\n baseURL,\n url,\n config = {},\n isManual,\n useCache = true\n) => {\n const user = useUser();\n\n const headers = useMemo(() => {\n const currentHeaders = config.headers ?? {}\n currentHeaders.currentTenantId ||= user?.currentTenantId ?? ''\n return currentHeaders\n }, [user, config])\n config.headers = headers\n\n const fullURL = { url: `${baseURL}/${url}` };\n const [{ data, loading, error }, refetch] = useAxios(\n { ...fullURL, ...config },\n { manual: isManual, useCache: useCache }\n );\n\n useEffect(() => {\n handleResponseErrors(error);\n }, [error]);\n\n return [{ data, loading, error }, refetch];\n};\n","import warning from 'warning';\nimport useConstant from 'use-constant';\n\nlet idCounter = 0;\nfunction nextId() {\n idCounter += 1;\n warning(\n idCounter < 1e10,\n 'Id: you might have a memory leak.' +\n 'The idCounter is not supposed to grow that much.'\n );\n\n return idCounter;\n}\n\n/**\n * A simple hook that returns a unique page ID\n */\nexport default function useId(name, idFromProps) {\n const id = useConstant(nextId);\n\n if (idFromProps) {\n return idFromProps;\n }\n\n if (process.env.NODE_ENV === 'production') {\n return `uid${id}`;\n }\n\n return `${name || 'unnamed'}-${id}`;\n}\n","import React from 'react';\nimport { Chip, makeStyles } from '@material-ui/core';\nimport clsx from 'clsx';\n\nconst useStyles = makeStyles((theme) => ({\n smallChip: {\n height: theme.spacing(2.5),\n fontSize: '0.7rem',\n '& .MuiChip-label': {\n paddingLeft: theme.spacing(0.75),\n paddingRight: theme.spacing(0.75)\n }\n },\n actionable: {\n cursor: 'pointer'\n },\n success: {\n backgroundColor: theme.palette.success.main,\n color: '#FFF',\n '&.MuiChip-outlined': {\n color: theme.palette.success.main,\n borderColor: theme.palette.success.main,\n backgroundColor: 'transparent'\n }\n },\n warning: {\n backgroundColor: theme.palette.warning.main,\n color: '#FFF',\n '&.MuiChip-outlined': {\n color: theme.palette.warning.main,\n borderColor: theme.palette.warning.main,\n backgroundColor: 'transparent'\n }\n },\n error: {\n backgroundColor: theme.palette.error.main,\n color: '#FFF',\n '&.MuiChip-outlined': {\n color: theme.palette.error.main,\n borderColor: theme.palette.error.main,\n backgroundColor: 'transparent'\n }\n },\n info: {\n backgroundColor: theme.palette.info.main,\n color: theme.palette.getContrastText(theme.palette.info.main),\n '&.MuiChip-outlined': {\n color: theme.palette.info.main,\n borderColor: theme.palette.info.main,\n backgroundColor: 'transparent'\n }\n }\n}));\n\nexport const StatusChip = ({\n status,\n label,\n useSmallChip = false,\n isActionable = false,\n icon,\n variant = 'default',\n onClick,\n}) => {\n const classes = useStyles();\n\n const chipClass = clsx({\n [classes.smallChip]: useSmallChip,\n [classes.actionable]: isActionable,\n [classes.success]: status === 'success',\n [classes.warning]: status === 'warning',\n [classes.error]: status === 'error',\n [classes.info]: status === 'info'\n });\n\n return (\n <Chip\n className={chipClass}\n label={label}\n size='small'\n icon={icon || null}\n variant={variant}\n onClick={isActionable ? onClick : null}\n />\n );\n};\n","import { ConfigService, apiMutate} from 'udp-react-stencil-component-library';\n\nexport const getBaseMethod = (type, baseType, catalogPromotedEntities) => {\n if (!catalogPromotedEntities) {\n return null;\n }\n const entityMethod = catalogPromotedEntities.find((promotedEntity) => {\n const entityNameParts = promotedEntity.entityName.split('.');\n if (entityNameParts.length) {\n return entityNameParts[entityNameParts.length - 1] === type;\n }\n return false;\n });\n return entityMethod ? entityMethod[baseType] : null;\n};\n\nexport const executeQueryAdHoc = async (\n data,\n apiMethodId,\n urlQueryParams = ''\n) =>\n apiMutate(\n ConfigService.integrationV1ApiUrl,\n `apimethod/executeQueryAdHoc/${apiMethodId}${urlQueryParams}`,\n {\n method: 'post'\n },\n data\n );\n\nexport const executeQueryWithParameters = async (\n data,\n apiMethodId,\n urlQueryParams = ''\n) =>\n apiMutate(\n ConfigService.integrationV1ApiUrl,\n `apimethod/executeQueryWithParameters/${apiMethodId}${urlQueryParams}`,\n {\n method: 'post'\n },\n data\n );\n\nexport const executeQueryInstance = async (\n data,\n apiMethodInstanceId,\n urlQueryParams = ''\n) =>\n apiMutate(\n ConfigService.integrationV1ApiUrl,\n `apimethod/executeQueryInstance/${apiMethodInstanceId}${urlQueryParams}`,\n {\n method: 'post'\n },\n data\n );\n\nexport const executeQueryInstanceWithApiMethodInstance = async (\n data,\n urlQueryParams = ''\n) =>\n apiMutate(\n ConfigService.integrationV1ApiUrl,\n `apimethod/executeQueryInstance${urlQueryParams}`,\n {\n method: 'post'\n },\n data\n );\n","import { Tenant } from '../types'\nimport { createContext } from 'react';\n\n\nexport const TenantContext = createContext<{tenantsList: Tenant[], activeTenant: Tenant, refresh: () => void} | null>(null);\n","import { useContext } from \"react\";\nimport { TenantContext } from \"./tenantContext\";\nimport { Tenant } from \"../types\";\n\nexport const useTenant = (): {activeTenant: Tenant, tenantsList: Tenant[], refresh: () => void} | null => {\n return useContext(TenantContext);\n}\n","import React, { useMemo } from 'react';\nimport { useUser } from '../../utilities/auth/useUser';\n// @ts-ignore\nimport { makeStyles } from '@material-ui/core';\nimport { useTenant } from '../../utilities/tenant/useTenant';\nimport { Typography } from '../../UI/dataDisplay/typography/Typography';\nimport { ConfigService } from 'udp-react-stencil-component-library';\n\nexport const APP_RIBBON_SPACE = 25\n\nexport const useBuildEnvironment = (): string | undefined => {\n\tconst user = useUser()\n\n\tconst buildEnvironment = useMemo(() => {\n\n\t\tconst env = ConfigService.config.UNITY_ENVIRONMENT\n\n\t\tif(!['development', 'staging', 'production', 'build'].includes((env as string)?.toLowerCase()) || (env === 'production' && !user?.can?.CAN_VIEW_PROD_APP_RIBBON)) return undefined\n\n\t\treturn env?.toLowerCase();\n\n\n\t}, [user])\n\n\treturn buildEnvironment;\n};\n\nconst useStyles = makeStyles({\n root: {\n width: '100vw',\n height: APP_RIBBON_SPACE,\n backgroundColor: ({environment}: {environment: string | undefined}) => `var(--env-ribbon-${environment})`,\n color: '#ffffff', // Default white text\n display: 'flex',\n alignItems: 'center',\n position: 'relative',\n // Use CSS to handle staging text color\n '&.staging': {\n color: '#000000'\n }\n },\n\tcenterText: {\n position: 'absolute',\n left: '50%',\n transform: 'translateX(-50%)',\n fontWeight: 600\n\t},\n\trightText: {\n position: 'absolute',\n right: '10px',\n fontWeight: 500\n\t}\n});\n\nexport const EnvironmentRibbon = () => {\n\tconst tenantInfo = useTenant()\n\tconst buildEnvironment = useBuildEnvironment()\n\n const classes = useStyles({environment: buildEnvironment});\n if(!buildEnvironment) return null;\n\n return (\n <div\n className={`${classes.root} ${buildEnvironment === 'staging' ? 'staging' : ''}`}\n id='udp-environment-banner'\n >\n <Typography className={classes.centerText}>\n {buildEnvironment?.charAt(0).toUpperCase()+buildEnvironment?.slice(1) || ''}\n </Typography>\n\t\t\t<Typography className={classes.rightText}>\n {tenantInfo?.activeTenant?.tenantName}\n </Typography>\n </div>\n );\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"EnvironmentRibbon-DaDmKAPO.js","names":["useStyles","UserContext: React.Context<User | null>","UserDispatchContext: React.Context<Dispatch | null>","useStyles","props","useStyles","useStyles","useSetInitialShellVisibility: () => void","useStyles","colors","colors","useStyles","Typography","MuiTypography","useStyles","LayoutUnit: React.FC<any>","useStyles","enableAxiosInterceptors","useStyles","Typography"],"sources":["../src/UI/inputs/buttons/FluentButton.jsx","../src/utilities/axiosInterceptors.js","../src/utilities/auth/internal.ts","../src/utilities/auth/useUser.ts","../src/utilities/input/StringUtilities.js","../src/utilities/FluentIcon.jsx","../src/UI/inputs/buttons/FluentIconButton.jsx","../src/enums/unitySystemEnums.ts","../src/utilities/UnityIcon.jsx","../src/utilities/UnityFluentIcon.jsx","../src/stores/shellStore.ts","../src/UI/inputs/buttons/PrimaryActionButton.jsx","../src/utilities/style/colors.js","../src/utilities/style/colorConverter.js","../src/UI/dataDisplay/typography/Typography.jsx","../src/layout/LayoutUnit.tsx","../src/UI/dataDisplay/typography/StandardTitle.jsx","../src/utilities/useAxiosGet.js","../src/UI/widgets/utils/useId.js","../src/UI/dataDisplay/StatusChip.jsx","../src/udp/utilities/methodUtils.js","../src/utilities/tenant/tenantContext.ts","../src/utilities/tenant/useTenant.ts","../src/shell/ui/EnvironmentRibbon.tsx"],"sourcesContent":["import React from 'react';\nimport { makeStyles } from '@material-ui/core';\nimport { Button, CircularProgress } from '@material-ui/core';\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n borderRadius: 2,\n height: (props) => (props.height ? props.height : 32),\n padding: '0 16px',\n minWidth: (props) => (props.minWidth ? props.minWidth : 80),\n border: (props) => `1px solid ${props.color}`\n },\n label: {\n textTransform: 'capitalize',\n fontSize: '0.875rem',\n fontWeight: 600\n }\n}));\n\nexport const FluentButton = (props) => {\n const classes = useStyles(props);\n const { children, id, udprecordid, minWidth, progress, disabled, ...otherProps } =\n props;\n return (\n <Button\n {...otherProps}\n disableElevation\n classes={{\n root: classes.root,\n label: classes.label\n }}\n margin='dense'\n id={id}\n udprecordid={udprecordid}\n minWidth={minWidth}\n disabled={disabled || progress}\n >\n {progress && (\n <CircularProgress\n id={id + '-ButtonProgress'}\n udprecordid={udprecordid + '-ButtonProgress'}\n size={18}\n color='primary'\n />\n )}\n {!progress && children}\n </Button>\n );\n};\n","import Axios from 'axios';\nimport { getAccessToken, getMergedConfig } from './apiHelpers';\nimport { whitelistedPaths } from './auth/whitelistedPaths';\n\nconst axiosInterceptors = () => {\n Axios.interceptors.request.use(\n async (config) => {\n // don't want to change the access token if it's already there, this rule is already applied in getMergedConfig\n // we don't want to call getAccessToken until it is actually need it because it might log the user out\n if (!whitelistedPaths.includes(window.location.pathname)) {\n let accessToken = '';\n if(!config?.headers?.Authorization){\n accessToken = await getAccessToken()\n }\n return getMergedConfig(accessToken, config);\n }\n return config;\n },\n (error) => Promise.reject(error)\n );\n\n Axios.interceptors.response.use(\n (response) => response,\n async (error) => {\n const config = error?.config;\n if (\n error?.response?.status === 401 &&\n !config?._retry &&\n !whitelistedPaths.includes(window.location.pathname)\n ) {\n config.headers.Authorization = `Bearer ${await getAccessToken()}`;\n config._retry = true;\n\n return Axios(config);\n }\n\n return Promise.reject(error);\n }\n );\n};\n\nexport default axiosInterceptors;\n","import { createContext } from 'react';\nimport { User } from './user';\n\nexport type UserAction = { type: 'SET_USER' };\nexport type AccessTokenAction = { type: 'SET_ACCESS_TOKEN' };\nexport type Dispatch = (action: UserAction | AccessTokenAction) => void;\nexport const UserContext: React.Context<User | null> = createContext<User | null>(null);\nexport const UserDispatchContext: React.Context<Dispatch | null> = createContext<Dispatch | null>(null);\n","import { useContext } from 'react';\nimport { UserContext } from './internal';\nimport { User } from './user';\n\n/**\n * Get the current User object (or null if not logged in)\n *\n * Does not redirect to login\n * @see {@link useAuthedUser}\n */\nexport function useUser(): User | null {\n return useContext(UserContext);\n}\n","export const removeWhiteSpace = (str) => {\n if (!str) {\n return '';\n }\n return str.replace(/\\s/g, '');\n};\n\nexport const camelToPascalCaseWithSpace = (str) => {\n const capitalizedStr = str.charAt(0).toUpperCase() + str.slice(1);\n return capitalizedStr.replace(/([a-z0-9])([A-Z])/g, '$1 $2');\n};\n\nexport const trimStringAfter = (str, character) => {\n const lastIndex = str.lastIndexOf(character);\n return str.substring(0, lastIndex === -1 ? str.length : lastIndex);\n};\n\nexport const toLowerFirstChar = (field) => {\n return field?.charAt(0)?.toLowerCase() + field?.slice(1);\n};\n\nexport const toUpperFirstChar = (field) => {\n return field?.charAt(0)?.toUpperCase() + field?.slice(1);\n};\n\nexport const toTitleCase = (str) => {\n const result = str\n .replace(/([A-Z][a-z]+)/g, ' $1')\n .replace(/([A-Z]+)\\b/g, ' $1')\n .replace(/_/g, ' ')\n .trim();\n return result.charAt(0).toUpperCase() + result.slice(1);\n};\n\nexport const pluralize = (str) => {\n const last = str.charAt(str.length - 1);\n if (last === 's') {\n return str;\n } else {\n return `${str}s`;\n }\n};\n","import React from 'react';\nimport { makeStyles } from '@material-ui/core';\nimport clsx from 'clsx';\n\nconst useStyles = makeStyles(\n (props) => ({\n root: {\n display: 'inline-block',\n '& > svg': {\n display: 'inherit'\n }\n },\n default: {\n fontSize: 18,\n width: 18,\n height: 18\n },\n large: {\n fontSize: 24,\n width: 24,\n height: 24\n },\n medium: {\n fontSize: 16,\n width: 16,\n height: 16\n },\n small: {\n fontSize: 14,\n width: 14,\n height: 14\n },\n xs: {\n fontSize: 12,\n width: 12,\n height: 12\n },\n color: {\n color: (props) => props.color\n },\n customSize: {\n fontSize: (props) => props.size,\n width: (props) => props.size,\n height: (props) => props.size\n }\n }),\n { name: 'FluentIcon' }\n);\n\n/**\n * Wrapper for @fluentui/react-icons to provide it with required size\n */\nexport const FluentIcon = (props) => {\n const classes = useStyles(props);\n const {\n component: IconComponent,\n size = 'default',\n className,\n color,\n customSize = false,\n ...otherProps\n } = props;\n\n return (\n <IconComponent\n {...otherProps}\n className={clsx(\n classes.root,\n className,\n (customSize && typeof size === 'number' && classes['customSize']) ||\n classes[size],\n color && classes['color']\n )}\n />\n );\n};\n","import React from 'react'\nimport { makeStyles, IconButton } from '@material-ui/core'\nimport { FluentIcon } from '../../../utilities/FluentIcon'\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n borderRadius: (props) => (props.rounded ? 50 : 2),\n width: (props) => (props.rounded ? theme.spacing(4) : theme.spacing(1)),\n height: (props) => (props.rounded ? theme.spacing(4) : theme.spacing(1)),\n border: (props) => props.rounded && `1px solid ${theme.palette.divider}`,\n background: (props) => props.rounded && theme.palette.common.white\n }\n}))\n\nexport const FluentIconButton = (props) => {\n const classes = useStyles(props)\n const { icon, size = 'medium', id, udprecordid, ...otherProps } = props\n return (\n <IconButton\n {...otherProps}\n classes={{\n root: classes.root\n }}\n udprecordid={udprecordid}\n >\n <FluentIcon component={icon} size={size} id={id} />\n </IconButton>\n )\n}\n","export enum GridEnums {\n Ideas = 'f3c1bf72-15fd-4dcd-904c-b67850525cff',\n Tickets = '787a2afc-26df-440a-9040-9a3e5c5333d5',\n Users = '4ea9fe5d-0af3-4102-af95-4d4a5ca886e1',\n Tenants = 'b543fc1d-6f45-469e-87ae-2b18b8200955',\n Roles = '9af2eebb-7687-4b3c-91fa-607efb0a5fea',\n Inquiry = 'ac0b9a3a-d113-4590-93db-dea62bcb89a2',\n Groups = 'c599b6ff-fee3-4ade-bf78-16700fddb5b9'\n}\n\nexport enum GridStateTypeEnums {\n Column = 1,\n Pivot_Mode = 2,\n Column_Sort = 3,\n Column_Filter = 4,\n Column_Group = 5\n}\n\nexport enum MenuTypeEnums {\n Left_Menu = 1,\n Application_Menu = 2,\n Builders_Menu = 3,\n Favorites_Menu = 4\n}\n\nexport enum VerticalEnums {\n Engage = 1,\n Manage = 2,\n Build = 3,\n Play = 4\n}\n\nexport enum MenuItemEnums {\n Container = 'b36cec3c-fe05-47ed-a687-70be22b0e200',\n External_Link = '11758dfd-ac3a-4996-b86c-767947776ff8',\n Data_Browser = 'afc3833e-e288-4cf6-8155-a069ec4ddc5a',\n Report = '22763e92-2477-43c3-92db-124a84e5ff7f',\n Page = 'd506aeef-ba1b-49a8-9032-beba450b11bc',\n Page_Builder = '16df758b-c456-4c8c-8ca3-2ae167b3b078',\n Route = 'ec5f1c26-e7e1-4f19-8e6e-143308995a40',\n Tree_Builder = 'd4379c4f-6496-4caa-bc0d-5f297fea580f',\n Inquiry = 'b45f660f-a172-4444-8dd8-8f51d56e0725',\n Scheduler = '4007feb9-e50c-44f9-8502-a1f337d82bcf',\n Config = 'aeb48be9-09ea-49b3-9f21-486fe3545b2d',\n Action = 'a66e9458-2540-4166-9b26-1e9b44a2b080',\n Inner_Menu = 'c4f7b46c-00b8-428e-b982-1639c03fde20'\n}\n\nexport enum ADUserTypeEnums {\n Guest = 'Guest',\n Member = 'Member'\n}\n\nexport enum ProductEnums {\n Unity = 1\n}\n\nexport enum RoleTypeEnums {\n System = 1,\n Tenant = 2\n}\n\nexport enum LookupTypeEnums {\n No_Lookup = 'NO_LOOKUP',\n Api = 'API',\n Csv = 'CSV',\n Domain = 'DOMAIN',\n Lookup = 'LOOKUP'\n}\n\nexport enum SearchValueType {\n String = 'String',\n Int = 'Int',\n Long = 'Long',\n Double = 'Double',\n Boolean = 'Boolean',\n DateTime = 'DateTime'\n}\n\nexport enum SearchGroupingType {\n Distinct = 'DISTINCT',\n Aggregate = 'AGGREGATE'\n}\n\nexport enum SearchSortDirection {\n Asc = 'ASC',\n Desc = 'DESC'\n}\n\nexport enum RoleNameEnums {\n System_Administrator = 'System Administrator',\n Company_Administrator = 'Company Administrator',\n Developer = 'Developer'\n}\n\nexport enum ProductNameEnums {\n Asset_Management = 'Asset Management',\n Asset_Routing = 'Asset Routing',\n AVI = 'AVI',\n Cashiering = 'Cashiering',\n Citizen_Portal = 'Citizen Portal',\n Compliance = 'Compliance',\n Consumer_Engagement = 'Consumer Engagement',\n Consumer_Information = 'Consumer Information',\n Contact_Center = 'Contact Center',\n Course_Management = 'Course Management',\n Crew_Routing = 'Crew Routing',\n Dispatch = 'Dispatch',\n Dispatch_Admin = 'Dispatch Admin',\n Employee_Network = 'Employee Network',\n Energy_Management = 'Energy Management',\n Equipment_Inspection = 'Equipment Inspection',\n Facility_Management = 'Facility Management',\n Field_Mobility = 'Field Mobility',\n Fixed_Assets = 'Fixed Assets',\n Fleet_Management = 'Fleet Management',\n Health_And_Safety = 'Health & Safety',\n Instructor_Application = 'Instructor Application',\n MDM = 'MDM',\n Member_Management = 'Member Management',\n Page_Builder = 'Page Builder',\n Project_Management = 'Project Management',\n Rentals = 'Rentals',\n Unity = 'Unity',\n Work_Orders = 'Work Orders'\n}\n\nexport enum LogicalSearchOperatorEnums {\n And = 1,\n Or = 2\n}\n\nexport enum NodeActionTriggerEnums {\n On_Node_Drop = 1\n}\n\nexport enum NodeActionEnums {\n Load_Inquiry_Page = 1,\n Execute_Api = 2,\n Start_Workflow = 3,\n Create = 4,\n Update = 5,\n Delete = 6,\n Retrieve = 7,\n Open_Inquiry = 8,\n Open_Maintenance_Engine = 9,\n Redirect = 10,\n Open_External_Link = 11,\n Hide = 12,\n Disable = 13,\n Open_Page_Split_Screen = 14,\n Open_Shell_Split_Screen = 15,\n Open_Notes = 16,\n Open_Reminders = 17,\n Execute_Function = 18\n}\n\nexport enum TreeViewModeEnums {\n Classic = 1,\n Compact = 2\n}\n\nexport enum PanelPositionEnums {\n Site_Header = 1,\n Site_Header_Summary = 2,\n Speed_Dial = 3,\n Inquiry_Header = 4,\n Inquiry_Header_Summary = 5\n}\n\nexport enum CardinalityTypeEnums {\n One_To_One = 0,\n One_To_Many = 1,\n Many_To_Many = 2,\n Many_To_One = 3\n}\n\nexport enum SplitScreenTypeEnums {\n Entity = 1,\n Notes = 2,\n Page = 3,\n Reminders = 4\n}\n\nexport enum UdpEnums {\n Udp_Note_Type = 'UdpNoteType',\n Udp_Note_Template = 'UdpNoteTemplate',\n Udp_Note = 'UdpNote',\n Udp_Note_Filed_For = 'UdpNoteFiledFor',\n Udp_Shortcut_Content = 'UdpShortcutContent',\n Udp_Lookup = 'UdpLookup',\n Udp_Reminder_Type = 'UdpReminderType',\n Udp_Reminder_Template = 'UdpReminderTemplate',\n Udp_Reminder = 'UdpReminder',\n Udp_Reminder_Filed_For = 'UdpReminderFiledFor'\n}\n\nexport enum NodeGroupTypeEnums {\n Static = 'static',\n Dynamic = 'dynamic'\n}\n\nexport enum NodeGroupOutlierEnums {\n Hide = 'hide',\n Group = 'group',\n Individual = 'individual'\n}\n\nexport enum LookupTypeIdEnums {\n Api = 1,\n Csv = 2,\n Domain = 3,\n Lookup = 4\n}\n\nexport enum VisibilityTypeEnums {\n Private = 1,\n Public = 2\n}\n\nexport enum SeverityTypeEnums {\n Success = 'success',\n Error = 'error',\n Warning = 'warning',\n Info = 'info',\n Default = 'default'\n}\n\nexport enum UdpKeywordEnums {\n Udp_Tenant_Id = 'UDP_TENANT_ID',\n Udp_Product_Id = 'UDP_PRODUCT_ID',\n Udp_Language_Id = 'UDP_LANGUAGE_ID'\n}\n\nexport const enum JobStatusIdMapping {\n PENDING = 1,\n IN_PROGRESS = 2,\n COMPLETED = 3,\n FAILED = 4\n}\n\nexport const enum JobTypeIdMapping {\n IMPORT = 1,\n EXPORT = 2\n}\n\nexport enum UdpReminderFiledForType {\n User = 1,\n System = 2\n}\n\nexport enum DeviceTypeEnums {\n Desktop = 1,\n Tablet = 2,\n Mobile = 3\n}\n\nexport enum ContainerTypeEnums {\n Sidesheet = 1,\n SplitScreen = 2,\n Page = 3\n}\n\nexport enum TenantTypeEnums {\n Tenant = 1,\n Product = 2\n}\n\nexport enum EntityAttributeEnums {\n Is_Product_ShortcutContent = 'IsProductShortcutContent',\n Is_Product_Lookup = 'IsProductLookup',\n User_Defined = 'UserDefined',\n Domain_Name = 'DomainName'\n}\n\nexport enum RoleIdEnums {\n Unity_System_Administrator = '302dacf5-bf16-412d-bf66-519d4c3491c3'\n}\n","import React from 'react';\nimport { makeStyles } from '@material-ui/core';\nimport clsx from 'clsx';\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n display: 'flex',\n fill: (props) => props.color || 'black'\n },\n showcase: {\n fontSize: 38,\n width: 38,\n height: 38\n },\n large: {\n fontSize: 20,\n width: 20,\n height: 20\n },\n default: {\n fontSize: 18,\n width: 18,\n height: 18\n },\n medium: {\n fontSize: 16,\n width: 16,\n height: 16\n },\n small: {\n fontSize: 14,\n width: 14,\n height: 14\n },\n xs: {\n fontSize: 12,\n width: 12,\n height: 12\n }\n}));\n\nexport const UnityIcon = (props) => {\n const { component, size = 'default', className, ...otherProps } = props;\n const classes = useStyles(props);\n\n return (\n <div\n {...otherProps}\n className={clsx(classes.root, className, classes[size])}\n >\n {component}\n </div>\n );\n};\n","import React from 'react';\nimport { UnityIcon } from './UnityIcon';\nimport { FluentIcon } from './FluentIcon';\n\nexport const UnityFluentIcon = (props) => {\n const { type, icon, color, ...other } = props;\n\n if (!icon) {\n return null;\n }\n\n return type === 'unity' ? (\n <UnityIcon component={icon} color={color} {...other} />\n ) : (\n <FluentIcon component={icon} style={{ color: color || '' }} {...other} />\n );\n};\n","import { useEffect } from 'react';\nimport { create } from 'zustand';\nimport { devtools } from 'zustand/middleware';\nimport { ContainerTypeEnums } from '../enums/unitySystemEnums';\n\ninterface ShellState {\n subHeaderActionHasChildren: boolean | null | undefined;\n setSubHeaderActionHasChildren: (subHeaderActionHasChildren: boolean) => void;\n navigationExpanded: boolean | null | undefined;\n setNavigationExpanded: (navigationExpanded: boolean) => void;\n setIsValidWidget: (isValidWidget: (a: string) => boolean) => void;\n isValidWidget: (a: string) => boolean;\n setGetWidget: (getWidget: (a: string) => any) => void;\n getWidget: (a: string) => any;\n shellHidden: boolean | null | undefined;\n setShellHidden: (shellHidden: boolean) => void;\n currentContainerId: string | null | undefined;\n setCurrentContainerId: (containerId: string) => void;\n}\n\nexport const useShellStore = create<ShellState>()(\n devtools((set) => ({\n subHeaderActionHasChildren: false,\n setSubHeaderActionHasChildren: (subHeaderActionHasChildren) =>\n set((state) => ({\n subHeaderActionHasChildren: subHeaderActionHasChildren\n })),\n navigationExpanded: true,\n setNavigationExpanded: (navigationExpanded) =>\n set((state) => ({\n navigationExpanded: navigationExpanded\n })),\n isValidWidget: (a) => false,\n setIsValidWidget: (isValidWidget) =>\n set((state) => ({\n isValidWidget: isValidWidget\n })),\n getWidget: (a) => null,\n setGetWidget: (getWidget) =>\n set((state) => ({\n getWidget: getWidget\n })),\n shellHidden: false,\n setShellHidden: (shellHidden) =>\n set((state) => ({\n shellHidden: shellHidden\n })),\n currentContainerId: null,\n setCurrentContainerId: (currentContainerId) =>\n set((state) => ({ currentContainerId: currentContainerId }))\n }))\n);\n\nexport const useSetInitialShellVisibility: () => void = () => {\n const searchParams = new URLSearchParams(window.location.search);\n const withoutShell =\n searchParams.has('withoutShell') === true\n ? searchParams.get('withoutShell') === 'true'\n ? true\n : false\n : false;\n\n const setShellHidden = useShellStore((state) => state.setShellHidden);\n\n useEffect(() => {\n if (withoutShell) {\n setShellHidden(true);\n }\n }, [setShellHidden, withoutShell]);\n};\n","import React from 'react'\nimport { makeStyles, Button } from '@material-ui/core'\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n borderRadius: 0,\n padding: 'calc(.875rem - 3px) 23px calc(.875rem - 3px) 15px'\n },\n label: {\n textTransform: 'none'\n },\n endIcon: {\n display: 'flex',\n justifyContent: 'flex-end',\n marginLeft: theme.spacing(2)\n }\n}))\n\nexport const PrimaryActionButton = ({ children, icon, ...otherProps }) => {\n const classes = useStyles()\n\n return (\n <div>\n <Button\n {...otherProps}\n disableElevation\n classes={{\n root: classes.root,\n label: classes.label,\n endIcon: classes.endIcon\n }}\n variant='contained'\n color='secondary'\n endIcon={icon}\n >\n {children}\n </Button>\n </div>\n )\n}\nexport default PrimaryActionButton\n","export const colors = {\n systemIcon: {\n trigger: {\n main: '#FFCD27',\n hint: '#FDFAF0',\n hover: { outline: '#AF9027', background: '#FFFDEF' }\n },\n action: {\n main: '#1542FF',\n hint: '#F3F5FE',\n hover: { outline: '#40529D', background: '#ECEFFA' }\n },\n condition: {\n main: '#AE14FF',\n hint: '#F9EEFF',\n hover: { outline: '#844EA0', background: '#FAF2FE' }\n },\n sequence: {\n main: '#FD7F12',\n hint: '#FFF6EE',\n hover: { outline: '#A86123', background: '#FDF4EC' }\n }\n },\n unity: {\n success: {\n hint: '#F3FAF3'\n },\n warning: {\n hint: '#FFF6EA'\n },\n info: {\n hint: '#F3F9FE'\n },\n error: {\n hint: '#FDF7F6'\n }\n },\n categoryColors: {\n one: {\n hint: '#F8BBD0',\n main: '#F3FAF3'\n },\n two: {\n hint: '#FFF6EA',\n main: '#FFF6EA'\n },\n three: {\n hint: '#FFF6EA',\n main: '#FFF6EA'\n },\n four: {\n hint: '#F8BBD0',\n main: '#f3e0eb'\n },\n five: {\n hint: '#F8BBD0',\n main: 'rgb(194 223 218)'\n },\n six: {\n hint: '#F8BBD0',\n main: 'rgb(222 217 235)'\n }\n }\n};\n","import { colors } from './colors';\n\nexport const getEllipseColor = (theme, color, variant = 'main') => {\n if (!theme) {\n return '';\n }\n let ellipseColor = theme.palette.primary[variant];\n switch (color) {\n case 'action':\n ellipseColor = theme.palette.action?.[variant];\n break;\n case 'sequence':\n ellipseColor = theme.palette.sequence?.[variant];\n break;\n case 'trigger':\n ellipseColor = theme.palette.trigger?.[variant];\n break;\n case 'condition':\n ellipseColor = theme.palette.condition?.[variant];\n break;\n case 'primary':\n ellipseColor = theme.palette.primary[variant];\n break;\n case 'secondary':\n ellipseColor = theme.palette.secondary[variant];\n break;\n case 'info':\n ellipseColor = theme.palette.info[variant];\n break;\n case 'warning':\n ellipseColor = theme.palette.warning[variant];\n break;\n case 'error':\n ellipseColor = theme.palette.error[variant];\n break;\n case 'success':\n ellipseColor = theme.palette.success[variant];\n break;\n default:\n ellipseColor = theme.palette.secondary[variant];\n break;\n }\n return ellipseColor;\n};\n\nexport const getCustomHintColor = (color) => {\n // if (!theme) {\n // return '';\n // }\n let customHintColor = colors.unity.info.hint;\n switch (color) {\n // case 'primary':\n // customHintColor = theme.palette.primary.hint;\n // break;\n // case 'secondary':\n // customHintColor = theme.palette.secondary.hint;\n // break;\n case 'info':\n customHintColor = colors.unity.info.hint;\n break;\n case 'warning':\n customHintColor = colors.unity.warning.hint;\n break;\n case 'error':\n customHintColor = colors.unity.error.hint;\n break;\n case 'success':\n customHintColor = colors.unity.success.hint;\n break;\n default:\n customHintColor = colors.unity.info.hint;\n }\n\n return customHintColor;\n};\n\nexport const getCategoryColor = (color) => {\n // if (!theme) {\n // return '';\n // }\n let highlightColor = colors.unity.info.hint;\n switch (color) {\n case 'info':\n highlightColor = colors.unity.info.hint;\n break;\n case 'warning':\n highlightColor = colors.unity.warning.hint;\n break;\n case 'error':\n highlightColor = colors.unity.error.hint;\n break;\n case 'four':\n highlightColor = colors.categoryColors.four.main;\n break;\n case 'five':\n highlightColor = colors.categoryColors.five.main;\n break;\n case 'six':\n highlightColor = colors.categoryColors.six.main;\n break;\n default:\n highlightColor = colors.unity.info.hint;\n }\n\n return highlightColor;\n};\n","import React from 'react';\nimport { Typography as MuiTypography, makeStyles } from '@material-ui/core';\nimport clsx from 'clsx';\nimport { getEllipseColor } from '../../../utilities/style/colorConverter';\n\nconst useStyles = makeStyles((theme) => ({\n typography: {\n color: (props) => props?.color && getEllipseColor(theme, props?.color)\n }\n}));\nexport const Typography = (props) => {\n const {\n variant,\n align,\n children,\n className,\n noWrap = false,\n paragraph = false,\n color\n } = props;\n const classes = useStyles(props);\n\n return (\n <MuiTypography\n variant={variant}\n align={align}\n className={clsx({[classes.typography]: color}, className)}\n noWrap={noWrap}\n paragraph={paragraph}\n >\n {children}\n </MuiTypography>\n );\n};\n","import React from 'react'\nimport { makeStyles, Badge } from '@material-ui/core'\nimport clsx from 'clsx'\n\ntype LayoutUnitProps = {\n unit: 'nudge' | 'xxs' | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | 'xxl',\n highlight: any\n}\n\nconst useStyles = makeStyles((theme) => ({\n highlight: {\n background: 'pink',\n opacity: (props:LayoutUnitProps) => (props.highlight ? 0.2 : 0)\n },\n nudge: {\n height: theme.spacing(1)\n },\n xxs: {\n height: theme.spacing(2)\n },\n xs: {\n height: theme.spacing(3)\n },\n sm: {\n height: theme.spacing(4)\n },\n md: {\n height: theme.spacing(5)\n },\n lg: {\n height: theme.spacing(8)\n },\n xl: {\n height: theme.spacing(12)\n },\n xxl: {\n height: theme.spacing(20)\n }\n}))\n\n\n\n\nexport const LayoutUnit: React.FC<any> = (props: LayoutUnitProps) => {\n const classes = useStyles(props)\n\n let spaceUnit\n const { unit, highlight } = props\n\n switch (unit) {\n case 'nudge':\n spaceUnit = (\n <div className={clsx(classes.nudge, classes.highlight)}>\n {highlight && <Badge color='secondary' badgeContent='Nudge' />}\n </div>\n )\n break\n case 'xxs':\n spaceUnit = (\n <div className={clsx(classes.xxs, classes.highlight)}>\n {highlight && <Badge color='secondary' badgeContent='XXS' />}\n </div>\n )\n break\n case 'xs':\n spaceUnit = (\n <div className={clsx(classes.xs, classes.highlight)}>\n {highlight && <Badge color='secondary' badgeContent='XS' />}\n </div>\n )\n break\n case 'sm':\n spaceUnit = (\n <div className={clsx(classes.sm, classes.highlight)}>\n {highlight && <Badge color='secondary' badgeContent='SM' />}\n </div>\n )\n break\n case 'md':\n spaceUnit = (\n <div className={clsx(classes.md, classes.highlight)}>\n {highlight && <Badge color='secondary' badgeContent='MD' />}\n </div>\n )\n break\n case 'lg':\n spaceUnit = (\n <div className={clsx(classes.lg, classes.highlight)}>\n {highlight && <Badge color='secondary' badgeContent='LG' />}\n </div>\n )\n break\n case 'xl':\n spaceUnit = (\n <div className={clsx(classes.xl, classes.highlight)}>\n {highlight && <Badge color='secondary' badgeContent='XL' />}\n </div>\n )\n break\n case 'xxl':\n spaceUnit = (\n <div className={clsx(classes.xxl, classes.highlight)}>\n {highlight && <Badge color='secondary' badgeContent='XXL' />}\n </div>\n )\n break\n default:\n }\n\n return spaceUnit\n}\n","import React from 'react'\nimport { makeStyles, Typography } from '@material-ui/core'\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n marginTop: props => props?.removeMarginTop ? 0 : theme.spacing(1),\n whiteSpace: 'nowrap',\n // overflow: 'hidden',\n textOverflow: 'ellipsis'\n }\n}))\n\nexport const StandardTitle = (props) => {\n const classes = useStyles(props)\n const { children, ...other } = props\n\n return (\n <Typography component='h2' variant='h6' className={classes.root} {...other}>\n {children}\n </Typography>\n )\n}\n","import { useEffect, useMemo } from 'react';\nimport useAxios from 'axios-hooks';\nimport { handleResponseErrors, getMergedConfig } from './apiHelpers';\nimport enableAxiosInterceptors from './axiosInterceptors';\nimport { useUser } from './auth/useUser';\nimport { getStoredTenant } from './storage/UnitySessionStorage';\n\nenableAxiosInterceptors();\n/**\n * A custom hook for making GET requests with query parameters.\n * @template T - The expected type of the response data.\n * @param {string} url - The URL for the request.\n * @param {object} [params] - Optional object for query parameters.\n * @param {import('axios').AxiosRequestConfig} [config] - Optional Axios request config.\n * @param {boolean} [isManual] - If true, the request is not made automatically.\n * @returns {import('axios-hooks').AxiosHooksResult<T>}\n */\nexport const useAxiosGetQuery = (url, params, config, isManual) => {\n const user = useUser();\n\n if (!user?.accessToken) {\n isManual = true;\n }\n const headers = useMemo(() => {\n const currentHeaders = config.headers ?? {}\n currentHeaders.currentTenantId ||= user?.currentTenantId ?? ''\n return currentHeaders\n }, [user, config])\n config.headers = headers\n\n const [{ data, loading, error }, refetch] = useAxios(\n { url, params, ...config },\n { manual: isManual }\n );\n useEffect(() => {\n handleResponseErrors(error);\n }, [error]);\n\n return [{ data, loading, error }, refetch];\n};\n/**\n * A custom hook for making GET requests with Axios.\n * @template T - The expected type of the response data.\n * @param {string} baseURL - The base URL for the request.\n * @param {string} url - The URL path for the request.\n * @param {import('axios').AxiosRequestConfig} [config={}] - Optional Axios request config.\n * @param {boolean} [isManual] - If true, the request is not made automatically.\n * @param {boolean} [useCache=true] - If true, caching is enabled.\n * @returns {import('axios-hooks').AxiosHooksResult<T>}\n */\nexport const useAxiosGet = (\n baseURL,\n url,\n config = {},\n isManual,\n useCache = true\n) => {\n const user = useUser();\n\n const headers = useMemo(() => {\n const currentHeaders = config.headers ?? {}\n currentHeaders.currentTenantId ||= user?.currentTenantId ?? ''\n return currentHeaders\n }, [user, config])\n config.headers = headers\n\n const fullURL = { url: `${baseURL}/${url}` };\n const [{ data, loading, error }, refetch] = useAxios(\n { ...fullURL, ...config },\n { manual: isManual, useCache: useCache }\n );\n\n useEffect(() => {\n handleResponseErrors(error);\n }, [error]);\n\n return [{ data, loading, error }, refetch];\n};\n","import warning from 'warning';\nimport useConstant from 'use-constant';\n\nlet idCounter = 0;\nfunction nextId() {\n idCounter += 1;\n warning(\n idCounter < 1e10,\n 'Id: you might have a memory leak.' +\n 'The idCounter is not supposed to grow that much.'\n );\n\n return idCounter;\n}\n\n/**\n * A simple hook that returns a unique page ID\n */\nexport default function useId(name, idFromProps) {\n const id = useConstant(nextId);\n\n if (idFromProps) {\n return idFromProps;\n }\n\n if (process.env.NODE_ENV === 'production') {\n return `uid${id}`;\n }\n\n return `${name || 'unnamed'}-${id}`;\n}\n","import React from 'react';\nimport { Chip, makeStyles } from '@material-ui/core';\nimport clsx from 'clsx';\n\nconst useStyles = makeStyles((theme) => ({\n smallChip: {\n height: theme.spacing(2.5),\n fontSize: '0.7rem',\n '& .MuiChip-label': {\n paddingLeft: theme.spacing(0.75),\n paddingRight: theme.spacing(0.75)\n }\n },\n actionable: {\n cursor: 'pointer'\n },\n success: {\n backgroundColor: theme.palette.success.main,\n color: '#FFF',\n '&.MuiChip-outlined': {\n color: theme.palette.success.main,\n borderColor: theme.palette.success.main,\n backgroundColor: 'transparent'\n }\n },\n warning: {\n backgroundColor: theme.palette.warning.main,\n color: '#FFF',\n '&.MuiChip-outlined': {\n color: theme.palette.warning.main,\n borderColor: theme.palette.warning.main,\n backgroundColor: 'transparent'\n }\n },\n error: {\n backgroundColor: theme.palette.error.main,\n color: '#FFF',\n '&.MuiChip-outlined': {\n color: theme.palette.error.main,\n borderColor: theme.palette.error.main,\n backgroundColor: 'transparent'\n }\n },\n info: {\n backgroundColor: theme.palette.info.main,\n color: theme.palette.getContrastText(theme.palette.info.main),\n '&.MuiChip-outlined': {\n color: theme.palette.info.main,\n borderColor: theme.palette.info.main,\n backgroundColor: 'transparent'\n }\n }\n}));\n\nexport const StatusChip = ({\n status,\n label,\n useSmallChip = false,\n isActionable = false,\n icon,\n variant = 'default',\n onClick,\n}) => {\n const classes = useStyles();\n\n const chipClass = clsx({\n [classes.smallChip]: useSmallChip,\n [classes.actionable]: isActionable,\n [classes.success]: status === 'success',\n [classes.warning]: status === 'warning',\n [classes.error]: status === 'error',\n [classes.info]: status === 'info'\n });\n\n return (\n <Chip\n className={chipClass}\n label={label}\n size='small'\n icon={icon || null}\n variant={variant}\n onClick={isActionable ? onClick : null}\n />\n );\n};\n","import { ConfigService, apiMutate} from 'udp-react-stencil-component-library';\n\nexport const getBaseMethod = (type, baseType, catalogPromotedEntities) => {\n if (!catalogPromotedEntities) {\n return null;\n }\n const entityMethod = catalogPromotedEntities.find((promotedEntity) => {\n const entityNameParts = promotedEntity.entityName.split('.');\n if (entityNameParts.length) {\n return entityNameParts[entityNameParts.length - 1] === type;\n }\n return false;\n });\n return entityMethod ? entityMethod[baseType] : null;\n};\n\nexport const executeQueryAdHoc = async (\n data,\n apiMethodId,\n urlQueryParams = ''\n) =>\n apiMutate(\n ConfigService.integrationV1ApiUrl,\n `apimethod/executeQueryAdHoc/${apiMethodId}${urlQueryParams}`,\n {\n method: 'post'\n },\n data\n );\n\nexport const executeQueryWithParameters = async (\n data,\n apiMethodId,\n urlQueryParams = ''\n) =>\n apiMutate(\n ConfigService.integrationV1ApiUrl,\n `apimethod/executeQueryWithParameters/${apiMethodId}${urlQueryParams}`,\n {\n method: 'post'\n },\n data\n );\n\nexport const executeQueryInstance = async (\n data,\n apiMethodInstanceId,\n urlQueryParams = ''\n) =>\n apiMutate(\n ConfigService.integrationV1ApiUrl,\n `apimethod/executeQueryInstance/${apiMethodInstanceId}${urlQueryParams}`,\n {\n method: 'post'\n },\n data\n );\n\nexport const executeQueryInstanceWithApiMethodInstance = async (\n data,\n urlQueryParams = ''\n) =>\n apiMutate(\n ConfigService.integrationV1ApiUrl,\n `apimethod/executeQueryInstance${urlQueryParams}`,\n {\n method: 'post'\n },\n data\n );\n","import { Tenant } from '../types'\nimport { createContext } from 'react';\n\n\nexport const TenantContext = createContext<{tenantsList: Tenant[], activeTenant: Tenant, refresh: () => void} | null>(null);\n","import { useContext } from \"react\";\nimport { TenantContext } from \"./tenantContext\";\nimport { Tenant } from \"../types\";\n\nexport const useTenant = (): {activeTenant: Tenant, tenantsList: Tenant[], refresh: () => void} | null => {\n return useContext(TenantContext);\n}\n","import React, { useMemo } from 'react';\nimport { useUser } from '../../utilities/auth/useUser';\n// @ts-ignore\nimport { makeStyles } from '@material-ui/core';\nimport { useTenant } from '../../utilities/tenant/useTenant';\nimport { Typography } from '../../UI/dataDisplay/typography/Typography';\nimport { ConfigService } from 'udp-react-stencil-component-library';\n\nexport const APP_RIBBON_SPACE = 25\n\nexport const useBuildEnvironment = (): string | undefined => {\n\tconst user = useUser()\n\n\tconst buildEnvironment = useMemo(() => {\n\n\t\tconst env = ConfigService.config.UNITY_ENVIRONMENT\n\n\t\tif(!['development', 'staging', 'production', 'build'].includes((env as string)?.toLowerCase()) || (env === 'production' && !user?.can?.CAN_VIEW_PROD_APP_RIBBON)) return undefined\n\n\t\treturn env?.toLowerCase();\n\n\n\t}, [user])\n\n\treturn buildEnvironment;\n};\n\nconst useStyles = makeStyles({\n root: {\n width: '100vw',\n height: APP_RIBBON_SPACE,\n backgroundColor: ({environment}: {environment: string | undefined}) => `var(--env-ribbon-${environment})`,\n color: '#ffffff', // Default white text\n display: 'flex',\n alignItems: 'center',\n position: 'relative',\n // Use CSS to handle staging text color\n '&.staging': {\n color: '#000000'\n }\n },\n\tcenterText: {\n position: 'absolute',\n left: '50%',\n transform: 'translateX(-50%)',\n fontWeight: 600\n\t},\n\trightText: {\n position: 'absolute',\n right: '10px',\n fontWeight: 500\n\t}\n});\n\nexport const EnvironmentRibbon = () => {\n\tconst tenantInfo = useTenant()\n\tconst buildEnvironment = useBuildEnvironment()\n\n const classes = useStyles({environment: buildEnvironment});\n if(!buildEnvironment) return null;\n\n return (\n <div\n className={`${classes.root} ${buildEnvironment === 'staging' ? 'staging' : ''}`}\n id='udp-environment-banner'\n >\n <Typography className={classes.centerText}>\n {buildEnvironment?.charAt(0).toUpperCase()+buildEnvironment?.slice(1) || ''}\n </Typography>\n\t\t\t<Typography className={classes.rightText}>\n {tenantInfo?.activeTenant?.tenantName}\n </Typography>\n </div>\n );\n};\n"],"mappings":"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"}
@@ -1,12 +1,12 @@
1
- import { APP_RIBBON_SPACE, FluentIcon, NodeActionTriggerEnums, TreeViewModeEnums, UnityFluentIcon, useAxiosGet, useBuildEnvironment, useShellStore, useUser } from "./EnvironmentRibbon-BMvQEZPZ.js";
2
- import "./apiHelpers-t3rfkjFZ.js";
3
- import { AggregateChip, NodeLoader, UtilitySideBar, findAllParentIds, getIconFromName, getNodeIdForRightBorder, getUnityIconFromName, searchTree, transformMenuPageTree } from "./UtilitySideBar-B4r2IAv5.js";
4
- import "./SearchUtilities-dbXvMYoa.js";
5
- import { PageContainer, useSetLocationState } from "./PageContainer-B65gsUfF.js";
6
- import React, { useCallback, useEffect, useState } from "react";
1
+ import { APP_RIBBON_SPACE, FluentIcon, NodeActionTriggerEnums, TreeViewModeEnums, UnityFluentIcon, useAxiosGet, useBuildEnvironment, useShellStore, useUser } from "./EnvironmentRibbon-DaDmKAPO.js";
2
+ import "./apiHelpers-DZots3og.js";
3
+ import { AggregateChip, NodeLoader, UtilitySideBar, findAllParentIds, getIconFromName, getNodeIdForRightBorder, getUnityIconFromName, searchTree, transformMenuPageTree } from "./UtilitySideBar-D4CXGtW2.js";
4
+ import "./SearchUtilities-Bor3HbfB.js";
5
+ import { PageContainer, useSetLocationState } from "./PageContainer-k8KCfGsM.js";
6
+ import React, { useCallback, useEffect, useRef, useState } from "react";
7
7
  import { CircularProgress, Tooltip, Typography, darken, lighten, makeStyles, useTheme } from "@material-ui/core";
8
8
  import { ConfigService } from "udp-react-stencil-component-library";
9
- import { useLocation } from "react-router-dom";
9
+ import { Prompt, useHistory, useLocation } from "react-router-dom";
10
10
  import clsx from "clsx";
11
11
  import { CaretDownSolid8Icon, CaretUpSolid8Icon } from "@fluentui/react-icons";
12
12
  import { cloneDeep } from "lodash";
@@ -196,6 +196,7 @@ const BaseTreeMenu = (props) => {
196
196
  const [tree, setTree] = useState(menuItems);
197
197
  const theme = useTheme();
198
198
  const classes = useStyles$1(props);
199
+ const firstRender = useRef(true);
199
200
  const handleSelectedNode = useCallback((e, value) => {
200
201
  const selectedNode = searchTree(tree, value);
201
202
  if (onSelectNode) {
@@ -309,10 +310,13 @@ const BaseTreeMenu = (props) => {
309
310
  }, [menuItems]);
310
311
  useEffect(() => {
311
312
  if (!tree) return;
312
- let expanded$1 = [];
313
- if (tree?.isExpanded) expanded$1.push(tree.id);
314
- expanded$1 = expanded$1.concat(getExpandedRecursively(tree[childrenKey]));
315
- setExpanded(expanded$1);
313
+ if (firstRender.current) {
314
+ let expanded$1 = [];
315
+ if (tree?.isExpanded) expanded$1.push(tree.id);
316
+ expanded$1 = expanded$1.concat(getExpandedRecursively(tree[childrenKey]));
317
+ setExpanded(expanded$1);
318
+ firstRender.current = false;
319
+ }
316
320
  }, [
317
321
  getExpandedRecursively,
318
322
  tree,
@@ -397,6 +401,7 @@ const MenuPage = (props) => {
397
401
  ...props,
398
402
  appRibbonSpace: buildEnv ? APP_RIBBON_SPACE : 0
399
403
  });
404
+ const history = useHistory();
400
405
  const location = useLocation();
401
406
  const user = useUser();
402
407
  const { t } = useTranslation();
@@ -404,35 +409,96 @@ const MenuPage = (props) => {
404
409
  const [menuItemsList, setMenuItemsList] = useState([]);
405
410
  const [selectedNode, setSelectedNode] = useState(null);
406
411
  const [sidebarExpanded, setSidebarExpanded] = useState(true);
412
+ const [hasUnsavedChanges, setHasUnsavedChanges] = useState(false);
407
413
  const innerMenuId = location.pathname.replace("/menupage/", "");
408
- const [{ data: innerMenu, loading: menuLoading }] = useAxiosGet(ConfigService.tenantV1ApiUrl, `menus/${innerMenuId}`, {}, !!!innerMenuId, false);
414
+ const prevInnerMenuId = useRef(innerMenuId);
415
+ const [{ data: innerMenu, loading: menuLoading }] = useAxiosGet(ConfigService.tenantV1ApiUrl, `menus/${innerMenuId}`, {}, !innerMenuId, false);
409
416
  const { setSubHeaderActionHasChildren, setNavigationExpanded } = useShellStore();
410
- const [{ data: pageData, loading: pageLoading, error: pageError }] = useAxiosGet(ConfigService.tenantV1ApiUrl, `page/${selectedNode?.properties?.page?.id}`, {}, !!!selectedNode?.properties?.page?.id, false);
417
+ const [{ data: pageData, loading: pageLoading, error: pageError }] = useAxiosGet(ConfigService.tenantV1ApiUrl, `page/${selectedNode?.properties?.page?.id}`, {}, !selectedNode?.properties?.page?.id, false);
411
418
  const handleSelectedNode = useCallback((node, menuIndex) => {
419
+ const searchParams = new URLSearchParams(location.search);
420
+ searchParams.set("page", node.id);
421
+ history.push({
422
+ pathname: location.pathname,
423
+ search: searchParams.toString()
424
+ });
412
425
  setSelectedNode(node);
413
- }, []);
426
+ setHasUnsavedChanges(false);
427
+ }, [history, location]);
414
428
  const handleDropNode = useCallback((sourceNode, targetNode, sourceNodeMenuIndex, targetNodeMenuIndex) => {}, []);
415
429
  const handleSidebarExpandClick = useCallback(() => {
416
430
  setSidebarExpanded((expanded) => !expanded);
417
431
  }, []);
432
+ const findNodeById = useCallback((node, id) => {
433
+ if (!node) return null;
434
+ if (node.id.toString() === id) return node;
435
+ if (node.children) for (const child of node.children) {
436
+ const found = findNodeById(child, id);
437
+ if (found) return found;
438
+ }
439
+ return null;
440
+ }, []);
441
+ useEffect(() => {
442
+ const searchParams = new URLSearchParams(location.search);
443
+ const pageId = searchParams.get("page");
444
+ if (pageId && menuItemsList.length > 0) {
445
+ let node = null;
446
+ for (const tree of menuItemsList) {
447
+ node = findNodeById(tree, pageId);
448
+ if (node) break;
449
+ }
450
+ if (node && node.id !== selectedNode?.id) {
451
+ setSelectedNode(node);
452
+ setHasUnsavedChanges(false);
453
+ }
454
+ }
455
+ }, [
456
+ location.search,
457
+ menuItemsList,
458
+ findNodeById,
459
+ selectedNode
460
+ ]);
418
461
  useEffect(() => {
462
+ prevInnerMenuId.current;
419
463
  if (innerMenu) {
420
464
  const list = [];
421
- let nodeSelected = false;
422
465
  innerMenu.menuItemInstanceStructureViews.forEach((menuInstance) => {
423
466
  const updatedMenu = transformMenuPageTree(menuInstance);
424
- if (updatedMenu) {
425
- list.push(updatedMenu);
426
- if (!nodeSelected) {
427
- setSelectedNode(updatedMenu);
428
- nodeSelected = true;
429
- setNavigationExpanded(false);
430
- }
431
- }
467
+ if (updatedMenu) list.push(updatedMenu);
432
468
  });
433
469
  setMenuItemsList(list);
470
+ const searchParams = new URLSearchParams(location.search);
471
+ const pageId = searchParams.get("page");
472
+ let nodeToSelect = null;
473
+ if (pageId && list.length > 0) for (const tree of list) {
474
+ nodeToSelect = findNodeById(tree, pageId);
475
+ if (nodeToSelect) break;
476
+ }
477
+ if (nodeToSelect) {
478
+ setSelectedNode(nodeToSelect);
479
+ setHasUnsavedChanges(false);
480
+ setNavigationExpanded(false);
481
+ } else if (list.length > 0) {
482
+ const firstNode = list[0];
483
+ searchParams.set("page", firstNode.id);
484
+ history.replace({
485
+ pathname: location.pathname,
486
+ search: searchParams.toString()
487
+ });
488
+ setSelectedNode(firstNode);
489
+ setHasUnsavedChanges(false);
490
+ setNavigationExpanded(false);
491
+ }
434
492
  }
435
- }, [innerMenu, setNavigationExpanded]);
493
+ prevInnerMenuId.current = innerMenuId;
494
+ }, [
495
+ innerMenu,
496
+ setNavigationExpanded,
497
+ history,
498
+ location,
499
+ innerMenuId,
500
+ findNodeById
501
+ ]);
436
502
  useEffect(() => {
437
503
  setSubHeaderActionHasChildren(false);
438
504
  }, [setSubHeaderActionHasChildren]);
@@ -443,7 +509,10 @@ const MenuPage = (props) => {
443
509
  t,
444
510
  innerMenu
445
511
  ]);
446
- return /* @__PURE__ */ React.createElement(DndProvider, { backend: HTML5Backend }, /* @__PURE__ */ React.createElement("div", { className: classes.root }, /* @__PURE__ */ React.createElement("div", { className: classes.sidebar }, /* @__PURE__ */ React.createElement(UtilitySideBar, {
512
+ return /* @__PURE__ */ React.createElement(DndProvider, { backend: HTML5Backend }, /* @__PURE__ */ React.createElement(Prompt, {
513
+ when: hasUnsavedChanges,
514
+ message: "You have unsaved changes. Are you sure you want to leave this page?"
515
+ }), /* @__PURE__ */ React.createElement("div", { className: classes.root }, /* @__PURE__ */ React.createElement("div", { className: classes.sidebar }, /* @__PURE__ */ React.createElement(UtilitySideBar, {
447
516
  title: innerMenu?.name,
448
517
  isUsingChildren: true,
449
518
  resizable: true,
@@ -478,7 +547,8 @@ const MenuPage = (props) => {
478
547
  requiredFieldsMap: selectedNode?.properties?.page?.requiredFieldMapping,
479
548
  udpTagId: selectedNode?.properties?.page?.udpTagId,
480
549
  queryId: selectedNode?.properties?.page?.queryId,
481
- inquiryTreeId: selectedNode?.properties?.page?.inquiryTreeId
550
+ inquiryTreeId: selectedNode?.properties?.page?.inquiryTreeId,
551
+ setHasUnsavedChanges
482
552
  },
483
553
  disableMargins: true,
484
554
  fromMenu: true
@@ -487,4 +557,4 @@ const MenuPage = (props) => {
487
557
 
488
558
  //#endregion
489
559
  export { MenuPage };
490
- //# sourceMappingURL=MenuPage-DLsNc-P8.js.map
560
+ //# sourceMappingURL=MenuPage-CO6_GWwB.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MenuPage-CO6_GWwB.js","names":["useStyles","other","useStyles","tree","expanded"],"sources":["../src/treeMenu/BaseTreeMenuItem.jsx","../src/treeMenu/BaseTreeMenu.jsx","../src/menuPage/MenuPage.jsx"],"sourcesContent":["import React, { useCallback } from 'react';\nimport {\n makeStyles,\n lighten,\n Typography,\n CircularProgress,\n darken,\n useTheme,\n Tooltip\n} from '@material-ui/core';\nimport TreeItem from '@material-ui/lab/TreeItem';\nimport { getIconFromName } from '../utilities/tree/TreeUtilities';\nimport clsx from 'clsx';\nimport { UnityFluentIcon } from '../utilities/UnityFluentIcon';\nimport { getUnityIconFromName } from '../utilities/iconLibrary/UnityIconLibrary';\nimport { useDrag, useDrop } from 'react-dnd';\nimport {\n NodeActionTriggerEnums,\n TreeViewModeEnums\n} from '../enums/unitySystemEnums.ts';\nimport { AggregateChip } from '../UI/utilityDisplay/AggregateChip';\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n '&.Mui-selected > .MuiTreeItem-content': {\n backgroundColor:\n theme?.getThemeData()?.mode === 'dark'\n ? theme.palette.grey[700]\n : theme.palette.grey[300],\n borderRight: `4px solid ${theme.palette.primary.main}`\n },\n '&.Mui-selected > .MuiTreeItem-content .MuiTreeItem-label': {\n backgroundColor: 'transparent',\n paddingLeft: 0\n },\n '&.Mui-selected > .MuiTreeItem-content > .MuiCollapse-wrapperInner': {\n backgroundColor:\n theme?.getThemeData()?.mode !== 'dark' && theme.palette.grey[50]\n },\n '& .MuiTreeItem-content .MuiTreeItem-iconContainer': {\n display: (props) => (props.sidebarExpanded ? 'flex' : 'none')\n }\n },\n content: {\n backgroundColor: (props) =>\n theme?.getThemeData()?.mode !== 'dark' &&\n props.conditionalIconName &&\n props.conditionalIconColor\n ? lighten(props.conditionalIconColor, 0.92)\n : ''\n },\n labelRoot: {\n display: 'flex',\n alignItems: 'center',\n marginLeft: (props) => (props.sidebarExpanded ? 0 : theme.spacing(1.5)),\n width: '100%'\n },\n labelContainer: {\n display: (props) => (!props.sidebarExpanded ? 'none' : ''),\n width: (props) =>\n props.treeViewMode === TreeViewModeEnums.Compact\n ? `calc(100% - ${theme.spacing(6.25)}px)`\n : `calc(100% - ${theme.spacing(7.75)}px)`\n },\n conditionalIconContainer: {\n display: 'inline-flex'\n },\n labelText: {\n fontSize: '0.75rem',\n fontWeight: 600,\n lineHeight: '1rem',\n letterSpacing: 0.1\n },\n captionText: {\n marginLeft: (props) =>\n props.treeViewMode === TreeViewModeEnums.Compact ? theme.spacing(1) : '',\n fontSize: '0.65rem',\n fontWeight: 400,\n lineHeight: 1,\n letterSpacing: 0.4\n },\n labelOverflow: {\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis'\n },\n group: {\n width: '100%',\n '& .MuiTreeItem-group': {\n marginLeft: 0\n },\n '& .MuiTreeItem-content': {\n paddingLeft: (props) =>\n props.sidebarExpanded ? (props.depth || 1) * theme.spacing(1) : 0,\n borderRight: (props) =>\n props.showRightBorderColor\n ? `4px solid ${theme.palette.primary.main}`\n : '',\n borderBottom: (props) =>\n props.treeViewMode === TreeViewModeEnums.Compact\n ? `1px solid ${theme.palette.grey[200]}`\n : ''\n },\n '& .MuiTreeItem-content .MuiTreeItem-label': {\n paddingLeft: 0,\n width: (props) =>\n props.sidebarExpanded && `calc(100% - ${theme.spacing(2.5)}px)`\n },\n '& .MuiTreeItem-content .MuiTreeItem-iconContainer span': {\n display: (props) => (props.hideExpansion ? 'none' : '')\n },\n '& .MuiCollapse-wrapperInner': {\n backgroundColor: (props) =>\n theme?.getThemeData()?.mode !== 'dark' && props.isSelectedNode\n ? theme.palette.grey[50]\n : ''\n }\n },\n iconContainer: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n borderRadius: 50,\n marginTop: (props) =>\n props.treeViewMode === TreeViewModeEnums.Compact\n ? theme.spacing(0.25)\n : theme.spacing(0.5),\n marginBottom: (props) =>\n props.treeViewMode === TreeViewModeEnums.Compact\n ? theme.spacing(0.25)\n : theme.spacing(0.5),\n marginRight: theme.spacing(1),\n width: (props) =>\n props.treeViewMode === TreeViewModeEnums.Compact\n ? theme.spacing(3)\n : theme.spacing(4),\n height: (props) =>\n props.treeViewMode === TreeViewModeEnums.Compact\n ? theme.spacing(3)\n : theme.spacing(4),\n border: (props) =>\n props.iconColor\n ? `1px solid ${darken(props.iconColor, 0.1)}`\n : `1px solid ${theme.palette.secondary.main}`,\n backgroundColor: '#ffffff'\n }\n}));\n\nexport const BaseTreeMenuItem = (props) => {\n const {\n parentId,\n nodeId,\n iconName,\n iconType,\n conditionalIconName,\n conditionalIconType,\n conditionalIconColor,\n label,\n iconColor,\n onNodeSelect,\n isSelectedNode,\n subLabel,\n sidebarExpanded,\n isLastNode,\n loading,\n node,\n onDropNode,\n treeViewMode,\n menuIndex,\n aggregateThresholdId,\n ...other\n } = props;\n const classes = useStyles(props);\n const theme = useTheme();\n\n const [{ isDragging }, dragRef] = useDrag({\n type: 'BaseTreeMenuItem',\n item: { ...node, sourceNodeMenuIndex: menuIndex },\n collect: (monitor) => ({\n isDragging: monitor.isDragging()\n })\n });\n\n const handleOnDrop = useCallback(\n (sourceNode, monitor) => {\n if (!monitor.didDrop()) {\n if (onDropNode) {\n const { sourceNodeMenuIndex, ...other } = sourceNode;\n onDropNode({ ...other }, node, sourceNodeMenuIndex, menuIndex);\n }\n }\n },\n [onDropNode, node, menuIndex]\n );\n\n const [{ canDrop, isOver }, dropRef] = useDrop(\n () => ({\n accept: ['BaseTreeMenuItem'],\n drop: (sourceNode, monitor) => {\n // condition to only handle first drop\n handleOnDrop(sourceNode, monitor);\n },\n canDrop: (sourceNode) => checkCanDrop(sourceNode),\n collect: (monitor) => ({\n isOver: monitor.isOver(),\n canDrop: !!monitor.canDrop()\n })\n }),\n [handleOnDrop]\n );\n\n const checkCanDrop = useCallback(\n (sourceNode) => {\n if (sourceNode) {\n const onDropActions = node?.properties?.nodeActions?.filter(\n (na) => na?.triggerType === NodeActionTriggerEnums.On_Node_Drop\n );\n if (!onDropActions) {\n return false;\n }\n const nodeDragEntities = onDropActions?.map(\n (action) => action?.dragEntityName\n );\n return nodeDragEntities.includes(\n sourceNode?.properties?.catalogReturnObject\n );\n }\n },\n [node]\n );\n\n const handleOnLabelClick = useCallback(\n (e) => {\n e.preventDefault();\n onNodeSelect(e, nodeId);\n },\n [onNodeSelect, nodeId]\n );\n\n return (\n <TreeItem\n className={classes.group}\n key={nodeId}\n nodeId={nodeId}\n label={\n <div ref={dropRef}>\n <Tooltip title={sidebarExpanded ? '' : label}>\n <div\n ref={(node?.properties?.isDraggable && dragRef) || null}\n style={{ opacity: isDragging ? 0.5 : 1 }}\n >\n {loading ? (\n <CircularProgress size={12} />\n ) : (\n <div\n id={'udpRecord-BaseTreeMenuItem-'+label.replace(/\\s+/g, '')}\n udprecordid={'udpRecord-BaseTreeMenuItem-'+label.replace(/\\s+/g, '')}\n className={classes.labelRoot}\n style={{\n fontWeight: isSelectedNode ? 'bold' : ''\n }}\n >\n {iconName && (\n <div className={classes.iconContainer}>\n <UnityFluentIcon\n size={\n treeViewMode === TreeViewModeEnums.Compact\n ? 'small'\n : 'medium'\n }\n color={iconColor}\n type={iconType}\n icon={\n iconType === 'unity'\n ? getUnityIconFromName(iconName)\n : getIconFromName(iconName)\n }\n style={{\n color: iconColor\n ? darken(iconColor, 0.1)\n : theme.palette.secondary.main\n }}\n />\n </div>\n )}\n <div className={classes.labelContainer}>\n <Typography\n variant='subtitle2'\n className={clsx(classes.labelText, classes.labelOverflow)}\n >\n {label}\n {subLabel &&\n treeViewMode === TreeViewModeEnums.Compact && (\n <Typography\n variant='caption'\n className={clsx(\n classes.captionText,\n classes.labelOverflow\n )}\n >\n {subLabel}\n </Typography>\n )}\n </Typography>\n {subLabel && treeViewMode === TreeViewModeEnums.Classic && (\n <div className={classes.labelOverflow}>\n <Typography\n variant='caption'\n className={clsx(classes.captionText)}\n >\n {subLabel}\n </Typography>\n </div>\n )}\n </div>\n <AggregateChip aggregateThresholdId={aggregateThresholdId} />\n {conditionalIconName && sidebarExpanded && (\n <div className={classes.conditionalIconContainer}>\n <UnityFluentIcon\n size={\n treeViewMode === TreeViewModeEnums.Compact\n ? 'small'\n : 'medium'\n }\n color={conditionalIconColor}\n type={conditionalIconType}\n icon={\n conditionalIconType === 'unity'\n ? getUnityIconFromName(conditionalIconName)\n : getIconFromName(conditionalIconName)\n }\n style={{\n color: conditionalIconColor\n }}\n />\n </div>\n )}\n </div>\n )}\n </div>\n </Tooltip>\n </div>\n }\n onLabelClick={handleOnLabelClick}\n classes={{ root: classes.root, content: classes.content }}\n {...other}\n />\n );\n};\n","import React, { useCallback, useState, useEffect, useRef } from 'react';\nimport {\n makeStyles,\n useTheme,\n lighten,\n CircularProgress,\n Typography\n} from '@material-ui/core';\nimport TreeView from '@material-ui/lab/TreeView';\nimport { BaseTreeMenuItem } from './BaseTreeMenuItem';\nimport {\n searchTree,\n findAllParentIds,\n getNodeIdForRightBorder\n} from '../utilities/tree/TreeUtilities';\nimport { FluentIcon } from '../utilities/FluentIcon';\nimport { CaretUpSolid8Icon, CaretDownSolid8Icon } from '@fluentui/react-icons';\nimport { cloneDeep } from 'lodash';\nimport { TreeViewModeEnums } from '../enums/unitySystemEnums.ts';\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n marginBottom: theme.spacing(1.75),\n borderTop: (props) =>\n props.treeViewMode === TreeViewModeEnums.Compact\n ? `1px solid ${theme.palette.grey[200]}`\n : ''\n },\n noChildrenContainer: {\n borderBottom: (props) =>\n props.treeViewMode === TreeViewModeEnums.Compact\n ? `1px solid ${theme.palette.grey[200]}`\n : ''\n }\n}));\n\nexport const BaseTreeMenu = (props) => {\n const {\n menuItems,\n onSelectNode,\n onDropNode,\n menuIndex,\n selectedNodeId,\n selectedNodeParentId,\n sidebarExpanded,\n treeViewMode,\n childrenKey = 'children'\n } = props;\n const [expanded, setExpanded] = useState(null);\n const [isCurrentActiveTree, setIsCurrentActiveTree] = useState(false);\n const [selectedNodeIsHidden, setSelectedNodeIsHidden] = useState(false);\n const [tree, setTree] = useState(menuItems);\n const theme = useTheme();\n const classes = useStyles(props);\n const firstRender = useRef(true);\n\n const handleSelectedNode = useCallback(\n (e, value) => {\n const selectedNode = searchTree(tree, value);\n if (onSelectNode) {\n onSelectNode(selectedNode, menuIndex);\n setSelectedNodeIsHidden(false);\n }\n },\n [tree, menuIndex, onSelectNode]\n );\n\n const renderTree = useCallback(\n (node, depth = 1) => {\n let label = node.properties?.nodeLabel || node.properties?.name;\n let subLabel = node.properties?.nodeSubLabel;\n let iconName = node.properties?.defaultIcon?.name;\n let iconType = node.properties?.defaultIcon?.type;\n let conditionalIconName = node.properties?.conditionalIconName || '';\n let conditionalIconType = node.properties?.conditionalIconName\n ? node.properties.conditionalIconType\n : '';\n let conditionalIconColor = node.properties?.conditionalIconName\n ? node.properties?.conditionalIconColor\n : '';\n let nodeId = node.id;\n let iconColor = node.properties?.conditionalIconName\n ? node.properties?.conditionalIconColor\n : node.properties?.defaultIcon?.color?.hex;\n let aggregateThresholdId = node.properties?.aggregateThresholdId || '';\n\n if (node.isGroupNode) {\n label = node.properties?.label;\n subLabel = node.properties?.subLabel;\n iconName = node.properties?.icon?.name;\n iconType = node.properties?.icon?.type;\n iconColor = node.properties?.icon?.color?.hex;\n }\n\n return (\n <BaseTreeMenuItem\n key={nodeId}\n nodeId={nodeId}\n label={label}\n subLabel={subLabel}\n iconName={iconName}\n iconType={iconType}\n conditionalIconName={conditionalIconName}\n conditionalIconType={conditionalIconType}\n conditionalIconColor={conditionalIconColor}\n parentId={node.parentId}\n iconColor={iconColor}\n onNodeSelect={handleSelectedNode}\n selectedNodeId={selectedNodeId}\n isSelectedNode={selectedNodeId === node.id}\n showRightBorderColor={\n selectedNodeIsHidden &&\n isCurrentActiveTree &&\n getNodeIdForRightBorder(expanded, tree, selectedNodeParentId) ===\n node.id\n }\n isCurrentActiveTree={isCurrentActiveTree}\n sidebarExpanded={sidebarExpanded}\n depth={depth}\n hideExpansion={!!!node[childrenKey]?.length}\n node={node}\n onDropNode={onDropNode}\n treeViewMode={treeViewMode}\n menuIndex={menuIndex}\n aggregateThresholdId={aggregateThresholdId}\n >\n {node.properties?.lazyLoad &&\n !!!node[childrenKey]?.length &&\n !node.completedLoadingChildren && (\n <CircularProgress\n size={12}\n style={{ marginLeft: (depth || 1) * theme.spacing(1) }}\n />\n )}\n {node.properties?.lazyLoad &&\n !!!node[childrenKey]?.length &&\n node.completedLoadingChildren &&\n sidebarExpanded &&\n !node.errorRetrievingChildren && (\n <div className={classes.noChildrenContainer}>\n <Typography\n variant='caption'\n style={{\n marginLeft: (depth || 1) * theme.spacing(3),\n fontWeight: 400\n }}\n >\n No Children\n </Typography>\n </div>\n )}\n {node.properties?.lazyLoad &&\n node.completedLoadingChildren &&\n sidebarExpanded &&\n node.errorRetrievingChildren && (\n <div className={classes.noChildrenContainer}>\n <Typography\n variant='caption'\n style={{\n marginLeft: (depth || 1) * theme.spacing(3),\n fontWeight: 400\n }}\n >\n {`Error Retrieving ${\n !!node[childrenKey]?.length ? `Additional ` : ''\n }Children`}\n </Typography>\n </div>\n )}\n {Array.isArray(node[childrenKey])\n ? node[childrenKey].map((n, i) => renderTree(n, depth + 1))\n : null}\n </BaseTreeMenuItem>\n );\n },\n [\n handleSelectedNode,\n selectedNodeId,\n selectedNodeIsHidden,\n isCurrentActiveTree,\n sidebarExpanded,\n expanded,\n tree,\n selectedNodeParentId,\n theme,\n classes,\n onDropNode,\n treeViewMode,\n menuIndex,\n childrenKey\n ]\n );\n\n const handleNodeExpansion = useCallback(\n async (evt, nodeIds) => {\n const treeCopy = cloneDeep(tree);\n setExpanded(nodeIds);\n\n const parentNode = searchTree(treeCopy, selectedNodeParentId);\n const initialAllParentNodeIds = selectedNodeParentId\n ? [selectedNodeParentId]\n : [];\n const allParentNodeIds = findAllParentIds(\n treeCopy,\n parentNode,\n initialAllParentNodeIds\n );\n const selectedNodeShown = allParentNodeIds.every((id) =>\n nodeIds.includes(id)\n );\n if (\n isCurrentActiveTree &&\n allParentNodeIds.length &&\n !selectedNodeShown\n ) {\n setSelectedNodeIsHidden(true);\n } else {\n setSelectedNodeIsHidden(false);\n }\n },\n [isCurrentActiveTree, tree, selectedNodeParentId]\n );\n\n const getExpandedRecursively = useCallback(\n (tree) => {\n if (!tree) return [];\n return tree.reduce((expandedIds, item) => {\n if (item?.isExpanded) {\n expandedIds.push(item.id);\n }\n if (item && item[childrenKey]?.length) {\n expandedIds = expandedIds.concat(\n getExpandedRecursively(item[childrenKey])\n );\n }\n return expandedIds;\n }, []);\n },\n [childrenKey]\n );\n\n useEffect(() => {\n setTree(menuItems);\n }, [menuItems]);\n\n useEffect(() => {\n if (!tree) return;\n if (firstRender.current) {\n let expanded = [];\n if (tree?.isExpanded) {\n expanded.push(tree.id);\n }\n expanded = expanded.concat(getExpandedRecursively(tree[childrenKey]));\n setExpanded(expanded);\n firstRender.current = false;\n }\n // Do not reset expanded on subsequent updates\n }, [getExpandedRecursively, tree, childrenKey]);\n\n useEffect(() => {\n if (!!searchTree(tree, selectedNodeId)) {\n setIsCurrentActiveTree(true);\n } else {\n setIsCurrentActiveTree(false);\n }\n }, [tree, selectedNodeId]);\n\n if (!expanded) {\n return null;\n }\n\n return (\n <TreeView\n key={tree}\n className={classes.root}\n defaultCollapseIcon={\n <FluentIcon\n size='small'\n component={CaretUpSolid8Icon}\n style={{\n color: lighten(theme.palette.primary.main, 0.5),\n width: theme.spacing(1.5),\n height: theme.spacing(1.5)\n }}\n />\n }\n expanded={expanded || []}\n onNodeToggle={handleNodeExpansion}\n defaultExpandIcon={\n <FluentIcon\n size='small'\n component={CaretDownSolid8Icon}\n style={{\n color: lighten(theme.palette.primary.main, 0.5),\n width: theme.spacing(1.5),\n height: theme.spacing(1.5)\n }}\n />\n }\n selected={selectedNodeId}\n >\n {tree && renderTree(tree)}\n </TreeView>\n );\n};\n","import React, { useCallback, useEffect, useRef, useState } from 'react';\nimport { useHistory, useLocation, Prompt } from 'react-router-dom';\nimport { useAxiosGet } from '../utilities/useAxiosGet';\nimport { UtilitySideBar } from '../UI/utilityDisplay/UtilitySideBar';\nimport { makeStyles } from '@material-ui/core';\nimport { PageContainer } from '../page/PageContainer';\nimport { transformMenuPageTree } from '../utilities/tree/TreeUtilities';\nimport { BaseTreeMenu } from '../treeMenu/BaseTreeMenu';\nimport { TreeViewModeEnums } from '../enums/unitySystemEnums';\nimport { DndProvider } from 'react-dnd';\nimport { HTML5Backend } from 'react-dnd-html5-backend';\nimport { useUser } from '../utilities/auth/useUser';\nimport { useShellStore } from '../stores/shellStore';\nimport { NodeLoader } from '../UI/feedback/NodeLoader';\nimport {\n APP_RIBBON_SPACE,\n useBuildEnvironment\n} from '../shell/ui/EnvironmentRibbon';\nimport { useSetLocationState } from '../hooks/useSetLocationState';\nimport { useTranslation } from 'react-i18next';\nimport { ConfigService } from 'udp-react-stencil-component-library';\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n flex: 1,\n minHeight: ({ appRibbonSpace }) => `calc(100vh - ${appRibbonSpace + 56}px)`,\n display: 'grid',\n gridTemplateAreas: ['sidebar content'].map((line) => `\"${line}\"`).join(' '),\n gridTemplateColumns: 'auto 1fr',\n gridTemplateRows: 'auto 1fr'\n },\n sidebar: {\n gridArea: 'sidebar',\n marginRight: theme.spacing(1)\n },\n content: {\n gridArea: 'content',\n display: 'flex',\n flexDirection: 'column',\n position: 'relative',\n zIndex: 1,\n height: ({ appRibbonSpace }) => `calc(100vh - ${appRibbonSpace + 56}px)`,\n overflowY: 'auto'\n },\n menuContent: {\n marginTop: theme.spacing(1),\n height: ({ appRibbonSpace }) => `calc(100vh - ${appRibbonSpace + 116}px)`,\n overflowX: 'hidden'\n },\n loader: {\n marginRight: theme.spacing(1),\n marginLeft: theme.spacing(1)\n },\n loadingContent: {\n flex: 1,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center'\n }\n}));\n\nexport const MenuPage = (props) => {\n const buildEnv = useBuildEnvironment();\n const classes = useStyles({\n ...props,\n appRibbonSpace: buildEnv ? APP_RIBBON_SPACE : 0\n });\n const history = useHistory();\n const location = useLocation();\n const user = useUser();\n const { t } = useTranslation();\n const setLocationState = useSetLocationState();\n\n const [menuItemsList, setMenuItemsList] = useState([]); // holds a list of trees\n const [selectedNode, setSelectedNode] = useState(null);\n const [sidebarExpanded, setSidebarExpanded] = useState(true);\n const [hasUnsavedChanges, setHasUnsavedChanges] = useState(false);\n // Just the menuInstanceId for an inner menu\n const innerMenuId = location.pathname.replace('/menupage/', '');\n\n const prevInnerMenuId = useRef(innerMenuId);\n\n const [{ data: innerMenu, loading: menuLoading }] = useAxiosGet(\n ConfigService.tenantV1ApiUrl,\n `menus/${innerMenuId}`,\n {},\n !innerMenuId,\n false\n );\n\n const { setSubHeaderActionHasChildren, setNavigationExpanded } =\n useShellStore();\n\n const [{ data: pageData, loading: pageLoading, error: pageError }] =\n useAxiosGet(\n ConfigService.tenantV1ApiUrl,\n `page/${selectedNode?.properties?.page?.id}`,\n {},\n !selectedNode?.properties?.page?.id,\n false\n );\n\n const handleSelectedNode = useCallback(\n (node, menuIndex) => {\n const searchParams = new URLSearchParams(location.search);\n searchParams.set('page', node.id);\n\n history.push({\n pathname: location.pathname,\n search: searchParams.toString()\n });\n setSelectedNode(node);\n setHasUnsavedChanges(false);\n },\n [history, location]\n );\n\n const handleDropNode = useCallback(\n (sourceNode, targetNode, sourceNodeMenuIndex, targetNodeMenuIndex) => {\n // TODO: Implement if we need to for next Phase\n },\n []\n );\n\n const handleSidebarExpandClick = useCallback(() => {\n setSidebarExpanded((expanded) => !expanded);\n }, []);\n\n const findNodeById = useCallback((node, id) => {\n if (!node) return null;\n if (node.id.toString() === id) return node;\n if (node.children) {\n for (const child of node.children) {\n const found = findNodeById(child, id);\n if (found) return found;\n }\n }\n return null;\n }, []);\n\n useEffect(() => {\n const searchParams = new URLSearchParams(location.search);\n const pageId = searchParams.get('page');\n if (pageId && menuItemsList.length > 0) {\n // Search all root menu trees for the node\n let node = null;\n for (const tree of menuItemsList) {\n node = findNodeById(tree, pageId);\n if (node) break;\n }\n if (node && node.id !== selectedNode?.id) {\n setSelectedNode(node);\n setHasUnsavedChanges(false);\n }\n }\n }, [location.search, menuItemsList, findNodeById, selectedNode]);\n\n useEffect(() => {\n const mainPageIdChanged = prevInnerMenuId.current !== innerMenuId;\n\n if (innerMenu) {\n const list = [];\n innerMenu.menuItemInstanceStructureViews.forEach((menuInstance) => {\n const updatedMenu = transformMenuPageTree(menuInstance);\n if (updatedMenu) {\n list.push(updatedMenu);\n }\n });\n setMenuItemsList(list);\n\n // Find the node matching the current page param\n const searchParams = new URLSearchParams(location.search);\n const pageId = searchParams.get('page');\n let nodeToSelect = null;\n\n if (pageId && list.length > 0) {\n // Try to find the node with this id\n for (const tree of list) {\n nodeToSelect = findNodeById(tree, pageId);\n if (nodeToSelect) break;\n }\n }\n\n // If we found a node, select it. If not, select the first node.\n if (nodeToSelect) {\n setSelectedNode(nodeToSelect);\n setHasUnsavedChanges(false);\n setNavigationExpanded(false);\n } else if (list.length > 0) {\n // No valid page param, select first node and update URL\n const firstNode = list[0];\n searchParams.set('page', firstNode.id);\n history.replace({\n pathname: location.pathname,\n search: searchParams.toString()\n });\n setSelectedNode(firstNode);\n setHasUnsavedChanges(false);\n setNavigationExpanded(false);\n }\n }\n prevInnerMenuId.current = innerMenuId;\n }, [\n innerMenu,\n setNavigationExpanded,\n history,\n location,\n innerMenuId,\n findNodeById\n ]);\n\n useEffect(() => {\n setSubHeaderActionHasChildren(false);\n }, [setSubHeaderActionHasChildren]);\n\n // Setting location state label so that if this page was saved to favorites\n // we can determine the bread crumb\n useEffect(() => {\n if (innerMenu) {\n setLocationState({ label: t(innerMenu?.name) });\n }\n }, [setLocationState, t, innerMenu]);\n\n return (\n <DndProvider backend={HTML5Backend}>\n <Prompt\n when={hasUnsavedChanges}\n message='You have unsaved changes. Are you sure you want to leave this page?'\n />\n <div className={classes.root}>\n <div className={classes.sidebar}>\n <UtilitySideBar\n title={innerMenu?.name}\n isUsingChildren={true}\n resizable={true}\n removePadding={true}\n removeTopLayoutUnit={true}\n onUtilitySidebarToggleExpandClick={handleSidebarExpandClick}\n collapsedWidth={64}\n >\n <div className={classes.menuContent} key={innerMenuId}>\n {menuItemsList?.length > 0 &&\n !menuLoading &&\n menuItemsList.map((menuItems, index) => (\n <div key={menuItems.id} className={classes.nodeContainer}>\n <BaseTreeMenu\n menuItems={menuItems}\n onSelectNode={handleSelectedNode}\n onDropNode={handleDropNode}\n menuIndex={index}\n selectedNodeId={selectedNode?.id}\n selectedNodeParentId={selectedNode?.parentId}\n sidebarExpanded={sidebarExpanded}\n treeViewMode={TreeViewModeEnums.Classic}\n />\n </div>\n ))}\n {menuLoading && (\n <div className={classes.loader}>\n <NodeLoader loading={menuLoading} />\n </div>\n )}\n </div>\n </UtilitySideBar>\n </div>\n <div className={classes.content}>\n {selectedNode?.properties?.page?.id && (\n <PageContainer\n user={user}\n key={selectedNode?.id}\n pageData={pageData}\n pageLoading={pageLoading}\n widgetParams={{\n pageId: pageData?.pageId,\n entityName: selectedNode?.properties?.page?.entity?.entityName,\n pbiReportCode: selectedNode?.properties?.page?.pbiReportCode,\n requiredFieldsMap:\n selectedNode?.properties?.page?.requiredFieldMapping,\n udpTagId: selectedNode?.properties?.page?.udpTagId,\n queryId: selectedNode?.properties?.page?.queryId,\n inquiryTreeId: selectedNode?.properties?.page?.inquiryTreeId,\n setHasUnsavedChanges: setHasUnsavedChanges\n }}\n disableMargins={true}\n fromMenu={true}\n />\n )}\n </div>\n </div>\n </DndProvider>\n );\n};\n"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
- import { ActionsRenderer, AmbientGridTemplate, FilterOperators, FluentDialog, getSanitizedName, useAgGridApi } from "./AmbientGridTemplate-BLwgiqwK.js";
2
- import { FluentButton, FluentIcon, LayoutUnit, LogicalSearchOperatorEnums, SearchGroupingType, SearchSortDirection, StatusChip, executeQueryAdHoc, executeQueryWithParameters, useAxiosGet, useBuildEnvironment, useUser } from "./EnvironmentRibbon-BMvQEZPZ.js";
3
- import { useHandleAxiosSnackbar } from "./apiHelpers-t3rfkjFZ.js";
4
- import { getSearchObject } from "./SearchUtilities-dbXvMYoa.js";
1
+ import { ActionsRenderer, AmbientGridTemplate, FilterOperators, FluentDialog, getSanitizedName, useAgGridApi } from "./AmbientGridTemplate-BqlMt5Su.js";
2
+ import { FluentButton, FluentIcon, LayoutUnit, LogicalSearchOperatorEnums, SearchGroupingType, SearchSortDirection, StatusChip, executeQueryAdHoc, executeQueryWithParameters, useAxiosGet, useBuildEnvironment, useUser } from "./EnvironmentRibbon-DaDmKAPO.js";
3
+ import { useHandleAxiosSnackbar } from "./apiHelpers-DZots3og.js";
4
+ import { getSearchObject } from "./SearchUtilities-Bor3HbfB.js";
5
5
  import React, { useCallback, useEffect, useMemo, useState } from "react";
6
6
  import { Box, Button, Popper, TextField, Typography, makeStyles } from "@material-ui/core";
7
7
  import { ConfigService } from "udp-react-stencil-component-library";
@@ -675,4 +675,4 @@ const MyExportsPage = (props) => {
675
675
 
676
676
  //#endregion
677
677
  export { AmbientAlert, AmbientAutoComplete, EmptyStateDisplay, MyExportsPage, SearchServiceDatasource, StatusCellRenderer, TableColumnDefs, TableContainer$1 as TableContainer, defaultColumnActionsDef };
678
- //# sourceMappingURL=MyExportsPage-BYH2Wl9k.js.map
678
+ //# sourceMappingURL=MyExportsPage-CX9tzqHk.js.map