udp-react-enterprise-component-library 25.18.1-beta.64 → 25.18.1-beta.66
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/AgTable-B2xTzAm2.js.map +1 -1
- package/dist/AmChart-CTixft8X.js.map +1 -1
- package/dist/{AmbientToggleButtonGroup-Bi9yW5gC.js → AmbientToggleButtonGroup-DgFod3VK.js} +1 -1
- package/dist/{AmbientToggleButtonGroup-Bi9yW5gC.js.map → AmbientToggleButtonGroup-DgFod3VK.js.map} +1 -1
- package/dist/{AmbientVisualizationCard-BmTQR121.js → AmbientVisualizationCard-CAxx4QWe.js} +2 -2
- package/dist/{AmbientVisualizationCard-BmTQR121.js.map → AmbientVisualizationCard-CAxx4QWe.js.map} +1 -1
- package/dist/AuthProvider-J79EBNDc.js.map +1 -1
- package/dist/DashboardWidget-CsOrr74H.js.map +1 -1
- package/dist/Field-Cda5rJe2.js.map +1 -1
- package/dist/Form-DbOA5j38.js.map +1 -1
- package/dist/FormButtons-BTCO-pzW.js.map +1 -1
- package/dist/LayoutUnit-D4jJvonh.js.map +1 -1
- package/dist/MenuProvider-BqEZve2y.js.map +1 -1
- package/dist/{Notes-YAF2dipI.js → Notes-BPaEmexk.js} +2 -2
- package/dist/{Notes-YAF2dipI.js.map → Notes-BPaEmexk.js.map} +1 -1
- package/dist/NumberOperator-p4HsHHx3.js.map +1 -1
- package/dist/PAHAdditionalRightComponent-DMOU9Mho.js.map +1 -1
- package/dist/PDFViewer-B4nJKbIy.js.map +1 -1
- package/dist/PageContext-BpOBJHpb.js.map +1 -1
- package/dist/{PaymentForm-DFJrSIy8.js → PaymentForm-Dum5p1mf.js} +2 -2
- package/dist/PaymentForm-Dum5p1mf.js.map +1 -0
- package/dist/PrimaryActionHeader-DBJpROPu.js.map +1 -1
- package/dist/SearchOperator-D9838PIe.js.map +1 -1
- package/dist/SearchUtilities-DUW0kaw_.js.map +1 -1
- package/dist/TenantProvider-BeFMHYP8.js.map +1 -1
- package/dist/{TrimForAvatar-BmM2bU6E.js → TrimForAvatar-BP1gZWd5.js} +1 -1
- package/dist/{TrimForAvatar-BmM2bU6E.js.map → TrimForAvatar-BP1gZWd5.js.map} +1 -1
- package/dist/UI/dataDisplay/notes/index.js +1 -1
- package/dist/UI/inputs/buttons/UdpActionCard/index.js +1 -1
- package/dist/UI/inputs/buttons/index.js +3 -3
- package/dist/UI/surfaces/cards/chartDisplayCards/index.js +1 -1
- package/dist/{UdpActionCard-D-YAYE-C.js → UdpActionCard-VtAacuCM.js} +1 -1
- package/dist/{UdpActionCard-D-YAYE-C.js.map → UdpActionCard-VtAacuCM.js.map} +1 -1
- package/dist/UdpAppProvider-DXgzyeHZ.js.map +1 -1
- package/dist/UdpBarChart-D2bfgm7n.js.map +1 -1
- package/dist/UdpMapToolbar-B410Zi_h.js.map +1 -1
- package/dist/{UdpTransactionTypesPage-CWA-n7y0.js → UdpTransactionTypesPage-DgFxT4pz.js} +138 -32
- package/dist/UdpTransactionTypesPage-DgFxT4pz.js.map +1 -0
- package/dist/{UdpTransactionsPage-CDyNjmyo.js → UdpTransactionsPage-KgkwaNGG.js} +28 -28
- package/dist/UdpTransactionsPage-KgkwaNGG.js.map +1 -0
- package/dist/UnityIconLibrary-CjIwzfjv.js.map +1 -1
- package/dist/actionSummary-D0CwyTXJ.js.map +1 -1
- package/dist/advancedSearchBuilder-7ixhIwLW.js.map +1 -1
- package/dist/aggridHelpers-BvrSzjdD.js.map +1 -1
- package/dist/apiHelpers-WIR8pqy0.js.map +1 -1
- package/dist/auth-BWJ4-JF-.js.map +1 -1
- package/dist/{buttons-CuLiERQe.js → buttons-DyKpA2qY.js} +1 -1
- package/dist/{buttons-CuLiERQe.js.map → buttons-DyKpA2qY.js.map} +1 -1
- package/dist/catalogStore-DP2GxpTJ.js.map +1 -1
- package/dist/charts-pX01x8rO.js.map +1 -1
- package/dist/form-Dj1zVw6K.js.map +1 -1
- package/dist/hooks-BNndjGer.js.map +1 -1
- package/dist/index.js +7 -7
- package/dist/lookupsStore-DPI8oD9R.js.map +1 -1
- package/dist/maps-BgmvNpkU.js.map +1 -1
- package/dist/newGrid-zmtQXU5G.js.map +1 -1
- package/dist/profile-7BieC5qc.js.map +1 -1
- package/dist/shellStore-C8zfPsZ-.js.map +1 -1
- package/dist/stepper-BaIo_Rol.js.map +1 -1
- package/dist/{stringUtils-B2JFmevx.js → stringUtils-CLVoXAz_.js} +1 -1
- package/dist/{stringUtils-B2JFmevx.js.map → stringUtils-CLVoXAz_.js.map} +1 -1
- package/dist/teleporterStore-CjUFtATo.js.map +1 -1
- package/dist/tenantStore-CFYu7ndZ.js.map +1 -1
- package/dist/types/src/udp/pages/UdpTransactionTypesPage/UdpTransactionTypesPage.d.ts.map +1 -1
- package/dist/types/src/udp/pages/UdpTransactionTypesPage/forms/UdpTransactionTypeForm.d.ts.map +1 -1
- package/dist/types/src/udp/pages/UdpTransactionTypesPage/sidesheets/UdpTransactionTypeSidesheet.d.ts.map +1 -1
- package/dist/types/src/udp/pages/UdpTransactionsPage/UdpTransactionGrid.d.ts.map +1 -1
- package/dist/types/src/udp/pages/UdpTransactionsPage/sidesheets/AttachmentTransaction.d.ts.map +1 -1
- package/dist/types/src/utilities/transactions/useTransactionEngine.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/dist/udp/pages/UdpPages/index.js +2 -2
- package/dist/udp/pages/UdpTransactionTypesPage/index.js +1 -1
- package/dist/udp/pages/UdpTransactionsPage/index.js +1 -1
- package/dist/useAuthedUser-Bhr7Yhlg.js.map +1 -1
- package/dist/useQueryExecutors-DuuHrj2M.js.map +1 -1
- package/dist/useUser-wpHGo6jU.js.map +1 -1
- package/dist/utilities/form/paymentForm/index.js +1 -1
- package/dist/utilities/index.js +2 -2
- package/dist/workflowStore-CCoN5uHd.js.map +1 -1
- package/export-map.json +1 -1
- package/package.json +1 -1
- package/dist/PaymentForm-DFJrSIy8.js.map +0 -1
- package/dist/UdpTransactionTypesPage-CWA-n7y0.js.map +0 -1
- package/dist/UdpTransactionsPage-CDyNjmyo.js.map +0 -1
- /package/dist/{iconLibrary-Bw7pnkIf.js → iconLibrary-CMA3TPMW.js} +0 -0
- /package/dist/{utilities-C1bpHZ4f.js → utilities-WN7twALD.js} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PrimaryActionHeader-DBJpROPu.js","names":["useStyles","result: [string, string, TeleporterInstance][]","value"],"sources":["../src/UI/utilityDisplay/utilityHeader/ui/PAHExport.jsx","../src/UI/utilityDisplay/utilityHeader/ui/teleporter.ts","../src/UI/utilityDisplay/utilityHeader/PrimaryActionHeader.jsx"],"sourcesContent":["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 { 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/esm/ArrowBack';\nimport { PAHExport } from './ui/PAHExport';\nimport { StatusChip } from '../../dataDisplay/status/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, PropTypes.oneOf([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"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"PrimaryActionHeader-DBJpROPu.js","names":["useStyles","value"],"sources":["../src/UI/utilityDisplay/utilityHeader/ui/PAHExport.jsx","../src/UI/utilityDisplay/utilityHeader/ui/teleporter.ts","../src/UI/utilityDisplay/utilityHeader/PrimaryActionHeader.jsx"],"sourcesContent":["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 { 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/esm/ArrowBack';\nimport { PAHExport } from './ui/PAHExport';\nimport { StatusChip } from '../../dataDisplay/status/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, PropTypes.oneOf([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"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SearchOperator-D9838PIe.js","names":[
|
|
1
|
+
{"version":3,"file":"SearchOperator-D9838PIe.js","names":[],"sources":["../src/models/SearchOperator.ts"],"sourcesContent":["export interface SearchOperator {\n value: string;\n label: string;\n}\n\nexport const SearchOperators: Array<SearchOperator> = [\n {\n value: '=',\n label: 'Equals'\n },\n {\n value: 'IN',\n label: 'Contains'\n },\n {\n value: '<>',\n label: 'Does not Equal'\n },\n {\n value: '>',\n label: 'Greater Than'\n },\n {\n value: '<',\n label: 'Less Than'\n },\n {\n value: '>=',\n label: 'Greater Than or Equal To'\n },\n {\n value: '<=',\n label: 'Less Than or Equal To'\n },\n {\n value: 'LIKE',\n label: 'Like'\n },\n {\n value: 'STARTSWITH',\n label: 'Starts With'\n },\n {\n value: 'BETWEEN',\n label: 'Between'\n }\n];\n\nexport const FilterOperators = {\n equals: '=',\n contains: 'LIKE',\n notEqual: '<>',\n greaterThan: '>',\n lessThan: '<',\n greaterThanOrEqual: '>=',\n lessThanOrEqual: '<=',\n between: 'BETWEEN',\n In: \"IN\",\n startsWith: \"STARTSWITH\"\n\n};\n"],"mappings":";AAKA,MAAa,kBAAyC;CACpD;EACE,OAAO;EACP,OAAO;EACR;CACD;EACE,OAAO;EACP,OAAO;EACR;CACD;EACE,OAAO;EACP,OAAO;EACR;CACD;EACE,OAAO;EACP,OAAO;EACR;CACD;EACE,OAAO;EACP,OAAO;EACR;CACD;EACE,OAAO;EACP,OAAO;EACR;CACD;EACE,OAAO;EACP,OAAO;EACR;CACD;EACE,OAAO;EACP,OAAO;EACR;CACD;EACE,OAAO;EACP,OAAO;EACR;CACD;EACE,OAAO;EACP,OAAO;EACR;CACF;AAED,MAAa,kBAAkB;CAC7B,QAAQ;CACR,UAAU;CACV,UAAU;CACV,aAAa;CACb,UAAU;CACV,oBAAoB;CACpB,iBAAiB;CACjB,SAAS;CACT,IAAI;CACJ,YAAY;CAEb"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SearchUtilities-DUW0kaw_.js","names":["getSearchObject: (\n searchFilterElements: SearchFilters[],\n page: number,\n pageSize: number,\n eagerLoad?: boolean,\n logicalSearchOperator?: LogicalSearchOperatorEnums,\n searchFilterGroups?: SearchFilterGroups[]\n) => Search","searchObject: Search","getApiMethodIdByPath: (\n apiMethodList: Array<{ path: string; apiMethodId?: string | number }>,\n path: string\n) => string | number | null","getSearchIdentifiers: (\n catalogObjects: any[],\n catalogReturnObject: string\n) => string[]","useConvertFilterModelToSearchFilters: () => (\n filterModel: any\n) => SearchFilters[]","searchFilters: SearchFilters[]","filterObjects: BasicSearchFilter[]"],"sources":["../src/enums/aggridEnums.ts","../src/utilities/search/SearchUtilities.ts"],"sourcesContent":["export enum AgGridFilterOperators {\n CONTAINS = 'contains',\n NOT_CONTAINS = 'notcontains',\n EQUALS = 'equals',\n NOT_EQUALS = 'notequals',\n STARTSWITH = 'startswith',\n ENDSWITH = 'endswith',\n LESS_THAN = 'lessthan',\n LESS_THAN_OR_EQUAL = 'lessthanorequal',\n GREATER_THAN = 'greaterthan',\n GREATER_THAN_OR_EQUAL = 'greaterthanorequal',\n IN_RANGE = 'inrange',\n SET = 'set'\n }\n \n export enum SqlFilterOperators {\n LIKE = 'LIKE',\n EQUALS = '=',\n NOT_EQUALS = '<>',\n LESS_THAN = '<',\n LESS_THAN_OR_EQUAL = '<=',\n GREATER_THAN = '>',\n GREATER_THAN_OR_EQUAL = '>=',\n BETWEEN = 'BETWEEN',\n IN = 'IN',\n STARTSWITH = 'STARTSWITH',\n ENDSWITH = 'ENDSWITH'\n }\n \n export enum AgGridFilterTypes {\n TEXT = 'text',\n NUMBER = 'number',\n DATE = 'date',\n SET = 'set'\n }\n \n export enum SearchValueType {\n Type_String = 1,\n Type_Int = 2,\n Type_Long = 3,\n Type_Double = 4,\n Type_Boolean = 5,\n Type_DateTime = 6,\n Type_Guid = 7\n }\n \n export enum GroupingType {\n DISTINCT = 'DISTINCT',\n AGGREGATE = 'AGGREGATE'\n }","import { useCallback, useMemo } from 'react';\nimport {\n SearchGroupingType,\n LogicalSearchOperatorEnums\n} from '../../enums/unitySystemEnums';\nimport { DateTime, IANAZone } from 'luxon';\nimport {\n FilterObject,\n Search,\n SearchFilters,\n SearchFilterGroups,\n BasicSearchFilter\n} from './Search';\nimport {\n AgGridFilterOperators,\n AgGridFilterTypes,\n SearchValueType,\n SqlFilterOperators\n} from '../../enums/aggridEnums';\nimport { useUser } from '../auth/useUser';\nimport { FilterElementParamType } from '../../enums/searchEnums';\n\nexport const getSearchObject: (\n searchFilterElements: SearchFilters[],\n page: number,\n pageSize: number,\n eagerLoad?: boolean,\n logicalSearchOperator?: LogicalSearchOperatorEnums,\n searchFilterGroups?: SearchFilterGroups[]\n) => Search = (\n searchFilterElements,\n page,\n pageSize,\n eagerLoad = false,\n logicalSearchOperator = LogicalSearchOperatorEnums.And,\n searchFilterGroups = []\n) => {\n const searchObject: Search = {\n pageNumber: page || 1,\n pageSize: pageSize || 20,\n filterElements: [],\n filterGroups: [],\n orderElements: [],\n groupingType: '',\n groupProperty: [],\n groupOperationList: [],\n eagerLoad: eagerLoad,\n logicalSearchOperator: logicalSearchOperator\n };\n\n if (searchFilterElements) {\n searchFilterElements.forEach((property) => {\n const formattedPropertyName = property.searchField;\n // adds order elements\n if ('sortDirection' in property && property.sortDirection) {\n const orderElement = {\n sortColumn: formattedPropertyName,\n sortDirection: property.sortDirection as string\n };\n searchObject.orderElements.push(orderElement);\n } else {\n // An object from searchFilterElements should be added filterElements only if it is not an orderElement (i.e. it has no sortDirection)\n searchObject.filterElements.push(property);\n }\n if ('distinct' in property && property.distinct) {\n searchObject.groupingType = SearchGroupingType.Distinct;\n searchObject.groupProperty?.push(formattedPropertyName);\n }\n });\n }\n\n searchObject.filterGroups = searchFilterGroups;\n\n return searchObject;\n};\nexport const getApiMethodIdByPath: (\n apiMethodList: Array<{ path: string; apiMethodId?: string | number }>,\n path: string\n) => string | number | null = (apiMethodList, path) => {\n const foundApiMethod = apiMethodList.find((method) =>\n path.includes(method.path)\n );\n return foundApiMethod?.apiMethodId ?? null;\n};\n\nexport const getSearchIdentifiers: (\n catalogObjects: any[],\n catalogReturnObject: string\n) => string[] = (catalogObjects, catalogReturnObject) => {\n if (!catalogObjects) return [];\n const matchingCatalogObject = catalogObjects.find(\n (co) => co.catalogObjectName === catalogReturnObject\n );\n const properties = matchingCatalogObject?.properties?.filter(\n (property) => property?.extendedProperties?.identifier\n );\n return properties?.map((property) => property.name) ?? [];\n};\n\n/**\n * Returns a reference to a function that takes an Ag-grid FilterModel object and\n * processes it to create an array of SearchFilters.\n * @param timeZone string or null;\n * @returns Function for processing Ag-grid FilterModel\n */\nexport const useConvertFilterModelToSearchFilters: () => (\n filterModel: any\n) => SearchFilters[] = (timeZone: string | null = null) => {\n const user = useUser();\n\n const zone = useMemo(() => {\n let tz =\n timeZone ?? user?.additionalProperties?.activeUtilityTimeZone ?? 'local';\n const validTimeZone =\n tz !== 'local' &&\n (tz === user?.additionalProperties?.activeUtilityTimeZone ||\n IANAZone.isValidZone(tz))\n ? tz\n : 'local'; // IANAZone.isValidZone is very slow, skip it if known valid timeZone passed\n return validTimeZone;\n }, [timeZone, user]);\n\n const convertFilterModelToSearchFilters = useCallback(\n (filterModel: any = null) => {\n if (!filterModel) {\n return [];\n }\n let searchFilters: SearchFilters[] = [];\n searchFilters = Object.entries(filterModel).map(\n (item: FilterObject | any) => {\n let field = item[0];\n let operator;\n let type;\n let value;\n // Set the filter value; dependent on filter type (e.g. Date, Set, etc.)\n if (item[1]?.filterType === AgGridFilterTypes.DATE) {\n // Applies the applicable timezone to the date filter value for usage when\n // constructing the database query.\n let dateFilterValueWithoutTime = item[1]?.dateFrom?.substring(\n 0,\n 10\n ); // e.g. 2022-02-05\n let dateSplit = dateFilterValueWithoutTime.split('-');\n let date = new Date(dateSplit[0], dateSplit[1] - 1, dateSplit[2]);\n const filterDateTimeMidnight = DateTime.fromJSDate(date).setZone(\n zone,\n { keepLocalTime: true }\n );\n let dateString = filterDateTimeMidnight.toJSDate().toISOString();\n value = dateString;\n } else if (item[1]?.filterType === AgGridFilterTypes.SET) {\n value = item[1].values.join(',');\n operator = SqlFilterOperators.IN;\n } else {\n value = item[1]?.filter;\n }\n\n switch (item[1]?.type?.toLowerCase()) {\n case AgGridFilterOperators.CONTAINS:\n operator = SqlFilterOperators.LIKE;\n break;\n case AgGridFilterOperators.EQUALS:\n operator = SqlFilterOperators.EQUALS;\n if (item[1]?.filterType === AgGridFilterTypes.DATE) {\n type = SearchValueType.Type_DateTime;\n }\n break;\n case AgGridFilterOperators.NOT_EQUALS:\n operator = SqlFilterOperators.NOT_EQUALS;\n break;\n case AgGridFilterOperators.GREATER_THAN:\n operator = SqlFilterOperators.GREATER_THAN;\n break;\n case AgGridFilterOperators.GREATER_THAN_OR_EQUAL:\n operator = SqlFilterOperators.GREATER_THAN_OR_EQUAL;\n break;\n case AgGridFilterOperators.LESS_THAN:\n operator = SqlFilterOperators.LESS_THAN;\n break;\n case AgGridFilterOperators.LESS_THAN_OR_EQUAL:\n operator = SqlFilterOperators.LESS_THAN_OR_EQUAL;\n break;\n case AgGridFilterOperators.STARTSWITH:\n operator = SqlFilterOperators.STARTSWITH;\n break;\n case AgGridFilterOperators.IN_RANGE:\n operator = SqlFilterOperators.BETWEEN;\n if (item[1]?.filterType === AgGridFilterTypes.NUMBER) {\n value += ',' + item[1]?.filterTo;\n } else if (item[1]?.filterType === AgGridFilterTypes.DATE) {\n let dateFilterValueWithoutTime = item[1]?.dateTo?.substring(\n 0,\n 10\n ); // e.g. 2022-02-05\n let dateSplit = dateFilterValueWithoutTime.split('-');\n let date = new Date(\n dateSplit[0],\n dateSplit[1] - 1,\n dateSplit[2]\n );\n const filterDateTimeMidnight = DateTime.fromJSDate(\n date\n ).setZone(zone, { keepLocalTime: true });\n let dateString = filterDateTimeMidnight\n .toJSDate()\n .toISOString();\n value += ',' + dateString;\n }\n break;\n case AgGridFilterOperators.ENDSWITH:\n operator = SqlFilterOperators.ENDSWITH;\n break;\n default:\n break;\n }\n return {\n searchField: field,\n searchValue: value,\n searchOperator: operator,\n searchValueType: type,\n groupId: null\n };\n }\n );\n return searchFilters;\n },\n [zone]\n );\n\n return convertFilterModelToSearchFilters;\n};\n\n// Parses the URL search params for UDP search filters\n// e.g. udp_search-FieldName-Operator=Value - udp_search-firstName-like=John\nexport const parseSearchParamsIntoFilterObjects = (): BasicSearchFilter[] => {\n /* eslint-disable @typescript-eslint/no-unsafe-assignment */\n const qs = new URLSearchParams(window.location.search);\n const filterObjects: BasicSearchFilter[] = [];\n qs.forEach((value, key) => {\n if (key.startsWith('udp_search')) {\n const keyParts = key.split('-');\n const searchField = keyParts[1] || undefined;\n const searchOperatorRaw = keyParts[2] || undefined;\n const searchOperator =\n SqlFilterOperators[searchOperatorRaw.toUpperCase()] || undefined;\n const searchValue = value || undefined;\n\n if (searchField && searchOperator && searchValue) {\n filterObjects.push({\n searchField,\n searchOperator,\n searchValue\n });\n }\n }\n });\n\n return filterObjects;\n};\n"],"mappings":";;;;;;AAAA,IAAY,0EAAL;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGF,IAAY,oEAAL;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGF,IAAY,kEAAL;AACL;AACA;AACA;AACA;;;AAGF,IAAY,8DAAL;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACrBJ,MAAaA,mBAQX,sBACA,MACA,UACA,YAAY,OACZ,wBAAwB,2BAA2B,KACnD,qBAAqB,EAAE,KACpB;CACH,MAAMC,eAAuB;EAC3B,YAAY,QAAQ;EACpB,UAAU,YAAY;EACtB,gBAAgB,EAAE;EAClB,cAAc,EAAE;EAChB,eAAe,EAAE;EACjB,cAAc;EACd,eAAe,EAAE;EACjB,oBAAoB,EAAE;EACX;EACY;EACxB;AAED,KAAI,qBACF,sBAAqB,SAAS,aAAa;EACzC,MAAM,wBAAwB,SAAS;AAEvC,MAAI,mBAAmB,YAAY,SAAS,eAAe;GACzD,MAAM,eAAe;IACnB,YAAY;IACZ,eAAe,SAAS;IACzB;AACD,gBAAa,cAAc,KAAK,aAAa;QAG7C,cAAa,eAAe,KAAK,SAAS;AAE5C,MAAI,cAAc,YAAY,SAAS,UAAU;AAC/C,gBAAa,eAAe,mBAAmB;AAC/C,gBAAa,eAAe,KAAK,sBAAsB;;GAEzD;AAGJ,cAAa,eAAe;AAE5B,QAAO;;AAET,MAAaC,wBAGkB,eAAe,SAAS;AAIrD,QAHuB,cAAc,MAAM,WACzC,KAAK,SAAS,OAAO,KAAK,CAC3B,EACsB,eAAe;;AAGxC,MAAaC,wBAGI,gBAAgB,wBAAwB;AACvD,KAAI,CAAC,eAAgB,QAAO,EAAE;AAO9B,SAN8B,eAAe,MAC1C,OAAO,GAAG,sBAAsB,oBAClC,EACyC,YAAY,QACnD,aAAa,UAAU,oBAAoB,WAC7C,GACkB,KAAK,aAAa,SAAS,KAAK,IAAI,EAAE;;;;;;;;AAS3D,MAAaC,wCAEW,WAA0B,SAAS;CACzD,MAAM,OAAO,SAAS;CAEtB,MAAM,OAAO,cAAc;EACzB,IAAI,KACF,YAAY,MAAM,sBAAsB,yBAAyB;AAOnE,SALE,OAAO,YACN,OAAO,MAAM,sBAAsB,yBAClC,SAAS,YAAY,GAAG,IACtB,KACA;IAEL,CAAC,UAAU,KAAK,CAAC;AA6GpB,QA3G0C,aACvC,cAAmB,SAAS;AAC3B,MAAI,CAAC,YACH,QAAO,EAAE;EAEX,IAAIC,gBAAiC,EAAE;AACvC,kBAAgB,OAAO,QAAQ,YAAY,CAAC,KACzC,SAA6B;GAC5B,IAAI,QAAQ,KAAK;GACjB,IAAI;GACJ,IAAI;GACJ,IAAI;AAEJ,OAAI,KAAK,IAAI,eAAe,kBAAkB,MAAM;IAOlD,IAAI,aAJ6B,KAAK,IAAI,UAAU,UAClD,GACA,GACD,EAC0C,MAAM,IAAI;IACrD,IAAI,OAAO,IAAI,KAAK,UAAU,IAAI,UAAU,KAAK,GAAG,UAAU,GAAG;AAMjE,YAL+B,SAAS,WAAW,KAAK,CAAC,QACvD,MACA,EAAE,eAAe,MAAM,CACxB,CACuC,UAAU,CAAC,aAAa;cAEvD,KAAK,IAAI,eAAe,kBAAkB,KAAK;AACxD,YAAQ,KAAK,GAAG,OAAO,KAAK,IAAI;AAChC,eAAW,mBAAmB;SAE9B,SAAQ,KAAK,IAAI;AAGnB,WAAQ,KAAK,IAAI,MAAM,aAAa,EAApC;IACE,KAAK,sBAAsB;AACzB,gBAAW,mBAAmB;AAC9B;IACF,KAAK,sBAAsB;AACzB,gBAAW,mBAAmB;AAC9B,SAAI,KAAK,IAAI,eAAe,kBAAkB,KAC5C,QAAO,gBAAgB;AAEzB;IACF,KAAK,sBAAsB;AACzB,gBAAW,mBAAmB;AAC9B;IACF,KAAK,sBAAsB;AACzB,gBAAW,mBAAmB;AAC9B;IACF,KAAK,sBAAsB;AACzB,gBAAW,mBAAmB;AAC9B;IACF,KAAK,sBAAsB;AACzB,gBAAW,mBAAmB;AAC9B;IACF,KAAK,sBAAsB;AACzB,gBAAW,mBAAmB;AAC9B;IACF,KAAK,sBAAsB;AACzB,gBAAW,mBAAmB;AAC9B;IACF,KAAK,sBAAsB;AACzB,gBAAW,mBAAmB;AAC9B,SAAI,KAAK,IAAI,eAAe,kBAAkB,OAC5C,UAAS,MAAM,KAAK,IAAI;cACf,KAAK,IAAI,eAAe,kBAAkB,MAAM;MAKzD,IAAI,aAJ6B,KAAK,IAAI,QAAQ,UAChD,GACA,GACD,EAC0C,MAAM,IAAI;MACrD,IAAI,OAAO,IAAI,KACb,UAAU,IACV,UAAU,KAAK,GACf,UAAU,GACX;MAID,IAAI,aAH2B,SAAS,WACtC,KACD,CAAC,QAAQ,MAAM,EAAE,eAAe,MAAM,CAAC,CAErC,UAAU,CACV,aAAa;AAChB,eAAS,MAAM;;AAEjB;IACF,KAAK,sBAAsB;AACzB,gBAAW,mBAAmB;AAC9B;IACF,QACE;;AAEJ,UAAO;IACL,aAAa;IACb,aAAa;IACb,gBAAgB;IAChB,iBAAiB;IACjB,SAAS;IACV;IAEJ;AACD,SAAO;IAET,CAAC,KAAK,CACP;;AAOH,MAAa,2CAAgE;CAE3E,MAAM,KAAK,IAAI,gBAAgB,OAAO,SAAS,OAAO;CACtD,MAAMC,gBAAqC,EAAE;AAC7C,IAAG,SAAS,OAAO,QAAQ;AACzB,MAAI,IAAI,WAAW,aAAa,EAAE;GAChC,MAAM,WAAW,IAAI,MAAM,IAAI;GAC/B,MAAM,cAAc,SAAS,MAAM;GAEnC,MAAM,iBACJ,oBAFwB,SAAS,MAAM,QAEF,aAAa,KAAK;GACzD,MAAM,cAAc,SAAS;AAE7B,OAAI,eAAe,kBAAkB,YACnC,eAAc,KAAK;IACjB;IACA;IACA;IACD,CAAC;;GAGN;AAEF,QAAO"}
|
|
1
|
+
{"version":3,"file":"SearchUtilities-DUW0kaw_.js","names":[],"sources":["../src/enums/aggridEnums.ts","../src/utilities/search/SearchUtilities.ts"],"sourcesContent":["export enum AgGridFilterOperators {\n CONTAINS = 'contains',\n NOT_CONTAINS = 'notcontains',\n EQUALS = 'equals',\n NOT_EQUALS = 'notequals',\n STARTSWITH = 'startswith',\n ENDSWITH = 'endswith',\n LESS_THAN = 'lessthan',\n LESS_THAN_OR_EQUAL = 'lessthanorequal',\n GREATER_THAN = 'greaterthan',\n GREATER_THAN_OR_EQUAL = 'greaterthanorequal',\n IN_RANGE = 'inrange',\n SET = 'set'\n }\n \n export enum SqlFilterOperators {\n LIKE = 'LIKE',\n EQUALS = '=',\n NOT_EQUALS = '<>',\n LESS_THAN = '<',\n LESS_THAN_OR_EQUAL = '<=',\n GREATER_THAN = '>',\n GREATER_THAN_OR_EQUAL = '>=',\n BETWEEN = 'BETWEEN',\n IN = 'IN',\n STARTSWITH = 'STARTSWITH',\n ENDSWITH = 'ENDSWITH'\n }\n \n export enum AgGridFilterTypes {\n TEXT = 'text',\n NUMBER = 'number',\n DATE = 'date',\n SET = 'set'\n }\n \n export enum SearchValueType {\n Type_String = 1,\n Type_Int = 2,\n Type_Long = 3,\n Type_Double = 4,\n Type_Boolean = 5,\n Type_DateTime = 6,\n Type_Guid = 7\n }\n \n export enum GroupingType {\n DISTINCT = 'DISTINCT',\n AGGREGATE = 'AGGREGATE'\n }","import { useCallback, useMemo } from 'react';\nimport {\n SearchGroupingType,\n LogicalSearchOperatorEnums\n} from '../../enums/unitySystemEnums';\nimport { DateTime, IANAZone } from 'luxon';\nimport {\n FilterObject,\n Search,\n SearchFilters,\n SearchFilterGroups,\n BasicSearchFilter\n} from './Search';\nimport {\n AgGridFilterOperators,\n AgGridFilterTypes,\n SearchValueType,\n SqlFilterOperators\n} from '../../enums/aggridEnums';\nimport { useUser } from '../auth/useUser';\nimport { FilterElementParamType } from '../../enums/searchEnums';\n\nexport const getSearchObject: (\n searchFilterElements: SearchFilters[],\n page: number,\n pageSize: number,\n eagerLoad?: boolean,\n logicalSearchOperator?: LogicalSearchOperatorEnums,\n searchFilterGroups?: SearchFilterGroups[]\n) => Search = (\n searchFilterElements,\n page,\n pageSize,\n eagerLoad = false,\n logicalSearchOperator = LogicalSearchOperatorEnums.And,\n searchFilterGroups = []\n) => {\n const searchObject: Search = {\n pageNumber: page || 1,\n pageSize: pageSize || 20,\n filterElements: [],\n filterGroups: [],\n orderElements: [],\n groupingType: '',\n groupProperty: [],\n groupOperationList: [],\n eagerLoad: eagerLoad,\n logicalSearchOperator: logicalSearchOperator\n };\n\n if (searchFilterElements) {\n searchFilterElements.forEach((property) => {\n const formattedPropertyName = property.searchField;\n // adds order elements\n if ('sortDirection' in property && property.sortDirection) {\n const orderElement = {\n sortColumn: formattedPropertyName,\n sortDirection: property.sortDirection as string\n };\n searchObject.orderElements.push(orderElement);\n } else {\n // An object from searchFilterElements should be added filterElements only if it is not an orderElement (i.e. it has no sortDirection)\n searchObject.filterElements.push(property);\n }\n if ('distinct' in property && property.distinct) {\n searchObject.groupingType = SearchGroupingType.Distinct;\n searchObject.groupProperty?.push(formattedPropertyName);\n }\n });\n }\n\n searchObject.filterGroups = searchFilterGroups;\n\n return searchObject;\n};\nexport const getApiMethodIdByPath: (\n apiMethodList: Array<{ path: string; apiMethodId?: string | number }>,\n path: string\n) => string | number | null = (apiMethodList, path) => {\n const foundApiMethod = apiMethodList.find((method) =>\n path.includes(method.path)\n );\n return foundApiMethod?.apiMethodId ?? null;\n};\n\nexport const getSearchIdentifiers: (\n catalogObjects: any[],\n catalogReturnObject: string\n) => string[] = (catalogObjects, catalogReturnObject) => {\n if (!catalogObjects) return [];\n const matchingCatalogObject = catalogObjects.find(\n (co) => co.catalogObjectName === catalogReturnObject\n );\n const properties = matchingCatalogObject?.properties?.filter(\n (property) => property?.extendedProperties?.identifier\n );\n return properties?.map((property) => property.name) ?? [];\n};\n\n/**\n * Returns a reference to a function that takes an Ag-grid FilterModel object and\n * processes it to create an array of SearchFilters.\n * @param timeZone string or null;\n * @returns Function for processing Ag-grid FilterModel\n */\nexport const useConvertFilterModelToSearchFilters: () => (\n filterModel: any\n) => SearchFilters[] = (timeZone: string | null = null) => {\n const user = useUser();\n\n const zone = useMemo(() => {\n let tz =\n timeZone ?? user?.additionalProperties?.activeUtilityTimeZone ?? 'local';\n const validTimeZone =\n tz !== 'local' &&\n (tz === user?.additionalProperties?.activeUtilityTimeZone ||\n IANAZone.isValidZone(tz))\n ? tz\n : 'local'; // IANAZone.isValidZone is very slow, skip it if known valid timeZone passed\n return validTimeZone;\n }, [timeZone, user]);\n\n const convertFilterModelToSearchFilters = useCallback(\n (filterModel: any = null) => {\n if (!filterModel) {\n return [];\n }\n let searchFilters: SearchFilters[] = [];\n searchFilters = Object.entries(filterModel).map(\n (item: FilterObject | any) => {\n let field = item[0];\n let operator;\n let type;\n let value;\n // Set the filter value; dependent on filter type (e.g. Date, Set, etc.)\n if (item[1]?.filterType === AgGridFilterTypes.DATE) {\n // Applies the applicable timezone to the date filter value for usage when\n // constructing the database query.\n let dateFilterValueWithoutTime = item[1]?.dateFrom?.substring(\n 0,\n 10\n ); // e.g. 2022-02-05\n let dateSplit = dateFilterValueWithoutTime.split('-');\n let date = new Date(dateSplit[0], dateSplit[1] - 1, dateSplit[2]);\n const filterDateTimeMidnight = DateTime.fromJSDate(date).setZone(\n zone,\n { keepLocalTime: true }\n );\n let dateString = filterDateTimeMidnight.toJSDate().toISOString();\n value = dateString;\n } else if (item[1]?.filterType === AgGridFilterTypes.SET) {\n value = item[1].values.join(',');\n operator = SqlFilterOperators.IN;\n } else {\n value = item[1]?.filter;\n }\n\n switch (item[1]?.type?.toLowerCase()) {\n case AgGridFilterOperators.CONTAINS:\n operator = SqlFilterOperators.LIKE;\n break;\n case AgGridFilterOperators.EQUALS:\n operator = SqlFilterOperators.EQUALS;\n if (item[1]?.filterType === AgGridFilterTypes.DATE) {\n type = SearchValueType.Type_DateTime;\n }\n break;\n case AgGridFilterOperators.NOT_EQUALS:\n operator = SqlFilterOperators.NOT_EQUALS;\n break;\n case AgGridFilterOperators.GREATER_THAN:\n operator = SqlFilterOperators.GREATER_THAN;\n break;\n case AgGridFilterOperators.GREATER_THAN_OR_EQUAL:\n operator = SqlFilterOperators.GREATER_THAN_OR_EQUAL;\n break;\n case AgGridFilterOperators.LESS_THAN:\n operator = SqlFilterOperators.LESS_THAN;\n break;\n case AgGridFilterOperators.LESS_THAN_OR_EQUAL:\n operator = SqlFilterOperators.LESS_THAN_OR_EQUAL;\n break;\n case AgGridFilterOperators.STARTSWITH:\n operator = SqlFilterOperators.STARTSWITH;\n break;\n case AgGridFilterOperators.IN_RANGE:\n operator = SqlFilterOperators.BETWEEN;\n if (item[1]?.filterType === AgGridFilterTypes.NUMBER) {\n value += ',' + item[1]?.filterTo;\n } else if (item[1]?.filterType === AgGridFilterTypes.DATE) {\n let dateFilterValueWithoutTime = item[1]?.dateTo?.substring(\n 0,\n 10\n ); // e.g. 2022-02-05\n let dateSplit = dateFilterValueWithoutTime.split('-');\n let date = new Date(\n dateSplit[0],\n dateSplit[1] - 1,\n dateSplit[2]\n );\n const filterDateTimeMidnight = DateTime.fromJSDate(\n date\n ).setZone(zone, { keepLocalTime: true });\n let dateString = filterDateTimeMidnight\n .toJSDate()\n .toISOString();\n value += ',' + dateString;\n }\n break;\n case AgGridFilterOperators.ENDSWITH:\n operator = SqlFilterOperators.ENDSWITH;\n break;\n default:\n break;\n }\n return {\n searchField: field,\n searchValue: value,\n searchOperator: operator,\n searchValueType: type,\n groupId: null\n };\n }\n );\n return searchFilters;\n },\n [zone]\n );\n\n return convertFilterModelToSearchFilters;\n};\n\n// Parses the URL search params for UDP search filters\n// e.g. udp_search-FieldName-Operator=Value - udp_search-firstName-like=John\nexport const parseSearchParamsIntoFilterObjects = (): BasicSearchFilter[] => {\n /* eslint-disable @typescript-eslint/no-unsafe-assignment */\n const qs = new URLSearchParams(window.location.search);\n const filterObjects: BasicSearchFilter[] = [];\n qs.forEach((value, key) => {\n if (key.startsWith('udp_search')) {\n const keyParts = key.split('-');\n const searchField = keyParts[1] || undefined;\n const searchOperatorRaw = keyParts[2] || undefined;\n const searchOperator =\n SqlFilterOperators[searchOperatorRaw.toUpperCase()] || undefined;\n const searchValue = value || undefined;\n\n if (searchField && searchOperator && searchValue) {\n filterObjects.push({\n searchField,\n searchOperator,\n searchValue\n });\n }\n }\n });\n\n return filterObjects;\n};\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TenantProvider-BeFMHYP8.js","names":["TenantAccessDialog: React.FC<TenantAccessDialogProps>"],"sources":["../src/utilities/auth/users.js","../src/utilities/tenant/TenantSelect.tsx","../src/utilities/tenant/TenantAccessDialog.tsx","../src/utilities/tenant/TenantProvider.jsx"],"sourcesContent":["import { useContext, useCallback } from 'react';\nimport { UserDispatchContext } from './internal';\n\nexport function useUserActions() {\n const dispatch = useContext(UserDispatchContext);\n const setUser = useCallback(\n (user) => {\n dispatch({ type: 'SET_USER', user });\n },\n [dispatch]\n );\n\n const changeTenant = useCallback(\n (tenantId) => {\n dispatch({ type: 'CHANGE_TENANT', tenantId });\n },\n [dispatch]\n );\n\n return { setUser, changeTenant };\n}\n\nexport function useLocalUserActions() {\n const dispatch = useContext(UserDispatchContext);\n const setUser = useCallback(\n (user) => {\n dispatch({ type: 'SET_USER', user });\n },\n [dispatch]\n );\n\n const setAccessToken = useCallback(\n (accessToken) => {\n dispatch({ type: 'SET_ACCESS_TOKEN', accessToken });\n },\n [dispatch]\n );\n\n return { setUser, setAccessToken };\n}\n","import React, { forwardRef, useMemo, useCallback } from 'react';\nimport { Autocomplete, AutocompleteChangeReason } from '@material-ui/lab';\nimport { TextField, TextFieldProps } from '@material-ui/core';\nimport { Tenant } from '../types';\n\ninterface TenantSelectProps {\n tenants?: Tenant[] | null;\n value: Tenant | null;\n onTenantChange?: (tenant: Tenant) => void;\n id?: string;\n label?: string;\n className?: string;\n disableClearable?: boolean;\n textFieldProps?: TextFieldProps;\n recordIdPrefix?: string;\n}\n\nconst sanitizeRecordId = (tenantName: string) =>\n tenantName.replace(/\\s+/g, '');\n\nexport const TenantSelect = forwardRef<HTMLDivElement, TenantSelectProps>(\n (props, ref) => {\n const {\n tenants,\n value,\n onTenantChange,\n id = 'tenant-select',\n label = 'Current Tenant',\n className,\n disableClearable = true,\n textFieldProps,\n recordIdPrefix = 'udpRecord-TenantSelect'\n } = props;\n\n const options = useMemo(() => tenants ?? [], [tenants]);\n\n const handleChange = useCallback(\n (\n event: React.ChangeEvent<object>,\n newValue: Tenant | null,\n reason: AutocompleteChangeReason\n ) => {\n if (reason !== 'select-option' || !newValue) {\n return;\n }\n onTenantChange?.(newValue);\n },\n [onTenantChange]\n );\n\n return (\n <Autocomplete\n ref={ref}\n className={className}\n id={id}\n value={value}\n options={options}\n disableClearable={disableClearable}\n getOptionSelected={(option, selected) =>\n option?.tenantId === selected?.tenantId\n }\n getOptionLabel={(option) => option?.tenantName ?? ''}\n onChange={handleChange}\n renderInput={(params) => (\n <TextField\n {...params}\n label={label}\n variant='standard'\n {...textFieldProps}\n />\n )}\n renderOption={(option) => (\n <li\n style={{ width: '100%', height: '100%' }}\n // @ts-expect-error udpRecordId is used for automation tagging\n udprecordid={`${recordIdPrefix}-${sanitizeRecordId(\n option?.tenantName ?? ''\n )}`}\n >\n {option?.tenantName ?? ''}\n </li>\n )}\n />\n );\n }\n);\n\nTenantSelect.displayName = 'TenantSelect';\n","import React from 'react';\nimport { FluentDialog } from '../../UI/feedback/FluentDialog';\nimport { TenantSelect } from './TenantSelect';\nimport { Tenant } from '../types';\n\ninterface TenantAccessDialogProps {\n open: boolean;\n tenants: Tenant[];\n currentTenant: Tenant | null;\n onTenantChange: (tenant: Tenant) => void;\n productName?: string | null;\n}\n\nexport const TenantAccessDialog: React.FC<TenantAccessDialogProps> = ({\n tenants,\n onTenantChange,\n productName\n}) => {\n const message = productName\n ? `Your current tenant does not have access to ${productName}. Please select another tenant to continue.`\n : 'Your current tenant does not have access to this application. Please select another tenant to continue.';\n\n return (\n <FluentDialog\n open={true}\n title='Tenant Access Required'\n message={message}\n buttonOneHidden={true}\n buttonTwoHidden={true}\n disableEscapeKeyDown\n disableBackdropClick\n >\n <TenantSelect\n tenants={tenants}\n value={null}\n onTenantChange={onTenantChange}\n label='Available Tenants'\n id='tenant-access-dialog-select'\n disableClearable={false}\n recordIdPrefix='udpRecord-TenantAccessDialog'\n />\n </FluentDialog>\n );\n};\n","import React, { useCallback, useMemo, useEffect } from 'react';\nimport { useUser } from '../auth/useUser';\nimport { useAxiosGet } from '../useAxiosGet';\nimport { TenantContext } from './tenantContext';\nimport { ConfigService } from '../../configService';\nimport { FluentDialog } from '../../UI/feedback/FluentDialog';\nimport { useAccount } from '@azure/msal-react';\nimport { MenuProvider } from '../menus/MenuProvider';\nimport { TenantAccessDialog } from './TenantAccessDialog';\nimport { storeTenant } from '../storage/UnitySessionStorage';\nimport { useUserActions } from '../auth/users';\nimport { TenantTypeEnums, UnityProducts } from '../../enums/unitySystemEnums';\nimport { useTenantStore } from '../../stores/tenantStore'; // <-- Imported for the sync hook\n\n/**\n * A hook to sync the derived active tenant with the Zustand store.\n * This is the \"necessary evil\" to keep the store updated.\n */\nconst useTenantStoreSync = (activeTenant) => {\n const {\n currentTenant: storeTenantValue,\n setCurrentTenant,\n } = useTenantStore((state) => ({\n currentTenant: state.currentTenant,\n setCurrentTenant: state.setCurrentTenant,\n }));\n\n // This effect syncs our correct activeTenant to the Zustand store.\n // This fixes the \"side-effect in render\" bug from the original code.\n useEffect(() => {\n if (\n activeTenant &&\n (storeTenantValue?.tenantId !== activeTenant.tenantId ||\n storeTenantValue?.name !== activeTenant.tenantName ||\n storeTenantValue?.tenantType !== activeTenant.tenantType ||\n storeTenantValue?.theme !== activeTenant.theme)\n ) {\n setCurrentTenant({\n tenantId: activeTenant.tenantId,\n name: activeTenant.tenantName,\n tenantType: activeTenant.tenantType,\n theme: activeTenant?.theme ?? null,\n });\n }\n }, [activeTenant, storeTenantValue, setCurrentTenant]);\n};\n\n/**\n * This hook fetches all data and derives the correct tenant state.\n * It is pure and has no knowledge of Zustand.\n */\nconst useTenantData = (id, user) => {\n // --- Data Fetching ---\n const [{ data: tenants }, refetchTenantsList] = useAxiosGet(\n ConfigService.securityV1ApiUrl,\n `users/${id ?? ''}/unitytenants`,\n {},\n !id\n );\n\n const [{ data: products }] = useAxiosGet(\n ConfigService.tenantV1ApiUrl,\n `products`,\n {},\n !id\n );\n\n // --- State Derivation ---\n const unityProductIdString = ConfigService.config.UNITY_PRODUCT_ID;\n const unityProductId = unityProductIdString\n ? Number(unityProductIdString)\n : null;\n const shouldFilterByProduct =\n typeof unityProductId === 'number' && !Number.isNaN(unityProductId) && unityProductId !== UnityProducts.Unity;\n\n const filteredTenantsList = useMemo(() => {\n if (!Array.isArray(tenants)) {\n return null;\n }\n if (!shouldFilterByProduct || unityProductId === null) {\n return tenants;\n }\n return tenants.filter((tenant) =>\n tenant?.products?.find(\n (product) => product?.productId === unityProductId\n )\n );\n }, [tenants, shouldFilterByProduct, unityProductId]);\n\n // This is the correctly derived tenant\n const activeTenant =\n user?.currentTenantId && Array.isArray(tenants)\n ? tenants.find((tenant) => tenant.tenantId === user.currentTenantId) ??\n null\n : null;\n\n // This is derived from the correct tenant\n const isProductTenant =\n activeTenant?.tenantType === TenantTypeEnums.Product;\n\n // --- Dialog Logic & Derived Flags ---\n const unityProductName = useMemo(() => {\n if (!shouldFilterByProduct || unityProductId === null) {\n return null;\n }\n if (!Array.isArray(products)) {\n return null;\n }\n return (\n products.find(\n (product) => product?.productId === unityProductId\n )?.name ?? null\n );\n }, [products, shouldFilterByProduct, unityProductId]);\n\n const userHasLoaded = user?.statusCode === 200;\n\n const noTenantsAvailable =\n Array.isArray(tenants) && tenants.length === 0 && userHasLoaded;\n\n const hasFilteredTenants =\n Array.isArray(filteredTenantsList) && filteredTenantsList.length > 0;\n\n const currentTenantAllowed = !shouldFilterByProduct\n ? true\n : filteredTenantsList?.some(\n (tenant) => tenant.tenantId === user?.currentTenantId\n ) ?? false;\n\n const zeroTenantAccess =\n userHasLoaded &&\n shouldFilterByProduct &&\n Array.isArray(filteredTenantsList) &&\n filteredTenantsList.length === 0;\n\n const shouldShowTenantMismatchDialog =\n userHasLoaded &&\n shouldFilterByProduct &&\n hasFilteredTenants &&\n !currentTenantAllowed &&\n unityProductId !== UnityProducts.Unity;\n\n const allowedTenants = useMemo(\n () => (Array.isArray(filteredTenantsList) ? filteredTenantsList : []),\n [filteredTenantsList]\n );\n\n const selectedTenantForDialog = currentTenantAllowed\n ? activeTenant\n : allowedTenants[0] ?? null;\n\n // Return everything the Provider needs\n return {\n tenantsList: tenants ?? null,\n filteredTenantsList,\n activeTenant, // The correct tenant\n isProductTenant, // Derived from the correct tenant\n refresh: refetchTenantsList,\n noTenantsAvailable,\n zeroTenantAccess,\n shouldShowTenantMismatchDialog,\n allowedTenants,\n selectedTenantForDialog,\n unityProductName,\n };\n};\n\n\nexport const TenantProvider = ({ children }) => {\n const user = useUser();\n const activeAccount = useAccount();\n const id = user?.id;\n const { changeTenant } = useUserActions();\n\n // Call the main data hook to get the correct state\n const {\n tenantsList,\n filteredTenantsList,\n activeTenant, // This is the correct value\n isProductTenant,\n refresh,\n noTenantsAvailable,\n zeroTenantAccess,\n shouldShowTenantMismatchDialog,\n allowedTenants,\n selectedTenantForDialog,\n unityProductName,\n } = useTenantData(id, user);\n\n useTenantStoreSync(activeTenant);\n\n // Callback for changing the tenant (triggers API call)\n const handleTenantChange = useCallback(\n (tenant) => {\n if (!tenant) return;\n storeTenant(tenant.tenantId);\n changeTenant(tenant.tenantId); // This will cause `user` to update, re-running the hooks.\n },\n [changeTenant]\n );\n\n // Render blocking dialog if user has no access\n if (noTenantsAvailable || zeroTenantAccess) {\n return (\n <FluentDialog\n title='No Access'\n message='Your user does not have access to any tenants. Please contact your support team.'\n open={true}\n buttonOneHidden={true}\n buttonTwoHidden={true}\n />\n );\n }\n if (shouldShowTenantMismatchDialog) {\n return (\n\n <TenantAccessDialog\n open={true}\n tenants={allowedTenants}\n currentTenant={selectedTenantForDialog}\n onTenantChange={handleTenantChange}\n productName={unityProductName}\n />\n );\n }\n\n // Provide the correct values to the Context\n return (\n <TenantContext.Provider\n value={{\n tenantsList,\n filteredTenantsList,\n activeTenant,\n isProductTenant,\n refresh,\n }}\n >\n <MenuProvider>\n {children}\n </MenuProvider>\n </TenantContext.Provider>\n );\n};\n"],"mappings":";;;;;;;;;;;;;;;AAGA,SAAgB,iBAAiB;CAC/B,MAAM,WAAW,WAAW,oBAAoB;AAehD,QAAO;EAAE,SAdO,aACb,SAAS;AACR,YAAS;IAAE,MAAM;IAAY;IAAM,CAAC;KAEtC,CAAC,SAAS,CACX;EASiB,cAPG,aAClB,aAAa;AACZ,YAAS;IAAE,MAAM;IAAiB;IAAU,CAAC;KAE/C,CAAC,SAAS,CACX;EAE+B;;AAGlC,SAAgB,sBAAsB;CACpC,MAAM,WAAW,WAAW,oBAAoB;AAehD,QAAO;EAAE,SAdO,aACb,SAAS;AACR,YAAS;IAAE,MAAM;IAAY;IAAM,CAAC;KAEtC,CAAC,SAAS,CACX;EASiB,gBAPK,aACpB,gBAAgB;AACf,YAAS;IAAE,MAAM;IAAoB;IAAa,CAAC;KAErD,CAAC,SAAS,CACX;EAEiC;;;;;ACrBpC,MAAM,oBAAoB,eACxB,WAAW,QAAQ,QAAQ,GAAG;AAEhC,MAAa,eAAe,YACzB,OAAO,QAAQ;CACd,MAAM,EACJ,SACA,OACA,gBACA,KAAK,iBACL,QAAQ,kBACR,WACA,mBAAmB,MACnB,gBACA,iBAAiB,6BACf;CAEJ,MAAM,UAAU,cAAc,WAAW,EAAE,EAAE,CAAC,QAAQ,CAAC;CAEvD,MAAM,eAAe,aAEjB,OACA,UACA,WACG;AACH,MAAI,WAAW,mBAAmB,CAAC,SACjC;AAEF,mBAAiB,SAAS;IAE5B,CAAC,eAAe,CACjB;AAED,QACE,oCAAC;EACM;EACM;EACP;EACG;EACE;EACS;EAClB,oBAAoB,QAAQ,aAC1B,QAAQ,aAAa,UAAU;EAEjC,iBAAiB,WAAW,QAAQ,cAAc;EAClD,UAAU;EACV,cAAc,WACZ,oCAAC;GACC,GAAI;GACG;GACP,SAAQ;GACR,GAAI;IACJ;EAEJ,eAAe,WACb,oCAAC;GACC,OAAO;IAAE,OAAO;IAAQ,QAAQ;IAAQ;GAExC,aAAa,GAAG,eAAe,GAAG,iBAChC,QAAQ,cAAc,GACvB;KAEA,QAAQ,cAAc,GACpB;GAEP;EAGP;AAED,aAAa,cAAc;;;;AC1E3B,MAAaA,sBAAyD,EACpE,SACA,gBACA,kBACI;CACJ,MAAM,UAAU,cACZ,+CAA+C,YAAY,+CAC3D;AAEJ,QACE,oCAAC;EACC,MAAM;EACN,OAAM;EACG;EACT,iBAAiB;EACjB,iBAAiB;EACjB;EACA;IAEA,oCAAC;EACU;EACT,OAAO;EACS;EAChB,OAAM;EACN,IAAG;EACH,kBAAkB;EAClB,gBAAe;GACf,CACW;;;;;;;;;ACvBnB,MAAM,sBAAsB,iBAAiB;CAC3C,MAAM,EACJ,eAAe,kBACf,qBACE,gBAAgB,WAAW;EAC7B,eAAe,MAAM;EACrB,kBAAkB,MAAM;EACzB,EAAE;AAIH,iBAAgB;AACd,MACE,iBACC,kBAAkB,aAAa,aAAa,YAC3C,kBAAkB,SAAS,aAAa,cACxC,kBAAkB,eAAe,aAAa,cAC9C,kBAAkB,UAAU,aAAa,OAE3C,kBAAiB;GACf,UAAU,aAAa;GACvB,MAAM,aAAa;GACnB,YAAY,aAAa;GACzB,OAAO,cAAc,SAAS;GAC/B,CAAC;IAEH;EAAC;EAAc;EAAkB;EAAiB,CAAC;;;;;;AAOxD,MAAM,iBAAiB,IAAI,SAAS;CAElC,MAAM,CAAC,EAAE,MAAM,WAAW,sBAAsB,YAC9C,cAAc,kBACd,SAAS,MAAM,GAAG,gBAClB,EAAE,EACF,CAAC,GACF;CAED,MAAM,CAAC,EAAE,MAAM,cAAc,YAC3B,cAAc,gBACd,YACA,EAAE,EACF,CAAC,GACF;CAGD,MAAM,uBAAuB,cAAc,OAAO;CAClD,MAAM,iBAAiB,uBACnB,OAAO,qBAAqB,GAC5B;CACJ,MAAM,wBACJ,OAAO,mBAAmB,YAAY,CAAC,OAAO,MAAM,eAAe,IAAI,mBAAmB,cAAc;CAE1G,MAAM,sBAAsB,cAAc;AACxC,MAAI,CAAC,MAAM,QAAQ,QAAQ,CACzB,QAAO;AAET,MAAI,CAAC,yBAAyB,mBAAmB,KAC/C,QAAO;AAET,SAAO,QAAQ,QAAQ,WACrB,QAAQ,UAAU,MACf,YAAY,SAAS,cAAc,eACrC,CACF;IACA;EAAC;EAAS;EAAuB;EAAe,CAAC;CAGpD,MAAM,eACJ,MAAM,mBAAmB,MAAM,QAAQ,QAAQ,GAC3C,QAAQ,MAAM,WAAW,OAAO,aAAa,KAAK,gBAAgB,IAClE,OACA;CAGN,MAAM,kBACJ,cAAc,eAAe,gBAAgB;CAG/C,MAAM,mBAAmB,cAAc;AACrC,MAAI,CAAC,yBAAyB,mBAAmB,KAC/C,QAAO;AAET,MAAI,CAAC,MAAM,QAAQ,SAAS,CAC1B,QAAO;AAET,SACE,SAAS,MACN,YAAY,SAAS,cAAc,eACrC,EAAE,QAAQ;IAEZ;EAAC;EAAU;EAAuB;EAAe,CAAC;CAErD,MAAM,gBAAgB,MAAM,eAAe;CAE3C,MAAM,qBACJ,MAAM,QAAQ,QAAQ,IAAI,QAAQ,WAAW,KAAK;CAEpD,MAAM,qBACJ,MAAM,QAAQ,oBAAoB,IAAI,oBAAoB,SAAS;CAErE,MAAM,uBAAuB,CAAC,wBAC1B,OACA,qBAAqB,MAClB,WAAW,OAAO,aAAa,MAAM,gBACvC,IAAI;CAET,MAAM,mBACJ,iBACA,yBACA,MAAM,QAAQ,oBAAoB,IAClC,oBAAoB,WAAW;CAEjC,MAAM,iCACJ,iBACA,yBACA,sBACA,CAAC,wBACD,mBAAmB,cAAc;CAEnC,MAAM,iBAAiB,cACd,MAAM,QAAQ,oBAAoB,GAAG,sBAAsB,EAAE,EACpE,CAAC,oBAAoB,CACtB;CAED,MAAM,0BAA0B,uBAC5B,eACA,eAAe,MAAM;AAGzB,QAAO;EACL,aAAa,WAAW;EACxB;EACA;EACA;EACA,SAAS;EACT;EACA;EACA;EACA;EACA;EACA;EACD;;AAIH,MAAa,kBAAkB,EAAE,eAAe;CAC9C,MAAM,OAAO,SAAS;AACA,aAAY;CAClC,MAAM,KAAK,MAAM;CACjB,MAAM,EAAE,iBAAiB,gBAAgB;CAGzC,MAAM,EACJ,aACA,qBACA,cACA,iBACA,SACA,oBACA,kBACA,gCACA,gBACA,yBACA,qBACE,cAAc,IAAI,KAAK;AAE3B,oBAAmB,aAAa;CAGhC,MAAM,qBAAqB,aACxB,WAAW;AACV,MAAI,CAAC,OAAQ;AACb,cAAY,OAAO,SAAS;AAC5B,eAAa,OAAO,SAAS;IAE/B,CAAC,aAAa,CACf;AAGD,KAAI,sBAAsB,iBACxB,QACE,oCAAC;EACC,OAAM;EACN,SAAQ;EACR,MAAM;EACN,iBAAiB;EACjB,iBAAiB;GACjB;AAGN,KAAI,+BACF,QAEI,oCAAC;EACC,MAAM;EACN,SAAS;EACT,eAAe;EACf,gBAAgB;EAChB,aAAa;GACb;AAKR,QACE,oCAAC,cAAc,YACb,OAAO;EACL;EACA;EACA;EACA;EACA;EACD,IAED,oCAAC,oBACE,SACY,CACQ"}
|
|
1
|
+
{"version":3,"file":"TenantProvider-BeFMHYP8.js","names":[],"sources":["../src/utilities/auth/users.js","../src/utilities/tenant/TenantSelect.tsx","../src/utilities/tenant/TenantAccessDialog.tsx","../src/utilities/tenant/TenantProvider.jsx"],"sourcesContent":["import { useContext, useCallback } from 'react';\nimport { UserDispatchContext } from './internal';\n\nexport function useUserActions() {\n const dispatch = useContext(UserDispatchContext);\n const setUser = useCallback(\n (user) => {\n dispatch({ type: 'SET_USER', user });\n },\n [dispatch]\n );\n\n const changeTenant = useCallback(\n (tenantId) => {\n dispatch({ type: 'CHANGE_TENANT', tenantId });\n },\n [dispatch]\n );\n\n return { setUser, changeTenant };\n}\n\nexport function useLocalUserActions() {\n const dispatch = useContext(UserDispatchContext);\n const setUser = useCallback(\n (user) => {\n dispatch({ type: 'SET_USER', user });\n },\n [dispatch]\n );\n\n const setAccessToken = useCallback(\n (accessToken) => {\n dispatch({ type: 'SET_ACCESS_TOKEN', accessToken });\n },\n [dispatch]\n );\n\n return { setUser, setAccessToken };\n}\n","import React, { forwardRef, useMemo, useCallback } from 'react';\nimport { Autocomplete, AutocompleteChangeReason } from '@material-ui/lab';\nimport { TextField, TextFieldProps } from '@material-ui/core';\nimport { Tenant } from '../types';\n\ninterface TenantSelectProps {\n tenants?: Tenant[] | null;\n value: Tenant | null;\n onTenantChange?: (tenant: Tenant) => void;\n id?: string;\n label?: string;\n className?: string;\n disableClearable?: boolean;\n textFieldProps?: TextFieldProps;\n recordIdPrefix?: string;\n}\n\nconst sanitizeRecordId = (tenantName: string) =>\n tenantName.replace(/\\s+/g, '');\n\nexport const TenantSelect = forwardRef<HTMLDivElement, TenantSelectProps>(\n (props, ref) => {\n const {\n tenants,\n value,\n onTenantChange,\n id = 'tenant-select',\n label = 'Current Tenant',\n className,\n disableClearable = true,\n textFieldProps,\n recordIdPrefix = 'udpRecord-TenantSelect'\n } = props;\n\n const options = useMemo(() => tenants ?? [], [tenants]);\n\n const handleChange = useCallback(\n (\n event: React.ChangeEvent<object>,\n newValue: Tenant | null,\n reason: AutocompleteChangeReason\n ) => {\n if (reason !== 'select-option' || !newValue) {\n return;\n }\n onTenantChange?.(newValue);\n },\n [onTenantChange]\n );\n\n return (\n <Autocomplete\n ref={ref}\n className={className}\n id={id}\n value={value}\n options={options}\n disableClearable={disableClearable}\n getOptionSelected={(option, selected) =>\n option?.tenantId === selected?.tenantId\n }\n getOptionLabel={(option) => option?.tenantName ?? ''}\n onChange={handleChange}\n renderInput={(params) => (\n <TextField\n {...params}\n label={label}\n variant='standard'\n {...textFieldProps}\n />\n )}\n renderOption={(option) => (\n <li\n style={{ width: '100%', height: '100%' }}\n // @ts-expect-error udpRecordId is used for automation tagging\n udprecordid={`${recordIdPrefix}-${sanitizeRecordId(\n option?.tenantName ?? ''\n )}`}\n >\n {option?.tenantName ?? ''}\n </li>\n )}\n />\n );\n }\n);\n\nTenantSelect.displayName = 'TenantSelect';\n","import React from 'react';\nimport { FluentDialog } from '../../UI/feedback/FluentDialog';\nimport { TenantSelect } from './TenantSelect';\nimport { Tenant } from '../types';\n\ninterface TenantAccessDialogProps {\n open: boolean;\n tenants: Tenant[];\n currentTenant: Tenant | null;\n onTenantChange: (tenant: Tenant) => void;\n productName?: string | null;\n}\n\nexport const TenantAccessDialog: React.FC<TenantAccessDialogProps> = ({\n tenants,\n onTenantChange,\n productName\n}) => {\n const message = productName\n ? `Your current tenant does not have access to ${productName}. Please select another tenant to continue.`\n : 'Your current tenant does not have access to this application. Please select another tenant to continue.';\n\n return (\n <FluentDialog\n open={true}\n title='Tenant Access Required'\n message={message}\n buttonOneHidden={true}\n buttonTwoHidden={true}\n disableEscapeKeyDown\n disableBackdropClick\n >\n <TenantSelect\n tenants={tenants}\n value={null}\n onTenantChange={onTenantChange}\n label='Available Tenants'\n id='tenant-access-dialog-select'\n disableClearable={false}\n recordIdPrefix='udpRecord-TenantAccessDialog'\n />\n </FluentDialog>\n );\n};\n","import React, { useCallback, useMemo, useEffect } from 'react';\nimport { useUser } from '../auth/useUser';\nimport { useAxiosGet } from '../useAxiosGet';\nimport { TenantContext } from './tenantContext';\nimport { ConfigService } from '../../configService';\nimport { FluentDialog } from '../../UI/feedback/FluentDialog';\nimport { useAccount } from '@azure/msal-react';\nimport { MenuProvider } from '../menus/MenuProvider';\nimport { TenantAccessDialog } from './TenantAccessDialog';\nimport { storeTenant } from '../storage/UnitySessionStorage';\nimport { useUserActions } from '../auth/users';\nimport { TenantTypeEnums, UnityProducts } from '../../enums/unitySystemEnums';\nimport { useTenantStore } from '../../stores/tenantStore'; // <-- Imported for the sync hook\n\n/**\n * A hook to sync the derived active tenant with the Zustand store.\n * This is the \"necessary evil\" to keep the store updated.\n */\nconst useTenantStoreSync = (activeTenant) => {\n const {\n currentTenant: storeTenantValue,\n setCurrentTenant,\n } = useTenantStore((state) => ({\n currentTenant: state.currentTenant,\n setCurrentTenant: state.setCurrentTenant,\n }));\n\n // This effect syncs our correct activeTenant to the Zustand store.\n // This fixes the \"side-effect in render\" bug from the original code.\n useEffect(() => {\n if (\n activeTenant &&\n (storeTenantValue?.tenantId !== activeTenant.tenantId ||\n storeTenantValue?.name !== activeTenant.tenantName ||\n storeTenantValue?.tenantType !== activeTenant.tenantType ||\n storeTenantValue?.theme !== activeTenant.theme)\n ) {\n setCurrentTenant({\n tenantId: activeTenant.tenantId,\n name: activeTenant.tenantName,\n tenantType: activeTenant.tenantType,\n theme: activeTenant?.theme ?? null,\n });\n }\n }, [activeTenant, storeTenantValue, setCurrentTenant]);\n};\n\n/**\n * This hook fetches all data and derives the correct tenant state.\n * It is pure and has no knowledge of Zustand.\n */\nconst useTenantData = (id, user) => {\n // --- Data Fetching ---\n const [{ data: tenants }, refetchTenantsList] = useAxiosGet(\n ConfigService.securityV1ApiUrl,\n `users/${id ?? ''}/unitytenants`,\n {},\n !id\n );\n\n const [{ data: products }] = useAxiosGet(\n ConfigService.tenantV1ApiUrl,\n `products`,\n {},\n !id\n );\n\n // --- State Derivation ---\n const unityProductIdString = ConfigService.config.UNITY_PRODUCT_ID;\n const unityProductId = unityProductIdString\n ? Number(unityProductIdString)\n : null;\n const shouldFilterByProduct =\n typeof unityProductId === 'number' && !Number.isNaN(unityProductId) && unityProductId !== UnityProducts.Unity;\n\n const filteredTenantsList = useMemo(() => {\n if (!Array.isArray(tenants)) {\n return null;\n }\n if (!shouldFilterByProduct || unityProductId === null) {\n return tenants;\n }\n return tenants.filter((tenant) =>\n tenant?.products?.find(\n (product) => product?.productId === unityProductId\n )\n );\n }, [tenants, shouldFilterByProduct, unityProductId]);\n\n // This is the correctly derived tenant\n const activeTenant =\n user?.currentTenantId && Array.isArray(tenants)\n ? tenants.find((tenant) => tenant.tenantId === user.currentTenantId) ??\n null\n : null;\n\n // This is derived from the correct tenant\n const isProductTenant =\n activeTenant?.tenantType === TenantTypeEnums.Product;\n\n // --- Dialog Logic & Derived Flags ---\n const unityProductName = useMemo(() => {\n if (!shouldFilterByProduct || unityProductId === null) {\n return null;\n }\n if (!Array.isArray(products)) {\n return null;\n }\n return (\n products.find(\n (product) => product?.productId === unityProductId\n )?.name ?? null\n );\n }, [products, shouldFilterByProduct, unityProductId]);\n\n const userHasLoaded = user?.statusCode === 200;\n\n const noTenantsAvailable =\n Array.isArray(tenants) && tenants.length === 0 && userHasLoaded;\n\n const hasFilteredTenants =\n Array.isArray(filteredTenantsList) && filteredTenantsList.length > 0;\n\n const currentTenantAllowed = !shouldFilterByProduct\n ? true\n : filteredTenantsList?.some(\n (tenant) => tenant.tenantId === user?.currentTenantId\n ) ?? false;\n\n const zeroTenantAccess =\n userHasLoaded &&\n shouldFilterByProduct &&\n Array.isArray(filteredTenantsList) &&\n filteredTenantsList.length === 0;\n\n const shouldShowTenantMismatchDialog =\n userHasLoaded &&\n shouldFilterByProduct &&\n hasFilteredTenants &&\n !currentTenantAllowed &&\n unityProductId !== UnityProducts.Unity;\n\n const allowedTenants = useMemo(\n () => (Array.isArray(filteredTenantsList) ? filteredTenantsList : []),\n [filteredTenantsList]\n );\n\n const selectedTenantForDialog = currentTenantAllowed\n ? activeTenant\n : allowedTenants[0] ?? null;\n\n // Return everything the Provider needs\n return {\n tenantsList: tenants ?? null,\n filteredTenantsList,\n activeTenant, // The correct tenant\n isProductTenant, // Derived from the correct tenant\n refresh: refetchTenantsList,\n noTenantsAvailable,\n zeroTenantAccess,\n shouldShowTenantMismatchDialog,\n allowedTenants,\n selectedTenantForDialog,\n unityProductName,\n };\n};\n\n\nexport const TenantProvider = ({ children }) => {\n const user = useUser();\n const activeAccount = useAccount();\n const id = user?.id;\n const { changeTenant } = useUserActions();\n\n // Call the main data hook to get the correct state\n const {\n tenantsList,\n filteredTenantsList,\n activeTenant, // This is the correct value\n isProductTenant,\n refresh,\n noTenantsAvailable,\n zeroTenantAccess,\n shouldShowTenantMismatchDialog,\n allowedTenants,\n selectedTenantForDialog,\n unityProductName,\n } = useTenantData(id, user);\n\n useTenantStoreSync(activeTenant);\n\n // Callback for changing the tenant (triggers API call)\n const handleTenantChange = useCallback(\n (tenant) => {\n if (!tenant) return;\n storeTenant(tenant.tenantId);\n changeTenant(tenant.tenantId); // This will cause `user` to update, re-running the hooks.\n },\n [changeTenant]\n );\n\n // Render blocking dialog if user has no access\n if (noTenantsAvailable || zeroTenantAccess) {\n return (\n <FluentDialog\n title='No Access'\n message='Your user does not have access to any tenants. Please contact your support team.'\n open={true}\n buttonOneHidden={true}\n buttonTwoHidden={true}\n />\n );\n }\n if (shouldShowTenantMismatchDialog) {\n return (\n\n <TenantAccessDialog\n open={true}\n tenants={allowedTenants}\n currentTenant={selectedTenantForDialog}\n onTenantChange={handleTenantChange}\n productName={unityProductName}\n />\n );\n }\n\n // Provide the correct values to the Context\n return (\n <TenantContext.Provider\n value={{\n tenantsList,\n filteredTenantsList,\n activeTenant,\n isProductTenant,\n refresh,\n }}\n >\n <MenuProvider>\n {children}\n </MenuProvider>\n </TenantContext.Provider>\n );\n};\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TrimForAvatar-
|
|
1
|
+
{"version":3,"file":"TrimForAvatar-BP1gZWd5.js","names":[],"sources":["../src/utilities/TrimForAvatar.js"],"sourcesContent":["export const TrimForAvatar = (avatar) => {\n return avatar?.trim()?.charAt(0) || '?'\n}\n"],"mappings":";AAAA,MAAa,iBAAiB,WAAW;AACvC,QAAO,QAAQ,MAAM,EAAE,OAAO,EAAE,IAAI"}
|
|
@@ -8,8 +8,8 @@ import { t as AmbientToggleButton } from "../../../AmbientToggleButton-BjyjXj8S.
|
|
|
8
8
|
import { n as styles } from "../../../AmbientToggleButtonGroupDefault-CngfAplM.js";
|
|
9
9
|
import { t as AmbientChipButton } from "../../../AmbientChipButton-DYAYXuKp.js";
|
|
10
10
|
import { t as IconButtonWithTooltip } from "../../../IconButtonWithToolTip-DswviiJB.js";
|
|
11
|
-
import { a as FluentMenuListItem, i as FluentMenuListButton, n as FluentCompoundButton, r as FluentUploadButton, t as FluentUploadIconButton } from "../../../buttons-
|
|
12
|
-
import { t as AmbientToggleButtonGroup } from "../../../AmbientToggleButtonGroup-
|
|
13
|
-
import { t as UdpActionCard } from "../../../UdpActionCard-
|
|
11
|
+
import { a as FluentMenuListItem, i as FluentMenuListButton, n as FluentCompoundButton, r as FluentUploadButton, t as FluentUploadIconButton } from "../../../buttons-DyKpA2qY.js";
|
|
12
|
+
import { t as AmbientToggleButtonGroup } from "../../../AmbientToggleButtonGroup-DgFod3VK.js";
|
|
13
|
+
import { t as UdpActionCard } from "../../../UdpActionCard-VtAacuCM.js";
|
|
14
14
|
|
|
15
15
|
export { AmbientCardButton, AmbientChipButton, AmbientPopoverMenuItem, AmbientToggleButton, AmbientToggleButtonGroup, AmbientTokenButton, FluentButton, FluentCompoundButton, FluentIconButton, FluentMenuListButton, FluentMenuListItem, FluentUploadButton, FluentUploadIconButton, IconButtonWithTooltip, PrimaryActionButton, ToolBarButton, UdpActionCard, styles };
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { n as AmbientSplitStatCard, t as AmbientVisualizationCard } from "../../../../AmbientVisualizationCard-
|
|
1
|
+
import { n as AmbientSplitStatCard, t as AmbientVisualizationCard } from "../../../../AmbientVisualizationCard-CAxx4QWe.js";
|
|
2
2
|
|
|
3
3
|
export { AmbientSplitStatCard, AmbientVisualizationCard };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UdpActionCard-
|
|
1
|
+
{"version":3,"file":"UdpActionCard-VtAacuCM.js","names":[],"sources":["../src/UI/inputs/buttons/UdpActionCard/UdpActionCard.jsx"],"sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Link } from 'react-router-dom';\nimport { FluentIcon } from '../../../../utilities/iconLibrary';\nimport './UdpActionCard.css';\n\n/**\n * UdpActionCard - An accessible workflow card component\n *\n * @param {Object} props\n * @param {React.Component} props.icon - Fluent UI icon component\n * @param {string} props.iconColor - Icon color (CSS var, hex, or system color: info, warning, error, success, note)\n * @param {string} props.primaryText - Main heading text\n * @param {string} props.secondaryText - Description text\n * @param {string} [props.href] - External link URL\n * @param {string} [props.to] - React Router link path\n * @param {function} [props.onClick] - Click handler\n * @param {string} [props.className] - Additional CSS classes\n */\nexport const UdpActionCard = ({\n icon,\n iconColor = 'info',\n primaryText,\n secondaryText,\n href,\n to,\n onClick,\n className = '',\n ...rest\n}) => {\n // Resolve icon color to CSS variable or direct value\n const getIconColor = () => {\n const systemColors = {\n info: 'var(--info-color-main)',\n warning: 'var(--warning-color-main)',\n error: 'var(--error-color-main)',\n success: 'var(--success-color-main)',\n note: 'var(--note-color-main)',\n primary: 'var(--primary-color-main)',\n secondary: 'var(--secondary-color-main)',\n };\n\n // Check if it's a system color\n if (systemColors[iconColor]) {\n return systemColors[iconColor];\n }\n\n // Check if it's already a CSS variable\n if (iconColor.startsWith('var(--')) {\n return iconColor;\n }\n\n // Otherwise, treat as hex or named color\n return iconColor;\n };\n\n const resolvedIconColor = getIconColor();\n\n // Safety check: ensure icon prop is provided\n if (!icon) {\n console.error('UdpActionCard: icon prop is required');\n return null;\n }\n\n // Card content\n const cardContent = (\n <>\n <div\n className=\"udp-action-card__icon\"\n style={{ color: resolvedIconColor }}\n >\n <FluentIcon component={icon} size={48} customSize />\n </div>\n <div className=\"udp-action-card__content\">\n <div className=\"udp-action-card__primary-text\">{primaryText}</div>\n <div className=\"udp-action-card__secondary-text\">{secondaryText}</div>\n </div>\n </>\n );\n\n // Determine which element to render\n const commonProps = {\n className: `udp-action-card ${className}`,\n style: { '--card-border-color': resolvedIconColor },\n ...rest,\n };\n\n // External link\n if (href) {\n return (\n <a {...commonProps} href={href} rel=\"noopener noreferrer\">\n {cardContent}\n </a>\n );\n }\n\n // Router link\n if (to) {\n return (\n <Link {...commonProps} to={to}>\n {cardContent}\n </Link>\n );\n }\n\n // Button with onClick\n if (onClick) {\n return (\n <button {...commonProps} onClick={onClick} type=\"button\">\n {cardContent}\n </button>\n );\n }\n\n // Default: non-interactive div\n return (\n <div {...commonProps} role=\"article\">\n {cardContent}\n </div>\n );\n};\n\nUdpActionCard.propTypes = {\n icon: PropTypes.elementType.isRequired,\n iconColor: PropTypes.string,\n primaryText: PropTypes.string.isRequired,\n secondaryText: PropTypes.string.isRequired,\n href: PropTypes.string,\n to: PropTypes.string,\n onClick: PropTypes.func,\n className: PropTypes.string,\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAmBA,MAAa,iBAAiB,EAC5B,MACA,YAAY,QACZ,aACA,eACA,MACA,IACA,SACA,YAAY,IACZ,GAAG,WACC;CAEJ,MAAM,qBAAqB;EACzB,MAAM,eAAe;GACnB,MAAM;GACN,SAAS;GACT,OAAO;GACP,SAAS;GACT,MAAM;GACN,SAAS;GACT,WAAW;GACZ;AAGD,MAAI,aAAa,WACf,QAAO,aAAa;AAItB,MAAI,UAAU,WAAW,SAAS,CAChC,QAAO;AAIT,SAAO;;CAGT,MAAM,oBAAoB,cAAc;AAGxC,KAAI,CAAC,MAAM;AACT,UAAQ,MAAM,uCAAuC;AACrD,SAAO;;CAIT,MAAM,cACJ,0DACE,oCAAC;EACC,WAAU;EACV,OAAO,EAAE,OAAO,mBAAmB;IAEnC,oCAAC;EAAW,WAAW;EAAM,MAAM;EAAI;GAAa,CAChD,EACN,oCAAC,SAAI,WAAU,8BACb,oCAAC,SAAI,WAAU,mCAAiC,YAAkB,EAClE,oCAAC,SAAI,WAAU,qCAAmC,cAAoB,CAClE,CACL;CAIL,MAAM,cAAc;EAClB,WAAW,mBAAmB;EAC9B,OAAO,EAAE,uBAAuB,mBAAmB;EACnD,GAAG;EACJ;AAGD,KAAI,KACF,QACE,oCAAC;EAAE,GAAI;EAAmB;EAAM,KAAI;IACjC,YACC;AAKR,KAAI,GACF,QACE,oCAAC;EAAK,GAAI;EAAiB;IACxB,YACI;AAKX,KAAI,QACF,QACE,oCAAC;EAAO,GAAI;EAAsB;EAAS,MAAK;IAC7C,YACM;AAKb,QACE,oCAAC;EAAI,GAAI;EAAa,MAAK;IACxB,YACG;;AAIV,cAAc,YAAY;CACxB,MAAM,UAAU,YAAY;CAC5B,WAAW,UAAU;CACrB,aAAa,UAAU,OAAO;CAC9B,eAAe,UAAU,OAAO;CAChC,MAAM,UAAU;CAChB,IAAI,UAAU;CACd,SAAS,UAAU;CACnB,WAAW,UAAU;CACtB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UdpAppProvider-DXgzyeHZ.js","names":[
|
|
1
|
+
{"version":3,"file":"UdpAppProvider-DXgzyeHZ.js","names":[],"sources":["../src/utilities/i18n/initializeI18n.js","../src/providers/UdpAppProvider.tsx"],"sourcesContent":["import i18n from 'i18next';\nimport { initReactI18next } from 'react-i18next';\nimport LanguageDetector from 'i18next-browser-languagedetector';\nimport { apiMutate } from '../useAxiosMutate';\nimport { ConfigService } from '../../configService';\n\n/**\n * @typedef {Object} TenantTranslationItem\n * @property {string} label\n * @property {string} value\n */\n\n/**\n * @callback TranslationLoader\n * @param {string} language\n * @returns {Promise<Record<string, string>>}\n */\n\n/**\n * @typedef {Object} InitializeI18nOptions\n * @property {TranslationLoader} [loadTranslations]\n * @property {Partial<import('i18next').InitOptions>} [i18nConfig]\n * @property {string} [fallbackLanguage]\n */\n\nlet isInitialized = false;\n\n/**\n * Convert the API response into an i18next resource bundle.\n * @param {TenantTranslationItem[]} languageData\n * @returns {Record<string, string>}\n */\nconst buildTranslationMap = (languageData = []) => {\n return languageData.reduce((acc, item) => {\n if (item?.label) {\n acc[item.label] = item?.value ?? '';\n }\n return acc;\n }, /** @type {Record<string, string>} */ ({}));\n};\n\n/** @type {TranslationLoader} */\nconst defaultTranslationLoader = async (language) => {\n await ConfigService.waitForConfig?.();\n const response = await apiMutate(\n ConfigService.tenantV1ApiUrl,\n `translation/language/${language}`,\n { method: 'get' }\n );\n\n const languageData = Array.isArray(response?.data) ? response.data : [];\n return buildTranslationMap(languageData);\n};\n\n/**\n * Initializes the shared i18n instance used across UDP React applications.\n * Safe to call multiple times – initialization will only occur once per runtime.\n * @param {InitializeI18nOptions} [options]\n * @returns {import('i18next').i18n}\n */\nexport const initializeUnityI18n = (options = {}) => {\n if (isInitialized) {\n return i18n;\n }\n\n const fallbackLanguage = options.fallbackLanguage ?? 'en-US';\n const loadTranslations = options.loadTranslations ?? defaultTranslationLoader;\n\n /**\n * Lazy-load translations when the language changes.\n * @param {string} language\n */\n const handleLanguageChanged = async (language) => {\n if (i18n.hasResourceBundle(language, 'translation')) {\n return;\n }\n\n try {\n const bundle = await loadTranslations(language);\n i18n.addResourceBundle(language, 'translation', bundle, true, true);\n i18n.changeLanguage(language);\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error('Failed to load translations', error);\n }\n };\n\n i18n.on('languageChanged', handleLanguageChanged);\n\n i18n\n .use(LanguageDetector)\n .use(initReactI18next)\n .init({\n fallbackLng: fallbackLanguage,\n debug: false,\n detection: {\n order: ['queryString', 'cookie'],\n cache: ['cookie']\n },\n interpolation: {\n escapeValue: false\n },\n backend: {\n loadPath: ''\n },\n ...(options.i18nConfig ?? {})\n });\n\n isInitialized = true;\n return i18n;\n};\n\n/**\n * Convenience accessor for the shared i18n instance.\n * @returns {import('i18next').i18n}\n */\nexport const getI18nInstance = () => i18n;\n","import React, { ReactNode, useEffect } from 'react';\nimport { SnackbarProvider, SnackbarProviderProps } from 'notistack';\nimport { ThemeProvider } from '../utilities/theme';\nimport { AuthProvider } from '../utilities/auth/AuthProvider';\nimport {\n initializeUnityI18n,\n InitializeI18nOptions\n} from '../utilities/i18n/initializeI18n';\nimport { storeInitialPath } from '../utilities/redirect';\nimport { storeInitialTenant } from '../utilities/storage';\nimport { BrowserRouter } from 'react-router-dom';\n\nexport interface UdpAppProviderProps {\n children: ReactNode;\n /**\n * Props forwarded to the SnackbarProvider from notistack.\n */\n snackbarProps?: SnackbarProviderProps;\n /**\n * Props forwarded to the AuthProviderWrapper.\n */\n authProps?: {\n doNotWaitForTenant?: boolean;\n };\n /**\n * Optional configuration overrides for the shared i18n instance.\n */\n i18nOptions?: InitializeI18nOptions;\n}\n\n/**\n * Bundles the core UDP providers (theme, snackbar, auth) and ensures the shared\n * i18n instance is initialised exactly once. Intended to be rendered beneath a\n * react-router <Router /> so the auth provider has access to history.\n */\nexport const UdpAppProvider: React.FC<UdpAppProviderProps> = ({\n children,\n snackbarProps,\n authProps,\n i18nOptions\n}) => {\n useEffect(() => {\n initializeUnityI18n(i18nOptions);\n }, [i18nOptions]);\n storeInitialPath();\n storeInitialTenant();\n return (\n <AuthProvider {...authProps}>\n <ThemeProvider>\n <BrowserRouter>\n <SnackbarProvider maxSnack={3} {...snackbarProps}>\n {children}\n </SnackbarProvider>\n </BrowserRouter>\n </ThemeProvider>\n </AuthProvider>\n );\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyBA,IAAI,gBAAgB;;;;;;AAOpB,MAAM,uBAAuB,eAAe,EAAE,KAAK;AACjD,QAAO,aAAa,QAAQ,KAAK,SAAS;AACxC,MAAI,MAAM,MACR,KAAI,KAAK,SAAS,MAAM,SAAS;AAEnC,SAAO;IACiC,EAAE,CAAE;;;AAIhD,MAAM,2BAA2B,OAAO,aAAa;AACnD,OAAM,cAAc,iBAAiB;CACrC,MAAM,WAAW,MAAM,UACrB,cAAc,gBACd,wBAAwB,YACxB,EAAE,QAAQ,OAAO,CAClB;AAGD,QAAO,oBADc,MAAM,QAAQ,UAAU,KAAK,GAAG,SAAS,OAAO,EAAE,CAC/B;;;;;;;;AAS1C,MAAa,uBAAuB,UAAU,EAAE,KAAK;AACnD,KAAI,cACF,QAAO;CAGT,MAAM,mBAAmB,QAAQ,oBAAoB;CACrD,MAAM,mBAAmB,QAAQ,oBAAoB;;;;;CAMrD,MAAM,wBAAwB,OAAO,aAAa;AAChD,MAAI,KAAK,kBAAkB,UAAU,cAAc,CACjD;AAGF,MAAI;GACF,MAAM,SAAS,MAAM,iBAAiB,SAAS;AAC/C,QAAK,kBAAkB,UAAU,eAAe,QAAQ,MAAM,KAAK;AACnE,QAAK,eAAe,SAAS;WACtB,OAAO;AAEd,WAAQ,MAAM,+BAA+B,MAAM;;;AAIvD,MAAK,GAAG,mBAAmB,sBAAsB;AAEjD,MACG,IAAI,iBAAiB,CACrB,IAAI,iBAAiB,CACrB,KAAK;EACJ,aAAa;EACb,OAAO;EACP,WAAW;GACT,OAAO,CAAC,eAAe,SAAS;GAChC,OAAO,CAAC,SAAS;GAClB;EACD,eAAe,EACb,aAAa,OACd;EACD,SAAS,EACP,UAAU,IACX;EACD,GAAI,QAAQ,cAAc,EAAE;EAC7B,CAAC;AAEJ,iBAAgB;AAChB,QAAO;;;;;;AAOT,MAAa,wBAAwB;;;;;;;;;ACjFrC,MAAa,kBAAiD,EAC5D,UACA,eACA,WACA,kBACI;AACJ,iBAAgB;AACd,sBAAoB,YAAY;IAC/B,CAAC,YAAY,CAAC;AACjB,mBAAkB;AAClB,qBAAoB;AACpB,QACE,oCAAC,cAAiB,WAChB,oCAAC,qBACC,oCAAC,qBACC,oCAAC;EAAiB,UAAU;EAAG,GAAI;IAChC,SACgB,CACL,CACF,CACH"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UdpBarChart-D2bfgm7n.js","names":["UdpDistributionChart","StencilDistributionChart","UdpDonutChart
|
|
1
|
+
{"version":3,"file":"UdpBarChart-D2bfgm7n.js","names":["UdpDistributionChart","StencilDistributionChart","UdpDonutChart","StencilDonutChart","UdpLineChart","StencilLineChart","UdpSankeyChart","StencilSankeyChart","StencilXYMultiSeriesChart","UdpBarChart","StencilBarChart"],"sources":["../src/UI/charts/amcharts/UdpDistributionChart.tsx","../src/UI/charts/amcharts/UdpDonutChart.tsx","../src/UI/charts/amcharts/UdpLineChart.tsx","../src/UI/charts/amcharts/UdpSankeyChart.tsx","../src/UI/charts/amcharts/UdpXYMultiSeriesChart.tsx","../src/UI/charts/amcharts/UdpBarChart.tsx"],"sourcesContent":["import React from 'react';\n\nimport { UdpDistributionChart as StencilDistributionChart } from 'udp-react-stencil-component-library';\nimport { XyChartBaseProps } from '../types';\n\nexport interface UdpDistributionChartProps extends XyChartBaseProps{\n valueField: string;\n};\n\nexport const UdpDistributionChart = (props: UdpDistributionChartProps) => {\n {/* @ts-ignore */}\n return <StencilDistributionChart {...props} />;\n};\n","import React from 'react';\n\nimport { UdpDonutChart as StencilDonutChart } from 'udp-react-stencil-component-library';\nimport { BaseProps } from '../types';\n\nexport interface UdpDonutChartProps extends BaseProps{\n valueField: string;\n labelField: string;\n hideLegend: boolean;\n};\nexport const UdpDonutChart: React.FC<UdpDonutChartProps> = (props: UdpDonutChartProps\n) => {\n {/* @ts-ignore */}\n return <StencilDonutChart {...props} />;\n};\n","import React from 'react';\n\nimport { UdpLineChart as StencilLineChart } from 'udp-react-stencil-component-library';\nimport { XyChartBaseProps } from '../types';\n\nexport interface UdpLineChartProps extends XyChartBaseProps{\n xAxisField: string\n yAxisField: string\n};\nexport const UdpLineChart: React.FC<UdpLineChartProps> = (props: UdpLineChartProps\n) => {\n {/* @ts-ignore */}\n return <StencilLineChart {...props} />;\n};\n","import React from 'react';\n\nimport { UdpSankeyChart as StencilSankeyChart } from 'udp-react-stencil-component-library';\nimport { BaseProps } from '../types';\n\nexport interface SankeyChartBaseProps extends BaseProps {\n valueField: string;\n targetIdField: string;\n sourceIdField: string;\n labelFormat?: string;\n tooltipTextFormat?: string;\n nodeTooltipTextFormat?: string;\n paddingRight?: number | string;\n}\n\nexport const UdpSankeyChart = (props: SankeyChartBaseProps) => {\n {/* @ts-ignore */}\n return <StencilSankeyChart {...props} kpisPosition=\"top\"/>;\n};\n","import React from 'react';\nimport { UdpXyMultiSeriesChart as StencilXYMultiSeriesChart } from 'udp-react-stencil-component-library';\nimport {\n BaseProps,\n XYMultiSeriesSeriesProps,\n XYMultiSeriesXAxisProps,\n XYMultiSeriesYAxisProps\n} from '../types';\n\nexport interface UdpXYMultiSeriesChartProps extends BaseProps {\n hideLegend: boolean;\n xAxes: XYMultiSeriesXAxisProps[];\n yAxes: XYMultiSeriesYAxisProps[];\n series: XYMultiSeriesSeriesProps[];\n}\n\nexport const UdpXYMultiSeriesChart = (props: UdpXYMultiSeriesChartProps) => {\n {/* @ts-ignore */}\n return <StencilXYMultiSeriesChart {...props} />;\n};\n","import React from 'react';\n\nimport { UdpBarChart as StencilBarChart } from 'udp-react-stencil-component-library';\nimport { XyChartBaseProps } from '../types';\n\nexport interface UdpBarChartProps extends XyChartBaseProps{\n valueField: string;\n labelField: string;\n};\n\nexport const UdpBarChart: React.FC<UdpBarChartProps> = (props: UdpBarChartProps) => {\n {/* @ts-ignore */}\n return <StencilBarChart {...props} />;\n};\n"],"mappings":";;;;AASA,MAAaA,0BAAwB,UAAqC;AAExE,QAAO,oCAACC,sBAA6B,MAAS;;;;;ACDhD,MAAaC,mBAA+C,UACvD;AAEH,QAAO,oCAACC,eAAsB,MAAS;;;;;ACJzC,MAAaC,kBAA6C,UACrD;AAEH,QAAO,oCAACC,cAAqB,MAAS;;;;;ACGxC,MAAaC,oBAAkB,UAAgC;AAE7D,QAAO,oCAACC;EAAmB,GAAI;EAAO,cAAa;GAAO;;;;;ACD5D,MAAa,yBAAyB,UAAsC;AAE1E,QAAO,oCAACC,uBAA8B,MAAS;;;;;ACRjD,MAAaC,iBAA2C,UAA4B;AAElF,QAAO,oCAACC,aAAoB,MAAS"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UdpMapToolbar-B410Zi_h.js","names":["UdpMapComponent: React.FC<UdpMapComponentProps>","Map","UdpMapToolbar: React.FC<UdpMapToolbarProps>","MapToolbar"],"sources":["../src/UI/maps/UdpMapComponent.tsx","../src/UI/maps/UdpMapToolbar.tsx"],"sourcesContent":["import React from 'react';\nimport { MapComponent as Map } from 'udp-react-stencil-component-library';\n\nexport interface UdpMapComponentProps {\n /* Map instance */\n map: any;\n\n /* Method to set map component when using the toolbar */\n handleSetMapComponent?: any;\n\n /* Feature data (in either Geo-JSON format or not). Geo-JSON format: [{ type: string, id: string, geometry: { type: 'Point' | 'LineString' | 'Polygon', coordinates: Coordinate }, properties: any }] */\n data?: any[];\n\n /* Boolean stating if the data is in Geo-JSON format */\n isGeoJsonFormat?: boolean;\n\n /* Method - If data is not in Geo-JSON format, returns data in Geo-JSON format */\n geoJsonMappingConfig?: any;\n\n /* Allows zoom */\n enableZoom?: boolean;\n\n /* Default map zoom */\n mapZoom?: number;\n\n /* Default map center */\n mapCenter?: any;\n\n /* Map height */\n mapHeight?: string;\n\n /* Coordinate reference system used */\n crs?: any;\n\n /* Map feature projection used */\n mapProjection?: string;\n\n /* Map data projection used */\n mapDataProjection?: string;\n\n /* Method - Custom filter for map features */\n getFilteredMapData?: any;\n\n /* Method - Returns custom styles for features */\n getFeatureStyles?: any;\n\n /* Method - Returns custom styles for selected features */\n getSelectedFeatureStyles?: any;\n\n /* Custom filter panel */\n filterPanel?: string;\n\n /* Method - Callback to filter features from custom filter panel */\n filterPanelCallback?: any;\n\n /* Allows selecting tile layer */\n enableTileSelection?: boolean;\n\n /* List of tile layers visible on the map */\n tileLayersOptions?: any[];\n\n /* Default tile layer name */\n defaultTileOptionName?: string;\n\n /* List of options for vector layers */\n layerOptions?: any[];\n\n /* Vector layers selected in the layer filter on initial map load */\n initialSelectedLayers?: any[];\n\n /* Custom action panel for selected features */\n bulkSelectedFeaturesActionPanel?: string;\n\n /* Method - Retrieves selected features when bulk selected */\n handleSetSelectedFeaturesOnBulkSelect: any;\n\n /* Method - Retrieves selected feature when individually selected */\n handleSetSelectedFeatureOnSelect: any;\n\n /* Enables filtering layers by role */\n filterLayersByRole: boolean;\n\n /* Layer keys to get the current feature layer when adding layers with features to the map */\n layerKeys?: string[];\n\n /* Layer key separator to get the current feature layer when adding layers with features to the map */\n layerKeySeparator?: string;\n\n /* Authenticated user from Unity - used to filter layers by role */\n user?: any;\n\n /* Layers assigned to roles */\n layerRoles?: any;\n\n /* Filtered layer options by role */\n filteredLayerOptionsByRole: any[];\n\n /* Method to set filtered layer options by role */\n handleSetFilteredLayerOptionsByRole?: any;\n\n /* Map is read-only (setting true removes the add, edit, delete functionality) */\n readOnlyMap: boolean;\n\n /* Enables viewing a selected feature */\n enableViewFeature: boolean;\n\n /* Method to enable viewing a selected feature */\n handleViewFeature: any;\n\n /* Enables deleting a selected feature */\n enableDeleteFeature: boolean;\n\n /* Method to handle deleting a selected feature */\n handleDeleteFeature?: any;\n\n /* Enables editing a selected feature */\n enableEditFeature: boolean;\n\n /* Method to handle editing a selected feature */\n handleEditFeature?: any;\n\n /* State - if bulk selection is active */\n bulkSelectionActive: boolean;\n\n /* State - if bulk split is active */\n splitActive: boolean;\n\n /* State - if drag box is active */\n enableDragBox: boolean;\n\n /* Select feature interaction */\n selectFeatureInteraction: any;\n\n /* Method to set the selected feature property values */\n handleSetSelectedFeatureProperties: any;\n\n /* Coordinates of selected features */\n selectedFeatureCoordinates: any[];\n\n /* Properties of selected features */\n selectedFeatureProperties: any;\n\n /* Key value pairs of selected features */\n // selectedFeatureObjectKeyValuePairs: any[];\n\n /* Enables button to add a new feature */\n enableAddNewFeature: boolean;\n\n /* Callback method to return map zoom and extent when the resolution changes */\n handleGetZoomExtent?: any;\n\n /* Selected feature Id from external source */\n selectedFeatureIdExternal?: string | number;\n\n /* List of layers that are read only */\n readOnlyLayers?: string[];\n\n /* Additional on close popover event */\n additionalOnclosePopover?: (event: any) => void;\n\n /* Array of primary action configurations for the popover (e.g., buttons) */\n popoverPrimaryActions: any[];\n\n /* Array of additional actions for the popover's \"more\" icon button (e.g., menu items) */\n popoverMoreIconButtonActions: any[];\n\n /* Function to get the message text to display in the popover, based on feature data */\n getMessagePopover: (data: any) => string;\n\n /* Function to get the icon to display in the popover, based on feature data */\n getMessageIconPopover: (data: any) => any;\n\n /* Boolean to control whether the message icon in the popover should be hidden */\n hideMessageIconPopover: boolean;\n\n /* Configuration object for customizing the popover card's appearance or behavior */\n popoverCardConfig: any;\n\n /* Array of currently selected layers on the map */\n selectedLayers: any[];\n\n /* Handler for when layers are selected (e.g., from a UI control) */\n handleSelectLayers: (value: any) => void;\n\n /* Handler to set the selected layers programmatically */\n handleSetSelectedLayers: (value: any) => void;\n\n /* Function or object to retrieve vector layer sources for the map */\n getVectorLayerSources: any;\n\n minZoom?: number;\n maxZoom?: number\n}\n\nexport const UdpMapComponent: React.FC<UdpMapComponentProps> = (props: UdpMapComponentProps) => {\n return <Map {...props} />;\n};\n","import React from 'react';\nimport { UdpMapToolbar as MapToolbar } from 'udp-react-stencil-component-library';\n\nexport interface AddFeaturePanelConfig {\n getLayerOptionsFromLayerValues?: (\n layerValues: any[]\n ) => { label: string; value: any }[];\n getFeatureTypeOptionsFromLayerValue?: (\n layerValue: any\n ) => { label: string; value: any }[];\n}\n\nexport interface UdpMapToolbarProps {\n /* Map instance */\n map: any;\n\n /* Title appearing on map */\n mapTitle?: string;\n\n /* Map feature projection used */\n mapProjection?: string;\n\n /* Method - Returns custom styles for features */\n getFeatureStyles?: any;\n\n /* Method - Returns custom styles for selected features */\n getSelectedFeatureStyles?: any;\n\n /* Custom filter panel */\n filterPanel?: string;\n\n /* Allows selecting tile layer */\n enableTileSelection?: boolean;\n\n /* List of tile layers visible on the map */\n tileLayersOptions?: any[];\n\n /* Default tile layer name */\n defaultTileOptionName?: string;\n\n /* List of options for vector layers */\n layerOptions?: any[];\n\n /* Vector layers selected in the layer filter on initial map load */\n initialSelectedLayers?: any[];\n\n /* Custom action panel for selected features */\n bulkSelectedFeaturesActionPanel?: string;\n\n /* Method - Retrieves selected features when bulk selected */\n handleSetSelectedFeaturesOnBulkSelect: any;\n\n /* Callback method to refresh map */\n handleRefresh?: any;\n\n /* Custom tooltip message on refresh button */\n refreshButtonTooltip?: string;\n\n /* Map is read-only (setting true removes the add, edit, delete functionality) */\n readOnlyMap: boolean;\n\n /* Enables adding a new feature by drawing on the map */\n enableAdd: boolean;\n\n /* When adding features on the map by drawing, this callback method returns the newly added features */\n handleAddNewFeatures: any;\n\n /* When adding features by drawing, add multiple features */\n addMultipleFeatures: boolean;\n\n /* Enables splitting line strings on the map */\n enableSplitFeature: boolean;\n\n /* Callback function to return split feature */\n handleSplitFeature: any;\n\n /* Method to set the selected feature properties */\n handleSetSelectedFeatureProperties: any;\n\n /* Layer options filtered by role */\n filteredLayerOptionsByRole: any[];\n\n /* Set bulk selection state to active */\n handleSetBulkSelectionActive: any;\n\n /* Boolean - if drag box interaction is currently active */\n enableDragBox: boolean;\n\n /* Set enableDragBox state */\n handleSetEnableDragBox: any;\n\n /* Boolean - if split interaction is currently active */\n splitActive: boolean;\n\n /* Set splitActive state */\n handleSetSplitActive: any;\n\n /* Interaction for select feature */\n selectFeatureInteraction: any;\n\n /* Method that handles adding interactions to the map */\n handleAddInteractionToMap: any;\n\n /* Show the button to add a new feature by drawing on the map */\n enableAddNewFeature: boolean;\n\n /* Callback method returns the new feature added */\n handleEnableAddNewFeature: any;\n\n /* Callback method returns selected layers */\n /* List of layers that are read only */\n readOnlyLayers?: string[];\n\n /* Array of currently selected layers on the map */\n selectedLayers: any[];\n\n /* Handler to set the selected layers programmatically */\n handleSetSelectedLayers: (value: any) => void;\n\n /* Configuration object for customizing the add feature panel's appearance or behavior */\n addFeaturePanelConfig?: AddFeaturePanelConfig;\n}\n\nexport const UdpMapToolbar: React.FC<UdpMapToolbarProps> = (props: UdpMapToolbarProps) => {\n return <MapToolbar {...props} />;\n};\n"],"mappings":";;;;AAkMA,MAAaA,mBAAmD,UAAgC;AAC9F,QAAO,oCAACC,cAAQ,MAAS;;;;;ACxE3B,MAAaC,mBAA+C,UAA8B;AACxF,QAAO,oCAACC,eAAe,MAAS"}
|
|
1
|
+
{"version":3,"file":"UdpMapToolbar-B410Zi_h.js","names":["Map","UdpMapToolbar","MapToolbar"],"sources":["../src/UI/maps/UdpMapComponent.tsx","../src/UI/maps/UdpMapToolbar.tsx"],"sourcesContent":["import React from 'react';\nimport { MapComponent as Map } from 'udp-react-stencil-component-library';\n\nexport interface UdpMapComponentProps {\n /* Map instance */\n map: any;\n\n /* Method to set map component when using the toolbar */\n handleSetMapComponent?: any;\n\n /* Feature data (in either Geo-JSON format or not). Geo-JSON format: [{ type: string, id: string, geometry: { type: 'Point' | 'LineString' | 'Polygon', coordinates: Coordinate }, properties: any }] */\n data?: any[];\n\n /* Boolean stating if the data is in Geo-JSON format */\n isGeoJsonFormat?: boolean;\n\n /* Method - If data is not in Geo-JSON format, returns data in Geo-JSON format */\n geoJsonMappingConfig?: any;\n\n /* Allows zoom */\n enableZoom?: boolean;\n\n /* Default map zoom */\n mapZoom?: number;\n\n /* Default map center */\n mapCenter?: any;\n\n /* Map height */\n mapHeight?: string;\n\n /* Coordinate reference system used */\n crs?: any;\n\n /* Map feature projection used */\n mapProjection?: string;\n\n /* Map data projection used */\n mapDataProjection?: string;\n\n /* Method - Custom filter for map features */\n getFilteredMapData?: any;\n\n /* Method - Returns custom styles for features */\n getFeatureStyles?: any;\n\n /* Method - Returns custom styles for selected features */\n getSelectedFeatureStyles?: any;\n\n /* Custom filter panel */\n filterPanel?: string;\n\n /* Method - Callback to filter features from custom filter panel */\n filterPanelCallback?: any;\n\n /* Allows selecting tile layer */\n enableTileSelection?: boolean;\n\n /* List of tile layers visible on the map */\n tileLayersOptions?: any[];\n\n /* Default tile layer name */\n defaultTileOptionName?: string;\n\n /* List of options for vector layers */\n layerOptions?: any[];\n\n /* Vector layers selected in the layer filter on initial map load */\n initialSelectedLayers?: any[];\n\n /* Custom action panel for selected features */\n bulkSelectedFeaturesActionPanel?: string;\n\n /* Method - Retrieves selected features when bulk selected */\n handleSetSelectedFeaturesOnBulkSelect: any;\n\n /* Method - Retrieves selected feature when individually selected */\n handleSetSelectedFeatureOnSelect: any;\n\n /* Enables filtering layers by role */\n filterLayersByRole: boolean;\n\n /* Layer keys to get the current feature layer when adding layers with features to the map */\n layerKeys?: string[];\n\n /* Layer key separator to get the current feature layer when adding layers with features to the map */\n layerKeySeparator?: string;\n\n /* Authenticated user from Unity - used to filter layers by role */\n user?: any;\n\n /* Layers assigned to roles */\n layerRoles?: any;\n\n /* Filtered layer options by role */\n filteredLayerOptionsByRole: any[];\n\n /* Method to set filtered layer options by role */\n handleSetFilteredLayerOptionsByRole?: any;\n\n /* Map is read-only (setting true removes the add, edit, delete functionality) */\n readOnlyMap: boolean;\n\n /* Enables viewing a selected feature */\n enableViewFeature: boolean;\n\n /* Method to enable viewing a selected feature */\n handleViewFeature: any;\n\n /* Enables deleting a selected feature */\n enableDeleteFeature: boolean;\n\n /* Method to handle deleting a selected feature */\n handleDeleteFeature?: any;\n\n /* Enables editing a selected feature */\n enableEditFeature: boolean;\n\n /* Method to handle editing a selected feature */\n handleEditFeature?: any;\n\n /* State - if bulk selection is active */\n bulkSelectionActive: boolean;\n\n /* State - if bulk split is active */\n splitActive: boolean;\n\n /* State - if drag box is active */\n enableDragBox: boolean;\n\n /* Select feature interaction */\n selectFeatureInteraction: any;\n\n /* Method to set the selected feature property values */\n handleSetSelectedFeatureProperties: any;\n\n /* Coordinates of selected features */\n selectedFeatureCoordinates: any[];\n\n /* Properties of selected features */\n selectedFeatureProperties: any;\n\n /* Key value pairs of selected features */\n // selectedFeatureObjectKeyValuePairs: any[];\n\n /* Enables button to add a new feature */\n enableAddNewFeature: boolean;\n\n /* Callback method to return map zoom and extent when the resolution changes */\n handleGetZoomExtent?: any;\n\n /* Selected feature Id from external source */\n selectedFeatureIdExternal?: string | number;\n\n /* List of layers that are read only */\n readOnlyLayers?: string[];\n\n /* Additional on close popover event */\n additionalOnclosePopover?: (event: any) => void;\n\n /* Array of primary action configurations for the popover (e.g., buttons) */\n popoverPrimaryActions: any[];\n\n /* Array of additional actions for the popover's \"more\" icon button (e.g., menu items) */\n popoverMoreIconButtonActions: any[];\n\n /* Function to get the message text to display in the popover, based on feature data */\n getMessagePopover: (data: any) => string;\n\n /* Function to get the icon to display in the popover, based on feature data */\n getMessageIconPopover: (data: any) => any;\n\n /* Boolean to control whether the message icon in the popover should be hidden */\n hideMessageIconPopover: boolean;\n\n /* Configuration object for customizing the popover card's appearance or behavior */\n popoverCardConfig: any;\n\n /* Array of currently selected layers on the map */\n selectedLayers: any[];\n\n /* Handler for when layers are selected (e.g., from a UI control) */\n handleSelectLayers: (value: any) => void;\n\n /* Handler to set the selected layers programmatically */\n handleSetSelectedLayers: (value: any) => void;\n\n /* Function or object to retrieve vector layer sources for the map */\n getVectorLayerSources: any;\n\n minZoom?: number;\n maxZoom?: number\n}\n\nexport const UdpMapComponent: React.FC<UdpMapComponentProps> = (props: UdpMapComponentProps) => {\n return <Map {...props} />;\n};\n","import React from 'react';\nimport { UdpMapToolbar as MapToolbar } from 'udp-react-stencil-component-library';\n\nexport interface AddFeaturePanelConfig {\n getLayerOptionsFromLayerValues?: (\n layerValues: any[]\n ) => { label: string; value: any }[];\n getFeatureTypeOptionsFromLayerValue?: (\n layerValue: any\n ) => { label: string; value: any }[];\n}\n\nexport interface UdpMapToolbarProps {\n /* Map instance */\n map: any;\n\n /* Title appearing on map */\n mapTitle?: string;\n\n /* Map feature projection used */\n mapProjection?: string;\n\n /* Method - Returns custom styles for features */\n getFeatureStyles?: any;\n\n /* Method - Returns custom styles for selected features */\n getSelectedFeatureStyles?: any;\n\n /* Custom filter panel */\n filterPanel?: string;\n\n /* Allows selecting tile layer */\n enableTileSelection?: boolean;\n\n /* List of tile layers visible on the map */\n tileLayersOptions?: any[];\n\n /* Default tile layer name */\n defaultTileOptionName?: string;\n\n /* List of options for vector layers */\n layerOptions?: any[];\n\n /* Vector layers selected in the layer filter on initial map load */\n initialSelectedLayers?: any[];\n\n /* Custom action panel for selected features */\n bulkSelectedFeaturesActionPanel?: string;\n\n /* Method - Retrieves selected features when bulk selected */\n handleSetSelectedFeaturesOnBulkSelect: any;\n\n /* Callback method to refresh map */\n handleRefresh?: any;\n\n /* Custom tooltip message on refresh button */\n refreshButtonTooltip?: string;\n\n /* Map is read-only (setting true removes the add, edit, delete functionality) */\n readOnlyMap: boolean;\n\n /* Enables adding a new feature by drawing on the map */\n enableAdd: boolean;\n\n /* When adding features on the map by drawing, this callback method returns the newly added features */\n handleAddNewFeatures: any;\n\n /* When adding features by drawing, add multiple features */\n addMultipleFeatures: boolean;\n\n /* Enables splitting line strings on the map */\n enableSplitFeature: boolean;\n\n /* Callback function to return split feature */\n handleSplitFeature: any;\n\n /* Method to set the selected feature properties */\n handleSetSelectedFeatureProperties: any;\n\n /* Layer options filtered by role */\n filteredLayerOptionsByRole: any[];\n\n /* Set bulk selection state to active */\n handleSetBulkSelectionActive: any;\n\n /* Boolean - if drag box interaction is currently active */\n enableDragBox: boolean;\n\n /* Set enableDragBox state */\n handleSetEnableDragBox: any;\n\n /* Boolean - if split interaction is currently active */\n splitActive: boolean;\n\n /* Set splitActive state */\n handleSetSplitActive: any;\n\n /* Interaction for select feature */\n selectFeatureInteraction: any;\n\n /* Method that handles adding interactions to the map */\n handleAddInteractionToMap: any;\n\n /* Show the button to add a new feature by drawing on the map */\n enableAddNewFeature: boolean;\n\n /* Callback method returns the new feature added */\n handleEnableAddNewFeature: any;\n\n /* Callback method returns selected layers */\n /* List of layers that are read only */\n readOnlyLayers?: string[];\n\n /* Array of currently selected layers on the map */\n selectedLayers: any[];\n\n /* Handler to set the selected layers programmatically */\n handleSetSelectedLayers: (value: any) => void;\n\n /* Configuration object for customizing the add feature panel's appearance or behavior */\n addFeaturePanelConfig?: AddFeaturePanelConfig;\n}\n\nexport const UdpMapToolbar: React.FC<UdpMapToolbarProps> = (props: UdpMapToolbarProps) => {\n return <MapToolbar {...props} />;\n};\n"],"mappings":";;;;AAkMA,MAAa,mBAAmD,UAAgC;AAC9F,QAAO,oCAACA,cAAQ,MAAS;;;;;ACxE3B,MAAaC,mBAA+C,UAA8B;AACxF,QAAO,oCAACC,eAAe,MAAS"}
|