udp-react-enterprise-component-library 25.1.0-beta.4 → 25.1.0-beta.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{AmbientGridTemplate-BLwgiqwK.js → AmbientGridTemplate-BqlMt5Su.js} +152 -137
- package/dist/AmbientGridTemplate-BqlMt5Su.js.map +1 -0
- package/dist/{EnvironmentRibbon-BMvQEZPZ.js → EnvironmentRibbon-DaDmKAPO.js} +2 -2
- package/dist/{EnvironmentRibbon-BMvQEZPZ.js.map → EnvironmentRibbon-DaDmKAPO.js.map} +1 -1
- package/dist/{MenuPage-DLsNc-P8.js → MenuPage-CO6_GWwB.js} +97 -27
- package/dist/MenuPage-CO6_GWwB.js.map +1 -0
- package/dist/{MyExportsPage-BYH2Wl9k.js → MyExportsPage-CX9tzqHk.js} +5 -5
- package/dist/{MyExportsPage-BYH2Wl9k.js.map → MyExportsPage-CX9tzqHk.js.map} +1 -1
- package/dist/MyExportsPage-CkzQ0MRq.js +8 -0
- package/dist/{PageContainer-B65gsUfF.js → PageContainer-k8KCfGsM.js} +2 -2
- package/dist/{PageContainer-B65gsUfF.js.map → PageContainer-k8KCfGsM.js.map} +1 -1
- package/dist/{SearchUtilities-dbXvMYoa.js → SearchUtilities-Bor3HbfB.js} +2 -2
- package/dist/{SearchUtilities-dbXvMYoa.js.map → SearchUtilities-Bor3HbfB.js.map} +1 -1
- package/dist/{SideSheet-CPHhyWLB.js → SideSheet-DUsxG1FN.js} +3 -3
- package/dist/{SideSheet-CPHhyWLB.js.map → SideSheet-DUsxG1FN.js.map} +1 -1
- package/dist/{UdpPublicForm-DFCL1GzD.js → UdpPublicForm-Caa1tH6z.js} +2 -2
- package/dist/{UdpPublicForm-DFCL1GzD.js.map → UdpPublicForm-Caa1tH6z.js.map} +1 -1
- package/dist/UdpPublicForm-Cvw5tOHe.js +4 -0
- package/dist/{UtilitySideBar-B4r2IAv5.js → UtilitySideBar-D4CXGtW2.js} +12 -9
- package/dist/UtilitySideBar-D4CXGtW2.js.map +1 -0
- package/dist/{VirtualBrowser-C_IJ0I6f.js → VirtualBrowser-BXL0hdy0.js} +7 -7
- package/dist/{VirtualBrowser-C_IJ0I6f.js.map → VirtualBrowser-BXL0hdy0.js.map} +1 -1
- package/dist/{WorkflowContainer-DKwRWi1i.js → WorkflowContainer-DrqzuQtU.js} +35 -7
- package/dist/WorkflowContainer-DrqzuQtU.js.map +1 -0
- package/dist/WorkflowContainer-Q8gtuaB7.js +9 -0
- package/dist/{apiHelpers-t3rfkjFZ.js → apiHelpers-DZots3og.js} +2 -2
- package/dist/apiHelpers-DZots3og.js.map +1 -0
- package/dist/index.js +2620 -2464
- package/dist/index.js.map +1 -1
- package/dist/{propertyTypeEnums-DTGsK5-s.js → propertyTypeEnums-Civy7RJv.js} +2 -2
- package/dist/{propertyTypeEnums-DTGsK5-s.js.map → propertyTypeEnums-Civy7RJv.js.map} +1 -1
- package/dist/types/AGLicense.d.ts +1 -1
- package/dist/types/UI/maps/UdpMap.d.ts +2 -0
- package/dist/types/UI/maps/UdpMapComponent.d.ts +2 -0
- package/dist/types/UI/utilityDisplay/ChipSection.d.ts +2 -1
- package/dist/types/UI/utilityDisplay/GridPrimaryBar.d.ts +2 -1
- package/dist/types/hooks/usePromotedMethodEntities.d.ts +6 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/types/stores/catalogStore.d.ts +2 -0
- package/dist/types/stores/inquiryStore.d.ts +3 -0
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/dist/types/utilities/catalog/CatalogUtilities.d.ts +1 -0
- package/dist/types/utilities/tree/TreeUtilities.d.ts +1 -1
- package/package.json +2 -2
- package/dist/AmbientGridTemplate-BLwgiqwK.js.map +0 -1
- package/dist/MenuPage-DLsNc-P8.js.map +0 -1
- package/dist/MyExportsPage-CVUIXWTf.js +0 -8
- package/dist/UdpPublicForm-BrVSSMCN.js +0 -4
- package/dist/UtilitySideBar-B4r2IAv5.js.map +0 -1
- package/dist/WorkflowContainer-8-mmebY0.js +0 -9
- package/dist/WorkflowContainer-DKwRWi1i.js.map +0 -1
- package/dist/apiHelpers-t3rfkjFZ.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PageContainer-B65gsUfF.js","names":["result: [string, string, TeleporterInstance][]","useStyles","layout: Omit<Layout, 'i' | 'x' | 'y'>","uuid","ResponsiveGridLayout","useStyles","useStyles","useStyles","useStyles","useStyles","useStyles","FUISquareIconButton","FUICardHeader","useStyles","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":";;;;;;;;;;;;;;;;;;;;;;AAiBA,MAAa,qBAAqB,QAAyB,KAAK,SAAS;CACvE,+BAAe,IAAI;CAEnB,gBAAgB,WAAW,IAAI,aAAa;EAC1C,MAAM,UAAU,IAAI,IAAI,MAAM;EAC9B,IAAI,cAAc,QAAQ,IAAI;AAE9B,MAAI,CAAC,aAAa;AAChB,iCAAc,IAAI;AAClB,WAAQ,IAAI,UAAU;;AAGxB,MAAI,CAAC,YAAY,IAAI,UACnB,aAAY,IAAI,UAAU,EACxB,YAAY;EAIhB,MAAM,aAAa,YAAY,IAAI,UAAW;AAG9C,MAAI,EAAE,eAAe;AAErB,SAAO;;CAGT,yBAAyB;EACvB,MAAMA,SAAiD;EACvD,MAAM,MAAM,MAAM;AAElB,OAAK,MAAM,CAAC,UAAU,gBAAgB,IAAI,UACxC,MAAK,MAAM,CAAC,UAAU,UAAU,YAAY,UAC1C,QAAO,KAAK;GAAC;GAAU;GAAU,MAAM;;AAI3C,SAAO;;;;;;ACjDX,MAAMC,eAAY,YACf,WAAW;CACV,MAAM,EACJ,eAAe,UACb,MAAM,YAAY,aAAa,MAAM,QAAQ,UAAU;CAE3D,SAAS;EACP,SAAS;EACT,eAAe;EACf,aAAa,MAAM,QAAQ;;CAE7B,MAAM;EACJ,UAAU;EACV,OAAO;EACP,QAAQ;EACR,OAAO,MAAM,QAAQ,UAAU;;CAEjC,aAAa;EACX,YAAY,MAAM,QAAQ,OAAO;EACjC,cAAc;EACd,SAAS,MAAM,QAAQ;;CAEzB,OAAO;EACL,YAAY,MAAM,QAAQ;EAC1B,UAAU;EACV,WAAW,EAAE,OAAO,MAAM,QAAQ,UAAU;;IAGhD,EAAE,MAAM;AAGV,MAAa,iBAAiB,UAAU;CACtC,MAAM,UAAUA,aAAU;CAC1B,MAAM,EACJ,WAAW,kBACX,OACA,OACA,UACA,MACA,OAAO,MACP,WAAW,UACT;AAEJ,QACE,oCAAC;EACC,OAAQ,YAAY,SAAU,QAAQ;EACtC,cAAY;EACZ,WAAU;EACV,YAAY,CAAC,YAAY;IAEzB,oCAAC;EACC,SAAS,EACP,MAAM,QAAQ;EAGhB,WAAW,QAAQ;EACnB,SAAS;EACT;EACA,cAAY;EACF;IAET,QACC,oCAAC,SAAI,WAAW,QAAQ,eACtB,oCAAC,oBAAiB,WAAW,QAAQ,UAIzC,oCAAC;EAAW,SAAQ;EAAQ,WAAW,QAAQ;IAC5C,CAAC,YAAY;;AAOxB,cAAc,YAAY;CACxB,WAAW,UAAU;CACrB,OAAO,UAAU;CACjB,OAAO,UAAU;CACjB,UAAU,UAAU;CACpB,MAAM,UAAU;CAChB,MAAM,UAAU;;;;;AClFlB,MAAM,QACJ,MACwC;AACxC,KAAI,OAAO,MAAM,SACf,QAAO;EACL,GAAG,EAAE;EACL,MAAM,EAAE;EACR,MAAM,EAAE;;AAIZ,KAAI,OAAO,MAAM,SACf,QAAO,EAAE;AAGX,QAAO,EAAE,GAAG;;AAGd,MAAM,QACJ,MACwC;AACxC,KAAI,OAAO,MAAM,SACf,QAAO;EACL,GAAG,EAAE;EACL,MAAM,EAAE;EACR,MAAM,EAAE;;AAIZ,KAAI,OAAO,MAAM,SACf,QAAO,EAAE;AAGX,QAAO,EAAE,GAAG;;;;;AAMd,SAAwB,gBACtB,WACA,YAC+B;CAC/B,MAAM,EAAE,GAAG,OAAO,aAAa,UAAU,aAAa,WAAW;CAEjE,MAAMC,SAAwC;EAC5C,GAAG,KAAK;EACR,GAAG,KAAK;;CAGV,MAAM,aAAa,UAAU,UAAU,UAAU;CACjD,MAAM,aAAa,UAAU,UAAU,UAAU;AACjD,QAAO,cAAc,cAAc;AAEnC,QAAO;;;;;AC9CT,MAAM,WAAW,YACd,WAAW,EACV,MAAM;CACJ,SAAS;CACT,eAAe;CACf,OAAO;CACP,QAAQ;CACR,eAAe,UAAW,OAAO,gBAAgB,KAAK,MAAM,QAAQ;MAGxE,EAAE,MAAM;AAGV,MAAM,mBAAmB,OAAO;AAEhC,MAAM,cAAc;CAClB,IAAI;CACJ,IAAI;;AAGN,MAAM,iBAAiB;CACrB,IAAI;CACJ,IAAI;;;;;AAMN,MAAM,qBAAqB,UAAU;CACnC,MAAM,UAAU,SAAS;CACzB,MAAM,EAAE,UAAU,cAAc,eAAgB,GAAG,UAAU;CAC7D,MAAM,EAAE,cAAc;CACtB,MAAM,SAAS;CACf,MAAM,CAAC,KAAK,EAAE,WAAW;CACzB,MAAM,QAAQ;CACd,MAAM,EAAE,uBAAuB,cAAc,YAAY;AACvD,MAAI,QAAQ,kBAAkB,kBAAkB;GAC9C,MAAM,EAAE,IAAI,cAAc,QAAQ;AAClC,UAAO,EAAE,oBAAoB;;AAG/B,SAAO,EAAE,oBAAoB;;CAE/B,MAAM,qBAAqB,cAAc;AACvC,MAAI,mBACF,QAAO;GAAE,GAAGC;GAAQ,GAAG,gBAAgB,WAAW;;IAEnD,CAAC,WAAW;CAEf,MAAM,OAAO,aAAa,QAAQ,eAAe,YAAY,gBAAgB,IAM1E;CAEH,MAAM,SAAS,aACZ,QAAQ,eAAe,YAAY,gBAAgB;AAUlD,MAAI,WAAW,KAAK,KAAK,WAAW,IAAI,GAAG;AACzC,cAAW,IAAI;AACf,eAAY,IAAI;;IAGpB;CAGF,MAAM,OAAO,aACV,QAAQ,SAAS;AAChB,MAAI,oBAAoB;GACtB,MAAM,EAAE,GAAG,GAAG,GAAG,MAAM;GACvB,MAAM,EAAE,eAAe,OAAO,QAAQ;AACtC,OAAI,aACF,cAAa;IACX,YAAY;IACZ,IAAIA;IACJ,QAAQ,GACL,aAAa;KACZ;KACA;KACA;KACA;;IAGJ,QAAQ;;;IAIhB,CAAC,oBAAoB;AAGvB,QACE,oCAAC;EAAS;EAAK,WAAW,QAAQ;IAC/B,QACC,oCAACC;EACC,KAAK;EACL,GAAI;EACG;EACM;EACb,MAAM;EACN,WAAW;EACX,QAAQ,CAAC,MAAM,QAAQ,IAAI,MAAM,QAAQ;EACzC,kBAAkB,CAAC,GAAG;EACtB,iBAAgB;EAChB,QAAQ;EACR,UAAU;EACV,QAAQ;EACR,aAAa,gBAAgB,eAAe;EAC5C,aAAa,gBAAgB,eAAe;EAC5C,cAAc;EACd,OAAO,EACL,QAAQ;IAGT,YAED;;AAKV,gCAAe;;;;ACzIf,MAAMC,eAAY,YAAW,WAAU;CACrC,MAAM;EACJ,WAAW;EACX,aAAa,MAAM,QAAQ;EAC3B,SAAS;EACT,eAAe;EACf,YAAY;EACZ,cAAc,aAAa,MAAM,QAAQ;;CAE3C,OAAO,EACL,UAAU;;AAId,MAAM,iBAAiB,OAAO,QAAQ;CACpC,MAAM,UAAUA,aAAU;CAC1B,MAAM,EAAE,WAAW,UAAU,eAAe,QAAS,GAAG,UAAU;AAElE,QACE,oCAAC;EAAS;EAAK,GAAI;EAAO,WAAW,KAAK,WAAW,QAAQ;IAC3D,oCAAC;EAAW,IAAI;EAAS,WAAW,QAAQ;IACzC,WAEF;;AAKP,4BAAe,WAAW;;;;AC7B1B,MAAMC,eAAY,YAChB,WAAU,EACR,MAAM,EACJ,cAAc,QAGlB,EAAE,MAAM;;;;AAMV,MAAM,uBAAsB,UAAS;CACnC,MAAM,UAAUA,aAAU;AAC1B,QAAO,oCAAC;EAAW,GAAI;EAAgB;;;AAGzC,kCAAe;;;;AChBf,MAAMC,cAAY,WAChB,EACE,MAAM,MAER,EAAE,MAAM;;;;AAMV,MAAa,aAAa,YAAY,OAAO,QAAQ;CACnD,MAAM,UAAUA,YAAU;CAC1B,MAAM,EAAE,SAAU,GAAG,UAAU;AAE/B,QACE,oCAAC;EAAU;EAAK;EAAO,GAAI;EAAgB;IACxC;;AAIP,WAAW,cAAc;;;;ACpBzB,MAAMC,cAAY,WAChB,EACE,MAAM,MAER,EAAE,MAAM;;;;AAMV,MAAa,oBAAoB,YAAY,OAAO,QAAQ;CAC1D,MAAM,UAAUA,YAAU;CAC1B,MAAM,EAAE,SAAU,GAAG,UAAU;AAE/B,QACE,oCAAC;EAAiB;EAAK,GAAI;EAAgB;IACxC;;AAIP,kBAAkB,cAAc;;;;ACpBhC,MAAMC,cAAY,WAChB;CACE,MAAM;CACN,SAAS;GAEX,EAAE,MAAM;;;;AAMV,MAAa,oBAAoB,YAAY,OAAO,QAAQ;CAC1D,MAAM,UAAUA,YAAU;CAC1B,MAAM,EAAE,SAAU,GAAG,UAAU;AAE/B,QACE,oCAAC;EAAiB;EAAK,GAAI;EAAgB;IACxC;;AAIP,kBAAkB,cAAc;;;;ACbhC,MAAMC,cAAY,YACf,WAAW;CACV,MAAM;EACJ,SAAS;EACT,eAAe;;CAEjB,QAAQ,EACN,QAAQ;CAEV,aAAa;EACX,MAAM;EACN,WAAW;EACX,SAAS;EACT,eAAe;;CAEjB,aAAa;EACX,SAAS;EACT,eAAe;EACf,gBAAgB;EAChB,YAAY,MAAM,QAAQ;EAC1B,SAAS,MAAM,QAAQ;;IAG3B,EAAE,MAAM;AAGV,IAAW,iBAAiB,OAAO,QAAQ;CACzC,MAAM,EAAE,SAAU,GAAG,UAAU;AAE/B,QACE,oCAAC;EACM;EACL,MAAK;EACL,SAAQ;EACR;EACA,GAAI;IAEH;;AAIP,gBAAgB,WAAW;AAE3B,IAAW,qBAAqB,OAAO,QAAQ;CAC7C,MAAM,EAAE,aAAa;AAErB,QACE,oCAAC;EACC,QACE,oCAACC,mCACC,oCAAC;GAAW,WAAW;GAAU,MAAK;;EAG1C,MAAM,oCAAC,YAAM;;;AAInB,oBAAoB,WAAW;AAE/B,MAAM,WAAW,OAAO,QAAQ;CAC9B,MAAM,UAAUD;CAChB,MAAM,EACJ,WACA,UACA,SACA,OACA,eACA,iBACA,WACA,QACA,KACA,GAAG,cACD;CACJ,MAAM,KAAK,MAAM,MAAM,UAAU;CACjC,MAAM,UAAU,GAAG,GAAG;AAEtB,QACE,oCAAC;EACM;EACL,WAAU;EACV,mBAAiB;EACjB,GAAI;EACI;EACR,WAAW,KAAK,WAAW,UAAU,QAAQ;EAC7C,GAAI;EACJ,SAAS,EAAE,MAAM,QAAQ;IAEzB,oCAACE;EACU;EACM;EACf,GAAI;IAEH,QAEH,oCAAC,qBAAkB,WAAW,QAAQ,eACnC,WAEF,WACC,oCAAC,qBAAkB,WAAW,QAAQ,eACnC;;AAOX,sBAAe,WAAW;;;;AC7G1B,MAAMC,cAAY,WAChB,EACE,cAAc,EACZ,UAAU,QAGd,EAAE,MAAM;;;;AAMV,MAAM,eAAe,OAAO,QAAQ;CAClC,MAAM,UAAUA;CAChB,MAAM,EAAE,MAAM,YAAY,SAAS,UAAW,GAAG,kBAAkB;AAEnE,QACE,oCAAC;EAAc;EAAK;EAAM,GAAI;IAC5B,oCAAC,gBAAa,WAAW,QAAQ,gBAC9B,QAAQ,oCAAC,cAAW,WAAW,gBAElC,oCAAC,cAAiB;EAAE;EAAS;;;AAKnC,0BAAe,WAAW;;;;;;;ACzB1B,MAAa,cAAc,UAAU;CACnC,MAAM,EACJ,UACA,eACA,WACA,YACA,IACA,QACA,QACA,UACA,UACA,SACA,QACA,OACA,gBACA,cACA,eACA,iBACA,GAAG,UACD;CAEJ,MAAMC,eAAY,YAAY,aAAW;EACvC,MAAM,EACJ,kDAAkD,EAChD,SAAS;EAGb,UAAU;GACR,kDAAkD,EAChD,SAAS;GAEX,YAAY;GACZ,OAAO;;EAET,SAAS,EACP,0BAA0B;GACxB,gBAAgB;GAChB,UAAU;GACV,SAAS;;EAGb,QAAQ;GACN,QAAQ;GACR,WAAW,EACT,iBAAiBC,QAAM,QAAQ,OAAO;GAExC,SAAS,kBAAkB;;EAE7B,gBAAgB;GACd,MAAM;GACN,SAAS;GACT,eAAe;GACf,YAAY;GACZ,gBAAgB;;EAElB,6BAA6B;GAC3B,QACE,eAAe,0BACX,SACA,gBACA,gBACA;GACN,WAAW,mBAAmB,mBAAmB;GACjD,UAAU,eAAe,sBAAsB,IAAI;GACnD,SAAS;GACT,eAAe;GACf,gBAAgB;GAChB,SACE,iBACC,eAAe,oBAAoB,IAAIA,QAAM,QAAQ;;;CAG5D,MAAM,UAAUD;CAChB,MAAM,SAAS,uCAAuC,KAAK,aAAa;CAExE,IAAI,OAAO;AACX,KAAI,WAAW,CAAC,KACd,QACE,oCAAC,SAAI,WAAW,QAAQ,kBACtB,oCAAC,oBAAiB,MAAM;AAI9B,KAAI,UAAU,CAAC,KACb,QAAO,oCAAC,aAAI;AAGd,QACE,oCAACE;EACC,GAAI;EACJ,WAAW,KACT,WACA,UAAU,SAAS,QAAQ,WAAW,QAAQ,MAC9C,QAAQ;EAEF;EACR,iBAAiB;GACf,WAAW,QAAQ;GACnB,eAAe;;EAEjB,eACE,0DACG,eACD,oCAAC,yBACC,oCAACC;GACC,SAAS;GACT,YAAY;GACZ,SAAQ;;IAMhB,oCAAC,SAAI,WAAW,QAAQ,+BAA8B;;;;;;;;ACpH5D,IAAI,mBAAmB,UAAU;CAC/B,MAAM,EACJ,YACA,IACA,YACA,UACA,QAAQ,aACR,UACA,GAAG,UACD;CACJ,MAAM,EAAE,WAAW,kBAAkB;CACrC,MAAM,WAAW,kBAAkB;AACjC,aAAW;IACV,CAAC,YAAY;CAEhB,MAAM,EAAE,QAAQ,QAAQ,cAAc,cAAc;AAClD,MAAI,CAAC,iBAAiB,CAAC,UACrB,QAAO;AAET,MAAI,cAAc,eAAe,UAC/B,QAAO,UAAU;AAGnB,SAAO;IACN;EAAC;EAAY;EAAW;;CAE3B,MAAM,SAAS,cAAc;EAC3B,MAAMC,WAAS;AACf,MAAI,WAAW;AACb,QAAK,MAAM,QAAQ,UACjB,UAAO,QAAQ,UAAU,MAAM;AAEjC,QAAK,MAAM,SAAS,YAClB,UAAO,SAAS,YAAY;;AAIhC,SAAOA;IACN,CAAC,WAAW;CACf,MAAM,WAAW,aACd,MAAM,UAAU,UAAU,IAAI,GAAG,OAAO,UACzC,CAAC,IAAI;AAGP,KAAI,CAAC,iBAAiB,CAAC,UACrB,QACE,oCAAC;EAAW,GAAI;EAAO,OAAM;IAAQ;AAMzC,KAAI,CAAC,OACH,QACE,oCAAC;EAAW,GAAI;EAAO,OAAM;IAAQ,0BACb,YAAW;KAIrC,QACE,oCAAC;EACC,GAAI;EACA;EACI;EACE;EACA;IAET;;AAMT,8BAAe,KAAK;;;;AC1EpB,MAAM,QAAQ,UAAU;CACtB,MAAM,EAAE,YAAY,cAAc,kBAAkB;CACpD,MAAM,EAAE,WAAW,kBAAkB;CACrC,MAAM,iBAAiB,aAAa,KAAK,MAAM,cAAc;CAC7D,IAAI,UAAU,gBAAgB;AAE9B,KAAI,OAAO,iBAAiB,SAC1B,WAAU,KAAK,MAAM;CAGvB,MAAM,yBAAyB;AAC7B,MAAI,CAAC,QAAS,QAAO;EAErB,MAAMC,YAAU;AAChB,OAAK,MAAM,UAAU,QACnB,MAAK,MAAM,cAAc,OAAO,QAAQ;AACtC,OAAI,eAAe,gBAAgB,CAAC,OAAO,OAAO,YAAa;AAC/D,aAAQ,cAAcA,UAAQ,eAAe;GAC7C,MAAM,EAAE,WAAY,GAAG,WAAW,OAAO,OAAO;AAChD,aAAQ,YAAY,KAAK;IACvB,GAAG,gBAAgB,WAAW,OAAO;IACrC,aAAa,OAAO,OAAO,eAAe;IAC1C,GAAG;IACH,GAAG,OAAO;;;AAKhB,SAAOA;;CAGT,MAAM,UAAU,cACR,oBACN,CAAC,kBAAkB;CAGrB,MAAM,QAAQ,cAEV,WACA,QAAQ,KAAK,EAAE,WAAY,GAAG,aAC5B,oCAACC;EAAgB,KAAK,OAAO;EAAI,GAAI;MAEzC,CAAC;AAGH,KAAI,CAAC,QAAS,QAAO;AAErB,QACE,oCAACC;EACU;EACO;EACD;IAEd;;AAIP,mBAAe;;;;AC1Df,MAAMC,cAAY,YAAY,WAAW,EACvC,MAAM,EACJ,aAAa,MAAM,QAAQ;AAI/B,MAAa,0BAA0B,EAAE,OAAO,WAAW,YAAY;CACrE,MAAM,UAAUA;AAEhB,QACE,oCAAC,SAAI,WAAW,QAAQ,QACtB,oCAAC,cAAW,MAAK,YACjB,oCAAC;EAAqB;EAAkB;EAAkB;EAAO,MAAM;KACvE,oCAAC,cAAW,MAAK,YACjB,oCAAC;;;;;ACRP,MAAMC,cAAY,YAAY,WAAW;CACvC,MAAM;CACN,aAAa;CACb,MAAM,EACJ,OAAO,MAAM,QAAQ,UAAU;;AAInC,MAAa,aAAa,EAAE,WAAW,aAAa,gBAAgB;CAClE,MAAM,UAAUA;CAEhB,MAAM,CAAC,UAAU,eAAe,SAAS;CAEzC,MAAM,eAAe,UAAU;AAC7B,cAAY,MAAM;;CAGpB,MAAM,oBAAoB;AACxB,cAAY;;CAGd,MAAM,OAAO,QAAQ;CACrB,MAAM,KAAK,OAAO,mBAAmB;CAErC,MAAM,qBAAqB,CACzB;EACE,OAAO;EACP,WAAW;EACX,OAAO;EACP,KAAK;IAEP;EACE,OAAO;EACP,WAAW;EACX,OAAO;EACP,KAAK;;AAaT,QACE,oCAAC,SAAI,WAAW,QAAQ,QACtB,oCAAC;EACC,WAAW,QAAQ;EACnB,MAAM;EACN,SAAS;KAGX,oCAAC;EACC,SAAS,EAAE,MAAM,QAAQ;EACzB;EACA,WAAW;EACP;EACE;EACI;EACV,SAAS;EACT,cAAc;GACZ,UAAU;GACV,YAAY;;EAEd,iBAAiB;GACf,UAAU;GACV,YAAY;;IAGd,oCAAC,SAAI,OAAO,EAAE,OAAO,SACnB,oCAAC,aACE,mBAAmB,KAAK,SAAS;AAChC,SACE,oCAAC;GACC,OAAO,KAAK;GACZ,WAAW,KAAK;GAChB,OAAO,KAAK;;;;;;;ACtE9B,MAAMC,cAAY,YAAY,WAAW;CACvC,MAAM;EACJ,YAAY;EACZ,UAAU;;CAEZ,aAAa;EACX,SAAS;EACT,MAAM,UAAW,OAAO,YAAY,UAAU,MAAM,QAAQ,KAAK;EACjE,UAAU;;CAEZ,KAAK;EACH,SAAS;EACT,MAAM;;CAER,UAAU,EACR,iBAAiB,MAAM,QAAQ,WAAW;CAE5C,WAAW;EACT,eAAe,UACb,OAAO,YAAY,UACf,OACA,aAAa,MAAM,QAAQ,UAAU;EAC3C,kBAAkB,UAChB,OAAO,YAAY,UAAU,MAAM,QAAQ,UAAU,QAAQ;EAC/D,QAAQ,UACN,OAAO,YAAY,UACf,MAAM,QAAQ,gBAAgB,MAAM,QAAQ,UAAU,SACtD;;CAER,YAAY;EACV,WAAW,MAAM,QAAQ;EACzB,OAAO,MAAM,QAAQ;EACrB,QAAQ,MAAM,QAAQ;EACtB,cAAc;;CAEhB,UAAU;EACR,YAAY;EACZ,QAAQ,UAAW,OAAO,YAAY,OAAO,YAAY;;CAE3D,gBAAgB,EACd,YAAY,UACV,OAAO,gBAAgB,OAAO,gBAAgB;;AAIpD,MAAa,WAAW,UAAU;CAChC,MAAM,EACJ,OACA,UACA,WACA,eACA,SACA,SACA,gBACE;CACJ,MAAM,UAAUA,YAAU;CAC1B,MAAM,kBAAkB,OAAO;CAC/B,MAAM,uBAAuB,OAAO;CACpC,MAAM,CAAC,UAAU,eAAe,SAAS;CACzC,MAAM,CAAC,gBAAgB,qBAAqB,SAAS;CACrD,MAAM,CAAC,aAAa,kBAAkB,SAAS;CAC/C,MAAM,CAAC,sBAAsB,2BAA2B,SAAS;CACjE,MAAM,CAAC,iBAAiB,sBAAsB;CAC9C,MAAM,WAAW;CACjB,MAAM,OAAO,QAAQ;CAErB,MAAM,iBAAiB,cAAc;AACnC,SAAO,SAAS,KAAK,KAAK,WAAW;GACnC,IAAI;GACJ,GAAG;GACH,KAAK;;IAEN,CAAC;CAEJ,MAAM,qBAAqB,aAAa,OAAO,UAAU;AACvD,cAAY,MAAM;IACjB;CAEH,MAAM,2BAA2B;AAC/B,cAAY;;CAGd,MAAM,mBAAmB,cAAc;AACrC,SAAO,CAAC,CAAC,aAAa,MAAM,QAAQ,KAAK,OAAO;IAC/C,CAAC,OAAO;CAEX,MAAM,qBAAqB,aACxB,cAAc,qBAAmB;EAChC,IAAI,gBAAgB;EACpB,IAAI,WAAW;AAEf,MACE,cAAc,WAAWC,kBAAgB,UACzC,CAAC,sBACD;AACA,QAAK,IAAI,IAAI,GAAG,IAAI,aAAa,QAAQ,KAAK;AAC5C,qBAAiB,aAAa,GAAG;AACjC,QAAI,YAAY,QACd,kBAAiB;AAEnB,aAAS,KAAK,aAAa,GAAG;;AAEhC,2BAAwB;AACxB,sBAAmB;AAEnB,UAAO;IAAE;IAAe;;;AAG1B,SAAO;GAAE,eAAe;GAAsB,UAAU;;IAE1D;EAAC;EAAiB;EAAsB;;CAG1C,MAAM,sBAAsB,kBAAkB;AAC5C,MAAI,qBAAqB,SAAS;GAChC,MAAM,iBAAiB,qBAAqB,QAAQ;GACpD,MAAM,eAAe,MAAM,KAAK,qBAAqB,QAAQ;GAC7D,MAAM,eAAe;GACrB,IAAI,kBAAkB;GACtB,IAAI,mBAAmB,MAAM,KAAK;GAClC,MAAM,EAAE,eAAe,aAAa,mBAClC,cACA;AAGF,OAAI,gBAAgB,gBAAgB;IAClC,IAAI,mBAAmB;AACvB,SAAK,IAAI,IAAI,GAAG,IAAI,UAAU,QAAQ,KAAK;AACzC,yBAAoB,SAAS;AAC7B,SAAI,YAAY,QACd,qBAAoB;AAGtB,SAAI,mBAAmB,iBAAiB,cAAc;AACpD,wBAAkB,MAAM,KAAK,gBAAgB,MAAM;AACnD,yBAAmB,MAAM,KAAK,gBAAgB,MAAM,GAAG;AACvD;;;;AAIN,qBAAkB;AAClB,kBAAe;;IAEhB;EAAC;EAAgB;EAAoB;;AAExC,iBAAgB;AAEd,oBAAkB;IACjB,CAAC;AAEJ,iBAAgB;AACd;EAEA,MAAM,WAAW,IAAI,gBAAgB,YAAY;AAC/C;AACA;;AAGF,MAAI,gBAAgB,QAClB,UAAS,QAAQ,gBAAgB;AAInC,eAAa;AACX,YAAS;;IAEV,CAAC;AAEJ,QACE,oCAAC,aACC,oCAAC;EAAI,WAAW,KAAK,QAAQ,MAAM;EAAY,KAAK;IAClD,oCAAC;EACC,WAAW,QAAQ;EACnB,KAAK;EACL,OACE,YAAY,WAAW,EAAE,gBAAgB,oBAAoB;IAG9D,gBAAgB,KAAK,MAAM,UAC1B,oCAAC;EAEC,OAAO;GACL,MAAM,YAAY,YAAY;GAC9B,OAAO,CAAC,CAAC,eAAe;;EAE1B,KAAK;EACL,IACE,gCAAgC,MAAM,OAAO,QAAQ,MAAM;EAE7D,aACE,gCAAgC,MAAM,OAAO,QAAQ,MAAM;IAG7D,oCAAC;EACC,WAAW,KAAK,QAAQ,KAAK;IAC1B,QAAQ,WAAW,YAAY;IAC/B,QAAQ,YAAY,UAAU,MAAM;;EAEvC,UAAU,MAAM;AACd,YAAS,GAAG,MAAM;AAClB,OAAI,MAAM,QACR,MAAK;AAEP,eAAY;;IAGd,oCAAC;EACC;EACA,OAAO,EACL,YAAY,YAAY,WAAW,SAAS;IAG7C,MAAM,WAKd,aAAa,SAAS,KACrB,oCAAC;EACC,SAAS;EACT,WAAW,QAAQ;EACnB,OAAM;EACN,IAAG;EACH,aAAY;IAEZ,oCAAC;EACC,OAAM;EACN,SAAQ;EACR,WAAW,qBAAqB;IAEhC,oCAAC;EAAW,WAAW;EAAkB,MAAK;QAMrD,CAAC,CAAC,aAAa,UACd,oCAAC,aACC,oCAAC;EACC,IAAG;EACG;EACI;EACV,SAAS;EACT,cAAc;GACZ,UAAU;GACV,YAAY;;EAEd,iBAAiB;GACf,UAAU;GACV,YAAY;;EAEd,WAAW,QAAQ;IAElB,aAAa,KAAK,QAAQ;AACzB,SACE,oCAAC;GACC,KAAK,KAAK;GACV,IACE,gCACA,KAAK,OAAO,QAAQ,MAAM;GAE5B,aACE,gCACA,KAAK,OAAO,QAAQ,MAAM;GAE5B,UAAU,MAAM;AACd,QAAI,KAAK,QACP,KAAI;AAGN,QAAI,SACF,UAAS,GAAG,KAAK;AAEnB,gBAAY;;GAEd,WAAW,KAAK,QAAQ,UAAU;GAClC,UAAU,KAAK,OAAO;GACtB,GAAI;KAEJ,oCAAC,kBAAY,KAAK;;;;;;ACvStC,MAAa,0BAAkE;CAC7E,MAAM,gBAAgB,oBAAoB,UAAU,MAAM;CAE1D,MAAM,iBAAiB,cAAc;EACnC,MAAMC,SAAiD;AAEvD,OAAK,MAAM,CAAC,UAAU,gBAAgB,cAAc,UAClD,MAAK,MAAM,CAAC,UAAU,UAAU,YAAY,UAC1C,QAAO,KAAK;GAAC;GAAU;GAAU,MAAM;;AAI3C,SAAO;IACN,CAAC;AAEJ,QAAO;;;;;ACgBT,MAAMC,cAAY,YAAY,WAAW;CACvC,MAAM;EACJ,SAAS;GACR,MAAM,YAAY,QAAQ,MAAM,QAAQ,EACvC,QAAQ;;CAGZ,OAAO,EACL,QAAQ,MAAM,QAAQ;CAExB,cAAc;EACZ,aAAa,MAAM,QAAQ;EAC3B,eAAe,UAAW,MAAM,SAAS,MAAM,QAAQ,KAAK;EAC5D,SAAS;EACT,YAAY;;CAEd,kBAAkB;EAIhB,OAAO;EACP,WAAW;GACV,MAAM,YAAY,KAAK,QAAQ,EAC9B,gBAAgB;;CAGpB,WAAW;EACT,WAAW,UAAU,MAAM,aAAa;EACxC,YAAY,MAAM,QAAQ;GACzB,MAAM,YAAY,QAAQ,MAAM,QAAQ,EACvC,SAAS;GAEV,MAAM,YAAY,KAAK,QAAQ,EAC9B,SAAS;;CAGb,eAAe;EACb,WAAW,MAAM,QAAQ;EACzB,YAAY,MAAM,QAAQ;;CAQ5B,WAAW;EACT,SAAS;EACT,MAAM;EACN,YAAY;;CAMd,kBAAkB;EAChB,SAAS;GACR,MAAM,YAAY,KAAK,QAAQ,EAC9B,SAAS;EAEX,YAAY;;CAEd,wBAAwB;EACtB,SAAS;EACT,SAAS,MAAM,QAAQ;EACvB,YAAY,MAAM,QAAQ;GACzB,MAAM,YAAY,GAAG,QAAQ,EAC5B,SAAS;;CAGb,QAAQ;EACN,aAAa,MAAM,QAAQ;EAC3B,WAAW,MAAM,QAAQ;EAEzB,MAAM;;CAER,OAAO,EACL,aAAa,MAAM,QAAQ;CAE7B,KAAK;EACH,SAAS;GACR,MAAM,YAAY,QAAQ,MAAM,QAAQ;GACvC,UAAU;GACV,QAAQ,MAAM,QAAQ;GACtB,OAAO,MAAM,QAAQ;GACrB,QAAQ,MAAM,OAAO;;;CAGzB,WAAW,EACT,eAAe,MAAM,QAAQ;CAE/B,iBAAiB;EACf,iBAAiB;EACjB,OAAO;;CAET,gBAAgB;EACd,QAAQ;EACR,WAAW,aAAa,MAAM,QAAQ;EACtC,aAAa,MAAM,QAAQ;EAC3B,iBAAiB;;CAEnB,SAAS;EACP,QAAQ;EACR,YAAY,MAAM,QAAQ;EAC1B,aAAa,MAAM,QAAQ;;CAE7B,eAAe;EACb,UAAU;EACV,OAAO,MAAM,QAAQ,UAAU;;CAEjC,QAAQ;EACN,UAAU;GACT,MAAM,YAAY,KAAK,QAAQ,EAC9B,OAAO;EAET,WAAW;;CAEb,UAAU;GACP,MAAM,YAAY,KAAK,QAAQ,EAC9B,UAAU;GAEX,MAAM,YAAY,KAAK,QAAQ,EAC9B,UAAU;GAEX,MAAM,YAAY,KAAK,QAAQ,EAC9B,UAAU;EAEZ,WAAW;;CAEb,YAAY;EACV,WAAW;EACX,YAAY;;CAEd,kBAAkB;EAChB,SAAS;EACT,OAAO,UAAU,MAAM,SAAS;;CAElC,iBAAiB;EACf,SAAS;EACT,OAAO;;CAGT,mBAAmB;EACjB,SAAS;EACT,MAAM;EAEN,gBAAgB;;CAElB,oBAAoB;EAClB,SAAS;EACT,gBAAgB;;CAElB,QAAQ,EACN,SAAS;CAEX,gBAAgB;EACd,YAAY,QAAQ,MAAM,QAAQ,UAAU,OAAO;EACnD,SAAS,MAAM,QAAQ;EACvB,aAAa,MAAM,QAAQ;EAC3B,WAAW,aAAa,MAAM,QAAQ,QAAQ;;CAEhD,mBAAmB;EACjB,SAAS;EACT,YAAY;EACZ,aAAa,MAAM,QAAQ;;CAE7B,0BAA0B,EACxB,YAAY,MAAM,QAAQ;;AAI9B,MAAa,uBAAuB,UAAU;CAC5C,MAAM,UAAUA,YAAU;CAE1B,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;CACrD,MAAM,qBAAqB,eAAe,UAAU,MAAM;CAC1D,MAAM,iBAAiB;CAEvB,MAAM,qBAAqB;AACzB,oBAAkB,CAAC;;CAUrB,MAAM,qBAAqB,CACzB;EACE,OAAO;EACP,MAAM;EACN,WAAW;EACX,OAAO;EACP,IAAI;;CAGR,MAAM,qBAAqB,CACzB;EACE,OAAO;EACP,MAAM;EACN,WAAW;EACX,OAAO;EACP,IAAI;;CAGR,MAAM,uBAAuB,CAC3B;EACE,OAAO;EACP,MAAM;EACN,WAAW;EACX,OAAO;EACP,IAAI;;CAIR,MAAM,oBAAoB,CACxB;EACE,OAAO;EACP,WAAW;EACX,OAAO;EACP,IAAI;;CAGR,MAAM,qBAAqB,CACzB;EACE,OAAO;EACP,WAAW;EACX,OAAO;EACP,IAAI;;CAIR,MAAM,mBAAmB,CACvB;EACE,OAAO;EACP,WAAW;EACX,OAAO;EACP,IAAI;;CAGR,MAAM,qBAAqB,CACzB;EACE,OAAO;EACP,WAAW;EACX,OAAO;EACP,IAAI;;CAGR,MAAM,oBAAoB,CACxB;EACE,OAAO;EACP,WAAW;EACX,OAAO;EACP,IAAI;;CAIR,MAAM,qBACJ,oCAAC,aACC,oCAAC;EACC,WAAW,oBAAoB,SAAS;EACxC,aAAa,sBAAsB,SAAS;EACjC;;CAIjB,MAAM,oBAAoB,sBACxB,oCAAC,aACE,mBAAmB,KAAK,SAAS;AAChC,SACE,oCAAC;GACC,OAAO,KAAK;GACZ,OAAO,KAAK;GACZ,UAAU;GACV,WAAW,KAAK;GAChB,OAAO,KAAK;GACZ,MAAM,KAAK;GACX,KAAK,KAAK;;;CAMpB,MAAM,oBAAoB,sBACxB,oCAAC,aACE,mBAAmB,KAAK,SAAS;AAChC,SACE,oCAAC;GACC,OAAO,KAAK;GACZ,OAAO,KAAK;GACZ,UAAU;GACV,WAAW,KAAK;GAChB,OAAO,KAAK;GACZ,MAAM,KAAK;GACX,KAAK,KAAK;;;CAMpB,MAAM,sBAAsB,wBAC1B,oCAAC,aACE,qBAAqB,KAAK,SAAS;AAClC,SACE,oCAAC;GACC,OAAO,KAAK;GACZ,OAAO,KAAK;GACZ,UAAU;GACV,WAAW,KAAK;GAChB,OAAO,KAAK;GACZ,MAAM,KAAK;GACX,KAAK,KAAK;;;CAMpB,MAAM,kBAAkB,oBACtB,oCAAC,aACE,iBAAiB,KAAK,SAAS;AAC9B,SACE,oCAAC;GACC,OAAO,KAAK;GACZ,OAAO,KAAK;GACZ,UAAU;GACV,WAAW,KAAK;GAChB,OAAO,KAAK;GACZ,MAAM,KAAK;GACX,KAAK,KAAK;;;CAMpB,MAAM,oBAAoB,sBACxB,oCAAC,aACE,mBAAmB,KAAK,SAAS;AAChC,SACE,oCAAC;GACC,OAAO,KAAK;GACZ,OAAO,KAAK;GACZ,UAAU;GACV,WAAW,KAAK;GAChB,OAAO,KAAK;GACZ,MAAM,KAAK;GACX,KAAK,KAAK;;;CAMpB,MAAM,mBAAmB,qBACvB,oCAAC,aACE,kBAAkB,KAAK,SAAS;AAC/B,SACE,oCAAC;GACC,OAAO,KAAK;GACZ,OAAO,KAAK;GACZ,UAAU;GACV,WAAW,KAAK;GAChB,OAAO,KAAK;GACZ,MAAM,KAAK;GACX,KAAK,KAAK;;;CAOpB,MAAM,eACJ,0DACE,oCAAC,SAAI,OAAO,EAAE,SAAS,YACpB,kBACC,oCAAC;EACC,OAAO;EACP,cAAW;EACX,WAAW,QAAQ;EACnB,MAAM;EACN,SAAS;EACT,MAAK;MAIX,oCAAC;EAAI,WAAW,QAAQ;EAAQ,OAAO,EAAE,MAAM;IAC7C,oCAAC,aACE,kBACC,oCAAC,aACC,oCAAC;EACC,WAAU;EACV,IAAI;EACJ;EACA;IAEA,oCAAC,SAAI,WAAW,QAAQ,iBAAgB;CAStD,MAAM,kBAAkB,EAAE,eAAe;AACvC,SAAO,oCAAC,SAAI,WAAW,QAAQ,kBAAiB;;CAGlD,MAAM,0BAA0B;AAC9B,SACE,oCAAC,SAAI,WAAW,QAAQ,qBACrB,kBAAkB,iBAClB,oBAAoB,mBACpB,mBAAmB,kBACnB,cAAc,mBACd,cAAc,mBACd,gBAAgB,qBAChB,cAAc;;CAKrB,MAAM,sCAAsC,cAAc;EACxD,MAAM,aAAa;AACnB,iBAAe,SAAS,CAAC,UAAU,UAAU,gBAAgB;GAC3D,MAAM,SAAS,WAAW;AAC1B,OACE,aAAa,yBACb,aAAa,QAEb,YAAW,KACT,oCAAC;IAAI,KAAK;IAAU,WAAU;MAC5B,oCAAC;;AAKT,SAAO;IACN,CAAC,uBAAuB;AAE3B,QACE,oCAAC,SAAI,KAAK,sBACR,oCAAC,SAAI,WAAW,UAAU,QAAQ,UAEhC,oCAAC,SAAI,WAAW,QAAQ,oBACrB,aACC,oCAAC,SAAI,WAAW,QAAQ,cACtB,oCAAC;EAAiB,MAAM;EAAe,SAAS;MAInD,SACC,oCAAC,SAAI,WAAW,QAAQ,QACtB,oCAAC,SAAI,WAAW,QAAQ,gBACtB,oCAAC,iBAAc,iBAAiB,UAAS,QACxC,UAAU,aACT,oCAAC;EACC,WAAW,QAAQ;EACnB,SAAQ;EACR,WAAU;IAET,YAIJ,iCACC,oCAAC,SAAI,WAAW,QAAQ,4BACrB,oCAAoC,KAAI,YAAS;AACvD,SAAOC;QAOX,CAAC,SAAS,iCACT,oCAAC,SAAI,WAAW,QAAQ,4BACrB,oCAAoC,KAAI,YAAS;AACjD,SAAOA;MAIX,mBACC,oCAAC,SAAI,WAAW,QAAQ,QACtB,oCAAC,SAAI,WAAW,QAAQ,gBACtB,oCAAC;EACC,OAAO,iBAAiB;EACxB,QAAQ,iBAAiB;QAMnC,oCAAC,SAAI,WAAW,QAAQ,oBAIrB,SACA,CAAC,iBACA,oCAAC,SAAI,WAAW,QAAQ,aACrB,CAAC,UAAU,aACV,oCAAC;EACC,WAAW,QAAQ;EACnB,SAAQ;EACR,WAAU;IAET,YAGL,oCAAC,SAAI,WAAW,OAAO,QAAQ,SAAS,QAAQ,YAC7C,SAAS,SAAS,KACjB,oCAAC;EACQ;EACP,UAAU;EACD;EACT,SAAS;MAKd,UAAU,cACX,oCAAC,SAAI,OAAO,EAAE,MAAM,QAEpB,oCAAC,SAAI,WAAW,QAAQ,oBACrB,CAAC,kBAAkB,UAClB,oCAAC;EACC,OAAM;EACN,WAAW;EACX,OAAO;KAGV,UACC,oCAAC;EAAQ,aAAY;EAAW,WAAW,QAAQ;MAiBnD,cACA,cACA,gBACA,cACA,kBACA,oBACA,oBACA,iBAAiB,oCAAC,qBAA0B,WAE7C,QACC,cACA,mBAAmB,KAAK,SAAS;AAC/B,SACE,oCAAC;GACC,OAAO,KAAK;GACZ,OAAO,KAAK;GACZ,UAAU;GACV,WAAW,KAAK;GAChB,OAAO,KAAK;GACZ,MAAM,KAAK;GACX,KAAK,KAAK;;KAKjB,QACC,cACA,kBAAkB,KAAK,SAAS;AAC9B,SACE,oCAAC;GACC,OAAO,KAAK;GACZ,OAAO,KAAK;GACZ,UAAU;GACV,WAAW,KAAK;GAChB,OAAO,KAAK;GACZ,MAAM,KAAK;GACX,KAAK,KAAK;;KAqBjB,QAAQ,kBACP,oCAAC,aACC,oCAAC;EACC,IAAG;EACH,aAAY;EACZ,MAAM;EAEN,cAAW;MAKhB,oBACC,CAAC,QACD,iBAAiB,KAAK,MAAM,UAAU;AACpC,SACE,oCAAC;GACC,OAAO,KAAK;GACZ,UAAU;GACV,WAAW,KAAK;GAChB,OAAO,KAAK;GACZ,KAAK,KAAK,MAAM;GAChB,MAAM,KAAK;GACX,UAAU,KAAK;;MAKzB,oCAAC,aACE,iCACC,eAAe,KAAK,CAAC,UAAU,UAAU,gBAAgB;EACvD,MAAM,SAAS,WAAW;AAC1B,MACE,aAAa,yBACb,aAAa,QAEb,QACE,oCAAC;GAAI,KAAK;GAAU,WAAU;KAC5B,oCAAC;MAIL,QAAO;MAId,CAAC,WACA,oCAAC,SAAI,WAAW,QAAQ,OACrB,mBACC,gBAAgB,KAAK,MAAM,UAAU;AACnC,SACE,oCAAC;GACC,OAAO,KAAK;GACZ,UAAU;GACV,WAAW,KAAK;GAChB,OAAO,KAAK;GACZ,KAAK,KAAK,MAAM;GAChB,MAAM,KAAK;;KAKnB,oCAAC;EACC,UAAU;EACV,SAAS;EACT,GAAI;IAEH,iBAQb,oCAAC,SACC,WAAW,KACT,QAAQ,mBACP,aAAa,uBAAuB,QAAQ,mBAG/C,oCAAC,SAAI,WAAW,QAAQ,mBACtB,oCAAC,SAAI,WAAW,QAAQ,qBACrB,sBACC,mBAAmB,KAAK,MAAM,UAAU;AACtC,SACE,oCAAC;GACC,OAAO,KAAK;GACZ,UAAU,CAAC,QAAQ;GACnB,WAAW,KAAK;GAChB,OAAO,KAAK;GACZ,KAAK,KAAK,MAAM;;MAK1B,oCAAC,SAAI,WAAW,QAAQ,sBACrB,2BACC,wBAAwB,KAAK,MAAM,UAAU;AAC3C,SACE,oCAAC;GACC,OAAO,KAAK;GACZ,UAAU,CAAC,QAAQ;GACnB,WAAW,KAAK;GAChB,OAAO,KAAK;GACZ,KAAK,KAAK,MAAM;;MAMzB,YAEH,oCAAC,aACE,cAAc,oCAAC,gBACf,cAAc,UAInB,oCAAC;EAAS,IAAI;EAAe,SAAQ;IACnC,oCAAC,SAAI,cAAc,oBAEjB,oCAAC,SAAI,WAAW,QAAQ,mBAAkB,oBAG7C,WAAW,oCAAC,kBAAe,OAAO,gBAEpC,aACC,oCAAC,sBACC,oCAAC,SAAI,OAAO;EAAE,SAAS;EAAQ,gBAAgB;MAC7C,oCAAC,SAAI,OAAO,EAAE,SAAS,YACpB,CAAC,kBAAkB,mBAClB,oCAAC;EACC,OAAM;EACN,WAAW;EACX,OAAO;KAGV,eAEF,iBAAiB,oCAAC,4BAKzB,oCAAC,SAAI,WAAW,QAAQ,0BACrB,oBACC,CAAC,QACD,iBAAiB,KAAK,MAAM,UAAU;AACpC,SACE,oCAAC;GACC,OAAO,KAAK;GACZ,UAAU;GACV,WAAW,KAAK;GAChB,OAAO,KAAK;GACZ,KAAK,KAAK,MAAM;GAChB,MAAM,KAAK;GACX,UAAU,KAAK;;;;AAS/B,oBAAoB,YAAY;CAI9B,aAAa,UAAU;CAIvB,OAAO,UAAU,OAAO;CAIxB,WAAW,UAAU;CAIrB,aAAa,UAAU;CAIvB,kBAAkB,UAAU,QAC1B,UAAU,MAAM;EACd,OAAO,UAAU;EACjB,WAAW,UAAU,UAAU,CAAC,UAAU,MAAM,UAAU;EAC1D,OAAO,UAAU;EACjB,KAAK,UAAU,UAAU,CAAC,UAAU,QAAQ,UAAU;;CAM1D,SAAS,UAAU;CAInB,QAAQ,UAAU;CAIlB,aAAa,UAAU,UAAU,CAAC,UAAU,MAAM,UAAU;CAI5D,eAAe,UAAU;CAIzB,kBAAkB,UAAU;CAI5B,iBAAiB,UAAU;CAI3B,cAAc,UAAU;CAIxB,OAAO,UAAU,UAAU,CAAC,UAAU,MAAM;CAI5C,SAAS,UAAU;CAInB,MAAM,UAAU;CAIhB,YAAY,UAAU;CAItB,UAAU,UAAU;CAIpB,gBAAgB,UAAU;CAI1B,gBAAgB,UAAU;CAI1B,kBAAkB,UAAU;CAI5B,iBAAiB,UAAU;CAI3B,QAAQ,UAAU;CAIlB,MAAM,UAAU;CAIhB,YAAY,UAAU;CAItB,oBAAoB,UAAU;CAI9B,iBAAiB,UAAU;CAI3B,WAAW,UAAU;CAIrB,SAAS,UAAU;CAInB,YAAY,UAAU;CAItB,YAAY,UAAU;CAItB,YAAY,UAAU;CAItB,WAAW,UAAU;CAIrB,eAAe,UAAU;CAIzB,UAAU,UAAU;CAIpB,QAAQ,UAAU;;AAGpB,oBAAoB,eAAe,EACjC,SAAS;;;;AC5/BX,MAAMC,eAAoB;;;;;;;;AAS1B,MAAM,cAAc,cAClB;AAEF,MAAM,EAAE,aAAa;;;;;;;;;;AAWrB,MAAM,WAAW,OAAY,WAA0C;CAErE,MAAM,WAAW,OAAO,KAAK,OAAO,GAAG,OAAO,KAAK,QAAQ;CAC3D,MAAM,OAAO,OAAO,KAAK,OAAO,OAAO,KAAK,QAAQ,OAAO;AAE3D,SAAQ,UAAR;EACE,KAAK;GACH,MAAM,WAAW;IAAE,GAAG;KAAQ,OAAO,OAAO;;AAC5C,UAAO;EACT,QACE,OAAM,IAAI,MAAM;;;;;;;;AAStB,MAAM,uBAAuB,EAAE,eAAoB;CACjD,MAAM,CAAC,OAAO,YAAY,WAAW,SAAS;AAE9C,QAAO,oCAAC,YAAS,OAAO;EAAE;EAAO;MAAa;;;;;AC7ChD,MAAa,4BAA4B;CACvC,MAAM,UAAU;CAChB,MAAM,WAAW;CAEjB,MAAM,oBAAoB,aAAa;EACrC,MAAM,eAAe,SAAS,SAAS;EAGvC,MAAM,aAAa,OAAO,QAAQ,UAAU,MACzC,CAAC,KAAK,WAAW,aAAa,SAAS;AAE1C,MAAI,CAAC,cAAc,CAAC,CAAC,UAAU,MAAO;AAEtC,UAAQ,QAAQ;GACd,UAAU,SAAS;GACnB,QAAQ,SAAS;GACjB,MAAM,SAAS;GACf,OAAO;IACL,GAAG;IACH,GAAG;;;;AAKT,QAAO;;;;;ACXT,MAAM,YAAY,YAAY,WAAW;CACvC,MAAM;EACJ,YAAY,UAAW,MAAM,iBAAiB,IAAI,MAAM,QAAQ;EAChE,cAAc,UAAW,MAAM,iBAAiB,IAAI,MAAM,QAAQ;EAClE,aAAa,UAAW,MAAM,iBAAiB,IAAI,MAAM,QAAQ;EACjE,SAAS,UAAU,MAAM,UAAU;EACnC,WAAW,UAAU,MAAM,UAAU;;CAEvC,YAAY;EACV,WAAW;EACX,aAAa;EACb,YAAY;EACZ,SAAS,UAAU,MAAM,UAAU;EACnC,WAAW,UAAU,MAAM,UAAU;;CAEvC,OAAO;EACL,MAAM;EACN,cAAc,MAAM,QAAQ;;CAE9B,MAAM,EACJ,WAAW,MAAM,QAAQ;CAE3B,gBAAgB;EACd,MAAM;EACN,SAAS;EACT,eAAe;EACf,YAAY;EACZ,gBAAgB;EAChB,SAAS,UACP,MAAM,gBAAgB,MAAM,gBAAgB;;;AAIlD,MAAa,iBAAiB,UAAU;CACtC,MAAM,EACJ,MACA,cACA,cACA,UACA,cAAc,OACd,gBAAgB,MAChB,UACA,WAAW,OACX,eACA,aAAa,UACX;CACJ,MAAM,UAAU,UAAU;CAC1B,MAAM,CAAC,MAAM,WAAW,SAAS;CACjC,MAAM,CAAC,eAAe,oBAAoB,SAAS;CACnD,MAAM,SAAS,UAAU,OAAO;CAChC,MAAM,aAAa,UAAU,UAAU,QAAQ,UAAU;CACzD,MAAM,UAAU,eAAe,MAAM,OAAO,eAAe,QAAQ;CACnE,MAAM,EAAE,MAAM;CACd,MAAM,mBAAmB;CAEzB,MAAM,CAAC,EAAE,MAAM,UAAU,SAAS,qBAAqB,YACrD,cAAc,gBACd,QAAQ,UACR,IACA,CAAC,CAAC,CAAC,QACH;CAGF,MAAM,CACJ,EAAE,MAAM,UAAU,SAAS,iBAAiB,OAAO,iBACnD,mBACE,YACF,cAAc,gBACd,0BAA0B,MAAM,gBAAgB,aAAa,cAAc,OAAO,oBAClF,IACA,CAAC,YACD;CAGF,MAAM,gBAAgB,aAAa,OAAO;AACxC,oBAAkB,iBAChB,aAAa,QAAQ,YAAY,QAAQ,OAAO;IAEjD;CAEH,MAAM,2BAA2B,aAC9B,iBAAiB,IAAI,mBAAiB;EACrC,MAAM,YAAY,kBAAkB;AACpC,MAAI,CAAC,UAAU,OACb;EAGF,MAAM,WAAW;EACjB,MAAM,oBAAoBC,gBAAc,qBAAqB;EAC7D,MAAM,UAAUA,gBAAc,WAAW;EACzC,MAAM,SAAS,UAAU,MAAM,KAAK,KAAK,QAAQ,IAAI;EACrD,MAAM,4BAA4B;AAElC,SAAO,SAAS,cAAc;GAC5B,MAAM,gBAAgB,kBAAkB;AACxC,OAAI,CAAC,eAAe,MAClB,2BAA0B,KAAK;YAG7B,cAAc,SAAS,aACtB,QAAQ,cAAc,WAAW,UAChC,QAAQ,cAAc,WAAW,MAEnC,2BAA0B,KAAK;;AAKrC,4BAA0B,SAAS,SAAS;AAC1C,YAAS,KAAK;IACZ,IAAIC;IACJ,SAAS,GAAG,KAAK,GAAG,EAAE;;;AAG1B,SAAO;IAET,CAAC;CAGH,MAAM,QAAQ,cAEV,MAAM,WACN,OAAO,KAAK,KAAK,MAAM,KAAK,UAAU,KAAK,QAAQ;EAEjD,MAAM,YAAY,KAAK,MAAM,KAAK,SAAS;EAC3C,MAAM,SAAS,YAAY,KAAK,MAAM,aAAa;AACnD,MAAI,QAAQ,OACV,QAAO,SAAS,MAAM;AAGpB,OAAI,OACF,GAAE,SAAS;IACT,YAAY,QAAQ;IACpB,eAAe,QAAQ;IACvB,SAAS,QAAQ;IACjB,eAAe,QAAQ;IACvB,UAAU,QAAQ;IAClB,mBAAmB,QAAQ;IAC3B,GAAG,EAAE;;AAGT,OAAI,aACF,GAAE,SAAS;IAAE,GAAG,EAAE;IAAQ,GAAG;;;AAInC,SACE,oCAAC;GACC,SAAS;GACT,KAAK,SAAS,GAAG,IAAI,GAAG,QAAQ,eAAe;KAE/C,oCAACC;GACO;GACN,YAAY,KAAK,MAAM,KAAK,gBAAgB;GAC5C,cAAc;GACC;;KAKzB;EAAC;EAAM;EAAM;EAAc;EAAe;EAAQ;;AAGpD,iBAAgB;AACd,MAAI,QACF;OAAI,SACF,SAAQ;aAED,SACT,SAAQ;MAER,SAAQ;AAEV,mBAAiB;IAChB;EAAC;EAAQ;EAAU;EAAU;;AAEhC,iBAAgB;AACd,MAAI,MAAM,SAAS;GACjB,IAAI,WAAW;AACf,UAAO,KAAK,KAAK,MAAM,KAAK,UAAU,SAAS,QAAQ;IAErD,MAAM,YAAY,KAAK,MAAM,KAAK,SAAS;IAC3C,MAAM,SAAS,YAAY,KAAK,MAAM,aAAa;AACnD,QAAI,QAAQ,OACV,QAAO,SAAS,MAAM;AAGpB,SAAI,OACF,GAAE,SAAS;MACT,YAAY,QAAQ;MACpB,eAAe,QAAQ;MACvB,SAAS,QAAQ;MACjB,eAAe,QAAQ;MACvB,UAAU,QAAQ;MAClB,mBAAmB,QAAQ;MAC3B,GAAG,EAAE;;AAGT,SAAI,aACF,GAAE,SAAS;MAAE,GAAG,EAAE;MAAQ,GAAG;;AAG/B,SAAI,YAAY,MAAM,WAAW,cAAc,OAC7C,YAAW,yBACT,EAAE,oBACF,EAAE;;;AAMZ,oBAAiB;;IAElB;EAAC;EAAM;EAAc;EAAQ;EAAQ;EAAU;;AAIlD,iBAAgB;AACd,MAAI,KACF,kBAAiB,EAAE,OAAO,EAAE,MAAM;IAEnC;EAAC;EAAkB;EAAG;;AAEzB,KAAI,gBAAgB,CAAC,SACnB,QAAO,oCAAC,YAAS,IAAI;AAGvB,KAAI,mBAAmB,YACrB,QACE,oCAAC,SAAI,WAAW,QAAQ,kBACtB,oCAAC,oBAAiB,MAAM,iBAAiB;AAK/C,QACE,0DACG,MAAM,gBACL,oCAAC,QAAK,SAAS,cACb,oCAAC;EAAoB,OAAO,KAAK;EAAM;EAAQ;MAGnD,oCAAC,SACC,WAAW,MAAM,eAAe,IAAI,QAAQ,aAAa,QAAQ,QAEhE,eAAe,SAAS,KACvB,cAAc,KAAK,YACjB,oCAAC;EACC,KAAK,QAAQ;EACb,eAAe,cAAc,QAAQ;EACrC,UAAS;IAER,QAAQ,WAAW,MAG1B,oCAAC,2BAAqB"}
|
|
1
|
+
{"version":3,"file":"PageContainer-k8KCfGsM.js","names":["result: [string, string, TeleporterInstance][]","useStyles","layout: Omit<Layout, 'i' | 'x' | 'y'>","uuid","ResponsiveGridLayout","useStyles","useStyles","useStyles","useStyles","useStyles","useStyles","FUISquareIconButton","FUICardHeader","useStyles","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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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { LogicalSearchOperatorEnums, SearchGroupingType, useUser } from "./EnvironmentRibbon-
|
|
1
|
+
import { LogicalSearchOperatorEnums, SearchGroupingType, useUser } from "./EnvironmentRibbon-DaDmKAPO.js";
|
|
2
2
|
import { useCallback, useMemo } from "react";
|
|
3
3
|
import { DateTime, IANAZone } from "luxon";
|
|
4
4
|
|
|
@@ -183,4 +183,4 @@ const useConvertFilterModelToSearchFilters = (timeZone = null) => {
|
|
|
183
183
|
|
|
184
184
|
//#endregion
|
|
185
185
|
export { SqlFilterOperators, getApiMethodIdByPath, getSearchIdentifiers, getSearchObject, useConvertFilterModelToSearchFilters };
|
|
186
|
-
//# sourceMappingURL=SearchUtilities-
|
|
186
|
+
//# sourceMappingURL=SearchUtilities-Bor3HbfB.js.map
|