udp-react-enterprise-component-library 25.18.1-beta.63 → 25.18.1-beta.65

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (82) hide show
  1. package/dist/AgTable-B2xTzAm2.js.map +1 -1
  2. package/dist/AmChart-CTixft8X.js.map +1 -1
  3. package/dist/{AuthProvider-C8qG0V63.js → AuthProvider-J79EBNDc.js} +2 -2
  4. package/dist/AuthProvider-J79EBNDc.js.map +1 -0
  5. package/dist/DashboardWidget-CsOrr74H.js.map +1 -1
  6. package/dist/Field-Cda5rJe2.js.map +1 -1
  7. package/dist/Form-DbOA5j38.js.map +1 -1
  8. package/dist/FormButtons-BTCO-pzW.js.map +1 -1
  9. package/dist/LayoutUnit-D4jJvonh.js.map +1 -1
  10. package/dist/{MenuProvider-BuTAUs0Z.js → MenuProvider-BqEZve2y.js} +2 -2
  11. package/dist/MenuProvider-BqEZve2y.js.map +1 -0
  12. package/dist/NumberOperator-p4HsHHx3.js.map +1 -1
  13. package/dist/PAHAdditionalRightComponent-DMOU9Mho.js.map +1 -1
  14. package/dist/PDFViewer-B4nJKbIy.js.map +1 -1
  15. package/dist/PageContext-BpOBJHpb.js.map +1 -1
  16. package/dist/PaymentForm-DFJrSIy8.js.map +1 -1
  17. package/dist/PrimaryActionHeader-DBJpROPu.js.map +1 -1
  18. package/dist/SearchOperator-D9838PIe.js.map +1 -1
  19. package/dist/SearchUtilities-DUW0kaw_.js.map +1 -1
  20. package/dist/{Shell-a2L-cKzs.js → Shell-BE_Aq6W2.js} +5 -5
  21. package/dist/{Shell-a2L-cKzs.js.map → Shell-BE_Aq6W2.js.map} +1 -1
  22. package/dist/{TenantProvider-CCrrxyiD.js → TenantProvider-BeFMHYP8.js} +2 -2
  23. package/dist/TenantProvider-BeFMHYP8.js.map +1 -0
  24. package/dist/{UdpAppProvider-BuJv7P-y.js → UdpAppProvider-DXgzyeHZ.js} +2 -2
  25. package/dist/UdpAppProvider-DXgzyeHZ.js.map +1 -0
  26. package/dist/UdpBarChart-D2bfgm7n.js.map +1 -1
  27. package/dist/UdpMapToolbar-B410Zi_h.js.map +1 -1
  28. package/dist/{UdpTransactionsPage-CDyNjmyo.js → UdpTransactionsPage-B1Ia9x62.js} +12 -10
  29. package/dist/UdpTransactionsPage-B1Ia9x62.js.map +1 -0
  30. package/dist/UnityIconLibrary-CjIwzfjv.js.map +1 -1
  31. package/dist/actionSummary-D0CwyTXJ.js.map +1 -1
  32. package/dist/advancedSearchBuilder-7ixhIwLW.js.map +1 -1
  33. package/dist/aggridHelpers-BvrSzjdD.js.map +1 -1
  34. package/dist/apiHelpers-WIR8pqy0.js.map +1 -1
  35. package/dist/{auth-DZmqyrT1.js → auth-BWJ4-JF-.js} +2 -2
  36. package/dist/auth-BWJ4-JF-.js.map +1 -0
  37. package/dist/catalogStore-DP2GxpTJ.js.map +1 -1
  38. package/dist/charts-pX01x8rO.js.map +1 -1
  39. package/dist/form-Dj1zVw6K.js.map +1 -1
  40. package/dist/hooks-BNndjGer.js.map +1 -1
  41. package/dist/index.js +10 -10
  42. package/dist/lookupsStore-DPI8oD9R.js.map +1 -1
  43. package/dist/maps-BgmvNpkU.js.map +1 -1
  44. package/dist/{menuUtilities-Da5uVIJ8.js → menuUtilities-BOnqojY6.js} +12 -10
  45. package/dist/menuUtilities-BOnqojY6.js.map +1 -0
  46. package/dist/newGrid-zmtQXU5G.js.map +1 -1
  47. package/dist/{profile-BA_cbWI8.js → profile-7BieC5qc.js} +3 -3
  48. package/dist/profile-7BieC5qc.js.map +1 -0
  49. package/dist/providers/index.js +1 -1
  50. package/dist/routes/index.js +1 -1
  51. package/dist/{routes-DM7kVvCm.js → routes-DafRlYVQ.js} +11 -9
  52. package/dist/routes-DafRlYVQ.js.map +1 -0
  53. package/dist/shell/index.js +1 -1
  54. package/dist/shell/ui/profile/index.js +1 -1
  55. package/dist/shellStore-C8zfPsZ-.js.map +1 -1
  56. package/dist/stepper-BaIo_Rol.js.map +1 -1
  57. package/dist/teleporterStore-CjUFtATo.js.map +1 -1
  58. package/dist/tenantStore-CFYu7ndZ.js.map +1 -1
  59. package/dist/types/src/routes/PrivateRoute.d.ts.map +1 -1
  60. package/dist/types/src/udp/pages/UdpTransactionsPage/sidesheets/AttachmentTransaction.d.ts.map +1 -1
  61. package/dist/types/src/utilities/menus/menuUtilities.d.ts.map +1 -1
  62. package/dist/types/tsconfig.tsbuildinfo +1 -1
  63. package/dist/udp/pages/UdpPages/index.js +1 -1
  64. package/dist/udp/pages/UdpTransactionsPage/index.js +1 -1
  65. package/dist/useAuthedUser-Bhr7Yhlg.js.map +1 -1
  66. package/dist/useQueryExecutors-DuuHrj2M.js.map +1 -1
  67. package/dist/useUser-wpHGo6jU.js.map +1 -1
  68. package/dist/utilities/auth/index.js +3 -3
  69. package/dist/utilities/menus/index.js +1 -1
  70. package/dist/utilities/tenant/index.js +1 -1
  71. package/dist/workflowStore-CCoN5uHd.js.map +1 -1
  72. package/export-map.json +1 -1
  73. package/package.json +1 -1
  74. package/dist/AuthProvider-C8qG0V63.js.map +0 -1
  75. package/dist/MenuProvider-BuTAUs0Z.js.map +0 -1
  76. package/dist/TenantProvider-CCrrxyiD.js.map +0 -1
  77. package/dist/UdpAppProvider-BuJv7P-y.js.map +0 -1
  78. package/dist/UdpTransactionsPage-CDyNjmyo.js.map +0 -1
  79. package/dist/auth-DZmqyrT1.js.map +0 -1
  80. package/dist/menuUtilities-Da5uVIJ8.js.map +0 -1
  81. package/dist/profile-BA_cbWI8.js.map +0 -1
  82. package/dist/routes-DM7kVvCm.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"AgTable-B2xTzAm2.js","names":["useStyles","ArrowDropDownIcon","globalModules: Module[]","AgTableButtons: FC<AgTableButttonsProps>","allColumnIds: string[]","AgTable: FC<AgTableProps>","calculateRowHeight: (\n params: RowHeightParams\n ) => number | null | undefined"],"sources":["../src/AGLicense.js","../src/utilities/aggrid/SplitButton.jsx","../src/utilities/aggrid/AgTable.tsx"],"sourcesContent":["export const LicenseKey =\n 'Using_this_{AG_Grid}_Enterprise_key_{AG-080613}_in_excess_of_the_licence_granted_is_not_permitted___Please_report_misuse_to_legal@ag-grid.com___For_help_with_changing_this_key_please_contact_info@ag-grid.com___{Univerus_Software_Inc}_is_granted_a_{Single_Application}_Developer_License_for_the_application_{MAIS_eRec}_only_for_{1}_Front-End_JavaScript_developer___All_Front-End_JavaScript_developers_working_on_{MAIS_eRec}_need_to_be_licensed___{MAIS_eRec}_has_not_been_granted_a_Deployment_License_Add-on___This_key_works_with_{AG_Grid}_Enterprise_versions_released_before_{28_June_2026}____[v3]_[01]_MTc4MjYwMTIwMDAwMA==5c7d1487ecb13b28e75415d34b7cf694';\n","import React, { Children, useCallback } from 'react';\nimport {\n usePopupState,\n bindTrigger,\n bindPopper,\n} from 'material-ui-popup-state/hooks';\nimport useId from '../../UI/widgets/utils/useId';\nimport {\n Button,\n ButtonGroup,\n Popper,\n Grow,\n Paper,\n ClickAwayListener,\n MenuList,\n makeStyles,\n} from '@material-ui/core';\nimport { ArrowDropDown as ArrowDropDownIcon } from '@material-ui/icons';\n\nconst useStyles = makeStyles(\n theme => ({\n arrowButtonRoot: {\n padding: 0,\n },\n menu: {\n zIndex: theme.zIndex.tooltip,\n },\n paper: {},\n }),\n { name: 'SplitButton' }\n);\n\n/**\n * https://material-ui.com/components/button-group/#split-button\n */\nexport const SplitButton = props => {\n const classes = useStyles(props);\n const {\n popupName,\n color,\n size,\n variant,\n label,\n 'aria-label': ariaLabel,\n children,\n } = props;\n const popupId = useId(popupName);\n const popupState = usePopupState({ variant: 'popper', popupId });\n\n const firstItem = Children.toArray(children)[0];\n\n const setAnchorEl = useCallback(ref => {\n if (ref) popupState.setAnchorEl(ref);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n <React.Fragment>\n <ButtonGroup\n variant={variant}\n color={color}\n size={size}\n ref={setAnchorEl}\n aria-label={ariaLabel}\n >\n <Button onClick={firstItem?.props?.onClick}>\n {label || firstItem?.props?.children}\n </Button>\n <Button\n {...bindTrigger(popupState)}\n className={classes.arrowButtonRoot}\n color={color}\n size=\"small\"\n aria-expanded={popupState.isOpen ? true : undefined}\n // @fixme Allow labels for this button\n >\n <ArrowDropDownIcon />\n </Button>\n </ButtonGroup>\n <Popper\n {...bindPopper(popupState)}\n role={undefined}\n transition\n disablePortal\n className={classes.menu}\n >\n {({ TransitionProps, placement }) => (\n <Grow\n {...TransitionProps}\n style={{\n transformOrigin:\n placement === 'bottom' ? 'center top' : 'center bottom',\n }}\n >\n <Paper className={classes.paper}>\n <ClickAwayListener onClickAway={popupState.close}>\n <MenuList /*id={popupState.popupId}*/>{children}</MenuList>\n </ClickAwayListener>\n </Paper>\n </Grow>\n )}\n </Popper>\n </React.Fragment>\n );\n};\n","import { AllModules, RowHeightParams } from '@ag-grid-enterprise/all-modules';\nimport {\n AgGridEvent,\n ColumnApi,\n GridApi,\n Module\n} from '@ag-grid-enterprise/all-modules/dist/cjs/main';\nimport '@ag-grid-enterprise/all-modules/dist/styles/ag-grid.css';\nimport '@ag-grid-enterprise/all-modules/dist/styles/ag-theme-material.css';\nimport './ag-grid-styles.scss';\nimport { AgGridReact, AgGridReactProps } from '@ag-grid-community/react';\nimport { ExcelExportModule } from '@ag-grid-enterprise/excel-export';\nimport {\n Box,\n Button,\n Grid,\n makeStyles,\n MenuItem,\n useTheme\n} from '@material-ui/core';\nimport clsx from 'clsx';\nimport invariant from 'invariant';\nimport React, {\n Dispatch,\n FC,\n Reducer,\n useCallback,\n useMemo,\n useReducer\n} from 'react';\nimport { SplitButton } from './SplitButton';\nimport { LicenseManager } from '@ag-grid-enterprise/core';\nimport { LicenseKey } from '../../AGLicense';\n\nLicenseManager.setLicenseKey(LicenseKey);\n\nconst useStyles = makeStyles(\n (theme) => ({\n root: {\n flex: 1,\n height: (props: any) =>\n props?.height ? props.height : 'calc(100vh - 280px)'\n },\n AgGrid: (props: any) => ({\n '--ag-control-panel-background-color': theme.palette.primary.light,\n '--ag-checkbox-checked-color': theme.palette.primary.main,\n ...(props.hideHeader ? {} : {\n '--ag-header-background-color': theme.palette.primary.main,\n '--ag-header-foreground-color': theme.palette.primary.light,\n }),\n })\n }),\n { name: 'AgTable' }\n);\n\nconst globalModules: Module[] = [...AllModules, ExcelExportModule];\n\ninterface AgGridApi {\n gridApi?: GridApi;\n gridColumnApi?: ColumnApi;\n}\n\ninterface UseAgGridApi extends AgGridApi {\n onGridReady: Dispatch<AgGridEvent>;\n}\n\n/**\n * Utility hook for getting the ag-grid APIs into state\n */\nexport function useAgGridApi(): UseAgGridApi {\n const [{ gridApi, gridColumnApi }, onGridReady] = useReducer<\n Reducer<AgGridApi, AgGridEvent>\n >((state, params) => {\n return { gridApi: params.api, gridColumnApi: params.columnApi };\n }, {});\n\n return { gridApi, gridColumnApi, onGridReady };\n}\n\nexport interface AgTableButttonsProps {\n gridApi?: GridApi;\n gridColumnApi?: ColumnApi;\n}\n\n/**\n * Size/Export buttons for AgGrid tables\n */\nexport const AgTableButtons: FC<AgTableButttonsProps> = (props) => {\n const { gridApi, gridColumnApi } = props;\n\n const exportToCSV = useCallback(() => {\n invariant(gridApi, `gridApi not ready`);\n gridApi?.exportDataAsCsv({\n allColumns: true,\n fileName: 'export'\n });\n }, [gridApi]);\n const exportToExcel = useCallback(() => {\n invariant(gridApi, `gridApi not ready`);\n gridApi?.exportDataAsExcel({\n allColumns: true,\n fileName: 'export'\n });\n }, [gridApi]);\n\n const sizeToFit = useCallback(\n (params: any) => {\n invariant(gridApi, `gridApi not ready`);\n gridApi?.sizeColumnsToFit();\n },\n [gridApi]\n );\n\n const autoSizeAll = useCallback(\n (skipHeader: any) => {\n invariant(gridColumnApi, `gridColumnApi not ready`);\n const allColumnIds: string[] = [];\n gridColumnApi\n ?.getAllColumns()\n ?.forEach((column: { getColId: () => string }) => {\n allColumnIds.push(column.getColId());\n });\n gridColumnApi?.autoSizeColumns(allColumnIds, skipHeader);\n },\n [gridColumnApi]\n );\n const autoSizeAllWithHeader = useCallback(\n () => autoSizeAll(false),\n [autoSizeAll]\n );\n const autoSizeAllWithoutHeader = useCallback(\n () => autoSizeAll(false),\n [autoSizeAll]\n );\n\n return (\n // @ts-ignore\n <Box mb={1}>\n <Grid container direction='row' spacing={1} justify='flex-end'>\n <Grid item>\n <Button variant='outlined' size='small' onClick={sizeToFit}>\n Size to Fit\n </Button>\n </Grid>\n <Grid item>\n <SplitButton\n popupName='auto-size'\n variant='outlined'\n size='small'\n label='Auto-Size'\n >\n <MenuItem onClick={autoSizeAllWithHeader}>All</MenuItem>\n <MenuItem onClick={autoSizeAllWithoutHeader}>Skip Header</MenuItem>\n </SplitButton>\n </Grid>\n <Grid item>\n <SplitButton\n popupName='export'\n variant='outlined'\n size='small'\n label='Export'\n >\n <MenuItem onClick={exportToExcel}>Excel</MenuItem>\n <MenuItem onClick={exportToCSV}>CSV</MenuItem>\n </SplitButton>\n </Grid>\n </Grid>\n </Box>\n );\n};\n\ninterface AgTableProps extends AgGridReactProps {\n dynamicSizing?: boolean;\n className?: string;\n isUsingAgRowHeight?: boolean;\n hideHeader?: boolean; // Add the hideHeader prop\n}\n\n/**\n * AgGrid with tweaks\n */\nexport const AgTable: FC<AgTableProps> = (props) => {\n const classes = useStyles(props);\n const {\n modules: modulesProp,\n className,\n getRowHeight,\n rowModelType,\n isUsingAgRowHeight = false,\n hideHeader = false // Add the hideHeader prop to the destructuring\n } = props;\n const modules = useMemo<Module[]>(\n () => (modulesProp ? globalModules.concat(modulesProp) : globalModules),\n [modulesProp]\n );\n\n const calculateRowHeight: (\n params: RowHeightParams\n ) => number | null | undefined = (params) => {\n if (params.node.level === 0) {\n return 48;\n }\n if (params.node.level === 1) {\n return 32;\n }\n return 16;\n };\n\n const rowHeightFunction = useCallback(\n (params) => {\n if (rowModelType === 'serverSide') {\n if (isUsingAgRowHeight) {\n return undefined;\n } else {\n if (getRowHeight) {\n return getRowHeight(params);\n } else {\n return calculateRowHeight(params);\n }\n }\n } else {\n if (getRowHeight) {\n return getRowHeight(params);\n }\n }\n return undefined;\n },\n [getRowHeight, isUsingAgRowHeight]\n );\n\n const onGridSizeChanged = () => {\n if (props.dynamicSizing) {\n props.api?.sizeColumnsToFit();\n }\n };\n\n return (\n <div className={clsx('ag-theme-material', classes.root, className)}>\n <AgGridReact\n {...props}\n modules={modules}\n onGridSizeChanged={onGridSizeChanged}\n getRowHeight={rowHeightFunction}\n className={classes.AgGrid}\n />\n </div>\n );\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"AgTable-B2xTzAm2.js","names":["useStyles","ArrowDropDownIcon"],"sources":["../src/AGLicense.js","../src/utilities/aggrid/SplitButton.jsx","../src/utilities/aggrid/AgTable.tsx"],"sourcesContent":["export const LicenseKey =\n 'Using_this_{AG_Grid}_Enterprise_key_{AG-080613}_in_excess_of_the_licence_granted_is_not_permitted___Please_report_misuse_to_legal@ag-grid.com___For_help_with_changing_this_key_please_contact_info@ag-grid.com___{Univerus_Software_Inc}_is_granted_a_{Single_Application}_Developer_License_for_the_application_{MAIS_eRec}_only_for_{1}_Front-End_JavaScript_developer___All_Front-End_JavaScript_developers_working_on_{MAIS_eRec}_need_to_be_licensed___{MAIS_eRec}_has_not_been_granted_a_Deployment_License_Add-on___This_key_works_with_{AG_Grid}_Enterprise_versions_released_before_{28_June_2026}____[v3]_[01]_MTc4MjYwMTIwMDAwMA==5c7d1487ecb13b28e75415d34b7cf694';\n","import React, { Children, useCallback } from 'react';\nimport {\n usePopupState,\n bindTrigger,\n bindPopper,\n} from 'material-ui-popup-state/hooks';\nimport useId from '../../UI/widgets/utils/useId';\nimport {\n Button,\n ButtonGroup,\n Popper,\n Grow,\n Paper,\n ClickAwayListener,\n MenuList,\n makeStyles,\n} from '@material-ui/core';\nimport { ArrowDropDown as ArrowDropDownIcon } from '@material-ui/icons';\n\nconst useStyles = makeStyles(\n theme => ({\n arrowButtonRoot: {\n padding: 0,\n },\n menu: {\n zIndex: theme.zIndex.tooltip,\n },\n paper: {},\n }),\n { name: 'SplitButton' }\n);\n\n/**\n * https://material-ui.com/components/button-group/#split-button\n */\nexport const SplitButton = props => {\n const classes = useStyles(props);\n const {\n popupName,\n color,\n size,\n variant,\n label,\n 'aria-label': ariaLabel,\n children,\n } = props;\n const popupId = useId(popupName);\n const popupState = usePopupState({ variant: 'popper', popupId });\n\n const firstItem = Children.toArray(children)[0];\n\n const setAnchorEl = useCallback(ref => {\n if (ref) popupState.setAnchorEl(ref);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n <React.Fragment>\n <ButtonGroup\n variant={variant}\n color={color}\n size={size}\n ref={setAnchorEl}\n aria-label={ariaLabel}\n >\n <Button onClick={firstItem?.props?.onClick}>\n {label || firstItem?.props?.children}\n </Button>\n <Button\n {...bindTrigger(popupState)}\n className={classes.arrowButtonRoot}\n color={color}\n size=\"small\"\n aria-expanded={popupState.isOpen ? true : undefined}\n // @fixme Allow labels for this button\n >\n <ArrowDropDownIcon />\n </Button>\n </ButtonGroup>\n <Popper\n {...bindPopper(popupState)}\n role={undefined}\n transition\n disablePortal\n className={classes.menu}\n >\n {({ TransitionProps, placement }) => (\n <Grow\n {...TransitionProps}\n style={{\n transformOrigin:\n placement === 'bottom' ? 'center top' : 'center bottom',\n }}\n >\n <Paper className={classes.paper}>\n <ClickAwayListener onClickAway={popupState.close}>\n <MenuList /*id={popupState.popupId}*/>{children}</MenuList>\n </ClickAwayListener>\n </Paper>\n </Grow>\n )}\n </Popper>\n </React.Fragment>\n );\n};\n","import { AllModules, RowHeightParams } from '@ag-grid-enterprise/all-modules';\nimport {\n AgGridEvent,\n ColumnApi,\n GridApi,\n Module\n} from '@ag-grid-enterprise/all-modules/dist/cjs/main';\nimport '@ag-grid-enterprise/all-modules/dist/styles/ag-grid.css';\nimport '@ag-grid-enterprise/all-modules/dist/styles/ag-theme-material.css';\nimport './ag-grid-styles.scss';\nimport { AgGridReact, AgGridReactProps } from '@ag-grid-community/react';\nimport { ExcelExportModule } from '@ag-grid-enterprise/excel-export';\nimport {\n Box,\n Button,\n Grid,\n makeStyles,\n MenuItem,\n useTheme\n} from '@material-ui/core';\nimport clsx from 'clsx';\nimport invariant from 'invariant';\nimport React, {\n Dispatch,\n FC,\n Reducer,\n useCallback,\n useMemo,\n useReducer\n} from 'react';\nimport { SplitButton } from './SplitButton';\nimport { LicenseManager } from '@ag-grid-enterprise/core';\nimport { LicenseKey } from '../../AGLicense';\n\nLicenseManager.setLicenseKey(LicenseKey);\n\nconst useStyles = makeStyles(\n (theme) => ({\n root: {\n flex: 1,\n height: (props: any) =>\n props?.height ? props.height : 'calc(100vh - 280px)'\n },\n AgGrid: (props: any) => ({\n '--ag-control-panel-background-color': theme.palette.primary.light,\n '--ag-checkbox-checked-color': theme.palette.primary.main,\n ...(props.hideHeader ? {} : {\n '--ag-header-background-color': theme.palette.primary.main,\n '--ag-header-foreground-color': theme.palette.primary.light,\n }),\n })\n }),\n { name: 'AgTable' }\n);\n\nconst globalModules: Module[] = [...AllModules, ExcelExportModule];\n\ninterface AgGridApi {\n gridApi?: GridApi;\n gridColumnApi?: ColumnApi;\n}\n\ninterface UseAgGridApi extends AgGridApi {\n onGridReady: Dispatch<AgGridEvent>;\n}\n\n/**\n * Utility hook for getting the ag-grid APIs into state\n */\nexport function useAgGridApi(): UseAgGridApi {\n const [{ gridApi, gridColumnApi }, onGridReady] = useReducer<\n Reducer<AgGridApi, AgGridEvent>\n >((state, params) => {\n return { gridApi: params.api, gridColumnApi: params.columnApi };\n }, {});\n\n return { gridApi, gridColumnApi, onGridReady };\n}\n\nexport interface AgTableButttonsProps {\n gridApi?: GridApi;\n gridColumnApi?: ColumnApi;\n}\n\n/**\n * Size/Export buttons for AgGrid tables\n */\nexport const AgTableButtons: FC<AgTableButttonsProps> = (props) => {\n const { gridApi, gridColumnApi } = props;\n\n const exportToCSV = useCallback(() => {\n invariant(gridApi, `gridApi not ready`);\n gridApi?.exportDataAsCsv({\n allColumns: true,\n fileName: 'export'\n });\n }, [gridApi]);\n const exportToExcel = useCallback(() => {\n invariant(gridApi, `gridApi not ready`);\n gridApi?.exportDataAsExcel({\n allColumns: true,\n fileName: 'export'\n });\n }, [gridApi]);\n\n const sizeToFit = useCallback(\n (params: any) => {\n invariant(gridApi, `gridApi not ready`);\n gridApi?.sizeColumnsToFit();\n },\n [gridApi]\n );\n\n const autoSizeAll = useCallback(\n (skipHeader: any) => {\n invariant(gridColumnApi, `gridColumnApi not ready`);\n const allColumnIds: string[] = [];\n gridColumnApi\n ?.getAllColumns()\n ?.forEach((column: { getColId: () => string }) => {\n allColumnIds.push(column.getColId());\n });\n gridColumnApi?.autoSizeColumns(allColumnIds, skipHeader);\n },\n [gridColumnApi]\n );\n const autoSizeAllWithHeader = useCallback(\n () => autoSizeAll(false),\n [autoSizeAll]\n );\n const autoSizeAllWithoutHeader = useCallback(\n () => autoSizeAll(false),\n [autoSizeAll]\n );\n\n return (\n // @ts-ignore\n <Box mb={1}>\n <Grid container direction='row' spacing={1} justify='flex-end'>\n <Grid item>\n <Button variant='outlined' size='small' onClick={sizeToFit}>\n Size to Fit\n </Button>\n </Grid>\n <Grid item>\n <SplitButton\n popupName='auto-size'\n variant='outlined'\n size='small'\n label='Auto-Size'\n >\n <MenuItem onClick={autoSizeAllWithHeader}>All</MenuItem>\n <MenuItem onClick={autoSizeAllWithoutHeader}>Skip Header</MenuItem>\n </SplitButton>\n </Grid>\n <Grid item>\n <SplitButton\n popupName='export'\n variant='outlined'\n size='small'\n label='Export'\n >\n <MenuItem onClick={exportToExcel}>Excel</MenuItem>\n <MenuItem onClick={exportToCSV}>CSV</MenuItem>\n </SplitButton>\n </Grid>\n </Grid>\n </Box>\n );\n};\n\ninterface AgTableProps extends AgGridReactProps {\n dynamicSizing?: boolean;\n className?: string;\n isUsingAgRowHeight?: boolean;\n hideHeader?: boolean; // Add the hideHeader prop\n}\n\n/**\n * AgGrid with tweaks\n */\nexport const AgTable: FC<AgTableProps> = (props) => {\n const classes = useStyles(props);\n const {\n modules: modulesProp,\n className,\n getRowHeight,\n rowModelType,\n isUsingAgRowHeight = false,\n hideHeader = false // Add the hideHeader prop to the destructuring\n } = props;\n const modules = useMemo<Module[]>(\n () => (modulesProp ? globalModules.concat(modulesProp) : globalModules),\n [modulesProp]\n );\n\n const calculateRowHeight: (\n params: RowHeightParams\n ) => number | null | undefined = (params) => {\n if (params.node.level === 0) {\n return 48;\n }\n if (params.node.level === 1) {\n return 32;\n }\n return 16;\n };\n\n const rowHeightFunction = useCallback(\n (params) => {\n if (rowModelType === 'serverSide') {\n if (isUsingAgRowHeight) {\n return undefined;\n } else {\n if (getRowHeight) {\n return getRowHeight(params);\n } else {\n return calculateRowHeight(params);\n }\n }\n } else {\n if (getRowHeight) {\n return getRowHeight(params);\n }\n }\n return undefined;\n },\n [getRowHeight, isUsingAgRowHeight]\n );\n\n const onGridSizeChanged = () => {\n if (props.dynamicSizing) {\n props.api?.sizeColumnsToFit();\n }\n };\n\n return (\n <div className={clsx('ag-theme-material', classes.root, className)}>\n <AgGridReact\n {...props}\n modules={modules}\n onGridSizeChanged={onGridSizeChanged}\n getRowHeight={rowHeightFunction}\n className={classes.AgGrid}\n />\n </div>\n );\n};\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"AmChart-CTixft8X.js","names":["chart: ReactElement | null"],"sources":["../src/UI/dataDisplay/visualization/amCharts/AmChart.tsx"],"sourcesContent":["import React, { ReactElement, useMemo } from 'react';\nimport { makeStyles } from '@material-ui/core';\nimport { UdpBarChart } from '../../../charts/amcharts/UdpBarChart';\nimport { UdpLineChart } from '../../../charts/amcharts/UdpLineChart';\nimport { UdpDistributionChart } from '../../../charts/amcharts/UdpDistributionChart';\nimport { UdpDonutChart } from '../../../charts/amcharts/UdpDonutChart';\nimport { UdpSankeyChart } from '../../../charts/amcharts/UdpSankeyChart';\nimport { UdpXYMultiSeriesChart } from '../../../charts/amcharts/UdpXYMultiSeriesChart';\n\nconst useStyles = makeStyles(() => ({\n chartWrapper: {\n height: '100%',\n width: '100%'\n }\n}));\n\ntype ChartType =\n | 'sankey'\n | 'bar'\n | 'donut'\n | 'line'\n | 'distribution'\n | 'xyMultiSeries';\n\nexport interface AmChartProps {\n chartType: ChartType;\n data?: any;\n dataMappingField?: any;\n labelFormat?: any;\n tooltipTextFormat?: any;\n [key: string]: any;\n}\n\nexport const AmChart = (props: AmChartProps): ReactElement | null => {\n const {\n chartType,\n data,\n dataMappingField,\n labelFormat,\n tooltipTextFormat,\n ...otherProps\n } = props;\n const classes = useStyles();\n\n const chart: ReactElement | null = useMemo(() => {\n switch (chartType) {\n case 'sankey':\n return (\n <UdpSankeyChart\n data={data}\n valueField={dataMappingField?.valueField}\n targetIdField={dataMappingField?.targetIdField}\n sourceIdField={dataMappingField?.sourceIdField}\n labelFormat={labelFormat}\n tooltipTextFormat={tooltipTextFormat}\n {...otherProps}\n />\n );\n case 'bar':\n return (\n <UdpBarChart\n data={data}\n valueField={dataMappingField?.valueField}\n labelField={dataMappingField?.labelField}\n {...otherProps}\n />\n );\n case 'donut':\n return (\n <UdpDonutChart\n data={data}\n valueField={dataMappingField?.valueField}\n labelField={dataMappingField?.labelField}\n hideLegend={false}\n {...otherProps}\n />\n );\n case 'line':\n return (\n <UdpLineChart\n data={data}\n xAxisField={dataMappingField?.xAxisField}\n yAxisField={dataMappingField?.yAxisField}\n {...otherProps}\n />\n );\n case 'distribution':\n return (\n <UdpDistributionChart\n data={data}\n valueField={dataMappingField?.valueField}\n {...otherProps}\n />\n );\n case 'xyMultiSeries':\n return (\n <UdpXYMultiSeriesChart\n hideLegend={false}\n xAxes={[]}\n yAxes={[]}\n series={[]}\n data={data}\n {...otherProps}\n />\n );\n default:\n return null;\n }\n }, [\n chartType,\n data,\n dataMappingField,\n labelFormat,\n otherProps,\n tooltipTextFormat\n ]);\n\n return <div className={classes.chartWrapper}>{chart}</div>;\n};\n"],"mappings":";;;;;AASA,MAAM,YAAY,kBAAkB,EAClC,cAAc;CACZ,QAAQ;CACR,OAAO;CACR,EACF,EAAE;AAmBH,MAAa,WAAW,UAA6C;CACnE,MAAM,EACJ,WACA,MACA,kBACA,aACA,mBACA,GAAG,eACD;CACJ,MAAM,UAAU,WAAW;CAE3B,MAAMA,QAA6B,cAAc;AAC/C,UAAQ,WAAR;GACE,KAAK,SACH,QACE,oCAAC;IACO;IACN,YAAY,kBAAkB;IAC9B,eAAe,kBAAkB;IACjC,eAAe,kBAAkB;IACpB;IACM;IACnB,GAAI;KACJ;GAEN,KAAK,MACH,QACE,oCAAC;IACO;IACN,YAAY,kBAAkB;IAC9B,YAAY,kBAAkB;IAC9B,GAAI;KACJ;GAEN,KAAK,QACH,QACE,oCAAC;IACO;IACN,YAAY,kBAAkB;IAC9B,YAAY,kBAAkB;IAC9B,YAAY;IACZ,GAAI;KACJ;GAEN,KAAK,OACH,QACE,oCAAC;IACO;IACN,YAAY,kBAAkB;IAC9B,YAAY,kBAAkB;IAC9B,GAAI;KACJ;GAEN,KAAK,eACH,QACE,oCAAC;IACO;IACN,YAAY,kBAAkB;IAC9B,GAAI;KACJ;GAEN,KAAK,gBACH,QACE,oCAAC;IACC,YAAY;IACZ,OAAO,EAAE;IACT,OAAO,EAAE;IACT,QAAQ,EAAE;IACJ;IACN,GAAI;KACJ;GAEN,QACE,QAAO;;IAEV;EACD;EACA;EACA;EACA;EACA;EACA;EACD,CAAC;AAEF,QAAO,oCAAC,SAAI,WAAW,QAAQ,gBAAe,MAAY"}
1
+ {"version":3,"file":"AmChart-CTixft8X.js","names":[],"sources":["../src/UI/dataDisplay/visualization/amCharts/AmChart.tsx"],"sourcesContent":["import React, { ReactElement, useMemo } from 'react';\nimport { makeStyles } from '@material-ui/core';\nimport { UdpBarChart } from '../../../charts/amcharts/UdpBarChart';\nimport { UdpLineChart } from '../../../charts/amcharts/UdpLineChart';\nimport { UdpDistributionChart } from '../../../charts/amcharts/UdpDistributionChart';\nimport { UdpDonutChart } from '../../../charts/amcharts/UdpDonutChart';\nimport { UdpSankeyChart } from '../../../charts/amcharts/UdpSankeyChart';\nimport { UdpXYMultiSeriesChart } from '../../../charts/amcharts/UdpXYMultiSeriesChart';\n\nconst useStyles = makeStyles(() => ({\n chartWrapper: {\n height: '100%',\n width: '100%'\n }\n}));\n\ntype ChartType =\n | 'sankey'\n | 'bar'\n | 'donut'\n | 'line'\n | 'distribution'\n | 'xyMultiSeries';\n\nexport interface AmChartProps {\n chartType: ChartType;\n data?: any;\n dataMappingField?: any;\n labelFormat?: any;\n tooltipTextFormat?: any;\n [key: string]: any;\n}\n\nexport const AmChart = (props: AmChartProps): ReactElement | null => {\n const {\n chartType,\n data,\n dataMappingField,\n labelFormat,\n tooltipTextFormat,\n ...otherProps\n } = props;\n const classes = useStyles();\n\n const chart: ReactElement | null = useMemo(() => {\n switch (chartType) {\n case 'sankey':\n return (\n <UdpSankeyChart\n data={data}\n valueField={dataMappingField?.valueField}\n targetIdField={dataMappingField?.targetIdField}\n sourceIdField={dataMappingField?.sourceIdField}\n labelFormat={labelFormat}\n tooltipTextFormat={tooltipTextFormat}\n {...otherProps}\n />\n );\n case 'bar':\n return (\n <UdpBarChart\n data={data}\n valueField={dataMappingField?.valueField}\n labelField={dataMappingField?.labelField}\n {...otherProps}\n />\n );\n case 'donut':\n return (\n <UdpDonutChart\n data={data}\n valueField={dataMappingField?.valueField}\n labelField={dataMappingField?.labelField}\n hideLegend={false}\n {...otherProps}\n />\n );\n case 'line':\n return (\n <UdpLineChart\n data={data}\n xAxisField={dataMappingField?.xAxisField}\n yAxisField={dataMappingField?.yAxisField}\n {...otherProps}\n />\n );\n case 'distribution':\n return (\n <UdpDistributionChart\n data={data}\n valueField={dataMappingField?.valueField}\n {...otherProps}\n />\n );\n case 'xyMultiSeries':\n return (\n <UdpXYMultiSeriesChart\n hideLegend={false}\n xAxes={[]}\n yAxes={[]}\n series={[]}\n data={data}\n {...otherProps}\n />\n );\n default:\n return null;\n }\n }, [\n chartType,\n data,\n dataMappingField,\n labelFormat,\n otherProps,\n tooltipTextFormat\n ]);\n\n return <div className={classes.chartWrapper}>{chart}</div>;\n};\n"],"mappings":";;;;;AASA,MAAM,YAAY,kBAAkB,EAClC,cAAc;CACZ,QAAQ;CACR,OAAO;CACR,EACF,EAAE;AAmBH,MAAa,WAAW,UAA6C;CACnE,MAAM,EACJ,WACA,MACA,kBACA,aACA,mBACA,GAAG,eACD;CACJ,MAAM,UAAU,WAAW;CAE3B,MAAM,QAA6B,cAAc;AAC/C,UAAQ,WAAR;GACE,KAAK,SACH,QACE,oCAAC;IACO;IACN,YAAY,kBAAkB;IAC9B,eAAe,kBAAkB;IACjC,eAAe,kBAAkB;IACpB;IACM;IACnB,GAAI;KACJ;GAEN,KAAK,MACH,QACE,oCAAC;IACO;IACN,YAAY,kBAAkB;IAC9B,YAAY,kBAAkB;IAC9B,GAAI;KACJ;GAEN,KAAK,QACH,QACE,oCAAC;IACO;IACN,YAAY,kBAAkB;IAC9B,YAAY,kBAAkB;IAC9B,YAAY;IACZ,GAAI;KACJ;GAEN,KAAK,OACH,QACE,oCAAC;IACO;IACN,YAAY,kBAAkB;IAC9B,YAAY,kBAAkB;IAC9B,GAAI;KACJ;GAEN,KAAK,eACH,QACE,oCAAC;IACO;IACN,YAAY,kBAAkB;IAC9B,GAAI;KACJ;GAEN,KAAK,gBACH,QACE,oCAAC;IACC,YAAY;IACZ,OAAO,EAAE;IACT,OAAO,EAAE;IACT,QAAQ,EAAE;IACJ;IACN,GAAI;KACJ;GAEN,QACE,QAAO;;IAEV;EACD;EACA;EACA;EACA;EACA;EACA;EACD,CAAC;AAEF,QAAO,oCAAC,SAAI,WAAW,QAAQ,gBAAe,MAAY"}
@@ -4,7 +4,7 @@ import { i as storeTenant, n as getStoredTenant } from "./UnitySessionStorage-CU
4
4
  import { n as UserContext, r as UserDispatchContext } from "./useUser-wpHGo6jU.js";
5
5
  import { w as RoleIdEnums } from "./unitySystemEnums-CZDCsD5t.js";
6
6
  import { t as useAxiosGet } from "./useAxiosGet-CYnt6Hd0.js";
7
- import { t as TenantProvider } from "./TenantProvider-CCrrxyiD.js";
7
+ import { t as TenantProvider } from "./TenantProvider-BeFMHYP8.js";
8
8
  import { t as LoadingIndicator } from "./LoadingIndicator-BBIwYBt5.js";
9
9
  import { t as CustomNavigationClient_default } from "./CustomNavigationClient-CwXe-ZC7.js";
10
10
  import { t as PasswordResetRedirect } from "./PasswordResetRedirect-DDOsXDPA.js";
@@ -216,4 +216,4 @@ const AuthProvider = ({ children, doNotWaitForTenant = true }) => {
216
216
 
217
217
  //#endregion
218
218
  export { createUser as n, AuthProvider as t };
219
- //# sourceMappingURL=AuthProvider-C8qG0V63.js.map
219
+ //# sourceMappingURL=AuthProvider-J79EBNDc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AuthProvider-J79EBNDc.js","names":["useLocation","CustomNavigationClient","UserProvider"],"sources":["../src/utilities/auth/user.ts","../src/utilities/auth/UserProvider.jsx","../src/utilities/auth/AuthProvider.jsx"],"sourcesContent":["import { ConfigService } from '../../configService';\nimport { RoleIdEnums } from '../../enums/unitySystemEnums';\nimport { getStoredTenant } from '../storage/UnitySessionStorage';\n\nexport interface User {\n name: string | undefined;\n firstName: string | undefined;\n familyName: string | undefined;\n jobTitle: string | undefined;\n email: string | undefined;\n mobile: string | undefined;\n phone: string | undefined;\n id: string | undefined;\n location: string | undefined;\n aadId: string | undefined;\n accessToken: string | undefined;\n defaultTenantId: string | undefined;\n currentTenantId: string | undefined;\n tenantIds: Array<string> | undefined;\n roleIds: Array<string> | undefined;\n products: Array<object> | undefined;\n permissions: Array<object> | undefined;\n can: any | undefined;\n statusCode: number | undefined;\n unityId: string | undefined;\n additionalProperties: any | undefined;\n roleNames: Array<string> | undefined;\n isUnitySystemAdmin: boolean | undefined;\n}\n\n/**\n * Create a \"unified\" user object from MSAL account info and Univerus user data (in the future)\n */\nexport function createUser(userInfo: any): User {\n const tenantId: any =\n getStoredTenant() ||\n (userInfo?.defaultTenantId ??\n (userInfo?.tenantIds ? userInfo?.tenantIds[0] : ''));\n let userTenantPermissions: any = [];\n let userTenantRoles: any = [];\n let userTenantProducts: any = [];\n const currentUserTenantProperties = userInfo?.userTenantPropertiesView?.find(\n (propertyView: any) => propertyView?.tenantId === tenantId\n );\n userTenantPermissions = currentUserTenantProperties\n ? currentUserTenantProperties.permissions\n : [];\n userTenantRoles = currentUserTenantProperties\n ? currentUserTenantProperties.securityRoles\n : [];\n userTenantProducts = currentUserTenantProperties\n ? currentUserTenantProperties.products\n : [];\n\n let roleIds: any = userTenantRoles.map((role: any) => role.roleId) ?? [];\n\n return {\n name: userInfo?.displayName ?? '',\n firstName: userInfo?.givenName ?? '',\n familyName: userInfo?.surname ?? '',\n jobTitle: userInfo?.jobTitle ?? '',\n email: userInfo?.email ?? '',\n mobile: userInfo?.mobilePhone ?? '',\n phone: userInfo?.officePhone ?? '',\n id: userInfo?.userId ?? '',\n location: userInfo?.location ?? '',\n aadId: userInfo?.externalUUID ?? '',\n accessToken: userInfo?.accessToken ?? '',\n tenantIds: userInfo?.tenantIds ?? [],\n defaultTenantId: userInfo?.defaultTenantId ?? '',\n currentTenantId: ConfigService.config.UNITY_TENANT_ID\n ? ConfigService.config.UNITY_TENANT_ID\n : tenantId,\n roleIds: roleIds,\n products: userTenantProducts,\n permissions: userTenantPermissions,\n can:\n userTenantPermissions.reduce((can: any, permission: any) => {\n if (permission.value === 'false') {\n can[permission.name] = false;\n } else if (permission.value === 'true') {\n can[permission.name] = true;\n } else {\n can[permission.name] = permission.value;\n }\n return can;\n }, {}) ?? {},\n statusCode: userInfo?.statusCode ?? 200,\n unityId: userInfo?.userId ?? '',\n additionalProperties: userInfo?.additionalProperties ?? undefined,\n roleNames: userTenantRoles.map((role) => role.name) ?? [],\n isUnitySystemAdmin: !!roleIds.find(\n (id: string) => id === RoleIdEnums.Unity_System_Administrator\n )\n };\n}\n","import React, { useReducer, useEffect } from 'react';\nimport { UserContext, UserDispatchContext } from './internal';\nimport { createUser } from './user';\nimport { LoadingIndicator } from '../../UI/loading/LoadingIndicator';\nimport { useAccount } from '@azure/msal-react';\nimport { storeTenant, getStoredTenant } from '../storage/UnitySessionStorage';\nimport { useAxiosGet } from '../useAxiosGet';\nimport { TenantProvider } from '../tenant/TenantProvider';\nimport { acquireAccessToken } from './authActions';\nimport { ConfigService } from '../../configService';\nconst emptyUser = {\n name: '',\n firstName: '',\n familyName: '',\n jobTitle: '',\n email: '',\n mobile: '',\n phone: '',\n id: '',\n location: '',\n aadId: '',\n accessToken: '',\n defaultTenantId: '',\n currentTenantId: '',\n tenantIds: [],\n roleIds: [],\n products: [],\n permissions: [],\n can: {},\n statusCode: undefined,\n unityId: undefined,\n additionalProperties: undefined,\n roleNames: [],\n isUnitySystemAdmin: undefined\n};\n\nconst UserProvider = (props) => {\n const {\n children,\n setSessionExpiredModalOpen,\n setNonExistingUserModalOpen,\n setErrorMessage,\n isWhiteListed,\n doNotWaitForTenant = false,\n unityTenantId\n } = props;\n const activeAccount = useAccount();\n const idTokenClaims = activeAccount?.idTokenClaims;\n const sub = idTokenClaims?.sub;\n\n //Get user info\n const [{ data: userInfo, error: userError }] = useAxiosGet(\n ConfigService.securityV1ApiUrl,\n `users/unityuser`,\n {},\n false,\n false\n );\n\n useEffect(() => {\n if (userError) {\n setErrorMessage('Unable to get user details. Please try again.');\n setNonExistingUserModalOpen(true);\n }\n }, [setErrorMessage, setNonExistingUserModalOpen, userError]);\n\n // const [{ data: aadUserInfo }] = useAxiosGet(\n // ConfigService.securityV1ApiUrl,\n // `users/${sub}`,\n // {},\n // false,\n // false\n // );\n\n const [userState, dispatch] = useReducer((state, action) => {\n switch (action.type) {\n case 'SET_USER':\n state = {\n ...state,\n user: action.user\n };\n break;\n case 'CHANGE_TENANT':\n let userTenantPermissions = [];\n let userTenantRoles = [];\n let userTenantProducts = [];\n if (state.tenantIds) {\n const currentUserTenantProperties =\n userInfo.userTenantPropertiesView?.find(\n (propertyView) => propertyView?.tenantId === action.tenantId\n );\n userTenantPermissions = currentUserTenantProperties\n ? currentUserTenantProperties.permissions\n : [];\n userTenantRoles = currentUserTenantProperties\n ? currentUserTenantProperties.securityRoles\n : [];\n userTenantProducts = currentUserTenantProperties\n ? currentUserTenantProperties.products\n : [];\n }\n state = {\n user: {\n ...state,\n currentTenantId: action.tenantId,\n products: userTenantProducts,\n permissions: userTenantPermissions,\n roleIds: userTenantRoles.map((role) => role.roleId) ?? [],\n roleNames: userTenantRoles.map((role) => role.name) ?? []\n }\n };\n break;\n default:\n throw new Error(`Unknown action type ${action.type}`);\n }\n\n return state.user;\n }, emptyUser);\n\n useEffect(() => {\n if (userInfo?.userId) {\n const user = createUser({\n ...userInfo,\n displayName: idTokenClaims?.name,\n givenName: idTokenClaims?.given_name ?? idTokenClaims?.name,\n accessToken: activeAccount.idToken ?? '',\n surname: idTokenClaims?.family_name\n });\n sessionStorage.setItem('user-id', userInfo?.userId);\n\n dispatch({ type: 'SET_USER', user });\n }\n }, [\n userInfo,\n idTokenClaims?.name,\n idTokenClaims?.given_name,\n idTokenClaims?.family_name,\n activeAccount.idToken\n ]);\n\n useEffect(() => {\n if (userInfo?.defaultTenantId) {\n if (!getStoredTenant()) {\n if (unityTenantId) {\n storeTenant(unityTenantId);\n } else {\n storeTenant(userInfo.defaultTenantId);\n }\n }\n }\n }, [userInfo]);\n\n return (\n <div>\n {!doNotWaitForTenant &&\n !userState?.currentTenantId &&\n !isWhiteListed ? (\n <LoadingIndicator />\n ) : (\n <UserContext.Provider value={userState}>\n <UserDispatchContext.Provider value={dispatch}>\n <TenantProvider>{children}</TenantProvider>\n </UserDispatchContext.Provider>\n </UserContext.Provider>\n )}\n </div>\n );\n};\n\nexport default UserProvider;\n","import React, { useEffect, useMemo, useState } from 'react';\nimport {\n initSignInAuthProvider,\n getSignInAuthProvider,\n getLoginRequest,\n} from './signInAuthProvider';\nimport { LoadingIndicator } from '../../UI/loading/LoadingIndicator';\nimport { whitelistedPaths } from './whitelistedPaths';\nimport { InteractionType } from '@azure/msal-browser';\nimport {\n MsalProvider,\n MsalAuthenticationTemplate,\n} from '@azure/msal-react';\nimport { useHistory } from 'react-router-dom';\nimport CustomNavigationClient from '../CustomNavigationClient';\nimport { useLocation } from 'react-use';\nimport UserProvider from './UserProvider';\nimport { PasswordResetRedirect } from '../../routes/components/PasswordResetRedirect';\n\nexport const AuthProvider = ({ children, doNotWaitForTenant = true }) => {\n const [msalInstance, setMsalInstance] = useState(null);\n const [loginRequestInstance, setLoginRequestInstance] = useState(null);\n const [isInitialized, setIsInitialized] = useState(false);\n\n const history = useHistory();\n const location = useLocation();\n\n useEffect(() => {\n const initialize = async () => {\n try {\n await initSignInAuthProvider();\n const authProvider = getSignInAuthProvider();\n const navigationClient = new CustomNavigationClient(history);\n authProvider.setNavigationClient(navigationClient);\n setMsalInstance(authProvider);\n setLoginRequestInstance(getLoginRequest());\n setIsInitialized(true);\n } catch (error) {\n console.error('Failed to initialize AuthProvider:', error);\n // Handle initialization error, maybe show an error message\n }\n };\n initialize();\n }, [history]);\n\n const [sessionExpiredModalOpen, setSessionExpiredModalOpen] = useState(false);\n const [nonExistingUserModalOpen, setNonExistingUserModalOpen] =\n useState(false);\n const [errorMessage, setErrorMessage] = useState('');\n\n const isWhiteListed = useMemo(() => {\n const url = location.pathname;\n return whitelistedPaths.includes(url ?? '');\n }, [location]);\n\n if (!isInitialized) {\n return <LoadingIndicator />;\n }\n\n if (isWhiteListed) {\n return <MsalProvider instance={msalInstance}>{children}</MsalProvider>;\n }\n\n return (\n <MsalProvider instance={msalInstance}>\n <MsalAuthenticationTemplate\n interactionType={InteractionType.Redirect}\n authenticationRequest={loginRequestInstance}\n loadingComponent={() => <LoadingIndicator />}\n errorComponent={(props) => <PasswordResetRedirect {...props} />}\n >\n <UserProvider\n sessionExpiredModalOpen={sessionExpiredModalOpen}\n setSessionExpiredModalOpen={setSessionExpiredModalOpen}\n setNonExistingUserModalOpen={setNonExistingUserModalOpen}\n setErrorMessage={setErrorMessage}\n isWhiteListed={isWhiteListed}\n doNotWaitForTenant={doNotWaitForTenant}\n >\n {children}\n </UserProvider>\n </MsalAuthenticationTemplate>\n </MsalProvider>\n );\n};\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"DashboardWidget-CsOrr74H.js","names":["layout: Omit<Layout, 'i' | 'x' | 'y'>","uuid","ResponsiveGridLayout","theme","FUICard","FUIMenuItem"],"sources":["../src/dashboard/getWidgetLayout.ts","../src/dashboard/DashboardCardGrid.jsx","../src/dashboard/WidgetCard.jsx","../src/dashboard/DashboardWidget.jsx"],"sourcesContent":["import { Layout } from 'react-grid-layout';\nimport { LayoutDimension } from './types';\n\nconst getW = (\n w: LayoutDimension | undefined\n): Pick<Layout, 'w' | 'minW' | 'maxW'> => {\n if (typeof w === 'object') {\n return {\n w: w.default,\n minW: w.min,\n maxW: w.max\n };\n }\n\n if (typeof w === 'number') {\n return { w };\n }\n\n return { w: 2 };\n};\n\nconst getH = (\n h: LayoutDimension | undefined\n): Pick<Layout, 'h' | 'minH' | 'maxH'> => {\n if (typeof h === 'object') {\n return {\n h: h.default,\n minH: h.min,\n maxH: h.max\n };\n }\n\n if (typeof h === 'number') {\n return { h };\n }\n\n return { h: 2 };\n};\n\n/**\n * Get a default layout for widgets of a type\n */\nexport default function getWidgetLayout(\n getWidget: Function,\n widgetType: string\n): Omit<Layout, 'i' | 'x' | 'y'> {\n const { w, h } = (getWidget && getWidget(widgetType)?.layout) ?? {};\n\n const layout: Omit<Layout, 'i' | 'x' | 'y'> = {\n ...getW(w),\n ...getH(h)\n };\n\n const wResizable = 'minW' in layout || 'maxW' in layout;\n const hResizable = 'minH' in layout || 'maxH' in layout;\n layout.isResizable = wResizable || hResizable;\n\n return layout;\n}\n","import { v4 as uuid } from 'uuid';\nimport React, { useCallback, useMemo, useRef, useState, useEffect } from 'react';\nimport { Responsive as ResponsiveGridLayout } from 'react-grid-layout';\nimport { makeStyles, useTheme } from '@material-ui/core';\nimport { useMeasure } from 'react-use';\nimport 'react-grid-layout/css/styles.css';\nimport 'react-resizable/css/styles.css';\nimport { useDragLayer } from 'react-dnd';\nimport getWidgetLayout from './getWidgetLayout.ts';\nimport { useShellStore } from '../stores/shellStore';\n\nconst useStyle = makeStyles(\n (theme) => ({\n root: {\n display: 'flex',\n flexDirection: 'column',\n width: '100%',\n height: '100%',\n marginBottom: (props) => (props?.disableMargin ? '' : theme.spacing(3))\n }\n }),\n { name: 'DashboardCardGrid' }\n);\n\nconst DASHBOARD_WIDGET = Symbol('DASHBOARD_WIDGET');\n\nconst breakpoints = {\n xs: 0,\n xl: 1150\n};\n\nconst breakpointCols = {\n xs: 4,\n xl: 4\n};\n\n/**\n * Grid layout for dashboard cards\n */\nconst DashboardCardGrid = (props) => {\n const classes = useStyle(props);\n const { children, onCreateCard, gridProperties, ...other } = props;\n const { getWidget } = useShellStore();\n const rglRef = useRef();\n const [ref, { width }] = useMeasure();\n const theme = useTheme();\n const { droppingWidgetType } = useDragLayer((monitor) => {\n if (monitor.getItemType() === DASHBOARD_WIDGET) {\n const { id: wigetType } = monitor.getItem();\n return { droppingWidgetType: wigetType };\n }\n\n return { droppingWidgetType: null };\n });\n\n const [droppingItemLayout, setDroppingItemLayout] = useState(null);\n\n useEffect(() => {\n let isMounted = true;\n\n // Asynchronously resolve the widget definition to get its layout properties\n const resolveLayout = async (widgetDefPromise) => {\n try {\n const module = await widgetDefPromise;\n // Handle ES modules with default exports\n const widgetDef = module?.default || module;\n // Use the external layout getter, assuming it can handle the resolved definition\n const layout = getWidgetLayout(widgetDef);\n if (isMounted) {\n setDroppingItemLayout({ i: uuid(), ...layout });\n }\n } catch (e) {\n console.error(`Error resolving layout for widget type \"${droppingWidgetType}\"`, e);\n // Fallback to a default layout on error\n const fallbackLayout = getWidgetLayout(null);\n if (isMounted) {\n setDroppingItemLayout({ i: uuid(), ...fallbackLayout });\n }\n }\n };\n\n if (droppingWidgetType) {\n const res = getWidget(droppingWidgetType);\n // Check if the result is a promise (for async widgets)\n if (res?.then) {\n setDroppingItemLayout(null); // Clear previous layout while loading\n resolveLayout(res);\n } else {\n // Handle synchronously available widget definitions\n const layout = getWidgetLayout(res);\n setDroppingItemLayout({ i: uuid(), ...layout });\n }\n } else {\n setDroppingItemLayout(null);\n }\n\n return () => {\n isMounted = false;\n };\n }, [droppingWidgetType, getWidget]);\n\n const drag = useCallback((layout, oldLayoutItem, layoutItem, placeholder) => {\n // Cards larger than 1 should snap to columns that are a multiple of 2\n // if (layoutItem.w > 1) {\n //   // @fixme This affects the visual placeholder, but doesn't actually fix the layout item when its dropped\n //   placeholder.x = layoutItem.x = Math.floor(layoutItem.x / 2) * 2;\n // }\n }, []);\n\n const resize = useCallback(\n (layout, oldLayoutItem, layoutItem, placeholder) => {\n // Widths larger than 1 should be a multiple of 2\n // The small size of columns is just so we can have small 1x1 tiles that are 1/2 the size of normal cards\n // if (layoutItem.w > 1) {\n //   const w = Math.floor(layoutItem.w / 2) * 3;\n //   layoutItem.w = w;\n //   placeholder.w = w;\n // }\n\n // There is no 3 (i.e. 6) column layout so don't allow cards to be that size either\n if (layoutItem.w >= 6 && layoutItem.w < 8) {\n layoutItem.w = 4;\n placeholder.w = 4;\n }\n },\n []\n );\n\n const drop = useCallback(\n (layout, item) => {\n if (droppingWidgetType) {\n const { x, y, w, h } = item;\n const { breakpoint } = rglRef.current.state;\n if (onCreateCard)\n onCreateCard({\n widgetType: droppingWidgetType,\n id: uuid(),\n layout: {\n [breakpoint]: {\n x,\n y,\n w,\n h\n }\n },\n params: []\n });\n }\n },\n [droppingWidgetType, onCreateCard]\n );\n\n return (\n <div ref={ref} className={classes.root}>\n {width ? (\n <ResponsiveGridLayout\n ref={rglRef}\n {...other}\n width={width}\n breakpoints={breakpoints}\n cols={breakpointCols}\n rowHeight={128}\n margin={[theme.spacing(3), theme.spacing(3)]}\n containerPadding={[0, 0]}\n draggableHandle='[data-handle]'\n onDrag={drag}\n onResize={resize}\n onDrop={drop}\n isDroppable={gridProperties?.isDroppable || false}\n isDraggable={gridProperties?.isDraggable || false}\n droppingItem={droppingItemLayout}\n style={{\n height: '100%'\n }}\n >\n {children}\n </ResponsiveGridLayout>\n ) : null}\n </div>\n );\n};\n\nexport default DashboardCardGrid;\n","import { DeleteIcon } from '@fluentui/react-icons';\nimport { makeStyles, CircularProgress, lighten } from '@material-ui/core';\nimport clsx from 'clsx';\nimport React from 'react';\nimport FUICard, { FUICardHeaderMenu } from '../UI/surfaces/cards/fluentCards/FUICard';\nimport FUIMenuItem from '../UI/widgets/FluentComponents/FUIMenuItem';\n\n/**\n * Core component for dashboard widget cards\n */\nexport const WidgetCard = (props) => {\n const {\n children,\n headerActions,\n className,\n widgetType,\n id,\n layout,\n params,\n setParam,\n onDelete,\n loading,\n errors,\n theme,\n hideWidgetName,\n innerPadding,\n contentHeight,\n contentMaxHeight,\n ...other\n } = props;\n\n const useStyles = makeStyles((theme) => ({\n root: {\n '&.react-resizable-hide .react-resizable-handle': {\n display: 'none'\n }\n },\n darkRoot: {\n '&.react-resizable-hide .react-resizable-handle': {\n display: 'none'\n },\n background: '#424242',\n color: 'white'\n },\n anyRoot: {\n '& .MuiCardContent-root': {\n justifyContent: 'space-between',\n overflow: 'auto',\n padding: 0\n }\n },\n handle: {\n cursor: 'move',\n '&:hover': {\n backgroundColor: theme.palette.action.hover\n },\n display: hideWidgetName && 'none'\n },\n loadingContent: {\n flex: 1,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center'\n },\n innerWidgetContentContainer: {\n height:\n widgetType === 'TransformerLoadWidget'\n ? 'auto'\n : contentHeight\n ? contentHeight\n : '100%',\n maxHeight: contentMaxHeight ? contentMaxHeight : '',\n minWidth: widgetType === 'ProgressBarWidget' ? 0 : 270,\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'space-between',\n padding:\n innerPadding ||\n (widgetType === 'VEERegisterRead' ? 0 : theme.spacing(2))\n }\n }));\n const classes = useStyles();\n const raised = /(^|\\s)react-draggable-dragging(\\s|$)/.test(className ?? '');\n\n let body = children;\n if (loading && !body) {\n body = (\n <div className={classes.loadingContent}>\n <CircularProgress size={64} />\n </div>\n );\n }\n if (errors && !body) {\n body = <div>Unexpected error</div>;\n }\n\n return (\n <FUICard\n {...other}\n className={clsx(\n className,\n theme === 'dark' ? classes.darkRoot : classes.root,\n classes.anyRoot\n )}\n raised={raised}\n CardHeaderProps={{\n className: classes.handle,\n 'data-handle': true\n }}\n headerActions={\n <>\n {headerActions}\n <FUICardHeaderMenu>\n <FUIMenuItem\n onClick={onDelete}\n fluentIcon={DeleteIcon}\n primary='Delete'\n />\n </FUICardHeaderMenu>\n </>\n }\n >\n <div className={classes.innerWidgetContentContainer}>{body}</div>\n </FUICard>\n );\n};\n","import React, {\n forwardRef,\n memo,\n Suspense,\n isValidElement,\n useCallback,\n useMemo\n} from 'react';\nimport { WidgetCard } from './WidgetCard';\nimport { useShellStore } from '../stores/shellStore';\nimport { PageLoading } from '../UI/feedback/PageLoading';\n\nconst isRenderableComponent = (Component) =>\n typeof Component === 'function' ||\n (Component &&\n typeof Component === 'object' &&\n Component !== null &&\n '$$typeof' in Component);\n\n/**\n * Widget implementation for dashboards that correctly handles lazy-loading.\n */\nconst DashboardWidget = forwardRef((props, ref) => {\n const {\n widgetType,\n id,\n deleteCard,\n children,\n params: paramValues,\n setParams,\n ...rest\n } = props;\n const { className, style, ...widgetProps } = rest;\n const widgetStyle = { ...(widgetProps.style || {}) };\n\n if (style && typeof style === 'object') {\n if (Object.prototype.hasOwnProperty.call(style, 'height')) {\n widgetStyle.height = style.height;\n }\n if (Object.prototype.hasOwnProperty.call(style, 'width')) {\n widgetStyle.width = style.width;\n }\n }\n\n const widgetPropsWithClassName = {\n ...widgetProps,\n ...(className ? { className } : {}),\n ...(Object.keys(widgetStyle).length ? { style: widgetStyle } : {})\n };\n const { getWidget, isValidWidget } = useShellStore();\n\n const onDelete = useCallback(() => {\n deleteCard?.(id);\n }, [deleteCard, id]);\n\n const { Widget, params: paramDefs } = useMemo(() => {\n if (!isValidWidget?.(widgetType)) {\n return {};\n }\n const res = getWidget(widgetType);\n\n // If getWidget returns null or undefined, widget not found\n if (!res) {\n return {};\n }\n\n // If it's already a React.lazy component (LazyExoticComponent), use it directly\n // React.lazy components have a $$typeof property set to Symbol.for('react.lazy')\n if (res.$$typeof === Symbol.for('react.lazy')) {\n return { Widget: res, params: {} };\n }\n\n // Handle descriptor object format (widget with params)\n if (res && typeof res === 'object' && !isValidElement(res) && !res.then) {\n const widgetComp = res.Widget || res.default || null;\n return { Widget: widgetComp, params: res.params || {} };\n }\n\n // If we receive anything else, it's an unsupported format.\n console.warn(`getWidget returned an unexpected type for \"${widgetType}\":`, res);\n return {};\n }, [widgetType, getWidget, isValidWidget]);\n\n const params = useMemo(() => {\n if (!paramDefs) return paramValues || {};\n\n const defaultParams = Object.fromEntries(\n Object.entries(paramDefs).map(([key, { defaultValue }]) => [key, defaultValue])\n );\n return { ...defaultParams, ...paramValues };\n }, [paramDefs, paramValues]);\n\n const setParam = useCallback(\n (name, value) => setParams(id, { [name]: value }),\n [id, setParams]\n );\n\n if (!isValidWidget || !getWidget) {\n return (\n <div ref={ref} className={className} style={style}>\n <WidgetCard {...widgetPropsWithClassName} title='Error'>\n isValidWidget or getWidget functions are not defined\n </WidgetCard>\n </div>\n );\n }\n\n if (!Widget) {\n return (\n <div ref={ref} className={className} style={style}>\n <WidgetCard {...widgetPropsWithClassName} title='Error'>\n Unknown widget type &ldquo;{widgetType}&rdquo;.\n </WidgetCard>\n </div>\n );\n }\n\n if (!isRenderableComponent(Widget)) {\n console.error(\n `DashboardWidget: widget \"${widgetType}\" resolved to a non-renderable component.`,\n Widget\n );\n return (\n <div ref={ref} className={className} style={style}>\n <WidgetCard {...widgetPropsWithClassName} title='Error'>\n Unable to render widget type &ldquo;{widgetType}&rdquo;.\n </WidgetCard>\n </div>\n );\n }\n\n const widgetElement = (\n <Widget\n {...widgetPropsWithClassName}\n id={id}\n params={params}\n setParam={setParam}\n onDelete={onDelete}\n >\n {children}\n </Widget>\n );\n\n return (\n <div ref={ref} className={className} style={style}>\n <Suspense fallback={<PageLoading />}>{widgetElement}</Suspense>\n </div>\n );\n});\n\nDashboardWidget.displayName = 'DashboardWidget';\n\nconst MemoizedDashboardWidget = memo(DashboardWidget);\nMemoizedDashboardWidget.displayName = 'DashboardWidget';\n\nexport default MemoizedDashboardWidget;\n"],"mappings":";;;;;;;;;;;;;;;;AAGA,MAAM,QACJ,MACwC;AACxC,KAAI,OAAO,MAAM,SACf,QAAO;EACL,GAAG,EAAE;EACL,MAAM,EAAE;EACR,MAAM,EAAE;EACT;AAGH,KAAI,OAAO,MAAM,SACf,QAAO,EAAE,GAAG;AAGd,QAAO,EAAE,GAAG,GAAG;;AAGjB,MAAM,QACJ,MACwC;AACxC,KAAI,OAAO,MAAM,SACf,QAAO;EACL,GAAG,EAAE;EACL,MAAM,EAAE;EACR,MAAM,EAAE;EACT;AAGH,KAAI,OAAO,MAAM,SACf,QAAO,EAAE,GAAG;AAGd,QAAO,EAAE,GAAG,GAAG;;;;;AAMjB,SAAwB,gBACtB,WACA,YAC+B;CAC/B,MAAM,EAAE,GAAG,OAAO,aAAa,UAAU,WAAW,EAAE,WAAW,EAAE;CAEnE,MAAMA,SAAwC;EAC5C,GAAG,KAAK,EAAE;EACV,GAAG,KAAK,EAAE;EACX;CAED,MAAM,aAAa,UAAU,UAAU,UAAU;CACjD,MAAM,aAAa,UAAU,UAAU,UAAU;AACjD,QAAO,cAAc,cAAc;AAEnC,QAAO;;;;;AC9CT,MAAM,WAAW,YACd,WAAW,EACV,MAAM;CACJ,SAAS;CACT,eAAe;CACf,OAAO;CACP,QAAQ;CACR,eAAe,UAAW,OAAO,gBAAgB,KAAK,MAAM,QAAQ,EAAE;CACvE,EACF,GACD,EAAE,MAAM,qBAAqB,CAC9B;AAED,MAAM,mBAAmB,OAAO,mBAAmB;AAEnD,MAAM,cAAc;CAClB,IAAI;CACJ,IAAI;CACL;AAED,MAAM,iBAAiB;CACrB,IAAI;CACJ,IAAI;CACL;;;;AAKD,MAAM,qBAAqB,UAAU;CACnC,MAAM,UAAU,SAAS,MAAM;CAC/B,MAAM,EAAE,UAAU,cAAc,gBAAgB,GAAG,UAAU;CAC7D,MAAM,EAAE,cAAc,eAAe;CACrC,MAAM,SAAS,QAAQ;CACvB,MAAM,CAAC,KAAK,EAAE,WAAW,YAAY;CACrC,MAAM,QAAQ,UAAU;CACxB,MAAM,EAAE,uBAAuB,cAAc,YAAY;AACvD,MAAI,QAAQ,aAAa,KAAK,kBAAkB;GAC9C,MAAM,EAAE,IAAI,cAAc,QAAQ,SAAS;AAC3C,UAAO,EAAE,oBAAoB,WAAW;;AAG1C,SAAO,EAAE,oBAAoB,MAAM;GACnC;CAEF,MAAM,CAAC,oBAAoB,yBAAyB,SAAS,KAAK;AAElE,iBAAgB;EACd,IAAI,YAAY;EAGhB,MAAM,gBAAgB,OAAO,qBAAqB;AAChD,OAAI;IACF,MAAM,SAAS,MAAM;IAIrB,MAAM,SAAS,gBAFG,QAAQ,WAAW,OAEI;AACzC,QAAI,UACF,uBAAsB;KAAE,GAAGC,IAAM;KAAE,GAAG;KAAQ,CAAC;YAE1C,GAAG;AACV,YAAQ,MAAM,2CAA2C,mBAAmB,IAAI,EAAE;IAElF,MAAM,iBAAiB,gBAAgB,KAAK;AAC5C,QAAI,UACF,uBAAsB;KAAE,GAAGA,IAAM;KAAE,GAAG;KAAgB,CAAC;;;AAK7D,MAAI,oBAAoB;GACtB,MAAM,MAAM,UAAU,mBAAmB;AAEzC,OAAI,KAAK,MAAM;AACb,0BAAsB,KAAK;AAC3B,kBAAc,IAAI;UACb;IAEL,MAAM,SAAS,gBAAgB,IAAI;AACnC,0BAAsB;KAAE,GAAGA,IAAM;KAAE,GAAG;KAAQ,CAAC;;QAGjD,uBAAsB,KAAK;AAG7B,eAAa;AACX,eAAY;;IAEb,CAAC,oBAAoB,UAAU,CAAC;CAEnC,MAAM,OAAO,aAAa,QAAQ,eAAe,YAAY,gBAAgB,IAM1E,EAAE,CAAC;CAEN,MAAM,SAAS,aACZ,QAAQ,eAAe,YAAY,gBAAgB;AAUlD,MAAI,WAAW,KAAK,KAAK,WAAW,IAAI,GAAG;AACzC,cAAW,IAAI;AACf,eAAY,IAAI;;IAGpB,EAAE,CACH;CAED,MAAM,OAAO,aACV,QAAQ,SAAS;AAChB,MAAI,oBAAoB;GACtB,MAAM,EAAE,GAAG,GAAG,GAAG,MAAM;GACvB,MAAM,EAAE,eAAe,OAAO,QAAQ;AACtC,OAAI,aACF,cAAa;IACX,YAAY;IACZ,IAAIA,IAAM;IACV,QAAQ,GACL,aAAa;KACZ;KACA;KACA;KACA;KACD,EACF;IACD,QAAQ,EAAE;IACX,CAAC;;IAGR,CAAC,oBAAoB,aAAa,CACnC;AAED,QACE,oCAAC;EAAS;EAAK,WAAW,QAAQ;IAC/B,QACC,oCAACC;EACC,KAAK;EACL,GAAI;EACG;EACM;EACb,MAAM;EACN,WAAW;EACX,QAAQ,CAAC,MAAM,QAAQ,EAAE,EAAE,MAAM,QAAQ,EAAE,CAAC;EAC5C,kBAAkB,CAAC,GAAG,EAAE;EACxB,iBAAgB;EAChB,QAAQ;EACR,UAAU;EACV,QAAQ;EACR,aAAa,gBAAgB,eAAe;EAC5C,aAAa,gBAAgB,eAAe;EAC5C,cAAc;EACd,OAAO,EACL,QAAQ,QACT;IAEA,SACoB,GACrB,KACA;;AAIV,gCAAe;;;;;;;AC5Kf,MAAa,cAAc,UAAU;CACnC,MAAM,EACJ,UACA,eACA,WACA,YACA,IACA,QACA,QACA,UACA,UACA,SACA,QACA,OACA,gBACA,cACA,eACA,kBACA,GAAG,UACD;CAqDJ,MAAM,UAnDY,YAAY,aAAW;EACvC,MAAM,EACJ,kDAAkD,EAChD,SAAS,QACV,EACF;EACD,UAAU;GACR,kDAAkD,EAChD,SAAS,QACV;GACD,YAAY;GACZ,OAAO;GACR;EACD,SAAS,EACP,0BAA0B;GACxB,gBAAgB;GAChB,UAAU;GACV,SAAS;GACV,EACF;EACD,QAAQ;GACN,QAAQ;GACR,WAAW,EACT,iBAAiBC,QAAM,QAAQ,OAAO,OACvC;GACD,SAAS,kBAAkB;GAC5B;EACD,gBAAgB;GACd,MAAM;GACN,SAAS;GACT,eAAe;GACf,YAAY;GACZ,gBAAgB;GACjB;EACD,6BAA6B;GAC3B,QACE,eAAe,0BACX,SACA,gBACA,gBACA;GACN,WAAW,mBAAmB,mBAAmB;GACjD,UAAU,eAAe,sBAAsB,IAAI;GACnD,SAAS;GACT,eAAe;GACf,gBAAgB;GAChB,SACE,iBACC,eAAe,oBAAoB,IAAIA,QAAM,QAAQ,EAAE;GAC3D;EACF,EAAE,EACwB;CAC3B,MAAM,SAAS,uCAAuC,KAAK,aAAa,GAAG;CAE3E,IAAI,OAAO;AACX,KAAI,WAAW,CAAC,KACd,QACE,oCAAC,SAAI,WAAW,QAAQ,kBACtB,oCAAC,oBAAiB,MAAM,KAAM,CAC1B;AAGV,KAAI,UAAU,CAAC,KACb,QAAO,oCAAC,aAAI,mBAAsB;AAGpC,QACE,oCAACC;EACC,GAAI;EACJ,WAAW,KACT,WACA,UAAU,SAAS,QAAQ,WAAW,QAAQ,MAC9C,QAAQ,QACT;EACO;EACR,iBAAiB;GACf,WAAW,QAAQ;GACnB,eAAe;GAChB;EACD,eACE,0DACG,eACD,oCAAC,yBACC,oCAACC;GACC,SAAS;GACT,YAAY;GACZ,SAAQ;IACR,CACgB,CACnB;IAGL,oCAAC,SAAI,WAAW,QAAQ,+BAA8B,KAAW,CACzD;;;;;AChHd,MAAM,yBAAyB,cAC7B,OAAO,cAAc,cACpB,aACC,OAAO,cAAc,YACrB,cAAc,QACd,cAAc;;;;AAKlB,MAAM,kBAAkB,YAAY,OAAO,QAAQ;CACjD,MAAM,EACJ,YACA,IACA,YACA,UACA,QAAQ,aACR,WACA,GAAG,SACD;CACJ,MAAM,EAAE,WAAW,OAAO,GAAG,gBAAgB;CAC7C,MAAM,cAAc,EAAE,GAAI,YAAY,SAAS,EAAE,EAAG;AAEpD,KAAI,SAAS,OAAO,UAAU,UAAU;AACtC,MAAI,OAAO,UAAU,eAAe,KAAK,OAAO,SAAS,CACvD,aAAY,SAAS,MAAM;AAE7B,MAAI,OAAO,UAAU,eAAe,KAAK,OAAO,QAAQ,CACtD,aAAY,QAAQ,MAAM;;CAI9B,MAAM,2BAA2B;EAC/B,GAAG;EACH,GAAI,YAAY,EAAE,WAAW,GAAG,EAAE;EAClC,GAAI,OAAO,KAAK,YAAY,CAAC,SAAS,EAAE,OAAO,aAAa,GAAG,EAAE;EAClE;CACD,MAAM,EAAE,WAAW,kBAAkB,eAAe;CAEpD,MAAM,WAAW,kBAAkB;AACjC,eAAa,GAAG;IACf,CAAC,YAAY,GAAG,CAAC;CAEpB,MAAM,EAAE,QAAQ,QAAQ,cAAc,cAAc;AAClD,MAAI,CAAC,gBAAgB,WAAW,CAC9B,QAAO,EAAE;EAEX,MAAM,MAAM,UAAU,WAAW;AAGjC,MAAI,CAAC,IACH,QAAO,EAAE;AAKX,MAAI,IAAI,aAAa,OAAO,IAAI,aAAa,CAC3C,QAAO;GAAE,QAAQ;GAAK,QAAQ,EAAE;GAAE;AAIpC,MAAI,OAAO,OAAO,QAAQ,YAAY,CAAC,eAAe,IAAI,IAAI,CAAC,IAAI,KAEjE,QAAO;GAAE,QADU,IAAI,UAAU,IAAI,WAAW;GACnB,QAAQ,IAAI,UAAU,EAAE;GAAE;AAIzD,UAAQ,KAAK,8CAA8C,WAAW,KAAK,IAAI;AAC/E,SAAO,EAAE;IACR;EAAC;EAAY;EAAW;EAAc,CAAC;CAE1C,MAAM,SAAS,cAAc;AAC3B,MAAI,CAAC,UAAW,QAAO,eAAe,EAAE;AAKxC,SAAO;GAAE,GAHa,OAAO,YAC3B,OAAO,QAAQ,UAAU,CAAC,KAAK,CAAC,KAAK,EAAE,oBAAoB,CAAC,KAAK,aAAa,CAAC,CAChF;GAC0B,GAAG;GAAa;IAC1C,CAAC,WAAW,YAAY,CAAC;CAE5B,MAAM,WAAW,aACd,MAAM,UAAU,UAAU,IAAI,GAAG,OAAO,OAAO,CAAC,EACjD,CAAC,IAAI,UAAU,CAChB;AAED,KAAI,CAAC,iBAAiB,CAAC,UACrB,QACE,oCAAC;EAAS;EAAgB;EAAkB;IAC1C,oCAAC;EAAW,GAAI;EAA0B,OAAM;IAAQ,uDAE3C,CACT;AAIV,KAAI,CAAC,OACH,QACE,oCAAC;EAAS;EAAgB;EAAkB;IAC1C,oCAAC;EAAW,GAAI;EAA0B,OAAM;IAAQ,yBAC1B,YAAW,KAC5B,CACT;AAIV,KAAI,CAAC,sBAAsB,OAAO,EAAE;AAClC,UAAQ,MACN,4BAA4B,WAAW,4CACvC,OACD;AACD,SACE,oCAAC;GAAS;GAAgB;GAAkB;KAC1C,oCAAC;GAAW,GAAI;GAA0B,OAAM;KAAQ,kCACjB,YAAW,KACrC,CACT;;CAIV,MAAM,gBACJ,oCAAC;EACC,GAAI;EACA;EACI;EACE;EACA;IAET,SACM;AAGX,QACE,oCAAC;EAAS;EAAgB;EAAkB;IAC1C,oCAAC,YAAS,UAAU,oCAAC,kBAAc,IAAG,cAAyB,CAC3D;EAER;AAEF,gBAAgB,cAAc;AAE9B,MAAM,0BAA0B,KAAK,gBAAgB;AACrD,wBAAwB,cAAc;AAEtC,8BAAe"}
1
+ {"version":3,"file":"DashboardWidget-CsOrr74H.js","names":["uuid","ResponsiveGridLayout","theme","FUICard","FUIMenuItem"],"sources":["../src/dashboard/getWidgetLayout.ts","../src/dashboard/DashboardCardGrid.jsx","../src/dashboard/WidgetCard.jsx","../src/dashboard/DashboardWidget.jsx"],"sourcesContent":["import { Layout } from 'react-grid-layout';\nimport { LayoutDimension } from './types';\n\nconst getW = (\n w: LayoutDimension | undefined\n): Pick<Layout, 'w' | 'minW' | 'maxW'> => {\n if (typeof w === 'object') {\n return {\n w: w.default,\n minW: w.min,\n maxW: w.max\n };\n }\n\n if (typeof w === 'number') {\n return { w };\n }\n\n return { w: 2 };\n};\n\nconst getH = (\n h: LayoutDimension | undefined\n): Pick<Layout, 'h' | 'minH' | 'maxH'> => {\n if (typeof h === 'object') {\n return {\n h: h.default,\n minH: h.min,\n maxH: h.max\n };\n }\n\n if (typeof h === 'number') {\n return { h };\n }\n\n return { h: 2 };\n};\n\n/**\n * Get a default layout for widgets of a type\n */\nexport default function getWidgetLayout(\n getWidget: Function,\n widgetType: string\n): Omit<Layout, 'i' | 'x' | 'y'> {\n const { w, h } = (getWidget && getWidget(widgetType)?.layout) ?? {};\n\n const layout: Omit<Layout, 'i' | 'x' | 'y'> = {\n ...getW(w),\n ...getH(h)\n };\n\n const wResizable = 'minW' in layout || 'maxW' in layout;\n const hResizable = 'minH' in layout || 'maxH' in layout;\n layout.isResizable = wResizable || hResizable;\n\n return layout;\n}\n","import { v4 as uuid } from 'uuid';\nimport React, { useCallback, useMemo, useRef, useState, useEffect } from 'react';\nimport { Responsive as ResponsiveGridLayout } from 'react-grid-layout';\nimport { makeStyles, useTheme } from '@material-ui/core';\nimport { useMeasure } from 'react-use';\nimport 'react-grid-layout/css/styles.css';\nimport 'react-resizable/css/styles.css';\nimport { useDragLayer } from 'react-dnd';\nimport getWidgetLayout from './getWidgetLayout.ts';\nimport { useShellStore } from '../stores/shellStore';\n\nconst useStyle = makeStyles(\n (theme) => ({\n root: {\n display: 'flex',\n flexDirection: 'column',\n width: '100%',\n height: '100%',\n marginBottom: (props) => (props?.disableMargin ? '' : theme.spacing(3))\n }\n }),\n { name: 'DashboardCardGrid' }\n);\n\nconst DASHBOARD_WIDGET = Symbol('DASHBOARD_WIDGET');\n\nconst breakpoints = {\n xs: 0,\n xl: 1150\n};\n\nconst breakpointCols = {\n xs: 4,\n xl: 4\n};\n\n/**\n * Grid layout for dashboard cards\n */\nconst DashboardCardGrid = (props) => {\n const classes = useStyle(props);\n const { children, onCreateCard, gridProperties, ...other } = props;\n const { getWidget } = useShellStore();\n const rglRef = useRef();\n const [ref, { width }] = useMeasure();\n const theme = useTheme();\n const { droppingWidgetType } = useDragLayer((monitor) => {\n if (monitor.getItemType() === DASHBOARD_WIDGET) {\n const { id: wigetType } = monitor.getItem();\n return { droppingWidgetType: wigetType };\n }\n\n return { droppingWidgetType: null };\n });\n\n const [droppingItemLayout, setDroppingItemLayout] = useState(null);\n\n useEffect(() => {\n let isMounted = true;\n\n // Asynchronously resolve the widget definition to get its layout properties\n const resolveLayout = async (widgetDefPromise) => {\n try {\n const module = await widgetDefPromise;\n // Handle ES modules with default exports\n const widgetDef = module?.default || module;\n // Use the external layout getter, assuming it can handle the resolved definition\n const layout = getWidgetLayout(widgetDef);\n if (isMounted) {\n setDroppingItemLayout({ i: uuid(), ...layout });\n }\n } catch (e) {\n console.error(`Error resolving layout for widget type \"${droppingWidgetType}\"`, e);\n // Fallback to a default layout on error\n const fallbackLayout = getWidgetLayout(null);\n if (isMounted) {\n setDroppingItemLayout({ i: uuid(), ...fallbackLayout });\n }\n }\n };\n\n if (droppingWidgetType) {\n const res = getWidget(droppingWidgetType);\n // Check if the result is a promise (for async widgets)\n if (res?.then) {\n setDroppingItemLayout(null); // Clear previous layout while loading\n resolveLayout(res);\n } else {\n // Handle synchronously available widget definitions\n const layout = getWidgetLayout(res);\n setDroppingItemLayout({ i: uuid(), ...layout });\n }\n } else {\n setDroppingItemLayout(null);\n }\n\n return () => {\n isMounted = false;\n };\n }, [droppingWidgetType, getWidget]);\n\n const drag = useCallback((layout, oldLayoutItem, layoutItem, placeholder) => {\n // Cards larger than 1 should snap to columns that are a multiple of 2\n // if (layoutItem.w > 1) {\n //   // @fixme This affects the visual placeholder, but doesn't actually fix the layout item when its dropped\n //   placeholder.x = layoutItem.x = Math.floor(layoutItem.x / 2) * 2;\n // }\n }, []);\n\n const resize = useCallback(\n (layout, oldLayoutItem, layoutItem, placeholder) => {\n // Widths larger than 1 should be a multiple of 2\n // The small size of columns is just so we can have small 1x1 tiles that are 1/2 the size of normal cards\n // if (layoutItem.w > 1) {\n //   const w = Math.floor(layoutItem.w / 2) * 3;\n //   layoutItem.w = w;\n //   placeholder.w = w;\n // }\n\n // There is no 3 (i.e. 6) column layout so don't allow cards to be that size either\n if (layoutItem.w >= 6 && layoutItem.w < 8) {\n layoutItem.w = 4;\n placeholder.w = 4;\n }\n },\n []\n );\n\n const drop = useCallback(\n (layout, item) => {\n if (droppingWidgetType) {\n const { x, y, w, h } = item;\n const { breakpoint } = rglRef.current.state;\n if (onCreateCard)\n onCreateCard({\n widgetType: droppingWidgetType,\n id: uuid(),\n layout: {\n [breakpoint]: {\n x,\n y,\n w,\n h\n }\n },\n params: []\n });\n }\n },\n [droppingWidgetType, onCreateCard]\n );\n\n return (\n <div ref={ref} className={classes.root}>\n {width ? (\n <ResponsiveGridLayout\n ref={rglRef}\n {...other}\n width={width}\n breakpoints={breakpoints}\n cols={breakpointCols}\n rowHeight={128}\n margin={[theme.spacing(3), theme.spacing(3)]}\n containerPadding={[0, 0]}\n draggableHandle='[data-handle]'\n onDrag={drag}\n onResize={resize}\n onDrop={drop}\n isDroppable={gridProperties?.isDroppable || false}\n isDraggable={gridProperties?.isDraggable || false}\n droppingItem={droppingItemLayout}\n style={{\n height: '100%'\n }}\n >\n {children}\n </ResponsiveGridLayout>\n ) : null}\n </div>\n );\n};\n\nexport default DashboardCardGrid;\n","import { DeleteIcon } from '@fluentui/react-icons';\nimport { makeStyles, CircularProgress, lighten } from '@material-ui/core';\nimport clsx from 'clsx';\nimport React from 'react';\nimport FUICard, { FUICardHeaderMenu } from '../UI/surfaces/cards/fluentCards/FUICard';\nimport FUIMenuItem from '../UI/widgets/FluentComponents/FUIMenuItem';\n\n/**\n * Core component for dashboard widget cards\n */\nexport const WidgetCard = (props) => {\n const {\n children,\n headerActions,\n className,\n widgetType,\n id,\n layout,\n params,\n setParam,\n onDelete,\n loading,\n errors,\n theme,\n hideWidgetName,\n innerPadding,\n contentHeight,\n contentMaxHeight,\n ...other\n } = props;\n\n const useStyles = makeStyles((theme) => ({\n root: {\n '&.react-resizable-hide .react-resizable-handle': {\n display: 'none'\n }\n },\n darkRoot: {\n '&.react-resizable-hide .react-resizable-handle': {\n display: 'none'\n },\n background: '#424242',\n color: 'white'\n },\n anyRoot: {\n '& .MuiCardContent-root': {\n justifyContent: 'space-between',\n overflow: 'auto',\n padding: 0\n }\n },\n handle: {\n cursor: 'move',\n '&:hover': {\n backgroundColor: theme.palette.action.hover\n },\n display: hideWidgetName && 'none'\n },\n loadingContent: {\n flex: 1,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center'\n },\n innerWidgetContentContainer: {\n height:\n widgetType === 'TransformerLoadWidget'\n ? 'auto'\n : contentHeight\n ? contentHeight\n : '100%',\n maxHeight: contentMaxHeight ? contentMaxHeight : '',\n minWidth: widgetType === 'ProgressBarWidget' ? 0 : 270,\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'space-between',\n padding:\n innerPadding ||\n (widgetType === 'VEERegisterRead' ? 0 : theme.spacing(2))\n }\n }));\n const classes = useStyles();\n const raised = /(^|\\s)react-draggable-dragging(\\s|$)/.test(className ?? '');\n\n let body = children;\n if (loading && !body) {\n body = (\n <div className={classes.loadingContent}>\n <CircularProgress size={64} />\n </div>\n );\n }\n if (errors && !body) {\n body = <div>Unexpected error</div>;\n }\n\n return (\n <FUICard\n {...other}\n className={clsx(\n className,\n theme === 'dark' ? classes.darkRoot : classes.root,\n classes.anyRoot\n )}\n raised={raised}\n CardHeaderProps={{\n className: classes.handle,\n 'data-handle': true\n }}\n headerActions={\n <>\n {headerActions}\n <FUICardHeaderMenu>\n <FUIMenuItem\n onClick={onDelete}\n fluentIcon={DeleteIcon}\n primary='Delete'\n />\n </FUICardHeaderMenu>\n </>\n }\n >\n <div className={classes.innerWidgetContentContainer}>{body}</div>\n </FUICard>\n );\n};\n","import React, {\n forwardRef,\n memo,\n Suspense,\n isValidElement,\n useCallback,\n useMemo\n} from 'react';\nimport { WidgetCard } from './WidgetCard';\nimport { useShellStore } from '../stores/shellStore';\nimport { PageLoading } from '../UI/feedback/PageLoading';\n\nconst isRenderableComponent = (Component) =>\n typeof Component === 'function' ||\n (Component &&\n typeof Component === 'object' &&\n Component !== null &&\n '$$typeof' in Component);\n\n/**\n * Widget implementation for dashboards that correctly handles lazy-loading.\n */\nconst DashboardWidget = forwardRef((props, ref) => {\n const {\n widgetType,\n id,\n deleteCard,\n children,\n params: paramValues,\n setParams,\n ...rest\n } = props;\n const { className, style, ...widgetProps } = rest;\n const widgetStyle = { ...(widgetProps.style || {}) };\n\n if (style && typeof style === 'object') {\n if (Object.prototype.hasOwnProperty.call(style, 'height')) {\n widgetStyle.height = style.height;\n }\n if (Object.prototype.hasOwnProperty.call(style, 'width')) {\n widgetStyle.width = style.width;\n }\n }\n\n const widgetPropsWithClassName = {\n ...widgetProps,\n ...(className ? { className } : {}),\n ...(Object.keys(widgetStyle).length ? { style: widgetStyle } : {})\n };\n const { getWidget, isValidWidget } = useShellStore();\n\n const onDelete = useCallback(() => {\n deleteCard?.(id);\n }, [deleteCard, id]);\n\n const { Widget, params: paramDefs } = useMemo(() => {\n if (!isValidWidget?.(widgetType)) {\n return {};\n }\n const res = getWidget(widgetType);\n\n // If getWidget returns null or undefined, widget not found\n if (!res) {\n return {};\n }\n\n // If it's already a React.lazy component (LazyExoticComponent), use it directly\n // React.lazy components have a $$typeof property set to Symbol.for('react.lazy')\n if (res.$$typeof === Symbol.for('react.lazy')) {\n return { Widget: res, params: {} };\n }\n\n // Handle descriptor object format (widget with params)\n if (res && typeof res === 'object' && !isValidElement(res) && !res.then) {\n const widgetComp = res.Widget || res.default || null;\n return { Widget: widgetComp, params: res.params || {} };\n }\n\n // If we receive anything else, it's an unsupported format.\n console.warn(`getWidget returned an unexpected type for \"${widgetType}\":`, res);\n return {};\n }, [widgetType, getWidget, isValidWidget]);\n\n const params = useMemo(() => {\n if (!paramDefs) return paramValues || {};\n\n const defaultParams = Object.fromEntries(\n Object.entries(paramDefs).map(([key, { defaultValue }]) => [key, defaultValue])\n );\n return { ...defaultParams, ...paramValues };\n }, [paramDefs, paramValues]);\n\n const setParam = useCallback(\n (name, value) => setParams(id, { [name]: value }),\n [id, setParams]\n );\n\n if (!isValidWidget || !getWidget) {\n return (\n <div ref={ref} className={className} style={style}>\n <WidgetCard {...widgetPropsWithClassName} title='Error'>\n isValidWidget or getWidget functions are not defined\n </WidgetCard>\n </div>\n );\n }\n\n if (!Widget) {\n return (\n <div ref={ref} className={className} style={style}>\n <WidgetCard {...widgetPropsWithClassName} title='Error'>\n Unknown widget type &ldquo;{widgetType}&rdquo;.\n </WidgetCard>\n </div>\n );\n }\n\n if (!isRenderableComponent(Widget)) {\n console.error(\n `DashboardWidget: widget \"${widgetType}\" resolved to a non-renderable component.`,\n Widget\n );\n return (\n <div ref={ref} className={className} style={style}>\n <WidgetCard {...widgetPropsWithClassName} title='Error'>\n Unable to render widget type &ldquo;{widgetType}&rdquo;.\n </WidgetCard>\n </div>\n );\n }\n\n const widgetElement = (\n <Widget\n {...widgetPropsWithClassName}\n id={id}\n params={params}\n setParam={setParam}\n onDelete={onDelete}\n >\n {children}\n </Widget>\n );\n\n return (\n <div ref={ref} className={className} style={style}>\n <Suspense fallback={<PageLoading />}>{widgetElement}</Suspense>\n </div>\n );\n});\n\nDashboardWidget.displayName = 'DashboardWidget';\n\nconst MemoizedDashboardWidget = memo(DashboardWidget);\nMemoizedDashboardWidget.displayName = 'DashboardWidget';\n\nexport default MemoizedDashboardWidget;\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"Field-Cda5rJe2.js","names":["Field: FieldComponent","value","FinalField","name"],"sources":["../src/utilities/form/Field.tsx"],"sourcesContent":["import { InputBaseComponentProps } from '@material-ui/core';\nimport React, {\n ElementType,\n forwardRef,\n useCallback,\n ComponentType,\n} from 'react';\nimport {\n Field as FinalField,\n FieldProps as FinalFieldProps,\n FieldRenderProps,\n} from 'react-final-form';\n\nexport interface MuiFieldComponentProps {\n error?: boolean;\n helperText?: React.ReactNode;\n inputProps?: InputBaseComponentProps;\n onChange: React.ChangeEventHandler;\n ComponentProps?: any;\n}\n\nexport type MuiFieldComponent = ElementType<MuiFieldComponentProps>;\n\nexport type FieldProps<\n FieldValue,\n RP extends FieldRenderProps<FieldValue, T>,\n T extends HTMLElement = HTMLElement\n > = {\n component: MuiFieldComponent;\n // @fixme Some of the onChange handlers pass value instead\n valueForChange?: (event: React.ChangeEvent<T>) => FieldValue;\n pattern?: string;\n } & Pick<\n FinalFieldProps<FieldValue, RP, T>,\n | 'afterSubmit'\n | 'allowNull'\n | 'beforeSubmit'\n | 'defaultValue'\n | 'format'\n | 'formatOnBlur'\n | 'initialValue'\n | 'isEqual'\n | 'name'\n | 'parse'\n | 'subscription'\n | 'type'\n | 'validate'\n | 'validateFields'\n | 'value'\n | 'required'\n > &\n MuiFieldComponentProps; // @fixme Add another generic to extend this with componentProps\n\ntype FieldComponent<\n FieldValue = any,\n RP extends FieldRenderProps<FieldValue, T> = FieldRenderProps<\n FieldValue,\n HTMLElement\n >,\n T extends HTMLElement = HTMLElement\n > = ComponentType<FieldProps<FieldValue, RP, T>>;\n\n/**\n * final-form Field wrapper that supports using Material UI fields as components\n * @todo Implement a validation function that uses required, etc... (or defer this till Redwerks' form library is built)\n */\nexport let Field: FieldComponent = forwardRef((props, ref) => {\n const {\n component: Component,\n afterSubmit,\n allowNull,\n beforeSubmit,\n component,\n defaultValue,\n format,\n formatOnBlur,\n initialValue,\n isEqual,\n name,\n parse,\n // @ts-ignore\n render, // extract the render prop so it doesn't get passed to Field\n subscription,\n validate,\n validateFields,\n value, // radio/checkbox\n helperText,\n valueForChange,\n required,\n ComponentProps,\n type,\n ...componentProps\n } = props;\n const fieldProps = {\n afterSubmit,\n allowNull,\n beforeSubmit,\n defaultValue,\n format,\n formatOnBlur,\n initialValue,\n isEqual,\n name,\n parse,\n subscription,\n validate,\n validateFields,\n value,\n type\n };\n\n // @fixme: will need to add a more generic validator for other valdiation props\n const makeValidation = useCallback(\n (value, allValues, meta) => {\n if (required && ((typeof (value) !== \"number\" && !!!value) || Array.isArray(value))) {\n if (Array.isArray(value) && value.length) {\n return undefined;\n } else if (!!value && !Array.isArray(value)) {\n return undefined;\n } else {\n return 'Required';\n }\n }\n if (validate) {\n return validate(value, allValues, meta);\n }\n },\n [required, validate]\n );\n\n return (\n <FinalField {...fieldProps} validate={makeValidation}>\n {params => {\n const { input, meta } = params;\n const { name, onChange, ...inputProps } = input;\n const showError =\n ((meta.submitError && !meta.dirtySinceLastSubmit) || meta.error) &&\n meta.touched;\n\n return (\n <Component\n ref={ref as any} // @fixme\n required={required}\n {...componentProps}\n {...ComponentProps}\n helperText={showError ? meta.error || meta.submitError : helperText}\n error={showError}\n onChange={(...args: any[]) => {\n if (valueForChange) {\n // @ts-ignore\n args = [valueForChange(...args)];\n }\n // @ts-ignore\n onChange(...args);\n }}\n name={name}\n {...inputProps}\n //value={value}\n />\n );\n }}\n </FinalField>\n );\n});\nField.displayName = 'Field';\n"],"mappings":";;;;;;;;AAkEA,IAAWA,UAAwB,YAAY,OAAO,QAAQ;CAC5D,MAAM,EACJ,WAAW,WACX,aACA,WACA,cACA,WACA,cACA,QACA,cACA,cACA,SACA,MACA,OAEA,QACA,cACA,UACA,gBACA,OACA,YACA,gBACA,UACA,gBACA,MACA,GAAG,mBACD;CACJ,MAAM,aAAa;EACjB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD;CAGD,MAAM,iBAAiB,aACpB,SAAO,WAAW,SAAS;AAC1B,MAAI,aAAc,OAAQC,YAAW,YAAY,CAAC,CAAC,CAACA,WAAU,MAAM,QAAQA,QAAM,EAChF,KAAI,MAAM,QAAQA,QAAM,IAAIA,QAAM,OAChC;WACS,CAAC,CAACA,WAAS,CAAC,MAAM,QAAQA,QAAM,CACzC;MAEA,QAAO;AAGX,MAAI,SACF,QAAO,SAASA,SAAO,WAAW,KAAK;IAG3C,CAAC,UAAU,SAAS,CACrB;AAED,QACE,oCAACC;EAAW,GAAI;EAAY,UAAU;KACnC,WAAU;EACT,MAAM,EAAE,OAAO,SAAS;EACxB,MAAM,EAAE,cAAM,UAAU,GAAG,eAAe;EAC1C,MAAM,aACF,KAAK,eAAe,CAAC,KAAK,wBAAyB,KAAK,UAC1D,KAAK;AAEP,SACE,oCAAC;GACM;GACK;GACV,GAAI;GACJ,GAAI;GACJ,YAAY,YAAY,KAAK,SAAS,KAAK,cAAc;GACzD,OAAO;GACP,WAAW,GAAG,SAAgB;AAC5B,QAAI,eAEF,QAAO,CAAC,eAAe,GAAG,KAAK,CAAC;AAGlC,aAAS,GAAG,KAAK;;GAEnB,MAAMC;GACN,GAAI;IAEJ;GAGK;EAEf;AACF,QAAM,cAAc"}
1
+ {"version":3,"file":"Field-Cda5rJe2.js","names":["Field","value","FinalField","name"],"sources":["../src/utilities/form/Field.tsx"],"sourcesContent":["import { InputBaseComponentProps } from '@material-ui/core';\nimport React, {\n ElementType,\n forwardRef,\n useCallback,\n ComponentType,\n} from 'react';\nimport {\n Field as FinalField,\n FieldProps as FinalFieldProps,\n FieldRenderProps,\n} from 'react-final-form';\n\nexport interface MuiFieldComponentProps {\n error?: boolean;\n helperText?: React.ReactNode;\n inputProps?: InputBaseComponentProps;\n onChange: React.ChangeEventHandler;\n ComponentProps?: any;\n}\n\nexport type MuiFieldComponent = ElementType<MuiFieldComponentProps>;\n\nexport type FieldProps<\n FieldValue,\n RP extends FieldRenderProps<FieldValue, T>,\n T extends HTMLElement = HTMLElement\n > = {\n component: MuiFieldComponent;\n // @fixme Some of the onChange handlers pass value instead\n valueForChange?: (event: React.ChangeEvent<T>) => FieldValue;\n pattern?: string;\n } & Pick<\n FinalFieldProps<FieldValue, RP, T>,\n | 'afterSubmit'\n | 'allowNull'\n | 'beforeSubmit'\n | 'defaultValue'\n | 'format'\n | 'formatOnBlur'\n | 'initialValue'\n | 'isEqual'\n | 'name'\n | 'parse'\n | 'subscription'\n | 'type'\n | 'validate'\n | 'validateFields'\n | 'value'\n | 'required'\n > &\n MuiFieldComponentProps; // @fixme Add another generic to extend this with componentProps\n\ntype FieldComponent<\n FieldValue = any,\n RP extends FieldRenderProps<FieldValue, T> = FieldRenderProps<\n FieldValue,\n HTMLElement\n >,\n T extends HTMLElement = HTMLElement\n > = ComponentType<FieldProps<FieldValue, RP, T>>;\n\n/**\n * final-form Field wrapper that supports using Material UI fields as components\n * @todo Implement a validation function that uses required, etc... (or defer this till Redwerks' form library is built)\n */\nexport let Field: FieldComponent = forwardRef((props, ref) => {\n const {\n component: Component,\n afterSubmit,\n allowNull,\n beforeSubmit,\n component,\n defaultValue,\n format,\n formatOnBlur,\n initialValue,\n isEqual,\n name,\n parse,\n // @ts-ignore\n render, // extract the render prop so it doesn't get passed to Field\n subscription,\n validate,\n validateFields,\n value, // radio/checkbox\n helperText,\n valueForChange,\n required,\n ComponentProps,\n type,\n ...componentProps\n } = props;\n const fieldProps = {\n afterSubmit,\n allowNull,\n beforeSubmit,\n defaultValue,\n format,\n formatOnBlur,\n initialValue,\n isEqual,\n name,\n parse,\n subscription,\n validate,\n validateFields,\n value,\n type\n };\n\n // @fixme: will need to add a more generic validator for other valdiation props\n const makeValidation = useCallback(\n (value, allValues, meta) => {\n if (required && ((typeof (value) !== \"number\" && !!!value) || Array.isArray(value))) {\n if (Array.isArray(value) && value.length) {\n return undefined;\n } else if (!!value && !Array.isArray(value)) {\n return undefined;\n } else {\n return 'Required';\n }\n }\n if (validate) {\n return validate(value, allValues, meta);\n }\n },\n [required, validate]\n );\n\n return (\n <FinalField {...fieldProps} validate={makeValidation}>\n {params => {\n const { input, meta } = params;\n const { name, onChange, ...inputProps } = input;\n const showError =\n ((meta.submitError && !meta.dirtySinceLastSubmit) || meta.error) &&\n meta.touched;\n\n return (\n <Component\n ref={ref as any} // @fixme\n required={required}\n {...componentProps}\n {...ComponentProps}\n helperText={showError ? meta.error || meta.submitError : helperText}\n error={showError}\n onChange={(...args: any[]) => {\n if (valueForChange) {\n // @ts-ignore\n args = [valueForChange(...args)];\n }\n // @ts-ignore\n onChange(...args);\n }}\n name={name}\n {...inputProps}\n //value={value}\n />\n );\n }}\n </FinalField>\n );\n});\nField.displayName = 'Field';\n"],"mappings":";;;;;;;;AAkEA,IAAWA,UAAwB,YAAY,OAAO,QAAQ;CAC5D,MAAM,EACJ,WAAW,WACX,aACA,WACA,cACA,WACA,cACA,QACA,cACA,cACA,SACA,MACA,OAEA,QACA,cACA,UACA,gBACA,OACA,YACA,gBACA,UACA,gBACA,MACA,GAAG,mBACD;CACJ,MAAM,aAAa;EACjB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD;CAGD,MAAM,iBAAiB,aACpB,SAAO,WAAW,SAAS;AAC1B,MAAI,aAAc,OAAQC,YAAW,YAAY,CAAC,CAAC,CAACA,WAAU,MAAM,QAAQA,QAAM,EAChF,KAAI,MAAM,QAAQA,QAAM,IAAIA,QAAM,OAChC;WACS,CAAC,CAACA,WAAS,CAAC,MAAM,QAAQA,QAAM,CACzC;MAEA,QAAO;AAGX,MAAI,SACF,QAAO,SAASA,SAAO,WAAW,KAAK;IAG3C,CAAC,UAAU,SAAS,CACrB;AAED,QACE,oCAACC;EAAW,GAAI;EAAY,UAAU;KACnC,WAAU;EACT,MAAM,EAAE,OAAO,SAAS;EACxB,MAAM,EAAE,cAAM,UAAU,GAAG,eAAe;EAC1C,MAAM,aACF,KAAK,eAAe,CAAC,KAAK,wBAAyB,KAAK,UAC1D,KAAK;AAEP,SACE,oCAAC;GACM;GACK;GACV,GAAI;GACJ,GAAI;GACJ,YAAY,YAAY,KAAK,SAAS,KAAK,cAAc;GACzD,OAAO;GACP,WAAW,GAAG,SAAgB;AAC5B,QAAI,eAEF,QAAO,CAAC,eAAe,GAAG,KAAK,CAAC;AAGlC,aAAS,GAAG,KAAK;;GAEnB,MAAMC;GACN,GAAI;IAEJ;GAGK;EAEf;AACF,QAAM,cAAc"}
@@ -1 +1 @@
1
- {"version":3,"file":"Form-DbOA5j38.js","names":["isFocusableInput","findInput","getAllInputs","createDecorator","FinalForm","Form: React.FC<FormProps>"],"sources":["../src/utilities/form/final-form-scroll/isFocusableInput.js","../src/utilities/form/final-form-scroll/getAllInputs.js","../src/utilities/form/final-form-scroll/findInput.js","../src/utilities/form/final-form-scroll/createDecorator.js","../src/utilities/form/Form.tsx"],"sourcesContent":["const isFocusableInput = (wtf) =>\n !!(wtf && typeof wtf.focus === 'function');\n\nexport default isFocusableInput;\n","import isFocusableInput from './isFocusableInput';\n\nconst getAllInputs = () => {\n if (typeof document === 'undefined') {\n return [];\n }\n return Array.prototype.slice\n .call(document.forms)\n .reduce(\n (accumulator, form) =>\n accumulator.concat(\n Array.prototype.slice.call(form).filter(isFocusableInput)\n ),\n []\n );\n};\n\nexport default getAllInputs;\n","import { getIn } from 'final-form';\n\nconst findInput = (inputs, errors) =>\n inputs.find(input => input.name && getIn(errors, input.name));\n\nexport default findInput;\n","import getAllInputs from './getAllInputs.js';\nimport findInput from './findInput.js';\n\nconst noop = () => {};\n\n/**\n * The decorator is created based on final-form-focus https://github.com/final-form/final-form-focus\n */\nconst createDecorator = () => (form) => {\n const scrollToFirstError = (errors) => {\n const allInputs = getAllInputs();\n const firstInput = findInput(allInputs, errors);\n const inputToScrollTo = firstInput?.parentElement;\n if (inputToScrollTo) {\n inputToScrollTo.scrollIntoView({ behavior: 'smooth' });\n }\n };\n // Save original submit function\n const originalSubmit = form.submit;\n let state = {};\n const unsubscribe = form.subscribe(\n (nextState) => {\n state = nextState;\n },\n { errors: true, submitErrors: true }\n );\n // What to do after submit\n const afterSubmit = () => {\n const { errors, submitErrors } = state;\n if (errors && Object.keys(errors).length) {\n scrollToFirstError(errors);\n } else if (submitErrors && Object.keys(submitErrors).length) {\n scrollToFirstError(submitErrors);\n }\n };\n\n // Rewrite submit function\n form.submit = () => {\n const result = originalSubmit.call(form);\n if (result && typeof result.then === 'function') {\n // async\n result.then(afterSubmit, noop);\n } else {\n // sync\n afterSubmit();\n }\n return result;\n };\n\n return () => {\n unsubscribe();\n form.submit = originalSubmit;\n };\n};\n\nexport default createDecorator;\n","import React, { forwardRef, useImperativeHandle } from 'react';\nimport {\n AnyObject,\n Form as FinalForm,\n FormProps as FinalFormProps,\n FormRenderProps,\n} from 'react-final-form';\nimport createDecorator from './final-form-scroll/createDecorator';\n\nexport interface FormProps<FormValues = AnyObject>\n extends FinalFormProps<FormValues> {\n children?: (props: FormRenderProps<FormValues>) => React.ReactNode;\n id?: string;\n}\nconst scrollToError = createDecorator();\n\n/**\n * final-form Form wrapper with automatic <form> and submit handler\n */\n\nconst _Form = ({ render: renderProp, children, id, ...props }: FormProps, ref: React.Ref<any>) => {\n const render = renderProp || children;\n\n return (\n <FinalForm ref={ref} decorators={[scrollToError]} {...props}>\n {params => {\n useImperativeHandle(ref, () => ({ ...params}))\n return (\n <form onSubmit={params.handleSubmit} noValidate={true} id={id}>\n {typeof render === 'function' ? render(params) : render}\n </form>\n )\n }}\n </FinalForm>\n );\n};\n\nexport const Form: React.FC<FormProps> = forwardRef(_Form)\n"],"mappings":";;;;;AAAA,MAAM,oBAAoB,QACxB,CAAC,EAAE,OAAO,OAAO,IAAI,UAAU;AAEjC,+BAAe;;;;ACDf,MAAM,qBAAqB;AACzB,KAAI,OAAO,aAAa,YACtB,QAAO,EAAE;AAEX,QAAO,MAAM,UAAU,MACpB,KAAK,SAAS,MAAM,CACpB,QACE,aAAa,SACZ,YAAY,OACV,MAAM,UAAU,MAAM,KAAK,KAAK,CAAC,OAAOA,yBAAiB,CAC1D,EACH,EAAE,CACH;;AAGL,2BAAe;;;;ACff,MAAM,aAAa,QAAQ,WACzB,OAAO,MAAK,UAAS,MAAM,QAAQ,MAAM,QAAQ,MAAM,KAAK,CAAC;AAE/D,wBAAe;;;;ACFf,MAAM,aAAa;;;;AAKnB,MAAM,yBAAyB,SAAS;CACtC,MAAM,sBAAsB,WAAW;EAGrC,MAAM,kBADaC,kBADDC,sBAAc,EACQ,OAAO,EACX;AACpC,MAAI,gBACF,iBAAgB,eAAe,EAAE,UAAU,UAAU,CAAC;;CAI1D,MAAM,iBAAiB,KAAK;CAC5B,IAAI,QAAQ,EAAE;CACd,MAAM,cAAc,KAAK,WACtB,cAAc;AACb,UAAQ;IAEV;EAAE,QAAQ;EAAM,cAAc;EAAM,CACrC;CAED,MAAM,oBAAoB;EACxB,MAAM,EAAE,QAAQ,iBAAiB;AACjC,MAAI,UAAU,OAAO,KAAK,OAAO,CAAC,OAChC,oBAAmB,OAAO;WACjB,gBAAgB,OAAO,KAAK,aAAa,CAAC,OACnD,oBAAmB,aAAa;;AAKpC,MAAK,eAAe;EAClB,MAAM,SAAS,eAAe,KAAK,KAAK;AACxC,MAAI,UAAU,OAAO,OAAO,SAAS,WAEnC,QAAO,KAAK,aAAa,KAAK;MAG9B,cAAa;AAEf,SAAO;;AAGT,cAAa;AACX,eAAa;AACb,OAAK,SAAS;;;AAIlB,8BAAe;;;;ACzCf,MAAM,gBAAgBC,yBAAiB;;;;AAMvC,MAAM,SAAS,EAAE,QAAQ,YAAY,UAAU,IAAI,GAAG,SAAoB,QAAwB;CAChG,MAAM,SAAS,cAAc;AAE7B,QACE,oCAACC;EAAe;EAAK,YAAY,CAAC,cAAc;EAAE,GAAI;KACnD,WAAU;AACR,sBAAoB,YAAY,EAAE,GAAG,QAAO,EAAE;AAC/C,SACE,oCAAC;GAAK,UAAU,OAAO;GAAc,YAAY;GAAU;KACxD,OAAO,WAAW,aAAa,OAAO,OAAO,GAAG,OAC5C;GAGD;;AAIhB,MAAaC,SAA4B,WAAW,MAAM"}
1
+ {"version":3,"file":"Form-DbOA5j38.js","names":["isFocusableInput","findInput","getAllInputs","createDecorator","FinalForm","Form"],"sources":["../src/utilities/form/final-form-scroll/isFocusableInput.js","../src/utilities/form/final-form-scroll/getAllInputs.js","../src/utilities/form/final-form-scroll/findInput.js","../src/utilities/form/final-form-scroll/createDecorator.js","../src/utilities/form/Form.tsx"],"sourcesContent":["const isFocusableInput = (wtf) =>\n !!(wtf && typeof wtf.focus === 'function');\n\nexport default isFocusableInput;\n","import isFocusableInput from './isFocusableInput';\n\nconst getAllInputs = () => {\n if (typeof document === 'undefined') {\n return [];\n }\n return Array.prototype.slice\n .call(document.forms)\n .reduce(\n (accumulator, form) =>\n accumulator.concat(\n Array.prototype.slice.call(form).filter(isFocusableInput)\n ),\n []\n );\n};\n\nexport default getAllInputs;\n","import { getIn } from 'final-form';\n\nconst findInput = (inputs, errors) =>\n inputs.find(input => input.name && getIn(errors, input.name));\n\nexport default findInput;\n","import getAllInputs from './getAllInputs.js';\nimport findInput from './findInput.js';\n\nconst noop = () => {};\n\n/**\n * The decorator is created based on final-form-focus https://github.com/final-form/final-form-focus\n */\nconst createDecorator = () => (form) => {\n const scrollToFirstError = (errors) => {\n const allInputs = getAllInputs();\n const firstInput = findInput(allInputs, errors);\n const inputToScrollTo = firstInput?.parentElement;\n if (inputToScrollTo) {\n inputToScrollTo.scrollIntoView({ behavior: 'smooth' });\n }\n };\n // Save original submit function\n const originalSubmit = form.submit;\n let state = {};\n const unsubscribe = form.subscribe(\n (nextState) => {\n state = nextState;\n },\n { errors: true, submitErrors: true }\n );\n // What to do after submit\n const afterSubmit = () => {\n const { errors, submitErrors } = state;\n if (errors && Object.keys(errors).length) {\n scrollToFirstError(errors);\n } else if (submitErrors && Object.keys(submitErrors).length) {\n scrollToFirstError(submitErrors);\n }\n };\n\n // Rewrite submit function\n form.submit = () => {\n const result = originalSubmit.call(form);\n if (result && typeof result.then === 'function') {\n // async\n result.then(afterSubmit, noop);\n } else {\n // sync\n afterSubmit();\n }\n return result;\n };\n\n return () => {\n unsubscribe();\n form.submit = originalSubmit;\n };\n};\n\nexport default createDecorator;\n","import React, { forwardRef, useImperativeHandle } from 'react';\nimport {\n AnyObject,\n Form as FinalForm,\n FormProps as FinalFormProps,\n FormRenderProps,\n} from 'react-final-form';\nimport createDecorator from './final-form-scroll/createDecorator';\n\nexport interface FormProps<FormValues = AnyObject>\n extends FinalFormProps<FormValues> {\n children?: (props: FormRenderProps<FormValues>) => React.ReactNode;\n id?: string;\n}\nconst scrollToError = createDecorator();\n\n/**\n * final-form Form wrapper with automatic <form> and submit handler\n */\n\nconst _Form = ({ render: renderProp, children, id, ...props }: FormProps, ref: React.Ref<any>) => {\n const render = renderProp || children;\n\n return (\n <FinalForm ref={ref} decorators={[scrollToError]} {...props}>\n {params => {\n useImperativeHandle(ref, () => ({ ...params}))\n return (\n <form onSubmit={params.handleSubmit} noValidate={true} id={id}>\n {typeof render === 'function' ? render(params) : render}\n </form>\n )\n }}\n </FinalForm>\n );\n};\n\nexport const Form: React.FC<FormProps> = forwardRef(_Form)\n"],"mappings":";;;;;AAAA,MAAM,oBAAoB,QACxB,CAAC,EAAE,OAAO,OAAO,IAAI,UAAU;AAEjC,+BAAe;;;;ACDf,MAAM,qBAAqB;AACzB,KAAI,OAAO,aAAa,YACtB,QAAO,EAAE;AAEX,QAAO,MAAM,UAAU,MACpB,KAAK,SAAS,MAAM,CACpB,QACE,aAAa,SACZ,YAAY,OACV,MAAM,UAAU,MAAM,KAAK,KAAK,CAAC,OAAOA,yBAAiB,CAC1D,EACH,EAAE,CACH;;AAGL,2BAAe;;;;ACff,MAAM,aAAa,QAAQ,WACzB,OAAO,MAAK,UAAS,MAAM,QAAQ,MAAM,QAAQ,MAAM,KAAK,CAAC;AAE/D,wBAAe;;;;ACFf,MAAM,aAAa;;;;AAKnB,MAAM,yBAAyB,SAAS;CACtC,MAAM,sBAAsB,WAAW;EAGrC,MAAM,kBADaC,kBADDC,sBAAc,EACQ,OAAO,EACX;AACpC,MAAI,gBACF,iBAAgB,eAAe,EAAE,UAAU,UAAU,CAAC;;CAI1D,MAAM,iBAAiB,KAAK;CAC5B,IAAI,QAAQ,EAAE;CACd,MAAM,cAAc,KAAK,WACtB,cAAc;AACb,UAAQ;IAEV;EAAE,QAAQ;EAAM,cAAc;EAAM,CACrC;CAED,MAAM,oBAAoB;EACxB,MAAM,EAAE,QAAQ,iBAAiB;AACjC,MAAI,UAAU,OAAO,KAAK,OAAO,CAAC,OAChC,oBAAmB,OAAO;WACjB,gBAAgB,OAAO,KAAK,aAAa,CAAC,OACnD,oBAAmB,aAAa;;AAKpC,MAAK,eAAe;EAClB,MAAM,SAAS,eAAe,KAAK,KAAK;AACxC,MAAI,UAAU,OAAO,OAAO,SAAS,WAEnC,QAAO,KAAK,aAAa,KAAK;MAG9B,cAAa;AAEf,SAAO;;AAGT,cAAa;AACX,eAAa;AACb,OAAK,SAAS;;;AAIlB,8BAAe;;;;ACzCf,MAAM,gBAAgBC,yBAAiB;;;;AAMvC,MAAM,SAAS,EAAE,QAAQ,YAAY,UAAU,IAAI,GAAG,SAAoB,QAAwB;CAChG,MAAM,SAAS,cAAc;AAE7B,QACE,oCAACC;EAAe;EAAK,YAAY,CAAC,cAAc;EAAE,GAAI;KACnD,WAAU;AACR,sBAAoB,YAAY,EAAE,GAAG,QAAO,EAAE;AAC/C,SACE,oCAAC;GAAK,UAAU,OAAO;GAAc,YAAY;GAAU;KACxD,OAAO,WAAW,aAAa,OAAO,OAAO,GAAG,OAC5C;GAGD;;AAIhB,MAAaC,SAA4B,WAAW,MAAM"}
@@ -1 +1 @@
1
- {"version":3,"file":"FormButtons-BTCO-pzW.js","names":["FormButtonsCore: any","FormButtons: React.FC<FormButtonsProps>"],"sources":["../src/utilities/form/SubmitButton.tsx","../src/utilities/form/FormButtons.tsx"],"sourcesContent":["import { Button, ButtonProps } from '@material-ui/core';\nimport React, { forwardRef, ComponentType } from 'react';\nimport { FormSpy } from 'react-final-form';\nimport { FluentButton } from '../../UI/inputs/buttons/FluentButton';\n\nexport type SubmitButtonProps<\n P = {},\n D extends React.ElementType = 'button'\n > = ButtonProps<D, P> & {\n // @fixme Probably want to swap this with something that'll allow ...otherProps to inherit the specified component's props to pass through\n ButtonComponent?: typeof FluentButton;\n disablePristine: boolean;\n };\n\ntype SubmitButtonComponent<\n P = {},\n D extends React.ElementType = 'button'\n > = ComponentType<SubmitButtonProps<P, D>>;\n\n/**\n * A MUI Button varaint intended for use as the submit button for a form\n */\nexport let SubmitButton = forwardRef<HTMLButtonElement, SubmitButtonProps>((props, ref) => {\n const {\n ButtonComponent = FluentButton,\n disabled,\n disablePristine = true,\n ...otherProps\n } = props;\n\n return (\n <FormSpy subscription={{ submitting: true, pristine: true }}>\n {({ submitting, pristine }) => (\n <ButtonComponent\n ref={ref}\n type=\"submit\"\n disabled={submitting || (disablePristine && pristine) || disabled}\n {...otherProps}\n />\n )}\n </FormSpy>\n );\n});\nSubmitButton.displayName = 'SubmitButton';\n","import { makeStyles } from '@material-ui/core';\nimport React, { forwardRef, } from 'react';\n\nconst useStyles = makeStyles((theme:any) => ({\n root: {\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'flex-start',\n marginBottom: theme.spacing(2),\n marginTop: theme.spacing(1),\n '& > *': {\n margin: `0 ${theme.spacing(2)}px 0 0`,\n },\n },\n}));\n\nexport type FormButtonsProps = {};\n\n/**\n * A MUI Button varaint intended for use as the submit button for a form\n */\nconst FormButtonsCore: any = (\n props: any,\n ref: any\n) => {\n const classes = useStyles(props);\n const { children, ...otherProps } = props;\n\n return (\n <div {...otherProps} ref={ref as any} className={classes.root}>\n {children}\n </div>\n );\n};\nexport const FormButtons: React.FC<FormButtonsProps> = forwardRef(FormButtonsCore);\n"],"mappings":";;;;;;;;;AAsBA,IAAW,eAAe,YAAkD,OAAO,QAAQ;CACzF,MAAM,EACJ,kBAAkB,cAClB,UACA,kBAAkB,MAClB,GAAG,eACD;AAEJ,QACE,oCAAC,WAAQ,cAAc;EAAE,YAAY;EAAM,UAAU;EAAM,KACvD,EAAE,YAAY,eACd,oCAAC;EACM;EACL,MAAK;EACL,UAAU,cAAe,mBAAmB,YAAa;EACzD,GAAI;GACJ,CAEI;EAEZ;AACF,aAAa,cAAc;;;;ACxC3B,MAAM,YAAY,YAAY,WAAe,EAC3C,MAAM;CACJ,SAAS;CACT,eAAe;CACf,YAAY;CACZ,gBAAgB;CAChB,cAAc,MAAM,QAAQ,EAAE;CAC9B,WAAW,MAAM,QAAQ,EAAE;CAC3B,SAAS,EACP,QAAQ,KAAK,MAAM,QAAQ,EAAE,CAAC,SAC/B;CACF,EACF,EAAE;;;;AAOH,MAAMA,mBACJ,OACA,QACG;CACH,MAAM,UAAU,UAAU,MAAM;CAChC,MAAM,EAAE,UAAU,GAAG,eAAe;AAEpC,QACE,oCAAC;EAAI,GAAI;EAAiB;EAAY,WAAW,QAAQ;IACtD,SACG;;AAGV,MAAaC,cAA0C,WAAW,gBAAgB"}
1
+ {"version":3,"file":"FormButtons-BTCO-pzW.js","names":[],"sources":["../src/utilities/form/SubmitButton.tsx","../src/utilities/form/FormButtons.tsx"],"sourcesContent":["import { Button, ButtonProps } from '@material-ui/core';\nimport React, { forwardRef, ComponentType } from 'react';\nimport { FormSpy } from 'react-final-form';\nimport { FluentButton } from '../../UI/inputs/buttons/FluentButton';\n\nexport type SubmitButtonProps<\n P = {},\n D extends React.ElementType = 'button'\n > = ButtonProps<D, P> & {\n // @fixme Probably want to swap this with something that'll allow ...otherProps to inherit the specified component's props to pass through\n ButtonComponent?: typeof FluentButton;\n disablePristine: boolean;\n };\n\ntype SubmitButtonComponent<\n P = {},\n D extends React.ElementType = 'button'\n > = ComponentType<SubmitButtonProps<P, D>>;\n\n/**\n * A MUI Button varaint intended for use as the submit button for a form\n */\nexport let SubmitButton = forwardRef<HTMLButtonElement, SubmitButtonProps>((props, ref) => {\n const {\n ButtonComponent = FluentButton,\n disabled,\n disablePristine = true,\n ...otherProps\n } = props;\n\n return (\n <FormSpy subscription={{ submitting: true, pristine: true }}>\n {({ submitting, pristine }) => (\n <ButtonComponent\n ref={ref}\n type=\"submit\"\n disabled={submitting || (disablePristine && pristine) || disabled}\n {...otherProps}\n />\n )}\n </FormSpy>\n );\n});\nSubmitButton.displayName = 'SubmitButton';\n","import { makeStyles } from '@material-ui/core';\nimport React, { forwardRef, } from 'react';\n\nconst useStyles = makeStyles((theme:any) => ({\n root: {\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'flex-start',\n marginBottom: theme.spacing(2),\n marginTop: theme.spacing(1),\n '& > *': {\n margin: `0 ${theme.spacing(2)}px 0 0`,\n },\n },\n}));\n\nexport type FormButtonsProps = {};\n\n/**\n * A MUI Button varaint intended for use as the submit button for a form\n */\nconst FormButtonsCore: any = (\n props: any,\n ref: any\n) => {\n const classes = useStyles(props);\n const { children, ...otherProps } = props;\n\n return (\n <div {...otherProps} ref={ref as any} className={classes.root}>\n {children}\n </div>\n );\n};\nexport const FormButtons: React.FC<FormButtonsProps> = forwardRef(FormButtonsCore);\n"],"mappings":";;;;;;;;;AAsBA,IAAW,eAAe,YAAkD,OAAO,QAAQ;CACzF,MAAM,EACJ,kBAAkB,cAClB,UACA,kBAAkB,MAClB,GAAG,eACD;AAEJ,QACE,oCAAC,WAAQ,cAAc;EAAE,YAAY;EAAM,UAAU;EAAM,KACvD,EAAE,YAAY,eACd,oCAAC;EACM;EACL,MAAK;EACL,UAAU,cAAe,mBAAmB,YAAa;EACzD,GAAI;GACJ,CAEI;EAEZ;AACF,aAAa,cAAc;;;;ACxC3B,MAAM,YAAY,YAAY,WAAe,EAC3C,MAAM;CACJ,SAAS;CACT,eAAe;CACf,YAAY;CACZ,gBAAgB;CAChB,cAAc,MAAM,QAAQ,EAAE;CAC9B,WAAW,MAAM,QAAQ,EAAE;CAC3B,SAAS,EACP,QAAQ,KAAK,MAAM,QAAQ,EAAE,CAAC,SAC/B;CACF,EACF,EAAE;;;;AAOH,MAAM,mBACJ,OACA,QACG;CACH,MAAM,UAAU,UAAU,MAAM;CAChC,MAAM,EAAE,UAAU,GAAG,eAAe;AAEpC,QACE,oCAAC;EAAI,GAAI;EAAiB;EAAY,WAAW,QAAQ;IACtD,SACG;;AAGV,MAAa,cAA0C,WAAW,gBAAgB"}
@@ -1 +1 @@
1
- {"version":3,"file":"LayoutUnit-D4jJvonh.js","names":["LayoutUnit: React.FC<any>"],"sources":["../src/layout/LayoutUnit.tsx"],"sourcesContent":["import React from 'react'\nimport { makeStyles, Badge } from '@material-ui/core'\nimport clsx from 'clsx'\n\ntype LayoutUnitProps = {\n unit: 'nudge' | 'xxs' | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | 'xxl',\n highlight: any\n}\n\nconst useStyles = makeStyles((theme) => ({\n highlight: {\n background: 'pink',\n opacity: (props:LayoutUnitProps) => (props.highlight ? 0.2 : 0)\n },\n nudge: {\n height: theme.spacing(1)\n },\n xxs: {\n height: theme.spacing(2)\n },\n xs: {\n height: theme.spacing(3)\n },\n sm: {\n height: theme.spacing(4)\n },\n md: {\n height: theme.spacing(5)\n },\n lg: {\n height: theme.spacing(8)\n },\n xl: {\n height: theme.spacing(12)\n },\n xxl: {\n height: theme.spacing(20)\n }\n}))\n\n\n\n\nexport const LayoutUnit: React.FC<any> = (props: LayoutUnitProps) => {\n const classes = useStyles(props)\n\n let spaceUnit\n const { unit, highlight } = props\n\n switch (unit) {\n case 'nudge':\n spaceUnit = (\n <div className={clsx(classes.nudge, classes.highlight)}>\n {highlight && <Badge color='secondary' badgeContent='Nudge' />}\n </div>\n )\n break\n case 'xxs':\n spaceUnit = (\n <div className={clsx(classes.xxs, classes.highlight)}>\n {highlight && <Badge color='secondary' badgeContent='XXS' />}\n </div>\n )\n break\n case 'xs':\n spaceUnit = (\n <div className={clsx(classes.xs, classes.highlight)}>\n {highlight && <Badge color='secondary' badgeContent='XS' />}\n </div>\n )\n break\n case 'sm':\n spaceUnit = (\n <div className={clsx(classes.sm, classes.highlight)}>\n {highlight && <Badge color='secondary' badgeContent='SM' />}\n </div>\n )\n break\n case 'md':\n spaceUnit = (\n <div className={clsx(classes.md, classes.highlight)}>\n {highlight && <Badge color='secondary' badgeContent='MD' />}\n </div>\n )\n break\n case 'lg':\n spaceUnit = (\n <div className={clsx(classes.lg, classes.highlight)}>\n {highlight && <Badge color='secondary' badgeContent='LG' />}\n </div>\n )\n break\n case 'xl':\n spaceUnit = (\n <div className={clsx(classes.xl, classes.highlight)}>\n {highlight && <Badge color='secondary' badgeContent='XL' />}\n </div>\n )\n break\n case 'xxl':\n spaceUnit = (\n <div className={clsx(classes.xxl, classes.highlight)}>\n {highlight && <Badge color='secondary' badgeContent='XXL' />}\n </div>\n )\n break\n default:\n }\n\n return spaceUnit\n}\n"],"mappings":";;;;;AASA,MAAM,YAAY,YAAY,WAAW;CACvC,WAAW;EACT,YAAY;EACZ,UAAU,UAA2B,MAAM,YAAY,KAAM;EAC9D;CACD,OAAO,EACL,QAAQ,MAAM,QAAQ,EAAE,EACzB;CACD,KAAK,EACH,QAAQ,MAAM,QAAQ,EAAE,EACzB;CACD,IAAI,EACF,QAAQ,MAAM,QAAQ,EAAE,EACzB;CACD,IAAI,EACF,QAAQ,MAAM,QAAQ,EAAE,EACzB;CACD,IAAI,EACF,QAAQ,MAAM,QAAQ,EAAE,EACzB;CACD,IAAI,EACF,QAAQ,MAAM,QAAQ,EAAE,EACzB;CACD,IAAI,EACF,QAAQ,MAAM,QAAQ,GAAG,EAC1B;CACD,KAAK,EACH,QAAQ,MAAM,QAAQ,GAAG,EAC1B;CACF,EAAE;AAKH,MAAaA,cAA6B,UAA2B;CACnE,MAAM,UAAU,UAAU,MAAM;CAEhC,IAAI;CACJ,MAAM,EAAE,MAAM,cAAc;AAE5B,SAAQ,MAAR;EACE,KAAK;AACH,eACE,oCAAC,SAAI,WAAW,KAAK,QAAQ,OAAO,QAAQ,UAAU,IACnD,aAAa,oCAAC;IAAM,OAAM;IAAY,cAAa;KAAU,CAC1D;AAER;EACF,KAAK;AACH,eACE,oCAAC,SAAI,WAAW,KAAK,QAAQ,KAAK,QAAQ,UAAU,IACjD,aAAa,oCAAC;IAAM,OAAM;IAAY,cAAa;KAAQ,CACxD;AAER;EACF,KAAK;AACH,eACE,oCAAC,SAAI,WAAW,KAAK,QAAQ,IAAI,QAAQ,UAAU,IAChD,aAAa,oCAAC;IAAM,OAAM;IAAY,cAAa;KAAO,CACvD;AAER;EACF,KAAK;AACH,eACE,oCAAC,SAAI,WAAW,KAAK,QAAQ,IAAI,QAAQ,UAAU,IAChD,aAAa,oCAAC;IAAM,OAAM;IAAY,cAAa;KAAO,CACvD;AAER;EACF,KAAK;AACH,eACE,oCAAC,SAAI,WAAW,KAAK,QAAQ,IAAI,QAAQ,UAAU,IAChD,aAAa,oCAAC;IAAM,OAAM;IAAY,cAAa;KAAO,CACvD;AAER;EACF,KAAK;AACH,eACE,oCAAC,SAAI,WAAW,KAAK,QAAQ,IAAI,QAAQ,UAAU,IAChD,aAAa,oCAAC;IAAM,OAAM;IAAY,cAAa;KAAO,CACvD;AAER;EACF,KAAK;AACH,eACE,oCAAC,SAAI,WAAW,KAAK,QAAQ,IAAI,QAAQ,UAAU,IAChD,aAAa,oCAAC;IAAM,OAAM;IAAY,cAAa;KAAO,CACvD;AAER;EACF,KAAK;AACH,eACE,oCAAC,SAAI,WAAW,KAAK,QAAQ,KAAK,QAAQ,UAAU,IACjD,aAAa,oCAAC;IAAM,OAAM;IAAY,cAAa;KAAQ,CACxD;AAER;EACF;;AAGF,QAAO"}
1
+ {"version":3,"file":"LayoutUnit-D4jJvonh.js","names":[],"sources":["../src/layout/LayoutUnit.tsx"],"sourcesContent":["import React from 'react'\nimport { makeStyles, Badge } from '@material-ui/core'\nimport clsx from 'clsx'\n\ntype LayoutUnitProps = {\n unit: 'nudge' | 'xxs' | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | 'xxl',\n highlight: any\n}\n\nconst useStyles = makeStyles((theme) => ({\n highlight: {\n background: 'pink',\n opacity: (props:LayoutUnitProps) => (props.highlight ? 0.2 : 0)\n },\n nudge: {\n height: theme.spacing(1)\n },\n xxs: {\n height: theme.spacing(2)\n },\n xs: {\n height: theme.spacing(3)\n },\n sm: {\n height: theme.spacing(4)\n },\n md: {\n height: theme.spacing(5)\n },\n lg: {\n height: theme.spacing(8)\n },\n xl: {\n height: theme.spacing(12)\n },\n xxl: {\n height: theme.spacing(20)\n }\n}))\n\n\n\n\nexport const LayoutUnit: React.FC<any> = (props: LayoutUnitProps) => {\n const classes = useStyles(props)\n\n let spaceUnit\n const { unit, highlight } = props\n\n switch (unit) {\n case 'nudge':\n spaceUnit = (\n <div className={clsx(classes.nudge, classes.highlight)}>\n {highlight && <Badge color='secondary' badgeContent='Nudge' />}\n </div>\n )\n break\n case 'xxs':\n spaceUnit = (\n <div className={clsx(classes.xxs, classes.highlight)}>\n {highlight && <Badge color='secondary' badgeContent='XXS' />}\n </div>\n )\n break\n case 'xs':\n spaceUnit = (\n <div className={clsx(classes.xs, classes.highlight)}>\n {highlight && <Badge color='secondary' badgeContent='XS' />}\n </div>\n )\n break\n case 'sm':\n spaceUnit = (\n <div className={clsx(classes.sm, classes.highlight)}>\n {highlight && <Badge color='secondary' badgeContent='SM' />}\n </div>\n )\n break\n case 'md':\n spaceUnit = (\n <div className={clsx(classes.md, classes.highlight)}>\n {highlight && <Badge color='secondary' badgeContent='MD' />}\n </div>\n )\n break\n case 'lg':\n spaceUnit = (\n <div className={clsx(classes.lg, classes.highlight)}>\n {highlight && <Badge color='secondary' badgeContent='LG' />}\n </div>\n )\n break\n case 'xl':\n spaceUnit = (\n <div className={clsx(classes.xl, classes.highlight)}>\n {highlight && <Badge color='secondary' badgeContent='XL' />}\n </div>\n )\n break\n case 'xxl':\n spaceUnit = (\n <div className={clsx(classes.xxl, classes.highlight)}>\n {highlight && <Badge color='secondary' badgeContent='XXL' />}\n </div>\n )\n break\n default:\n }\n\n return spaceUnit\n}\n"],"mappings":";;;;;AASA,MAAM,YAAY,YAAY,WAAW;CACvC,WAAW;EACT,YAAY;EACZ,UAAU,UAA2B,MAAM,YAAY,KAAM;EAC9D;CACD,OAAO,EACL,QAAQ,MAAM,QAAQ,EAAE,EACzB;CACD,KAAK,EACH,QAAQ,MAAM,QAAQ,EAAE,EACzB;CACD,IAAI,EACF,QAAQ,MAAM,QAAQ,EAAE,EACzB;CACD,IAAI,EACF,QAAQ,MAAM,QAAQ,EAAE,EACzB;CACD,IAAI,EACF,QAAQ,MAAM,QAAQ,EAAE,EACzB;CACD,IAAI,EACF,QAAQ,MAAM,QAAQ,EAAE,EACzB;CACD,IAAI,EACF,QAAQ,MAAM,QAAQ,GAAG,EAC1B;CACD,KAAK,EACH,QAAQ,MAAM,QAAQ,GAAG,EAC1B;CACF,EAAE;AAKH,MAAa,cAA6B,UAA2B;CACnE,MAAM,UAAU,UAAU,MAAM;CAEhC,IAAI;CACJ,MAAM,EAAE,MAAM,cAAc;AAE5B,SAAQ,MAAR;EACE,KAAK;AACH,eACE,oCAAC,SAAI,WAAW,KAAK,QAAQ,OAAO,QAAQ,UAAU,IACnD,aAAa,oCAAC;IAAM,OAAM;IAAY,cAAa;KAAU,CAC1D;AAER;EACF,KAAK;AACH,eACE,oCAAC,SAAI,WAAW,KAAK,QAAQ,KAAK,QAAQ,UAAU,IACjD,aAAa,oCAAC;IAAM,OAAM;IAAY,cAAa;KAAQ,CACxD;AAER;EACF,KAAK;AACH,eACE,oCAAC,SAAI,WAAW,KAAK,QAAQ,IAAI,QAAQ,UAAU,IAChD,aAAa,oCAAC;IAAM,OAAM;IAAY,cAAa;KAAO,CACvD;AAER;EACF,KAAK;AACH,eACE,oCAAC,SAAI,WAAW,KAAK,QAAQ,IAAI,QAAQ,UAAU,IAChD,aAAa,oCAAC;IAAM,OAAM;IAAY,cAAa;KAAO,CACvD;AAER;EACF,KAAK;AACH,eACE,oCAAC,SAAI,WAAW,KAAK,QAAQ,IAAI,QAAQ,UAAU,IAChD,aAAa,oCAAC;IAAM,OAAM;IAAY,cAAa;KAAO,CACvD;AAER;EACF,KAAK;AACH,eACE,oCAAC,SAAI,WAAW,KAAK,QAAQ,IAAI,QAAQ,UAAU,IAChD,aAAa,oCAAC;IAAM,OAAM;IAAY,cAAa;KAAO,CACvD;AAER;EACF,KAAK;AACH,eACE,oCAAC,SAAI,WAAW,KAAK,QAAQ,IAAI,QAAQ,UAAU,IAChD,aAAa,oCAAC;IAAM,OAAM;IAAY,cAAa;KAAO,CACvD;AAER;EACF,KAAK;AACH,eACE,oCAAC,SAAI,WAAW,KAAK,QAAQ,KAAK,QAAQ,UAAU,IACjD,aAAa,oCAAC;IAAM,OAAM;IAAY,cAAa;KAAQ,CACxD;AAER;EACF;;AAGF,QAAO"}
@@ -1,7 +1,7 @@
1
1
  import { t as ConfigService } from "./configService-C4uoG3wj.js";
2
2
  import { t as useUser } from "./useUser-wpHGo6jU.js";
3
3
  import { t as useAxiosGet } from "./useAxiosGet-CYnt6Hd0.js";
4
- import { n as getRouteRolesMapAndMenuActiveMap } from "./menuUtilities-Da5uVIJ8.js";
4
+ import { n as getRouteRolesMapAndMenuActiveMap } from "./menuUtilities-BOnqojY6.js";
5
5
  import React, { createContext, useCallback, useContext, useMemo } from "react";
6
6
 
7
7
  //#region src/utilities/menus/MenuProvider.tsx
@@ -89,4 +89,4 @@ const useMenuContext = () => {
89
89
 
90
90
  //#endregion
91
91
  export { useMenuContext as n, MenuProvider as t };
92
- //# sourceMappingURL=MenuProvider-BuTAUs0Z.js.map
92
+ //# sourceMappingURL=MenuProvider-BqEZve2y.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MenuProvider-BqEZve2y.js","names":[],"sources":["../src/utilities/menus/MenuProvider.tsx"],"sourcesContent":["import React, {\n createContext,\n useCallback,\n useContext,\n useMemo,\n ReactNode\n} from 'react';\nimport { useUser } from '../auth/useUser';\nimport { useAxiosGet } from '../useAxiosGet';\nimport { ConfigService } from '../../configService';\nimport { getRouteRolesMapAndMenuActiveMap } from './menuUtilities';\nimport type { AxiosError } from 'axios';\n\ntype LeftMenuResponse = unknown[];\ntype AppSelectorMenuResponse = unknown[];\ntype LanguagesResponse = unknown[];\n\ninterface MenuContextValue {\n leftMenu?: LeftMenuResponse;\n leftMenuLoading: boolean;\n leftMenuError?: AxiosError<unknown>;\n appSelectorMenus?: AppSelectorMenuResponse;\n appSelectorMenusLoading: boolean;\n appSelectorMenusError?: AxiosError<unknown>;\n languages?: LanguagesResponse;\n languagesLoading: boolean;\n languagesError?: AxiosError<unknown>;\n rolesMap: Map<string, string[]>;\n menuActiveMap: Map<string, boolean>;\n refetchAll: () => Promise<unknown[]>;\n}\n\ninterface MenuProviderProps {\n children?: ReactNode;\n}\n\nexport const MenuContext = createContext<MenuContextValue | null>(null);\n\ntype RefetchFn = (config?: unknown, options?: unknown) => Promise<unknown>;\n\ntype UseAxiosGetReturn<TData> = [\n {\n data?: TData;\n loading: boolean;\n error?: AxiosError<unknown>;\n },\n RefetchFn\n];\n\nconst buildRouteAndActiveMaps = (\n menu: LeftMenuResponse\n): { rolesMap: Map<string, string[]>; menuActiveMap: Map<string, boolean> } => {\n const rawResult = getRouteRolesMapAndMenuActiveMap(menu) as {\n rolesMap?: Map<unknown, unknown>;\n menuActiveMap?: Map<unknown, unknown>;\n };\n\n const rolesMap = new Map<string, string[]>();\n if (rawResult?.rolesMap instanceof Map) {\n rawResult.rolesMap.forEach((value, key) => {\n if (typeof key !== 'string') return;\n const normalizedKey = key;\n const normalizedValue = Array.isArray(value)\n ? value.map((roleId) => String(roleId))\n : [];\n rolesMap.set(normalizedKey, normalizedValue);\n });\n }\n\n const menuActiveMap = new Map<string, boolean>();\n if (rawResult?.menuActiveMap instanceof Map) {\n rawResult.menuActiveMap.forEach((value, key) => {\n if (typeof key !== 'string') return;\n menuActiveMap.set(key, Boolean(value));\n });\n }\n\n return { rolesMap, menuActiveMap };\n};\n\nexport const MenuProvider: React.FC<MenuProviderProps> = ({ children }) => {\n const user = useUser();\n\n const currentTenantId = user?.currentTenantId;\n const userId = user?.id;\n const [\n { data: leftMenu, loading: leftMenuLoading, error: leftMenuError },\n refetchLeftMenu\n ] = useAxiosGet(\n ConfigService.tenantV1ApiUrl,\n `menus?menuTypeId=1&productId=${ConfigService.config.UNITY_PRODUCT_ID}&tenantId=${currentTenantId}`,\n {},\n !currentTenantId\n ) as UseAxiosGetReturn<LeftMenuResponse>;\n\n const [\n {\n data: appSelectorMenus,\n loading: appSelectorMenusLoading,\n error: appSelectorMenusError\n },\n refetchAppSelectorMenus\n ] = useAxiosGet(\n ConfigService.tenantV1ApiUrl,\n `menus?tenantId=${currentTenantId}&verticalId=${ConfigService.config.UNITY_VERTICAL_ID}&userId=${userId ?? ''}`,\n {},\n !userId\n ) as UseAxiosGetReturn<AppSelectorMenuResponse>;\n\n const [\n { data: languages, loading: languagesLoading, error: languagesError },\n refetchLanguages\n ] = useAxiosGet(\n ConfigService.tenantV1ApiUrl,\n `language`,\n {},\n false\n ) as UseAxiosGetReturn<LanguagesResponse>;\n\n const { rolesMap, menuActiveMap } = useMemo(() => {\n if (Array.isArray(leftMenu) && leftMenu.length > 0) {\n return buildRouteAndActiveMaps(leftMenu);\n }\n\n return {\n rolesMap: new Map<string, string[]>(),\n menuActiveMap: new Map<string, boolean>()\n };\n }, [leftMenu]);\n\n const refetchAll = useCallback(() => {\n const refetchPromises: Promise<unknown>[] = [];\n\n if (currentTenantId) {\n refetchPromises.push(refetchLeftMenu());\n }\n\n if (userId) {\n refetchPromises.push(refetchAppSelectorMenus());\n }\n\n refetchPromises.push(refetchLanguages());\n\n return Promise.all(refetchPromises);\n }, [\n currentTenantId,\n refetchAppSelectorMenus,\n refetchLanguages,\n refetchLeftMenu,\n userId\n ]);\n\n const value = useMemo<MenuContextValue>(\n () => ({\n leftMenu,\n leftMenuLoading,\n leftMenuError,\n appSelectorMenus,\n appSelectorMenusLoading,\n appSelectorMenusError,\n languages,\n languagesLoading,\n languagesError,\n rolesMap,\n menuActiveMap,\n refetchAll\n }),\n [\n leftMenu,\n leftMenuLoading,\n leftMenuError,\n appSelectorMenus,\n appSelectorMenusLoading,\n appSelectorMenusError,\n languages,\n languagesLoading,\n languagesError,\n rolesMap,\n menuActiveMap,\n refetchAll\n ]\n );\n\n return <MenuContext.Provider value={value}>{children}</MenuContext.Provider>;\n};\n\nexport const useMenuContext = (): MenuContextValue => {\n const context = useContext(MenuContext);\n if (!context) {\n throw new Error('useMenuContext must be used within a MenuProvider');\n }\n return context;\n};\n"],"mappings":";;;;;;;AAoCA,MAAa,cAAc,cAAuC,KAAK;AAavE,MAAM,2BACJ,SAC6E;CAC7E,MAAM,YAAY,iCAAiC,KAAK;CAKxD,MAAM,2BAAW,IAAI,KAAuB;AAC5C,KAAI,WAAW,oBAAoB,IACjC,WAAU,SAAS,SAAS,OAAO,QAAQ;AACzC,MAAI,OAAO,QAAQ,SAAU;EAC7B,MAAM,gBAAgB;EACtB,MAAM,kBAAkB,MAAM,QAAQ,MAAM,GACxC,MAAM,KAAK,WAAW,OAAO,OAAO,CAAC,GACrC,EAAE;AACN,WAAS,IAAI,eAAe,gBAAgB;GAC5C;CAGJ,MAAM,gCAAgB,IAAI,KAAsB;AAChD,KAAI,WAAW,yBAAyB,IACtC,WAAU,cAAc,SAAS,OAAO,QAAQ;AAC9C,MAAI,OAAO,QAAQ,SAAU;AAC7B,gBAAc,IAAI,KAAK,QAAQ,MAAM,CAAC;GACtC;AAGJ,QAAO;EAAE;EAAU;EAAe;;AAGpC,MAAa,gBAA6C,EAAE,eAAe;CACzE,MAAM,OAAO,SAAS;CAEtB,MAAM,kBAAkB,MAAM;CAC9B,MAAM,SAAS,MAAM;CACrB,MAAM,CACJ,EAAE,MAAM,UAAU,SAAS,iBAAiB,OAAO,iBACnD,mBACE,YACF,cAAc,gBACd,gCAAgC,cAAc,OAAO,iBAAiB,YAAY,mBAClF,EAAE,EACF,CAAC,gBACF;CAED,MAAM,CACJ,EACE,MAAM,kBACN,SAAS,yBACT,OAAO,yBAET,2BACE,YACF,cAAc,gBACd,kBAAkB,gBAAgB,cAAc,cAAc,OAAO,kBAAkB,UAAU,UAAU,MAC3G,EAAE,EACF,CAAC,OACF;CAED,MAAM,CACJ,EAAE,MAAM,WAAW,SAAS,kBAAkB,OAAO,kBACrD,oBACE,YACF,cAAc,gBACd,YACA,EAAE,EACF,MACD;CAED,MAAM,EAAE,UAAU,kBAAkB,cAAc;AAChD,MAAI,MAAM,QAAQ,SAAS,IAAI,SAAS,SAAS,EAC/C,QAAO,wBAAwB,SAAS;AAG1C,SAAO;GACL,0BAAU,IAAI,KAAuB;GACrC,+BAAe,IAAI,KAAsB;GAC1C;IACA,CAAC,SAAS,CAAC;CAEd,MAAM,aAAa,kBAAkB;EACnC,MAAM,kBAAsC,EAAE;AAE9C,MAAI,gBACF,iBAAgB,KAAK,iBAAiB,CAAC;AAGzC,MAAI,OACF,iBAAgB,KAAK,yBAAyB,CAAC;AAGjD,kBAAgB,KAAK,kBAAkB,CAAC;AAExC,SAAO,QAAQ,IAAI,gBAAgB;IAClC;EACD;EACA;EACA;EACA;EACA;EACD,CAAC;CAEF,MAAM,QAAQ,eACL;EACL;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD,GACD;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD,CACF;AAED,QAAO,oCAAC,YAAY,YAAgB,SAAQ,SAAgC;;AAG9E,MAAa,uBAAyC;CACpD,MAAM,UAAU,WAAW,YAAY;AACvC,KAAI,CAAC,QACH,OAAM,IAAI,MAAM,oDAAoD;AAEtE,QAAO"}
@@ -1 +1 @@
1
- {"version":3,"file":"NumberOperator-p4HsHHx3.js","names":["NumberOperators: Array<NumberOperator>"],"sources":["../src/models/NumberOperator.ts"],"sourcesContent":["export interface NumberOperator {\n value: string;\n label: string;\n}\n\nexport const NumberOperators: Array<NumberOperator> = [\n {\n value: '=',\n label: 'Equals'\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: 'BETWEEN',\n label: 'Between'\n }\n];\n\nexport enum NumberOperatorEnums {\n Equals = '=',\n Does_Not_Equal = '!=',\n Greater_Than = '>',\n Less_Than = '<',\n Greater_Than_Or_Equal_To = '>=',\n Less_Than_Or_Equal_To = '<=',\n Between = 'BETWEEN'\n}\n"],"mappings":";AAKA,MAAaA,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;CACF;AAED,IAAY,sEAAL;AACL;AACA;AACA;AACA;AACA;AACA;AACA"}
1
+ {"version":3,"file":"NumberOperator-p4HsHHx3.js","names":[],"sources":["../src/models/NumberOperator.ts"],"sourcesContent":["export interface NumberOperator {\n value: string;\n label: string;\n}\n\nexport const NumberOperators: Array<NumberOperator> = [\n {\n value: '=',\n label: 'Equals'\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: 'BETWEEN',\n label: 'Between'\n }\n];\n\nexport enum NumberOperatorEnums {\n Equals = '=',\n Does_Not_Equal = '!=',\n Greater_Than = '>',\n Less_Than = '<',\n Greater_Than_Or_Equal_To = '>=',\n Less_Than_Or_Equal_To = '<=',\n Between = 'BETWEEN'\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;CACF;AAED,IAAY,sEAAL;AACL;AACA;AACA;AACA;AACA;AACA;AACA"}
@@ -1 +1 @@
1
- {"version":3,"file":"PAHAdditionalRightComponent-DMOU9Mho.js","names":["TeleportSource: React.FC<TeleportSourceProps>"],"sources":["../src/UI/utilityDisplay/utilityHeader/ui/TeleporterSource.tsx","../src/UI/utilityDisplay/utilityHeader/ui/PAHAdditionalRightComponent.jsx"],"sourcesContent":["import React from 'react';\nimport { useTeleporterStore } from '../../../../stores/teleporterStore';\n\ntype TeleportSourceProps = {\n targetId: string;\n location: string;\n children: React.ReactNode;\n};\n\nexport const TeleportSource: React.FC<TeleportSourceProps> = ({\n targetId,\n location,\n children\n}) => {\n const getTeleporter = useTeleporterStore((state) => state.getTeleporter);\n const Teleporter = getTeleporter(targetId, location).Source;\n return <Teleporter children={children}></Teleporter>;\n};","import React from 'react';\n\nimport {TeleportSource} from './TeleporterSource';\n\nexport const PAHAdditionalRightComponent = ({ children, targetId }) => {\n return <TeleportSource targetId={targetId} location={\"right\"}>{children}</TeleportSource>;\n};\n"],"mappings":";;;;AASA,MAAaA,kBAAiD,EAC5D,UACA,UACA,eACI;CAEJ,MAAM,aADgB,oBAAoB,UAAU,MAAM,cAAc,CACvC,UAAU,SAAS,CAAC;AACrD,QAAO,oCAAC,cAAqB,WAAuB;;;;;ACZtD,MAAa,+BAA+B,EAAE,UAAU,eAAe;AACrE,QAAO,oCAAC;EAAyB;EAAU,UAAU;IAAU,SAA0B"}
1
+ {"version":3,"file":"PAHAdditionalRightComponent-DMOU9Mho.js","names":[],"sources":["../src/UI/utilityDisplay/utilityHeader/ui/TeleporterSource.tsx","../src/UI/utilityDisplay/utilityHeader/ui/PAHAdditionalRightComponent.jsx"],"sourcesContent":["import React from 'react';\nimport { useTeleporterStore } from '../../../../stores/teleporterStore';\n\ntype TeleportSourceProps = {\n targetId: string;\n location: string;\n children: React.ReactNode;\n};\n\nexport const TeleportSource: React.FC<TeleportSourceProps> = ({\n targetId,\n location,\n children\n}) => {\n const getTeleporter = useTeleporterStore((state) => state.getTeleporter);\n const Teleporter = getTeleporter(targetId, location).Source;\n return <Teleporter children={children}></Teleporter>;\n};","import React from 'react';\n\nimport {TeleportSource} from './TeleporterSource';\n\nexport const PAHAdditionalRightComponent = ({ children, targetId }) => {\n return <TeleportSource targetId={targetId} location={\"right\"}>{children}</TeleportSource>;\n};\n"],"mappings":";;;;AASA,MAAa,kBAAiD,EAC5D,UACA,UACA,eACI;CAEJ,MAAM,aADgB,oBAAoB,UAAU,MAAM,cAAc,CACvC,UAAU,SAAS,CAAC;AACrD,QAAO,oCAAC,cAAqB,WAAuB;;;;;ACZtD,MAAa,+BAA+B,EAAE,UAAU,eAAe;AACrE,QAAO,oCAAC;EAAyB;EAAU,UAAU;IAAU,SAA0B"}
@@ -1 +1 @@
1
- {"version":3,"file":"PDFViewer-B4nJKbIy.js","names":["useStyles","Typography","PDFViewer: FC<PDFContainerProps>","numPages","ControlPanel","LinearProgress"],"sources":["../src/UI/fileViewer/pdfViewer/ControlPanel.tsx","../src/UI/fileViewer/pdfViewer/PDFViewer.tsx"],"sourcesContent":["import React from 'react';\nimport { IconButton, makeStyles } from '@material-ui/core';\nimport FirstPageIcon from '@material-ui/icons/esm/FirstPage';\nimport NavigateBeforeIcon from '@material-ui/icons/esm/NavigateBefore';\nimport NavigateNextIcon from '@material-ui/icons/esm/NavigateNext';\nimport LastPageIcon from '@material-ui/icons/esm/LastPage';\nimport ZoomInIcon from '@material-ui/icons/esm/ZoomIn';\nimport ZoomOutIcon from '@material-ui/icons/esm/ZoomOut';\nimport CloudDownloadOutlinedIcon from '@material-ui/icons/esm/CloudDownloadOutlined';\nimport HighlightOffOutlinedIcon from '@material-ui/icons/esm/HighlightOffOutlined';\nimport { Typography } from '../../dataDisplay/typography/Typography';\nimport { useTranslation } from 'react-i18next';\n\nconst useStyles = makeStyles((theme) => ({\n controlPanel: {\n fontSize: '16px',\n backgroundColor: theme.palette.background.paper,\n borderRadius: '5px',\n width: 'fit-content',\n padding: theme.spacing(1),\n margin: '8px auto',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: '10px'\n },\n pageActions: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: '10px'\n },\n pageNumber: {\n display: 'flex',\n gap: 5,\n minWidth: '125px'\n }\n}));\n\nconst ControlPanel = (props: any) => {\n const {\n pageNumber,\n numPages,\n setPageNumber,\n scale,\n setScale,\n file,\n closePDF,\n onClickDownload\n } = props;\n\n const isFirstPage = pageNumber === 1;\n const isLastPage = pageNumber === numPages;\n const { t } = useTranslation();\n const classes = useStyles();\n\n const goToFirstPage = () => {\n if (!isFirstPage) setPageNumber(1);\n };\n const goToPreviousPage = () => {\n if (!isFirstPage) setPageNumber(pageNumber - 1);\n };\n const goToNextPage = () => {\n if (!isLastPage) setPageNumber(pageNumber + 1);\n };\n const goToLastPage = () => {\n if (!isLastPage) setPageNumber(numPages);\n };\n\n const onPageChange = (e: any) => {\n const { value } = e.target;\n setPageNumber(Number(value));\n };\n\n const isMinZoom = scale < 0.6;\n const isMaxZoom = scale >= 2.0;\n\n const zoomOut = () => {\n if (!isMinZoom) setScale(scale - 0.1);\n };\n\n const zoomIn = () => {\n if (!isMaxZoom) setScale(scale + 0.1);\n };\n\n return (\n <div className={classes.controlPanel}>\n <div className={classes.pageActions}>\n <IconButton size='small' onClick={goToFirstPage} disabled={isFirstPage}>\n <FirstPageIcon />\n </IconButton>\n\n <IconButton\n size='small'\n onClick={goToPreviousPage}\n disabled={isFirstPage}\n >\n <NavigateBeforeIcon />\n </IconButton>\n\n <div>\n <div className={classes.pageNumber}>\n <Typography>{t('Page')} </Typography>\n <input\n name='pageNumber'\n type='number'\n min={1}\n max={numPages || 1}\n style={{\n padding: 0,\n paddingLeft: 1,\n margin: 0,\n textAlign: 'end'\n }}\n value={pageNumber}\n onChange={onPageChange}\n />{' '}\n <Typography>of {numPages}</Typography>\n </div>\n </div>\n\n <IconButton size='small' onClick={goToNextPage} disabled={isLastPage}>\n <NavigateNextIcon />\n </IconButton>\n\n <IconButton size='small' onClick={goToLastPage} disabled={isLastPage}>\n <LastPageIcon />\n </IconButton>\n </div>\n <div className={classes.pageActions}>\n <IconButton size='small' onClick={zoomOut} disabled={isMinZoom}>\n <ZoomOutIcon />\n </IconButton>\n\n <Typography>{(scale * 100).toFixed()}%</Typography>\n\n <IconButton size='small' onClick={zoomIn} disabled={isMaxZoom}>\n <ZoomInIcon />\n </IconButton>\n </div>\n\n <div>\n <IconButton href={file} size='small' onClick={onClickDownload}>\n <CloudDownloadOutlinedIcon />\n </IconButton>\n </div>\n\n <div>\n <IconButton size='small' onClick={closePDF}>\n <HighlightOffOutlinedIcon />\n </IconButton>\n </div>\n </div>\n );\n};\n\nexport default ControlPanel;\n","import React, { FC, useEffect, useState } from 'react';\nimport { Document, Page, pdfjs } from 'react-pdf';\nimport ControlPanel from './ControlPanel';\nimport { LinearProgress } from '../../loading/LinearProgress';\nimport { makeStyles } from \"@material-ui/core\";\n\nconst useStyles = makeStyles((theme) => ({\n pdfSection: (props: PDFContainerProps) => ({\n minWidth: props?.minWidth,\n }),\n documentContainer: {\n display: 'flex',\n justifyContent: 'center',\n width: '100%',\n height: '100%',\n overflowX: 'auto',\n overflowY: 'hidden',\n },\n loadingBox: {\n width: '100%',\n },\n}));\n\ninterface PDFContainerProps {\n isPDFOpen?: boolean;\n fileUrl?: string;\n blobPDF?: Blob;\n closePDF?: () => void;\n onClickDownload?: () => void;\n minWidth?: number | string;\n}\n\nexport const PDFViewer: FC<PDFContainerProps> = ({\n isPDFOpen = true,\n fileUrl,\n blobPDF,\n closePDF,\n onClickDownload,\n minWidth\n}) => {\n const [scale, setScale] = useState(1.0);\n const [numPages, setNumPages] = useState(null);\n const [pageNumber, setPageNumber] = useState(1);\n const classes = useStyles({minWidth});\n\n useEffect(() => {\n pdfjs.GlobalWorkerOptions.workerSrc = `https://cdnjs.cloudflare.com/ajax/libs/pdf.js/${pdfjs.version}/pdf.worker.js`;\n });\n\n function onDocumentLoadSuccess({ numPages }: any) {\n setNumPages(numPages);\n }\n\n return (\n <div>\n {isPDFOpen && (\n <div id='pdf-section' className={classes.pdfSection}>\n <ControlPanel\n scale={scale}\n setScale={setScale}\n numPages={numPages}\n pageNumber={pageNumber}\n setPageNumber={setPageNumber}\n file={fileUrl ?? `data:application/pdf;base64,${blobPDF}`}\n closePDF={closePDF}\n onClickDownload={onClickDownload}\n />\n <div className={classes.documentContainer}>\n <Document\n file={fileUrl ?? `data:application/pdf;base64,${blobPDF}`}\n onLoadSuccess={onDocumentLoadSuccess}\n >\n <Page\n pageNumber={pageNumber}\n scale={scale}\n loading={\n <div className={classes.loadingBox}>\n <LinearProgress />\n </div>\n }\n />\n </Document>\n </div>\n </div>\n )}\n </div>\n );\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"PDFViewer-B4nJKbIy.js","names":["useStyles","Typography","numPages","ControlPanel","LinearProgress"],"sources":["../src/UI/fileViewer/pdfViewer/ControlPanel.tsx","../src/UI/fileViewer/pdfViewer/PDFViewer.tsx"],"sourcesContent":["import React from 'react';\nimport { IconButton, makeStyles } from '@material-ui/core';\nimport FirstPageIcon from '@material-ui/icons/esm/FirstPage';\nimport NavigateBeforeIcon from '@material-ui/icons/esm/NavigateBefore';\nimport NavigateNextIcon from '@material-ui/icons/esm/NavigateNext';\nimport LastPageIcon from '@material-ui/icons/esm/LastPage';\nimport ZoomInIcon from '@material-ui/icons/esm/ZoomIn';\nimport ZoomOutIcon from '@material-ui/icons/esm/ZoomOut';\nimport CloudDownloadOutlinedIcon from '@material-ui/icons/esm/CloudDownloadOutlined';\nimport HighlightOffOutlinedIcon from '@material-ui/icons/esm/HighlightOffOutlined';\nimport { Typography } from '../../dataDisplay/typography/Typography';\nimport { useTranslation } from 'react-i18next';\n\nconst useStyles = makeStyles((theme) => ({\n controlPanel: {\n fontSize: '16px',\n backgroundColor: theme.palette.background.paper,\n borderRadius: '5px',\n width: 'fit-content',\n padding: theme.spacing(1),\n margin: '8px auto',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: '10px'\n },\n pageActions: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: '10px'\n },\n pageNumber: {\n display: 'flex',\n gap: 5,\n minWidth: '125px'\n }\n}));\n\nconst ControlPanel = (props: any) => {\n const {\n pageNumber,\n numPages,\n setPageNumber,\n scale,\n setScale,\n file,\n closePDF,\n onClickDownload\n } = props;\n\n const isFirstPage = pageNumber === 1;\n const isLastPage = pageNumber === numPages;\n const { t } = useTranslation();\n const classes = useStyles();\n\n const goToFirstPage = () => {\n if (!isFirstPage) setPageNumber(1);\n };\n const goToPreviousPage = () => {\n if (!isFirstPage) setPageNumber(pageNumber - 1);\n };\n const goToNextPage = () => {\n if (!isLastPage) setPageNumber(pageNumber + 1);\n };\n const goToLastPage = () => {\n if (!isLastPage) setPageNumber(numPages);\n };\n\n const onPageChange = (e: any) => {\n const { value } = e.target;\n setPageNumber(Number(value));\n };\n\n const isMinZoom = scale < 0.6;\n const isMaxZoom = scale >= 2.0;\n\n const zoomOut = () => {\n if (!isMinZoom) setScale(scale - 0.1);\n };\n\n const zoomIn = () => {\n if (!isMaxZoom) setScale(scale + 0.1);\n };\n\n return (\n <div className={classes.controlPanel}>\n <div className={classes.pageActions}>\n <IconButton size='small' onClick={goToFirstPage} disabled={isFirstPage}>\n <FirstPageIcon />\n </IconButton>\n\n <IconButton\n size='small'\n onClick={goToPreviousPage}\n disabled={isFirstPage}\n >\n <NavigateBeforeIcon />\n </IconButton>\n\n <div>\n <div className={classes.pageNumber}>\n <Typography>{t('Page')} </Typography>\n <input\n name='pageNumber'\n type='number'\n min={1}\n max={numPages || 1}\n style={{\n padding: 0,\n paddingLeft: 1,\n margin: 0,\n textAlign: 'end'\n }}\n value={pageNumber}\n onChange={onPageChange}\n />{' '}\n <Typography>of {numPages}</Typography>\n </div>\n </div>\n\n <IconButton size='small' onClick={goToNextPage} disabled={isLastPage}>\n <NavigateNextIcon />\n </IconButton>\n\n <IconButton size='small' onClick={goToLastPage} disabled={isLastPage}>\n <LastPageIcon />\n </IconButton>\n </div>\n <div className={classes.pageActions}>\n <IconButton size='small' onClick={zoomOut} disabled={isMinZoom}>\n <ZoomOutIcon />\n </IconButton>\n\n <Typography>{(scale * 100).toFixed()}%</Typography>\n\n <IconButton size='small' onClick={zoomIn} disabled={isMaxZoom}>\n <ZoomInIcon />\n </IconButton>\n </div>\n\n <div>\n <IconButton href={file} size='small' onClick={onClickDownload}>\n <CloudDownloadOutlinedIcon />\n </IconButton>\n </div>\n\n <div>\n <IconButton size='small' onClick={closePDF}>\n <HighlightOffOutlinedIcon />\n </IconButton>\n </div>\n </div>\n );\n};\n\nexport default ControlPanel;\n","import React, { FC, useEffect, useState } from 'react';\nimport { Document, Page, pdfjs } from 'react-pdf';\nimport ControlPanel from './ControlPanel';\nimport { LinearProgress } from '../../loading/LinearProgress';\nimport { makeStyles } from \"@material-ui/core\";\n\nconst useStyles = makeStyles((theme) => ({\n pdfSection: (props: PDFContainerProps) => ({\n minWidth: props?.minWidth,\n }),\n documentContainer: {\n display: 'flex',\n justifyContent: 'center',\n width: '100%',\n height: '100%',\n overflowX: 'auto',\n overflowY: 'hidden',\n },\n loadingBox: {\n width: '100%',\n },\n}));\n\ninterface PDFContainerProps {\n isPDFOpen?: boolean;\n fileUrl?: string;\n blobPDF?: Blob;\n closePDF?: () => void;\n onClickDownload?: () => void;\n minWidth?: number | string;\n}\n\nexport const PDFViewer: FC<PDFContainerProps> = ({\n isPDFOpen = true,\n fileUrl,\n blobPDF,\n closePDF,\n onClickDownload,\n minWidth\n}) => {\n const [scale, setScale] = useState(1.0);\n const [numPages, setNumPages] = useState(null);\n const [pageNumber, setPageNumber] = useState(1);\n const classes = useStyles({minWidth});\n\n useEffect(() => {\n pdfjs.GlobalWorkerOptions.workerSrc = `https://cdnjs.cloudflare.com/ajax/libs/pdf.js/${pdfjs.version}/pdf.worker.js`;\n });\n\n function onDocumentLoadSuccess({ numPages }: any) {\n setNumPages(numPages);\n }\n\n return (\n <div>\n {isPDFOpen && (\n <div id='pdf-section' className={classes.pdfSection}>\n <ControlPanel\n scale={scale}\n setScale={setScale}\n numPages={numPages}\n pageNumber={pageNumber}\n setPageNumber={setPageNumber}\n file={fileUrl ?? `data:application/pdf;base64,${blobPDF}`}\n closePDF={closePDF}\n onClickDownload={onClickDownload}\n />\n <div className={classes.documentContainer}>\n <Document\n file={fileUrl ?? `data:application/pdf;base64,${blobPDF}`}\n onLoadSuccess={onDocumentLoadSuccess}\n >\n <Page\n pageNumber={pageNumber}\n scale={scale}\n loading={\n <div className={classes.loadingBox}>\n <LinearProgress />\n </div>\n }\n />\n </Document>\n </div>\n </div>\n )}\n </div>\n );\n};\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"PageContext-BpOBJHpb.js","names":["initialState: any"],"sources":["../src/contexts/PageContext.tsx"],"sourcesContent":["import React, { createContext, useReducer } from 'react';\n\nconst initialState: any = {};\n\n/**\n * The Page context, shared amongst the Page\n * and all children. Generally used to share state between\n * Widgets. Call dispatch() to update the state. Currently\n * only supports dispatch types of \"set <state_property>\".\n * Example: dispatch({ type: \"set mySharedProperty\", value: oldSharedProperty + 1 });\n */\nconst pageContext = createContext(\n {} as { state: any; dispatch: React.Dispatch<{ type: string; value?: any }> }\n);\nconst { Provider } = pageContext;\n\n/**\n * Sets shared state based on an action type and a value.\n * action.type is in the format: <operator> <prop>\n * Currently the only supported action type is \"set <prop>\",\n * which will set state.prop to action.value.\n * @param state The current state\n * @param action A type and value to alter the current state\n * @returns The new state\n */\nconst reducer = (state: any, action: { type: string; value?: any }) => {\n // Action.type should be in the format: <operator> <prop>. Ex: set sharedId\n const operator = action.type.substr(0, action.type.indexOf(' '));\n const prop = action.type.substr(action.type.indexOf(' ') + 1);\n\n switch (operator) {\n case 'set':\n const newState = { ...state, [prop]: action.value };\n return newState;\n default:\n throw new Error('Unknown operator');\n }\n};\n\n/**\n * A Context component to wrap around a Page. Allows\n * sharing of state amongst sibling Widgets.\n * @returns\n */\nconst PageContextProvider = ({ children }: any) => {\n const [state, dispatch] = useReducer(reducer, initialState);\n\n return <Provider value={{ state, dispatch }}>{children}</Provider>;\n};\n\nexport { pageContext, PageContextProvider };\n"],"mappings":";;;AAEA,MAAMA,eAAoB,EAAE;;;;;;;;AAS5B,MAAM,cAAc,cAClB,EAAE,CACH;AACD,MAAM,EAAE,aAAa;;;;;;;;;;AAWrB,MAAM,WAAW,OAAY,WAA0C;CAErE,MAAM,WAAW,OAAO,KAAK,OAAO,GAAG,OAAO,KAAK,QAAQ,IAAI,CAAC;CAChE,MAAM,OAAO,OAAO,KAAK,OAAO,OAAO,KAAK,QAAQ,IAAI,GAAG,EAAE;AAE7D,SAAQ,UAAR;EACE,KAAK,MAEH,QADiB;GAAE,GAAG;IAAQ,OAAO,OAAO;GAAO;EAErD,QACE,OAAM,IAAI,MAAM,mBAAmB;;;;;;;;AASzC,MAAM,uBAAuB,EAAE,eAAoB;CACjD,MAAM,CAAC,OAAO,YAAY,WAAW,SAAS,aAAa;AAE3D,QAAO,oCAAC,YAAS,OAAO;EAAE;EAAO;EAAU,IAAG,SAAoB"}
1
+ {"version":3,"file":"PageContext-BpOBJHpb.js","names":[],"sources":["../src/contexts/PageContext.tsx"],"sourcesContent":["import React, { createContext, useReducer } from 'react';\n\nconst initialState: any = {};\n\n/**\n * The Page context, shared amongst the Page\n * and all children. Generally used to share state between\n * Widgets. Call dispatch() to update the state. Currently\n * only supports dispatch types of \"set <state_property>\".\n * Example: dispatch({ type: \"set mySharedProperty\", value: oldSharedProperty + 1 });\n */\nconst pageContext = createContext(\n {} as { state: any; dispatch: React.Dispatch<{ type: string; value?: any }> }\n);\nconst { Provider } = pageContext;\n\n/**\n * Sets shared state based on an action type and a value.\n * action.type is in the format: <operator> <prop>\n * Currently the only supported action type is \"set <prop>\",\n * which will set state.prop to action.value.\n * @param state The current state\n * @param action A type and value to alter the current state\n * @returns The new state\n */\nconst reducer = (state: any, action: { type: string; value?: any }) => {\n // Action.type should be in the format: <operator> <prop>. Ex: set sharedId\n const operator = action.type.substr(0, action.type.indexOf(' '));\n const prop = action.type.substr(action.type.indexOf(' ') + 1);\n\n switch (operator) {\n case 'set':\n const newState = { ...state, [prop]: action.value };\n return newState;\n default:\n throw new Error('Unknown operator');\n }\n};\n\n/**\n * A Context component to wrap around a Page. Allows\n * sharing of state amongst sibling Widgets.\n * @returns\n */\nconst PageContextProvider = ({ children }: any) => {\n const [state, dispatch] = useReducer(reducer, initialState);\n\n return <Provider value={{ state, dispatch }}>{children}</Provider>;\n};\n\nexport { pageContext, PageContextProvider };\n"],"mappings":";;;AAEA,MAAM,eAAoB,EAAE;;;;;;;;AAS5B,MAAM,cAAc,cAClB,EAAE,CACH;AACD,MAAM,EAAE,aAAa;;;;;;;;;;AAWrB,MAAM,WAAW,OAAY,WAA0C;CAErE,MAAM,WAAW,OAAO,KAAK,OAAO,GAAG,OAAO,KAAK,QAAQ,IAAI,CAAC;CAChE,MAAM,OAAO,OAAO,KAAK,OAAO,OAAO,KAAK,QAAQ,IAAI,GAAG,EAAE;AAE7D,SAAQ,UAAR;EACE,KAAK,MAEH,QADiB;GAAE,GAAG;IAAQ,OAAO,OAAO;GAAO;EAErD,QACE,OAAM,IAAI,MAAM,mBAAmB;;;;;;;;AASzC,MAAM,uBAAuB,EAAE,eAAoB;CACjD,MAAM,CAAC,OAAO,YAAY,WAAW,SAAS,aAAa;AAE3D,QAAO,oCAAC,YAAS,OAAO;EAAE;EAAO;EAAU,IAAG,SAAoB"}