udp-react-enterprise-component-library 25.16.1 → 25.16.2-beta.1

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.
@@ -68,7 +68,7 @@ const MenuPage = (props) => {
68
68
  const user = useUser();
69
69
  const { t } = useTranslation();
70
70
  const setLocationState = useSetLocationState();
71
- const { innerMenuOverride, mainContent, menuTitle } = props;
71
+ const { innerMenuOverride, mainContent, menuTitle, allowMissingPageParam = false } = props;
72
72
  const [menuItemsList, setMenuItemsList] = useState([]);
73
73
  const [selectedNode, setSelectedNode] = useState(null);
74
74
  const [sidebarExpanded, setSidebarExpanded] = useState(true);
@@ -80,6 +80,18 @@ const MenuPage = (props) => {
80
80
  const { setSubHeaderActionHasChildren, setNavigationExpanded } = useShellStore();
81
81
  const [{ data: pageData, loading: pageLoading, error: pageError }] = useAxiosGet(ConfigService.tenantV1ApiUrl, `page/${selectedNode?.properties?.page?.id}`, {}, !selectedNode?.properties?.page?.id, false);
82
82
  const handleSelectedNode = useCallback((node, menuIndex) => {
83
+ if (allowMissingPageParam) {
84
+ const firstNode = menuItemsList?.[0];
85
+ if (firstNode && String(node?.id) === String(firstNode.id)) {
86
+ if (location.search) history.replace({
87
+ pathname: location.pathname,
88
+ search: ""
89
+ });
90
+ setSelectedNode(node);
91
+ setHasUnsavedChanges(false);
92
+ return;
93
+ }
94
+ }
83
95
  const searchParams = new URLSearchParams(location.search);
84
96
  searchParams.set("page", node.id);
85
97
  history.push({
@@ -88,7 +100,12 @@ const MenuPage = (props) => {
88
100
  });
89
101
  setSelectedNode(node);
90
102
  setHasUnsavedChanges(false);
91
- }, [history, location]);
103
+ }, [
104
+ history,
105
+ location,
106
+ allowMissingPageParam,
107
+ menuItemsList
108
+ ]);
92
109
  const handleDropNode = useCallback((sourceNode, targetNode, sourceNodeMenuIndex, targetNodeMenuIndex) => {}, []);
93
110
  const handleSidebarExpandClick = useCallback(() => {
94
111
  setSidebarExpanded((expanded) => !expanded);
@@ -143,14 +160,20 @@ const MenuPage = (props) => {
143
160
  setNavigationExpanded(false);
144
161
  } else if (list.length > 0) {
145
162
  const firstNode = list[0];
146
- searchParams.set("page", firstNode.id);
147
- history.replace({
148
- pathname: location.pathname,
149
- search: searchParams.toString()
150
- });
151
- setSelectedNode(firstNode);
152
- setHasUnsavedChanges(false);
153
- setNavigationExpanded(false);
163
+ if (allowMissingPageParam) {
164
+ setSelectedNode(firstNode);
165
+ setHasUnsavedChanges(false);
166
+ setNavigationExpanded(false);
167
+ } else {
168
+ searchParams.set("page", firstNode.id);
169
+ history.replace({
170
+ pathname: location.pathname,
171
+ search: searchParams.toString()
172
+ });
173
+ setSelectedNode(firstNode);
174
+ setHasUnsavedChanges(false);
175
+ setNavigationExpanded(false);
176
+ }
154
177
  }
155
178
  }
156
179
  prevInnerMenuId.current = innerMenuId;
@@ -160,7 +183,8 @@ const MenuPage = (props) => {
160
183
  history,
161
184
  location,
162
185
  innerMenuId,
163
- findNodeById
186
+ findNodeById,
187
+ allowMissingPageParam
164
188
  ]);
165
189
  useEffect(() => {
166
190
  setSubHeaderActionHasChildren(false);
@@ -224,4 +248,4 @@ var MenuPage_default = MenuPage;
224
248
 
225
249
  //#endregion
226
250
  export { MenuPage_default };
227
- //# sourceMappingURL=MenuPage-BSU-NITc.js.map
251
+ //# sourceMappingURL=MenuPage-C4LnhsE3.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MenuPage-C4LnhsE3.js","names":[],"sources":["../src/menuPage/MenuPage.jsx"],"sourcesContent":["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\nconst 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 // Allow callers to provide an innerMenu directly (CustomMenuPage wrapper)\n const {\n innerMenuOverride,\n mainContent,\n menuTitle,\n allowMissingPageParam = false\n } = props;\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: fetchedInnerMenu, loading: menuLoading }] = useAxiosGet(\n ConfigService.tenantV1ApiUrl,\n `menus/${innerMenuId}`,\n {},\n !innerMenuId,\n false\n );\n\n const innerMenu = innerMenuOverride ?? fetchedInnerMenu;\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 if (allowMissingPageParam) {\n const firstNode = menuItemsList?.[0];\n if (firstNode && String(node?.id) === String(firstNode.id)) {\n // If there is an existing query string, normalize back to the base path\n if (location.search) {\n history.replace({\n pathname: location.pathname,\n search: ''\n });\n }\n setSelectedNode(node);\n setHasUnsavedChanges(false);\n return;\n }\n }\n\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, allowMissingPageParam, menuItemsList]\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 const firstNode = list[0];\n if (allowMissingPageParam) {\n // Do not modify URL when missing page param; select first node only.\n setSelectedNode(firstNode);\n setHasUnsavedChanges(false);\n setNavigationExpanded(false);\n } else {\n // No valid page param, select first node and update URL\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 }\n prevInnerMenuId.current = innerMenuId;\n }, [\n innerMenu,\n setNavigationExpanded,\n history,\n location,\n innerMenuId,\n findNodeById,\n allowMissingPageParam\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 || menuTitle}\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 {mainContent ? (\n typeof mainContent === 'function'\n ? mainContent({ selectedNode, menuItemsList })\n : mainContent\n ) : (\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 )}\n </div>\n </div>\n </DndProvider>\n );\n};\n\nexport default MenuPage;\n"],"mappings":"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"}
@@ -51,6 +51,6 @@ import "./AggregateChip-7tOziH82.js";
51
51
  import "./UtilityBarInport-BZbPE650.js";
52
52
  import "./UtilitySideBar-otYqGPhu.js";
53
53
  import "./BaseTreeMenu-CroItvOA.js";
54
- import { MenuPage_default } from "./MenuPage-BSU-NITc.js";
54
+ import { MenuPage_default } from "./MenuPage-C4LnhsE3.js";
55
55
 
56
56
  export { MenuPage_default as default };
@@ -20,15 +20,12 @@ const UdpPublicForm = (props) => {
20
20
  const queryParams = useSearchParams();
21
21
  const formId = queryParams.get("udpf_formId");
22
22
  const tenantId = queryParams.get("udpf_tenantId");
23
+ const submissionId = queryParams.get("udpf_submissionId");
23
24
  const callbackUrl = queryParams.get("udpf_callback_url");
24
- useEffect(() => {
25
- if (!formId) handleErrorSnackbar({}, "Form Id not found, please specify udpf_formid in the query params");
26
- if (!tenantId) handleErrorSnackbar({}, "tenantId not found, please specify udpf_formid in the query params");
27
- }, []);
28
- if (!formId || !tenantId) return null;
29
25
  return /* @__PURE__ */ React.createElement(UdpFormsRenderer, {
30
26
  formId,
31
27
  tenantId,
28
+ submissionId,
32
29
  productId: ConfigService.config.UNITY_PRODUCT_ID,
33
30
  apiUrlBase: ConfigService.productV1ApiUrl,
34
31
  callbackUrl,
@@ -41,4 +38,4 @@ var UdpPublicForm_default = UdpPublicForm;
41
38
 
42
39
  //#endregion
43
40
  export { UdpPublicForm, UdpPublicForm_default, UdpPublicForm_exports };
44
- //# sourceMappingURL=UdpPublicForm-DNVbin2l.js.map
41
+ //# sourceMappingURL=UdpPublicForm-CGo9h-lA.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UdpPublicForm-CGo9h-lA.js","names":[],"sources":["../src/udp/pages/UdpPublicForm.jsx"],"sourcesContent":["import React, { useEffect } from 'react';\nimport { UdpFormsRenderer } from 'udp-react-stencil-component-library';\nimport { useLocation } from 'react-router-dom';\nimport { useHandleAxiosSnackbar } from '../../utilities/apiHelpers';\nimport { useSnackbar } from 'notistack';\n\n\nconst useSearchParams = () => {\n const search = useLocation().search;\n\n // when params are populated with an internal redirect, like on a Page menu, the useLocation hook does not get the query params\n // so it will fallback with window.location.search in that case\n return new URLSearchParams(search || window.location.search);\n}\nexport const UdpPublicForm = (props) => {\n const { handleErrorSnackbar } = useHandleAxiosSnackbar();\n const { enqueueSnackbar, closeSnackbar } = useSnackbar();\n \n const queryParams = useSearchParams()\n\n const formId = queryParams.get('udpf_formId');\n const tenantId = queryParams.get('udpf_tenantId');\n const submissionId = queryParams.get('udpf_submissionId');\n const callbackUrl = queryParams.get('udpf_callback_url');\n\n // useEffect(() => {\n // if (!formId) {\n // handleErrorSnackbar({}, 'Form Id not found, please specify udpf_formid in the query params');\n // }\n // if (!tenantId) {\n // handleErrorSnackbar({}, 'tenantId not found, please specify udpf_formid in the query params');\n // }\n // }, []);\n\n return (\n <UdpFormsRenderer\n formId={formId}\n tenantId={tenantId}\n submissionId={submissionId}\n productId={ConfigService.config.UNITY_PRODUCT_ID}\n apiUrlBase={ConfigService.productV1ApiUrl}\n callbackUrl={callbackUrl}\n enqueueSnackbar={enqueueSnackbar}\n closeSnackbar={closeSnackbar}\n isPublic\n />\n );\n};\n\nexport default UdpPublicForm;\n"],"mappings":";;;;;;;;;;;;AAOA,MAAM,wBAAwB;CAC5B,MAAM,SAAS,aAAa,CAAC;AAI7B,QAAO,IAAI,gBAAgB,UAAU,OAAO,SAAS,OAAO;;AAE9D,MAAa,iBAAiB,UAAU;CACtC,MAAM,EAAE,wBAAwB,wBAAwB;CACxD,MAAM,EAAE,iBAAiB,kBAAkB,aAAa;CAExD,MAAM,cAAc,iBAAiB;CAErC,MAAM,SAAS,YAAY,IAAI,cAAc;CAC7C,MAAM,WAAW,YAAY,IAAI,gBAAgB;CACjD,MAAM,eAAe,YAAY,IAAI,oBAAoB;CACzD,MAAM,cAAc,YAAY,IAAI,oBAAoB;AAWxD,QACE,oCAAC;EACS;EACE;EACI;EACd,WAAW,cAAc,OAAO;EAChC,YAAY,cAAc;EACb;EACI;EACF;EACf;GACA;;AAIN,4BAAe"}
@@ -1,6 +1,6 @@
1
1
  import "./apiHelpers-Bju2gkBq.js";
2
2
  import "./pageEnums-CT6NFA8B.js";
3
3
  import "./UnitySessionStorage-DBqfMiK5.js";
4
- import { UdpPublicForm, UdpPublicForm_default } from "./UdpPublicForm-DNVbin2l.js";
4
+ import { UdpPublicForm, UdpPublicForm_default } from "./UdpPublicForm-CGo9h-lA.js";
5
5
 
6
6
  export { UdpPublicForm, UdpPublicForm_default as default };
@@ -49,8 +49,8 @@ const PrivateRoute = ({ ...otherProps }) => {
49
49
  //#endregion
50
50
  //#region src/routes/UdpRoutes.jsx
51
51
  const VirtualBrowser = lazy(() => import("./VirtualBrowser-CiO6tvKp.js"));
52
- const MenuPage = lazy(() => import("./MenuPage-BtoG6GuI.js"));
53
- const UdpPublicForm = lazy(() => import("./UdpPublicForm-DQ70FtUQ.js"));
52
+ const MenuPage = lazy(() => import("./MenuPage-fQS1_KWY.js"));
53
+ const UdpPublicForm = lazy(() => import("./UdpPublicForm-iGqFAAqg.js"));
54
54
  const WorkflowContainer = lazy(() => import("./WorkflowContainer-DtvXxyTb.js"));
55
55
  const PasswordResetRedirect = lazy(() => import("./PasswordResetRedirect-DmhA2INZ.js"));
56
56
  const MyExportsPage = lazy(() => import("./MyExportsPage-DbH8z4-2.js"));
@@ -107,4 +107,4 @@ const UdpRoutes = (props) => {
107
107
 
108
108
  //#endregion
109
109
  export { PrivateRoute, UdpRoutes };
110
- //# sourceMappingURL=UdpRoutes-BctzBOjG.js.map
110
+ //# sourceMappingURL=UdpRoutes-DgjUyGo6.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"UdpRoutes-BctzBOjG.js","names":["Switch","props"],"sources":["../src/routes/components/PageForbiddenRoute.jsx","../src/routes/PrivateRoute.jsx","../src/routes/UdpRoutes.jsx"],"sourcesContent":["import React from 'react';\nimport { makeStyles } from '@material-ui/core';\nimport { PageStatus } from './PageStatus';\nimport { useTranslation } from 'react-i18next';\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n marginTop: theme.spacing(4)\n }\n}));\n\nexport const PageForbiddenRoute = (props) => {\n const { title, statusCode, subheader, message, showButton } = props;\n const classes = useStyles();\n const { t } = useTranslation();\n\n return (\n <div className={classes.root}>\n <PageStatus\n title={title ?? t('Page Forbidden')}\n statusCode={statusCode ?? '403'}\n subheader={\n subheader ?? t('Sorry, you do not have permission to view this page.')\n }\n message={message ?? t('Please contact an administrator to get access.')}\n to='/'\n buttonLabel={t('Back to Home Page')}\n showButton={showButton}\n />\n </div>\n );\n};\n","import React, { useMemo } from 'react';\nimport { Route, Redirect } from 'react-router-dom';\nimport { useTranslation } from 'react-i18next';\nimport { useIsUnityAuthenticated } from '../utilities/auth/useIsUnityAuthenticated';\nimport { useUser } from '../utilities/auth/useUser';\nimport { PageForbiddenRoute } from './components/PageForbiddenRoute';\n\nexport const PrivateRoute = ({ ...otherProps }) => {\n const isAuthenticated = useIsUnityAuthenticated();\n const user = useUser();\n const { t } = useTranslation();\n \n const userHasAccessToTenant = useMemo(() => {\n if (user?.tenantIds?.includes(user.currentTenantId)) {\n return true;\n }\n return false;\n }, [user]);\n\n if (!userHasAccessToTenant && isAuthenticated && user?.statusCode === 200) {\n return (\n <Route\n path='*'\n render={(props) => (\n <PageForbiddenRoute\n message={t('You do not have access to this tenant. Please select a different Tenant.')}\n showButton={false}\n />\n )}\n />\n );\n }\n\n if (isAuthenticated && user?.statusCode === 200) {\n return <Route {...otherProps} />;\n }\n\n return null;\n};\n","import React, { Suspense, lazy } from 'react';\nimport { Route, Switch } from 'react-router-dom';\nimport { PrivateRoute } from './PrivateRoute';\nimport { UdpPageEnums } from '../enums/pageEnums';\nimport { ConfigService } from 'udp-react-stencil-component-library';\nimport { PageLoading } from '../UI/feedback/PageLoading';\n\n// Lazy load route components\nconst VirtualBrowser = lazy(() =>\n import('../maintenanceEngine/virtualBrowser/VirtualBrowser')\n);\nconst MenuPage = lazy(() => import('../menuPage/MenuPage'));\nconst UdpPublicForm = lazy(() => import('../udp/pages/UdpPublicForm'));\nconst WorkflowContainer = lazy(() => import('../workflow/WorkflowContainer'));\nconst PasswordResetRedirect = lazy(() =>\n import('./components/PasswordResetRedirect')\n);\nconst MyExportsPage = lazy(() => import('../udp/export/MyExportsPage'));\nconst PageNotFoundRoute = lazy(() => import('./components/PageNotFoundRoute'));\nconst UdpMaintenanceConfigPage = lazy(() =>\n import('../udp/pages/UdpMaintenanceConfigPage')\n);\nconst UdpMaintenanceEnginePage = lazy(() =>\n import('../udp/pages/UdpMaintenanceEnginePage')\n);\n\nexport const UdpRoutes = (props) => {\n const { ...other } = props;\n return (\n <Suspense fallback={<PageLoading />}>\n <Switch>\n <PrivateRoute\n path='/virtual/:id'\n render={(props) => <VirtualBrowser {...props} {...other} />}\n />\n <PrivateRoute\n path='/menupage/:id'\n render={(props) => <MenuPage {...props} {...other} />}\n />\n\n <Route\n path={`/page/${UdpPageEnums.Udp_Public_Forms_Page}`}\n render={(props) => <UdpPublicForm {...props} {...other} />}\n />\n <Route\n path={`/passwordresetsuccess`}\n render={(props) => <PasswordResetRedirect props={props} />}\n />\n <PrivateRoute\n path='/workflowtask/:id'\n render={(props) => <WorkflowContainer {...props} {...other} />}\n />\n <PrivateRoute\n path='/myexports'\n render={(props) => (\n <MyExportsPage\n productId={ConfigService.config.UNITY_PRODUCT_ID}\n {...props}\n {...other}\n />\n )}\n />\n <PrivateRoute\n path='/crudbrowser'\n render={(props) => <UdpMaintenanceEnginePage {...props} />}\n />\n <PrivateRoute\n path='/tablebrowser'\n render={(props) => <UdpMaintenanceConfigPage {...props} />}\n />\n <PrivateRoute path='*' component={PageNotFoundRoute} />\n </Switch>\n </Suspense>\n );\n};\n"],"mappings":";;;;;;;;;;;;AAKA,MAAM,YAAY,YAAY,WAAW,EACvC,MAAM,EACJ,WAAW,MAAM,QAAQ,EAAE,EAC5B,EACF,EAAE;AAEH,MAAa,sBAAsB,UAAU;CAC3C,MAAM,EAAE,OAAO,YAAY,WAAW,SAAS,eAAe;CAC9D,MAAM,UAAU,WAAW;CAC3B,MAAM,EAAE,MAAM,gBAAgB;AAE9B,QACE,oCAAC,SAAI,WAAW,QAAQ,QACtB,oCAAC;EACC,OAAO,SAAS,EAAE,iBAAiB;EACnC,YAAY,cAAc;EAC1B,WACE,aAAa,EAAE,uDAAuD;EAExE,SAAS,WAAW,EAAE,iDAAiD;EACvE,IAAG;EACH,aAAa,EAAE,oBAAoB;EACvB;GACZ,CACE;;;;;ACtBV,MAAa,gBAAgB,EAAE,GAAG,iBAAiB;CACjD,MAAM,kBAAkB,yBAAyB;CACjD,MAAM,OAAO,SAAS;CACtB,MAAM,EAAE,MAAM,gBAAgB;AAS9B,KAAI,CAP0B,cAAc;AAC1C,MAAI,MAAM,WAAW,SAAS,KAAK,gBAAgB,CACjD,QAAO;AAET,SAAO;IACN,CAAC,KAAK,CAAC,IAEoB,mBAAmB,MAAM,eAAe,IACpE,QACE,oCAAC;EACC,MAAK;EACL,SAAS,UACP,oCAAC;GACC,SAAS,EAAE,2EAA2E;GACtF,YAAY;IACZ;GAEJ;AAIN,KAAI,mBAAmB,MAAM,eAAe,IAC1C,QAAO,oCAAC,OAAU,WAAc;AAGlC,QAAO;;;;;AC7BT,MAAM,iBAAiB,WACrB,OAAO,gCACR;AACD,MAAM,WAAW,WAAW,OAAO,0BAAwB;AAC3D,MAAM,gBAAgB,WAAW,OAAO,+BAA8B;AACtE,MAAM,oBAAoB,WAAW,OAAO,mCAAiC;AAC7E,MAAM,wBAAwB,WAC5B,OAAO,uCACR;AACD,MAAM,gBAAgB,WAAW,OAAO,+BAA+B;AACvE,MAAM,oBAAoB,WAAW,OAAO,mCAAkC;AAC9E,MAAM,2BAA2B,WAC/B,OAAO,0CACR;AACD,MAAM,2BAA2B,WAC/B,OAAO,0CACR;AAED,MAAa,aAAa,UAAU;CAClC,MAAM,EAAE,GAAG,UAAU;AACrB,QACE,oCAAC,YAAS,UAAU,oCAAC,kBAAc,IACjC,oCAACA,gBACC,oCAAC;EACC,MAAK;EACL,SAAS,YAAU,oCAAC;GAAe,GAAIC;GAAO,GAAI;IAAS;GAC3D,EACF,oCAAC;EACC,MAAK;EACL,SAAS,YAAU,oCAAC;GAAS,GAAIA;GAAO,GAAI;IAAS;GACrD,EAEF,oCAAC;EACC,MAAM,SAAS,aAAa;EAC5B,SAAS,YAAU,oCAAC;GAAc,GAAIA;GAAO,GAAI;IAAS;GAC1D,EACF,oCAAC;EACC,MAAM;EACN,SAAS,YAAU,oCAAC,yBAAsB,OAAOA,UAAS;GAC1D,EACF,oCAAC;EACC,MAAK;EACL,SAAS,YAAU,oCAAC;GAAkB,GAAIA;GAAO,GAAI;IAAS;GAC9D,EACF,oCAAC;EACC,MAAK;EACL,SAAS,YACP,oCAAC;GACC,WAAW,cAAc,OAAO;GAChC,GAAIA;GACJ,GAAI;IACJ;GAEJ,EACF,oCAAC;EACC,MAAK;EACL,SAAS,YAAU,oCAAC,0BAA6BA,QAAS;GAC1D,EACF,oCAAC;EACC,MAAK;EACL,SAAS,YAAU,oCAAC,0BAA6BA,QAAS;GAC1D,EACF,oCAAC;EAAa,MAAK;EAAI,WAAW;GAAqB,CAChD,CACA"}
1
+ {"version":3,"file":"UdpRoutes-DgjUyGo6.js","names":["Switch","props"],"sources":["../src/routes/components/PageForbiddenRoute.jsx","../src/routes/PrivateRoute.jsx","../src/routes/UdpRoutes.jsx"],"sourcesContent":["import React from 'react';\nimport { makeStyles } from '@material-ui/core';\nimport { PageStatus } from './PageStatus';\nimport { useTranslation } from 'react-i18next';\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n marginTop: theme.spacing(4)\n }\n}));\n\nexport const PageForbiddenRoute = (props) => {\n const { title, statusCode, subheader, message, showButton } = props;\n const classes = useStyles();\n const { t } = useTranslation();\n\n return (\n <div className={classes.root}>\n <PageStatus\n title={title ?? t('Page Forbidden')}\n statusCode={statusCode ?? '403'}\n subheader={\n subheader ?? t('Sorry, you do not have permission to view this page.')\n }\n message={message ?? t('Please contact an administrator to get access.')}\n to='/'\n buttonLabel={t('Back to Home Page')}\n showButton={showButton}\n />\n </div>\n );\n};\n","import React, { useMemo } from 'react';\nimport { Route, Redirect } from 'react-router-dom';\nimport { useTranslation } from 'react-i18next';\nimport { useIsUnityAuthenticated } from '../utilities/auth/useIsUnityAuthenticated';\nimport { useUser } from '../utilities/auth/useUser';\nimport { PageForbiddenRoute } from './components/PageForbiddenRoute';\n\nexport const PrivateRoute = ({ ...otherProps }) => {\n const isAuthenticated = useIsUnityAuthenticated();\n const user = useUser();\n const { t } = useTranslation();\n \n const userHasAccessToTenant = useMemo(() => {\n if (user?.tenantIds?.includes(user.currentTenantId)) {\n return true;\n }\n return false;\n }, [user]);\n\n if (!userHasAccessToTenant && isAuthenticated && user?.statusCode === 200) {\n return (\n <Route\n path='*'\n render={(props) => (\n <PageForbiddenRoute\n message={t('You do not have access to this tenant. Please select a different Tenant.')}\n showButton={false}\n />\n )}\n />\n );\n }\n\n if (isAuthenticated && user?.statusCode === 200) {\n return <Route {...otherProps} />;\n }\n\n return null;\n};\n","import React, { Suspense, lazy } from 'react';\nimport { Route, Switch } from 'react-router-dom';\nimport { PrivateRoute } from './PrivateRoute';\nimport { UdpPageEnums } from '../enums/pageEnums';\nimport { ConfigService } from 'udp-react-stencil-component-library';\nimport { PageLoading } from '../UI/feedback/PageLoading';\n\n// Lazy load route components\nconst VirtualBrowser = lazy(() =>\n import('../maintenanceEngine/virtualBrowser/VirtualBrowser')\n);\nconst MenuPage = lazy(() => import('../menuPage/MenuPage'));\nconst UdpPublicForm = lazy(() => import('../udp/pages/UdpPublicForm'));\nconst WorkflowContainer = lazy(() => import('../workflow/WorkflowContainer'));\nconst PasswordResetRedirect = lazy(() =>\n import('./components/PasswordResetRedirect')\n);\nconst MyExportsPage = lazy(() => import('../udp/export/MyExportsPage'));\nconst PageNotFoundRoute = lazy(() => import('./components/PageNotFoundRoute'));\nconst UdpMaintenanceConfigPage = lazy(() =>\n import('../udp/pages/UdpMaintenanceConfigPage')\n);\nconst UdpMaintenanceEnginePage = lazy(() =>\n import('../udp/pages/UdpMaintenanceEnginePage')\n);\n\nexport const UdpRoutes = (props) => {\n const { ...other } = props;\n return (\n <Suspense fallback={<PageLoading />}>\n <Switch>\n <PrivateRoute\n path='/virtual/:id'\n render={(props) => <VirtualBrowser {...props} {...other} />}\n />\n <PrivateRoute\n path='/menupage/:id'\n render={(props) => <MenuPage {...props} {...other} />}\n />\n\n <Route\n path={`/page/${UdpPageEnums.Udp_Public_Forms_Page}`}\n render={(props) => <UdpPublicForm {...props} {...other} />}\n />\n <Route\n path={`/passwordresetsuccess`}\n render={(props) => <PasswordResetRedirect props={props} />}\n />\n <PrivateRoute\n path='/workflowtask/:id'\n render={(props) => <WorkflowContainer {...props} {...other} />}\n />\n <PrivateRoute\n path='/myexports'\n render={(props) => (\n <MyExportsPage\n productId={ConfigService.config.UNITY_PRODUCT_ID}\n {...props}\n {...other}\n />\n )}\n />\n <PrivateRoute\n path='/crudbrowser'\n render={(props) => <UdpMaintenanceEnginePage {...props} />}\n />\n <PrivateRoute\n path='/tablebrowser'\n render={(props) => <UdpMaintenanceConfigPage {...props} />}\n />\n <PrivateRoute path='*' component={PageNotFoundRoute} />\n </Switch>\n </Suspense>\n );\n};\n"],"mappings":";;;;;;;;;;;;AAKA,MAAM,YAAY,YAAY,WAAW,EACvC,MAAM,EACJ,WAAW,MAAM,QAAQ,EAAE,EAC5B,EACF,EAAE;AAEH,MAAa,sBAAsB,UAAU;CAC3C,MAAM,EAAE,OAAO,YAAY,WAAW,SAAS,eAAe;CAC9D,MAAM,UAAU,WAAW;CAC3B,MAAM,EAAE,MAAM,gBAAgB;AAE9B,QACE,oCAAC,SAAI,WAAW,QAAQ,QACtB,oCAAC;EACC,OAAO,SAAS,EAAE,iBAAiB;EACnC,YAAY,cAAc;EAC1B,WACE,aAAa,EAAE,uDAAuD;EAExE,SAAS,WAAW,EAAE,iDAAiD;EACvE,IAAG;EACH,aAAa,EAAE,oBAAoB;EACvB;GACZ,CACE;;;;;ACtBV,MAAa,gBAAgB,EAAE,GAAG,iBAAiB;CACjD,MAAM,kBAAkB,yBAAyB;CACjD,MAAM,OAAO,SAAS;CACtB,MAAM,EAAE,MAAM,gBAAgB;AAS9B,KAAI,CAP0B,cAAc;AAC1C,MAAI,MAAM,WAAW,SAAS,KAAK,gBAAgB,CACjD,QAAO;AAET,SAAO;IACN,CAAC,KAAK,CAAC,IAEoB,mBAAmB,MAAM,eAAe,IACpE,QACE,oCAAC;EACC,MAAK;EACL,SAAS,UACP,oCAAC;GACC,SAAS,EAAE,2EAA2E;GACtF,YAAY;IACZ;GAEJ;AAIN,KAAI,mBAAmB,MAAM,eAAe,IAC1C,QAAO,oCAAC,OAAU,WAAc;AAGlC,QAAO;;;;;AC7BT,MAAM,iBAAiB,WACrB,OAAO,gCACR;AACD,MAAM,WAAW,WAAW,OAAO,0BAAwB;AAC3D,MAAM,gBAAgB,WAAW,OAAO,+BAA8B;AACtE,MAAM,oBAAoB,WAAW,OAAO,mCAAiC;AAC7E,MAAM,wBAAwB,WAC5B,OAAO,uCACR;AACD,MAAM,gBAAgB,WAAW,OAAO,+BAA+B;AACvE,MAAM,oBAAoB,WAAW,OAAO,mCAAkC;AAC9E,MAAM,2BAA2B,WAC/B,OAAO,0CACR;AACD,MAAM,2BAA2B,WAC/B,OAAO,0CACR;AAED,MAAa,aAAa,UAAU;CAClC,MAAM,EAAE,GAAG,UAAU;AACrB,QACE,oCAAC,YAAS,UAAU,oCAAC,kBAAc,IACjC,oCAACA,gBACC,oCAAC;EACC,MAAK;EACL,SAAS,YAAU,oCAAC;GAAe,GAAIC;GAAO,GAAI;IAAS;GAC3D,EACF,oCAAC;EACC,MAAK;EACL,SAAS,YAAU,oCAAC;GAAS,GAAIA;GAAO,GAAI;IAAS;GACrD,EAEF,oCAAC;EACC,MAAM,SAAS,aAAa;EAC5B,SAAS,YAAU,oCAAC;GAAc,GAAIA;GAAO,GAAI;IAAS;GAC1D,EACF,oCAAC;EACC,MAAM;EACN,SAAS,YAAU,oCAAC,yBAAsB,OAAOA,UAAS;GAC1D,EACF,oCAAC;EACC,MAAK;EACL,SAAS,YAAU,oCAAC;GAAkB,GAAIA;GAAO,GAAI;IAAS;GAC9D,EACF,oCAAC;EACC,MAAK;EACL,SAAS,YACP,oCAAC;GACC,WAAW,cAAc,OAAO;GAChC,GAAIA;GACJ,GAAI;IACJ;GAEJ,EACF,oCAAC;EACC,MAAK;EACL,SAAS,YAAU,oCAAC,0BAA6BA,QAAS;GAC1D,EACF,oCAAC;EACC,MAAK;EACL,SAAS,YAAU,oCAAC,0BAA6BA,QAAS;GAC1D,EACF,oCAAC;EAAa,MAAK;EAAI,WAAW;GAAqB,CAChD,CACA"}
package/dist/index.js CHANGED
@@ -196,7 +196,7 @@ import { PageContent, PageHeader, PageSectionHeader, PageSectionSpacer } from ".
196
196
  import { useIsUnityAuthenticated } from "./useIsUnityAuthenticated-n3QuDnIj.js";
197
197
  import { PowerBIReport } from "./PowerBIReport-CYX6YxbE.js";
198
198
  import { PageStatus } from "./PageStatus-CjupI8az.js";
199
- import { PrivateRoute, UdpRoutes } from "./UdpRoutes-BctzBOjG.js";
199
+ import { PrivateRoute, UdpRoutes } from "./UdpRoutes-DgjUyGo6.js";
200
200
  import { PageLoading } from "./PageLoading-DCoyVjWf.js";
201
201
  import { AmbientProjectSwitcher, FluentProfileMenuCard, ShellDropdown } from "./FluentProfileMenuCard-BIwebgKW.js";
202
202
  import "./redirectToLink-B4Y9oH1K.js";
@@ -228,7 +228,7 @@ import "./tagEnums-BD6xUu3X.js";
228
228
  import { CrudForm, UdpCrudFormFields } from "./CrudForm-CS8iy0jE.js";
229
229
  import "./CrudTableSidePanel-DdQ_D8g0.js";
230
230
  import { UdpMaintenanceEnginePage } from "./UdpMaintenanceEnginePage-CpqXzyEv.js";
231
- import { DonutChartWidget_exports, FluentPrimaryStatNumber_default, FluentSecondaryStatNumber_default, FluentStatNumber_default, FluentStatsSnippet_default, ProgressBarWidget_exports, RecentlyLoadedNodesWidget_exports, RemindersWidget_exports, SparklineWidget_exports, UdpPages, convertISODate } from "./udpPages-DigIOO_J.js";
231
+ import { DonutChartWidget_exports, FluentPrimaryStatNumber_default, FluentSecondaryStatNumber_default, FluentStatNumber_default, FluentStatsSnippet_default, ProgressBarWidget_exports, RecentlyLoadedNodesWidget_exports, RemindersWidget_exports, SparklineWidget_exports, UdpPages, convertISODate } from "./udpPages-D8I3GU4V.js";
232
232
  import { FluentCheckbox } from "./FluentCheckbox-DdPx94AF.js";
233
233
  import "./FluentIconKey-DdoCGnzt.js";
234
234
  import "./IconLibrary-CPErCan6.js";
@@ -236,7 +236,7 @@ import { ItemsWidgetCard, WidgetCard_default } from "./widgets-CRzkTpIV.js";
236
236
  import { AmbientVisualizer } from "./AmbientVisualizer-BFFwonre.js";
237
237
  import "./DataBrowserContainer-CESNdu3e.js";
238
238
  import "./RemindersCard-BJhfqNQk.js";
239
- import { UdpPublicForm } from "./UdpPublicForm-DNVbin2l.js";
239
+ import { UdpPublicForm } from "./UdpPublicForm-CGo9h-lA.js";
240
240
  import { AmbientAutoComplete } from "./AmbientAutoComplete-BmBgMVpv.js";
241
241
  import { AmbientStepper, ImportDataFromFileMapping } from "./ImportDataFromFileMapping-CjANFPa8.js";
242
242
  import { Divider } from "./Divider-BU1-Ll14.js";
@@ -347,7 +347,7 @@ import { FieldArrayCard, FieldType } from "./FieldArrayCard-BOx60qvz.js";
347
347
  import { ApprovalIcon, RejectIcon } from "./RejectIcon-BbYRcoLI.js";
348
348
  import { MyExportsPage, StatusCellRenderer } from "./MyExportsPage-C3PjlL4J.js";
349
349
  import "./BaseTreeMenu-CroItvOA.js";
350
- import { MenuPage_default } from "./MenuPage-BSU-NITc.js";
350
+ import { MenuPage_default } from "./MenuPage-C4LnhsE3.js";
351
351
  import * as React$1 from "react";
352
352
  import React, { Fragment, forwardRef, useCallback, useEffect, useMemo, useRef, useState } from "react";
353
353
  import { Avatar, Badge, Box as Box$1, Card, CardContent, Chip, Divider as Divider$1, FormControl as FormControl$1, FormControlLabel as FormControlLabel$1, FormGroup, Grid as Grid$1, Grow, IconButton, InputAdornment as InputAdornment$1, InputLabel, LinearProgress as LinearProgress$1, ListItemIcon, Menu, MenuItem, Select, Tab, Tabs, Tooltip, Typography as Typography$1, colors as colors$1, darken, lighten, makeStyles, styled, useTheme } from "@material-ui/core";
@@ -4153,7 +4153,7 @@ function buildInnerMenuFromItems(items = [], menuTitle, idPrefix = "custom", sho
4153
4153
  idMap
4154
4154
  };
4155
4155
  }
4156
- const CustomMenuPage = ({ items = [], className = "", menuTitle, mainContent: clientMainContent, idPrefix = "custom", showItemCount = false, itemCountAccessor = null }) => {
4156
+ const CustomMenuPage = ({ items = [], className = "", menuTitle, mainContent: clientMainContent, idPrefix = "custom", showItemCount = false, itemCountAccessor = null, allowMissingPageParam = false }) => {
4157
4157
  const classes = useStyles$1();
4158
4158
  const { innerMenu, idMap } = buildInnerMenuFromItems(items, menuTitle, idPrefix, showItemCount, itemCountAccessor);
4159
4159
  const clientContent = clientMainContent ? ({ selectedNode, menuItemsList }) => clientMainContent({
@@ -4170,7 +4170,9 @@ const CustomMenuPage = ({ items = [], className = "", menuTitle, mainContent: cl
4170
4170
  }));
4171
4171
  return /* @__PURE__ */ React.createElement(MenuPage_default, {
4172
4172
  innerMenuOverride: innerMenu,
4173
- mainContent: composedMainContent
4173
+ mainContent: composedMainContent,
4174
+ menuTitle,
4175
+ allowMissingPageParam
4174
4176
  });
4175
4177
  };
4176
4178
  CustomMenuPage.propTypes = {
@@ -4180,7 +4182,8 @@ CustomMenuPage.propTypes = {
4180
4182
  mainContent: PropTypes.func,
4181
4183
  idPrefix: PropTypes.string,
4182
4184
  showItemCount: PropTypes.bool,
4183
- itemCountAccessor: PropTypes.func
4185
+ itemCountAccessor: PropTypes.func,
4186
+ allowMissingPageParam: PropTypes.bool
4184
4187
  };
4185
4188
  var CustomMenuPage_default = CustomMenuPage;
4186
4189