udp-react-enterprise-component-library 25.14.1-beta.3 → 25.14.1-beta.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{AmbientGridTemplate-DfAIgTvY.js → AmbientGridTemplate-C692VI3a.js} +5 -5
- package/dist/AmbientGridTemplate-C692VI3a.js.map +1 -0
- package/dist/{EnvironmentRibbon-9-uuxU6U.js → EnvironmentRibbon-CMKhWHRx.js} +4 -4
- package/dist/EnvironmentRibbon-CMKhWHRx.js.map +1 -0
- package/dist/{FluentDialog-DCBz2VL0.js → FluentDialog-CyrENq7h.js} +2 -2
- package/dist/{FluentDialog-DCBz2VL0.js.map → FluentDialog-CyrENq7h.js.map} +1 -1
- package/dist/{MenuPage-B4KWi55f.js → MenuPage-gH42nle8.js} +6 -6
- package/dist/MenuPage-gH42nle8.js.map +1 -0
- package/dist/{MyExportsPage-D-0CqUpp.js → MyExportsPage-Pi3C931A.js} +6 -6
- package/dist/MyExportsPage-Pi3C931A.js.map +1 -0
- package/dist/MyExportsPage-fd_XLDId.js +13 -0
- package/dist/{PageContainer-D2b26j_c.js → PageContainer-CZgrO_e4.js} +2 -2
- package/dist/PageContainer-CZgrO_e4.js.map +1 -0
- package/dist/{SearchUtilities-BVu5E6bN.js → SearchUtilities-Dqns1ryz.js} +2 -2
- package/dist/{SearchUtilities-BVu5E6bN.js.map → SearchUtilities-Dqns1ryz.js.map} +1 -1
- package/dist/{SideSheet-BlgPwr3R.js → SideSheet-D-iwArsq.js} +2 -2
- package/dist/SideSheet-D-iwArsq.js.map +1 -0
- package/dist/{UdpMaintenanceEnginePage-C9Sxnfds.js → UdpMaintenanceEnginePage-BTCNxo3s.js} +7 -7
- package/dist/{UdpMaintenanceEnginePage-C9Sxnfds.js.map → UdpMaintenanceEnginePage-BTCNxo3s.js.map} +1 -1
- package/dist/{UdpMaintenanceEnginePage-DKKQrAsi.js → UdpMaintenanceEnginePage-C7_ObqWe.js} +7 -7
- package/dist/{UdpPublicForm-jG9NGPTL.js → UdpPublicForm-tA2QK6qk.js} +1 -1
- package/dist/{UdpPublicForm-CmQT-LPw.js → UdpPublicForm-w0PvpNQY.js} +5 -1
- package/dist/UdpPublicForm-w0PvpNQY.js.map +1 -0
- package/dist/{UtilitySideBar-D2HFipAh.js → UtilitySideBar-CklR9S6f.js} +30 -9
- package/dist/UtilitySideBar-CklR9S6f.js.map +1 -0
- package/dist/{VirtualBrowser-DpLrMI5J.js → VirtualBrowser-N4RBQm48.js} +8 -8
- package/dist/{VirtualBrowser-DpLrMI5J.js.map → VirtualBrowser-N4RBQm48.js.map} +1 -1
- package/dist/WorkflowContainer-B-tcu7Qn.js +13 -0
- package/dist/{WorkflowContainer-1Z1wn77F.js → WorkflowContainer-B60jCEt6.js} +6 -6
- package/dist/WorkflowContainer-B60jCEt6.js.map +1 -0
- package/dist/index.js +34 -27
- package/dist/index.js.map +1 -1
- package/dist/{methodUtils-BMMTN1Wn.js → methodUtils-BfxeB9Rg.js} +2 -2
- package/dist/methodUtils-BfxeB9Rg.js.map +1 -0
- package/dist/{propertyTypeEnums-Cheifvfd.js → propertyTypeEnums-CdrH1saM.js} +2 -2
- package/dist/{propertyTypeEnums-Cheifvfd.js.map → propertyTypeEnums-CdrH1saM.js.map} +1 -1
- package/dist/types/index.d.ts +3 -3
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/dist/types/utilities/form/paymentForm/CreditCardUtils.d.ts +5 -1
- package/dist/types/utilities/iconLibrary/SvgIcon.d.ts +12 -0
- package/dist/types/utilities/iconLibrary/index.d.ts +5 -0
- package/package.json +2 -2
- package/dist/AmbientGridTemplate-DfAIgTvY.js.map +0 -1
- package/dist/EnvironmentRibbon-9-uuxU6U.js.map +0 -1
- package/dist/MenuPage-B4KWi55f.js.map +0 -1
- package/dist/MyExportsPage-BmW0tZb8.js +0 -13
- package/dist/MyExportsPage-D-0CqUpp.js.map +0 -1
- package/dist/PageContainer-D2b26j_c.js.map +0 -1
- package/dist/SideSheet-BlgPwr3R.js.map +0 -1
- package/dist/UdpPublicForm-CmQT-LPw.js.map +0 -1
- package/dist/UtilitySideBar-D2HFipAh.js.map +0 -1
- package/dist/WorkflowContainer-1Z1wn77F.js.map +0 -1
- package/dist/WorkflowContainer-CQDx12xK.js +0 -13
- package/dist/methodUtils-BMMTN1Wn.js.map +0 -1
- /package/dist/types/utilities/{FluentIcon.d.ts → iconLibrary/FluentIcon.d.ts} +0 -0
- /package/dist/types/utilities/{UnityFluentIcon.d.ts → iconLibrary/UnityFluentIcon.d.ts} +0 -0
- /package/dist/types/utilities/{UnityIcon.d.ts → iconLibrary/UnityIcon.d.ts} +0 -0
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { Field, Form, SideSheet } from "./SideSheet-
|
|
2
|
-
import { FluentButton, FluentIcon, GridStateTypeEnums, LayoutUnit, NodeActionEnums, PrimaryActionButton_default, SplitScreenTypeEnums, VisibilityTypeEnums, useId, useShellStore } from "./methodUtils-
|
|
3
|
-
import { FluentDialog, getEntityAttributes, getPathParametersObj, useCatalogStore } from "./FluentDialog-
|
|
1
|
+
import { Field, Form, SideSheet } from "./SideSheet-D-iwArsq.js";
|
|
2
|
+
import { FluentButton, FluentIcon, GridStateTypeEnums, LayoutUnit, NodeActionEnums, PrimaryActionButton_default, SplitScreenTypeEnums, VisibilityTypeEnums, useId, useShellStore } from "./methodUtils-BfxeB9Rg.js";
|
|
3
|
+
import { FluentDialog, getEntityAttributes, getPathParametersObj, useCatalogStore } from "./FluentDialog-CyrENq7h.js";
|
|
4
4
|
import { ClickOpenEnums, useHandleAxiosSnackbar } from "./apiHelpers-h7tu0JUL.js";
|
|
5
5
|
import { useAxiosGet } from "./useAxiosGet-nRj6TU4p.js";
|
|
6
6
|
import { apiMutate as apiMutate$1 } from "./useAxiosMutate-7FqbSJkH.js";
|
|
7
|
-
import { UnityFluentIcon } from "./EnvironmentRibbon-
|
|
7
|
+
import { UnityFluentIcon } from "./EnvironmentRibbon-CMKhWHRx.js";
|
|
8
8
|
import React, { Children, cloneElement, createContext, forwardRef, isValidElement, memo, useCallback, useContext, useEffect, useLayoutEffect, useMemo, useReducer, useRef, useState } from "react";
|
|
9
9
|
import { Badge, Box, Button, ButtonGroup, Chip, ClickAwayListener, Divider, FormControlLabel, Grid, Grow, IconButton, InputAdornment, LinearProgress, MenuItem, MenuList, Paper, Popover, Popper, Switch, Tab, Tabs, TextField, Tooltip, Typography, lighten, makeStyles, useTheme } from "@material-ui/core";
|
|
10
10
|
import { ConfigService } from "udp-react-stencil-component-library";
|
|
@@ -3320,4 +3320,4 @@ AmbientGridTemplate.propTypes = {
|
|
|
3320
3320
|
|
|
3321
3321
|
//#endregion
|
|
3322
3322
|
export { ActionContext, ActionDispatchContext, ActionLoadingDispatchContext, ActionsRenderer, AgTable, AgTableButtons, AmbientGridTemplate, AmbientTextField, AmbientToggleButton, AmbientTokenButton, DynamicContainerWithMenu, Ellipse, FilterOperators, GridActionBar, GridGroupingHeader, GridGroupingSidebar, GridSidebarContainer, IconButtonWithTooltip, LicenseKey, SearchOperators, Token, clearGridState, deleteGridState, getEllipseColor, getGridState, getSuccessAction, isValueSelected, onFirstDataRendered, saveGridState, useActionState, useActionStore, useActions, useAgGridApi, useDynamicListCalculation, useExport, useGridClear, useGridFormat, useHandleAction, useInquiryStore, useQuickFilter, useSetInitialInquiryMenuVisibility };
|
|
3323
|
-
//# sourceMappingURL=AmbientGridTemplate-
|
|
3323
|
+
//# sourceMappingURL=AmbientGridTemplate-C692VI3a.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AmbientGridTemplate-C692VI3a.js","names":["apiMutate","apiMutate","useStyles","useStyles","useStyles","useStyles","AmbientTokenButton","useStyles","useStyles","useStyles","AmbientToggleButton","withStyles","useStyles","AmbientToggleButtonGroupDefault","useStyles","ArrowDropDownIcon","useStyles","globalModules: Module[]","AgTableButtons: FC<AgTableButttonsProps>","allColumnIds: string[]","AgTable: FC<AgTableProps>","calculateRowHeight: (\n params: RowHeightParams\n ) => number | null | undefined","useStyles","useStyles","AmbientChipButton","useStyles","PrimaryActionButton","deleteGridState","useStyles","apiMutate","useStyles","makeStyles","visibleChildren","menuChildren","children","child","ref","useStyles","makeStyles","Chip","Divider","Tooltip","Typography","useStyles","useStyles","onClick","useStyles","makeStyles","useTheme","useStyles","Chip","SearchOperators: Array<SearchOperator>","value","apiMutate","GridViewsSideSheet"],"sources":["../src/AGLicense.js","../src/contexts/ActionDispatchContext.js","../src/contexts/ActionContext.js","../src/UI/SuccessAction.jsx","../src/stores/actionStore.ts","../src/stores/inquiryStore.ts","../src/actions/utils/actionUtils.js","../src/contexts/ActionLoadingDispatchContext.js","../src/hooks/useActions.js","../src/UI/inputs/textField/AmbientTextField.jsx","../src/utilities/style/utils/styleUtils.js","../src/UI/components/dataDisplay/Ellipse.jsx","../src/UI/templates/ui/GridSidebarContainer.jsx","../src/UI/inputs/buttons/AmbientTokenButton.jsx","../src/UI/templates/ui/GridGroupingHeader.jsx","../src/UI/components/dataDisplay/Token.jsx","../src/UI/inputs/buttons/AmbientToggleButton.jsx","../src/utilities/isValueSelected.js","../src/UI/inputs/buttons/AmbientToggleButtonGroupDefault.jsx","../src/UI/templates/ui/GridGroupingSidebar.jsx","../src/utilities/aggrid/SplitButton.jsx","../src/utilities/aggrid/AgTable.tsx","../src/UI/utilityDisplay/GridActionBar.jsx","../src/UI/inputs/buttons/AmbientChipButton.jsx","../src/UI/utilityDisplay/GridPrimaryBar.jsx","../src/utilities/aggrid/GridFunctions.js","../src/UI/utilityDisplay/SaveViewFormDialog.jsx","../src/hooks/useDynamicListCalculation.jsx","../src/UI/containers/DynamicContainerWithMenu.jsx","../src/UI/utilityDisplay/ChipSection.jsx","../src/UI/inputs/buttons/IconButtonWithToolTip.jsx","../src/UI/templates/ui/renderers/ActionsRenderer.jsx","../src/UI/dataDisplay/HintPanel.jsx","../src/UI/utilityDisplay/GridViewsSideSheet.jsx","../src/UI/utilityDisplay/BulkActionsGridButton.jsx","../src/models/SearchOperator.ts","../src/UI/templates/AmbientGridTemplate.jsx"],"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 { createContext } from 'react';\n\nexport const ActionDispatchContext = createContext(null);\n","import { createContext } from 'react';\n\nexport const ActionContext = createContext(null);\n","import React from 'react';\nimport { Button } from '@material-ui/core';\n\nexport const getSuccessAction = (closeSnackbar) => {\n const successAction = (key) => (\n <Button\n color='secondary'\n size='small'\n onClick={() => {\n closeSnackbar(key);\n }}\n >\n OK\n </Button>\n );\n return successAction;\n};\n","import { create } from 'zustand';\nimport { devtools } from 'zustand/middleware';\n\ninterface ActionState {\n selectedNode: object | null | undefined;\n setSelectedNode: (selectedNode: object) => void;\n hideActions: boolean;\n setHideActions: (hideActions: boolean) => void;\n}\n\nexport const useActionStore = create<ActionState>()(\n devtools((set) => ({\n selectedNode: null,\n setSelectedNode: (selectedNode) =>\n set((state) => ({ selectedNode: selectedNode })),\n hideActions: false,\n setHideActions: (hideActions) => set((state) => ({ hideActions }))\n }))\n);\n","import { useEffect } from 'react';\nimport { create } from 'zustand';\nimport { devtools } from 'zustand/middleware';\n\ninterface Workflow {\n inWorkflowMode: boolean;\n currentWorkflowPlayId: string | null | undefined;\n}\ninterface WorkflowMap {\n [containerId: string]: Workflow;\n}\n\ninterface InquiryState {\n title: string | null | undefined;\n setInquiryToolbarTitle: (title: string) => void;\n workflowMap: WorkflowMap | null | undefined;\n setWorkflowMap: (workflowMap: WorkflowMap) => void;\n workflowStarting: boolean;\n setWorkflowStarting: (workflowStarting: boolean) => void;\n inquiryMenuHidden: boolean | null | undefined;\n setInquiryMenuHidden: (inquiryMenuHidden: boolean) => void;\n}\n\nexport const useInquiryStore = create<InquiryState>()(\n devtools((set) => ({\n title: '',\n setInquiryToolbarTitle: (title) => set((state) => ({ title: title })),\n workflowMap: {},\n setWorkflowMap: (workflowMap) =>\n set((state) => ({\n workflowMap: { ...state.workflowMap, ...workflowMap }\n })),\n workflowStarting: false,\n setWorkflowStarting: (workflowStarting) =>\n set((state) => ({ workflowStarting })),\n inquiryMenuHidden: false,\n setInquiryMenuHidden: (inquiryMenuHidden) =>\n set((state) => ({\n inquiryMenuHidden: inquiryMenuHidden\n }))\n }))\n);\n\nexport const useSetInitialInquiryMenuVisibility = () => {\n const searchParams = new URLSearchParams(window.location.search);\n const inquiryMenuHidden =\n searchParams.has('inquiryMenuHidden') === true\n ? searchParams.get('inquiryMenuHidden') === 'true'\n ? true\n : false\n : false;\n\n const setInquiryMenuHidden = useInquiryStore(\n (state) => state.setInquiryMenuHidden\n );\n\n useEffect(() => {\n if (inquiryMenuHidden) {\n setInquiryMenuHidden(true);\n }\n }, [setInquiryMenuHidden, inquiryMenuHidden]);\n};\n","import { useHistory } from 'react-router-dom';\nimport { useSnackbar } from 'notistack';\nimport { useTranslation } from 'react-i18next';\nimport { ConfigService } from 'udp-react-stencil-component-library';\nimport {\n NodeActionEnums,\n SplitScreenTypeEnums\n} from '../../enums/unitySystemEnums';\nimport { getSuccessAction } from '../../UI/SuccessAction';\nimport { useActionStore } from '../../stores/actionStore';\nimport { useInquiryStore } from '../../stores/inquiryStore';\nimport { apiMutate } from '../../utilities/useAxiosMutate';\nimport { getPathParametersObj } from '../../utilities/maintenanceEngine/CrudBrowserUtilities';\n\nfunction isValidURL(url) {\n // Regular expression for URL validation\n const urlPattern = /^(ftp|http|https):\\/\\/[^ \"]+$/;\n return urlPattern.test(url);\n}\n\nexport const useHandleAction = () => {\n const history = useHistory();\n const { t } = useTranslation();\n const { enqueueSnackbar, closeSnackbar } = useSnackbar();\n const successAction = getSuccessAction(closeSnackbar);\n const selectedNode = useActionStore((state) => state.selectedNode);\n const setWorkflowMap = useInquiryStore((state) => state.setWorkflowMap);\n const setWorkflowStarting = useInquiryStore(\n (state) => state.setWorkflowStarting\n );\n\n const executeStartWorkflow = async (workflowId, payload) =>\n apiMutate(\n ConfigService.config.BUILDER_API_BASE,\n `workflow/${workflowId}/start`,\n {\n method: 'post'\n },\n { data: payload }\n );\n\n const getApiMethod = async (apiMethodId) =>\n apiMutate(\n ConfigService.config.INTEGRATION_API_BASE,\n `apimethod/${apiMethodId}`,\n {\n method: 'get'\n }\n );\n\n const handleAction = async (\n dispatch,\n action,\n state,\n executeAction,\n apiCatalogId,\n entityAttributes,\n actionData,\n currentContainerId\n ) => {\n if (!action) {\n return;\n }\n\n const actionName = action.name;\n let actionValue = action.value;\n if (action?.parameters?.entityName) {\n actionValue +=\n '?entityName=' +\n action.parameters.entityName +\n '&apiCatalogId=' +\n apiCatalogId;\n }\n\n switch (action.actionTypeId) {\n case NodeActionEnums.Open_External_Link:\n window.open(actionValue, '_blank');\n break;\n case NodeActionEnums.Redirect:\n // if the url is valid, redirect to that url, if its not valid, assume its a path redirect on the same origin\n if (isValidURL(actionValue)) {\n window.location.href = actionValue;\n } else {\n history.push(actionValue);\n }\n break;\n case NodeActionEnums.Create:\n if (dispatch) {\n dispatch({\n type: 'OPEN_SIDESHEET',\n sideSheet: { action: action, open: true }\n });\n }\n break;\n case NodeActionEnums.Update:\n if (dispatch) {\n dispatch({\n type: 'OPEN_SIDESHEET',\n sideSheet: { action: action, open: true }\n });\n }\n break;\n case NodeActionEnums.Delete:\n if (dispatch) {\n dispatch({\n type: 'OPEN_MODAL',\n modal: { action: action, open: true, title: 'Delete ' }\n });\n }\n break;\n case NodeActionEnums.Retrieve:\n if (dispatch) {\n if (currentContainerId) {\n break;\n } else {\n dispatch({\n type: 'OPEN_SPLIT_SCREEN',\n splitScreen: {\n action: action,\n open: true,\n type: SplitScreenTypeEnums.Entity\n }\n });\n }\n }\n break;\n case NodeActionEnums.Open_Page_Split_Screen:\n if (dispatch) {\n if (!!selectedNode) {\n dispatch({\n type: 'OPEN_PAGE_CONTAINER_SPLIT_SCREEN',\n pageContainerSplitScreen: {\n action: action,\n open: true,\n type: SplitScreenTypeEnums.Page\n }\n });\n } else {\n dispatch({\n type: 'OPEN_PAGE_SPLIT_SCREEN',\n pageSplitScreen: {\n action: action,\n open: true,\n type: SplitScreenTypeEnums.Page\n }\n });\n }\n }\n break;\n case NodeActionEnums.Open_Shell_Split_Screen:\n if (dispatch) {\n if (currentContainerId) {\n break;\n } else {\n dispatch({\n type: 'OPEN_SPLIT_SCREEN',\n splitScreen: {\n action: action,\n open: true,\n type: SplitScreenTypeEnums.Page\n }\n });\n }\n }\n break;\n case NodeActionEnums.Open_Notes:\n if (dispatch) {\n if (currentContainerId) {\n break;\n } else {\n dispatch({\n type: 'OPEN_SPLIT_SCREEN',\n splitScreen: {\n action: action,\n open: true,\n type: SplitScreenTypeEnums.Notes\n }\n });\n }\n }\n break;\n case NodeActionEnums.Open_Reminders:\n if (dispatch) {\n if (currentContainerId) {\n break;\n } else {\n dispatch({\n type: 'OPEN_SPLIT_SCREEN',\n splitScreen: {\n action: action,\n open: true,\n type: SplitScreenTypeEnums.Reminders\n }\n });\n }\n }\n break;\n case NodeActionEnums.Execute_Api:\n if (executeAction && action?.value) {\n let data = {};\n\n if (\n entityAttributes.length > 0 &&\n (selectedNode?.nodeObj || actionData)\n ) {\n // actionData will be used as Request Data first as it is directly passed into function\n if (actionData) {\n data = { ...actionData };\n } else {\n data = { ...selectedNode?.nodeObj };\n }\n const removeAttributes = entityAttributes.filter(\n (p) => p?.extendedProperties?.childEntity\n );\n removeAttributes.forEach((att) => {\n if (att['name'] in data || 'serializeFields' in data) {\n delete data[att['name']];\n }\n });\n }\n const apiMethod = await getApiMethod(action?.value);\n const pathParamValues = getPathParametersObj(\n apiMethod?.data?.pathParametersDefinition,\n data\n );\n\n const response = executeAction(\n {\n data: { requestBody: data, ...pathParamValues }\n },\n action.value\n )\n .then((res) => {\n enqueueSnackbar(\n t(`${action?.name} api has been executed successfully.`),\n {\n anchorOrigin: {\n vertical: 'top',\n horizontal: 'center'\n },\n action: successAction\n }\n );\n })\n .catch((res) => {\n enqueueSnackbar(res.message, {\n variant: 'error',\n anchorOrigin: {\n vertical: 'top',\n horizontal: 'center'\n }\n });\n });\n } else {\n enqueueSnackbar(t(`Unable to execute ${actionName} action.`), {\n variant: 'error',\n anchorOrigin: {\n vertical: 'top',\n horizontal: 'center'\n }\n });\n }\n break;\n case NodeActionEnums.Start_Workflow:\n setWorkflowStarting(true);\n // actionValue will be workflowId where we can call Start workflow\n // actionData is the selected nodeObj used as payload\n const response = await executeStartWorkflow(\n actionValue,\n actionData || {}\n ).catch((e) => {\n enqueueSnackbar(t(`Unable to Start Workflow`), {\n variant: 'error',\n anchorOrigin: {\n vertical: 'top',\n horizontal: 'center'\n }\n });\n });\n setWorkflowStarting(false);\n if (response.status === 200) {\n const playId = response.data;\n // if selectedNode it means we're in Inquiry\n if (selectedNode) {\n const workflow = {\n inWorkflowMode: true,\n currentWorkflowPlayId: playId\n };\n const containerId = currentContainerId || 0;\n setWorkflowMap({ [containerId]: workflow });\n } else {\n history.push({\n pathname: `/workflowtask/${playId}?taskId=${''}`,\n state: {\n label: t('Workflow')\n }\n });\n }\n }\n break;\n case NodeActionEnums.Execute_Function:\n !!actionData?.execute && actionData.execute();\n\n break;\n default:\n break;\n }\n };\n return { handleAction };\n};\n","import { createContext } from 'react';\n\nexport const ActionLoadingDispatchContext = createContext(null);\n","import { useContext, useCallback } from 'react';\nimport { ActionDispatchContext } from '../contexts/ActionDispatchContext';\nimport { ActionContext } from '../contexts/ActionContext';\nimport { apiMutate } from '../utilities/useAxiosMutate';\nimport { getEntityAttributes } from '../utilities/maintenanceEngine/CrudBrowserUtilities';\nimport { useSnackbar } from 'notistack';\nimport { useTranslation } from 'react-i18next';\nimport { useHandleAction } from '../actions/utils/actionUtils';\nimport { ActionLoadingDispatchContext } from '../contexts/ActionLoadingDispatchContext';\nimport { useCatalogStore } from '../stores/catalogStore';\nimport { useShellStore } from '../stores/shellStore';\nimport { NodeActionEnums } from '../enums/unitySystemEnums';\nimport { ConfigService } from 'udp-react-stencil-component-library';\n\nexport const useActions = () => {\n const dispatch = useContext(ActionDispatchContext);\n const dispatchActionLoading = useContext(ActionLoadingDispatchContext);\n const actionState = useActionState();\n const { catalogsMap, currentApiCatalogId } = useCatalogStore();\n const currentContainerId = useShellStore((state) => state.currentContainerId);\n const { enqueueSnackbar } = useSnackbar();\n const { t } = useTranslation();\n const { handleAction } = useHandleAction();\n\n const setActionLoading = useCallback(\n (loading) => {\n dispatchActionLoading({\n type: 'SET_ACTION_LOADING',\n loading\n });\n },\n [dispatchActionLoading]\n );\n\n const setActionWaitingToExecute = useCallback(\n (actionId) => {\n dispatchActionLoading({\n type: 'SET_ACTION_WAITING_TO_EXECUTE',\n actionId\n });\n },\n [dispatchActionLoading]\n );\n\n const executeGetAction = useCallback(\n async (actionId) =>\n apiMutate(\n ConfigService.integrationV1ApiUrl,\n `action/${actionId}`,\n {\n method: 'get'\n },\n {}\n ),\n []\n );\n\n const executeAction = useCallback(\n async (data, id) =>\n apiMutate(\n ConfigService.integrationV1ApiUrl,\n `apimethod/executeQueryWithParameters/${id}`,\n {\n method: 'post'\n },\n data\n ),\n []\n );\n\n const setActionPanels = useCallback(\n (actionPanels, containerId) => {\n dispatch({ type: 'SET_ACTION_PANELS', actionPanels, containerId });\n },\n [dispatch]\n );\n\n const getActionPanelByAction = useCallback(\n (act) => {\n if (act && actionState) {\n const actionPanels = actionState.actionPanels;\n const containerId = currentContainerId || 0;\n\n if (actionPanels && Array.isArray(actionPanels) && actionPanels[containerId]) {\n const actionPanel = actionPanels[containerId];\n\n if (Array.isArray(actionPanel.panelActions)) {\n const foundPanel = actionPanel.find((ap) => {\n return ap.panelActions.find((pa) => {\n return pa.actionId === act.actionId;\n });\n });\n\n return foundPanel;\n } else {\n console.error('panelActions is not an array:', actionPanel.panelActions);\n }\n } else {\n console.error('actionPanels is not valid:', actionPanels);\n }\n } else {\n console.error('act or actionState is not defined:', act, actionState);\n }\n\n return null;\n },\n [actionState, currentContainerId]\n );\n\n const setupAndExecuteAction = useCallback(\n async (catalog, actionId, actionData) => {\n await executeGetAction(actionId).then((resp) => {\n const panel = getActionPanelByAction(resp.data);\n let entityName = panel?.entityName;\n\n if (!panel) {\n entityName = resp?.data?.parameters?.entityName;\n }\n\n if (entityName) {\n actionState?.setCurrentEntityName &&\n actionState.setCurrentEntityName(entityName);\n\n const eAttributes = getEntityAttributes(catalog, entityName);\n\n if (\n !eAttributes?.length &&\n resp.data.actionTypeId !== NodeActionEnums.Start_Workflow\n ) {\n enqueueSnackbar(t(`Unable to retrieve entity attributes.`), {\n variant: 'error',\n anchorOrigin: {\n vertical: 'top',\n horizontal: 'center'\n }\n });\n } else {\n handleAction(\n dispatch,\n resp.data,\n actionState,\n executeAction,\n catalog?.apiCatalogId,\n eAttributes,\n actionData,\n currentContainerId\n );\n }\n } else {\n console.warn('Entity name does not exist');\n // global actions will not necissarily have an entity name\n handleAction(\n dispatch,\n resp.data,\n actionState,\n executeAction,\n catalog?.apiCatalogId,\n {},\n actionData,\n currentContainerId\n );\n }\n });\n },\n [\n actionState,\n enqueueSnackbar,\n executeAction,\n executeGetAction,\n getActionPanelByAction,\n handleAction,\n t,\n dispatch,\n currentContainerId\n ]\n );\n\n const executeTriggerAction = useCallback(\n async (actionId, actionData) => {\n if (actionState?.catalogPromise) {\n if (!actionState?.catalog) setActionWaitingToExecute(actionId);\n try {\n const result = await actionState.catalogPromise;\n // Promise has been fulfilled, handle the result\n setupAndExecuteAction(\n result?.data || catalogsMap[currentApiCatalogId],\n actionId,\n actionData\n );\n } catch (error) {\n // Promise has been rejected or an error occurred\n enqueueSnackbar(t(`Unable to retrieve catalog data.`), {\n variant: 'error',\n anchorOrigin: {\n vertical: 'top',\n horizontal: 'center'\n }\n });\n }\n }\n setActionWaitingToExecute('');\n },\n [\n setupAndExecuteAction,\n enqueueSnackbar,\n t,\n actionState,\n setActionWaitingToExecute,\n catalogsMap,\n currentApiCatalogId\n ]\n );\n\n const triggerAction = useCallback(\n (actionId, actionData) => {\n executeTriggerAction(actionId, actionData);\n },\n [executeTriggerAction]\n );\n\n const triggerMultipleActions = useCallback(\n (actionIds) => {\n actionIds.forEach((id) => {\n executeTriggerAction(id);\n });\n },\n [executeTriggerAction]\n );\n\n const setCatalogEntities = useCallback(\n (catalogEntities) => {\n dispatch({ type: 'SET_CATALOG_ENTITIES', catalogEntities });\n },\n [dispatch]\n );\n\n const setCatalogPromotedEntities = useCallback(\n (catalogPromotedEntities) => {\n dispatch({\n type: 'SET_CATALOG_PROMOTED_ENTITIES',\n catalogPromotedEntities\n });\n },\n [dispatch]\n );\n\n const setInquiryParams = useCallback(\n (inquiryParams, containerId) => {\n dispatch({\n type: 'SET_INQUIRY_PARAMS',\n inquiryParams,\n containerId\n });\n },\n [dispatch]\n );\n\n const setShowInquiryHeaderActions = useCallback(\n (showInquiryHeaderActions) => {\n dispatch({\n type: 'SET_SHOW_INQUIRY_HEADER_ACTIONS',\n showInquiryHeaderActions\n });\n },\n [dispatch]\n );\n\n const setMenuListState = useCallback(\n (menuListState) => {\n dispatch({\n type: 'SET_MENU_LIST_STATE',\n menuListState\n });\n },\n [dispatch]\n );\n\n const closeAllSplitScreens = useCallback(() => {\n dispatch({\n type: 'CLOSE_ALL_SPLIT_SCREENS'\n });\n }, [dispatch]);\n\n const openSplitScreen = useCallback(\n (splitScreen) => {\n dispatch({\n type: 'OPEN_SPLIT_SCREEN',\n splitScreen\n });\n },\n [dispatch]\n );\n\n const openPageSplitScreen = useCallback(\n (pageSplitScreen) => {\n dispatch({\n type: 'OPEN_PAGE_SPLIT_SCREEN',\n pageSplitScreen\n });\n },\n [dispatch]\n );\n\n const openPageContainerSplitScreen = useCallback(\n (pageContainerSplitScreen) => {\n dispatch({\n type: 'OPEN_PAGE_CONTAINER_SPLIT_SCREEN',\n pageContainerSplitScreen\n });\n },\n [dispatch]\n );\n\n const setApiCatalog = useCallback(\n (catalog) => {\n dispatch({\n type: 'SET_API_CATALOG',\n catalog\n });\n },\n [dispatch]\n );\n\n return {\n setActionPanels,\n triggerAction,\n triggerMultipleActions,\n setCatalogEntities,\n setCatalogPromotedEntities,\n setInquiryParams,\n setShowInquiryHeaderActions,\n setMenuListState,\n closeAllSplitScreens,\n openSplitScreen,\n openPageSplitScreen,\n openPageContainerSplitScreen,\n setApiCatalog,\n setActionLoading\n };\n};\n\nexport const useActionState = () => useContext(ActionContext);\n","import React from 'react';\nimport { makeStyles, TextField } from '@material-ui/core';\nimport PropTypes from 'prop-types';\n\nconst useStyles = makeStyles((theme) => ({\n input: {\n borderRadius: 2,\n height: (props) => !props.multiline && !Array.isArray(props.value) && 32, // multiline or multiselect\n padding: (props) => !props.multiline && 0,\n paddingBottom: 10,\n marginTop: 3,\n '& .MuiFilledInput-inputMarginDense': {\n paddingTop: 8\n },\n '& .MuiInputAdornment-filled.MuiInputAdornment-positionStart:not(.MuiInputAdornment-hiddenLabel)':\n {\n marginTop: theme.spacing(0.5),\n marginLeft: theme.spacing(1)\n }\n },\n formTextInput: {\n fontSize: 14\n },\n labelRoot: {\n fontSize: 14\n },\n FormControl: {\n display: 'none',\n marginTop: 0\n },\n root: {\n width: '100%',\n marginTop: 25,\n '& .MuiFormLabel-root': {\n marginTop: -30,\n marginLeft: -11\n },\n '& .MuiInputAdornment-root': {\n paddingLeft: theme.spacing(1)\n }\n // '& .MuiInputAdornment-filled.MuiInputAdornment-positionStart:not(.MuiInputAdornment-hiddenLabel)' : {\n // marginTop: 0\n // }\n },\n noLabel: {\n marginTop: theme.spacing(1)\n }\n}));\n\nexport const AmbientTextField = (props) => {\n const classes = useStyles(props);\n const { id, label, startAdornment, endAdornment, title = 'noTitle', ...InputProps } = props;\n return (\n <div className={label ? classes.root : classes.noLabel}>\n <TextField\n {...InputProps}\n id={id}\n udprecordid={`udpRecord-FluentAmbientTextField-${title.replace(/\\s/g, '')}-${props?.InputProps?.type}`}\n variant='filled'\n size='small'\n margin='dense'\n label={label}\n classes={{ label: classes.label }}\n InputProps={{\n classes: {\n root: classes.input,\n input: classes.formTextInput,\n ...props.InputProps?.classes\n },\n ...props.InputProps,\n ...startAdornment,\n ...endAdornment\n }}\n InputLabelProps={{\n shrink: false,\n classes: {\n root: classes.labelRoot,\n focused: classes.labelFocused\n }\n }}\n />\n </div>\n );\n};\n\nAmbientTextField.propTypes = {\n /**\n * id - textfield ID\n */\n id: PropTypes.string,\n /**\n * label - textField label\n */\n label: PropTypes.string,\n /**\n * startAdornment - icon placed at the beginning of the input\n */\n startAdornment: PropTypes.node,\n /**\n * endAdornment - icon placed at the end of the input\n */\n endAdornment: PropTypes.node\n};\n","export const getEllipseColor = (theme, color) => {\n if (!theme) {\n return '';\n }\n let ellipseColor = theme.palette.primary.main;\n switch (color) {\n case 'action':\n ellipseColor = theme.palette.systemIcon?.action?.main;\n break;\n case 'sequence':\n ellipseColor = theme.palette.systemIcon?.sequence?.main;\n break;\n case 'trigger':\n ellipseColor = theme.palette.systemIcon?.trigger?.main;\n break;\n case 'condition':\n ellipseColor = theme.palette.systemIcon?.condition?.main;\n break;\n case 'primary':\n ellipseColor = theme.palette.primary.main;\n break;\n case 'secondary':\n ellipseColor = theme.palette.secondary.main;\n break;\n case 'info':\n ellipseColor = theme.palette.info.main;\n break;\n case 'warning':\n ellipseColor = theme.palette.warning.main;\n break;\n case 'error':\n ellipseColor = theme.palette.error.main;\n break;\n case 'success':\n ellipseColor = theme.palette.success.main;\n break;\n default:\n ellipseColor = theme.palette.secondary.main;\n break;\n }\n return ellipseColor;\n};\n\nexport const getEllipseHintColor = (theme, color) => {\n if (!theme) {\n return '';\n }\n let ellipseHintColor = theme.palette.primary.main;\n switch (color) {\n case 'action':\n ellipseHintColor = theme.palette.systemIcon?.action?.hint;\n break;\n case 'sequence':\n ellipseHintColor = theme.palette.systemIcon?.sequence?.hint;\n break;\n case 'trigger':\n ellipseHintColor = theme.palette.systemIcon?.trigger?.hint;\n break;\n case 'condition':\n ellipseHintColor = theme.palette.systemIcon?.condition?.hint;\n break;\n case 'primary':\n ellipseHintColor = theme.palette.primary.hint;\n break;\n case 'secondary':\n ellipseHintColor = theme.palette.secondary.hint;\n break;\n case 'info':\n ellipseHintColor = theme.palette.unity?.info?.hint;\n break;\n case 'warning':\n ellipseHintColor = theme.palette.unity?.warning?.hint;\n break;\n case 'error':\n ellipseHintColor = theme.palette.unity?.error?.hint;\n break;\n case 'success':\n ellipseHintColor = theme.palette.unity?.success?.hint;\n break;\n default:\n ellipseHintColor = theme.palette.common.white;\n break;\n }\n\n return ellipseHintColor;\n};\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { makeStyles } from '@material-ui/core';\nimport {\n getEllipseColor,\n getEllipseHintColor\n} from '../../../utilities/style/utils/styleUtils';\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: (props) =>\n props.size === 'small' ? theme.spacing(4) : theme.spacing(5),\n height: (props) =>\n props.size === 'small' ? theme.spacing(4) : theme.spacing(5),\n borderRadius: 50,\n border: (props) => (props.variant === 'filled' ? 'none' : `2px solid`),\n backgroundColor: (props) =>\n props.variant === 'filled' && getEllipseHintColor(theme, props.color),\n borderColor: (props) => getEllipseColor(theme, props.color)\n }\n}));\n\nexport const Ellipse = (props) => {\n const { children } = props;\n const classes = useStyles(props);\n\n return <div className={classes.root}>{children}</div>;\n};\n\nEllipse.propTypes = {\n color: PropTypes.string,\n size: PropTypes.string,\n variant: PropTypes.string\n};\n","import React from 'react';\nimport { makeStyles, Paper } from '@material-ui/core';\nimport PropTypes from 'prop-types';\n\nconst useStyles = makeStyles((theme) => ({\n root: {},\n groupWrapper: {\n padding: theme.spacing(2),\n height: (props) =>\n props?.height\n ? `${props.height} !important`\n : 'calc(100vh - 280px) !important',\n overflow: 'auto'\n }\n}));\n\nexport const GridSidebarContainer = (props) => {\n const { children, color } = props;\n const classes = useStyles(props);\n\n return (\n <div className={classes.root}>\n <Paper elevation='0' square style={{ background: color }}>\n <div className={classes.groupWrapper}>{children}</div>\n </Paper>\n </div>\n );\n};\nGridSidebarContainer.propTypes = {\n /**\n * Children of component\n */\n children: PropTypes.node,\n color: PropTypes.string\n};\n","import React, { forwardRef } from 'react';\nimport { makeStyles, Tooltip, IconButton } from '@material-ui/core';\nimport { FluentIcon } from '../../../utilities/iconLibrary/FluentIcon';\nimport { ChevronDownIcon } from '@fluentui/react-icons';\nimport PropTypes from 'prop-types';\n\nconst useStyles = makeStyles((theme) => ({\n root: {},\n actionHeader: {\n display: 'flex',\n flexDirection: 'row'\n },\n icon: {\n background: theme.palette.common.white,\n padding: theme.spacing(1),\n color: theme.palette.secondary.main\n }\n}));\n\nexport const AmbientTokenButton = forwardRef(function AmbientTokenButton(\n props,\n ref\n) {\n const {\n tooltip,\n ariaLabel,\n onClick,\n size,\n icon = ChevronDownIcon,\n iconClassName,\n otherProps,\n id = 'token-button',\n udprecordid\n } = props;\n const classes = useStyles(props);\n\n return (\n <div className={classes.root}>\n <Tooltip title={tooltip}>\n <IconButton\n id={id}\n udprecordid={udprecordid}\n ref={ref}\n aria-label={ariaLabel}\n className={iconClassName ?? classes.icon}\n size={size ?? 'small'}\n onClick={onClick}\n {...otherProps}\n >\n <FluentIcon className={classes.iconButtonStyle} component={icon} />\n </IconButton>\n </Tooltip>\n </div>\n );\n});\n\nAmbientTokenButton.propTypes = {\n /**\n * Tooltip to display for button\n */\n tooltip: PropTypes.string.isRequired,\n /**\n * Accessiblity label for icon\n */\n ariaLabel: PropTypes.string.isRequired,\n /**\n * event for button function\n */\n onClick: PropTypes.func,\n /**\n * icon to appear in button\n */\n icon: PropTypes.func.isRequired\n};\n","import React from 'react'\nimport { makeStyles, Typography } from '@material-ui/core'\nimport { LayoutUnit } from '../../../layout/LayoutUnit';\nimport { ChevronFold10Icon, ChevronUnfold10Icon } from '@fluentui/react-icons';\nimport { AmbientTokenButton } from '../../inputs/buttons/AmbientTokenButton'\nimport PropTypes from 'prop-types'\n\nconst useStyles = makeStyles((theme) => ({\n root: {},\n actionHeader: {\n display: 'flex',\n flexDirection: 'row',\n gap: 10\n },\n icon:{\n background: theme.palette.common.white,\n padding: theme.spacing(1),\n color: theme.palette.secondary.main\n }\n\n}))\n\nexport const GridGroupingHeader = ({expandClick, collapseClick }) => {\n const classes = useStyles()\n return (\n <div className={classes.root} >\n <div className={classes.actionHeader} >\n <AmbientTokenButton icon={ChevronFold10Icon} tooltip=\"Collapse All\" ariaLabel=\"Collapse All\" onClick={collapseClick} />\n <AmbientTokenButton icon={ChevronUnfold10Icon} tooltip=\"Expand All\" ariaLabel=\"Expand All\" onClick={expandClick} />\n </div>\n <LayoutUnit unit=\"nudge\" /> \n <div className={classes.label} ><Typography variant=\"caption\">Group By:</Typography></div>\n <LayoutUnit unit=\"nudge\" />\n </div>\n )\n}\nGridGroupingHeader.propTypes = {\n /**\n * expand fucntion to expand grid when items are grouped\n */\n expandClick: PropTypes.func.isRequired,\n /**\n * expand fucntion to collapse grid when items are grouped\n */\n collapseClick: PropTypes.func.isRequired,\n}\n","import React, { useMemo } from 'react';\nimport {\n makeStyles,\n useTheme,\n Typography,\n IconButton\n} from '@material-ui/core';\nimport PropTypes from 'prop-types';\nimport { Ellipse } from './Ellipse';\nimport { UnityFluentIcon } from '../../../utilities/iconLibrary/UnityFluentIcon';\nimport {\n getEllipseColor,\n getEllipseHintColor\n} from '../../../utilities/style/utils/styleUtils';\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n margin: (props) => (props.compact ? theme.spacing(0.5) : theme.spacing(1))\n },\n letter: {\n fontSize: (props) =>\n props.size === 'small' ? theme.spacing(2.25) : theme.spacing(2.5),\n color: (props) => getEllipseColor(theme, props.color)\n },\n buttonRoot: {\n margin: theme.spacing(1),\n width: (props) =>\n props.size === 'small' ? theme.spacing(4) : theme.spacing(5),\n height: (props) =>\n props.size === 'small' ? theme.spacing(4) : theme.spacing(5),\n background: (props) =>\n props.variant === 'filled' ? getEllipseHintColor(theme, props.color) : '',\n border: (props) => (props.variant === 'outlined' ? `1px solid` : 'none'),\n borderColor: (props) =>\n props.variant === 'outlined' ? getEllipseColor(theme, props.color) : ''\n }\n}));\n\nexport const Token = (props) => {\n const {\n type = 'default',\n variant = 'outlined',\n color = 'default',\n size = 'large',\n iconType,\n icon,\n letter = 'A',\n IconEllipseProps,\n onClick\n } = props;\n const classes = useStyles(props);\n const theme = useTheme();\n\n const iconColor = useMemo(() => {\n return getEllipseColor(theme, color);\n }, [color, theme]);\n\n const tokenComponent = (\n <div className={classes.root}>\n <Ellipse\n variant={variant}\n size={size}\n color={color}\n {...IconEllipseProps}\n >\n {type === 'letter' ? (\n <Typography variant='body1' className={classes.letter}>\n {letter.toUpperCase()}\n </Typography>\n ) : (\n <UnityFluentIcon\n size={size === 'small' ? size : 'medium'}\n color={iconColor}\n type={iconType}\n icon={icon}\n style={{\n color: iconColor\n }}\n />\n )}\n </Ellipse>\n </div>\n );\n\n if (type === 'action') {\n return (\n <IconButton\n classes={{\n root: classes.buttonRoot\n }}\n onClick={onClick}\n >\n <UnityFluentIcon\n size={size === 'small' ? size : 'medium'}\n color={iconColor}\n type={iconType}\n icon={icon}\n style={{\n color: iconColor\n }}\n />\n </IconButton>\n );\n }\n\n return tokenComponent;\n};\n\nToken.propTypes = {\n type: PropTypes.string,\n variant: PropTypes.string,\n color: PropTypes.string,\n size: PropTypes.string,\n iconType: PropTypes.string,\n icon: PropTypes.elementType,\n letter: PropTypes.string,\n onClick: PropTypes.func\n};\n","import React from 'react'\nimport { makeStyles } from '@material-ui/core'\nimport ToggleButton from '@material-ui/lab/ToggleButton';\nimport PropTypes from 'prop-types'\n\nconst useStyles = makeStyles((theme) => ({\n root: {},\n groupActionContainer: {\n display: 'flex',\n flexDirection: 'column',\n flexWrap: 'wrap',\n alignContent: 'space-around',\n }, \n toggleRoot: {\n '&:not(:first-child)': {\n marginTop: 16,\n border: '1px solid lightgrey',\n borderTopLeftRadius: 25,\n borderTopRightRadius: 25,\n borderRadius: 25,\n padding: 0,\n paddingRight: theme.spacing(2),\n \n },\n '&:not(:last-child)': {\n borderBottomLeftRadius: 25,\n borderBottomRightRadius: 25,\n borderRadius: 25,\n padding: 0,\n border: '1px solid lightgrey',\n paddingRight: theme.spacing(2)\n },\n '& .MuiToggleButton-root.Mui-selected': {\n color: 'rgba(0, 0, 0, 0.54)',\n backgroundColor: 'white'\n }\n },\n buttonRoot: {\n textTransform: 'none',\n fontWeight: 700,\n justifyContent: 'flex-start'\n },\n '.MuiToggleButton-root.Mui-selected': {\n color: 'rgba(0, 0, 0, 0.54)',\n backgroundColor: 'white'\n }\n}))\n\nexport const AmbientToggleButton = ({children, value, ariaLabel, onClick, ...otherProps}) => {\n const classes = useStyles()\n\n\n return (\n <div className={classes.root} >\n \n <ToggleButton classes={{root: classes.buttonRoot}} value={value} aria-label={ariaLabel} onClick={onClick} {...otherProps} >\n {children}\n </ToggleButton>\n </div>\n )\n}\nAmbientToggleButton.propTypes = {\n /**\n * Contents of the button\n */\n children: PropTypes.node,\n /**\n * Value used to determine active toggle\n */\n value: PropTypes.string,\n /**\n * Lable for accessiblity on icon\n */\n ariaLabel: PropTypes.string,\n /**\n * Function to handle event\n */\n onClick: PropTypes.func,\n}\n","// Determine if the toggle button value matches, or is contained in, the\n// candidate group value.\nexport default function isValueSelected(value, candidate) {\n if (candidate === undefined || value === undefined) {\n return false;\n }\n \n if (Array.isArray(candidate)) {\n return candidate.indexOf(value) >= 0;\n }\n \n return value === candidate;\n }","import React, {forwardRef, Children, isValidElement, cloneElement} from 'react';\nimport { isFragment } from 'react-is';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport isValueSelected from '../../../utilities/isValueSelected';\nimport { withStyles } from '@material-ui/core/styles';\nimport { capitalize } from '@material-ui/core/utils';\n\nexport const styles = (theme) => ({\n /* Styles applied to the root element. */\n root: {\n display: 'inline-flex',\n padding: 0\n },\n /* Styles applied to the root element if `orientation=\"vertical\"`. */\n vertical: {\n flexDirection: 'column',\n },\n /* Styles applied to the children. */\n grouped: {},\n /* Styles applied to the children if `orientation=\"horizontal\"`. */\n groupedHorizontal: {\n // '&:not(:first-child)': {\n // marginLeft: -1,\n // borderLeft: '1px solid ',\n // borderTopLeftRadius: 25,\n // borderBottomLeftRadius: 25,\n // },\n // '&:not(:last-child)': {\n // borderTopRightRadius: 25,\n // borderBottomRightRadius: 25,\n // },\n borderRadius: 25,\n padding: 0,\n paddingRight: 16,\n '&:not(:first-child)': {\n marginTop: 16,\n borderRadius: 25,\n paddingRight: 16,\n padding: 0\n },\n '&:not(:last-child)': {\n padding: 0,\n borderRadius: 25,\n paddingRight: 16,\n },\n \n },\n /* Styles applied to the children if `orientation=\"vertical\"`. */\n groupedVertical: {\n borderRadius: 25,\n padding: 0,\n paddingRight: 16,\n '&:not(:first-child)': {\n marginTop: 16,\n borderRadius: 25,\n paddingRight: 16,\n padding: 0\n },\n '&:not(:last-child)': {\n padding: 0,\n borderRadius: 25,\n paddingRight: 16,\n },\n },\n});\n\nconst AmbientToggleButtonGroupDefault = forwardRef(function AmbientToggleButton(props, ref) {\n const {\n children,\n classes,\n className,\n exclusive = false,\n onChange,\n orientation = 'horizontal',\n size = 'medium',\n value,\n ...other\n } = props;\n\n const handleChange = (event, buttonValue) => {\n if (!onChange) {\n return;\n }\n\n const index = value && value.indexOf(buttonValue);\n let newValue;\n\n if (value && index >= 0) {\n newValue = value.slice();\n newValue.splice(index, 1);\n } else {\n newValue = value ? value.concat(buttonValue) : [buttonValue];\n }\n\n onChange(event, newValue);\n };\n\n const handleExclusiveChange = (event, buttonValue) => {\n if (!onChange) {\n return;\n }\n\n onChange(event, value === buttonValue ? null : buttonValue);\n };\n\n return (\n <div\n role=\"group\"\n className={clsx(\n classes.root,\n {\n [classes.vertical]: orientation === 'vertical',\n },\n className,\n )}\n ref={ref}\n {...other}\n >\n {Children.map(children, (child) => {\n if (!isValidElement(child)) {\n return null;\n }\n\n if (process.env.NODE_ENV !== 'production') {\n if (isFragment(child)) {\n console.error(\n [\n \"Material-UI: The ToggleButtonGroup component doesn't accept a Fragment as a child.\",\n 'Consider providing an array instead.',\n ].join('\\n'),\n );\n }\n }\n\n return cloneElement(child, {\n className: clsx(\n classes.grouped,\n classes[`grouped${capitalize(orientation)}`],\n child.props.className,\n ),\n onChange: exclusive ? handleExclusiveChange : handleChange,\n selected:\n child.props.selected === undefined\n ? isValueSelected(child.props.value, value)\n : child.props.selected,\n size: child.props.size || size,\n });\n })}\n </div>\n );\n});\n\nAmbientToggleButtonGroupDefault.propTypes = {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the d.ts file and run \"yarn proptypes\" |\n // ----------------------------------------------------------------------\n /**\n * The content of the button.\n */\n children: PropTypes.node,\n /**\n * Override or extend the styles applied to the component.\n * See [CSS API](#css) below for more details.\n */\n classes: PropTypes.object,\n /**\n * @ignore\n */\n className: PropTypes.string,\n /**\n * If `true`, only allow one of the child ToggleButton values to be selected.\n */\n exclusive: PropTypes.bool,\n /**\n * Callback fired when the value changes.\n *\n * @param {object} event The event source of the callback.\n * @param {any} value of the selected buttons. When `exclusive` is true\n * this is a single value; when false an array of selected values. If no value\n * is selected and `exclusive` is true the value is null; when false an empty array.\n */\n onChange: PropTypes.func,\n /**\n * The group orientation (layout flow direction).\n */\n orientation: PropTypes.oneOf(['horizontal', 'vertical']),\n /**\n * The size of the buttons.\n */\n size: PropTypes.oneOf(['large', 'medium', 'small']),\n /**\n * The currently selected value within the group or an array of selected\n * values when `exclusive` is false.\n *\n * The value must have reference equality with the option in order to be selected.\n */\n value: PropTypes.any,\n};\n\n/**\n * Explicitly cast the HOC to any to avoid non-portable inferred React types in declaration output.\n * @type {any}\n */\nconst AmbientToggleButtonGroupDefaultExport = withStyles(styles, { name: 'MuiToggleButtonGroup' })(AmbientToggleButtonGroupDefault);\n\nexport default AmbientToggleButtonGroupDefaultExport;","import React, { useState } from 'react';\nimport { makeStyles, Typography } from '@material-ui/core';\nimport { GridSidebarContainer } from './GridSidebarContainer';\nimport { GridGroupingHeader } from './GridGroupingHeader';\nimport { AssessmentGroupIcon, ChromeCloseIcon } from '@fluentui/react-icons';\nimport { Token } from '../../components/dataDisplay/Token';\nimport { AmbientToggleButton } from '../../inputs/buttons/AmbientToggleButton';\nimport AmbientToggleButtonGroupDefault from '../../inputs/buttons/AmbientToggleButtonGroupDefault';\nimport PropTypes from 'prop-types';\n\nconst useStyles = makeStyles((theme) => ({\n root: {},\n groupActionContainer: {\n display: 'flex',\n flexDirection: 'column',\n flexWrap: 'wrap',\n alignContent: 'space-around'\n },\n buttonRoot: {\n textTransform: 'none',\n fontWeight: 700,\n justifyContent: 'flex-start'\n },\n buttonGroupWrapper: {\n gap: theme.spacing(2)\n }\n}));\n\nexport const GridGroupingSidebar = ({\n groupItem,\n expandClick,\n collapseClick,\n closeClick,\n groupingData,\n height,\n color = '#F5F2F8'\n}) => {\n const classes = useStyles();\n\n const [view, setView] = useState('');\n\n const handleChange = (event, nextView) => {\n setView(nextView);\n };\n\n const GroupItem = ({ label, clear }) => {\n return (\n <>\n <Token\n icon={clear ? ChromeCloseIcon : AssessmentGroupIcon}\n color='trigger'\n size='small'\n variant='filled'\n type='icon'\n />\n <Typography variant='caption' style={{ color: 'black' }}>\n {' '}\n {label}{' '}\n </Typography>\n </>\n );\n };\n\n return (\n <div className={classes.root}>\n <GridSidebarContainer color={color} height={height}>\n <GridGroupingHeader\n expandClick={expandClick}\n collapseClick={collapseClick}\n closeClick={closeClick}\n />\n <div className={classes.groupActionContainer}>\n <AmbientToggleButtonGroupDefault\n orientation='vertical'\n value={view}\n exclusive\n onChange={handleChange}\n className={classes.buttonGroupWrapper}\n >\n {\n // @todo: consider combining value and groupItem.\n groupingData.map((item) => {\n return (\n <AmbientToggleButton\n value={item.value}\n aria-label={item.label}\n onClick={() => groupItem(item.groupItem)}\n >\n <GroupItem label={item.label} />\n </AmbientToggleButton>\n );\n })\n }\n <AmbientToggleButton\n value='noGroups'\n aria-label='noGroups'\n onClick={closeClick}\n >\n <GroupItem label='No Groups' clear />\n </AmbientToggleButton>\n </AmbientToggleButtonGroupDefault>\n </div>\n </GridSidebarContainer>\n </div>\n );\n};\nGridGroupingSidebar.propTypes = {\n /**\n * Function to pass along grid grouping\n */\n groupItem: PropTypes.func,\n /**\n * Expand Grouped items on grid\n */\n expandClick: PropTypes.func,\n /**\n * Collapse grouped items on grid\n */\n collapseClick: PropTypes.func,\n /**\n * Clear grouped items\n */\n closeClick: PropTypes.func,\n /**\n * Array of data to create grouping list. Example: {groupItem: 'instructors', label: 'Instructors', value: 'instructors'},\n */\n groupingData: PropTypes.array,\n /**\n * Color of the sidebar\n */\n color: PropTypes.string\n};\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","import React from 'react';\nimport {\n makeStyles,\n Typography,\n Tabs,\n Tab,\n InputAdornment,\n lighten\n} from '@material-ui/core';\nimport { AmbientTextField } from '../inputs/textField/AmbientTextField';\nimport {\n SearchIcon,\n CombineIcon,\n ExportIcon,\n DownloadIcon,\n BlockedIcon,\n SaveIcon,\n DeleteIcon,\n ClearIcon\n} from '@fluentui/react-icons';\nimport { AmbientTokenButton } from '../inputs/buttons/AmbientTokenButton';\nimport PropTypes from 'prop-types';\n// import {PAHExport} from './PAHExport'\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n display: 'flex',\n flexDirection: 'row',\n padding: theme.spacing(0.5),\n background: (props) =>\n props.background\n ? props.background\n : lighten(theme.palette.secondary.light, 0.9)\n },\n label: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'flex-end'\n },\n title: {\n flex: 1,\n display: 'flex',\n alignItems: 'center',\n marginLeft: (props) => (props.title ? theme.spacing(2) : 0)\n },\n // @todo: switch to Fluent tabs and remove this style\n tabRoot: {\n minWidth: 0,\n textTransform: 'none'\n },\n controls: {\n display: 'flex',\n alignItems: 'center',\n gridGap: theme.spacing(2),\n gap: theme.spacing(2),\n marginRight: theme.spacing(2)\n },\n icon: {\n background: theme.palette.common.white,\n padding: theme.spacing(1),\n color: theme.palette.secondary.main\n }\n}));\n\nexport const GridActionBar = (props) => {\n const classes = useStyles(props);\n const {\n children,\n onChange,\n handleChange,\n value,\n exportCSV,\n exportExcel,\n exportPDF,\n fitClick,\n expandClick,\n clearClick,\n exportClick,\n saveGridConfig,\n deleteGridConfig,\n clearGridConfig,\n title,\n hideFitGrid = false,\n hideExpandGrid = false,\n hideExportGrid = false,\n hideRemoveFilters = false,\n hideFilterTab = false,\n hideGroupTab = false,\n hideColumnTab = false,\n hideSearchBar = false\n } = props;\n\n const gridControlsExport = (\n <div>\n {/* <PAHExport\n exportCSV={exportCSV}\n exportExcel={exportExcel}\n exportPDF={exportPDF}\n /> */}\n </div>\n );\n\n return (\n <div className={classes.root}>\n <div className={classes.title}>\n {title && (\n <Typography\n variant='h6'\n style={{\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n textOverflow: 'ellipsis'\n }}\n >\n {' '}\n {title}{' '}\n </Typography>\n )}\n {!hideSearchBar && (\n <div\n style={{\n flex: 1,\n marginLeft: 16,\n marginRight: 16,\n marginTop: -16\n }}\n >\n <AmbientTextField\n title={title}\n onChange={onChange}\n InputProps={{\n type: 'search',\n startAdornment: (\n <InputAdornment position='start'>\n <SearchIcon />\n </InputAdornment>\n )\n }}\n />\n </div>\n )}\n </div>\n <div> {gridControlsExport}</div>\n\n <div className={classes.controls}>\n {saveGridConfig && (\n <AmbientTokenButton\n iconClassName={classes.icon}\n icon={SaveIcon}\n tooltip='Save Grid Configuration'\n ariaLabel='Save Grid Configuration'\n onClick={saveGridConfig}\n />\n )}\n {deleteGridConfig && (\n <AmbientTokenButton\n iconClassName={classes.icon}\n icon={DeleteIcon}\n tooltip='Delete Grid Configuration'\n ariaLabel='Delete Grid Configuration'\n onClick={deleteGridConfig}\n />\n )}\n {clearGridConfig && (\n <AmbientTokenButton\n iconClassName={classes.icon}\n icon={ClearIcon}\n tooltip='Clear Grid Configuration'\n ariaLabel='Clear Grid Configuration'\n onClick={clearGridConfig}\n />\n )}\n {!hideFitGrid && (\n <AmbientTokenButton\n iconClassName={classes.icon}\n icon={CombineIcon}\n tooltip='Fit Grid'\n ariaLabel='Fit Grid'\n onClick={fitClick}\n />\n )}\n {!hideExpandGrid && (\n <AmbientTokenButton\n iconClassName={classes.icon}\n icon={ExportIcon}\n tooltip='Expand Grid'\n ariaLabel='Expand Grid'\n onClick={expandClick}\n />\n )}\n {!hideExportGrid && (\n <AmbientTokenButton\n iconClassName={classes.icon}\n icon={DownloadIcon}\n tooltip='Export Grid'\n ariaLabel='Export Grid'\n onClick={exportClick}\n />\n )}\n {!hideRemoveFilters && (\n <AmbientTokenButton\n iconClassName={classes.icon}\n icon={BlockedIcon}\n tooltip='Remove Filters'\n ariaLabel='Remove Filters'\n onClick={clearClick}\n />\n )}\n </div>\n\n <Tabs\n value={value}\n onChange={handleChange}\n aria-label='basic tabs example'\n >\n {!hideFilterTab && (\n <Tab label='Filter' classes={{ root: classes.tabRoot }} />\n )}\n {!hideGroupTab && (\n <Tab label='Group' classes={{ root: classes.tabRoot }} />\n )}\n {!hideColumnTab && (\n <Tab label='Column' classes={{ root: classes.tabRoot }} />\n )}\n </Tabs>\n\n {children}\n </div>\n );\n};\nGridActionBar.propTypes = {\n /**\n * Title of the action bar\n */\n title: PropTypes.string,\n /**\n * Child content to add within action bar\n */\n children: PropTypes.node,\n /**\n * Handle change function for quick search\n */\n handleChange: PropTypes.func,\n /**\n * Passes the tab value of the action bar\n */\n value: PropTypes.number,\n /**\n * Passes click event to function for fit to grid\n */\n fitClick: PropTypes.func,\n /**\n * Passes click event to function for fit to grid\n */\n expandClick: PropTypes.func,\n /**\n * Passes click event to function for expanding grid\n */\n clearClick: PropTypes.func,\n /**\n * Passes click event to function for exporting grid\n */\n exportClick: PropTypes.func\n};\n","import React, { forwardRef } from 'react';\nimport {\n makeStyles,\n Tooltip,\n IconButton,\n Chip,\n Typography\n} from '@material-ui/core';\nimport { FluentIcon } from '../../../utilities/iconLibrary/FluentIcon';\nimport PropTypes from 'prop-types';\n\nconst useStyles = makeStyles((theme) => ({\n root: {},\n actionHeader: {\n display: 'flex',\n flexDirection: 'row'\n },\n icon: {\n marginLeft: theme.spacing(1),\n color: (props) =>\n props.background === 'transparent'\n ? theme.palette.secondary.main\n : theme.palette.primary.main\n },\n chipRoot: {\n background: (props) =>\n props.background ? props.background : theme.palette.common.white\n },\n label: {\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n textOverflow: 'ellipsis'\n }\n}));\n\nexport const AmbientChipButton = forwardRef(function AmbientChipButton(\n props,\n ref\n) {\n const {\n tooltip,\n label,\n onClick,\n icon,\n iconClassName,\n className,\n labelClassName,\n otherProps,\n id='chip-button',\n udprecordid\n } = props;\n const classes = useStyles(props);\n\n return (\n <div className={classes.root}>\n <Tooltip title={tooltip}>\n <Chip\n id={id}\n udprecordid={udprecordid}\n ref={ref}\n className={className ?? classes.chipRoot}\n label={\n <Typography className={labelClassName ?? classes.label}>\n {label}\n </Typography>\n }\n onClick={onClick}\n icon={\n icon && (\n <FluentIcon\n className={iconClassName ?? classes.icon}\n component={icon}\n />\n )\n }\n {...otherProps}\n />\n </Tooltip>\n </div>\n );\n});\n\nAmbientChipButton.propTypes = {\n /**\n * Tooltip to display for button\n */\n tooltip: PropTypes.string.isRequired,\n /**\n * Accessiblity label for icon\n */\n label: PropTypes.string.isRequired,\n /**\n * event for button function\n */\n onClick: PropTypes.func,\n /**\n * icon to appear in button\n */\n icon: PropTypes.func.isRequired\n};\n","import React from \"react\";\nimport {\n AppIconDefaultIcon,\n BlockedIcon,\n BulletedTreeListIcon,\n CombineIcon,\n ExportIcon,\n FavoriteStarIcon,\n FilterIcon,\n LightbulbIcon,\n MoreVerticalIcon,\n SaveIcon,\n SearchIcon,\n TripleColumnIcon,\n UploadIcon\n} from '@fluentui/react-icons';\nimport {\n InputAdornment,\n MenuItem,\n Popover,\n Typography,\n makeStyles\n} from '@material-ui/core';\nimport PropTypes from 'prop-types';\nimport { useCallback, useEffect, useMemo, useState } from 'react';\nimport { FluentIcon } from '../../utilities/iconLibrary/FluentIcon';\nimport { AmbientChipButton } from '../inputs/buttons/AmbientChipButton';\nimport { AmbientTokenButton } from '../inputs/buttons/AmbientTokenButton';\nimport PrimaryActionButton from '../inputs/buttons/PrimaryActionButton';\nimport { AmbientTextField } from '../inputs/textField/AmbientTextField';\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n display: 'flex',\n flexDirection: 'row',\n padding: theme.spacing(0.5)\n // background: (props) =>\n // props.background\n // ? props.background\n // : lighten(theme.palette.secondary.light, 0.9)\n },\n label: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'flex-end'\n },\n title: {\n flex: 1,\n display: 'flex',\n alignItems: 'center',\n marginLeft: (props) => (props.title ? theme.spacing(2) : 0)\n },\n // @todo: switch to Fluent tabs and remove this style\n tabRoot: {\n minWidth: 0,\n textTransform: 'none'\n },\n controls: {\n display: 'flex',\n alignItems: 'center',\n gridGap: theme.spacing(2),\n gap: theme.spacing(2),\n marginRight: theme.spacing(2)\n },\n icon: {\n background: theme.palette.common.white,\n padding: theme.spacing(1),\n color: theme.palette.primary.main\n }\n}));\n\nexport const GridPrimaryBar = (props) => {\n const classes = useStyles(props);\n const {\n children,\n onChange,\n fitClick,\n expandClick,\n clearClick,\n exportClick,\n filterClick,\n columnsClick,\n groupClick,\n title,\n hiddenActionButtons,\n hiddenLabels,\n hideSearchBar = false,\n secondaryActionButtons,\n saveViewClick,\n viewsClick,\n insightsClick,\n onPrimaryActionClick,\n primaryActionDisabled,\n primaryActionLabel,\n primaryActionIcon,\n onSearchKeyDown\n } = props;\n\n const [actionButtonMedianPx, setActionButtonMedianPx] = useState(0);\n const [actionButtons, setActionButtons] = useState([]);\n const [menuActionButtons, setMenuActionButtons] = useState([]);\n const [anchorEl, setAnchorEl] = useState(null);\n const [windowWidthBreakpoint, setWindowWidthBreakpoint] = useState(1400);\n\n const chipButtonSizePx = 100;\n const tokenButtonSizePx = 40;\n const open = Boolean(anchorEl);\n const id = open ? 'simple-popover' : undefined;\n\n const defaultActionButtons = useMemo(\n () => [\n {\n icon: SaveIcon,\n tooltip: 'Save Grid Configuration',\n label: 'Save View',\n visible: !hiddenActionButtons.includes('saveView'),\n hideLabel: hiddenLabels.includes('saveView'),\n onClick: saveViewClick,\n background: 'transparent'\n },\n {\n icon: FavoriteStarIcon,\n tooltip: 'Browse Views',\n label: 'Views',\n visible: !hiddenActionButtons.includes('views'),\n onClick: viewsClick,\n hideLabel: hiddenLabels.includes('views'),\n iconClassName: classes.icon\n },\n {\n icon: LightbulbIcon,\n tooltip: 'Insights',\n label: 'Insights',\n visible: !hiddenActionButtons.includes('insights'),\n hideLabel: hiddenLabels.includes('insights'),\n onClick: insightsClick,\n iconClassName: classes.icon\n },\n {\n icon: UploadIcon,\n tooltip: 'Import/Export',\n label: 'Import/Export',\n visible: !!exportClick && !hiddenActionButtons.includes('importExport'),\n hideLabel: hiddenLabels.includes('importExport'),\n onClick: exportClick,\n iconClassName: classes.icon\n },\n {\n icon: BulletedTreeListIcon,\n tooltip: 'Group',\n label: 'Group',\n visible: !!groupClick && !hiddenActionButtons.includes('group'),\n hideLabel: hiddenLabels.includes('group'),\n onClick: groupClick,\n iconClassName: classes.icon\n },\n {\n icon: FilterIcon,\n tooltip: 'Filter',\n label: 'Filter',\n visible: !!filterClick && !hiddenActionButtons.includes('filter'),\n hideLabel: hiddenLabels.includes('filter'),\n onClick: filterClick,\n iconClassName: classes.icon\n },\n {\n icon: TripleColumnIcon,\n tooltip: 'Columns',\n label: 'Columns',\n visible: !!columnsClick && !hiddenActionButtons.includes('columns'),\n hideLabel: hiddenLabels.includes('columns'),\n onClick: columnsClick,\n iconClassName: classes.icon\n },\n {\n icon: CombineIcon,\n tooltip: 'Fit Grid',\n label: 'Fit Grid',\n visible: !!fitClick && !hiddenActionButtons.includes('fitGrid'),\n hideLabel: hiddenLabels.includes('fitGrid'),\n onClick: fitClick,\n iconClassName: classes.icon\n },\n {\n icon: ExportIcon,\n tooltip: 'Expand Grid',\n label: 'Expand Grid',\n visible: !!expandClick && !hiddenActionButtons.includes('expandGrid'),\n hideLabel: hiddenLabels.includes('expandGrid'),\n onClick: expandClick,\n iconClassName: classes.icon\n },\n {\n icon: BlockedIcon,\n tooltip: 'Clear Filters',\n label: 'Clear Filters',\n visible: !!clearClick && !hiddenActionButtons.includes('clearFilters'),\n hideLabel: hiddenLabels.includes('clearFilters'),\n onClick: clearClick,\n iconClassName: classes.icon\n }\n ],\n [\n classes.icon,\n clearClick,\n columnsClick,\n expandClick,\n exportClick,\n filterClick,\n fitClick,\n groupClick,\n hiddenActionButtons,\n hiddenLabels,\n insightsClick,\n saveViewClick,\n viewsClick\n ]\n );\n\n const handlePopoverClick = (event) => {\n setAnchorEl(event.currentTarget);\n };\n\n const handlePopoverClose = () => {\n setAnchorEl(null);\n };\n\n const formatActionButtons = useCallback(\n (buttons) => {\n // This allows users to not have to set the visible and showLabel properties when passing secondaryActionButtons\n return buttons.map((button) => {\n if (button.visible === undefined) {\n button.visible = true;\n }\n if (button.hideLabel === undefined) {\n button.hideLabel = false;\n }\n if (button.label === undefined) {\n button.label = button.tooltip ?? 'Button';\n button.hideLabel = true;\n }\n if (\n button.iconClassName === undefined &&\n button.background === undefined\n ) {\n button.iconClassName = classes.icon;\n }\n return button;\n });\n },\n [classes?.icon]\n );\n\n // calculate the action buttons to display based on the window width\n useEffect(() => {\n const allActionButtons = formatActionButtons([\n ...defaultActionButtons,\n ...secondaryActionButtons\n ]);\n const menuButtons = [];\n\n const numActionButtons =\n allActionButtons.length - hiddenActionButtons.length;\n const buttonTotalWidth =\n numActionButtons * chipButtonSizePx -\n (chipButtonSizePx - tokenButtonSizePx) * hiddenLabels.length;\n\n const calculatedMedian = Math.floor(buttonTotalWidth / numActionButtons);\n\n const breakPointOffset = calculatedMedian > 70 ? 950 : 900;\n let breakPoint = breakPointOffset + buttonTotalWidth;\n\n const currentWindowWidth = window.innerWidth;\n while (currentWindowWidth < breakPoint && allActionButtons.length > 0) {\n const movedAction = allActionButtons.pop();\n menuButtons.push(movedAction);\n breakPoint -= calculatedMedian;\n }\n\n setActionButtonMedianPx(calculatedMedian);\n setActionButtons(allActionButtons);\n setMenuActionButtons(menuButtons);\n setWindowWidthBreakpoint(breakPoint);\n }, [\n formatActionButtons,\n defaultActionButtons,\n secondaryActionButtons,\n hiddenActionButtons?.length,\n hiddenLabels?.length\n ]);\n\n useEffect(() => {\n const handleResize = () => {\n let breakPoint = windowWidthBreakpoint;\n let visibleButtons = [...actionButtons];\n let menuButtons = [...menuActionButtons];\n\n while (window.innerWidth < breakPoint && visibleButtons.length > 0) {\n const movedAction = visibleButtons.pop();\n menuButtons.push(movedAction);\n breakPoint -= actionButtonMedianPx;\n }\n\n while (\n window.innerWidth > breakPoint + actionButtonMedianPx &&\n menuButtons.length > 0\n ) {\n const movedAction = menuButtons.pop(0);\n visibleButtons.push(movedAction);\n breakPoint += actionButtonMedianPx;\n }\n\n setActionButtons(visibleButtons);\n setMenuActionButtons(menuButtons);\n setWindowWidthBreakpoint(breakPoint);\n };\n\n window.addEventListener('resize', handleResize);\n return () => {\n window.removeEventListener('resize', handleResize);\n };\n }, [\n windowWidthBreakpoint,\n actionButtons,\n menuActionButtons,\n actionButtonMedianPx\n ]);\n\n const handleCustomKeyDown = (event) => {\n if(onSearchKeyDown){\n if (event.key === 'Enter') {\n onSearchKeyDown()\n }\n }\n\n }\n\n return (\n <div className={classes.root}>\n <div className={classes.title}>\n {title && (\n <Typography\n variant='h6'\n style={{\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n textOverflow: 'ellipsis'\n }}\n >\n {' '}\n {title}{' '}\n </Typography>\n )}\n {!hideSearchBar && (\n <div\n style={{\n flex: 1,\n marginLeft: 16,\n marginRight: 16,\n marginTop: -16,\n maxWidth: 300\n }}\n >\n <AmbientTextField\n title={title}\n onChange={onChange}\n onKeyDown={handleCustomKeyDown}\n InputProps={{\n type: 'search',\n startAdornment: (\n <InputAdornment position='start'>\n <SearchIcon />\n </InputAdornment>\n )\n }}\n />\n </div>\n )}\n </div>\n\n <div className={classes.controls}>\n {actionButtons.map(\n (button) =>\n button.visible &&\n (button.hideLabel ? (\n <AmbientTokenButton\n id={\n 'udpRecord-GridPrimaryBar-Token-' +\n button.label.replace(/ /g, '-')\n }\n udprecordid={\n 'udpRecord-GridPrimaryBar-Token-' +\n button.label.replace(/ /g, '-')\n }\n icon={button.icon ?? AppIconDefaultIcon}\n tooltip={button.tooltip}\n onClick={button.onClick}\n ariaLabel={button.label}\n iconClassName={button.iconClassName}\n />\n ) : (\n <AmbientChipButton\n id={\n 'udpRecord-GridPrimaryBar-Chip-' +\n button.label.replace(/ /g, '-')\n }\n udprecordid={\n 'udpRecord-GridPrimaryBar-Chip-' +\n button.label.replace(/ /g, '-')\n }\n icon={button.icon ?? AppIconDefaultIcon}\n tooltip={button.tooltip}\n label={button.label}\n onClick={button.onClick}\n background={button.background}\n />\n ))\n )}\n\n {!!menuActionButtons.length && (\n <div>\n <AmbientTokenButton\n id={id}\n icon={MoreVerticalIcon}\n tooltip='More Actions'\n ariaLabel='More Actions'\n onClick={handlePopoverClick}\n iconClassName={classes.icon}\n />\n <Popover\n id={id}\n open={open}\n anchorEl={anchorEl}\n onClose={handlePopoverClose}\n anchorOrigin={{\n vertical: 'bottom',\n horizontal: 'right'\n }}\n transformOrigin={{\n vertical: 'top',\n horizontal: 'right'\n }}\n >\n {menuActionButtons\n .slice(0)\n .reverse()\n .map((button) => {\n if (!button.visible) return null;\n return (\n <MenuItem\n id={\n 'udpRecord-GridPrimaryBar-MenuItem-' +\n button.label.replace(/ /g, '-')\n }\n udprecordid={\n 'udpRecord-GridPrimaryBar-MenuItem-' +\n button.label.replace(/ /g, '-')\n }\n onClick={button.onClick}\n style={{\n display: 'flex',\n justifyContent: 'space-between'\n }}\n >\n <Typography>{button.label}</Typography>\n <FluentIcon\n component={button.icon ?? AppIconDefaultIcon}\n style={{ marginLeft: 7 }}\n />\n </MenuItem>\n );\n })}\n </Popover>\n </div>\n )}\n </div>\n\n {onPrimaryActionClick && (\n <PrimaryActionButton\n onClick={onPrimaryActionClick}\n id='udpRecord-GridPrimaryBar-Add'\n udprecordid='udpRecord-GridPrimaryBar-Add'\n disabled={primaryActionDisabled}\n >\n <Typography style={{ marginLeft: 4 }}>\n {primaryActionLabel ?? 'Button'}\n </Typography>\n <FluentIcon\n style={{ marginLeft: 7 }}\n component={primaryActionIcon ?? AppIconDefaultIcon}\n />\n </PrimaryActionButton>\n )}\n </div>\n );\n};\n\nGridPrimaryBar.propTypes = {\n /**\n * Title of the action bar\n */\n title: PropTypes.string,\n /**\n * Child content to add within action bar\n */\n children: PropTypes.node,\n /**\n * The event that occurs when the grid changes due to a search\n */\n onChange: PropTypes.func,\n /**\n * Passes click event to function for fit to grid\n */\n fitClick: PropTypes.func,\n /**\n * Passes click event to function for expanding grid\n */\n expandClick: PropTypes.func,\n /**\n * Passes click event to function for clearing filters\n */\n clearClick: PropTypes.func,\n /**\n * Passes click event to function for exporting grid\n */\n exportClick: PropTypes.func,\n /**\n * Passes function that executes on the insights button click\n */\n insightsClick: PropTypes.func,\n /**\n * Passes click event to function for filtering grid\n */\n filterClick: PropTypes.func,\n /**\n * Passes click event to function for disabling columns in grid\n */\n columnsClick: PropTypes.func,\n /**\n * Passes click event to function for grouping grid\n */\n groupClick: PropTypes.func,\n /**\n * Specifies whether to hide the search bar\n */\n hideSearchBar: PropTypes.bool,\n /**\n * An optional array of secondary action buttons to display.\n * Required minimum format:\n * {\n tooltip: 'Description',\n label: 'Label',\n onClick: () => console.log('Button clicked'),\n },\n */\n secondaryActionButtons: PropTypes.arrayOf(PropTypes.object),\n /*\n * Specifies which action buttons to hide\n */\n hiddenActionButtons: PropTypes.arrayOf(\n PropTypes.oneOf([\n 'saveView',\n 'views',\n 'insights',\n 'importExport',\n 'group',\n 'filter',\n 'columns',\n 'fitGrid',\n 'expandGrid',\n 'clearFilters'\n ])\n ),\n /*\n * Specifies which action button labels to hide\n */\n hiddenLabels: PropTypes.arrayOf(\n PropTypes.oneOf([\n 'saveView',\n 'views',\n 'insights',\n 'importExport',\n 'group',\n 'filter',\n 'columns',\n 'fitGrid',\n 'expandGrid',\n 'clearFilters'\n ])\n ),\n /**\n * Passes function that executes on the primary action button click\n */\n onPrimaryActionClick: PropTypes.func,\n /**\n * Specifies the label for the primary action button\n */\n primaryActionLabel: PropTypes.string,\n /**\n * Specifies the icon for the primary action button\n */\n primaryActionIcon: PropTypes.elementType\n};\n","import { GridStateTypeEnums } from '../../enums/unitySystemEnums.ts';\n\nexport const useGridFormat = () => {\n const gridFormat = (gridApi, type) => {\n type === 'expand' && gridApi.expandAll()\n type === 'collapse' && gridApi.collapseAll()\n type === 'resize' && gridApi.sizeColumnsToFit()\n }\n return [gridFormat]\n}\n\nexport const useGridClear = () => {\n const gridClear = (gridApi, gridColumnApi) => {\n gridColumnApi.setRowGroupColumns([])\n gridApi.setFilterModel(null)\n gridApi.setQuickFilter('')\n gridApi.sizeColumnsToFit()\n gridColumnApi.resetColumnState()\n }\n return [gridClear]\n}\n\nexport const useQuickFilter = () => {\n const quickFilter = (gridApi, event) => {\n gridApi.setQuickFilter(event?.target.value)\n }\n return [quickFilter]\n}\n\nexport const useExport = () => {\n const gridExport = (gridApi, type) => {\n type === 'excel' && gridApi.exportDataAsExcel()\n type === 'csv' && gridApi.exportDataAsCsv()\n }\n return [gridExport]\n}\n\nexport const saveGridState = async (\n gridId,\n gridApi,\n gridColumnApi,\n execute\n) => {\n const columnState = gridColumnApi?.getColumnState();\n const columnGroupState = gridColumnApi?.getColumnGroupState();\n const sortModel = gridApi.getSortModel();\n const filterModel = gridApi.getFilterModel();\n const isPivotMode = gridColumnApi.isPivotMode();\n\n const gridState = [];\n const columnGridConfiguration = {\n gridStateTypeId: GridStateTypeEnums.Column,\n gridId: gridId,\n values: JSON.stringify(columnState),\n };\n const columnGroupGridConfiguration = {\n gridStateTypeId: GridStateTypeEnums.Column_Group,\n gridId: gridId,\n values: JSON.stringify(columnGroupState),\n };\n const columnSortGridConfiguration = {\n gridStateTypeId: GridStateTypeEnums.Column_Sort,\n gridId: gridId,\n values: JSON.stringify(sortModel),\n };\n const columnFilterGridConfiguration = {\n gridStateTypeId: GridStateTypeEnums.Column_Filter,\n gridId: gridId,\n values: JSON.stringify(filterModel),\n };\n const pivotGridConfiguration = {\n gridStateTypeId: GridStateTypeEnums.Pivot_Mode,\n gridId: gridId,\n values: JSON.stringify(isPivotMode),\n };\n gridState.push(columnGridConfiguration);\n gridState.push(columnGroupGridConfiguration);\n gridState.push(columnSortGridConfiguration);\n gridState.push(columnFilterGridConfiguration);\n gridState.push(pivotGridConfiguration);\n\n return await execute({ data: gridState });\n};\n\n\nexport const getGridState = (gridApi, gridColumnApi, gridId) => {\n const columnState = gridColumnApi?.getColumnState();\n const columnGroupState = gridColumnApi?.getColumnGroupState();\n const sortModel = gridApi.getSortModel();\n const filterModel = gridApi.getFilterModel();\n const isPivotMode = gridColumnApi.isPivotMode();\n\n const gridState = [];\n const columnGridConfiguration = {\n gridStateTypeId: GridStateTypeEnums.Column,\n gridId: gridId,\n values: JSON.stringify(columnState),\n };\n const columnGroupGridConfiguration = {\n gridStateTypeId: GridStateTypeEnums.Column_Group,\n gridId: gridId,\n values: JSON.stringify(columnGroupState),\n };\n const columnSortGridConfiguration = {\n gridStateTypeId: GridStateTypeEnums.Column_Sort,\n gridId: gridId,\n values: JSON.stringify(sortModel),\n };\n const columnFilterGridConfiguration = {\n gridStateTypeId: GridStateTypeEnums.Column_Filter,\n gridId: gridId,\n values: JSON.stringify(filterModel),\n };\n const pivotGridConfiguration = {\n gridStateTypeId: GridStateTypeEnums.Pivot_Mode,\n gridId: gridId,\n values: JSON.stringify(isPivotMode),\n };\n gridState.push(columnGridConfiguration);\n gridState.push(columnGroupGridConfiguration);\n gridState.push(columnSortGridConfiguration);\n gridState.push(columnFilterGridConfiguration);\n gridState.push(pivotGridConfiguration);\n\n return gridState;\n}\n\nexport const deleteGridState = async (\n gridApi,\n gridColumnApi,\n deleteGridState\n) => {\n clearGridState(gridApi, gridColumnApi);\n return await deleteGridState();\n};\n\nexport const clearGridState = (gridApi, gridColumnApi) => {\n gridColumnApi.resetColumnState();\n gridColumnApi.resetColumnGroupState();\n gridApi.setFilterModel({});\n gridApi.setSortModel([]);\n gridColumnApi.setPivotMode(false);\n gridApi.sizeColumnsToFit();\n};\n\nexport const onFirstDataRendered = (gridApi, gridColumnApi, gridStates) => {\n if (gridStates && gridStates.length) {\n gridStates.forEach(state => {\n switch (state.gridStateTypeId) {\n case GridStateTypeEnums.Column:\n gridColumnApi.setColumnState(JSON.parse(state.values));\n break;\n case GridStateTypeEnums.Column_Group:\n gridColumnApi.setColumnGroupState(JSON.parse(state.values));\n break;\n case GridStateTypeEnums.Pivot_Mode:\n gridColumnApi.setPivotMode(JSON.parse(state.values));\n break;\n case GridStateTypeEnums.Column_Sort:\n gridApi.setSortModel(JSON.parse(state.values));\n break;\n case GridStateTypeEnums.Column_Filter:\n gridApi.setFilterModel(JSON.parse(state.values));\n break;\n default:\n break;\n }\n });\n }\n};","import {\n Box,\n Divider,\n FormControlLabel,\n Switch,\n Typography,\n makeStyles\n} from '@material-ui/core';\nimport React, { useCallback, useRef } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Field, Form } from '../../utilities/form';\nimport { FluentDialog } from '../feedback/FluentDialog.jsx';\nimport { AmbientTextField } from '../inputs/textField/AmbientTextField.jsx';\nimport { apiMutate } from '../../utilities/useAxiosMutate';\nimport { useHandleAxiosSnackbar } from '../../utilities/apiHelpers.jsx';\nimport { getGridState } from '../../utilities/aggrid/GridFunctions';\nimport PropTypes from 'prop-types';\nimport { VisibilityTypeEnums } from '../../enums/unitySystemEnums';\nimport { ConfigService } from 'udp-react-stencil-component-library';\n\nconst useStyles = makeStyles((theme) => ({\n root: {},\n saveForm: {\n minWidth: 450,\n paddingLeft: theme.spacing(2),\n paddingRight: theme.spacing(2)\n },\n column: {\n flex: 1,\n paddingLeft: theme.spacing(2),\n paddingRight: theme.spacing(2)\n },\n divider: {\n backgroundColor: 'grey',\n color: 'grey',\n width: 2,\n height: '100%'\n },\n infoHeader: {\n color: 'grey'\n }\n}));\n\n/**\n * @param {PropTypes.InferProps<typeof SaveViewFormDialog.propTypes>} props\n */\nexport const SaveViewFormDialog = (props) => {\n const { handleErrorSnackbar, handleSuccessSnackbar } =\n useHandleAxiosSnackbar();\n const {\n open,\n handleClose,\n tenant,\n application,\n user,\n refetchViews,\n gApi,\n gcApi,\n gridId,\n domain,\n apiCatalogId\n } = props;\n const { t } = useTranslation();\n const classes = useStyles(props);\n\n const saveViewFormRef = useRef(null);\n const triggerSaveView = useCallback(() => {\n saveViewFormRef.current.handleSubmit();\n }, [saveViewFormRef]);\n\n const saveView = async (values) => {\n const data = {\n data: {\n gridView: {\n Name: values.name,\n GridViewVisibilityTypeId: values.private\n ? VisibilityTypeEnums.Private\n : VisibilityTypeEnums.Public,\n isDefault: 0,\n tenantId: user?.currentTenantId,\n userId: user?.id,\n gridId: gridId,\n domain: domain,\n apiCatalogId: apiCatalogId\n },\n gridConfigurations: getGridState(gApi, gcApi, gridId)\n },\n method: 'POST'\n };\n handleClose();\n await apiMutate(\n ConfigService.tenantV2ApiUrl,\n `GridView/createGridView`,\n data\n )\n .then((response) => {\n handleSuccessSnackbar(t('View Saved'));\n refetchViews();\n })\n .catch((error) => {\n console.log(error);\n handleErrorSnackbar(error, t('Failed to Save View'));\n });\n };\n\n return (\n <FluentDialog\n title={t('Save New View')}\n open={open}\n handleClose={handleClose}\n labelOne={t('Save View')}\n labelTwo={t('Cancel')}\n actionOne={triggerSaveView}\n actionTwo={handleClose}\n >\n <Box display='flex'>\n <div className={classes.column}>\n <Typography className={classes.infoHeader} align='left'>\n {t('Tenant')}\n </Typography>\n <Typography variant='subtitle2' align='left'>\n {tenant ?? '--'}\n </Typography>\n </div>\n <Divider flexItem orientation='vertical' />\n <div className={classes.column}>\n <Typography className={classes.infoHeader} align='left'>\n {t('Application')}\n </Typography>\n <Typography variant='subtitle2' align='left'>\n {application ?? '--'}\n </Typography>\n </div>\n <Divider flexItem orientation='vertical' />\n <div className={classes.column}>\n <Typography className={classes.infoHeader} align='left'>\n {t('Entity')}\n </Typography>\n <Typography variant='subtitle2' align='left'>\n {domain ?? '--'}\n </Typography>\n </div>\n </Box>\n\n <div className={classes.saveForm}>\n <Form onSubmit={saveView} ref={saveViewFormRef}>\n <Field\n type='text'\n component={AmbientTextField}\n name='name'\n id='name'\n label={t('Name')}\n fullWidth={true}\n required={true}\n style={{ marginBottom: 20, marginTop: 10 }}\n />\n\n <FormControlLabel\n control={\n <Field\n component={Switch}\n name='private'\n id='private'\n defaultValue={false}\n type='checkbox'\n />\n }\n label={t('Private')}\n labelPlacement='end'\n />\n </Form>\n </div>\n </FluentDialog>\n );\n};\n\nSaveViewFormDialog.propTypes = {\n open: PropTypes.bool.isRequired, // Determines whether the dialog is open or closed\n handleClose: PropTypes.func.isRequired, // Function called when the dialog is closed\n tenant: PropTypes.string, // Tenant value (optional)\n application: PropTypes.string, // Application value (optional)\n entity: PropTypes.string, // Entity value (optional)\n user: PropTypes.object, // User object (optional)\n columnDefsValues: PropTypes.array, // Array of column definitions values (optional)\n refetchViews: PropTypes.func, // Function to refetch views (optional)\n gApi: PropTypes.object, // Grid API object (optional)\n gcApi: PropTypes.object, // Grid Column API object (optional)\n setSelectedView: PropTypes.func // Function to set selected view (optional)\n};\n","import React from \"react\";\nimport { useCallback, useState } from 'react';\n\n/**\n * A custom React hook for calculating the number of visible children in a dynamic list based on container width and child widths.\n *\n * @returns {object} An object containing the `calculateNumberOfVisibleChildren` function.\n *\n * @example\n * // Basic usage:\n * const parentRef = useRef();\n * const childRefs = useRef([]);\n * const { calculateNumberOfVisibleChildren } = useDynamicListCalculation();\n * const maxVisibleChildren = calculateNumberOfVisibleChildren(parentRef, childRefs);\n\n * @example\n * // Excluding a buffer for less white space:\n * const parentRef = useRef();\n * const childRefs = useRef([]);\n * const { calculateNumberOfVisibleChildren } = useDynamicListCalculation();\n * const maxVisibleChildren = calculateNumberOfVisibleChildren(parentRef, childRefs, false);\n */\nexport const useDynamicListCalculation = () => {\n const [averageChildWidth, setAverageChildWidth] = useState(0);\n const [previousChildRefs, setPreviousChildRefs] = useState([]);\n\n /**\n * Calculate the number of visible children based on container width and child widths.\n *\n * @param {object} parentRef - Ref object for the parent container.\n * @param {object} childRefs - Ref object for an array of child elements.\n * @param {boolean} includeBuffer - Whether to include a buffer for better performance (default: true).\n * @returns {number} The maximum number of visible children.\n */\n const calculateNumberOfVisibleChildren = useCallback(\n (parentRef, childRefs, includeBuffer = true) => {\n if (!parentRef.current || !childRefs.current) return;\n\n const containerWidth =\n parentRef.current.getBoundingClientRect().width ?? 0;\n\n // If the average child width has not been calculated yet, or the child refs have changed, then calculate the average child width\n if (!averageChildWidth || previousChildRefs !== childRefs.current) {\n const childrenTotalWidth = childRefs.current\n .map((ref) =>\n ref && typeof ref?.getBoundingClientRect === 'function'\n ? ref.getBoundingClientRect().width\n : 0\n )\n .reduce((acc, curr) => acc + curr, 0);\n\n const calculatedAverageWidth =\n childrenTotalWidth / childRefs.current.length;\n\n setAverageChildWidth(calculatedAverageWidth);\n setPreviousChildRefs(childRefs.current);\n }\n\n const maxVisibleChildren = Math.floor(containerWidth / averageChildWidth);\n\n if (includeBuffer) return maxVisibleChildren - 1;\n\n return maxVisibleChildren;\n },\n [averageChildWidth, previousChildRefs]\n );\n\n return { calculateNumberOfVisibleChildren };\n};\n","import { MoreVerticalIcon } from '@fluentui/react-icons';\nimport { MenuItem, Popover } from '@material-ui/core';\nimport { makeStyles } from '@material-ui/core/styles';\nimport PropTypes from 'prop-types';\nimport React, {\n Children,\n cloneElement,\n forwardRef,\n useCallback,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState\n} from 'react';\nimport { useDynamicListCalculation } from '../../hooks/useDynamicListCalculation';\nimport { AmbientTokenButton } from '../inputs/buttons/AmbientTokenButton';\n\nconst useStyles = makeStyles((theme) => ({\n filterChipMenuIcon: {\n background: theme.palette.common.grey,\n padding: theme.spacing(1),\n color: theme.palette.primary.main\n }\n}));\n\nexport const DynamicContainerWithMenu = forwardRef((props, ref) => {\n // ################### Props ###################\n const {\n children,\n className,\n menuButton,\n menuIconClassName,\n includeBuffer = true\n } = props;\n\n // ################### Custom Hooks ###################\n const classes = useStyles();\n const { calculateNumberOfVisibleChildren } = useDynamicListCalculation();\n\n // ################### Memoized Values ###################\n const modifiedMenuButton = useMemo(() => {\n if (!menuButton) return null;\n\n return cloneElement(\n menuButton,\n {\n onClick: (event) => {\n menuButton.props.onClick(event);\n handlePopoverClick(event);\n },\n ...menuButton.props\n },\n menuButton.props.children\n );\n }, [menuButton]);\n\n // ################### States ###################\n const [allChildren, setAllChildren] = useState([]);\n const [visibleChildren, setVisibleChildren] = useState([]);\n const [menuChildren, setMenuChildren] = useState([]);\n const [anchorEl, setAnchorEl] = useState(null);\n\n // ################### Variables ###################\n const open = Boolean(anchorEl);\n const id = open ? 'simple-popover' : undefined;\n\n // ################### Refs ###################\n const containerRef = useRef(ref);\n const outerContainerRef = useRef(null);\n const childrenRefs = useRef([]);\n\n // ################### Functions ###################\n const handlePopoverClick = (event) => {\n setAnchorEl(event.currentTarget);\n };\n\n const handlePopoverClose = () => {\n setAnchorEl(null);\n };\n\n // ################### Callbacks ###################\n const handleSizeChange = useCallback(() => {\n const maxVisibleChildren = calculateNumberOfVisibleChildren(\n containerRef,\n childrenRefs,\n includeBuffer\n );\n\n const visibleChildren = allChildren.slice(0, maxVisibleChildren);\n const menuChildren = allChildren.slice(maxVisibleChildren);\n\n setVisibleChildren(visibleChildren);\n setMenuChildren(menuChildren);\n }, [\n containerRef,\n allChildren,\n childrenRefs,\n calculateNumberOfVisibleChildren,\n includeBuffer\n ]);\n\n const handleMenuItemClick = useCallback((child) => {\n if (child.props.onClick && typeof child.props.onClick === 'function') {\n child.props.onClick();\n }\n\n // If the child has children, then call the onClick function for each child\n let children = child.props.children;\n while (children) {\n if (Array.isArray(children) && children.length > 0) {\n children.forEach((child) => {\n if (\n child.props.onClick &&\n typeof child.props.onClick === 'function'\n ) {\n child.props.onClick();\n }\n });\n } else if (typeof children === 'object') {\n if (\n children.props.onClick &&\n typeof children.props.onClick === 'function'\n ) {\n children.props.onClick();\n }\n }\n\n children = children.props.children;\n }\n\n handlePopoverClose();\n }, []);\n\n // ################### Effects ###################\n useEffect(() => {\n const arrayChildren = Children.toArray(children);\n setAllChildren(arrayChildren);\n setVisibleChildren(arrayChildren);\n }, [children]);\n\n useLayoutEffect(handleSizeChange, [handleSizeChange]);\n\n useLayoutEffect(() => {\n // Add the resize event listener for when the browser window is resized\n window.addEventListener('resize', handleSizeChange);\n // Add the resize observer for when the parent div is resized\n const resizeObserver = new ResizeObserver(handleSizeChange);\n if (outerContainerRef.current) {\n resizeObserver.observe(outerContainerRef.current);\n }\n\n // Remove the event listeners on cleanup\n return () => {\n window.removeEventListener('resize', handleSizeChange);\n resizeObserver.disconnect();\n };\n }, [handleSizeChange, outerContainerRef]);\n\n // ################### Render ###################\n return (\n <div\n ref={outerContainerRef}\n style={{\n width: '100%',\n overflow: 'hidden'\n }}\n >\n <div\n className={className}\n ref={containerRef}\n style={{\n display: 'flex',\n flexWrap: 'noWrap',\n overflow: 'hidden',\n flexGrow: 1\n }}\n >\n {visibleChildren &&\n Children.map(visibleChildren, (child, index) => {\n return cloneElement(\n child,\n {\n ref: (ref) => (childrenRefs.current[index] = ref),\n ...child.props\n },\n child.props.children\n );\n })}\n {menuChildren && menuChildren.length > 0 && (\n <div>\n {modifiedMenuButton ?? (\n <AmbientTokenButton\n id={id}\n icon={MoreVerticalIcon}\n tooltip='Additional Filter Values'\n ariaLabel='Additional Filter Values'\n onClick={handlePopoverClick}\n iconClassName={menuIconClassName ?? classes.filterChipMenuIcon}\n />\n )}\n <Popover\n id={id}\n open={open}\n anchorEl={anchorEl}\n onClose={handlePopoverClose}\n anchorOrigin={{\n vertical: 'bottom',\n horizontal: 'right'\n }}\n transformOrigin={{\n vertical: 'top',\n horizontal: 'right'\n }}\n >\n {Children.map(menuChildren, (child, index) => {\n return (\n <MenuItem onClick={() => handleMenuItemClick(child)}>\n {cloneElement(\n child,\n {\n ...child.props\n },\n child.props.children\n )}\n </MenuItem>\n );\n })}\n </Popover>\n </div>\n )}\n </div>\n </div>\n );\n});\n\nDynamicContainerWithMenu.displayName = 'DynamicContainerWithMenu';\nDynamicContainerWithMenu.propTypes = {\n /**\n * The children to render in the container\n */\n children: PropTypes.node.isRequired,\n /**\n * A className to apply to the container\n */\n className: PropTypes.string,\n /**\n * A custom menu button to use instead of the default\n */\n menuButton: PropTypes.node,\n /**\n * A custom class to apply to the menu icon\n */\n menuIconClassName: PropTypes.string,\n /**\n * Whether to include a space buffer between the menu button and container border (default: true)\n * @default true\n */\n includeBuffer: PropTypes.bool\n};\n","import React from \"react\";\nimport Chip from '@material-ui/core/Chip';\nimport Divider from '@material-ui/core/Divider';\nimport Tooltip from '@material-ui/core/Tooltip';\nimport Typography from '@material-ui/core/Typography';\nimport { makeStyles } from '@material-ui/core/styles';\nimport StarIcon from '@material-ui/icons/Star';\nimport PropTypes from 'prop-types';\nimport { useRef, useState } from 'react';\nimport { DynamicContainerWithMenu } from '../containers/DynamicContainerWithMenu';\n\nconst useStyles = makeStyles((theme) => ({\n wrapper: {\n display: 'flex',\n gap: theme.spacing(1),\n flexWrap: 'noWrap',\n backgroundColor: `${theme.palette.secondary.light}80`, // The \"80\" sets the opacity to 0.5\n alignItems: 'center',\n flexGrow: 1,\n width: '100%'\n },\n chipHolder: {\n display: 'flex',\n gap: theme.spacing(1),\n flexWrap: 'noWrap',\n backgroundColor: `${theme.palette.secondary.light}80`, // The \"80\" sets the opacity to 0.5\n alignItems: 'center',\n overflow: 'scroll',\n '&::-webkit-scrollbar': {\n display: 'none'\n },\n flexGrow: 1\n },\n viewChip: {\n backgroundColor: theme.palette.secondary.main,\n color: 'white',\n maxWidth: '150px',\n transition: 'opacity 0.3s ease',\n marginLeft: theme.spacing(1)\n },\n menuItem: {\n backgroundColor: 'white'\n },\n filterChipMenuIcon: {\n background: theme.palette.common.grey,\n padding: theme.spacing(1),\n color: theme.palette.primary.main\n },\n additionalFilterChip: {},\n KPI: {\n marginLeft: 'auto',\n display: 'flex',\n gap: theme.spacing(1),\n color: 'grey',\n width: 'auto'\n },\n kpiValue: {\n color: 'black',\n fontSize: '1.1em'\n },\n kpiItem: {\n display: 'flex',\n justifyContent: 'center',\n width: 'max-content'\n },\n kpiLabel: {\n width: 'max-content',\n marginRight: theme.spacing(1)\n },\n clickedChip: {\n backgroundColor: theme.palette.primary.main,\n color: 'white',\n maxWidth: '150px'\n },\n filterChipLabel: {\n color: theme.palette.text.primary,\n whiteSpace: 'nowrap',\n marginRight: theme.spacing(1)\n },\n filterChipValue: {\n color: theme.palette.text.secondary,\n whiteSpace: 'nowrap'\n }\n}));\n\nexport const ChipSection = (props) => {\n // ################### Props ###################\n const {\n filterChips = [],\n viewChips = [],\n additionalFilterChips = [],\n hideKpiSection = false,\n kpiValues = [],\n maxKPIsDisplayed = 4,\n handleDelete\n } = props;\n\n // ################### Custom hooks ###################\n const classes = useStyles();\n\n // ################### Refs ###################\n const chipRefs = useRef([]);\n const chipSectionContainerRef = useRef(null);\n const viewChipsContainerRef = useRef(null);\n const filterChipsContainerRef = useRef(null);\n const additionalFilterChipsContainerRef = useRef(null);\n const kpiContainerRef = useRef(null);\n\n // ################### States ###################\n const [selectedFilterChip, setSelectedFilterChip] = useState(null);\n\n // ################### Helper Function ###################\n const abbrNum = (number, decPlaces) => {\n if (typeof number === 'string' && !isNaN(Number(number))) {\n number = Number(number);\n } else if (typeof number !== 'number') {\n throw new Error(\n 'The input must be a number or a string that can be converted to a number.'\n );\n }\n\n if (typeof decPlaces !== 'number') {\n return null;\n }\n\n decPlaces = Math.pow(10, decPlaces);\n let abbrev = ['k', 'm', 'b', 't'];\n\n for (let i = abbrev.length - 1; i >= 0; i--) {\n let size = Math.pow(10, (i + 1) * 3);\n\n if (size <= number) {\n number = Math.round((number * decPlaces) / size) / decPlaces;\n\n if (number === 1000 && i < abbrev.length - 1) {\n number = 1;\n i++;\n }\n\n number += abbrev[i];\n break;\n }\n }\n\n return number;\n };\n\n const isEmpty = (array) => Array.isArray(array) && array.length === 0;\n\n const abbreviateLabel = (label) => {\n const maxLength = 10;\n\n if (label.length > maxLength) {\n const newLabel = label.slice(0, maxLength - 3) + '...';\n return newLabel;\n } else {\n return null;\n }\n };\n\n const handleFilterChipToggle = (chip) => {\n setSelectedFilterChip(chip);\n\n if (typeof chip.onToggle === 'function') {\n chip.onToggle();\n }\n };\n\n const handleFilterChipUntoggle = () => {\n if (selectedFilterChip) {\n // if the user wants extra functionality when the filter chip is untoggled, call the function\n if (typeof selectedFilterChip.onUntoggle === 'function') {\n selectedFilterChip.onUntoggle();\n }\n\n setSelectedFilterChip(null);\n }\n };\n\n // ################### Render ###################\n return (\n <div\n ref={chipSectionContainerRef}\n className={classes.wrapper}\n style={{\n display: [\n kpiValues,\n additionalFilterChips,\n viewChips,\n filterChips\n ].every((arr) => arr.length === 0)\n ? 'none'\n : 'flex'\n }}\n >\n <div className={classes.chipHolder}>\n <div ref={viewChipsContainerRef}>\n {viewChips.map((chip, index) => (\n <Chip\n onDelete={() => handleDelete('view', index)}\n key={index}\n label={chip.label}\n className={classes.viewChip}\n icon={<StarIcon />}\n size='small'\n />\n ))}\n </div>\n\n {!isEmpty(viewChips) && !isEmpty(filterChips) && (\n <Divider orientation='vertical' flexItem />\n )}\n\n {!isEmpty(filterChips) && (\n <DynamicContainerWithMenu\n className={classes.chipHolder}\n ref={filterChipsContainerRef}\n >\n {selectedFilterChip && (\n <Chip\n onDelete={handleFilterChipUntoggle}\n label={selectedFilterChip.label}\n className={classes.viewChip}\n size='small'\n />\n )}\n {filterChips.map((chip, index) => {\n if (selectedFilterChip && chip.id === selectedFilterChip.id) {\n return null;\n }\n return (\n <Tooltip title={chip.label}>\n <Chip\n key={index}\n label={\n <div\n style={{\n display: 'flex',\n flexWrap: 'noWrap'\n }}\n >\n <Typography\n noWrap={true}\n className={chip.value ? classes.filterChipLabel : ''}\n >\n {chip.label}\n </Typography>\n <Typography\n noWrap={true}\n className={classes.filterChipValue}\n >\n {chip.value}\n </Typography>\n </div>\n }\n className={classes.filterChip}\n size='small'\n onClick={() => handleFilterChipToggle(chip)}\n ref={(el) => (chipRefs.current[index] = el)}\n />\n </Tooltip>\n );\n })}\n </DynamicContainerWithMenu>\n )}\n\n {!isEmpty(additionalFilterChips) && !isEmpty(filterChips) && (\n <Divider orientation='vertical' flexItem />\n )}\n\n <div\n ref={additionalFilterChipsContainerRef}\n style={{ display: 'flex' }}\n >\n {additionalFilterChips.map((chip, index) => (\n <Chip\n variant='outlined'\n onDelete={() => handleDelete('additionalFilter', index)}\n key={index}\n label={chip.label}\n className={classes.additionalFilterChip}\n size='small'\n />\n ))}\n </div>\n </div>\n\n {!hideKpiSection && (\n <div className={classes.KPI} ref={kpiContainerRef}>\n {kpiValues.slice(0, 4).map((kpi, index) => (\n <>\n <div className={classes.kpiItem} id={index}>\n <span className={classes.kpiLabel}>\n {(abbreviateLabel(kpi.label) && (\n <Tooltip title={kpi.label} arrow>\n <Typography noWrap={true}>\n <span>{kpi.label}:</span>\n </Typography>\n </Tooltip>\n )) || <>{kpi.label}</>}\n </span>\n <span className={classes.kpiValue}>\n <Tooltip title={kpi.value} arrow>\n <span>{abbrNum(kpi.value, 1)}</span>\n </Tooltip>\n </span>\n </div>\n {index !== maxKPIsDisplayed - 1 && (\n <Divider orientation='vertical' flexItem />\n )}\n </>\n ))}\n </div>\n )}\n </div>\n );\n};\n\nChipSection.propTypes = {\n /**\n * An array of filter chips.\n */\n filterChips: PropTypes.arrayOf(\n PropTypes.shape({\n label: PropTypes.string.isRequired,\n value: PropTypes.string.isRequired\n })\n ),\n /**\n * An array of view chips.\n */\n viewChips: PropTypes.arrayOf(\n PropTypes.shape({\n label: PropTypes.string.isRequired\n })\n ),\n /**\n * An array of additional filter chips.\n */\n additionalFilterChips: PropTypes.arrayOf(\n PropTypes.shape({\n label: PropTypes.string.isRequired\n })\n ),\n /**\n * Indicates whether to hide the KPI section.\n */\n hideKpiSection: PropTypes.bool,\n /**\n * An array of KPI values.\n */\n kpiValues: PropTypes.arrayOf(\n PropTypes.shape({\n label: PropTypes.string.isRequired,\n value: PropTypes.oneOfType([PropTypes.string, PropTypes.number])\n .isRequired\n })\n ),\n /**\n * The maximum number of KPIs to display.\n */\n maxKPIsDisplayed: PropTypes.number,\n /**\n * A function to handle chip deletion.\n */\n handleDelete: PropTypes.func,\n /**\n * The index of the selected filter chip.\n */\n selectedFilterChipsIndex: PropTypes.number,\n /**\n * A function to set the selected filter chip index.\n */\n setSelectedFilterChipsIndex: PropTypes.func\n};\n","import React from 'react';\nimport { IconButton, Tooltip, makeStyles } from '@material-ui/core';\nimport { FluentIcon } from '../../../utilities/iconLibrary/FluentIcon';\n\nconst useStyles = makeStyles(() => ({\n // Enables pointer events on disabled elements\n root: {\n '&.Mui-disabled': {\n pointerEvents: 'auto'\n }\n }\n}));\n\n// IconButtonWithTooltip allows you to set a tooltip on a disabled IconButton without ruining ButtonGroup layout\nexport const IconButtonWithTooltip = ({\n icon,\n title,\n disabled,\n onClick,\n className,\n fluentIconClassName,\n id,\n udprecordid,\n ...other\n}) => {\n const adjustedButtonProps = {\n disabled: disabled,\n component: disabled ? 'div' : undefined,\n onClick: disabled ? undefined : onClick\n };\n\n const classes = useStyles();\n\n return (\n <Tooltip title={title}>\n <IconButton\n id={id}\n udprecordid={udprecordid}\n className={`${className} ${classes.root}`}\n {...other}\n {...adjustedButtonProps}\n >\n <FluentIcon className={fluentIconClassName} component={icon} />\n </IconButton>\n </Tooltip>\n );\n};\n","import React, { useState, useCallback, memo } from 'react';\nimport { makeStyles } from '@material-ui/core';\nimport { Skeleton } from '@material-ui/lab';\nimport { SideSheet } from '../../../surfaces/SideSheet';\nimport { FluentDialog } from '../../../feedback/FluentDialog';\nimport { IconButtonWithTooltip } from '../../../inputs/buttons/IconButtonWithToolTip';\nimport { ClickOpenEnums } from '../../../../enums/pageEnums.ts';\n\nconst useStyles = makeStyles((theme) => ({\n icon: {\n margin: theme.spacing(0.5)\n },\n iconButtonStyle: {\n width: `${theme.spacing(3)}px !important`,\n height: `${theme.spacing(3)}px !important`,\n background: '#fff',\n borderRadius: 25,\n padding: 6\n },\n circularSkeleton: {\n borderRadius: '50%'\n }\n}));\n\nconst ActionItem = memo((props) => {\n const { icon, title, onClick, disabled, businessObjectKey='' } = props;\n const classes = useStyles();\n\n return (\n <IconButtonWithTooltip\n title={title}\n className={classes.icon}\n size='small'\n onClick={onClick}\n disabled={disabled}\n icon={icon}\n fluentIconClassName={classes.iconButtonStyle}\n id={'udpRecord-ActionsRenderer-'+title}//+'-'+businessObjectKey.replace(/\\./g, '')}\n udprecordid={'udpRecord-ActionsRenderer-'+title}//+'-'+businessObjectKey.replace(/\\./g, '')}\n />\n );\n});\n\nexport const ActionsRenderer = memo((props) => {\n const { data: value, actionList, onClick } = props;\n const classes = useStyles();\n const [sheetOpen, setSheetOpen] = useState(false);\n const [sheetItem, setSheetItem] = useState(null);\n const [dialogItem, setDialogItem] = useState(null);\n const [dialogOpen, setDialogOpen] = useState(false);\n const [isLoading, setIsLoading] = useState(false);\n const [sideSheetWidth, setSideSheetWidth] = useState(600);\n const [sideSheetButtonLabel, setSideSheetButtonLabel] = useState('');\n const [sideSheetOnSubmit, setSideSheetOnSubmit] = useState(\n () => () => console.warn('onSubmit not set')\n );\n\n const openSheet = useCallback((sheetView) => {\n setSheetItem(sheetView);\n setSheetOpen(true);\n }, []);\n\n const openDialog = useCallback((dialogView) => {\n setDialogItem(dialogView);\n setDialogOpen(true);\n }, []);\n\n const closeSheet = useCallback(() => {\n setSheetOpen(false);\n }, []);\n\n const closeDialog = useCallback(() => {\n setDialogOpen(false);\n }, []);\n\n const getSheetView = (actionItem) => {\n if (actionItem.opens === ClickOpenEnums.SideSheet) {\n const valuePropName = actionItem?.view?.properties?.valuePropName;\n if (valuePropName) {\n actionItem.view.properties[valuePropName] = value;\n }\n const closeSideSheetPropName =\n actionItem?.view?.properties?.closeSideSheetPropName;\n if (closeSideSheetPropName) {\n actionItem.view.properties[closeSideSheetPropName] = closeSheet;\n }\n }\n const properties = actionItem?.view?.properties || {};\n return {\n id: actionItem.id,\n title: actionItem.title || '',\n width: actionItem?.view?.width,\n children: actionItem?.view?.component({\n ...properties,\n setSideSheetWidth,\n setSideSheetButtonLabel,\n setSideSheetOnSubmit\n })\n };\n };\n\n const getDialogView = (actionItem) => {\n if (actionItem.opens === ClickOpenEnums.Dialog) {\n const handleActionTwo = async () => {\n if (actionItem?.view?.properties?.actionTwo) {\n setIsLoading(true);\n await actionItem?.view?.properties?.actionTwo(value);\n setIsLoading(false);\n }\n closeDialog();\n };\n return {\n id: actionItem.id,\n title: actionItem?.title || '',\n closeDialog: closeDialog,\n message: actionItem?.view?.properties?.message,\n labelOne: actionItem?.view?.properties?.labelOne,\n actionTwo: handleActionTwo,\n labelTwo: actionItem?.view?.properties?.labelTwo\n };\n }\n };\n\n const displayActions = actionList.map((item, index) => {\n let onClick = () => item.onClick(value);\n let title = item.title;\n let disabled = item.disabled;\n if (item.opens === ClickOpenEnums.SideSheet) {\n const sheetView = getSheetView(item);\n onClick = () => openSheet(sheetView);\n }\n if (item.opens === ClickOpenEnums.Dialog) {\n const dialogView = getDialogView(item);\n onClick = () => openDialog(dialogView);\n }\n if (item.getTitle) {\n title = item.getTitle(value);\n }\n if (item.checkDisabled) {\n disabled = item.checkDisabled(value);\n }\n return (\n <>\n {item.loading && (\n <div style={{ display: 'inline-flex', marginRight: 10 }}>\n <Skeleton\n className={classes.circularSkeleton}\n width={24}\n height={40}\n />\n </div>\n )}\n {!item.loading && (\n <ActionItem\n key={`${item.id}-${index}`}\n title={title}\n icon={item.icon}\n onClick={onClick}\n disabled={disabled}\n businessObjectKey={value?.businessObjectKey}\n />\n )}\n </>\n );\n });\n\n /* Final Render */\n return (\n <div>\n {displayActions}\n <SideSheet\n open={sheetOpen}\n onClose={closeSheet}\n title={sheetItem?.title}\n width={sheetItem?.width || 600}\n buttonLabel={sideSheetButtonLabel}\n onSubmit={sideSheetOnSubmit}\n >\n <div>{sheetItem?.children}</div>\n </SideSheet>\n <FluentDialog\n open={dialogOpen}\n handleClose={closeDialog}\n title={dialogItem?.title}\n message={dialogItem?.message}\n actionOne={dialogItem?.closeDialog}\n labelOne={dialogItem?.labelOne}\n actionTwo={dialogItem?.actionTwo}\n labelTwo={dialogItem?.labelTwo}\n progress={dialogItem?.isLoading}\n />\n </div>\n );\n});\n\nActionItem.displayName = 'ActionItem';\nActionsRenderer.displayName = 'ActionsRenderer';\n","import React, { useState } from 'react';\nimport { makeStyles, useTheme } from '@material-ui/core/styles';\nimport PropTypes from 'prop-types';\n\nconst useStyles = makeStyles((theme) => ({\n hintContainer: {\n borderLeft: `3px solid ${theme.palette.primary.main}`\n },\n hintContent: {\n backgroundColor: '#F3F9FE',\n padding: `1rem`\n },\n hideHintButton: {\n border: 'none',\n background: 'none',\n cursor: 'pointer',\n color: '#0B79D0',\n textDecoration: 'none'\n },\n hidehelp: {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'flex-end',\n width: '100%'\n }\n}));\n\nexport const HintPanel = ({ hint, hideHintText }) => {\n const theme = useTheme();\n const classes = useStyles(theme);\n const [showHint, setShowHint] = useState(true);\n\n const handleHideHint = () => {\n setShowHint(false);\n };\n\n return (\n <div className={classes.hintContainer}>\n {showHint && (\n <div className={classes.hintContent}>\n <div>{hint}</div>\n <div className={classes.hidehelp}>\n <button className={classes.hideHintButton} onClick={handleHideHint}>\n {hideHintText}\n </button>\n </div>\n </div>\n )}\n </div>\n );\n};\n\nHintPanel.propTypes = {\n hint: PropTypes.string.isRequired, // Hint content to be displayed\n hideHintText: PropTypes.string.isRequired // Text for the hide hint button\n};\n","import {\n makeStyles,\n} from '@material-ui/core';\nimport React, {\n useCallback,\n useMemo,\n} from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { SideSheet } from '../surfaces/SideSheet';\nimport { useAgGridApi } from '../../utilities/aggrid/AgTable.tsx';\nimport { ActionsRenderer } from '../templates/ui/renderers/ActionsRenderer';\nimport {\n TableHeaderRowIcon,\n OpenInNewTabIcon\n} from '@fluentui/react-icons';\nimport Chip from '@material-ui/core/Chip';\nimport { HintPanel } from '../dataDisplay/HintPanel';\nimport PropTypes from 'prop-types';\nimport { VisibilityTypeEnums } from '../../enums/unitySystemEnums';\nimport { AmbientGridTemplate } from '../templates/AmbientGridTemplate';\n\nconst useStyles = makeStyles((theme) => ({\n publicChip: {\n backgroundColor: '#96d2ff',\n color: 'black',\n width: '60%'\n },\n privateChip: {\n backgroundColor: '#fce597',\n color: 'black',\n width: '60%'\n },\n}));\n\nconst GridViewsSideSheet = (props) => {\n const {\n onClose,\n open,\n openSaveView,\n rowData,\n setSelectedView,\n } = props;\n const classes = useStyles();\n const { t } = useTranslation();\n const { gridApi, onGridReady } = useAgGridApi();\n const gApi = gridApi;\n\n const ChipRenderer = ({ onChange, value, id }) => {\n const handleChipClick = () => {\n onChange(id);\n };\n\n return (\n <Chip\n label={\n value === VisibilityTypeEnums.Public ? t('Public') : t('Private')\n }\n onClick={handleChipClick}\n className={\n value === VisibilityTypeEnums.Public\n ? classes.publicChip\n : classes.privateChip\n }\n size='small'\n />\n );\n };\n\n const setView = useCallback(\n (value) => {\n setSelectedView(value);\n onClose();\n },\n [setSelectedView, onClose]\n );\n\n const actionList = useMemo(\n () => [\n {\n id: 1,\n title: t('Load View'),\n icon: OpenInNewTabIcon,\n onClick: setView,\n disabled: false\n },\n {\n id: 2, // Must be unique\n title: t('Workflows'),\n icon: TableHeaderRowIcon,\n // onClick: handleDelete,\n disabled: false\n }\n ],\n [setView, t]\n );\n\n const gridOptions = {\n headerHeight: 0,\n frameworkComponents: {\n actionsRenderer: ActionsRenderer,\n chipRenderer: ChipRenderer\n },\n columnDefs: [\n {\n headerName: t('Name'),\n field: 'name'\n },\n {\n field: 'visibility',\n cellRenderer: 'chipRenderer',\n cellRendererParams: (params) => ({\n onChange: (id) => {},\n value: params.data.gridViewVisibilityTypeId\n })\n },\n {\n headerName: t('Actions'),\n cellRenderer: 'actionsRenderer',\n cellRendererParams: {\n actionList\n },\n width: '100px',\n pinned: 'right',\n suppressMenu: true,\n sortable: false\n }\n ]\n };\n\n return (\n <SideSheet\n id='udpRecord-GridViewsSideSheet'\n udprecordid='udpRecord-GridViewsSideSheet'\n open={open}\n onClose={onClose}\n width={'40%'}\n title='Select a View'\n buttonLabel={'Create View'}\n onSubmit={openSaveView}\n >\n <div style={{ marginBottom: 10 }}>\n <HintPanel\n hint='Quickly access and manage your pre-configured table/grid views. These views are designed to help you focus on specific sets of data and streamline your workflow.'\n hideHintText='Hide Help'\n />\n </div>\n\n <AmbientGridTemplate\n gridOptions={gridOptions}\n title='Saved Views'\n rowData={rowData || []}\n onGridReady={onGridReady}\n suppressCellSelection={true}\n suppressRowClickSelection={true}\n sideBar={false}\n pivotMode={false}\n pivotPanelShow='never'\n animateRows={true}\n pagination={false}\n api={gApi}\n useNewHeader\n hiddenActionButtons={[\n 'saveView',\n 'views',\n 'insights',\n 'importExport',\n 'group',\n 'filter',\n 'columns',\n 'fitGrid',\n 'expandGrid',\n 'clearFilters'\n ]}\n />\n </SideSheet>\n );\n};\n\nexport default GridViewsSideSheet;\n\nGridViewsSideSheet.propTypes = {\n onClose: PropTypes.func.isRequired, // Function called when the component is closed\n open: PropTypes.bool.isRequired, // Determines whether the component is open or closed\n selectedMethod: PropTypes.string, // Currently selected method (optional)\n catalog: PropTypes.array, // Array of catalog items (optional)\n openSaveView: PropTypes.func, // Function called when the \"Save View\" button is clicked (optional)\n setViewChips: PropTypes.func, // Function to set view chips (optional)\n setFilter: PropTypes.func, // Function to set filter (optional)\n rowData: PropTypes.array, // Array of row data (optional)\n setSelectedView: PropTypes.func, // Function to set selected view (optional)\n frameworkComponents: PropTypes.object, // Object containing framework components (optional)\n scrollToTopOnStateChange: PropTypes.bool, // Determines whether to scroll to the top on state change (optional)\n};\n","import React, { useState } from 'react';\nimport {\n Badge,\n Popover,\n MenuItem,\n Typography,\n Tooltip\n} from '@material-ui/core';\nimport { FluentButton } from '../inputs/buttons/FluentButton';\nimport { ChevronDownIcon } from '@fluentui/react-icons';\nimport { FluentIcon } from '../../utilities/iconLibrary/FluentIcon';\nimport { AppIconDefaultIcon, ErrorIcon } from '@fluentui/react-icons';\n\nexport const BulkActionsGridButton = (props) => {\n const { numSelectedRows, bulkActions, triggerAction, domain } = props;\n\n const [actionsAnchorEl, setActionsAnchorEl] = useState(null);\n\n const handleBulkActionsClick = (event) => {\n setActionsAnchorEl(event.currentTarget);\n };\n\n const triggerBulkAction = (actionId) => {\n triggerAction(actionId);\n };\n\n const filterAction = (action) => {\n return !!domain\n ? JSON.parse(action?.parameters)?.entityName === domain\n : true;\n };\n\n return (\n <div style={{ marginTop: 5, marginLeft: 20 }}>\n <Badge badgeContent={numSelectedRows} color='secondary'>\n <FluentButton\n type='button'\n onClick={handleBulkActionsClick}\n variant='outlined'\n color='primary'\n endIcon={<FluentIcon component={ChevronDownIcon} size='small' />}\n >\n With Selected\n </FluentButton>\n </Badge>\n <Popover\n id={'actions'}\n open={Boolean(actionsAnchorEl)}\n anchorEl={actionsAnchorEl}\n onClose={() => setActionsAnchorEl(null)}\n anchorOrigin={{\n vertical: 'bottom',\n horizontal: 'right'\n }}\n transformOrigin={{\n vertical: 'top',\n horizontal: 'right'\n }}\n >\n {bulkActions &&\n bulkActions.map((action) => {\n const valid = filterAction(action);\n return (\n <Tooltip\n placement='right'\n title={\n !valid ? 'Action entity does not match data grid entity' : ''\n }\n >\n <span>\n <MenuItem\n onClick={() => triggerBulkAction(action.actionId)}\n style={{\n display: 'flex',\n justifyContent: 'space-between'\n }}\n disabled={!valid}\n >\n <Typography>{action.name}</Typography>\n <FluentIcon\n component={\n valid ? action.icon ?? AppIconDefaultIcon : ErrorIcon\n }\n style={{ marginLeft: 7 }}\n color={!valid && 'red'}\n />\n </MenuItem>\n </span>\n </Tooltip>\n );\n })}\n </Popover>\n </div>\n );\n};\n","export interface SearchOperator {\n value: string;\n label: string;\n}\n\nexport const SearchOperators: Array<SearchOperator> = [\n {\n value: '=',\n label: 'Equals'\n },\n {\n value: 'IN',\n label: 'Contains'\n },\n {\n value: '<>',\n label: 'Does not Equal'\n },\n {\n value: '>',\n label: 'Greater Than'\n },\n {\n value: '<',\n label: 'Less Than'\n },\n {\n value: '>=',\n label: 'Greater Than or Equal To'\n },\n {\n value: '<=',\n label: 'Less Than or Equal To'\n },\n {\n value: 'LIKE',\n label: 'Like'\n },\n {\n value: 'STARTSWITH',\n label: 'Starts With'\n },\n {\n value: 'BETWEEN',\n label: 'Between'\n }\n];\n\nexport const FilterOperators = {\n equals: '=',\n contains: 'LIKE',\n notEqual: '<>',\n greaterThan: '>',\n lessThan: '<',\n greaterThanOrEqual: '>=',\n lessThanOrEqual: '<=',\n between: 'BETWEEN',\n In: \"IN\",\n startsWith: \"STARTSWITH\"\n\n};\n","import React, { useCallback, useEffect, useState } from 'react';\nimport { makeStyles, LinearProgress, Grow } from '@material-ui/core';\nimport '../../style.css';\nimport { GridGroupingSidebar } from './ui/GridGroupingSidebar';\nimport { ServerSideRowModelModule } from '@ag-grid-enterprise/server-side-row-model';\nimport invariant from 'invariant';\nimport PropTypes from 'prop-types';\nimport { AgTable, useAgGridApi } from '../../utilities/aggrid/AgTable.tsx';\nimport { GridActionBar } from '../utilityDisplay/GridActionBar';\nimport { GridPrimaryBar } from '../utilityDisplay/GridPrimaryBar.jsx';\nimport { SaveViewFormDialog } from '../utilityDisplay/SaveViewFormDialog.jsx';\nimport { ChipSection } from '../utilityDisplay/ChipSection.jsx';\nimport GridViewsSideSheet from '../utilityDisplay/GridViewsSideSheet.jsx';\nimport { useAxiosGet } from '../../utilities/useAxiosGet';\nimport { apiMutate } from '../../utilities/useAxiosMutate';\nimport { onFirstDataRendered } from '../../utilities/aggrid/GridFunctions';\nimport { BulkActionsGridButton } from '../utilityDisplay/BulkActionsGridButton';\nimport { useActions } from '../../hooks/useActions';\nimport { FilterOperators } from '../../models/SearchOperator';\nimport { ConfigService } from 'udp-react-stencil-component-library';\n\nconst useStyles = makeStyles((theme) => ({\n root: {},\n pab: {\n display: 'flex',\n [theme.breakpoints.between('xs', 'sm')]: {\n position: 'fixed',\n bottom: theme.spacing(2),\n right: theme.spacing(2),\n zIndex: theme.zIndex.appBar\n }\n },\n groupSideBar: {\n width: 225\n },\n gridApi: {\n display: 'flex'\n }\n}));\nexport const AmbientGridTemplate = (props) => {\n const {\n additionalFilters,\n api,\n apiMethod,\n applicationName,\n bulkActionFunctions,\n clearGridConfig,\n columnApi,\n columnDefs,\n data,\n defaultAutoSize,\n deleteGridConfig,\n disablePagination,\n disableDynamicSizing,\n disableRowSelection,\n entityName,\n filterChips = [],\n filters,\n frameworkComponents,\n gridReady,\n gridId,\n groupingData,\n height,\n hideFitGrid,\n hideExpandGrid,\n hideExportGrid,\n hideRemoveFilters,\n hideFilterTab,\n hideGroupTab,\n hideColumnTab,\n hideSearchBar,\n hiddenLabels,\n hiddenActionButtons = [],\n kpiValues = [],\n loading = false,\n onRowSelected,\n onSearch,\n onPrimaryActionClick,\n paginationPageSize = 20,\n primaryActionButton,\n primaryActionDisabled,\n primaryActionLabel,\n primaryActionIcon,\n rowModelType = 'clientSide',\n rowNodeIdName,\n saveGridConfig,\n scrollToTopOnStateChange,\n secondaryActionButtons,\n title,\n tenantName,\n hideHeader,\n useNewHeader,\n insightsClick,\n user,\n id,\n udprecordid,\n additionalGridOptions = {},\n headerBackgroundColor,\n onSearchKeyDown,\n ...otherGridProps\n } = props;\n\n const classes = useStyles();\n const { gridApi, gridColumnApi, onGridReady } = useAgGridApi();\n const [isVisible, setIsVisible] = useState();\n const [sidebarIsVisible, setSidebarIsVisible] = useState(false);\n const [showGroupOptions, setShowGroupOptions] = useState(false);\n const [selectedRow, setSelectedRow] = useState(null);\n const [value, setValue] = useState(0);\n const [saveViewOpen, setSaveViewOpen] = useState(false);\n const [defaultViews, setDefaultViews] = useState([]);\n const [viewsOpen, setViewsOpen] = useState(false);\n const [agGridOptions, setAgGridOptions] = useState({\n frameworkComponents: frameworkComponents,\n suppressScrollOnNewData: !scrollToTopOnStateChange,\n ...additionalGridOptions\n });\n const gApi = api || gridApi;\n const gcApi = columnApi || gridColumnApi;\n\n const [viewChips, setViewChips] = useState([]);\n const [additionalFilterChips, setAdditionalFilterChips] =\n useState(additionalFilters);\n const [columnDefsValues, setColumnDefsValues] = useState(null);\n const [selectedView, setSelectedView] = useState(null);\n const [viewsRowData, setViewsRowData] = useState(null);\n const [nonDefaultViewsRowData, setNonDefaultViewsRowData] = useState();\n const [numSelectedRows, setNumSelectedRows] = useState(0);\n const [domain, setDomain] = useState(null);\n const [apiCatalogId, setApiCatalogId] = useState(null);\n\n const { triggerAction } = useActions();\n\n useEffect(() => {\n if (apiMethod) {\n setDomain(apiMethod.entityName);\n setApiCatalogId(apiMethod.apiCatalogId);\n }\n }, [apiMethod, setDomain, setApiCatalogId]);\n\n const defaultColActionsDef = {\n resizable: true,\n editable: false,\n sortable: true,\n filter: true,\n floatingFilter: false,\n enableRowGroup: true,\n filterParams: {\n filterOptions: rowModelType === 'serverSide' ? Object.keys(FilterOperators) : undefined\n }\n };\n\n const handleChange = (event, newValue) => {\n event.preventDefault();\n setValue((preValue) => {\n if (newValue === preValue && newValue !== 1) {\n gApi.setSideBarVisible(!gApi.isSideBarVisible());\n } else if (newValue === 0) {\n gApi.setSideBarVisible(true);\n gApi.openToolPanel('filters');\n setShowGroupOptions(false);\n } else if (newValue === 1) {\n showGrouping();\n gApi.setSideBarVisible(false);\n } else {\n gApi.setSideBarVisible(true);\n gApi.openToolPanel('columns');\n setShowGroupOptions(false);\n }\n\n return newValue;\n });\n };\n\n const onFilterClick = (event) => {\n event.preventDefault();\n gApi.setSideBarVisible(!gApi.isSideBarVisible());\n gApi.openToolPanel('filters');\n setShowGroupOptions(false);\n setValue(0);\n setSidebarIsVisible(!sidebarIsVisible);\n };\n\n const onGroupClick = (event) => {\n // event.preventDefault();\n // // gApi.setSideBarVisible(!gApi.isSideBarVisible());\n // showGrouping();\n // setValue(1);\n alert('Group button clicked');\n };\n\n const onColumnsClick = (event) => {\n event.preventDefault();\n gApi.setSideBarVisible(!gApi.isSideBarVisible());\n gApi.openToolPanel('columns');\n setShowGroupOptions(false);\n setValue(2);\n setSidebarIsVisible(!sidebarIsVisible);\n };\n\n const emptyArr = [];\n\n const handleRowSelected = useCallback(\n (event) => {\n if (!gApi) return;\n const selectedRows = gApi.getSelectedRows();\n setNumSelectedRows(selectedRows.length); //for bulk actions ui\n const row = selectedRows.length && selectedRows[0];\n setSelectedRow(row);\n if (onRowSelected) {\n onRowSelected(event, row);\n }\n },\n [gApi, onRowSelected]\n );\n\n const setSideBarInvisible = () => {\n if (gApi.isSideBarVisible()) {\n gApi.setSideBarVisible(false);\n setIsVisible(false);\n } else {\n gApi.setSideBarVisible(true);\n gApi.openToolPanel('filters');\n setShowGroupOptions(false);\n setIsVisible(true);\n }\n };\n\n const handleFilterChange = (event) => {\n gApi.setQuickFilter(event.target.value);\n };\n\n // Sets Grouping on grid based on passed filter string\n const groupGridItems = (groupItem) => {\n gcApi.setRowGroupColumns([groupItem]);\n gApi.expandAll();\n // setToggleFlag(groupItem)\n };\n\n const restoreGridDefault = () => {\n gApi.setQuickFilter('');\n gcApi.setRowGroupColumns([]);\n gApi.setFilterModel(null);\n gApi.setQuickFilter('');\n gcApi.resetColumnState();\n };\n\n const showGrouping = () => {\n setShowGroupOptions(!showGroupOptions);\n gApi.setSideBarVisible(false);\n };\n\n const expandGroupedGrid = () => {\n gApi.expandAll();\n };\n\n const collapseGroupedGrid = () => {\n gApi.collapseAll();\n };\n\n const fitToSpace = () => {\n gApi.sizeColumnsToFit();\n };\n\n const exportGrid = () => {\n gApi.exportDataAsCsv({\n allColumns: true,\n fileName: 'export'\n });\n };\n\n const openSaveView = () => {\n setColumnDefsValues(JSON.stringify(gcApi.getColumnState()));\n setSaveViewOpen(true);\n };\n\n const closeSaveView = () => {\n setSaveViewOpen(false);\n };\n\n const openViews = useCallback(() => {\n setViewsOpen(true);\n },[]);\n\n const closeViews = () => {\n setViewsOpen(false);\n };\n\n const handleTriggerAction = useCallback(\n (actionId) => {\n if (triggerAction && gApi) {\n triggerAction(actionId, gApi.getSelectedRows());\n }\n },\n [triggerAction, gApi]\n );\n\n const autoSizeAll = useCallback(\n (skipHeader) => {\n invariant(gcApi, `gridColumnApi not ready`);\n const allColumnIds = [];\n gcApi.getAllColumns().forEach((column) => {\n allColumnIds.push(column.getColId());\n });\n gcApi.autoSizeColumns(allColumnIds, skipHeader);\n },\n [gcApi]\n );\n\n const autoSizeAllWithoutHeader = useCallback(\n () => autoSizeAll(false),\n [autoSizeAll]\n );\n\n const firstDataRendered = useCallback(\n (params) => {\n // Size columns to fit after the first data render\n !defaultAutoSize && params?.api.sizeColumnsToFit();\n\n defaultAutoSize && autoSizeAllWithoutHeader();\n },\n [defaultAutoSize, autoSizeAllWithoutHeader]\n );\n\n useEffect(() => {\n if (!gApi) return;\n\n setSelectedRow(gApi.getSelectedRows()?.length && gApi.getSelectedRows()[0]);\n selectedRow && gApi.ensureNodeVisible(selectedRow);\n }, [gApi, selectedRow]);\n\n const handleChipDelete = (chipType, chipIndex) => {\n switch (chipType) {\n case 'view':\n setViewChips((prevChips) =>\n prevChips.filter((_, index) => index !== chipIndex)\n );\n setSelectedView(null);\n gcApi.resetColumnState();\n gApi.sizeColumnsToFit();\n break;\n case 'additionalFilter':\n setAdditionalFilterChips((prevChips) => {\n if (prevChips[chipIndex]?.onUntoggle) {\n prevChips[chipIndex]?.onUntoggle();\n }\n return prevChips.filter((_, index) => index !== chipIndex);\n });\n break;\n default:\n break;\n }\n };\n\n useEffect(() => {\n if (viewsRowData?.length > 0) {\n const DefaultViews = viewsRowData.reduce((acc, row) => {\n if (row.isDefault) {\n return [...acc, row];\n }\n return acc;\n }, []);\n\n const nonDefaultViews = viewsRowData.reduce((acc, row) => {\n if (!row.isDefault) {\n return [...acc, row];\n }\n return acc;\n }, []);\n setDefaultViews(DefaultViews);\n setNonDefaultViewsRowData(nonDefaultViews);\n }\n }, [viewsRowData]);\n\n // Function to handle closing the side sheet\n // const handleSideSheetClose = () => {\n // setIsSideSheetOpen(false);\n // };\n\n const setView = useCallback(\n (value) => {\n const columnState = value?.gridViewGridViewGridConfiguration.map(\n (ele) => ele.gridViewGridConfigurationGridConfiguration\n );\n setViewChips((prevChips) => [{ label: value?.name }]);\n onFirstDataRendered(gApi, gcApi, columnState);\n },\n [setViewChips, gApi, gcApi]\n );\n\n const setFilter = (value) => {\n // todo: filter will come from the ApiMethodInstance endpoint\n };\n\n const [{ data: views }, refetch] = useAxiosGet(\n ConfigService.tenantV2ApiUrl,\n `GridView/getFromUser/${user?.id}/${gridId}`,\n {\n params: {\n domainName: domain,\n apiCatalogId: apiCatalogId\n }\n },\n !!!ConfigService.tenantV2ApiUrl || !!!gridId || !!!user\n );\n\n const [{ data: bulkActions }] = useAxiosGet(\n ConfigService.integrationV2ApiUrl,\n `action/grid/${gridId}`,\n {},\n !!!ConfigService.integrationV2ApiUrl || !!!gridId\n );\n\n useEffect(() => {\n setViewsRowData(views);\n }, [openViews, views]);\n\n const getView = useCallback(async () => {\n await apiMutate(\n ConfigService.tenantV2ApiUrl,\n `GridView/${selectedView.gridViewId}/PartiallyFull`,\n {\n method: 'get'\n }\n )\n .then((response) => {\n setView(response.data);\n })\n .catch((error) => {\n console.log(error);\n });\n }, [selectedView, setView]);\n\n useEffect(() => {\n if (!selectedView?.gridViewId) {\n gcApi?.resetColumnState();\n gApi?.sizeColumnsToFit();\n return undefined;\n }\n getView();\n\n // No cleanup function needed, so return undefined\n return undefined;\n }, [setSelectedView, selectedView, gcApi, gApi, getView]);\n\n useEffect(() => {\n if (additionalFilters) {\n setAdditionalFilterChips(additionalFilters);\n }\n }, [additionalFilters]);\n\n return (\n <>\n {/* Must wait for gApi to be instantiated before rendering primary bar */}\n {!hideHeader && useNewHeader && gApi && (\n <GridPrimaryBar\n title={title}\n showFilter={setSideBarInvisible}\n selected={isVisible}\n onChange={onSearch || handleFilterChange}\n showGroup={showGrouping}\n value={value}\n saveViewClick={openSaveView}\n viewsClick={openViews}\n handleChange={handleChange}\n fitClick={fitToSpace}\n expandClick={autoSizeAllWithoutHeader}\n exportClick={exportGrid}\n insightsClick={insightsClick}\n clearClick={restoreGridDefault}\n filterClick={onFilterClick}\n columnsClick={onColumnsClick}\n // groupClick={onGroupClick}\n hideSearchBar={hideSearchBar}\n secondaryActionButtons={secondaryActionButtons || []}\n onPrimaryActionClick={onPrimaryActionClick}\n primaryActionDisabled={primaryActionDisabled}\n primaryActionLabel={primaryActionLabel}\n primaryActionIcon={primaryActionIcon}\n hiddenActionButtons={hiddenActionButtons || []}\n hiddenLabels={hiddenLabels || []}\n background={headerBackgroundColor}\n onSearchKeyDown={onSearchKeyDown}\n />\n )}\n {useNewHeader &&\n (kpiValues?.length > 0 ||\n filterChips?.length > 0 ||\n filters?.length > 0 ||\n viewChips?.length > 0 ||\n additionalFilterChips?.length > 0) && (\n <div style={{ display: 'flex', flexDirection: 'row', height: 40 }}>\n <Grow in={bulkActions && numSelectedRows > 0} unmountOnExit>\n <BulkActionsGridButton\n bulkActions={bulkActions}\n numSelectedRows={numSelectedRows}\n triggerAction={handleTriggerAction}\n domain={domain}\n />\n </Grow>\n\n <ChipSection\n filterChips={filterChips}\n viewChips={viewChips}\n additionalFilterChips={additionalFilterChips}\n kpiValues={kpiValues}\n handleDelete={handleChipDelete}\n setAdditionalFilterChips={setAdditionalFilterChips}\n setViewChips={setViewChips}\n setFilter={setFilter}\n />\n </div>\n )}\n\n {useNewHeader && gApi && gcApi && (\n <GridViewsSideSheet\n open={viewsOpen}\n onClose={closeViews}\n openSaveView={openSaveView}\n setViewChips={setViewChips}\n setFilter={setView}\n rowData={views}\n setSelectedView={setSelectedView}\n />\n )}\n\n {!hideHeader && !useNewHeader && (\n <GridActionBar\n title={title}\n showFilter={setSideBarInvisible}\n selected={isVisible}\n onChange={onSearch || handleFilterChange}\n showGroup={showGrouping}\n value={value}\n handleChange={handleChange}\n fitClick={fitToSpace}\n expandClick={autoSizeAllWithoutHeader}\n exportClick={exportGrid}\n clearClick={restoreGridDefault}\n saveGridConfig={saveGridConfig}\n deleteGridConfig={deleteGridConfig}\n clearGridConfig={clearGridConfig}\n hideFitGrid={hideFitGrid}\n hideExpandGrid={hideExpandGrid}\n hideExportGrid={hideExportGrid}\n hideRemoveFilters={hideRemoveFilters}\n hideFilterTab={hideFilterTab}\n hideGroupTab={hideGroupTab}\n hideColumnTab={hideColumnTab}\n hideSearchBar={hideSearchBar}\n >\n {primaryActionButton && (\n <div className={classes.pab}>{primaryActionButton}</div>\n )}\n </GridActionBar>\n )}\n\n {loading && <LinearProgress />}\n <div style={{ display: 'flex' }}>\n <div style={{ width: '100%' }}>\n <AgTable\n {...agGridOptions}\n columnDefs={columnDefs}\n dynamicSizing={!disableDynamicSizing}\n rowData={data || emptyArr}\n onGridReady={gridReady || onGridReady}\n onRowSelected={handleRowSelected}\n suppressCellSelection={true}\n suppressRowClickSelection={false}\n defaultColDef={defaultColActionsDef}\n enableRangeSelection={true}\n enableColResize\n sideBar={sidebarIsVisible}\n pivotMode={false}\n pivotPanelShow='never'\n groupSelectsChildren={true}\n animateRows={false}\n pagination={!disablePagination}\n showOpenedGroup={true}\n paginateChildRows={true}\n paginationPageSize={paginationPageSize}\n modules={\n rowModelType === 'serverSide' ? [ServerSideRowModelModule] : []\n }\n onFirstDataRendered={firstDataRendered}\n rowModelType={rowModelType}\n rowClassRules={{\n 'first-row-in-group': (params) =>\n params.node.rowIndex !== 0 && params.node.firstChild\n }}\n height={height}\n api={gApi}\n rowSelection={\n !disableRowSelection && (bulkActions ? 'multiple' : 'single')\n }\n hideHeader={hideHeader}\n {...otherGridProps}\n />\n </div>\n {showGroupOptions && (\n <div className={classes.groupSideBar}>\n <GridGroupingSidebar\n groupItem={(item) => groupGridItems(item)}\n closeClick={() => groupGridItems('')}\n expandClick={expandGroupedGrid}\n collapseClick={collapseGroupedGrid}\n groupingData={groupingData}\n height={height}\n />\n </div>\n )}\n {!hiddenActionButtons?.includes('saveView') && (\n <SaveViewFormDialog\n open={saveViewOpen}\n handleClose={closeSaveView}\n application={applicationName}\n tenant={tenantName}\n user={user}\n columnDefsValues={columnDefsValues}\n refetchViews={refetch}\n gApi={gApi}\n gcApi={gcApi}\n setSelectedView={setView}\n gridId={gridId}\n domain={domain}\n apiCatalogId={apiCatalogId}\n />\n )}\n </div>\n </>\n );\n};\n\nAmbientGridTemplate.propTypes = {\n /**\n * Column Definitions for Ag Grid\n */\n columnDefs: PropTypes.array,\n /**\n * AG Grid function for onRowSelected\n */\n handleRowSelected: PropTypes.func,\n /**\n * Data array for AG Grid\n */\n data: PropTypes.array,\n /**\n * Title of the grid\n */\n title: PropTypes.string,\n /**\n * Array of data to allow for custom grouping, example: {groupItem: 'instructors', label: 'Instructors', value: 'instructors'}\n */\n groupingData: PropTypes.array,\n /**\n * Grid Options\n */\n frameworkComponents: PropTypes.object,\n /**\n * Handle loading status with progress animation\n */\n loading: PropTypes.bool,\n /**\n * Primary Action Button Component\n */\n primaryActionButton: PropTypes.object,\n /**\n * name of the property for the id\n */\n rowNodeIdName: PropTypes.string,\n /**\n * Sets the grid default to expaned size if true. The default is 'size to fit'.\n */\n defaultAutoSize: PropTypes.bool,\n /**\n * Scrolls the grid back to the top on state change if true, otherwise maintains scroll position. The default is false.\n */\n scrollToTopOnStateChange: PropTypes.bool,\n /**\n * Disable dynamicSizing so that the grid size stays the same regardless of the window size if true. The default is false.\n */\n disableDynamicSizing: PropTypes.bool,\n /**\n * An array of filter chips.\n */\n filters: PropTypes.arrayOf(\n PropTypes.shape({\n label: PropTypes.string.isRequired,\n value: PropTypes.string.isRequired\n })\n ),\n /**\n * An array of view chips.\n */\n views: PropTypes.arrayOf(\n PropTypes.shape({\n label: PropTypes.string.isRequired\n })\n ),\n /**\n * An array of additional filter chips.\n */\n additionalFilters: PropTypes.arrayOf(\n PropTypes.shape({\n label: PropTypes.string.isRequired\n })\n ),\n /**\n * An array of KPI values.\n */\n kpis: PropTypes.arrayOf(\n PropTypes.shape({\n label: PropTypes.string.isRequired,\n value: PropTypes.oneOfType([PropTypes.string, PropTypes.number])\n .isRequired\n })\n ),\n /**\n * Enable the new header for data grids v2 if true. The default is false.\n */\n useNewHeader: PropTypes.bool,\n /**\n * Passes function that executes on the insights button click\n */\n insightsClick: PropTypes.func,\n /*\n * Specifies which action buttons to hide\n */\n hiddenActionButtons: PropTypes.arrayOf(\n PropTypes.oneOf([\n 'saveView',\n 'views',\n 'insights',\n 'importExport',\n 'group',\n 'filter',\n 'columns',\n 'fitGrid',\n 'expandGrid',\n 'clearFilters'\n ])\n ),\n /*\n * Specifies which action button labels to hide\n */\n hiddenLabels: PropTypes.arrayOf(\n PropTypes.oneOf([\n 'saveView',\n 'views',\n 'insights',\n 'importExport',\n 'group',\n 'filter',\n 'columns',\n 'fitGrid',\n 'expandGrid',\n 'clearFilters'\n ])\n ),\n /**\n * Passes function that executes on the primary action button click\n */\n onPrimaryActionClick: PropTypes.func,\n /**\n * Specifies the label for the primary action button\n */\n primaryActionLabel: PropTypes.string,\n /**\n * Specifies the icon for the primary action button\n */\n primaryActionIcon: PropTypes.elementType,\n /**\n * An array of objects that will be used to create the secondary action buttons. The default is an empty array.\n */\n secondaryActionButtons: PropTypes.array,\n /**\n * The name of the application that the grid is being used in\n */\n applicationName: PropTypes.string,\n /**\n * The name of the entity that the data in the grid is associated with\n */\n entityName: PropTypes.string,\n /**\n * The name of the tenant that is currently logged in\n */\n tenantName: PropTypes.string,\n /**\n * User object (optional)\n */\n user: PropTypes.object,\n /**\n * Array of KPI values (optional)\n */\n kpiValues: PropTypes.array\n};\n"],"mappings":"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,CACN,CACC;GAEZ,CACI,CACN;;;;;ACvFV,MAAaC,kBAAyC;CACpD;EACE,OAAO;EACP,OAAO;EACR;CACD;EACE,OAAO;EACP,OAAO;EACR;CACD;EACE,OAAO;EACP,OAAO;EACR;CACD;EACE,OAAO;EACP,OAAO;EACR;CACD;EACE,OAAO;EACP,OAAO;EACR;CACD;EACE,OAAO;EACP,OAAO;EACR;CACD;EACE,OAAO;EACP,OAAO;EACR;CACD;EACE,OAAO;EACP,OAAO;EACR;CACD;EACE,OAAO;EACP,OAAO;EACR;CACD;EACE,OAAO;EACP,OAAO;EACR;CACF;AAED,MAAa,kBAAkB;CAC7B,QAAQ;CACR,UAAU;CACV,UAAU;CACV,aAAa;CACb,UAAU;CACV,oBAAoB;CACpB,iBAAiB;CACjB,SAAS;CACT,IAAI;CACJ,YAAY;CAEb;;;;ACvCD,MAAM,YAAY,YAAY,WAAW;CACvC,MAAM,EAAE;CACR,KAAK;EACH,SAAS;GACR,MAAM,YAAY,QAAQ,MAAM,KAAK,GAAG;GACvC,UAAU;GACV,QAAQ,MAAM,QAAQ,EAAE;GACxB,OAAO,MAAM,QAAQ,EAAE;GACvB,QAAQ,MAAM,OAAO;GACtB;EACF;CACD,cAAc,EACZ,OAAO,KACR;CACD,SAAS,EACP,SAAS,QACV;CACF,EAAE;AACH,MAAa,uBAAuB,UAAU;CAC5C,MAAM,EACJ,mBACA,KACA,WACA,iBACA,qBACA,iBACA,WACA,YACA,MACA,iBACA,kBACA,mBACA,sBACA,qBACA,YACA,cAAc,EAAE,EAChB,SACA,qBACA,WACA,QACA,cACA,QACA,aACA,gBACA,gBACA,mBACA,eACA,cACA,eACA,eACA,cACA,sBAAsB,EAAE,EACxB,YAAY,EAAE,EACd,UAAU,OACV,eACA,UACA,sBACA,qBAAqB,IACrB,qBACA,uBACA,oBACA,mBACA,eAAe,cACf,eACA,gBACA,0BACA,wBACA,OACA,YACA,YACA,cACA,eACA,MACA,IACA,aACA,wBAAwB,EAAE,EAC1B,uBACA,gBACA,GAAG,mBACD;CAEJ,MAAM,UAAU,WAAW;CAC3B,MAAM,EAAE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"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { FluentIcon } from "./methodUtils-
|
|
1
|
+
import { FluentIcon } from "./methodUtils-BfxeB9Rg.js";
|
|
2
2
|
import { useUser } from "./useAxiosGet-nRj6TU4p.js";
|
|
3
3
|
import React, { createContext, useContext, useMemo } from "react";
|
|
4
4
|
import { Typography, makeStyles } from "@material-ui/core";
|
|
5
5
|
import { ConfigService } from "udp-react-stencil-component-library";
|
|
6
6
|
import clsx from "clsx";
|
|
7
7
|
|
|
8
|
-
//#region src/utilities/UnityIcon.jsx
|
|
8
|
+
//#region src/utilities/iconLibrary/UnityIcon.jsx
|
|
9
9
|
const useStyles$2 = makeStyles((theme) => ({
|
|
10
10
|
root: {
|
|
11
11
|
display: "flex",
|
|
@@ -52,7 +52,7 @@ const UnityIcon = (props) => {
|
|
|
52
52
|
};
|
|
53
53
|
|
|
54
54
|
//#endregion
|
|
55
|
-
//#region src/utilities/UnityFluentIcon.jsx
|
|
55
|
+
//#region src/utilities/iconLibrary/UnityFluentIcon.jsx
|
|
56
56
|
const UnityFluentIcon = (props) => {
|
|
57
57
|
const { type, icon, color,...other } = props;
|
|
58
58
|
if (!icon) return null;
|
|
@@ -283,4 +283,4 @@ const EnvironmentRibbon = () => {
|
|
|
283
283
|
|
|
284
284
|
//#endregion
|
|
285
285
|
export { APP_RIBBON_SPACE, EnvironmentRibbon, TenantContext, Typography$1 as Typography, UnityFluentIcon, UnityIcon, colors$1 as colors, getCategoryColor, getEllipseColor, useBuildEnvironment, useTenant };
|
|
286
|
-
//# sourceMappingURL=EnvironmentRibbon-
|
|
286
|
+
//# sourceMappingURL=EnvironmentRibbon-CMKhWHRx.js.map
|