udp-react-enterprise-component-library 25.1.0-beta.6 → 25.1.1-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.
- package/dist/{AmbientGridTemplate-BqlMt5Su.js → AmbientGridTemplate-6xfwTiz-.js} +24 -62
- package/dist/AmbientGridTemplate-6xfwTiz-.js.map +1 -0
- package/dist/ClientSideUdpGrid-CEhDqIId.js +56 -0
- package/dist/ClientSideUdpGrid-CEhDqIId.js.map +1 -0
- package/dist/{EnvironmentRibbon-DaDmKAPO.js → EnvironmentRibbon-oEmbWjEq.js} +4 -148
- package/dist/EnvironmentRibbon-oEmbWjEq.js.map +1 -0
- package/dist/{MenuPage-CO6_GWwB.js → MenuPage-CZHpoopY.js} +12 -13
- package/dist/{MenuPage-CO6_GWwB.js.map → MenuPage-CZHpoopY.js.map} +1 -1
- package/dist/{MyExportsPage-CX9tzqHk.js → MyExportsPage-CS2Bw2mF.js} +56 -69
- package/dist/{MyExportsPage-CX9tzqHk.js.map → MyExportsPage-CS2Bw2mF.js.map} +1 -1
- package/dist/MyExportsPage-hyX42CN6.js +11 -0
- package/dist/{PageContainer-k8KCfGsM.js → PageContainer-BPHLFGju.js} +12 -17
- package/dist/PageContainer-BPHLFGju.js.map +1 -0
- package/dist/{PageNotFoundRoute-CxYZNEhN.js → PageNotFoundRoute-D9dLbM_w.js} +1 -1
- package/dist/{PageNotFoundRoute-CxYZNEhN.js.map → PageNotFoundRoute-D9dLbM_w.js.map} +1 -1
- package/dist/PageNotFoundRoute-DUj0Q9J8.js +3 -0
- package/dist/{PasswordResetRedirect-BHnkAW40.js → PasswordResetRedirect-C3g8L0vA.js} +2 -3
- package/dist/{PasswordResetRedirect-BHnkAW40.js.map → PasswordResetRedirect-C3g8L0vA.js.map} +1 -1
- package/dist/PasswordResetRedirect-Dh-S5Ril.js +3 -0
- package/dist/{SearchUtilities-Bor3HbfB.js → SearchUtilities-Btugro8y.js} +11 -20
- package/dist/{SearchUtilities-Bor3HbfB.js.map → SearchUtilities-Btugro8y.js.map} +1 -1
- package/dist/{SideSheet-DUsxG1FN.js → SideSheet-BsDoeNmq.js} +7 -47
- package/dist/SideSheet-BsDoeNmq.js.map +1 -0
- package/dist/UdpMaintenanceConfigPage-DcHntunS.js +88 -0
- package/dist/UdpMaintenanceConfigPage-DcHntunS.js.map +1 -0
- package/dist/UdpPublicForm-DTt-lMfk.js +4 -0
- package/dist/{UdpPublicForm-Caa1tH6z.js → UdpPublicForm-LDSuOwV2.js} +2 -2
- package/dist/{UdpPublicForm-Caa1tH6z.js.map → UdpPublicForm-LDSuOwV2.js.map} +1 -1
- package/dist/{UtilitySideBar-D4CXGtW2.js → UtilitySideBar-95k0edSA.js} +45 -89
- package/dist/{UtilitySideBar-D4CXGtW2.js.map → UtilitySideBar-95k0edSA.js.map} +1 -1
- package/dist/{VirtualBrowser-BXL0hdy0.js → VirtualBrowser-_epMjUkE.js} +23 -29
- package/dist/{VirtualBrowser-BXL0hdy0.js.map → VirtualBrowser-_epMjUkE.js.map} +1 -1
- package/dist/{WorkflowContainer-DrqzuQtU.js → WorkflowContainer-ClPvY2mG.js} +14 -20
- package/dist/{WorkflowContainer-DrqzuQtU.js.map → WorkflowContainer-ClPvY2mG.js.map} +1 -1
- package/dist/WorkflowContainer-D0QUOc-f.js +11 -0
- package/dist/{apiHelpers-DZots3og.js → apiHelpers-CmM6DWAT.js} +7 -12
- package/dist/{apiHelpers-DZots3og.js.map → apiHelpers-CmM6DWAT.js.map} +1 -1
- package/dist/entityUtilities-Dy-jsB5c.js +22 -0
- package/dist/entityUtilities-Dy-jsB5c.js.map +1 -0
- package/dist/index.js +1494 -1984
- package/dist/index.js.map +1 -1
- package/dist/{propertyTypeEnums-Civy7RJv.js → propertyTypeEnums-BCCGQqVB.js} +2 -2
- package/dist/{propertyTypeEnums-Civy7RJv.js.map → propertyTypeEnums-BCCGQqVB.js.map} +1 -1
- package/dist/types/index.d.ts +1 -4
- package/dist/types/maintenanceEngine/crudBrowser/CrudTableColumnDefs.d.ts +1 -9
- package/dist/types/maintenanceEngine/crudBrowser/crudHelper.d.ts +1 -0
- package/dist/types/menuPage/MenuPage.d.ts +2 -1
- package/dist/types/shell/ui/ShellDropdown.d.ts +15 -0
- package/dist/types/shell/ui/SiteHeader.d.ts +1 -0
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/dist/types/udp/pages/UdpMaintenanceConfigPage.d.ts +2 -1
- package/dist/useAxiosGet-Dh5pVURP.js +144 -0
- package/dist/useAxiosGet-Dh5pVURP.js.map +1 -0
- package/dist/useAxiosMutate-DlG255x9.js +43 -0
- package/dist/useAxiosMutate-DlG255x9.js.map +1 -0
- package/package.json +2 -2
- package/dist/AmbientGridTemplate-BqlMt5Su.js.map +0 -1
- package/dist/EnvironmentRibbon-DaDmKAPO.js.map +0 -1
- package/dist/MyExportsPage-CkzQ0MRq.js +0 -8
- package/dist/PageContainer-k8KCfGsM.js.map +0 -1
- package/dist/PageNotFoundRoute-BbBtA9Cz.js +0 -3
- package/dist/PasswordResetRedirect-tUV2yEkH.js +0 -3
- package/dist/SideSheet-DUsxG1FN.js.map +0 -1
- package/dist/UdpPublicForm-Cvw5tOHe.js +0 -4
- package/dist/WorkflowContainer-Q8gtuaB7.js +0 -9
- package/dist/types/maintenanceEngine/crudBrowser/CrudTableActionRender.d.ts +0 -3
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import "./AmbientGridTemplate-6xfwTiz-.js";
|
|
2
|
+
import "./SideSheet-BsDoeNmq.js";
|
|
3
|
+
import "./EnvironmentRibbon-oEmbWjEq.js";
|
|
4
|
+
import "./apiHelpers-CmM6DWAT.js";
|
|
5
|
+
import "./useAxiosGet-Dh5pVURP.js";
|
|
6
|
+
import "./useAxiosMutate-DlG255x9.js";
|
|
7
|
+
import "./entityUtilities-Dy-jsB5c.js";
|
|
8
|
+
import "./SearchUtilities-Btugro8y.js";
|
|
9
|
+
import { MyExportsPage } from "./MyExportsPage-CS2Bw2mF.js";
|
|
10
|
+
|
|
11
|
+
export { MyExportsPage };
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { FluentIcon, FluentIconButton, LayoutUnit, PrimaryActionButton, StandardTitle, StatusChip,
|
|
1
|
+
import { FluentIcon, FluentIconButton, LayoutUnit, PrimaryActionButton, StandardTitle, StatusChip, useId, useShellStore } from "./EnvironmentRibbon-oEmbWjEq.js";
|
|
2
|
+
import { useAxiosGet } from "./useAxiosGet-Dh5pVURP.js";
|
|
2
3
|
import React, { Fragment, createContext, createRef, forwardRef, memo, useCallback, useEffect, useMemo, useReducer, useRef, useState } from "react";
|
|
3
4
|
import { Badge, Button, ButtonBase, Card, CardActions, CardContent, CircularProgress, Collapse, Divider, IconButton, LinearProgress, ListItemIcon, ListItemText, Menu, MenuItem, Popover, Slide, Tooltip, Typography, lighten, makeStyles, useTheme } from "@material-ui/core";
|
|
4
5
|
import { ConfigService } from "udp-react-stencil-component-library";
|
|
@@ -369,8 +370,7 @@ FUICardHeaderMenu = forwardRef(FUICardHeaderMenu);
|
|
|
369
370
|
const FUICard = (props, ref) => {
|
|
370
371
|
const classes = useStyles$6();
|
|
371
372
|
const { className, children, actions, title, headerActions, CardHeaderProps, CardProps, raised, name,...cardProps } = props;
|
|
372
|
-
const
|
|
373
|
-
const titleId = `${id}-title`;
|
|
373
|
+
const titleId = `${useId(name, cardProps.id)}-title`;
|
|
374
374
|
return /* @__PURE__ */ React.createElement(FluentCard, {
|
|
375
375
|
ref,
|
|
376
376
|
component: "section",
|
|
@@ -415,7 +415,7 @@ var FUIMenuItem_default = forwardRef(FUIMenuItem);
|
|
|
415
415
|
*/
|
|
416
416
|
const WidgetCard = (props) => {
|
|
417
417
|
const { children, headerActions, className, widgetType, id, layout, params, setParam, onDelete, loading, errors, theme, hideWidgetName, innerPadding, contentHeight, contentMaxHeight,...other } = props;
|
|
418
|
-
const
|
|
418
|
+
const classes = makeStyles((theme$1) => ({
|
|
419
419
|
root: { "&.react-resizable-hide .react-resizable-handle": { display: "none" } },
|
|
420
420
|
darkRoot: {
|
|
421
421
|
"&.react-resizable-hide .react-resizable-handle": { display: "none" },
|
|
@@ -448,8 +448,7 @@ const WidgetCard = (props) => {
|
|
|
448
448
|
justifyContent: "space-between",
|
|
449
449
|
padding: innerPadding || (widgetType === "VEERegisterRead" ? 0 : theme$1.spacing(2))
|
|
450
450
|
}
|
|
451
|
-
}));
|
|
452
|
-
const classes = useStyles$13();
|
|
451
|
+
}))();
|
|
453
452
|
const raised = /(^|\s)react-draggable-dragging(\s|$)/.test(className ?? "");
|
|
454
453
|
let body = children;
|
|
455
454
|
if (loading && !body) body = /* @__PURE__ */ React.createElement("div", { className: classes.loadingContent }, /* @__PURE__ */ React.createElement(CircularProgress, { size: 64 }));
|
|
@@ -831,7 +830,7 @@ const UdpTabs = (props) => {
|
|
|
831
830
|
//#region src/UI/utilityDisplay/utilityHeader/ui/teleporter.ts
|
|
832
831
|
const useAllTeleporters = () => {
|
|
833
832
|
const teleporterMap = useTeleporterStore((state) => state.teleporterMap);
|
|
834
|
-
|
|
833
|
+
return useMemo(() => {
|
|
835
834
|
const result = [];
|
|
836
835
|
for (const [targetId, locationMap] of teleporterMap.entries()) for (const [location, entry] of locationMap.entries()) result.push([
|
|
837
836
|
targetId,
|
|
@@ -840,7 +839,6 @@ const useAllTeleporters = () => {
|
|
|
840
839
|
]);
|
|
841
840
|
return result;
|
|
842
841
|
}, [teleporterMap]);
|
|
843
|
-
return allTeleporters;
|
|
844
842
|
};
|
|
845
843
|
|
|
846
844
|
//#endregion
|
|
@@ -1325,12 +1323,10 @@ const reducer = (state, action) => {
|
|
|
1325
1323
|
const operator = action.type.substr(0, action.type.indexOf(" "));
|
|
1326
1324
|
const prop = action.type.substr(action.type.indexOf(" ") + 1);
|
|
1327
1325
|
switch (operator) {
|
|
1328
|
-
case "set":
|
|
1329
|
-
|
|
1330
|
-
|
|
1331
|
-
|
|
1332
|
-
};
|
|
1333
|
-
return newState;
|
|
1326
|
+
case "set": return {
|
|
1327
|
+
...state,
|
|
1328
|
+
[prop]: action.value
|
|
1329
|
+
};
|
|
1334
1330
|
default: throw new Error("Unknown operator");
|
|
1335
1331
|
}
|
|
1336
1332
|
};
|
|
@@ -1354,8 +1350,7 @@ const useSetLocationState = () => {
|
|
|
1354
1350
|
const location = useLocation();
|
|
1355
1351
|
const setLocationState = (newState) => {
|
|
1356
1352
|
const currentState = location.state || {};
|
|
1357
|
-
|
|
1358
|
-
if (!hasChanged || !!location?.state) return;
|
|
1353
|
+
if (!Object.entries(newState).some(([key, value]) => currentState[key] !== value) || !!location?.state) return;
|
|
1359
1354
|
history.replace({
|
|
1360
1355
|
pathname: location.pathname,
|
|
1361
1356
|
search: location.search,
|
|
@@ -1538,4 +1533,4 @@ const PageContainer = (props) => {
|
|
|
1538
1533
|
|
|
1539
1534
|
//#endregion
|
|
1540
1535
|
export { AmbientPopoverMenuItem, FUICardHeaderMenu, FUICard_default, FUIMenuItem_default, FluentCard, FluentCardActions, FluentCardContent, PAHExport, PageContainer, PrimaryActionHeader, ToolBarButton, UdpTabs, WidgetCard, pageContext, useAllTeleporters, useSetLocationState, useTeleporterStore };
|
|
1541
|
-
//# sourceMappingURL=PageContainer-
|
|
1536
|
+
//# sourceMappingURL=PageContainer-BPHLFGju.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PageContainer-BPHLFGju.js","names":["result: [string, string, TeleporterInstance][]","useStyles","layout: Omit<Layout, 'i' | 'x' | 'y'>","uuid","ResponsiveGridLayout","useStyles","useStyles","useStyles","useStyles","useStyles","useStyles","FUISquareIconButton","FUICardHeader","useStyles","theme","FUICard","FUIMenuItem","params","layouts","DashboardWidget","DashboardCardGrid","useStyles","useStyles","useStyles","currentTabList","result: [string, string, TeleporterInstance][]","useStyles","value","initialState: any","widgetParams","uuid","Page"],"sources":["../src/stores/teleporterStore.ts","../src/UI/inputs/buttons/ToolBarButton.jsx","../src/dashboard/getWidgetLayout.ts","../src/dashboard/DashboardCardGrid.jsx","../src/UI/surfaces/cards/FUICardHeader.jsx","../src/UI/inputs/buttons/FUISquareIconButton.jsx","../src/UI/surfaces/cards/FluentCard.jsx","../src/UI/surfaces/cards/FluentCardContent.jsx","../src/UI/surfaces/cards/FluentCardActions.jsx","../src/UI/surfaces/cards/FUICard.jsx","../src/UI/widgets/FluentComponents/FUIMenuItem.jsx","../src/dashboard/WidgetCard.jsx","../src/dashboard/DashboardWidget.jsx","../src/page/Page.jsx","../src/UI/inputs/buttons/AmbientPopoverMenuItem.jsx","../src/UI/utilityDisplay/utilityHeader/ui/PAHExport.jsx","../src/UI/navigation/tabs/UdpTabs.jsx","../src/UI/utilityDisplay/utilityHeader/ui/teleporter.ts","../src/UI/utilityDisplay/utilityHeader/PrimaryActionHeader.jsx","../src/contexts/PageContext.tsx","../src/hooks/useSetLocationState.js","../src/page/PageContainer.jsx"],"sourcesContent":["import { create } from 'zustand';\nimport { createTeleporter } from 'react-teleporter';\n\ntype TeleporterInstance = ReturnType<typeof createTeleporter>;\n\ntype LocationEntry = {\n teleporter: TeleporterInstance;\n};\n\ntype TeleporterMap = Map<string, Map<string, LocationEntry>>;\n\ninterface TeleporterStore {\n teleporterMap: TeleporterMap;\n getTeleporter: (targetId: string, location: string) => TeleporterInstance;\n getAllTeleporters: () => [string, string, TeleporterInstance][];\n}\n\nexport const useTeleporterStore = create<TeleporterStore>((set, get) => ({\n teleporterMap: new Map(),\n\n getTeleporter: (targetId = '', location) => {\n const mapCopy = new Map(get().teleporterMap); // clone to maintain reactivity\n let locationMap = mapCopy.get(targetId);\n\n if (!locationMap) {\n locationMap = new Map();\n mapCopy.set(targetId, locationMap);\n }\n\n if (!locationMap.has(location)) {\n locationMap.set(location, {\n teleporter: createTeleporter()\n });\n }\n\n const teleporter = locationMap.get(location)!.teleporter;\n\n // Update store\n set({ teleporterMap: mapCopy });\n\n return teleporter;\n },\n\n getAllTeleporters: () => {\n const result: [string, string, TeleporterInstance][] = [];\n const map = get().teleporterMap;\n\n for (const [targetId, locationMap] of map.entries()) {\n for (const [location, entry] of locationMap.entries()) {\n result.push([targetId, location, entry.teleporter]);\n }\n }\n\n return result;\n }\n}));\n","import { ButtonBase, makeStyles, Tooltip, Typography } from '@material-ui/core';\nimport PropTypes from 'prop-types';\nimport React from 'react';\n\nconst useStyles = makeStyles(\n (theme) => ({\n root: {\n borderBottom: (props) =>\n props.selected && `2px solid ${theme.palette.secondary.main}`\n },\n wrapper: {\n display: 'flex',\n flexDirection: 'row',\n marginRight: theme.spacing(2)\n },\n icon: {\n fontSize: 16,\n width: 16,\n height: 16,\n color: theme.palette.secondary.main\n },\n iconWrapper: {\n background: theme.palette.common.white,\n borderRadius: 100,\n padding: theme.spacing(1)\n },\n label: {\n marginLeft: theme.spacing(1),\n fontSize: '0.875rem',\n '&:hover': { color: theme.palette.secondary.main }\n }\n }),\n { name: 'ToolBarButton' }\n);\n\nexport const ToolBarButton = (props) => {\n const classes = useStyles(props);\n const {\n component: ToolBarComponent,\n click,\n label,\n expanded,\n aria,\n icon = true,\n disabled = false\n } = props;\n\n return (\n <Tooltip\n title={(expanded && label) || aria || ''}\n aria-label={label}\n placement='top'\n enterDelay={!expanded && 5000}\n >\n <ButtonBase\n classes={{\n root: classes.root\n // label: classes.label\n }}\n className={classes.wrapper}\n onClick={click}\n disableRipple\n aria-label={aria}\n disabled={disabled}\n >\n {icon && (\n <div className={classes.iconWrapper}>\n <ToolBarComponent className={classes.icon} />\n </div>\n )}\n\n <Typography variant='body2' className={classes.label}>\n {!expanded && label}\n </Typography>\n </ButtonBase>\n </Tooltip>\n );\n};\n\nToolBarButton.propTypes = {\n component: PropTypes.func,\n click: PropTypes.func,\n label: PropTypes.string,\n expanded: PropTypes.bool,\n aria: PropTypes.string,\n icon: PropTypes.bool\n};\n","import { Layout } from 'react-grid-layout';\nimport { LayoutDimension } from './types';\n\nconst getW = (\n w: LayoutDimension | undefined\n): Pick<Layout, 'w' | 'minW' | 'maxW'> => {\n if (typeof w === 'object') {\n return {\n w: w.default,\n minW: w.min,\n maxW: w.max\n };\n }\n\n if (typeof w === 'number') {\n return { w };\n }\n\n return { w: 2 };\n};\n\nconst getH = (\n h: LayoutDimension | undefined\n): Pick<Layout, 'h' | 'minH' | 'maxH'> => {\n if (typeof h === 'object') {\n return {\n h: h.default,\n minH: h.min,\n maxH: h.max\n };\n }\n\n if (typeof h === 'number') {\n return { h };\n }\n\n return { h: 2 };\n};\n\n/**\n * Get a default layout for widgets of a type\n */\nexport default function getWidgetLayout(\n getWidget: Function,\n widgetType: string\n): Omit<Layout, 'i' | 'x' | 'y'> {\n const { w, h } = (getWidget && getWidget(widgetType)?.layout) ?? {};\n\n const layout: Omit<Layout, 'i' | 'x' | 'y'> = {\n ...getW(w),\n ...getH(h)\n };\n\n const wResizable = 'minW' in layout || 'maxW' in layout;\n const hResizable = 'minH' in layout || 'maxH' in layout;\n layout.isResizable = wResizable || hResizable;\n\n return layout;\n}\n","import { v4 as uuid } from 'uuid';\nimport React, { useCallback, useMemo, useRef } from 'react';\nimport { Responsive as ResponsiveGridLayout } from 'react-grid-layout';\nimport { makeStyles, useTheme } from '@material-ui/core';\nimport { useMeasure } from 'react-use';\nimport 'react-grid-layout/css/styles.css';\nimport 'react-resizable/css/styles.css';\nimport { useDragLayer } from 'react-dnd';\nimport getWidgetLayout from './getWidgetLayout.ts';\nimport { useShellStore } from '../stores/shellStore';\n\nconst useStyle = makeStyles(\n (theme) => ({\n root: {\n display: 'flex',\n flexDirection: 'column',\n width: '100%',\n height: '100%',\n marginBottom: (props) => (props?.disableMargin ? '' : theme.spacing(3))\n }\n }),\n { name: 'DashboardCardGrid' }\n);\n\nconst DASHBOARD_WIDGET = Symbol('DASHBOARD_WIDGET');\n\nconst breakpoints = {\n xs: 0,\n xl: 1150\n};\n\nconst breakpointCols = {\n xs: 4,\n xl: 4\n};\n\n/**\n * Grid layout for dashboard cards\n */\nconst DashboardCardGrid = (props) => {\n const classes = useStyle(props);\n const { children, onCreateCard, gridProperties, ...other } = props;\n const { getWidget } = useShellStore();\n const rglRef = useRef();\n const [ref, { width }] = useMeasure();\n const theme = useTheme();\n const { droppingWidgetType } = useDragLayer((monitor) => {\n if (monitor.getItemType() === DASHBOARD_WIDGET) {\n const { id: wigetType } = monitor.getItem();\n return { droppingWidgetType: wigetType };\n }\n\n return { droppingWidgetType: null };\n });\n const droppingItemLayout = useMemo(() => {\n if (droppingWidgetType) {\n return { i: uuid(), ...getWidgetLayout(getWidget, droppingWidgetType) };\n }\n }, [getWidget, droppingWidgetType]);\n\n const drag = useCallback((layout, oldLayoutItem, layoutItem, placeholder) => {\n // Cards larger than 1 should snap to columns that are a multiple of 2\n // if (layoutItem.w > 1) {\n // // @fixme This affects the visual placeholder, but doesn't actually fix the layout item when its dropped\n // placeholder.x = layoutItem.x = Math.floor(layoutItem.x / 2) * 2;\n // }\n }, []);\n\n const resize = useCallback(\n (layout, oldLayoutItem, layoutItem, placeholder) => {\n // Widths larger than 1 should be a multiple of 2\n // The small size of columns is just so we can have small 1x1 tiles that are 1/2 the size of normal cards\n // if (layoutItem.w > 1) {\n // const w = Math.floor(layoutItem.w / 2) * 3;\n // layoutItem.w = w;\n // placeholder.w = w;\n // }\n\n // There is no 3 (i.e. 6) column layout so don't allow cards to be that size either\n if (layoutItem.w >= 6 && layoutItem.w < 8) {\n layoutItem.w = 4;\n placeholder.w = 4;\n }\n },\n []\n );\n\n const drop = useCallback(\n (layout, item) => {\n if (droppingWidgetType) {\n const { x, y, w, h } = item;\n const { breakpoint } = rglRef.current.state;\n if (onCreateCard)\n onCreateCard({\n widgetType: droppingWidgetType,\n id: uuid(),\n layout: {\n [breakpoint]: {\n x,\n y,\n w,\n h\n }\n },\n params: []\n });\n }\n },\n [droppingWidgetType, onCreateCard]\n );\n\n return (\n <div ref={ref} className={classes.root}>\n {width ? (\n <ResponsiveGridLayout\n ref={rglRef}\n {...other}\n width={width}\n breakpoints={breakpoints}\n cols={breakpointCols}\n rowHeight={128}\n margin={[theme.spacing(3), theme.spacing(3)]}\n containerPadding={[0, 0]}\n draggableHandle='[data-handle]'\n onDrag={drag}\n onResize={resize}\n onDrop={drop}\n isDroppable={gridProperties?.isDroppable || false}\n isDraggable={gridProperties?.isDraggable || false}\n droppingItem={droppingItemLayout}\n style={{\n height: '100%'\n }}\n >\n {children}\n </ResponsiveGridLayout>\n ) : null}\n </div>\n );\n};\n\nexport default DashboardCardGrid;\n","import { makeStyles, Typography } from '@material-ui/core';\nimport clsx from 'clsx';\nimport React, { forwardRef } from 'react';\n\nconst useStyles = makeStyles(theme => ({\n root: {\n minHeight: 40,\n paddingLeft: theme.spacing(2),\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center',\n borderBottom: `1px solid ${theme.palette.divider}`,\n },\n title: {\n flexGrow: 1,\n },\n}));\n\nconst FUICardHeader = (props, ref) => {\n const classes = useStyles(props);\n const { className, children, headerActions, titleId, ...other } = props;\n\n return (\n <div ref={ref} {...other} className={clsx(className, classes.root)}>\n <Typography id={titleId} className={classes.title}>\n {children}\n </Typography>\n {headerActions}\n </div>\n );\n};\n\nexport default forwardRef(FUICardHeader);\n","import { IconButton, makeStyles } from '@material-ui/core';\nimport React from 'react';\n\nconst useStyles = makeStyles(\n theme => ({\n root: {\n borderRadius: 0,\n },\n }),\n { name: 'FUISquareIconButton' }\n);\n\n/**\n * <IconButton> but with a square highlight\n */\nconst FUISquareIconButton = props => {\n const classes = useStyles(props);\n return <IconButton {...props} classes={classes} />;\n};\n\nexport default FUISquareIconButton;\n","import React, { forwardRef } from 'react'\n\nimport { makeStyles, Card } from '@material-ui/core'\n\nconst useStyles = makeStyles(\n {\n root: {}\n },\n { name: 'FluentCard' }\n)\n\n/**\n * A variant of <Card> that uses a square Fluent UI card style\n */\nexport const FluentCard = forwardRef((props, ref) => {\n const classes = useStyles(props)\n const { children, ...other } = props\n\n return (\n <Card ref={ref} square {...other} classes={classes}>\n {children}\n </Card>\n )\n})\nFluentCard.displayName = 'FluentCard'\n","import React from 'react';\nimport { forwardRef } from 'react';\nimport { makeStyles, CardContent } from '@material-ui/core';\n\nconst useStyles = makeStyles(\n {\n root: {},\n },\n { name: 'FluentCardContent' }\n);\n\n/**\n * A variant of <CardContent> that uses a Fluent UI card style\n */\nexport const FluentCardContent = forwardRef((props, ref) => {\n const classes = useStyles(props);\n const { children, ...other } = props;\n\n return (\n <CardContent ref={ref} {...other} classes={classes}>\n {children}\n </CardContent>\n );\n});\nFluentCardContent.displayName = 'FluentCardContent';\n","import React from 'react';\nimport { forwardRef } from 'react';\nimport { makeStyles, CardActions } from '@material-ui/core';\n\nconst useStyles = makeStyles(\n {\n root: {},\n spacing: {},\n },\n { name: 'FluentCardActions' }\n);\n\n/**\n * A variant of <CardActions> that uses a Fluent UI card style\n */\nexport const FluentCardActions = forwardRef((props, ref) => {\n const classes = useStyles(props);\n const { children, ...other } = props;\n\n return (\n <CardActions ref={ref} {...other} classes={classes}>\n {children}\n </CardActions>\n );\n});\nFluentCardActions.displayName = 'FluentCardActions';\n","import { MoreIcon } from '@fluentui/react-icons'\nimport { Button, makeStyles, Menu } from '@material-ui/core'\nimport clsx from 'clsx'\nimport React, { forwardRef } from 'react'\nimport { FluentIcon } from '../../../utilities/FluentIcon'\nimport FUICardHeader from './FUICardHeader'\nimport FUISquareIconButton from '../../inputs/buttons/FUISquareIconButton'\nimport { FluentCard } from './FluentCard'\nimport { FluentCardContent } from './FluentCardContent'\nimport { FluentCardActions } from './FluentCardActions'\nimport useId from '../../widgets/utils/useId'\n\nconst useStyles = makeStyles(\n (theme) => ({\n root: {\n display: 'flex',\n flexDirection: 'column'\n },\n raised: {\n zIndex: 1\n },\n contentArea: {\n flex: '1 1 auto',\n minHeight: 0,\n display: 'flex',\n flexDirection: 'column'\n },\n cardActions: {\n display: 'flex',\n flexDirection: 'row',\n justifyContent: 'flex-start',\n paddingTop: theme.spacing(1),\n padding: theme.spacing(2)\n }\n }),\n { name: 'FUICard' }\n)\n\nexport let FUICardAction = (props, ref) => {\n const { children, ...other } = props\n\n return (\n <Button\n ref={ref}\n size='small'\n variant='contained'\n disableElevation\n {...other}\n >\n {children}\n </Button>\n )\n}\nFUICardAction = forwardRef(FUICardAction)\n\nexport let FUICardHeaderMenu = (props, ref) => {\n const { children } = props\n\n return (\n <div\n button={\n <FUISquareIconButton>\n <FluentIcon component={MoreIcon} size='small' />\n </FUISquareIconButton>\n }\n menu={<Menu>{children}</Menu>}\n />\n )\n}\nFUICardHeaderMenu = forwardRef(FUICardHeaderMenu)\n\nconst FUICard = (props, ref) => {\n const classes = useStyles()\n const {\n className,\n children,\n actions,\n title,\n headerActions,\n CardHeaderProps,\n CardProps,\n raised,\n name,\n ...cardProps\n } = props\n const id = useId(name, cardProps.id)\n const titleId = `${id}-title`\n\n return (\n <FluentCard\n ref={ref}\n component='section'\n aria-labelledby={titleId}\n {...cardProps}\n raised={raised}\n className={clsx(className, raised && classes.raised)}\n {...CardProps}\n classes={{ root: classes.root }}\n >\n <FUICardHeader\n titleId={titleId}\n headerActions={headerActions}\n {...CardHeaderProps}\n >\n {title}\n </FUICardHeader>\n <FluentCardContent className={classes.contentArea}>\n {children}\n </FluentCardContent>\n {actions && (\n <FluentCardActions className={classes.cardActions}>\n {actions}\n </FluentCardActions>\n )}\n </FluentCard>\n )\n}\n\nexport default forwardRef(FUICard)\n","import React, { forwardRef } from 'react'\nimport {\n MenuItem,\n ListItemIcon,\n ListItemText,\n makeStyles\n} from '@material-ui/core'\nimport { FluentIcon } from '../../../utilities/FluentIcon'\n\nconst useStyles = makeStyles(\n {\n listItemIcon: {\n minWidth: 32\n }\n },\n { name: 'FUIMenuItem' }\n)\n\n/**\n * <MenuItem> with icon support\n */\nconst FUIMenuItem = (props, ref) => {\n const classes = useStyles()\n const { icon, fluentIcon, primary, secondary, ...menuItemProps } = props\n\n return (\n <MenuItem ref={ref} dense {...menuItemProps}>\n <ListItemIcon className={classes.listItemIcon}>\n {icon || <FluentIcon component={fluentIcon} />}\n </ListItemIcon>\n <ListItemText {...{ primary, secondary }} />\n </MenuItem>\n )\n}\n\nexport default forwardRef(FUIMenuItem)\n","import { DeleteIcon } from '@fluentui/react-icons';\nimport { makeStyles, CircularProgress, lighten } from '@material-ui/core';\nimport clsx from 'clsx';\nimport React from 'react';\nimport FUICard, { FUICardHeaderMenu } from '../UI/surfaces/cards/FUICard';\nimport FUIMenuItem from '../UI/widgets/FluentComponents/FUIMenuItem';\n\n/**\n * Core component for dashboard widget cards\n */\nexport const WidgetCard = (props) => {\n const {\n children,\n headerActions,\n className,\n widgetType,\n id,\n layout,\n params,\n setParam,\n onDelete,\n loading,\n errors,\n theme,\n hideWidgetName,\n innerPadding,\n contentHeight,\n contentMaxHeight,\n ...other\n } = props;\n\n const useStyles = makeStyles((theme) => ({\n root: {\n '&.react-resizable-hide .react-resizable-handle': {\n display: 'none'\n }\n },\n darkRoot: {\n '&.react-resizable-hide .react-resizable-handle': {\n display: 'none'\n },\n background: '#424242',\n color: 'white'\n },\n anyRoot: {\n '& .MuiCardContent-root': {\n justifyContent: 'space-between',\n overflow: 'auto',\n padding: 0\n }\n },\n handle: {\n cursor: 'move',\n '&:hover': {\n backgroundColor: theme.palette.action.hover\n },\n display: hideWidgetName && 'none'\n },\n loadingContent: {\n flex: 1,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center'\n },\n innerWidgetContentContainer: {\n height:\n widgetType === 'TransformerLoadWidget'\n ? 'auto'\n : contentHeight\n ? contentHeight\n : '100%',\n maxHeight: contentMaxHeight ? contentMaxHeight : '',\n minWidth: widgetType === 'ProgressBarWidget' ? 0 : 270,\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'space-between',\n padding:\n innerPadding ||\n (widgetType === 'VEERegisterRead' ? 0 : theme.spacing(2))\n }\n }));\n const classes = useStyles();\n const raised = /(^|\\s)react-draggable-dragging(\\s|$)/.test(className ?? '');\n\n let body = children;\n if (loading && !body) {\n body = (\n <div className={classes.loadingContent}>\n <CircularProgress size={64} />\n </div>\n );\n }\n if (errors && !body) {\n body = <div>Unexpected error</div>;\n }\n\n return (\n <FUICard\n {...other}\n className={clsx(\n className,\n theme === 'dark' ? classes.darkRoot : classes.root,\n classes.anyRoot\n )}\n raised={raised}\n CardHeaderProps={{\n className: classes.handle,\n 'data-handle': true\n }}\n headerActions={\n <>\n {headerActions}\n <FUICardHeaderMenu>\n <FUIMenuItem\n onClick={onDelete}\n fluentIcon={DeleteIcon}\n primary='Delete'\n />\n </FUICardHeaderMenu>\n </>\n }\n >\n <div className={classes.innerWidgetContentContainer}>{body}</div>\n </FUICard>\n );\n};\n","import React, { memo, useCallback, useMemo } from 'react';\nimport { WidgetCard } from './WidgetCard';\nimport { useShellStore } from '../stores/shellStore';\n\n/**\n * Widget implementation for dashboards\n */\nlet DashboardWidget = (props) => {\n const {\n widgetType,\n id,\n deleteCard,\n children,\n params: paramValues,\n setParams,\n ...other\n } = props;\n const { getWidget, isValidWidget } = useShellStore();\n const onDelete = useCallback(() => {\n deleteCard(id);\n }, [deleteCard, id]);\n\n const { Widget, params: paramDefs } = useMemo(() => {\n if (!isValidWidget || !getWidget) {\n return {};\n }\n if (isValidWidget(widgetType) && getWidget) {\n return getWidget(widgetType);\n }\n\n return {};\n }, [widgetType, getWidget, isValidWidget]);\n\n const params = useMemo(() => {\n const params = {};\n if (paramDefs) {\n for (const name in paramDefs) {\n params[name] = paramDefs[name].defaultValue;\n }\n for (const param in paramValues) {\n params[param] = paramValues[param];\n }\n }\n\n return params;\n }, [paramDefs, paramValues]);\n const setParam = useCallback(\n (name, value) => setParams(id, { [name]: value }),\n [id, setParams]\n );\n\n if (!isValidWidget || !getWidget) {\n return (\n <WidgetCard {...other} title='Error'>\n isValidWidget or getWidget functions are not defined\n </WidgetCard>\n );\n }\n\n if (!Widget) {\n return (\n <WidgetCard {...other} title='Error'>\n Unknown widget type \"{widgetType}\".\n </WidgetCard>\n );\n } else {\n return (\n <Widget\n {...other}\n id={id}\n params={params}\n setParam={setParam}\n onDelete={onDelete}\n >\n {children}\n </Widget>\n );\n }\n};\n\nexport default memo(DashboardWidget);\n","import React, { useMemo } from 'react';\nimport DashboardCardGrid from '../dashboard/DashboardCardGrid';\nimport DashboardWidget from '../dashboard/DashboardWidget';\nimport getWidgetLayout from '../dashboard/getWidgetLayout.ts';\nimport { useShellStore } from '../stores/shellStore';\n\nconst Page = (props) => {\n const { gridConfig, widgetConfig, disableMargin } = props;\n const { getWidget, isValidWidget } = useShellStore();\n const gridProperties = gridConfig ? JSON.parse(gridConfig) : null;\n let widgets = widgetConfig || null;\n\n if (typeof widgetConfig === 'string') {\n widgets = JSON.parse(widgetConfig);\n }\n\n const calculateLayouts = () => {\n if (!widgets) return null;\n\n const layouts = {};\n for (const widget of widgets) {\n for (const breakpoint in widget.layout) {\n if (breakpoint === '__typename' || !widget.layout[breakpoint]) continue;\n layouts[breakpoint] = layouts[breakpoint] || [];\n const { __typename, ...layout } = widget.layout[breakpoint];\n layouts[breakpoint].push({\n ...getWidgetLayout(getWidget, widget.widgetType),\n isResizable: widget.params.isResizable || false,\n ...layout,\n i: widget.id\n });\n }\n }\n\n return layouts;\n };\n\n const layouts = useMemo(\n () => calculateLayouts(),\n [calculateLayouts, widgetConfig]\n );\n\n const cards = useMemo(\n () =>\n widgets &&\n widgets.map(({ __typename, ...widget }) => (\n <DashboardWidget key={widget.id} {...widget} />\n )),\n [widgets]\n );\n\n if (!layouts) return null;\n\n return (\n <DashboardCardGrid\n layouts={layouts}\n gridProperties={gridProperties}\n disableMargin={disableMargin}\n >\n {cards}\n </DashboardCardGrid>\n );\n};\nexport default Page;\n","import React from 'react'\nimport { makeStyles, Divider } from '@material-ui/core'\nimport { ToolBarButton } from './ToolBarButton'\nimport { LayoutUnit } from '../../../layout/LayoutUnit'\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n paddingLeft: theme.spacing(1)\n }\n}))\n\nexport const AmbientPopoverMenuItem = ({ label, component, click }) => {\n const classes = useStyles()\n\n return (\n <div className={classes.root}>\n <LayoutUnit unit='nudge' />\n <ToolBarButton label={label} component={component} click={click} icon={false} />\n <LayoutUnit unit='nudge' />\n <Divider />\n </div>\n )\n}\n","import React, { useState } from 'react';\nimport { makeStyles, Popover } from '@material-ui/core';\nimport {\n ArrowUpRightIcon,\n PDFIcon,\n ExcelDocumentIcon,\n TextDocumentIcon\n} from '@fluentui/react-icons';\nimport { AmbientPopoverMenuItem } from '../../../inputs/buttons/AmbientPopoverMenuItem';\nimport { FluentIconButton } from '../../../inputs/buttons/FluentIconButton';\n\nconst useStyles = makeStyles((theme) => ({\n root: {},\n popoverRoot: {},\n icon: {\n color: theme.palette.secondary.main\n }\n}));\n\nexport const PAHExport = ({ exportCSV, exportExcel, exportPDF }) => {\n const classes = useStyles();\n\n const [anchorEl, setAnchorEl] = useState(null);\n\n const handleClick = (event) => {\n setAnchorEl(event.currentTarget);\n };\n\n const handleClose = () => {\n setAnchorEl(null);\n };\n\n const open = Boolean(anchorEl);\n const id = open ? 'simple-popover' : undefined;\n\n const gridControlsExport = [\n {\n label: 'Export CSV',\n component: TextDocumentIcon,\n click: exportCSV,\n key: 1\n },\n {\n label: 'Export Excel',\n component: ExcelDocumentIcon,\n click: exportExcel,\n key: 2\n }\n ];\n\n // if (exportPDF) {\n // gridControlsExport.push({\n // label: 'Export PDF',\n // component: PDFIcon,\n // click: exportPDF,\n // key: 3\n // });\n // }\n\n return (\n <div className={classes.root}>\n <FluentIconButton\n className={classes.icon}\n icon={ArrowUpRightIcon}\n onClick={handleClick}\n />\n\n <Popover\n classes={{ root: classes.popoverRoot }}\n square\n elevation={1}\n id={id}\n open={open}\n anchorEl={anchorEl}\n onClose={handleClose}\n anchorOrigin={{\n vertical: 'bottom',\n horizontal: 'left'\n }}\n transformOrigin={{\n vertical: 'top',\n horizontal: 'left'\n }}\n >\n <div style={{ width: 140 }}>\n <div>\n {gridControlsExport.map((item) => {\n return (\n <AmbientPopoverMenuItem\n label={item.label}\n component={item.component}\n click={item.click}\n />\n );\n })}\n </div>\n </div>\n </Popover>\n </div>\n );\n};\n","import React, {\n useCallback,\n useEffect,\n useMemo,\n useState,\n useRef,\n createRef\n} from 'react';\nimport {\n makeStyles,\n MenuItem,\n Typography,\n Popover,\n ButtonBase,\n Badge,\n IconButton\n} from '@material-ui/core';\nimport { FluentIcon } from '../../../utilities/FluentIcon';\nimport clsx from 'clsx';\nimport { MoreVerticalIcon } from '@fluentui/react-icons';\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n flexSkrink: 0,\n overflow: 'hidden'\n },\n tabsWrapper: {\n display: 'flex',\n gap: (props) => (props?.variant === 'block' ? theme.spacing(1) : null),\n flexGrow: 1\n },\n tab: {\n padding: `8px 18px`,\n flex: 1\n },\n blockTab: {\n backgroundColor: theme.palette.background.paper\n },\n activeTab: {\n borderBottom: (props) =>\n props?.variant === 'block'\n ? null\n : `2px solid ${theme.palette.secondary.main}`,\n backgroundColor: (props) =>\n props?.variant === 'block' ? theme.palette.secondary.light : null,\n color: (props) =>\n props?.variant === 'block'\n ? theme.palette.getContrastText(theme.palette.secondary.light)\n : null\n },\n moreButton: {\n marginTop: theme.spacing(1),\n width: theme.spacing(1),\n height: theme.spacing(1),\n borderRadius: 2\n },\n menuItem: {\n whiteSpace: 'normal',\n width: (props) => (props?.menuWidth ? props?.menuWidth : '170px')\n },\n popoverWrapper: {\n maxHeight: (props) =>\n props?.menuMaxHeight ? props?.menuMaxHeight : '250px'\n }\n}));\n\nexport const UdpTabs = (props) => {\n const {\n value,\n onChange,\n className,\n menuItemProps,\n tabList,\n variant,\n buttonWidth\n } = props;\n const classes = useStyles(props);\n const tabContainerRef = useRef(null);\n const innerTabContainerRef = useRef(null);\n const [anchorEl, setAnchorEl] = useState(null);\n const [visibleTabList, setVisibleTabList] = useState(null);\n const [menuTabList, setMenuTabList] = useState(null);\n const [initialTotalTabWidth, setInitialTotalTabWidth] = useState(null);\n const [initialTabWidth, setInitialTabWidth] = useState();\n const gapWidth = 8;\n const open = Boolean(anchorEl);\n\n const currentTabList = useMemo(() => {\n return tabList?.map((tab, index) => ({\n id: index,\n ...tab,\n ref: createRef()\n }));\n }, [tabList]);\n\n const handlePopoverClick = useCallback((event, index) => {\n setAnchorEl(event.currentTarget);\n }, []);\n\n const handlePopoverClose = () => {\n setAnchorEl(null);\n };\n\n const menuItemSelected = useMemo(() => {\n return !!menuTabList?.find((tab) => tab?.id === value);\n }, [value, menuTabList]);\n\n const getInitialTabWidth = useCallback(\n (tabsElements, currentTabList) => {\n let totalTabWidth = 0;\n let tabWidth = [];\n\n if (\n tabsElements?.length === currentTabList?.length &&\n !initialTotalTabWidth\n ) {\n for (let i = 0; i < tabsElements.length; i++) {\n totalTabWidth += tabsElements[i].clientWidth;\n if (variant === 'block') {\n totalTabWidth += gapWidth;\n }\n tabWidth[i] = tabsElements[i].clientWidth;\n }\n setInitialTotalTabWidth(totalTabWidth);\n setInitialTabWidth(tabWidth);\n\n return { totalTabWidth, tabWidth };\n }\n\n return { totalTabWidth: initialTotalTabWidth, tabWidth: initialTabWidth };\n },\n [initialTabWidth, initialTotalTabWidth, variant]\n );\n\n const calculateHiddenTabs = useCallback(() => {\n if (innerTabContainerRef.current) {\n const containerWidth = innerTabContainerRef.current.clientWidth;\n const tabsElements = Array.from(innerTabContainerRef.current.children);\n const moreBtnWidth = 24;\n let hiddenTabsArray = [];\n let visibleTabsArray = Array.from(currentTabList);\n const { totalTabWidth, tabWidth } = getInitialTabWidth(\n tabsElements,\n currentTabList\n );\n\n if (totalTabWidth > containerWidth) {\n let accumulatedWidth = 0;\n for (let i = 0; i < tabWidth?.length; i++) {\n accumulatedWidth += tabWidth[i];\n if (variant === 'block') {\n accumulatedWidth += gapWidth;\n }\n\n if (accumulatedWidth > containerWidth - moreBtnWidth) {\n hiddenTabsArray = Array.from(currentTabList).slice(i);\n visibleTabsArray = Array.from(currentTabList).slice(0, i);\n break;\n }\n }\n }\n setVisibleTabList(visibleTabsArray);\n setMenuTabList(hiddenTabsArray);\n }\n }, [currentTabList, getInitialTabWidth, variant]);\n\n useEffect(() => {\n // initial visible tab list\n setVisibleTabList(currentTabList);\n }, [currentTabList]);\n\n useEffect(() => {\n calculateHiddenTabs();\n\n const observer = new ResizeObserver((entries) => {\n handlePopoverClose();\n calculateHiddenTabs();\n });\n\n if (tabContainerRef.current) {\n observer.observe(tabContainerRef.current);\n }\n\n // Cleanup observer on component unmount\n return () => {\n observer.disconnect();\n };\n }, [calculateHiddenTabs]);\n\n return (\n <div>\n <div className={clsx(classes.root, className)} ref={tabContainerRef}>\n <div\n className={classes.tabsWrapper}\n ref={innerTabContainerRef}\n style={\n variant === 'spread' ? { justifyContent: 'space-between' } : null\n }\n >\n {visibleTabList?.map((item, index) => (\n <ButtonBase\n // style={variant === 'spread' ? { flex: 1 } : null}\n style={{\n flex: variant === 'spread' && 1,\n width: !!buttonWidth && buttonWidth\n }}\n key={index}\n id={\n 'udpRecord-UdpTabs-MenuItem-' + item?.label?.replace(/ /g, '-')\n }\n udprecordid={\n 'udpRecord-UdpTabs-MenuItem-' + item?.label?.replace(/ /g, '-')\n }\n >\n <div\n className={clsx(classes.tab, {\n [classes.blockTab]: variant === 'block',\n [classes.activeTab]: value === item?.id\n })}\n onClick={(e) => {\n onChange(e, item?.id);\n if (item?.onClick) {\n item.onClick();\n }\n setAnchorEl(null);\n }}\n >\n <Typography\n noWrap\n style={{\n fontWeight: variant === 'spread' ? 'bold' : 'normal'\n }}\n >\n {item?.label}\n </Typography>\n </div>\n </ButtonBase>\n ))}\n {menuTabList?.length > 0 && (\n <IconButton\n onClick={handlePopoverClick}\n className={classes.moreButton}\n color='primary'\n id='udpRecord-UdpTabs-MoreActions'\n udprecordid='udpRecord-UdpTabs-MoreActions'\n >\n <Badge\n color='secondary'\n variant='dot'\n invisible={menuItemSelected === false}\n >\n <FluentIcon component={MoreVerticalIcon} size='medium' />\n </Badge>\n </IconButton>\n )}\n </div>\n\n {!!menuTabList?.length && (\n <div>\n <Popover\n id='menuTabList'\n open={open}\n anchorEl={anchorEl}\n onClose={handlePopoverClose}\n anchorOrigin={{\n vertical: 'bottom',\n horizontal: 'left'\n }}\n transformOrigin={{\n vertical: 'top',\n horizontal: 'left'\n }}\n className={classes.popoverWrapper}\n >\n {menuTabList?.map((tab) => {\n return (\n <MenuItem\n key={tab?.id}\n id={\n 'udpRecord-UdpTabs-MenuItem-' +\n tab?.label?.replace(/ /g, '-')\n }\n udprecordid={\n 'udpRecord-UdpTabs-MenuItem-' +\n tab?.label?.replace(/ /g, '-')\n }\n onClick={(e) => {\n if (tab?.onClick) {\n tab.onClick();\n }\n\n if (onChange) {\n onChange(e, tab?.id);\n }\n setAnchorEl(null);\n }}\n className={clsx(classes.menuItem, className)}\n selected={tab?.id === value}\n {...menuItemProps}\n >\n <Typography>{tab?.label}</Typography>\n </MenuItem>\n );\n })}\n </Popover>\n </div>\n )}\n </div>\n </div>\n );\n};\n","import { useMemo } from 'react';\n// @ts-ignore - TeleporterInstance type may not be exported\nimport { TeleporterInstance } from 'react-teleporter';\nimport { useTeleporterStore } from '../../../../stores/teleporterStore';\n\nexport const useAllTeleporters = (): [string, string, TeleporterInstance][] => {\n const teleporterMap = useTeleporterStore((state) => state.teleporterMap);\n\n const allTeleporters = useMemo(() => {\n const result: [string, string, TeleporterInstance][] = [];\n\n for (const [targetId, locationMap] of teleporterMap.entries()) {\n for (const [location, entry] of locationMap.entries()) {\n result.push([targetId, location, entry.teleporter]);\n }\n }\n\n return result;\n }, [teleporterMap]);\n\n return allTeleporters;\n};\n","import React, { useState, Fragment, useMemo } from 'react';\nimport {\n makeStyles,\n Slide,\n Typography,\n Collapse,\n Divider,\n LinearProgress,\n lighten\n} from '@material-ui/core';\nimport { StandardTitle } from '../../dataDisplay/typography/StandardTitle';\nimport { FluentIconButton } from '../../inputs/buttons/FluentIconButton';\nimport {\n SearchIcon,\n ChevronRightIcon,\n MaximumValueIcon,\n ChevronFold10Icon,\n ChevronUnfold10Icon,\n GroupListIcon,\n FilterIcon,\n MoreVerticalIcon,\n SaveIcon,\n DeleteIcon,\n ClearIcon\n} from '@fluentui/react-icons';\nimport { ToolBarButton } from '../../inputs/buttons/ToolBarButton';\nimport { PrimaryActionButton } from '../../inputs/buttons/PrimaryActionButton';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport ArrowBackIcon from '@material-ui/icons/ArrowBack';\nimport { PAHExport } from './ui/PAHExport';\nimport { StatusChip } from '../../dataDisplay/StatusChip';\nimport { useShellStore } from '../../../stores/shellStore';\nimport { UdpTabs } from '../../navigation/tabs/UdpTabs';\nimport { useAllTeleporters } from './ui/teleporter';\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n display: 'flex',\n [theme.breakpoints.between('xs', 'sm')]: {\n height: 50\n }\n },\n title: {\n margin: theme.spacing(2)\n },\n titleWrapper: {\n paddingLeft: theme.spacing(2),\n paddingRight: (props) => (props.single ? theme.spacing(2) : 0),\n display: 'flex',\n alignItems: 'center'\n },\n subHeaderWrapper: {\n // display: 'flex',\n // justifyContent: 'flex-end',\n // marginTop: props => props.single && 6,\n width: '100%',\n marginTop: 0,\n [theme.breakpoints.down('xs')]: {\n justifyContent: 'flex-start'\n }\n },\n subHeader: {\n minWidth: (props) => props.subheader && 320,\n marginLeft: theme.spacing(2),\n [theme.breakpoints.between('sm', 'lg')]: {\n display: 'none'\n },\n [theme.breakpoints.down('xs')]: {\n display: 'none'\n }\n },\n denseSubtitle: {\n marginTop: theme.spacing(1.2),\n marginLeft: theme.spacing(2)\n // [theme.breakpoints.up('xl')]: {\n // display: 'none'\n // },\n // [theme.breakpoints.down('xs')]: {\n // display: 'none'\n // }\n },\n actionRow: {\n display: 'flex',\n flex: 1,\n alignItems: 'center'\n // [theme.breakpoints.up('lg')]: {\n // width: '100%',\n // },\n // paddingBottom: props => props.hidePAB && theme.spacing(2),\n },\n secondaryButtons: {\n display: 'flex',\n [theme.breakpoints.down('sm')]: {\n display: 'none'\n },\n alignItems: 'center'\n },\n secondaryButtonsMobile: {\n display: 'flex',\n padding: theme.spacing(1),\n background: theme.palette.divider,\n [theme.breakpoints.up('sm')]: {\n display: 'none'\n }\n },\n search: {\n marginRight: theme.spacing(2),\n marginTop: theme.spacing(3),\n\n flex: 1\n },\n close: {\n marginRight: theme.spacing(2)\n },\n pab: {\n display: 'flex',\n [theme.breakpoints.between('xs', 'sm')]: {\n position: 'fixed',\n bottom: theme.spacing(2),\n right: theme.spacing(2),\n zIndex: theme.zIndex.appBar\n }\n },\n titleOnly: {\n paddingBottom: theme.spacing(1)\n },\n advancedOptions: {\n backgroundColor: '#EEEEEE',\n width: '100%'\n },\n tabPageButtons: {\n height: 50,\n borderTop: `1px solid ${theme.palette.divider}`,\n paddingLeft: theme.spacing(2),\n backgroundColor: '#EEEEEE'\n },\n divider: {\n height: 25,\n marginLeft: theme.spacing(1),\n marginRight: theme.spacing(2)\n },\n functionIcons: {\n fontSize: 18,\n color: theme.palette.secondary.main\n },\n tabRow: {\n maxWidth: 500,\n [theme.breakpoints.down('sm')]: {\n width: 300\n },\n minHeight: '48px'\n },\n fullTabs: {\n [theme.breakpoints.down('xl')]: {\n maxWidth: 700\n },\n [theme.breakpoints.down('lg')]: {\n maxWidth: 500\n },\n [theme.breakpoints.down('sm')]: {\n maxWidth: '100vw'\n },\n minHeight: '48px'\n },\n iconButton: {\n marginTop: 9,\n marginLeft: 4\n },\n titleWrapperBack: {\n display: 'flex',\n flex: (props) => props.title && 1\n },\n buttomButtonRow: {\n display: 'flex',\n width: '100%'\n },\n\n bottomButtonsLeft: {\n display: 'flex',\n flex: 1,\n // width: '100%',\n justifyContent: 'flex-start'\n },\n bottomButtonsRigth: {\n display: 'flex',\n justifyContent: 'flex-end'\n },\n single: {\n display: 'flex'\n },\n containerStyle: {\n background: lighten(theme.palette.secondary.light, 0.9),\n padding: theme.spacing(1),\n paddingLeft: theme.spacing(2),\n borderTop: `1px solid ${theme.palette.divider} `\n },\n gridControlLineUp: {\n display: 'flex',\n alignItems: 'center',\n marginRight: theme.spacing(2)\n },\n additionalTitleComponent: {\n marginLeft: theme.spacing(2)\n }\n}));\n\nexport const PrimaryActionHeader = (props) => {\n const classes = useStyles(props);\n\n const {\n buttonLabel,\n title,\n subheader,\n handleClick,\n secondaryButtons,\n hidePAB = false,\n search,\n searchField,\n expandOptions,\n handleMouseLeave,\n expandedContent,\n handleChange,\n value,\n tabList,\n tabs,\n resizeGrid,\n collapse,\n expandAllItems,\n groups,\n showGroups,\n grid,\n clickBack,\n topRowSecondary,\n bottomRowSecondary,\n bottomRowSecondaryRight,\n loading,\n openGroups,\n openFilter,\n altInputs,\n loadingVal,\n exportGrid,\n openSearch = false,\n styleSearch,\n stepper,\n pabDisabled,\n switcher,\n single,\n lowerTray,\n lowerTraySearch,\n lowerTrayGrid,\n upperTrayGrid,\n exportCSV,\n exportExcel,\n exportPDF,\n expand,\n expandGrid,\n collapseGrid,\n resize,\n gridApi,\n saveGridConfig,\n deleteGridConfig,\n clearGridConfig,\n hideActionRow = false,\n allowAdditionalTitleComponent = false,\n allowAdditionalRightComponent = true,\n StatusChipProps = null,\n tabProps,\n tabVariant,\n additionalComponentId = '',\n ...otherProps\n } = props;\n\n const [searchExpanded, setSearchExpanded] = useState(openSearch);\n const currentContainerId = useShellStore((state) => state.currentContainerId);\n const allTeleporters = useAllTeleporters();\n\n const expandSearch = () => {\n setSearchExpanded(!searchExpanded);\n };\n\n function a11yProps(index) {\n return {\n id: `simple-tab-${index}`,\n 'aria-controls': `simple-tabpanel-${index}`\n };\n }\n\n const gridControlsExpand = [\n {\n label: '',\n aria: 'expand',\n component: ChevronUnfold10Icon,\n click: expandGrid,\n id: 1\n }\n ];\n const gridControlsResize = [\n {\n label: '',\n aria: 'resize',\n component: MaximumValueIcon,\n click: resizeGrid,\n id: 2\n }\n ];\n const gridControlsCollapse = [\n {\n label: '',\n aria: 'collapse',\n component: ChevronFold10Icon,\n click: collapseGrid,\n id: 3\n }\n ];\n\n const gridControlsGroup = [\n {\n label: 'Group',\n component: GroupListIcon,\n click: openGroups,\n id: 4\n }\n ];\n const gridControlsFilter = [\n {\n label: 'Filter',\n component: FilterIcon,\n click: openFilter,\n id: 5\n }\n ];\n\n const gridControlsSave = [\n {\n label: 'Save Grid Configuration',\n component: SaveIcon,\n click: saveGridConfig,\n id: 6\n }\n ];\n const gridControlsDelete = [\n {\n label: 'Delete Grid Configuration',\n component: DeleteIcon,\n click: deleteGridConfig,\n id: 7\n }\n ];\n const gridControlsClear = [\n {\n label: 'Clear Grid Configuration',\n component: ClearIcon,\n click: clearGridConfig,\n id: 8\n }\n ];\n\n const gridControlsExport = (\n <div>\n <PAHExport\n exportCSV={exportCSV || (() => gridApi?.exportDataAsCsv())}\n exportExcel={exportExcel || (() => gridApi?.exportDataAsExcel())}\n exportPDF={exportPDF}\n />\n </div>\n );\n const gridControlExpand = gridControlsExpand && (\n <div>\n {gridControlsExpand.map((item) => {\n return (\n <ToolBarButton\n label={item.label}\n title={item.label}\n expanded={true}\n component={item.component}\n click={item.click}\n aria={item.aria}\n key={item.id}\n />\n );\n })}\n </div>\n );\n const gridControlResize = gridControlsResize && (\n <div>\n {gridControlsResize.map((item) => {\n return (\n <ToolBarButton\n label={item.label}\n title={item.label}\n expanded={true}\n component={item.component}\n click={item.click}\n aria={item.aria}\n key={item.id}\n />\n );\n })}\n </div>\n );\n const gridControlCollapse = gridControlsCollapse && (\n <div>\n {gridControlsCollapse.map((item) => {\n return (\n <ToolBarButton\n label={item.label}\n title={item.label}\n expanded={true}\n component={item.component}\n click={item.click}\n aria={item.aria}\n key={item.id}\n />\n );\n })}\n </div>\n );\n const gridControlSave = gridControlsSave && (\n <div>\n {gridControlsSave.map((item) => {\n return (\n <ToolBarButton\n label={item.label}\n title={item.label}\n expanded={true}\n component={item.component}\n click={item.click}\n aria={item.aria}\n key={item.id}\n />\n );\n })}\n </div>\n );\n const gridControlDelete = gridControlsDelete && (\n <div>\n {gridControlsDelete.map((item) => {\n return (\n <ToolBarButton\n label={item.label}\n title={item.label}\n expanded={true}\n component={item.component}\n click={item.click}\n aria={item.aria}\n key={item.id}\n />\n );\n })}\n </div>\n );\n const gridControlClear = gridControlsClear && (\n <div>\n {gridControlsClear.map((item) => {\n return (\n <ToolBarButton\n label={item.label}\n title={item.label}\n expanded={true}\n component={item.component}\n click={item.click}\n aria={item.aria}\n key={item.id}\n />\n );\n })}\n </div>\n );\n\n const searchToggle = (\n <>\n <div style={{ display: 'flex' }}>\n {searchExpanded && (\n <FluentIconButton\n click={expandSearch}\n aria-label='close search'\n className={classes.close}\n icon={ChevronRightIcon}\n onClick={expandSearch}\n size='small'\n />\n )}\n </div>\n <div className={classes.search} style={{ flex: 1 }}>\n <div>\n {searchExpanded && (\n <div>\n <Slide\n direction='left'\n in={expandSearch}\n mountOnEnter\n unmountOnExit\n >\n <div className={classes.searchWrapper}>{searchField}</div>\n </Slide>\n </div>\n )}\n </div>\n </div>\n </>\n );\n\n const LowerTrayShell = ({ children }) => {\n return <div className={classes.containerStyle}>{children}</div>;\n };\n\n const GridControlLineUp = () => {\n return (\n <div className={classes.gridControlLineUp}>\n {saveGridConfig && gridControlSave}\n {deleteGridConfig && gridControlDelete}\n {clearGridConfig && gridControlClear}\n {expandGrid && gridControlExpand}\n {resizeGrid && gridControlResize}\n {collapseGrid && gridControlCollapse}\n {exportGrid && gridControlsExport}\n </div>\n );\n };\n\n const additionalTitleTeleportedComponents = useMemo(() => {\n const components = [];\n allTeleporters.forEach(([targetId, location, teleporter]) => {\n const Target = teleporter.Target;\n if (\n targetId === additionalComponentId &&\n location === 'title'\n ) {\n components.push(\n <div key={targetId} className='teleport-target'>\n <Target />\n </div>\n );\n }\n })\n return components;\n }, [additionalComponentId, allTeleporters]);\n\n return (\n <div key={currentContainerId}>\n <div className={single && classes.single}>\n {/* {switcher && <PAHViewSwitcher>Meeting Title</PAHViewSwitcher>} */}\n <div className={classes.titleWrapperBack}>\n {clickBack && (\n <div className={classes.iconButton}>\n <FluentIconButton icon={ArrowBackIcon} onClick={clickBack} />\n </div>\n )}\n\n {title && (\n <div className={classes.root}>\n <div className={classes.titleWrapper}>\n <StandardTitle removeMarginTop={single}>{title}</StandardTitle>\n {single && subheader && (\n <Typography\n className={classes.denseSubtitle}\n variant='subtitle1'\n component='h2'\n >\n {subheader}\n </Typography>\n )}\n\n {allowAdditionalTitleComponent && (\n <div className={classes.additionalTitleComponent}>\n {additionalTitleTeleportedComponents.map(value => {\n return value;\n })}\n </div>\n )}\n </div>\n </div>\n )}\n {!title && allowAdditionalTitleComponent && (\n <div className={classes.additionalTitleComponent}>\n {additionalTitleTeleportedComponents.map(value => {\n return value;\n })}\n </div>\n )}\n {StatusChipProps && (\n <div className={classes.root}>\n <div className={classes.titleWrapper}>\n <StatusChip\n label={StatusChipProps?.label}\n status={StatusChipProps?.status}\n />\n </div>\n </div>\n )}\n </div>\n <div className={classes.subHeaderWrapper}>\n {/* <div className={classes.subHeader}>\n <Typography variant=\"subtitle1\">{subheader}</Typography>\n </div> */}\n {stepper}\n {!hideActionRow && (\n <div className={classes.actionRow}>\n {!single && subheader && (\n <Typography\n className={classes.denseSubtitle}\n variant='subtitle1'\n component='h2'\n >\n {subheader}\n </Typography>\n )}\n <div className={grid ? classes.tabRow : classes.fullTabs}>\n {tabList?.length > 0 && (\n <UdpTabs\n value={value}\n onChange={handleChange}\n tabList={tabList}\n variant={tabVariant}\n />\n )}\n </div>\n\n {search && searchToggle}\n <div style={{ flex: 1 }} />\n\n <div className={classes.secondaryButtons}>\n {!searchExpanded && search && (\n <ToolBarButton\n label='Search'\n component={SearchIcon}\n click={expandSearch}\n />\n )}\n {search && (\n <Divider orientation='vertical' className={classes.divider} />\n )}\n\n {/* {grid &&\n gridControls.map(item => {\n return (\n <ToolBarButton\n label={item.label}\n title={item.label}\n expanded\n component={item.component}\n click={item.click}\n aria={item.aria}\n key={item.id}\n />\n );\n })} */}\n {(expandGrid ||\n resizeGrid ||\n collapseGrid ||\n exportGrid ||\n saveGridConfig ||\n deleteGridConfig ||\n clearGridConfig) &&\n upperTrayGrid && <GridControlLineUp expand={expand} />}\n\n {grid &&\n openFilter &&\n gridControlsFilter.map((item) => {\n return (\n <ToolBarButton\n label={item.label}\n title={item.label}\n expanded={true}\n component={item.component}\n click={item.click}\n aria={item.aria}\n key={item.id}\n />\n );\n })}\n\n {grid &&\n openGroups &&\n gridControlsGroup.map((item) => {\n return (\n <ToolBarButton\n label={item.label}\n title={item.label}\n expanded={true}\n component={item.component}\n click={item.click}\n aria={item.aria}\n key={item.id}\n />\n );\n })}\n\n {/* {grid &&\n exportGrid &&\n gridControlsExport.map(item => {\n return (\n <ToolBarButton\n label={item.label}\n title={item.label}\n expanded\n component={item.component}\n click={item.click}\n aria={item.aria}\n key={item.id}\n />\n );\n })} */}\n\n {grid && searchExpanded && (\n <div>\n <FluentIconButton\n id='udpRecord-PrimaryActionHeader-ClosePanel'\n udprecordid='udpRecord-PrimaryActionHeader-ClosePanel'\n icon={MoreVerticalIcon}\n // onClick={toggleExpandedHeader}\n aria-label='Close Panel'\n />\n </div>\n )}\n\n {secondaryButtons &&\n !tabs &&\n secondaryButtons.map((item, index) => {\n return (\n <ToolBarButton\n label={item.label}\n expanded={searchExpanded}\n component={item.component}\n click={item.click}\n key={item.id ?? index}\n aria={item.label}\n disabled={item.disabled}\n />\n );\n })}\n </div>\n <div>\n {allowAdditionalRightComponent &&\n allTeleporters.map(([targetId, location, teleporter]) => {\n const Target = teleporter.Target;\n if (\n targetId === additionalComponentId &&\n location === 'right'\n ) {\n return (\n <div key={targetId} className='teleport-target'>\n <Target />\n </div>\n );\n } else {\n return null;\n }\n })}\n </div>\n {!hidePAB && (\n <div className={classes.pab}>\n {topRowSecondary &&\n topRowSecondary.map((item, index) => {\n return (\n <ToolBarButton\n label={item.label}\n expanded={searchExpanded}\n component={item.component}\n click={item.click}\n key={item.id ?? index}\n aria={item.label}\n />\n );\n })}\n\n <PrimaryActionButton\n disabled={pabDisabled}\n onClick={handleClick}\n {...otherProps}\n >\n {buttonLabel}\n </PrimaryActionButton>\n </div>\n )}\n </div>\n )}\n </div>\n\n <div\n className={clsx(\n classes.secondaryButtons,\n (altInputs || bottomRowSecondary) && classes.tabPageButtons\n )}\n >\n <div className={classes.buttomButtonRow}>\n <div className={classes.bottomButtonsLeft}>\n {bottomRowSecondary &&\n bottomRowSecondary.map((item, index) => {\n return (\n <ToolBarButton\n label={item.label}\n expanded={!tabs && searchExpanded}\n component={item.component}\n click={item.click}\n key={item.id ?? index}\n />\n );\n })}\n </div>\n <div className={classes.bottomButtonsRigth}>\n {bottomRowSecondaryRight &&\n bottomRowSecondaryRight.map((item, index) => {\n return (\n <ToolBarButton\n label={item.label}\n expanded={!tabs && searchExpanded}\n component={item.component}\n click={item.click}\n key={item.id ?? index}\n />\n );\n })}\n </div>\n\n {altInputs}\n </div>\n <div>\n {showGroups && <Divider />}\n {showGroups && groups}\n </div>\n </div>\n\n <Collapse in={expandOptions} timeout='auto'>\n <div onMouseLeave={handleMouseLeave}>\n {/* <div> */}\n <div className={classes.advancedOptions}>{expandedContent}</div>\n </div>\n </Collapse>\n {loading && <LinearProgress value={loadingVal} />}\n </div>\n {lowerTray && (\n <LowerTrayShell>\n <div style={{ display: 'flex', justifyContent: 'flex-end' }}>\n <div style={{ display: 'flex' }}>\n {!searchExpanded && lowerTraySearch && (\n <ToolBarButton\n label='Search'\n component={SearchIcon}\n click={expandSearch}\n />\n )}\n {searchToggle}\n </div>\n {lowerTrayGrid && <GridControlLineUp />}\n </div>\n </LowerTrayShell>\n )}\n\n <div className={classes.secondaryButtonsMobile}>\n {secondaryButtons &&\n !tabs &&\n secondaryButtons.map((item, index) => {\n return (\n <ToolBarButton\n label={item.label}\n expanded={searchExpanded}\n component={item.component}\n click={item.click}\n key={item.id ?? index}\n aria={item.label}\n disabled={item.disabled}\n />\n );\n })}\n </div>\n </div>\n );\n};\n\nPrimaryActionHeader.propTypes = {\n /**\n * Primary action button label\n */\n buttonLabel: PropTypes.string,\n /**\n * Page title\n */\n title: PropTypes.string.isRequired,\n /**\n * Page subtitle\n */\n subheader: PropTypes.string,\n /**\n * Primary action button function\n */\n handleClick: PropTypes.func,\n /**\n * prop for mapped secondary button data\n */\n secondaryButtons: PropTypes.arrayOf(\n PropTypes.shape({\n label: PropTypes.string,\n component: PropTypes.oneOfType([PropTypes.node, PropTypes.func]),\n click: PropTypes.func,\n key: PropTypes.oneOfType([PropTypes.string, PropTypes.number])\n })\n ),\n /**\n * Hides Primary Action Button (not recommended)\n */\n hidePAB: PropTypes.bool,\n /**\n * Allows search option to display\n */\n search: PropTypes.bool,\n /**\n * Search field designed to fit header space\n */\n searchField: PropTypes.oneOfType([PropTypes.node, PropTypes.func]),\n /**\n * If true, expanded space for advanced search is open\n */\n expandOptions: PropTypes.func,\n /**\n * Function to close expanded space when the user mouse leaves\n */\n handleMouseLeave: PropTypes.string,\n /**\n * The contents of the expanded search\n */\n expandedContent: PropTypes.node,\n /**\n * Handle change option for tabs (when the tab prop is active)\n */\n handleChange: PropTypes.string,\n /**\n * Sends value that determines what tab content is visable (when the tab prop is active)\n */\n value: PropTypes.oneOfType([PropTypes.node, false]),\n /**\n * Prop to pass an array of tab lables to display tabs (when the tab prop is active)\n */\n tabList: PropTypes.node,\n /**\n * Prop option to display tabs. Tabs are available when true. Also provides additional formatting.\n */\n tabs: PropTypes.bool,\n /**\n * Click event to resize grid to fit (when using the PAH to display a grid).\n */\n resizeGrid: PropTypes.func,\n /**\n * Click event to collapse Ag Grid when grouped (when using the PAH to display a grid).\n */\n collapse: PropTypes.func,\n /**\n * Click event to expand Ag Grid when grouped (when using the PAH to display a grid).\n */\n expandAllItems: PropTypes.func,\n /**\n * Click event to save Ag Grid configurations (e.g. filters, sorting, column widths, etc.) when using the PAH to display a grid.\n */\n saveGridConfig: PropTypes.func,\n /**\n * Click event to delete Ag Grid configurations (e.g. filters, sorting, column widths, etc.) when using the PAH to display a grid.\n */\n deleteGridConfig: PropTypes.func,\n /**\n * Click event to clear Ag Grid configurations (e.g. filters, sorting, column widths, etc.) when using the PAH to display a grid.\n */\n clearGridConfig: PropTypes.func,\n /**\n * Prop that accepts a component of groups (when using the PAH to display a grid).\n */\n groups: PropTypes.node,\n /**\n * Prop option to display grid. Grid formatting is available when true.\n */\n grid: PropTypes.bool,\n /**\n * Prop option to display grid. Grid formatting is available when true.\n */\n otherProps: PropTypes.any,\n /**\n * Prop option to show secondary buttons on top row.\n */\n bottomRowSecondary: PropTypes.array,\n /**\n * Prop option to show secondary buttons on bottom row.\n */\n topRowSecondary: PropTypes.array,\n /**\n * Exposes onClick for back arrow. Only displays arrow when a function is provided.\n */\n clickBack: PropTypes.func,\n /**\n * Toggles visaiblity for loading progress bar.\n */\n loading: PropTypes.bool,\n /**\n * The value of progress loading.\n */\n loadingVal: PropTypes.number,\n /**\n * Exposes function to open group options.\n */\n openGroups: PropTypes.func,\n /**\n * Exposes function to open filter options.\n */\n openFilter: PropTypes.func,\n /**\n * Alternate method to include toolbar inputs.\n */\n altInputs: PropTypes.node,\n /**\n * If true, actionRow will be hidden\n */\n hideActionRow: PropTypes.bool,\n /**\n * Props passed into FluentSimpleTabs Component\n */\n tabProps: PropTypes.object,\n /**\n * Determines if the primary action header should be multiple rows\n */\n single: PropTypes.bool\n};\n\nPrimaryActionHeader.defaultProps = {\n hidePAB: false\n};\n","import React, { createContext, useReducer } from 'react';\n\nconst initialState: any = {};\n\n/**\n * The Page context, shared amongst the Page\n * and all children. Generally used to share state between\n * Widgets. Call dispatch() to update the state. Currently\n * only supports dispatch types of \"set <state_property>\".\n * Example: dispatch({ type: \"set mySharedProperty\", value: oldSharedProperty + 1 });\n */\nconst pageContext = createContext(\n {} as { state: any; dispatch: React.Dispatch<{ type: string; value?: any }> }\n);\nconst { Provider } = pageContext;\n\n/**\n * Sets shared state based on an action type and a value.\n * action.type is in the format: <operator> <prop>\n * Currently the only supported action type is \"set <prop>\",\n * which will set state.prop to action.value.\n * @param state The current state\n * @param action A type and value to alter the current state\n * @returns The new state\n */\nconst reducer = (state: any, action: { type: string; value?: any }) => {\n // Action.type should be in the format: <operator> <prop>. Ex: set sharedId\n const operator = action.type.substr(0, action.type.indexOf(' '));\n const prop = action.type.substr(action.type.indexOf(' ') + 1);\n\n switch (operator) {\n case 'set':\n const newState = { ...state, [prop]: action.value };\n return newState;\n default:\n throw new Error('Unknown operator');\n }\n};\n\n/**\n * A Context component to wrap around a Page. Allows\n * sharing of state amongst sibling Widgets.\n * @returns\n */\nconst PageContextProvider = ({ children }: any) => {\n const [state, dispatch] = useReducer(reducer, initialState);\n\n return <Provider value={{ state, dispatch }}>{children}</Provider>;\n};\n\nexport { pageContext, PageContextProvider };\n","import { useHistory, useLocation } from 'react-router-dom';\n\nexport const useSetLocationState = () => {\n const history = useHistory();\n const location = useLocation();\n\n const setLocationState = (newState) => {\n const currentState = location.state || {};\n\n // Avoid unnecessary replace if state is already the same\n const hasChanged = Object.entries(newState).some(\n ([key, value]) => currentState[key] !== value\n );\n if (!hasChanged || !!location?.state) return;\n\n history.replace({\n pathname: location.pathname,\n search: location.search,\n hash: location.hash,\n state: {\n ...currentState,\n ...newState\n }\n });\n };\n\n return setLocationState;\n};\n","import React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport { Redirect } from 'react-router-dom';\nimport Page from './Page';\nimport { makeStyles, Card, CircularProgress } from '@material-ui/core';\nimport { Alert } from '@material-ui/lab';\nimport { PrimaryActionHeader } from '../UI/utilityDisplay/utilityHeader/PrimaryActionHeader';\nimport { PageContextProvider } from '../contexts/PageContext.tsx';\nimport { useAxiosGet } from '../utilities/useAxiosGet';\nimport { DndProvider } from 'react-dnd';\nimport { HTML5Backend } from 'react-dnd-html5-backend';\nimport { v4 as uuid } from 'uuid';\nimport { useTranslation } from 'react-i18next';\nimport { useSetLocationState } from '../hooks/useSetLocationState';\nimport { ConfigService } from 'udp-react-stencil-component-library';\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n marginTop: (props) => (props.disableMargins ? 0 : theme.spacing(3)),\n marginRight: (props) => (props.disableMargins ? 0 : theme.spacing(3)),\n marginLeft: (props) => (props.disableMargins ? 0 : theme.spacing(3)),\n height: (props) => props.height ?? '100%',\n overflow: (props) => props.height && 'auto'\n },\n staticRoot: {\n marginTop: 0,\n marginRight: 0,\n marginLeft: 0,\n height: (props) => props.height ?? '100%',\n overflow: (props) => props.height && 'auto'\n },\n title: {\n flex: 1,\n marginBottom: theme.spacing(1)\n },\n icon: {\n marginTop: theme.spacing(-2.5)\n },\n loadingContent: {\n flex: 1,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n height: (props) =>\n props.loadingHeight ? props.loadingHeight : 'calc(100vh - 160px)'\n }\n}));\n\nexport const PageContainer = (props) => {\n const {\n user,\n widgetParams,\n redirectSlug,\n pageData,\n pageLoading = false,\n disableMargin = true,\n location,\n fromMenu = false,\n loadingHeight,\n isHomePage = false\n } = props;\n const classes = useStyles(props);\n const [page, setPage] = useState(null);\n const [alertWarnings, setAlertWarnings] = useState([]);\n const params = location?.state?.params;\n const pathPageId = location?.pathname?.replace('/page/', '');\n const pageId = (pathPageId === '/' ? null : pathPageId) || params?.PageId;\n const { t } = useTranslation();\n const setLocationState = useSetLocationState();\n\n const [{ data: pageInfo, loading: pageInfoLoading }] = useAxiosGet(\n ConfigService.tenantV1ApiUrl,\n `page/${pageId}`,\n {},\n !!!pageId,\n false\n );\n\n const [\n { data: homePage, loading: homePageLoading, error: homePageError },\n refetchHomePage\n ] = useAxiosGet(\n ConfigService.tenantV1ApiUrl,\n `page/homePage?tenantId=${user?.currentTenantId}&productId=${ConfigService.config.UNITY_PRODUCT_ID}`,\n {},\n !isHomePage,\n false\n );\n\n const removeWarning = useCallback((id) => {\n setAlertWarnings((prevWarnings) =>\n prevWarnings.filter((warning) => warning.id !== id)\n );\n }, []);\n\n const getRequiredFieldWarnings = useCallback(\n (requiredFields = '', widgetParams) => {\n const fieldsStr = requiredFields || '';\n if (!fieldsStr.trim()) {\n return;\n }\n\n const warnings = [];\n const requiredFieldsMap = widgetParams?.requiredFieldsMap || {};\n const nodeObj = widgetParams?.nodeObj || {};\n const fields = fieldsStr.split(',').map((str) => str.trim());\n const missingRequiredFieldNames = [];\n\n fields.forEach((fieldName) => {\n const requiredField = requiredFieldsMap[fieldName];\n if (!requiredField?.value) {\n missingRequiredFieldNames.push(fieldName);\n } else {\n if (\n requiredField.type === 'entity' &&\n (nodeObj[requiredField.value] === undefined ||\n nodeObj[requiredField.value] === null)\n ) {\n missingRequiredFieldNames.push(fieldName);\n }\n }\n });\n\n missingRequiredFieldNames.forEach((name) => {\n warnings.push({\n id: uuid(),\n message: `${name} ${t('field is missing a value')}`\n });\n });\n return warnings;\n },\n [t]\n );\n\n const pages = useMemo(\n () =>\n page?.widgets &&\n Object.keys(JSON.parse(page.widgets)).map((key) => {\n // Static Page\n const widgetStr = JSON.parse(page.widgets)[key];\n const widget = widgetStr ? JSON.parse(widgetStr) : null;\n if (widget?.length) {\n widget.forEach((w) => {\n // Add additional parameters from menu. Will get overwriten if\n // key exists in page widget parms\n if (pageId) {\n w.params = {\n entityName: params?.entityName,\n pbiReportCode: params?.pbiReportCode,\n queryId: params?.queryId,\n inquiryTreeId: params?.InquiryTreeId,\n udpTagId: params?.udpTagId,\n requiredFieldsMap: params?.requiredFieldMapping,\n ...w.params\n };\n }\n if (widgetParams) {\n w.params = { ...w.params, ...widgetParams };\n }\n });\n }\n return (\n <DndProvider\n backend={HTML5Backend}\n key={pageId ? `${key}-${params?.entityName}` : key}\n >\n <Page\n user={user}\n gridConfig={JSON.parse(page.gridProperties)[key]}\n widgetConfig={widget}\n disableMargin={disableMargin}\n />\n </DndProvider>\n );\n }),\n [page, user, widgetParams, disableMargin, pageId, params]\n );\n\n useEffect(() => {\n if (pageId) {\n if (pageInfo) {\n setPage(pageInfo);\n }\n } else if (homePage) {\n setPage(homePage);\n } else {\n setPage(pageData);\n }\n setAlertWarnings([]);\n }, [pageId, pageInfo, pageData, homePage]);\n\n useEffect(() => {\n if (page?.widgets) {\n let warnings = [];\n Object.keys(JSON.parse(page.widgets)).forEach((key) => {\n // Static Page\n const widgetStr = JSON.parse(page.widgets)[key];\n const widget = widgetStr ? JSON.parse(widgetStr) : null;\n if (widget?.length) {\n widget.forEach((w) => {\n // Add additional parameters from menu. Will get overwriten if\n // key exists in page widget parms\n if (pageId) {\n w.params = {\n entityName: params?.entityName,\n pbiReportCode: params?.pbiReportCode,\n queryId: params?.queryId,\n inquiryTreeId: params?.InquiryTreeId,\n udpTagId: params?.udpTagId,\n requiredFieldsMap: params?.requiredFieldMapping,\n ...w.params\n };\n }\n if (widgetParams) {\n w.params = { ...w.params, ...widgetParams };\n }\n // Adding condition to compare pageId's\n if (fromMenu || page?.pageId === widgetParams?.pageId) {\n warnings = getRequiredFieldWarnings(\n w.requiredParameters,\n w.params\n );\n }\n });\n }\n });\n setAlertWarnings(warnings);\n }\n }, [page, widgetParams, pageId, params, fromMenu, getRequiredFieldWarnings]);\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 (page) {\n setLocationState({ label: t(page?.name) });\n }\n }, [setLocationState, t, page]);\n\n if (redirectSlug && !pageData) {\n return <Redirect to={redirectSlug} />;\n }\n\n if (pageInfoLoading || pageLoading) {\n return (\n <div className={classes.loadingContent}>\n <CircularProgress size={loadingHeight || 64} />\n </div>\n );\n }\n\n return (\n <>\n {page?.showPageName && (\n <Card variant={'outlined'}>\n <PrimaryActionHeader title={page.name} hidePAB single />\n </Card>\n )}\n <div\n className={page?.pageTypeId === 1 ? classes.staticRoot : classes.root}\n >\n {alertWarnings?.length > 0 &&\n alertWarnings.map((warning) => (\n <Alert\n key={warning.id}\n onClose={() => removeWarning(warning.id)}\n severity='warning'\n >\n {warning.message || ''}\n </Alert>\n ))}\n <PageContextProvider>{pages}</PageContextProvider>\n </div>\n </>\n );\n};\n"],"mappings":"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U;CAC5C,MAAM,UAAUA,YAAU,MAAM;CAEhC,MAAM,EACJ,aACA,OACA,WACA,aACA,kBACA,UAAU,OACV,QACA,aACA,eACA,kBACA,iBACA,cACA,OACA,SACA,MACA,YACA,UACA,gBACA,QACA,YACA,MACA,WACA,iBACA,oBACA,yBACA,SACA,YACA,YACA,WACA,YACA,YACA,aAAa,OACb,aACA,SACA,aACA,UACA,QACA,WACA,iBACA,eACA,eACA,WACA,aACA,WACA,QACA,YACA,cACA,QACA,SACA,gBACA,kBACA,iBACA,gBAAgB,OAChB,gCAAgC,OAChC,gCAAgC,MAChC,kBAAkB,MAClB,UACA,YACA,wBAAwB,GACxB,GAAG,eACD;CAEJ,MAAM,CAAC,gBAAgB,qBAAqB,SAAS,WAAW;CAChE,MAAM,qBAAqB,eAAe,UAAU,MAAM,mBAAmB;CAC7E,MAAM,iBAAiB,mBAAmB;CAE1C,MAAM,qBAAqB;AACzB,oBAAkB,CAAC,eAAe;;CAUpC,MAAM,qBAAqB,CACzB;EACE,OAAO;EACP,MAAM;EACN,WAAW;EACX,OAAO;EACP,IAAI;EACL,CACF;CACD,MAAM,qBAAqB,CACzB;EACE,OAAO;EACP,MAAM;EACN,WAAW;EACX,OAAO;EACP,IAAI;EACL,CACF;CACD,MAAM,uBAAuB,CAC3B;EACE,OAAO;EACP,MAAM;EACN,WAAW;EACX,OAAO;EACP,IAAI;EACL,CACF;CAED,MAAM,oBAAoB,CACxB;EACE,OAAO;EACP,WAAW;EACX,OAAO;EACP,IAAI;EACL,CACF;CACD,MAAM,qBAAqB,CACzB;EACE,OAAO;EACP,WAAW;EACX,OAAO;EACP,IAAI;EACL,CACF;CAED,MAAM,mBAAmB,CACvB;EACE,OAAO;EACP,WAAW;EACX,OAAO;EACP,IAAI;EACL,CACF;CACD,MAAM,qBAAqB,CACzB;EACE,OAAO;EACP,WAAW;EACX,OAAO;EACP,IAAI;EACL,CACF;CACD,MAAM,oBAAoB,CACxB;EACE,OAAO;EACP,WAAW;EACX,OAAO;EACP,IAAI;EACL,CACF;CAED,MAAM,qBACJ,oCAAC,aACC,o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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PageNotFoundRoute-
|
|
1
|
+
{"version":3,"file":"PageNotFoundRoute-D9dLbM_w.js","names":["useStyles","Link"],"sources":["../src/routes/components/PageStatus.jsx","../src/routes/components/PageNotFoundRoute.jsx"],"sourcesContent":["import React from 'react';\nimport {\n Button,\n makeStyles,\n Typography,\n Card,\n CardContent,\n} from '@material-ui/core';\nimport { Link } from 'react-router-dom';\n\nconst useStyles = makeStyles(theme => ({\n root: {\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n },\n card: {\n background: theme.palette.primary.main,\n minWidth: props => props?.minWidth,\n minHeight: props => props?.minHeight,\n },\n subHeader: {\n marginTop: theme.spacing(3),\n },\n content: {\n color: theme.palette.getContrastText(theme.palette.primary.main),\n },\n header: {\n textAlign: 'center',\n marginTop: theme.spacing(2),\n },\n button: {\n marginTop: theme.spacing(8),\n display: 'flex',\n justifyContent: 'center',\n },\n largeDisplay: {\n fontSize: '4rem',\n color: theme.palette.getContrastText(theme.palette.primary.main),\n },\n message: {\n marginTop: theme.spacing(3),\n },\n}));\nexport const PageStatus = props => {\n const classes = useStyles(props);\n const {\n title,\n subheader,\n message,\n to,\n buttonLabel,\n statusCode,\n showButton = true,\n } = props;\n\n return (\n <div className={classes.root}>\n <Card className={classes.card}>\n <CardContent>\n <div className={classes.content}>\n <div className={classes.header}>\n {statusCode && (\n <div>\n <Typography className={classes.largeDisplay}>\n {statusCode}\n </Typography>\n </div>\n )}\n <div className={classes.subHeader}>\n <Typography variant=\"h6\">{title}</Typography>\n </div>\n </div>\n <div className={classes.message}>\n <Typography variant=\"overline\" style={{ fontWeight: 700 }}>\n {subheader}\n </Typography>\n <div style={{ textAlign: 'left' }}>\n <Typography variant=\"caption\">{message}</Typography>\n </div>\n </div>\n {showButton && (\n <div className={classes.button}>\n <Button\n component={Link}\n to={to}\n variant=\"contained\"\n color=\"secondary\"\n id={`udpRecord-PageStatus-${buttonLabel}`}\n udprecordid={`udpRecord-PageStatus-${buttonLabel}`}\n >\n {buttonLabel}\n </Button>\n </div>\n )}\n </div>\n </CardContent>\n </Card>\n </div>\n );\n};\n","import React from 'react';\nimport { makeStyles } from '@material-ui/core';\nimport { useTranslation } from 'react-i18next';\nimport { PageStatus } from './PageStatus';\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n marginTop: theme.spacing(4)\n }\n}));\n\nexport const PageNotFoundRoute = () => {\n const classes = useStyles();\n const { t } = useTranslation();\n return (\n <div className={classes.root}>\n <PageStatus\n statusCode={404}\n title={t('Page Not Found')}\n subheader={t(\"Sorry, we can't find the page you are looking for.\")}\n message={t(\n 'You may have typed the address incorrectly or you may have used an outdated link.'\n )}\n to='/'\n buttonLabel={t('Back to Home Page')}\n />\n </div>\n );\n};\n"],"mappings":";;;;;;AAUA,MAAMA,cAAY,YAAW,WAAU;CACrC,MAAM;EACJ,SAAS;EACT,gBAAgB;EAChB,YAAY;EACb;CACD,MAAM;EACJ,YAAY,MAAM,QAAQ,QAAQ;EAClC,WAAU,UAAS,OAAO;EAC1B,YAAW,UAAS,OAAO;EAC5B;CACD,WAAW,EACT,WAAW,MAAM,QAAQ,EAAE,EAC5B;CACD,SAAS,EACP,OAAO,MAAM,QAAQ,gBAAgB,MAAM,QAAQ,QAAQ,KAAK,EACjE;CACD,QAAQ;EACN,WAAW;EACX,WAAW,MAAM,QAAQ,EAAE;EAC5B;CACD,QAAQ;EACN,WAAW,MAAM,QAAQ,EAAE;EAC3B,SAAS;EACT,gBAAgB;EACjB;CACD,cAAc;EACZ,UAAU;EACV,OAAO,MAAM,QAAQ,gBAAgB,MAAM,QAAQ,QAAQ,KAAK;EACjE;CACD,SAAS,EACP,WAAW,MAAM,QAAQ,EAAE,EAC5B;CACF,EAAE;AACH,MAAa,cAAa,UAAS;CACjC,MAAM,UAAUA,YAAU,MAAM;CAChC,MAAM,EACJ,OACA,WACA,SACA,IACA,aACA,YACA,aAAa,SACX;AAEJ,QACE,oCAAC,SAAI,WAAW,QAAQ,QACtB,oCAAC,QAAK,WAAW,QAAQ,QACvB,oCAAC,mBACC,oCAAC,SAAI,WAAW,QAAQ,WACtB,oCAAC,SAAI,WAAW,QAAQ,UACrB,cACC,oCAAC,aACC,oCAAC,cAAW,WAAW,QAAQ,gBAC5B,WACU,CACT,EAER,oCAAC,SAAI,WAAW,QAAQ,aACtB,oCAAC,cAAW,SAAQ,QAAM,MAAmB,CACzC,CACF,EACN,oCAAC,SAAI,WAAW,QAAQ,WACtB,oCAAC;EAAW,SAAQ;EAAW,OAAO,EAAE,YAAY,KAAK;IACtD,UACU,EACb,oCAAC,SAAI,OAAO,EAAE,WAAW,QAAQ,IAC/B,oCAAC,cAAW,SAAQ,aAAW,QAAqB,CAChD,CACF,EACL,cACC,oCAAC,SAAI,WAAW,QAAQ,UACtB,oCAAC;EACC,WAAWC;EACP;EACJ,SAAQ;EACR,OAAM;EACN,IAAI,wBAAwB;EAC5B,aAAa,wBAAwB;IAEpC,YACM,CACL,CAEJ,CACM,CACT,CACH;;;;;AC7FV,MAAM,YAAY,YAAY,WAAW,EACvC,MAAM,EACJ,WAAW,MAAM,QAAQ,EAAE,EAC5B,EACF,EAAE;AAEH,MAAa,0BAA0B;CACrC,MAAM,UAAU,WAAW;CAC3B,MAAM,EAAE,MAAM,gBAAgB;AAC9B,QACE,oCAAC,SAAI,WAAW,QAAQ,QACtB,oCAAC;EACC,YAAY;EACZ,OAAO,EAAE,iBAAiB;EAC1B,WAAW,EAAE,qDAAqD;EAClE,SAAS,EACP,oFACD;EACD,IAAG;EACH,aAAa,EAAE,oBAAoB;GACnC,CACE"}
|
|
@@ -26,8 +26,7 @@ const PasswordResetRedirect = (props) => {
|
|
|
26
26
|
const hash = window.location.hash || "";
|
|
27
27
|
if (props?.error?.errorMessage) formatError(props?.error?.errorMessage);
|
|
28
28
|
else if (hash) {
|
|
29
|
-
const
|
|
30
|
-
const errorDescription$1 = params.get("error_description");
|
|
29
|
+
const errorDescription$1 = new URLSearchParams(hash.substring(1)).get("error_description");
|
|
31
30
|
if (errorDescription$1) formatError(errorDescription$1);
|
|
32
31
|
}
|
|
33
32
|
}, [props?.error?.errorMessage]);
|
|
@@ -69,4 +68,4 @@ const PasswordResetRedirect = (props) => {
|
|
|
69
68
|
|
|
70
69
|
//#endregion
|
|
71
70
|
export { PasswordResetRedirect, clearStoredPath, getStoredPath, storeCurrentPath, storeInitialPath, storePath };
|
|
72
|
-
//# sourceMappingURL=PasswordResetRedirect-
|
|
71
|
+
//# sourceMappingURL=PasswordResetRedirect-C3g8L0vA.js.map
|
package/dist/{PasswordResetRedirect-BHnkAW40.js.map → PasswordResetRedirect-C3g8L0vA.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PasswordResetRedirect-
|
|
1
|
+
{"version":3,"file":"PasswordResetRedirect-C3g8L0vA.js","names":["errorDescription"],"sources":["../src/utilities/redirect/LocalRedirectUrlStorage.js","../src/routes/components/PasswordResetRedirect.jsx"],"sourcesContent":["const SessionStorageKey = 'local-url';\n\nexport const storeInitialPath = () => {\n if (\n !window.sessionStorage.getItem(SessionStorageKey) ||\n window.sessionStorage.getItem(SessionStorageKey) === '/' ||\n window.sessionStorage.getItem(SessionStorageKey) === '/null'\n ) {\n window.sessionStorage.setItem(\n SessionStorageKey,\n window.location.pathname === '/null' ? '/' : window.location.pathname\n );\n }\n};\n\nexport const storeCurrentPath = () => {\n window.sessionStorage.setItem(SessionStorageKey, window.location.pathname);\n};\n\nexport const storePath = pathname => {\n window.sessionStorage.setItem(SessionStorageKey, pathname);\n};\n\nexport const getStoredPath = () => {\n return window.sessionStorage.getItem(SessionStorageKey);\n};\n\nexport const clearStoredPath = () => {\n window.sessionStorage.removeItem(SessionStorageKey);\n};\n","import React, { useEffect, useState } from 'react';\nimport { clearStoredPath } from '../../utilities/redirect/LocalRedirectUrlStorage';\n\nexport const PasswordResetRedirect = (props) => {\n const [errorDescription, setErrorDescription] = useState(null);\n\n useEffect(() => {\n // Get the hash portion of the URL\n const hash = window.location.hash || ''; // Fallback to empty string if no hash\n\n if (props?.error?.errorMessage) {\n formatError(props?.error?.errorMessage);\n } else if (hash) {\n // Parse the hash to get query parameters\n const params = new URLSearchParams(hash.substring(1)); // Remove \"#\" and parse\n\n // Get and decode the error_description\n const errorDescription = params.get('error_description');\n\n if (errorDescription) {\n formatError(errorDescription);\n // Decode the URL-encoded string\n }\n }\n }, [props?.error?.errorMessage]);\n\n const formatError = (errorDescription) => {\n const decodedDescription = decodeURIComponent(errorDescription).replace(\n /%0d%0a/g,\n '\\n'\n ); // Replace %0d%0a with newlines for clarity\n\n if (decodedDescription.includes('AADB2C90208')) {\n // Hardcoded message for AADB2C90208 (a specific error code, often related to user not found or invalid credentials)\n setErrorDescription('The password reset link has expired.');\n // Check for \"AADB2C\" or \"AADB2C90208\" in the decoded description\n } else if (decodedDescription.includes('AADB2C')) {\n // Hardcoded message for generic AADB2C errors\n setErrorDescription('Unable to find an account associated to that email.');\n } else {\n // Fallback message if neither error is found (optional)\n setErrorDescription('An unexpected error occurred.');\n }\n };\n\n const handleGoHome = () => {\n clearStoredPath();\n window.location.href = '/';\n };\n\n return (\n <div>\n <div style={{ textAlign: 'center', marginTop: '50px' }}>\n <img\n src='https://customb2cpolicydevtest.blob.core.windows.net/root/unitylogo.svg'\n alt='Unity Logo'\n width='300'\n style={{ height: 'auto', marginBottom: 50 }}\n />\n {errorDescription ? (\n <h2>{errorDescription}</h2>\n ) : (\n <h2>\n Your password has been successfully reset\n </h2>\n )}\n {errorDescription !== 'The password reset link has expired.' && (\n <p>Please click below to return to the sign in page</p>)}\n\n {errorDescription !== 'The password reset link has expired.' && (\n <button\n onClick={handleGoHome}\n style={{\n marginTop: '10px',\n backgroundColor: '#0C2F50',\n color: 'white',\n border: 'none',\n padding: '10px 20px',\n cursor: 'pointer',\n borderRadius: '5px',\n fontSize: '16px'\n }}\n >\n Sign In\n </button>\n )}\n </div>\n </div>\n );\n};\n"],"mappings":";;;AAAA,MAAM,oBAAoB;AAE1B,MAAa,yBAAyB;AACpC,KACE,CAAC,OAAO,eAAe,QAAQ,kBAAkB,IACjD,OAAO,eAAe,QAAQ,kBAAkB,KAAK,OACrD,OAAO,eAAe,QAAQ,kBAAkB,KAAK,QAErD,QAAO,eAAe,QACpB,mBACA,OAAO,SAAS,aAAa,UAAU,MAAM,OAAO,SAAS,SAC9D;;AAIL,MAAa,yBAAyB;AACpC,QAAO,eAAe,QAAQ,mBAAmB,OAAO,SAAS,SAAS;;AAG5E,MAAa,aAAY,aAAY;AACnC,QAAO,eAAe,QAAQ,mBAAmB,SAAS;;AAG5D,MAAa,sBAAsB;AACjC,QAAO,OAAO,eAAe,QAAQ,kBAAkB;;AAGzD,MAAa,wBAAwB;AACnC,QAAO,eAAe,WAAW,kBAAkB;;;;;ACzBrD,MAAa,yBAAyB,UAAU;CAC9C,MAAM,CAAC,kBAAkB,uBAAuB,SAAS,KAAK;AAE9D,iBAAgB;EAEd,MAAM,OAAO,OAAO,SAAS,QAAQ;AAErC,MAAI,OAAO,OAAO,aAChB,aAAY,OAAO,OAAO,aAAa;WAC9B,MAAM;GAKf,MAAMA,qBAHS,IAAI,gBAAgB,KAAK,UAAU,EAAE,CAAC,CAGrB,IAAI,oBAAoB;AAExD,OAAIA,mBACF,aAAYA,mBAAiB;;IAIhC,CAAC,OAAO,OAAO,aAAa,CAAC;CAEhC,MAAM,eAAe,uBAAqB;EACxC,MAAM,qBAAqB,mBAAmBA,mBAAiB,CAAC,QAC9D,WACA,KACD;AAED,MAAI,mBAAmB,SAAS,cAAc,CAE5C,qBAAoB,uCAAuC;WAElD,mBAAmB,SAAS,SAAS,CAE9C,qBAAoB,sDAAsD;MAG1E,qBAAoB,gCAAgC;;CAIxD,MAAM,qBAAqB;AACzB,mBAAiB;AACjB,SAAO,SAAS,OAAO;;AAGzB,QACE,oCAAC,aACC,oCAAC,SAAI,OAAO;EAAE,WAAW;EAAU,WAAW;EAAQ,IACpD,oCAAC;EACC,KAAI;EACJ,KAAI;EACJ,OAAM;EACN,OAAO;GAAE,QAAQ;GAAQ,cAAc;GAAI;GAC3C,EACD,mBACC,oCAAC,YAAI,iBAAsB,GAE3B,oCAAC,YAAG,4CAEC,EAEN,qBAAqB,0CACtB,oCAAC,WAAE,mDAAoD,EAEtD,qBAAqB,0CACpB,oCAAC;EACC,SAAS;EACT,OAAO;GACL,WAAW;GACX,iBAAiB;GACjB,OAAO;GACP,QAAQ;GACR,SAAS;GACT,QAAQ;GACR,cAAc;GACd,UAAU;GACX;IACF,UAEQ,CAEP,CACF"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { LogicalSearchOperatorEnums, SearchGroupingType
|
|
1
|
+
import { LogicalSearchOperatorEnums, SearchGroupingType } from "./EnvironmentRibbon-oEmbWjEq.js";
|
|
2
|
+
import { useUser } from "./useAxiosGet-Dh5pVURP.js";
|
|
2
3
|
import { useCallback, useMemo } from "react";
|
|
3
4
|
import { DateTime, IANAZone } from "luxon";
|
|
4
5
|
|
|
@@ -84,14 +85,11 @@ const getSearchObject = (searchFilterElements, page, pageSize, eagerLoad = false
|
|
|
84
85
|
return searchObject;
|
|
85
86
|
};
|
|
86
87
|
const getApiMethodIdByPath = (apiMethodList, path) => {
|
|
87
|
-
|
|
88
|
-
return foundApiMethod?.apiMethodId ?? null;
|
|
88
|
+
return apiMethodList.find((method) => path.includes(method.path))?.apiMethodId ?? null;
|
|
89
89
|
};
|
|
90
90
|
const getSearchIdentifiers = (catalogObjects, catalogReturnObject) => {
|
|
91
91
|
if (!catalogObjects) return [];
|
|
92
|
-
|
|
93
|
-
const properties = matchingCatalogObject?.properties?.filter((property) => property?.extendedProperties?.identifier);
|
|
94
|
-
return properties?.map((property) => property.name) ?? [];
|
|
92
|
+
return (catalogObjects.find((co) => co.catalogObjectName === catalogReturnObject)?.properties?.filter((property) => property?.extendedProperties?.identifier))?.map((property) => property.name) ?? [];
|
|
95
93
|
};
|
|
96
94
|
/**
|
|
97
95
|
* Returns a reference to a function that takes an Ag-grid FilterModel object and
|
|
@@ -103,10 +101,9 @@ const useConvertFilterModelToSearchFilters = (timeZone = null) => {
|
|
|
103
101
|
const user = useUser();
|
|
104
102
|
const zone = useMemo(() => {
|
|
105
103
|
let tz = timeZone ?? user?.additionalProperties?.activeUtilityTimeZone ?? "local";
|
|
106
|
-
|
|
107
|
-
return validTimeZone;
|
|
104
|
+
return tz !== "local" && (tz === user?.additionalProperties?.activeUtilityTimeZone || IANAZone.isValidZone(tz)) ? tz : "local";
|
|
108
105
|
}, [timeZone, user]);
|
|
109
|
-
|
|
106
|
+
return useCallback((filterModel = null) => {
|
|
110
107
|
if (!filterModel) return [];
|
|
111
108
|
let searchFilters = [];
|
|
112
109
|
searchFilters = Object.entries(filterModel).map((item) => {
|
|
@@ -115,12 +112,9 @@ const useConvertFilterModelToSearchFilters = (timeZone = null) => {
|
|
|
115
112
|
let type;
|
|
116
113
|
let value;
|
|
117
114
|
if (item[1]?.filterType === AgGridFilterTypes.DATE) {
|
|
118
|
-
let
|
|
119
|
-
let dateSplit = dateFilterValueWithoutTime.split("-");
|
|
115
|
+
let dateSplit = (item[1]?.dateFrom?.substring(0, 10)).split("-");
|
|
120
116
|
let date = new Date(dateSplit[0], dateSplit[1] - 1, dateSplit[2]);
|
|
121
|
-
|
|
122
|
-
let dateString = filterDateTimeMidnight.toJSDate().toISOString();
|
|
123
|
-
value = dateString;
|
|
117
|
+
value = DateTime.fromJSDate(date).setZone(zone, { keepLocalTime: true }).toJSDate().toISOString();
|
|
124
118
|
} else if (item[1]?.filterType === AgGridFilterTypes.SET) {
|
|
125
119
|
value = item[1].values.join(",");
|
|
126
120
|
operator = SqlFilterOperators.IN;
|
|
@@ -155,11 +149,9 @@ const useConvertFilterModelToSearchFilters = (timeZone = null) => {
|
|
|
155
149
|
operator = SqlFilterOperators.BETWEEN;
|
|
156
150
|
if (item[1]?.filterType === AgGridFilterTypes.NUMBER) value += "," + item[1]?.filterTo;
|
|
157
151
|
else if (item[1]?.filterType === AgGridFilterTypes.DATE) {
|
|
158
|
-
let
|
|
159
|
-
let dateSplit = dateFilterValueWithoutTime.split("-");
|
|
152
|
+
let dateSplit = (item[1]?.dateTo?.substring(0, 10)).split("-");
|
|
160
153
|
let date = new Date(dateSplit[0], dateSplit[1] - 1, dateSplit[2]);
|
|
161
|
-
|
|
162
|
-
let dateString = filterDateTimeMidnight.toJSDate().toISOString();
|
|
154
|
+
let dateString = DateTime.fromJSDate(date).setZone(zone, { keepLocalTime: true }).toJSDate().toISOString();
|
|
163
155
|
value += "," + dateString;
|
|
164
156
|
}
|
|
165
157
|
break;
|
|
@@ -178,9 +170,8 @@ const useConvertFilterModelToSearchFilters = (timeZone = null) => {
|
|
|
178
170
|
});
|
|
179
171
|
return searchFilters;
|
|
180
172
|
}, [zone]);
|
|
181
|
-
return convertFilterModelToSearchFilters;
|
|
182
173
|
};
|
|
183
174
|
|
|
184
175
|
//#endregion
|
|
185
176
|
export { SqlFilterOperators, getApiMethodIdByPath, getSearchIdentifiers, getSearchObject, useConvertFilterModelToSearchFilters };
|
|
186
|
-
//# sourceMappingURL=SearchUtilities-
|
|
177
|
+
//# sourceMappingURL=SearchUtilities-Btugro8y.js.map
|