udp-react-enterprise-component-library 25.16.2-beta.3 → 25.16.2-beta.5

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.
@@ -1 +1 @@
1
- {"version":3,"file":"udpPages-Bvmlnzes.js","names":["t","params","apiMutate","products","IconLibrary","apiMutate","UdpVerticalManagementSidesheet","apiMutate","grid","panel","UdpGridPanelManagementSidesheet","useStyles","useStyles","FluentTrendArrow","value","layout","FluentStatsSnippet","WidgetCard","ChartSummaryToggle","layout","useStyles","WidgetCard","FluentStatsSnippet","useStyles","FluentDisplayNumber","useStyles","FluentStatNumbers","useStyles","FluentStatNumber","useStyles","WidgetCard","FluentPrimaryStatNumber","FluentSecondaryStatNumber","WidgetCard","apiMutate","entityName","uuid","params","t","useStyles","uuid","reminders","WidgetCard","useStyles","getLocalizedDateTimeString","auditEventDetail","LinearProgress","getLocalizedDateTimeString","getLocalizedDateString","params","LinearProgress","UdpAuditEventSidesheet"],"sources":["../src/udp/pages/UdpNotesPage.jsx","../src/udp/pages/UdpVerticalManagementSidesheet.jsx","../src/udp/pages/UdpVerticalManagementPage.jsx","../src/udp/pages/UdpGridPanelManagementSidesheet.jsx","../src/udp/pages/UdpGridPanelManagementPage.jsx","../src/udp/pages/UdpInquiryMaintenanceEnginePage.jsx","../src/udp/pages/UdpReportsPage.jsx","../src/UI/widgets/FluentComponents/atoms/FluentTrendArrow.jsx","../src/UI/widgets/FluentComponents/atoms/FluentStatsSnippet.jsx","../src/UI/widgets/FluentComponents/ChartSummaryToggle.jsx","../src/UI/widgets/utils/ConvertISODate.js","../src/UI/widgets/library/DonutChartWidget.jsx","../src/UI/widgets/library/SparklineWidget.jsx","../src/UI/widgets/FluentComponents/molecules/FluentStatNumber.jsx","../src/UI/widgets/FluentComponents/molecules/FluentPrimaryStatNumber.jsx","../src/UI/widgets/FluentComponents/molecules/FluentSecondaryStatNumber.jsx","../src/UI/widgets/library/ProgressBarWidget.jsx","../src/UI/widgets/library/RecentlyLoadedNodesWidget.jsx","../src/udp/pages/ChatUDP.jsx","../src/udp/pages/UdpDataBrowserPage.jsx","../src/udp/pages/UdpRemindersPage.jsx","../src/UI/widgets/library/RemindersWidget.jsx","../src/udp/pages/UdpPrivateForm.jsx","../src/udp/pages/UdpFormsListPage.jsx","../src/udp/pages/UdpFormsBuilderPage.jsx","../src/udp/pages/UdpImportFromFileMappingPage.jsx","../src/enums/auditEventEnums.ts","../src/UI/widgets/utils/dateUtils.js","../src/udp/utilities/dateLocalizationHooks.jsx","../src/udp/pages/UdpAuditEventSidesheet.jsx","../src/udp/utilities/useDateStringColumnDef.js","../src/udp/pages/UdpAuditEventsPage.jsx","../src/udp/pages/udpPages.js"],"sourcesContent":["import React, {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState\n} from 'react';\nimport { AmbientGridTemplate } from '../../UI/templates/AmbientGridTemplate';\nimport { getSearchObject } from '../../utilities/search/SearchUtilities';\nimport { executeQueryAdHoc, getBaseMethod } from '../utilities/methodUtils';\nimport { UdpEnums } from '../../enums/unitySystemEnums';\nimport { useActionState } from '../../hooks/useActions';\nimport { useHandleAxiosSnackbar } from '../../utilities/apiHelpers';\nimport { useTranslation } from 'react-i18next';\nimport { EditIcon, ViewIcon } from '@fluentui/react-icons';\nimport { NotesScreen } from '../../notes/NotesScreen';\nimport { ActionsRenderer } from '../../UI/templates/ui/renderers/ActionsRenderer';\nimport { SideSheet } from '../../UI/surfaces/SideSheet';\nimport { useActions } from '../../hooks/useActions';\nimport { SplitScreenTypeEnums } from '../../enums/unitySystemEnums';\nimport { useUser } from '../../utilities/auth/useUser';\n\nconst UdpNotesPage = (props) => {\n const { params } = props;\n const { nodeObj, manytoManyNodeObjKey } = params;\n const [notes, setNotes] = useState([]);\n const [typeOptions, setTypeOptions] = useState([]);\n const [loading, setLoading] = useState(false);\n const [sheetOpen, setSheetOpen] = useState(false);\n const [noteId, setNoteId] = useState('');\n const { openSplitScreen } = useActions();\n const actionState = useActionState();\n const { catalogPromotedEntities } = actionState;\n const { handleErrorSnackbar } = useHandleAxiosSnackbar();\n const { t } = useTranslation();\n const formRef = useRef(null);\n const user = useUser();\n\n const noteFiledForSearchApiMethod = useMemo(() => {\n return getBaseMethod(\n UdpEnums.Udp_Note_Filed_For,\n 'unityBaseSearchMethod',\n catalogPromotedEntities\n );\n }, [catalogPromotedEntities]);\n\n const noteTypeGetAllApiMethod = useMemo(() => {\n return getBaseMethod(\n UdpEnums.Udp_Note_Type,\n 'unityBaseGetAllMethod',\n catalogPromotedEntities\n );\n }, [catalogPromotedEntities]);\n\n const getNotes = useCallback(async () => {\n if (!nodeObj) {\n return [];\n }\n let notesList = [];\n setLoading(true);\n const filterElements = [\n {\n searchField: 'entityBusinessKey',\n searchValue: manytoManyNodeObjKey\n ? nodeObj[manytoManyNodeObjKey]?.businessObjectKey\n : nodeObj?.businessObjectKey,\n searchOperator: '='\n }\n ];\n const searchObject = getSearchObject(filterElements, 1, 200, true);\n const data = { data: searchObject };\n\n if (noteFiledForSearchApiMethod) {\n const response = await executeQueryAdHoc(\n data,\n noteFiledForSearchApiMethod.apiMethodId\n );\n\n if (response?.status === 200) {\n const pageList = response.data.pageList;\n if (pageList?.length) {\n notesList = pageList.map((item) => item.note);\n }\n } else {\n handleErrorSnackbar(null, t('Could not retrieve notes'));\n }\n } else {\n handleErrorSnackbar(null, t('Search NoteFiledFor Method Not Promoted'));\n }\n setLoading(false);\n setNotes(notesList);\n }, [\n noteFiledForSearchApiMethod,\n handleErrorSnackbar,\n nodeObj,\n manytoManyNodeObjKey,\n t,\n user\n ]);\n\n const openSheet = useCallback((value) => {\n setNoteId(value?.id || '');\n setSheetOpen(true);\n }, []);\n\n const closeSheet = useCallback(() => {\n setNoteId('');\n setSheetOpen(false);\n }, []);\n\n const handleEditPage = useCallback(\n (value) => {\n openSplitScreen({\n open: true,\n action: null,\n type: SplitScreenTypeEnums.Notes,\n params: { id: value?.id || '', reloadNotes: getNotes }\n });\n },\n [openSplitScreen, getNotes]\n );\n\n const getType = useCallback(\n (params) => {\n const type = typeOptions.find((t) => t.code === params.data.typeCode);\n return type?.name || '';\n },\n [typeOptions]\n );\n\n const actionList = useMemo(\n () => [\n {\n id: 1, // Must be unique\n title: t('Note'),\n icon: ViewIcon,\n onClick: openSheet,\n disabled: false\n },\n {\n id: 2, // Must be unique\n title: t('Edit'),\n icon: EditIcon,\n onClick: handleEditPage,\n disabled: false\n }\n ],\n [t, openSheet, handleEditPage]\n );\n\n const columnDefs = [\n {\n headerName: 'Date',\n field: 'createdOn',\n resizable: true,\n sortable: true\n },\n {\n headerName: 'Subject',\n field: 'subject',\n resizable: true,\n sortable: true\n },\n {\n headerName: 'Note',\n field: 'content',\n resizable: true,\n sortable: true,\n valueGetter: (params) => params.data.content.replace(/(<([^>]+)>)/gi, '')\n },\n {\n headerName: 'Type',\n field: 'typeCode',\n resizable: true,\n sortable: true,\n valueGetter: getType\n },\n {\n headerName: 'Created By',\n field: 'userDisplayName',\n resizable: true,\n sortable: true\n },\n {\n headerName: '',\n cellRenderer: 'actionsRenderer',\n cellRendererParams: {\n actionList\n },\n pinned: 'right',\n suppressMenu: true,\n sortable: false\n }\n ];\n\n // no dependencies in the array because we only want getNotes to run once\n useEffect(() => {\n getNotes();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n const getTypeOptions = async () => {\n let options = [];\n if (noteTypeGetAllApiMethod) {\n const typesResponse = await executeQueryAdHoc(\n { data: {} },\n noteTypeGetAllApiMethod.apiMethodId\n );\n if (typesResponse?.status === 200) {\n options = typesResponse.data;\n }\n }\n setTypeOptions(options);\n };\n getTypeOptions();\n }, [noteTypeGetAllApiMethod]);\n\n return (\n <>\n <SideSheet\n open={sheetOpen}\n onClose={closeSheet}\n title={t('Note')}\n width={600}\n >\n <NotesScreen\n viewOnly={true}\n id={noteId}\n shortcutContentFinderEnabled={false}\n formRef={formRef}\n />\n </SideSheet>\n <AmbientGridTemplate\n title={'Notes'}\n data={notes}\n columnDefs={columnDefs}\n loading={loading}\n frameworkComponents={{ actionsRenderer: ActionsRenderer }}\n groupingData={[]}\n />\n </>\n );\n};\n\nexport default UdpNotesPage;\n","import React, {\n useCallback,\n useState,\n useMemo,\n useRef,\n useEffect,\n useLayoutEffect\n} from 'react';\nimport {\n TextField,\n Button,\n LinearProgress,\n IconButton\n} from '@material-ui/core';\nimport { Form } from '../../utilities/form/Form';\nimport { Field } from '../../utilities/form/Field';\nimport { SubmitButton } from '../../utilities/form/SubmitButton';\nimport { SideSheet } from '../../UI/surfaces/SideSheet';\nimport { AmbientGridTemplate } from '../../UI/templates/AmbientGridTemplate';\nimport { useActionState } from '../../hooks/useActions';\nimport { useTranslation } from 'react-i18next';\nimport { ActionsRenderer } from '../../UI/templates/ui/renderers/ActionsRenderer';\nimport { FluentCheckbox } from '../../UI/inputs/checkbox/FluentCheckbox';\nimport { UnityFluentIcon } from '../../utilities/iconLibrary/UnityFluentIcon';\nimport {\n findAllParentIds,\n getIconFromName\n} from '../../utilities/tree/TreeUtilities';\nimport { getUnityIconFromName } from '../../utilities/iconLibrary/UnityIconLibrary';\nimport IconLibrary from '../../utilities/iconLibrary/IconLibrary';\nimport { apiMutate } from '../../utilities/useAxiosMutate';\nimport { FormButtons } from '../../utilities/form';\nimport { useHandleAxiosSnackbar } from '../../utilities/apiHelpers';\nimport { ConfigService } from 'udp-react-stencil-component-library';\n\nconst UdpVerticalManagementSidesheet = (props) => {\n const {\n selectedVertical,\n environment,\n associatedProducts,\n isEdit,\n deleteVertical,\n open,\n selectedCatalog,\n closeSidesheet,\n onSubmit,\n ...sheetProps\n } = props;\n const { t } = useTranslation();\n const [loading, setLoading] = useState(false);\n const actionState = useActionState();\n const [displayedIcon, setDisplayedIcon] = useState({\n name: 'StatusCircleQuestionMarkIcon',\n color: '',\n type: ''\n });\n const [products, setProducts] = useState([]);\n const [openIconLibrary, setOpenIconLibrary] = useState(false);\n\n const [selectedProductIds, setSelectedProductIds] = useState([]);\n const [checkboxValues, setCheckboxValues] = useState([]);\n const [submitButtonDisabled, setSubmitButtonDisabled] = useState(true);\n const selectedProductIdsRef = useRef();\n selectedProductIdsRef.current = selectedProductIds;\n const displayedIconRef = useRef();\n displayedIconRef.current = displayedIcon;\n const selectedVerticalRef = useRef();\n selectedVerticalRef.current = selectedVertical;\n const formRef = useRef();\n const nameRef = useRef();\n\n const { handleErrorSnackbar, handleSuccessSnackbar } =\n useHandleAxiosSnackbar();\n\n const CheckBoxRenderer = ({ onChange, value, id, defaultChecked }) => {\n const isAssociatedToVertical = useCallback(\n (productId) => {\n if (!isEdit) return false;\n for (let product of associatedProducts) {\n if (\n product.productId === productId &&\n product.verticalId === selectedVerticalRef.current.verticalId\n ) {\n return true;\n }\n }\n // console.log(selectedVerticalRef.current.icon)\n const icon = getIconFromName(selectedVerticalRef.current.icon);\n // console.log(\"🚀 ~ file: UdpVerticalManagementSidesheet.jsx:81 ~ isAssociatedToVertical ~ icon:\", icon)\n\n return false;\n },\n [associatedProducts, selectedVerticalRef]\n );\n\n const handleCheckboxChange = (e) => {\n if (e.target.checked) {\n setSelectedProductIds((prevState) => [...prevState, id]);\n } else {\n setSelectedProductIds((prevState) =>\n prevState.filter((item) => item !== id)\n );\n }\n };\n\n return (\n <FluentCheckbox\n // checked={value}\n defaultChecked={isAssociatedToVertical(id)}\n onChange={handleCheckboxChange}\n aria='column-active'\n />\n );\n };\n\n // const actionList = useMemo(\n // () => [\n // {\n // id: 1, // Must be unique\n // title: t('Edit'),\n // icon: EditIcon,\n // onClick: handleEditPage,\n // disabled: false\n // },\n // {\n // id: 2, // Must be unique\n // title: t('Delete'),\n // icon: DeleteIcon,\n // onClick: handleDelete,\n // disabled: false\n // }\n // ],\n // [t, handleEditPage, handleDelete]\n // );\n\n const gridOptions = useMemo(\n () => ({\n frameworkComponents: {\n actionsRenderer: ActionsRenderer,\n checkboxRenderer: CheckBoxRenderer\n },\n columnDefs: [\n {\n headerName: '',\n field: 'select',\n cellRenderer: 'checkboxRenderer',\n cellRendererParams: (params) => ({\n // onChange: onChange,\n // value: checked[params.data.productId] || false,\n id: params.data.productId\n })\n },\n {\n headerName: t('Product Name'),\n field: 'name',\n minWidth: 200\n }\n ]\n }),\n [isEdit, selectedVertical, associatedProducts]\n );\n\n const executeMutation = useCallback(\n async (endpoint, method, data) =>\n apiMutate(\n ConfigService.uemV1ApiUrl,\n endpoint,\n {\n method: method || 'post'\n },\n data\n ),\n []\n );\n\n const getProducts = useCallback(\n async (data) => {\n setLoading(true);\n\n const response = await executeMutation('uem', 'post', data);\n if (response?.status === 200) {\n setProducts(response?.data);\n }\n setLoading(false);\n },\n [executeMutation, setProducts]\n );\n\n const createVertical = useCallback(\n async (data) => {\n setLoading(true);\n\n const response = await executeMutation(\n 'vertical/uemCreate',\n 'post',\n data\n );\n if (response?.status === 201) {\n closeSidesheet();\n handleSuccessSnackbar('Vertical Created Successfully');\n } else {\n handleErrorSnackbar('Something went wrong');\n }\n setLoading(false);\n },\n [executeMutation]\n );\n\n const updateVertical = useCallback(\n async (data) => {\n setLoading(true);\n\n const response = await executeMutation(\n `vertical/${selectedVertical.verticalId}/uemUpdate`,\n 'put',\n data\n );\n if (response?.status === 204) {\n closeSidesheet();\n handleSuccessSnackbar('Vertical Updated Successfully');\n } else {\n handleErrorSnackbar('Something went wrong');\n }\n setLoading(false);\n },\n [selectedVertical, executeMutation]\n );\n\n const handleSubmit = useCallback(\n (values) => {\n setLoading(true);\n const products = selectedProductIdsRef.current.map((productId) => ({\n productId\n }));\n\n !isEdit\n ? createVertical({\n data: {\n name: values.name,\n products: products,\n icon: displayedIconRef?.current.name,\n EnvironmentId: environment.environmentId,\n apiPath: 'api/v1/vertical/uemCreate'\n }\n })\n : updateVertical({\n data: {\n name: values.name,\n products: products,\n icon: displayedIconRef?.current.name,\n EnvironmentId: environment.environmentId,\n apiPath: `api/v1/vertical/${selectedVertical.verticalId}/uemUpdate`\n }\n });\n },\n [\n isEdit,\n createVertical,\n environment,\n updateVertical,\n selectedVertical,\n selectedProductIdsRef\n ]\n );\n\n useEffect(() => {\n if (environment && getProducts) {\n if (environment.environmentId) {\n const data = {\n data: {\n customerId: null,\n environmentId: environment.environmentId,\n apiPath: `tenantService/api/v2/product`\n }\n };\n getProducts(data);\n }\n }\n }, [environment, getProducts]);\n\n useEffect(() => {\n if (selectedVertical) {\n const associatedProductIds = selectedVertical.verticalProductVertical.map(\n (product) => product.productId\n );\n setSelectedProductIds((prevState) => [\n ...prevState,\n ...associatedProductIds\n ]);\n }\n }, [selectedVertical, setSelectedProductIds]);\n\n const setDisplayedIconCallback = useCallback(() => {\n setDisplayedIcon({\n name:\n isEdit && selectedVertical?.icon\n ? selectedVertical?.icon\n : 'StatusCircleQuestionMarkIcon'\n });\n }, [selectedVertical, isEdit]);\n\n useEffect(() => {\n setDisplayedIconCallback();\n }, [open]);\n\n const closeIconLibrary = () => {\n setOpenIconLibrary(false);\n };\n\n const onOpenLibrary = () => {\n setOpenIconLibrary(true);\n };\n\n const handleIconSelect = (icon) => {\n const updateddisplayedIcon = { ...props.displayedIcon };\n updateddisplayedIcon.name = icon.id;\n updateddisplayedIcon.type = icon.type || null;\n setDisplayedIcon(updateddisplayedIcon);\n closeIconLibrary();\n };\n\n const initialValues = useMemo(() => {\n return {\n name: isEdit ? selectedVertical?.name : ''\n };\n }, [associatedProducts, selectedVertical, isEdit]);\n\n return (\n <>\n <SideSheet\n open={open}\n onClose={() => closeSidesheet()}\n width={400}\n title={props.title}\n // buttonLabel={\"Create\"}\n // onSubmit={handleSubmit}\n >\n <Form\n ref={formRef}\n onSubmit={handleSubmit}\n initialValues={initialValues}\n >\n <div style={{ display: 'flex' }}>\n <Field\n ref={nameRef}\n component={TextField}\n label={t('Name')}\n id='name'\n name='name'\n variant='outlined'\n size='small'\n required={true}\n style={{ marginTop: 8 }}\n />\n\n <IconButton onClick={onOpenLibrary}>\n {displayedIcon && (\n <UnityFluentIcon\n type={displayedIcon?.type}\n icon={\n displayedIcon?.type === 'unity'\n ? getUnityIconFromName(displayedIcon?.name)\n : getIconFromName(displayedIcon?.name)\n }\n />\n )}\n </IconButton>\n </div>\n <AmbientGridTemplate\n data={products}\n title={t('Products')}\n loading={loading}\n height={'calc(100vh - 300px)'}\n hideGroupTab\n hideColumnTab\n disablePagination\n hideFitGrid\n hideExpandGrid\n hideExportGrid\n hideRemoveFilters\n hideFilterTab\n {...gridOptions}\n />\n <FormButtons>\n <SubmitButton\n variant='contained'\n color='secondary'\n marginTop={'50px'}\n disabled={false}\n disablePristine={false}\n >\n {t(isEdit ? 'Update' : 'Create')}\n </SubmitButton>\n </FormButtons>\n {loading && <LinearProgress />}\n </Form>\n </SideSheet>\n <SideSheet\n open={openIconLibrary}\n onClose={closeIconLibrary}\n title={t('Icon Library')}\n width={'100%'}\n anchor='bottom'\n >\n <IconLibrary\n addItem={handleIconSelect}\n selectedIconName={displayedIcon?.name}\n title={t('Select Icon')}\n />\n </SideSheet>\n </>\n );\n};\n\nexport default UdpVerticalManagementSidesheet;\n","import React, {\n useCallback,\n useEffect,\n useMemo,\n useState,\n useRef\n} from 'react';\nimport { AmbientGridTemplate } from '../../UI/templates/AmbientGridTemplate';\n// import { executeQueryAdHoc, getBaseMethod } from '../utilities/methodUtils';\nimport { AddIcon, DeleteIcon, EditIcon } from '@fluentui/react-icons';\nimport { Typography } from '@material-ui/core';\nimport { useTranslation } from 'react-i18next';\nimport { PrimaryActionButton } from '../../UI/inputs/buttons/PrimaryActionButton';\nimport { ActionsRenderer } from '../../UI/templates/ui/renderers/ActionsRenderer';\nimport { apiMutate } from '../../utilities/useAxiosMutate';\nimport UdpVerticalManagementSidesheet from './UdpVerticalManagementSidesheet';\nimport { FluentDialog } from '../../UI/feedback/FluentDialog';\nimport { useHandleAxiosSnackbar } from '../../utilities/apiHelpers';\nimport { ConfigService } from 'udp-react-stencil-component-library';\n\nconst UdpVerticalManagementPage = (props) => {\n const { params } = props;\n const { nodeObj: environment, inquiryNodeProperties } = params;\n const { t } = useTranslation();\n\n const [sideSheetOpen, setSideSheetOpen] = useState(false);\n const [sideSheetEdit, setSideSheetEdit] = useState(false);\n const [loading, setLoading] = useState(false);\n const [selectedVertical, setSelectedVertical] = useState(null);\n const [verticals, setVerticals] = useState([]);\n const [productVertical, setProductVertical] = useState([]);\n const [deleteDialogOpen, setDeleteDialogOpen] = useState(false);\n const selectedVerticalRef = useRef();\n selectedVerticalRef.current = selectedVertical ? selectedVertical : null;\n const { handleErrorSnackbar, handleSuccessSnackbar } =\n useHandleAxiosSnackbar();\n\n const openSheetAsEdit = useCallback((isEdit) => {\n setSideSheetOpen(true);\n setSideSheetEdit(isEdit);\n }, []);\n\n const closeDeleteDialog = useCallback(() => {\n setDeleteDialogOpen(false);\n }, [setDeleteDialogOpen]);\n\n const executeMutation = useCallback(\n async (endpoint, method, data) =>\n apiMutate(\n ConfigService.uemV1ApiUrl,\n endpoint,\n {\n method: method || 'post'\n },\n data\n ),\n []\n );\n\n const getVerticals = useCallback(\n async (data, isFirstLoad = false) => {\n if (isFirstLoad) {\n setLoading(true);\n }\n\n const response = await executeMutation('uem', 'post', data);\n if (response?.status === 200) {\n setVerticals(response?.data);\n }\n if (isFirstLoad) {\n setLoading(false);\n }\n },\n [executeMutation]\n );\n\n const deleteVertical = useCallback(async () => {\n const data = {\n data: {\n environmentId: environment.environmentId,\n apiPath: `TenantService/api/v2/Vertical/${selectedVerticalRef.current.verticalId}/uemDelete`\n }\n };\n const response = await executeMutation(\n `vertical/${selectedVerticalRef.current.verticalId}/uemDelete`,\n 'delete',\n data\n );\n if (response?.status === 204) {\n console.log('success');\n handleSuccessSnackbar('Vertical Deleted Successfully');\n }\n const getVerticalsData = {\n data: {\n customerId: null,\n environmentId: environment.environmentId,\n apiPath: `TenantService/api/v2/Vertical`\n }\n };\n getVerticals(getVerticalsData, true);\n closeDeleteDialog();\n }, [executeMutation, selectedVertical, closeDeleteDialog]);\n\n const getProductVerticals = useCallback(\n async (data) => {\n const response = await executeMutation('productVertical', 'get', data);\n if (response?.status === 200) {\n setProductVertical(response?.data);\n }\n },\n [executeMutation]\n );\n\n useEffect(() => {\n if (environment && getVerticals) {\n if (environment.environmentId) {\n const productVerticalData = {\n data: {\n apiPath: `api/v2/ProductVertical`\n }\n };\n getProductVerticals(productVerticalData);\n const data = {\n data: {\n customerId: null,\n environmentId: environment.environmentId,\n apiPath: `TenantService/api/v2/Vertical`\n }\n };\n getVerticals(data, true);\n }\n }\n }, [environment, getVerticals, getProductVerticals, deleteVertical]);\n\n const closeSheet = useCallback(() => {\n setSideSheetOpen(false);\n const data = {\n data: {\n customerId: null,\n environmentId: environment.environmentId,\n apiPath: `TenantService/api/v2/Vertical`\n }\n };\n\n getVerticals(data);\n }, [getVerticals, environment]);\n\n const handleEditPage = useCallback(\n (value) => {\n setSelectedVertical(value);\n console.log('Edit page, value: ', value);\n openSheetAsEdit(true);\n },\n [t]\n );\n\n const handleCreateVertical = useCallback(\n (value) => {\n openSheetAsEdit(false);\n },\n [t]\n );\n\n const handleDelete = useCallback(\n (value) => {\n setSelectedVertical(value);\n console.log('Delete page, value: ', value);\n setDeleteDialogOpen(true);\n },\n [t]\n );\n\n const actionList = useMemo(\n () => [\n {\n id: 1, // Must be unique\n title: t('Edit'),\n icon: EditIcon,\n onClick: handleEditPage,\n disabled: false\n },\n {\n id: 2, // Must be unique\n title: t('Delete'),\n icon: DeleteIcon,\n onClick: handleDelete,\n disabled: false\n }\n ],\n [t, handleEditPage, handleDelete]\n );\n\n const gridOptions = useMemo(\n () => ({\n frameworkComponents: {\n actionsRenderer: ActionsRenderer\n },\n columnDefs: [\n {\n headerName: t('Name'),\n field: 'name',\n minWidth: 300\n },\n {\n headerName: t('Icon'),\n field: 'icon'\n },\n {\n headerName: t('Actions'),\n cellRenderer: 'actionsRenderer',\n cellRendererParams: {\n actionList\n },\n pinned: 'right',\n suppressMenu: true,\n sortable: false\n }\n ]\n }),\n [t, actionList, productVertical]\n );\n\n const pab = (\n <PrimaryActionButton onClick={handleCreateVertical}>\n <Typography style={{ marginRight: 5 }}>Add</Typography>\n <AddIcon />\n </PrimaryActionButton>\n );\n\n return (\n <>\n <UdpVerticalManagementSidesheet\n open={sideSheetOpen}\n closeSidesheet={closeSheet}\n selectedVertical={selectedVertical}\n environment={environment}\n title={t(sideSheetEdit ? 'Edit Vertical' : 'Create Vertical')}\n associatedProducts={productVertical}\n isEdit={sideSheetEdit}\n />\n <AmbientGridTemplate\n title={t('Vertical Manager')}\n primaryActionButton={pab}\n data={verticals}\n // hideGroupTab\n // hideColumnTab\n loading={loading}\n gridOptions={gridOptions}\n groupingData={[]}\n />\n <FluentDialog\n open={deleteDialogOpen}\n handleClose={closeDeleteDialog}\n title={t('Delete Vertical')}\n message={\n t('Are you sure you want to Delete') + ` \"${selectedVertical?.name}\"?`\n }\n actionOne={deleteVertical}\n labelOne={t('Delete')}\n actionTwo={closeDeleteDialog}\n labelTwo={t('Cancel')}\n />\n </>\n );\n};\n\nexport default UdpVerticalManagementPage;\n","import React from \"react\";\nimport { SideSheet } from '../../UI/surfaces/SideSheet';\nimport { FluentTextFieldAutoComplete } from '../../UI/inputs/textField/FluentTextFieldAutoComplete';\n\n/**\n * @param {object} props\n * @param {object} props.selectedGridPanel\n * @param {string} props.environment\n * @param {boolean} props.open\n * @param {Function} props.onClose\n * @param {Function} props.onSubmit\n * @param {string} props.title\n * @param {any[]} props.grids\n * @param {any[]} props.panels\n * @param {any} props.grid\n * @param {Function} props.setGrid\n * @param {any} props.panel\n * @param {Function} props.setPanel\n * @returns {JSX.Element}\n */\nconst UdpGridPanelManagementSidesheet = (props) => {\n const {\n selectedGridPanel,\n environment,\n open,\n onClose,\n onSubmit,\n title,\n grids,\n panels,\n grid,\n setGrid,\n panel,\n setPanel,\n ...sheetProps\n } = props;\n\n return (\n <SideSheet \n open={open}\n onClose={() => onClose()}\n width={400}\n title={title}\n buttonLabel={'Save'}\n onSubmit={onSubmit}\n {...sheetProps}\n >\n <FluentTextFieldAutoComplete\n id={'grid'}\n label={\"Grid\"}\n options={grids}\n optionKey=\"name\"\n onChange={setGrid}\n value={grid}\n />\n <FluentTextFieldAutoComplete\n id={'panel'}\n label={\"Panel\"}\n options={panels}\n optionKey=\"name\"\n onChange={setPanel}\n value={panel}\n />\n </SideSheet>\n );\n};\n\nexport default UdpGridPanelManagementSidesheet;\n","import React, {\n useCallback,\n useEffect,\n useMemo,\n useState,\n useRef\n} from 'react';\nimport { AmbientGridTemplate } from '../../UI/templates/AmbientGridTemplate';\n// import { executeQueryAdHoc, getBaseMethod } from '../utilities/methodUtils';\nimport { AddIcon, DeleteIcon, EditIcon } from '@fluentui/react-icons';\nimport { Typography } from '@material-ui/core';\nimport { useTranslation } from 'react-i18next';\nimport { PrimaryActionButton } from '../../UI/inputs/buttons/PrimaryActionButton';\nimport { ActionsRenderer } from '../../UI/templates/ui/renderers/ActionsRenderer';\nimport { apiMutate } from '../../utilities/useAxiosMutate';\nimport UdpVerticalManagementSidesheet from './UdpVerticalManagementSidesheet';\nimport { FluentDialog } from '../../UI/feedback/FluentDialog';\nimport { useHandleAxiosSnackbar } from '../../utilities/apiHelpers';\nimport { SideSheet } from '../../UI/surfaces/SideSheet';\nimport UdpGridPanelManagementSidesheet from './UdpGridPanelManagementSidesheet';\nimport { useAgGridApi } from '../../utilities/aggrid/AgTable';\nimport { ConfigService } from 'udp-react-stencil-component-library';\n\nconst UdpGridPanelManagementPage = (props) => {\n const { params } = props;\n const { nodeObj: environment } = params;\n const { t } = useTranslation();\n const [loading, setLoading] = useState(false);\n const [gridPanels, setGridPanels] = useState([]);\n const [grids, setGrids] = useState([]);\n const [panels, setPanels] = useState([]);\n const [addSidesheetOpen, setAddSidesheetOpen] = useState(false);\n const [selectedRow, setSelectedRow] = useState();\n const [deleteDialogOpen, setDeleteDialogOpen] = useState();\n const [dataToDelete, setDataToDelete] = useState();\n\n const [grid, setGrid] = useState(null);\n const [panel, setPanel] = useState(null);\n const { handleErrorSnackbar, handleSuccessSnackbar } =\n useHandleAxiosSnackbar();\n\n const executeMutation = useCallback(\n async (endpoint, method, data) =>\n apiMutate(\n ConfigService.uemV1ApiUrl,\n endpoint,\n {\n method: method || 'post'\n },\n data\n ),\n []\n );\n\n const getGridPanels = useCallback(async () => {\n setLoading(true);\n const requestPayload = {\n data: {\n customerId: null,\n environmentId: environment.environmentId,\n apiPath: `TenantService/api/v2/gridPanel`\n }\n };\n\n const response = await executeMutation('uem', 'post', requestPayload);\n if (response?.status === 200) {\n setGridPanels(response?.data);\n }\n setLoading(false);\n }, [environment?.environmentId, executeMutation]);\n\n const getGrids = useCallback(async () => {\n const requestPayload = {\n data: {\n customerId: null,\n environmentId: environment.environmentId,\n apiPath: `TenantService/api/v2/grid`\n }\n };\n\n const response = await executeMutation('uem', 'post', requestPayload);\n if (response?.status === 200) {\n setGrids(response?.data);\n }\n }, [environment?.environmentId, executeMutation]);\n\n const getPanels = useCallback(async () => {\n const requestPayload = {\n data: {\n customerId: null,\n environmentId: environment.environmentId,\n apiPath: `IntegrationService/api/v2/panel`\n }\n };\n\n const response = await executeMutation('uem', 'post', requestPayload);\n if (response?.status === 200) {\n setPanels(response?.data);\n }\n }, [environment?.environmentId, executeMutation]);\n\n const createGridPanel = useCallback(async () => {\n setLoading(true);\n\n const requestPayload = {\n data: {\n customerId: null,\n gridId: grid.gridId,\n panelId: panel.panelId,\n environmentId: environment.environmentId,\n apiPath: `api/v1/gridPanel/uemCreate`\n }\n };\n\n const response = await executeMutation(\n 'gridPanel/uemCreate',\n 'post',\n requestPayload\n );\n if (response?.status === 201) {\n handleSuccessSnackbar('GridPanel Created Successfully');\n getGridPanels();\n setAddSidesheetOpen(false);\n } else {\n handleErrorSnackbar('Something went wrong');\n }\n setLoading(false);\n }, [\n environment,\n executeMutation,\n getGridPanels,\n grid,\n handleErrorSnackbar,\n handleSuccessSnackbar,\n panel\n ]);\n\n const updateGridPanel = useCallback(async () => {\n setLoading(true);\n\n const requestPayload = {\n data: {\n gridPanelId: selectedRow.gridPanelId,\n customerId: null,\n gridId: grid.gridId,\n panelId: panel.panelId,\n environmentId: environment.environmentId\n }\n };\n\n const response = await executeMutation(\n 'gridPanel/uemUpdate',\n 'put',\n requestPayload\n );\n if (response?.status === 204) {\n handleSuccessSnackbar('GridPanel Updated Successfully');\n getGridPanels();\n setAddSidesheetOpen(false);\n } else {\n handleErrorSnackbar('Something went wrong');\n }\n setLoading(false);\n }, [\n environment,\n executeMutation,\n getGridPanels,\n grid,\n handleErrorSnackbar,\n handleSuccessSnackbar,\n panel,\n selectedRow\n ]);\n\n const deleteGridPanel = useCallback(async () => {\n setLoading(true);\n\n const requestPayload = {\n data: {\n gridPanelId: dataToDelete.gridPanelId,\n customerId: null,\n gridId: dataToDelete.gridId,\n panelId: dataToDelete.panelId,\n environmentId: environment.environmentId\n }\n };\n\n const response = await executeMutation(\n 'gridPanel/uemDelete',\n 'delete',\n requestPayload\n );\n if (response?.status === 204) {\n handleSuccessSnackbar('GridPanel Deleted Successfully');\n getGridPanels();\n } else {\n handleErrorSnackbar('Something went wrong');\n }\n setDataToDelete();\n setLoading(false);\n }, [\n environment,\n executeMutation,\n getGridPanels,\n handleErrorSnackbar,\n handleSuccessSnackbar,\n dataToDelete\n ]);\n\n const openDeleteDialog = (data) => {\n setDeleteDialogOpen(true);\n setDataToDelete(data);\n console.log(data);\n };\n\n useEffect(() => {\n getGridPanels();\n getGrids();\n getPanels();\n }, [getGridPanels, getGrids, getPanels]);\n\n const handleEdit = useCallback((row) => {\n setSelectedRow(row);\n }, []);\n\n useEffect(() => {\n if (selectedRow) {\n const selectedGrid = grids.find(\n (grid) => grid.gridId === selectedRow.gridId\n );\n const selectedPanel = panels.find(\n (panel) => panel.panelId === selectedRow.panelId\n );\n setGrid(selectedGrid);\n setPanel(selectedPanel);\n setAddSidesheetOpen(true);\n }\n }, [grids, panels, selectedRow]);\n\n const actionList = useMemo(\n () => [\n {\n id: 1, // Must be unique\n title: t('Edit'),\n icon: EditIcon,\n onClick: handleEdit,\n disabled: false\n },\n {\n id: 2, // Must be unique\n title: t('Delete'),\n icon: DeleteIcon,\n onClick: openDeleteDialog,\n disabled: false\n }\n ],\n [t, handleEdit]\n );\n\n const gridOptions = useMemo(\n () => ({\n frameworkComponents: {\n actionsRenderer: ActionsRenderer\n },\n columnDefs: [\n {\n headerName: t('gridPanelId'),\n field: 'gridPanelId'\n },\n {\n headerName: t('gridId'),\n field: 'gridId'\n },\n {\n headerName: t('panelId'),\n field: 'panelId'\n },\n {\n headerName: t('Actions'),\n cellRenderer: 'actionsRenderer',\n cellRendererParams: {\n actionList\n },\n pinned: 'right',\n suppressMenu: true,\n sortable: false\n }\n ]\n }),\n [actionList, t]\n );\n\n const handleClose = useCallback(() => {\n setGrid();\n setPanel();\n setSelectedRow();\n setAddSidesheetOpen(false);\n }, []);\n\n return (\n <>\n <UdpGridPanelManagementSidesheet\n title={selectedRow ? 'Update GridPanel' : 'Create GridPanel'}\n open={addSidesheetOpen}\n onClose={handleClose}\n environment={environment}\n grids={grids}\n panels={panels}\n grid={grid}\n setGrid={setGrid}\n panel={panel}\n setPanel={setPanel}\n onSubmit={selectedRow ? updateGridPanel : createGridPanel}\n />\n <FluentDialog\n open={deleteDialogOpen}\n handleClose={() => setDeleteDialogOpen(false)}\n title={t('Delete GridPanel')}\n message={t('Are you sure?')}\n actionOne={deleteGridPanel}\n labelOne={t('Delete')}\n actionTwo={() => setDeleteDialogOpen(false)}\n labelTwo={t('Cancel')}\n />\n <AmbientGridTemplate\n title={t('Grid Panel Manager')}\n useNewHeader\n data={gridPanels}\n gridOptions={gridOptions}\n onPrimaryActionClick={() => setAddSidesheetOpen(true)}\n primaryActionLabel='Add'\n loading={loading}\n />\n </>\n );\n};\n\nexport default UdpGridPanelManagementPage;\n","import React, {\n useState,\n useEffect\n} from 'react';\nimport { useAxiosGet } from '../../utilities/useAxiosGet';\nimport { UdpMaintenanceEnginePage } from './UdpMaintenanceEnginePage';\nimport { ConfigService } from 'udp-react-stencil-component-library';\n\nconst UdpInquiryMaintenanceEnginePage = (props) => {\n const { params } = props;\n const { nodeObj } = params;\n const [loading, setLoading] = useState(false);\n\n const [{ data: catalogKey, loading: catalogKeyLoading }] = useAxiosGet(\n ConfigService.productV1ApiUrl,\n `UdpObjectInfo/getCatalogId/${nodeObj.businessObjectKey}?fromUdpObjectInfo=true`,\n {},\n !!!nodeObj,\n false\n );\n\n /*\n returns {\n entityName: Tenant,\n productId: 1,\n unityBaseGetAllMethod: {apiMethodId: 'f06f7853-5816-4950-a275-5085c3387d57', pathParameters: [{name: \"version\", in: \"path\", parameterType: \"string\", fullReference: \"\"}]},\n unityBaseGetMethod: {apiMethodId: '06f49cfd-0f1e-475a-812b-73cd3efd9f0d', pathParameters: [{name: \"id\", in: \"path\", parameterType: \"string\", fullReference: \"\"}, {name: \"version\", in: \"path\", parameterType: \"string\", fullReference: \"\"}]},\n unityBaseCreateMethod: {apiMethodId: '33310aad-8998-4661-800b-00649d280d31', pathParameters: [{name: \"version\", in: \"path\", parameterType: \"string\", fullReference: \"\"}]},\n unityBaseUpdateMethod: {apiMethodId: 'fe611db9-47ec-4a27-8840-871fe1323812', pathParameters: [{name: \"id\", in: \"path\", parameterType: \"string\", fullReference: \"\"}, {name: \"version\", in: \"path\", parameterType: \"string\", fullReference: \"\"}]},\n unityBaseDeleteMethod: {apiMethodId: 'dafb84b6-e424-43ff-9ef0-774a5795e420', pathParameters: [{name: \"id\", in: \"path\", parameterType: \"string\", fullReference: \"\"}, {name: \"version\", in: \"path\", parameterType: \"string\", fullReference: \"\"}]},\n }\n */\n\n // Set loading flag based on the API loading flags\n useEffect(() => {\n setLoading(catalogKeyLoading);\n }, [catalogKeyLoading])\n\n return (\n\n <UdpMaintenanceEnginePage\n catalogKey={catalogKey || ''}\n />\n );\n};\n\nexport default UdpInquiryMaintenanceEnginePage;\n","import React from 'react';\nimport { PowerBIReport } from '../../reports/PowerBIReport';\n\nconst UdpReportsPage = (props) => {\n const { params } = props;\n\n return <PowerBIReport id={params?.pbiReportCode || null} />;\n};\n\nexport default UdpReportsPage;\n","import React from 'react';\nimport { makeStyles, colors } from '@material-ui/core';\nimport DownArrow from '@material-ui/icons/esm/ArrowDownward';\nimport UpArrow from '@material-ui/icons/esm/ArrowUpward';\n\nconst useStyles = makeStyles(theme => ({\n root: {},\n DownArrow: {\n color: colors.red[500],\n fontSize: 16,\n },\n UpArrow: {\n color: colors.green[500],\n fontSize: 16,\n },\n}));\n\nconst FluentTrendArrow = props => {\n const { type } = props;\n const classes = useStyles();\n\n let trend = '';\n\n switch (type) {\n case 'up':\n trend = <UpArrow className={classes.UpArrow} />;\n break;\n case 'down':\n trend = <DownArrow className={classes.DownArrow} />;\n break;\n default:\n }\n\n return trend;\n};\nexport default FluentTrendArrow;\n","import React from 'react';\nimport { Typography, makeStyles } from '@material-ui/core';\nimport round from '@extra-number/round';\nimport FluentTrendArrow from './FluentTrendArrow';\n\nconst useStyles = makeStyles(theme => ({\n root: {},\n percent: {\n display: 'flex',\n flexDirection: 'row',\n marginTop: theme.spacing(-0.5),\n },\n arrow: {\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center',\n },\n percentAmount: {},\n}));\n\nconst FluentStatsSnippet = props => {\n const classes = useStyles(props);\n const {\n label,\n amount: rawAmount,\n prevAmount,\n percent: percentProp,\n trend: trendProp,\n } = props;\n\n // @todo Use an Intl formatter\n let amount = rawAmount;\n // TODO: Revisit below after Tampa Demo\n if (Math.abs(rawAmount) > 1_000_000) {\n //amount = Math.floor(rawAmount / 1_000_000) + 'M';\n let newNumber = rawAmount / 1_000_000;\n amount = [Math.round(newNumber * 10) / 10, 'M'];\n } else if (Math.abs(rawAmount) > 1_000) {\n //amount = Math.floor(rawAmount / 1_000) + 'K';\n let newNumber = rawAmount / 1_000;\n amount = [Math.round(newNumber * 10) / 10, 'K'];\n }\n\n let percent = percentProp;\n let trend = trendProp;\n if (typeof prevAmount === 'number') {\n const ratio = (rawAmount - prevAmount) / prevAmount;\n\n percent =\n Math.abs(round(ratio * 100, Math.abs(ratio) < 0.01 ? 0.01 : 1)) + '%';\n trend = ratio < 0 ? 'down' : 'up';\n }\n\n return (\n <div className={classes.root}>\n <Typography variant=\"overline\" component=\"div\">\n {label}\n </Typography>\n <Typography className={classes.stat} variant=\"h5\" component=\"div\">\n {amount}\n </Typography>\n <div className={classes.percent}>\n <div className={classes.arrow}>\n <FluentTrendArrow type={trend} />\n </div>\n <div className={classes.percentAmount}>\n <Typography variant=\"caption\">{percent}</Typography>\n </div>\n </div>\n </div>\n );\n};\nexport default FluentStatsSnippet;\n","import React, { useCallback } from 'react'\nimport ToggleButton from '@material-ui/lab/ToggleButton'\nimport ToggleButtonGroup from '@material-ui/lab/ToggleButtonGroup'\nimport { ChartIcon, NumberedListIcon } from '@fluentui/react-icons'\nimport { FluentIcon } from '../../../utilities/iconLibrary/FluentIcon'\n\nconst ChartSummaryToggle = (props) => {\n const { value, onChange } = props\n\n const change = useCallback((e, value) => onChange && onChange(value), [\n onChange\n ])\n\n return (\n <ToggleButtonGroup\n value={value}\n exclusive\n onChange={change}\n aria-label='chart summary mode toggle'\n >\n <ToggleButton\n name='chart-summary-mode'\n value='summary'\n aria-label='summary'\n >\n <FluentIcon component={NumberedListIcon} />\n </ToggleButton>\n <ToggleButton name='chart-summary-mode' value='chart' aria-label='chart'>\n <FluentIcon component={ChartIcon} />\n </ToggleButton>\n </ToggleButtonGroup>\n )\n}\n\nexport default ChartSummaryToggle\n","export const convertISODate = isoDate => {\n const date = new Date(isoDate);\n return date.toLocaleDateString('en-US');\n};\n","import React, { forwardRef, Fragment } from 'react'\nimport { Grid, Box, Typography } from '@material-ui/core'\nimport { MuiVegaLite } from '@material-vega/material-ui'\nimport WidgetCard from '../WidgetCard'\nimport FluentStatsSnippet from '../FluentComponents/atoms/FluentStatsSnippet'\nimport ChartSummaryToggle from '../FluentComponents/ChartSummaryToggle'\nimport { convertISODate } from '../utils/ConvertISODate'\n\nexport const layout = {\n w: { default: 2, min: 0, max: 4 },\n h: { default: 2, min: 0, max: 4 }\n}\n\nconst DonutChartWidget = (props, ref) => {\n const { children, params, setParam, ...other } = props\n const { mockData, apiUrl, theme, dateRange } = params\n\n let body = (\n <Fragment>\n {dateRange && (\n <Typography gutterBottom variant='caption' component='h3'>\n From: {convertISODate(dateRange.from)} to:{' '}\n {convertISODate(dateRange.to)}\n </Typography>\n )}\n <Grid container>\n {mockData?.stats?.map((stat) => (\n <Grid item xs={3} key={stat.label}>\n <FluentStatsSnippet\n label={stat.label}\n amount={stat.currentValue}\n prevAmount={stat.previousValue}\n />\n </Grid>\n ))}\n </Grid>\n <Box clone flex={1} mt={1} overflow='hidden'>\n <MuiVegaLite\n variant='donutChart'\n style={{\n overflow: 'auto',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: 0\n }}\n spec={{\n $schema: 'https://vega.github.io/schema/vega/v5.json',\n width: 200,\n height: 200,\n data: [\n {\n name: 'table',\n values: mockData?.data,\n transform: [\n {\n type: 'pie',\n field: 'value'\n }\n ]\n },\n {\n name: 'used',\n source: 'table',\n transform: [\n {\n type: 'formula',\n expr: \"datum.id === 'Other' ? 'Other' : 'Main'\",\n as: 'id'\n },\n {\n type: 'aggregate',\n fields: ['field'],\n groupby: ['id'],\n ops: ['sum'],\n as: ['sum']\n },\n {\n type: 'pivot',\n field: 'label',\n value: 'sum'\n }\n ]\n }\n ],\n scales: [\n {\n name: 'color',\n type: 'ordinal',\n domain: { data: 'table', field: 'label' },\n range: { scheme: 'greys' }\n }\n ],\n marks: [\n {\n type: 'arc',\n from: { data: 'table' },\n encode: {\n enter: {\n fill: { scale: 'color', field: 'label' },\n x: { signal: 'width / 2' },\n y: { signal: 'height / 2' },\n padAngle: { value: 0.01 }\n },\n update: {\n startAngle: { field: 'startAngle' },\n endAngle: { field: 'endAngle' },\n innerRadius: { signal: 'width / 2 - 10' },\n outerRadius: { signal: 'width / 2' }\n }\n }\n },\n {\n type: 'text',\n from: { data: 'used' },\n style: ['percent'],\n encode: {\n enter: {\n x: { signal: 'width / 2' },\n y: { signal: 'height / 2' },\n align: { value: 'center' },\n baseline: { value: 'middle' },\n fontSize: { value: 24 }\n }\n }\n }\n ],\n legends: [\n {\n fill: 'color',\n direction: 'vertical',\n encode: {\n labels: {\n name: 'legendLabel',\n enter: { text: { field: 'label' } }\n }\n },\n orient: 'right',\n labelColor: theme === 'dark' ? 'white' : 'rgba(0, 0, 0, 0.87)'\n }\n ]\n }}\n />\n </Box>\n {children}\n </Fragment>\n )\n\n return (\n <WidgetCard\n theme={theme}\n ref={ref}\n headerActions={\n <ChartSummaryToggle\n value={params.mode}\n onChange={(value) => setParam('mode', value)}\n />\n }\n {...other}\n title={mockData?.title}\n >\n {mockData ? (\n body\n ) : (\n <Typography variant='subtitle2'>\n Could not retrieve widget data. Please contact support.\n </Typography>\n )}\n </WidgetCard>\n )\n}\n\nexport default forwardRef(DonutChartWidget)\n","import React, { forwardRef, Fragment } from 'react'\nimport { Grid, Typography, makeStyles } from '@material-ui/core'\nimport WidgetCard from '../WidgetCard'\nimport { Sparklines, SparklinesLine } from 'react-sparklines'\nimport FluentStatsSnippet from '../FluentComponents/atoms/FluentStatsSnippet'\nimport { convertISODate } from '../utils/ConvertISODate'\n\nexport const layout = {\n w: { default: 2, min: 0, max: 4 },\n h: { default: 2, min: 0, max: 4 }\n}\n\nconst useStyles = makeStyles((theme) => ({\n statList: {\n display: 'flex',\n flexDirection: 'row',\n justifyContent: 'space-between'\n }\n}))\n\nconst SparklineWidget = (props, ref) => {\n const classes = useStyles()\n const { children, params, setParam, ...other } = props\n const { mockData, apiUrl, theme, dateRange } = params\n\n return (\n <WidgetCard\n className={classes.root}\n theme={theme}\n ref={ref}\n {...other}\n title={mockData?.title}\n >\n {mockData ? (\n <Fragment>\n {dateRange && (\n <Typography gutterBottom variant='caption' component='h3'>\n From: {convertISODate(dateRange.from)} to:{' '}\n {convertISODate(dateRange.to)}\n </Typography>\n )}\n <div className={classes.statList}>\n {mockData?.stats?.map((stat) => (\n <Grid item key={stat.label}>\n <FluentStatsSnippet\n label={stat.label}\n amount={stat.amount}\n percent={stat.percent && stat.percent}\n trend={stat.trend}\n />\n </Grid>\n ))}\n </div>\n\n <Sparklines data={mockData?.data} strokeWidth={0.5}>\n <SparklinesLine color='#067e7e' />\n </Sparklines>\n {children}\n </Fragment>\n ) : (\n <Typography variant='subtitle2'>\n Could not retrieve widget data. Please contact support.\n </Typography>\n )}\n </WidgetCard>\n )\n}\n\nexport default forwardRef(SparklineWidget)\n","import React from 'react'\nimport { Avatar, makeStyles, Typography } from '@material-ui/core'\nimport FluentDisplayNumber from '../atoms/FluentDisplayNumbers'\nimport { MarketIcon, MarketDownIcon } from '@fluentui/react-icons'\nimport { FluentIcon } from '../../../../utilities/iconLibrary/FluentIcon'\n\nconst useStyles = makeStyles(\n (theme) => ({\n root: {\n display: 'flex',\n flexDirection: 'row'\n },\n caption: {\n textAlign: 'left'\n },\n captionSmall: {\n textAlign: 'center'\n },\n trend: {\n marginTop: theme.spacing(2),\n marginLeft: theme.spacing(1)\n },\n upIcon: {\n color: 'green'\n },\n downIcon: {\n color: '#D50000'\n },\n avatar: {\n backgroundColor: 'white'\n }\n }),\n { next: 'FluentStatNumber' }\n)\n\nconst FluentStatNumber = (props) => {\n const classes = useStyles()\n const { small, trend, label, number } = props\n return (\n <div className={classes.root}>\n <div>\n <div>\n <FluentDisplayNumber small={small} number={Math.abs(number)} />\n </div>\n <div className={!small ? classes.caption : classes.captionSmall}>\n <Typography variant='overline'>{label}</Typography>\n </div>\n </div>\n\n <div className={classes.trend}>\n {small && (\n <Avatar className={classes.avatar}>\n {trend === 'down' ? (\n <FluentIcon\n component={MarketDownIcon}\n className={classes.downIcon}\n />\n ) : (\n <FluentIcon component={MarketIcon} className={classes.upIcon} />\n )}\n </Avatar>\n )}\n </div>\n </div>\n )\n}\nexport default FluentStatNumber\n","import React from 'react';\nimport { makeStyles } from '@material-ui/core';\nimport FluentStatNumbers from './FluentStatNumber';\n\nconst useStyles = makeStyles(\n theme => ({\n displayRow: {\n display: 'flex',\n flexDirection: 'row',\n },\n smallDisplay: {\n marginTop: theme.spacing(6),\n marginLeft: theme.spacing(3),\n },\n divider: {\n height: theme.spacing(6),\n marginTop: theme.spacing(6.5),\n marginLeft: theme.spacing(2),\n },\n }),\n { next: 'FluentPrimaryStatNumber' }\n);\n\nconst FluentPrimaryStatNumber = props => {\n const classes = useStyles();\n\n const { mainStat, mainLabel } = props;\n\n return (\n <div className={classes.displayRow}>\n <FluentStatNumbers label={mainLabel} number={mainStat} />\n </div>\n );\n};\n\nexport default FluentPrimaryStatNumber;\n","import React from 'react';\nimport { makeStyles } from '@material-ui/core';\nimport FluentStatNumber from './FluentStatNumber';\n\nconst useStyles = makeStyles(theme => ({\n displayRow: {\n display: 'flex',\n flexDirection: 'row',\n },\n // smallDisplay: {\n // marginTop: theme.spacing(6),\n // },\n divider: {\n height: theme.spacing(6),\n marginTop: theme.spacing(6.5),\n marginLeft: theme.spacing(1),\n },\n}));\n\nconst FluentSecondaryStatNumber = props => {\n const classes = useStyles();\n\n const { secondaryStat, secondaryLabel, trend } = props;\n\n return (\n <div className={classes.displayRow}>\n <div className={classes.smallDisplay}>\n <FluentStatNumber\n small\n trend={trend}\n label={secondaryLabel}\n number={secondaryStat}\n />\n </div>\n </div>\n );\n};\n\nexport default FluentSecondaryStatNumber;\n","import React, { forwardRef, Fragment } from 'react'\nimport FluentPrimaryStatNumber from '../FluentComponents/molecules/FluentPrimaryStatNumber'\nimport WidgetCard from '../WidgetCard'\nimport {\n LinearProgress,\n Typography,\n Divider,\n makeStyles\n} from '@material-ui/core'\nimport FluentSecondaryStatNumber from '../FluentComponents/molecules/FluentSecondaryStatNumber'\nimport { convertISODate } from '../utils/ConvertISODate'\n\nexport const layout = {\n w: { default: 2, min: 0, max: 4 },\n h: { default: 2, min: 0, max: 4 }\n}\n\nconst useStyles = makeStyles((theme) => ({\n root: {},\n displayItems: {\n display: 'flex',\n flexDirection: 'row',\n justifyContent: 'space-around',\n color: 'white'\n },\n divider: {\n marginTop: theme.spacing(4),\n marginBottom: theme.spacing(2)\n }\n}))\n\nconst ProgressBarWidget = (props, ref) => {\n const { children, params, setParam, ...other } = props\n const { mockData, apiUrl, theme, dateRange } = params\n const classes = useStyles()\n\n return (\n <WidgetCard\n theme={theme}\n ref={ref}\n {...other}\n title={mockData?.title}\n widgetType='ProgressBarWidget'\n >\n {mockData ? (\n <Fragment>\n {dateRange && (\n <Typography gutterBottom variant='caption' component='h3'>\n Starting: {convertISODate(dateRange.from)}\n </Typography>\n )}\n\n <FluentPrimaryStatNumber\n mainStat={mockData?.value}\n mainLabel={mockData?.label}\n />\n <div>\n <LinearProgress\n variant='determinate'\n color='secondary'\n value={mockData?.progress}\n />\n {mockData?.progress}%\n </div>\n {mockData?.data && (\n <Fragment>\n <div className={classes.divider}>\n <Divider style={{ background: 'white', opacity: 0.5 }} />\n </div>\n <div className={classes.displayItems}>\n {mockData?.data.map((item, index) => {\n return (\n <FluentSecondaryStatNumber\n secondaryStat={item.value}\n secondaryLabel={item.label}\n trend={item.trend}\n />\n )\n })}\n </div>\n </Fragment>\n )}\n {children}\n </Fragment>\n ) : (\n <Typography variant='subtitle2'>\n Could not retrieve widget data. Please contact support.\n </Typography>\n )}\n </WidgetCard>\n )\n}\n\nexport default forwardRef(ProgressBarWidget)\n","import React, { forwardRef } from 'react';\nimport WidgetCard from '../WidgetCard';\nimport { RecentlyLoadedNodesTable } from '../../../inquiry/dashboard/RecentlyLoadedNodesTable';\n\n// export const layout = {\n// w: { default: 2, min: 0, max: 4 },\n// h: { default: 2, min: 0, max: 4 }\n// };\n\nexport const RecentlyLoadedNodesWidget = (props, ref) => {\n const { children, params, setParam, ...other } = props;\n const {\n recentlyLoadedNodes,\n loading,\n onLoadedNodeClick,\n tree,\n hideWidgetName\n } = params;\n\n return (\n <WidgetCard\n ref={ref}\n title={'Recently Loaded'}\n hideWidgetName={hideWidgetName}\n {...other}\n >\n <RecentlyLoadedNodesTable\n recentlyLoadedNodes={recentlyLoadedNodes}\n loading={loading}\n onLoadedNodeClick={onLoadedNodeClick}\n tree={tree}\n hideTitle={true}\n />\n {children}\n </WidgetCard>\n );\n};\n\nexport default forwardRef(RecentlyLoadedNodesWidget);\n","import React from 'react';\nimport { ChatContainer } from '../../chatBot/ChatContainer';\n\nconst ChatUDP = () => {\n return (\n <ChatContainer />\n );\n};\n\nexport default ChatUDP;\n","import React, { useEffect, useState, useMemo, useCallback, memo } from 'react';\nimport { EditIcon, DeleteIcon, UploadIcon } from '@fluentui/react-icons';\nimport { useTranslation } from 'react-i18next';\nimport { DataBrowserContainer } from '../../dataBrowser/DataBrowserContainer';\nimport { CrudTableSidePanel } from '../../maintenanceEngine/crudBrowser/CrudTableSidePanel';\nimport {\n getPrimaryKeyValues,\n getPathObject\n} from '../../utilities/maintenanceEngine/CrudBrowserUtilities';\nimport { useAuthedUser } from '../../utilities/auth/useAuthedUser';\nimport { useAxiosGet } from '../../utilities/useAxiosGet';\nimport { apiMutate } from '../../utilities/useAxiosMutate';\nimport {\n toLowerFirstChar,\n toUpperFirstChar\n} from '../../utilities/input/StringUtilities';\nimport { getEntityAttributes } from '../../utilities/maintenanceEngine/CrudBrowserUtilities';\nimport { CardinalityTypeEnums } from '../../enums/unitySystemEnums';\nimport { executeQueryAdHoc } from '../utilities/methodUtils';\nimport { getSearchObject } from '../../utilities/search/SearchUtilities';\nimport { useApiCatalog } from '../../hooks/useApiCatalog';\nimport { useHandleAxiosSnackbar } from '../../utilities/apiHelpers';\nimport { usePromotedMethodEntity } from '../../hooks/usePromotedMethodEntity';\nimport { useSearchFilterParamsMap } from '../../hooks/useSearchFilterParamsMap';\nimport { Alert } from '@material-ui/lab';\nimport { v4 as uuid } from 'uuid';\nimport { useLocation } from 'react-router-dom';\nimport { useQueryExecutors } from '../../hooks/useQueryExecutors';\nimport { mapNodeObjValuesToSearchParameters } from '../../utilities/tree/TreeUtilities';\nimport { ConfigService } from 'udp-react-stencil-component-library';\n\n// const FILTER_PARAMS = [\n// {\n// name: 'tenantName',\n// value: 'ABC Company',\n// type: 'string'\n// },\n// {\n// name: 'productId',\n// value: 'UDP_PRODUCT_ID',\n// type: 'keyword'\n// },\n// {\n// name: 'productId',\n// value: 0,\n// type: 'function'\n// }\n// ];\n\n// const FUNCTION_LIST = [() => 1, () => 2];\n\nexport const UdpDataBrowserPage = (props) => {\n const { queryId, params } = props;\n const user = useAuthedUser();\n const { t } = useTranslation();\n const [entityData, setEntityData] = useState([]);\n const [gridApi, setGridApi] = useState(null);\n const [alertWarnings, setAlertWarnings] = useState([]);\n\n const location = useLocation();\n const state = location.state;\n let searchParamStr = location.search;\n let searchParams = new URLSearchParams(searchParamStr);\n const searchParamsQueryId = state?.queryId\n ? state.queryId\n : searchParams.has('queryId') === true\n ? toUpperFirstChar(searchParams.get('queryId'))\n : '';\n\n const { handleErrorSnackbar, handleSuccessSnackbar } =\n useHandleAxiosSnackbar();\n\n const { getCleanData } = useQueryExecutors();\n\n const udpQueryId = useMemo(\n () => params?.queryId || queryId || searchParamsQueryId || '',\n [params, queryId, searchParamsQueryId]\n );\n\n const udpTagId = params?.udpTagId || '';\n\n const [selectedEntity, setSelectedEntity] = useState(null);\n const [foreignKeyData, setForeignKeyData] = useState(null);\n const [udpFieldSearchApiId, setUdpFieldSearchApiId] = useState(null);\n\n const [loading, setLoading] = useState(false);\n const [apiCatalogId, setApiCatalogId] = useState(null);\n const [entityName, setEntityName] = useState(null);\n const [enteredFromConfig, setEnteredFromConfig] = useState(false);\n\n const { data: catalog } = useApiCatalog(apiCatalogId);\n\n const { data: udpOjectFieldInfo } = usePromotedMethodEntity(\n 'UdpObjectFieldInfo',\n true\n );\n\n // TODO: Params will be either passed in or hard coded for now until we have a way of configuring/storing them.\n const { getQueryFilterElements } = useSearchFilterParamsMap();\n\n const [{ data: tpacb, loading: tpacbLoading, error: tpacbError }] =\n useAxiosGet(\n ConfigService.integrationV1ApiUrl,\n `tenantProductApiCatalogBase/tenant/${user?.currentTenantId}/product/${ConfigService.config.UNITY_PRODUCT_ID}`,\n {},\n !!!user,\n false\n );\n\n const [\n {\n data: apiMethodInstance,\n loading: apiMethodInstancebLoading,\n error: apiMethodInstanceError\n }\n ] = useAxiosGet(\n ConfigService.integrationV1ApiUrl,\n `apiMethodInstance/${udpQueryId}`,\n {},\n !!!udpQueryId,\n false\n );\n\n const [\n { data: apiMethod, loading: apiMethodLoading, error: apiMethodError }\n ] = useAxiosGet(\n ConfigService.integrationV1ApiUrl,\n `apiMethod/${apiMethodInstance?.apiMethodId}`,\n {},\n !!!apiMethodInstance?.apiMethodId,\n false\n );\n\n const udpCatalogKey = useMemo(() => apiMethod?.entityName || '', [apiMethod]);\n\n /*\n returns {\n entityName: Tenant,\n productId: 1,\n unityBaseGetAllMethod: {apiMethodId: 'f06f7853-5816-4950-a275-5085c3387d57', pathParameters: [{name: \"version\", in: \"path\", parameterType: \"string\", fullReference: \"\"}]},\n unityBaseGetMethod: {apiMethodId: '06f49cfd-0f1e-475a-812b-73cd3efd9f0d', pathParameters: [{name: \"id\", in: \"path\", parameterType: \"string\", fullReference: \"\"}, {name: \"version\", in: \"path\", parameterType: \"string\", fullReference: \"\"}]},\n unityBaseCreateMethod: {apiMethodId: '33310aad-8998-4661-800b-00649d280d31', pathParameters: [{name: \"version\", in: \"path\", parameterType: \"string\", fullReference: \"\"}]},\n unityBaseUpdateMethod: {apiMethodId: 'fe611db9-47ec-4a27-8840-871fe1323812', pathParameters: [{name: \"id\", in: \"path\", parameterType: \"string\", fullReference: \"\"}, {name: \"version\", in: \"path\", parameterType: \"string\", fullReference: \"\"}]},\n unityBaseDeleteMethod: {apiMethodId: 'dafb84b6-e424-43ff-9ef0-774a5795e420', pathParameters: [{name: \"id\", in: \"path\", parameterType: \"string\", fullReference: \"\"}, {name: \"version\", in: \"path\", parameterType: \"string\", fullReference: \"\"}]},\n }\n */\n const { data: promotedMethodEntities, loading: promotedMethodsLoading } =\n usePromotedMethodEntity(entityName);\n\n const executeCreate = useCallback(\n async (data) =>\n apiMutate(\n ConfigService.integrationV1ApiUrl,\n `apimethod/executeQueryWithParameters/${selectedEntity?.unityBaseCreateMethod?.apiMethodId}`,\n {\n method: 'post'\n },\n data\n ),\n [selectedEntity]\n );\n\n const executeUpdate = useCallback(\n async (data) =>\n apiMutate(\n ConfigService.integrationV1ApiUrl,\n `apimethod/executeQueryWithParameters/${selectedEntity?.unityBaseUpdateMethod?.apiMethodId}`,\n {\n method: 'post'\n },\n data\n ),\n [selectedEntity]\n );\n\n const executeDelete = useCallback(\n async (data) =>\n apiMutate(\n ConfigService.integrationV1ApiUrl,\n `apimethod/executeQueryWithParameters/${selectedEntity?.unityBaseDeleteMethod?.apiMethodId}`,\n {\n method: 'post'\n },\n data\n ),\n [selectedEntity]\n );\n\n const onCreate = useCallback(\n async (data) => {\n return await executeCreate(data);\n },\n [executeCreate]\n );\n\n const onUpdate = useCallback(\n async (data) => {\n return await executeUpdate(data);\n },\n [executeUpdate]\n );\n\n const onDelete = useCallback(\n async (data) => {\n return await executeDelete(data);\n },\n [executeDelete]\n );\n\n // Configured columns data from data builder\n const queryColumnsData = useMemo(() => {\n if (!apiMethodInstance) return [];\n let catalogMods = [];\n try {\n const catalogModificationStr = apiMethodInstance.catalogModification;\n const catalogModification = JSON.parse(catalogModificationStr);\n catalogMods = catalogModification;\n } catch {\n console.warn('Error parsing apiMethodInstance catalogModification');\n }\n return catalogMods;\n }, [apiMethodInstance]);\n\n // Lookups map used for to map lookups to column entries\n const lookupsMap = useMemo(() => {\n // need to return null for Datasource to not render twice\n if (!queryColumnsData.length) return null;\n const map = {};\n const lookupColumns = queryColumnsData.filter(\n (column) => !!column.extendedProperties?.lookup\n );\n lookupColumns.forEach((lc) => {\n map[lc.name] = {\n lookupKeyName: lc.extendedProperties?.lookupKeyName || '',\n lookupValueName: lc.extendedProperties?.lookupKeyName || '',\n value: lc.extendedProperties?.lookup || '',\n filterOn: !!lc.filterOn || false\n };\n });\n\n return map;\n }, [queryColumnsData]);\n\n const nodeFilterParams = useMemo(() => {\n let filterParams = [];\n if (params?.nodeObj && params?.queryParamMapping) {\n const mappedParameters = mapNodeObjValuesToSearchParameters(\n params.nodeObj,\n params.queryParamMapping\n );\n if (Object.keys(mappedParameters).length) {\n Object.keys(mappedParameters).forEach((key) => {\n filterParams.push({\n name: key,\n value: mappedParameters[key],\n type: 'string'\n });\n });\n }\n }\n return filterParams;\n }, [params]);\n\n // Additional filter elements\n const searchFilterElements = useMemo(() => {\n const filterElements = [];\n if (!enteredFromConfig && udpTagId) {\n filterElements.push({\n searchField: 'UdpTags.UdpTagAssociationUdpTag.Id',\n searchOperator: '=',\n searchValue: udpTagId\n });\n }\n\n const queryFilterElements = getQueryFilterElements(\n apiMethodInstance,\n nodeFilterParams\n );\n return filterElements.concat(queryFilterElements);\n }, [\n udpTagId,\n enteredFromConfig,\n getQueryFilterElements,\n apiMethodInstance,\n nodeFilterParams\n ]);\n\n const entityAttributes = useMemo(() => {\n return getEntityAttributes(catalog, entityName);\n }, [catalog, entityName]);\n\n const getMetaDataForUdpField = useCallback(\n async (entityName) => {\n let fieldInfos = [];\n if (udpFieldSearchApiId) {\n const filterElements = [\n {\n searchField: 'ObjectInfo.SanitizedName',\n searchOperator: '=',\n searchValue: entityName\n }\n ];\n const requestObj = getSearchObject(filterElements, 1, 50, true);\n\n executeQueryAdHoc({ data: requestObj }, udpFieldSearchApiId).then(\n (resp) => {\n fieldInfos = resp.data?.pageList;\n }\n );\n }\n return fieldInfos;\n },\n [udpFieldSearchApiId]\n );\n\n const getFKMethodEntities = useCallback(\n async (attributes) => {\n if (!attributes) {\n return [];\n }\n let fkMethods = [];\n\n for (const attr of attributes) {\n // check if there is a property with this childEntity\n if (attr?.extendedProperties?.childEntity) {\n // get the list of child entity field names from the Keys array\n const ceFieldsArr = [];\n Object.keys(attr.extendedProperties.childEntityAssoc || {}).length &&\n (attr.extendedProperties.childEntityAssoc.Cardinality ===\n CardinalityTypeEnums.Many_To_Many ||\n attr.extendedProperties.childEntityAssoc.Cardinality ===\n CardinalityTypeEnums.One_To_Many) &&\n !attr.extendedProperties.childEntityAssoc.UdpType &&\n attr.extendedProperties.childEntityAssoc.Keys.forEach(\n (value, i) => {\n const name = value.split(',')[0];\n if (name) {\n // check name string: if 1 word, lowercase. if 2 words, lower first char\n ceFieldsArr.push({\n idx: i,\n name: /^[A-Z]*$/.test(name)\n ? name.toLowerCase()\n : toLowerFirstChar(name)\n });\n }\n }\n );\n\n // find the child entity attribute\n const ceAttr = attributes.find((p) =>\n ceFieldsArr.find((cef) => cef.name === p.name)\n );\n\n if (ceAttr) {\n // get list of entity if ceProp exists\n await apiMutate(\n ConfigService.integrationV1ApiUrl,\n `apicatalog/${apiCatalogId}/promotedMethodEntities/${attr.reference}/product/${ConfigService.config.UNITY_PRODUCT_ID}`,\n {\n method: 'get'\n },\n {}\n ).then((resp) => {\n if (resp && resp.data) {\n fkMethods.push({\n entityAttribute: ceAttr,\n entity: resp.data\n });\n }\n });\n }\n }\n }\n return fkMethods;\n },\n [apiCatalogId]\n );\n\n const getFKAssociationLabel = useCallback(\n async (entityName) => {\n let fieldsInfo = [];\n fieldsInfo = await getMetaDataForUdpField(entityName);\n if (fieldsInfo?.length <= 0) {\n return '';\n }\n const associationLabelInfo = fieldsInfo?.find(\n (fi) => fi.properties?.maintainenceConfig?.associationLabel === 'true'\n );\n return associationLabelInfo?.name;\n },\n [getMetaDataForUdpField]\n );\n\n const getDataByKey = (obj, k) => {\n if (!obj) return null;\n let val = obj[k] ?? null;\n if (!val) {\n const key = Object.keys(obj).find((objKey) =>\n objKey.toLowerCase().includes(k)\n );\n if (key) {\n val = obj[key];\n }\n }\n return val;\n };\n\n const getFKData = useCallback(async () => {\n if (!entityAttributes?.length) {\n return null;\n }\n const fkMethods = await getFKMethodEntities(entityAttributes);\n if (!fkMethods?.length) {\n setForeignKeyData([]);\n return [];\n }\n let fkData = [];\n let promises = [];\n let promiseDetails = [];\n const warnings = [];\n for (const method of fkMethods) {\n if (method && method?.entity?.unityBaseGetAllMethod) {\n const associationLabel = await getFKAssociationLabel(\n method.entity.entityName\n );\n promiseDetails.push({\n url:\n ConfigService.integrationV1ApiUrl +\n `/apimethod/executeQueryWithParameters/${method?.entity?.unityBaseGetAllMethod?.apiMethodId}`,\n fieldName: method.entityAttribute.name,\n name: method.entity.entityName,\n associationLabel: associationLabel\n });\n\n promises.push(\n apiMutate(\n ConfigService.integrationV1ApiUrl,\n `apimethod/executeQueryWithParameters/${method?.entity?.unityBaseGetAllMethod?.apiMethodId}`,\n {\n method: 'post'\n },\n { data: {} }\n )\n );\n } else {\n warnings.push({\n id: uuid(),\n message: `${method.entity.entityName}'s Get-All method needs to be promoted`\n });\n }\n }\n\n setAlertWarnings(warnings);\n\n Promise.all(promises).then((resp) => {\n resp.forEach((response, index) => {\n if (response.status === 200) {\n if (response?.data) {\n let respData = [];\n const promiseDetail = promiseDetails.find(\n (p) =>\n p.url === response?.config?.url &&\n !fkData.find(\n (fd) =>\n fd.entityName === p.Name && fd.fieldName === p.fieldName\n )\n );\n response.data.forEach((d) => {\n const idName =\n promiseDetail?.fieldName && d[promiseDetail.fieldName]\n ? promiseDetail.fieldName\n : 'id';\n const id = getDataByKey(d, idName);\n const name = getDataByKey(\n d,\n toLowerFirstChar(promiseDetail.associationLabel) || 'name'\n );\n\n respData.push({ id: id, name: name ?? id });\n });\n\n fkData.push({\n fieldName: promiseDetail.fieldName,\n entityName: promiseDetail.name,\n name: promiseDetail.fieldName,\n data: respData\n });\n }\n }\n });\n setForeignKeyData(fkData);\n });\n }, [entityAttributes, getFKMethodEntities, getFKAssociationLabel]);\n\n const handleOnCreate = useCallback(\n async (values) => {\n if (selectedEntity) {\n const entityName = selectedEntity?.entityName;\n if (selectedEntity?.unityBaseCreateMethod) {\n const data = { requestBody: values };\n const response = await onCreate({ data }).catch((res) => {\n handleErrorSnackbar(res);\n });\n\n if (response?.status === 200) {\n handleSuccessSnackbar(\n entityName\n ? t(`${entityName} has been created`)\n : t(`Entity has been created`)\n );\n gridApi?.refreshServerSideStore();\n return response;\n }\n }\n }\n },\n [\n selectedEntity,\n onCreate,\n t,\n handleErrorSnackbar,\n handleSuccessSnackbar,\n gridApi\n ]\n );\n\n const handleOnUpdate = useCallback(\n async (values, primaryKeyValues) => {\n if (selectedEntity) {\n const entityName = selectedEntity?.entityName;\n\n if (selectedEntity?.unityBaseUpdateMethod) {\n // Get primary key value object using path parameters and merge with data\n const pathObject = getPathObject(\n selectedEntity.unityBaseUpdateMethod.pathParameters,\n primaryKeyValues\n );\n let data = { requestBody: values };\n if (Array.isArray(pathObject)) {\n pathObject.forEach((po) => {\n data[Object.keys(po)[0]] = po[Object.keys(po)[0]];\n });\n } else {\n data = { ...pathObject, requestBody: values };\n }\n\n const response = await onUpdate({ data }).catch((res) => {\n handleErrorSnackbar(res);\n });\n\n if (response?.status === 200) {\n handleSuccessSnackbar(\n entityName\n ? t(`${entityName} has been updated`)\n : t(`Entity has been updated`)\n );\n\n gridApi?.refreshServerSideStore();\n }\n }\n }\n },\n [\n selectedEntity,\n onUpdate,\n t,\n gridApi,\n handleErrorSnackbar,\n handleSuccessSnackbar\n ]\n );\n\n const handleOnDelete = useCallback(\n async (value) => {\n value = getCleanData(value, lookupsMap);\n if (selectedEntity) {\n const entityName = selectedEntity?.entityName;\n\n if (selectedEntity?.unityBaseDeleteMethod) {\n // Get primary key value object using path parameters and merge with data\n const primaryKeyValues = getPrimaryKeyValues(entityAttributes, value);\n const pathObject = getPathObject(\n selectedEntity?.unityBaseDeleteMethod.pathParameters,\n primaryKeyValues\n );\n let data = {};\n if (Array.isArray(pathObject)) {\n pathObject.forEach((po) => {\n data[Object.keys(po)[0]] = po[Object.keys(po)[0]];\n });\n } else {\n data = { ...pathObject };\n }\n\n const response = await onDelete({ data }).catch((res) => {\n handleErrorSnackbar(res);\n });\n\n if (response?.status === 200) {\n handleSuccessSnackbar(\n entityName\n ? t(`${entityName} has been deleted`)\n : t(`Entity has been deleted`)\n );\n\n gridApi?.refreshServerSideStore();\n }\n }\n }\n },\n [\n selectedEntity,\n entityAttributes,\n onDelete,\n t,\n gridApi,\n handleErrorSnackbar,\n handleSuccessSnackbar,\n getCleanData,\n lookupsMap\n ]\n );\n\n const handleEntitySelect = useCallback((entityName) => {\n setAlertWarnings([]);\n setEntityName(entityName);\n setEnteredFromConfig(true);\n }, []);\n\n const removeWarning = useCallback(\n (id) => {\n const updatedWarnings = alertWarnings.filter(\n (warning) => warning.id !== id\n );\n setAlertWarnings(updatedWarnings);\n },\n [alertWarnings]\n );\n\n const actionList = useMemo(() => {\n if (!selectedEntity) {\n return;\n }\n\n const data = getCleanData(entityData, lookupsMap);\n\n const actions = [\n {\n id: 1, // Must be unique\n title: selectedEntity?.unityBaseUpdateMethod\n ? t('Edit')\n : t('Edit Method Not Accessible'),\n icon: EditIcon,\n onClick: null,\n opens: 'sideSheet',\n loading: !!!foreignKeyData,\n view: {\n component: CrudTableSidePanel,\n properties: {\n entityAttributes,\n foreignKeyData: foreignKeyData,\n crudTableEditionData: null,\n onUpdate: handleOnUpdate,\n valuePropName: 'crudTableEditionData',\n closeSideSheet: null,\n closeSideSheetPropName: 'closeSideSheet',\n pageId: selectedEntity?.unityBaseUpdateMethod?.pageId,\n isNewEntry: false,\n entityName,\n entityData: data\n }\n },\n disabled: !!!selectedEntity?.unityBaseUpdateMethod\n },\n {\n id: 2, // Must be unique\n title: selectedEntity?.unityBaseDeleteMethod\n ? t('Delete')\n : t('Delete Method Not Accessible'),\n icon: DeleteIcon,\n onClick: null,\n opens: 'dialog',\n loading: !!!foreignKeyData,\n view: {\n component: null,\n properties: {\n title: t('Delete'),\n message: t('Are you sure you want to delete this row?'),\n labelOne: t('Cancel'),\n actionTwo: handleOnDelete,\n labelTwo: t('Confirm')\n }\n },\n disabled: !!!selectedEntity?.unityBaseDeleteMethod\n }\n ];\n\n if (params?.loadInquiryNode && params?.displayLoadNodeButton) {\n actions.push({\n id: 5, // Must be unique\n title: t('Load to Tree'),\n icon: UploadIcon,\n onClick: (value) => {\n const obj = getCleanData(value, lookupsMap);\n params.loadInquiryNode(obj);\n },\n loading: !!!foreignKeyData,\n view: {}\n });\n }\n return actions;\n }, [\n selectedEntity,\n t,\n entityAttributes,\n foreignKeyData,\n handleOnUpdate,\n handleOnDelete,\n entityName,\n entityData,\n getCleanData,\n lookupsMap,\n params\n ]);\n\n useEffect(() => {\n const setFrKeyData = async () => {\n await getFKData();\n };\n if (entityAttributes && udpFieldSearchApiId !== null) {\n setFrKeyData();\n }\n }, [entityAttributes, getFKData, udpFieldSearchApiId]);\n\n useEffect(() => {\n if (promotedMethodEntities) {\n setSelectedEntity(promotedMethodEntities);\n }\n }, [promotedMethodEntities]);\n\n useEffect(() => {\n if (udpOjectFieldInfo) {\n setUdpFieldSearchApiId(\n udpOjectFieldInfo?.unityBaseSearchMethod?.apiMethodId || '' // If falsy lets set to empty string\n );\n }\n }, [udpOjectFieldInfo]);\n\n useEffect(() => {\n setAlertWarnings([]);\n if (udpCatalogKey) {\n setEntityName(udpCatalogKey);\n }\n }, [udpCatalogKey]);\n\n useEffect(() => {\n if (tpacb) {\n setApiCatalogId(tpacb.apiCatalogId);\n }\n }, [tpacb]);\n\n // Set loading flag based on the API loading flags\n useEffect(() => {\n setLoading(tpacbLoading || promotedMethodsLoading);\n }, [tpacbLoading, promotedMethodsLoading]);\n\n if (tpacbError) {\n return (\n <Alert severity='error'>\n {t('There is no Api Catalog associated with your tenant and product')}\n </Alert>\n );\n }\n\n return (\n <>\n {alertWarnings.map((warning) => (\n <Alert onClose={() => removeWarning(warning.id)} severity='warning'>\n {warning.message || ''}\n </Alert>\n ))}\n <DataBrowserContainer\n entityData={entityData}\n actionList={actionList}\n onCreate={handleOnCreate}\n entityAttributes={entityAttributes}\n foreignKeyData={foreignKeyData}\n isLoading={loading}\n promotedEntity={selectedEntity}\n setEntityData={setEntityData}\n isServerSide={true}\n apiMethod={{ apiCatalogId, entityName }}\n setGridApi={setGridApi}\n filterElements={searchFilterElements}\n backToConfigPage={\n enteredFromConfig ? () => handleEntitySelect(null) : null\n }\n queryColumnsData={queryColumnsData}\n lookupsMap={lookupsMap}\n disableRowSelction={!params?.loadInquiryNode}\n />\n </>\n );\n};\n\nexport default memo(UdpDataBrowserPage);\n","import React, {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState\n} from 'react';\nimport { AmbientGridTemplate } from '../../UI/templates/AmbientGridTemplate';\nimport { getSearchObject } from '../../utilities/search/SearchUtilities';\nimport { executeQueryAdHoc, getBaseMethod } from '../utilities/methodUtils';\nimport { UdpEnums } from '../../enums/unitySystemEnums';\nimport { useActionState } from '../../hooks/useActions';\nimport { useHandleAxiosSnackbar } from '../../utilities/apiHelpers';\nimport { useTranslation } from 'react-i18next';\nimport { EditIcon, ViewIcon } from '@fluentui/react-icons';\nimport { RemindersScreen } from '../../reminders/RemindersScreen';\nimport { ActionsRenderer } from '../../UI/templates/ui/renderers/ActionsRenderer';\nimport { SideSheet } from '../../UI/surfaces/SideSheet';\nimport { useActions } from '../../hooks/useActions';\nimport { SplitScreenTypeEnums } from '../../enums/unitySystemEnums';\nimport { FILE_TO_TYPES } from '../../constants/reminderConstants';\nimport { useUser } from '../../utilities/auth/useUser';\n\nconst UdpRemindersPage = (props) => {\n const { params } = props;\n const { nodeObj, manytoManyNodeObjKey } = params;\n const [reminders, setReminders] = useState([]);\n const [typeOptions, setTypeOptions] = useState([]);\n const [loading, setLoading] = useState(false);\n const [sheetOpen, setSheetOpen] = useState(false);\n const [reminderId, setReminderId] = useState('');\n const { openSplitScreen } = useActions();\n const actionState = useActionState();\n const { catalogPromotedEntities } = actionState;\n const { handleErrorSnackbar } = useHandleAxiosSnackbar();\n const { t } = useTranslation();\n const formRef = useRef(null);\n const user = useUser();\n\n const reminderFiledForSearchApiMethod = useMemo(() => {\n return getBaseMethod(\n UdpEnums.Udp_Reminder_Filed_For,\n 'unityBaseSearchMethod',\n catalogPromotedEntities\n );\n }, [catalogPromotedEntities]);\n\n const reminderTypeGetAllApiMethod = useMemo(() => {\n return getBaseMethod(\n UdpEnums.Udp_Reminder_Type,\n 'unityBaseGetAllMethod',\n catalogPromotedEntities\n );\n }, [catalogPromotedEntities]);\n\n const getReminders = useCallback(async () => {\n if (!nodeObj) {\n return [];\n }\n let remindersList = [];\n setLoading(true);\n const filterElements = [\n {\n searchField: 'entityBusinessKey',\n searchValue: manytoManyNodeObjKey\n ? nodeObj[manytoManyNodeObjKey]?.businessObjectKey\n : nodeObj?.businessObjectKey,\n searchOperator: '='\n },\n {\n searchField: 'Reminder.TenantID',\n searchValue: user.currentTenantId,\n searchOperator: '='\n }\n ];\n const searchObject = getSearchObject(filterElements, 1, 200, true);\n const data = { data: searchObject };\n\n if (reminderFiledForSearchApiMethod) {\n const response = await executeQueryAdHoc(\n data,\n reminderFiledForSearchApiMethod.apiMethodId\n );\n\n if (response?.status === 200) {\n const pageList = response.data.pageList;\n if (pageList?.length) {\n remindersList = pageList.map((item) => ({\n ...item.reminder,\n filedToType: item.type\n }));\n }\n } else {\n handleErrorSnackbar(null, t('Could not retrieve reminders'));\n }\n } else {\n handleErrorSnackbar(\n null,\n t('Search ReminderFiledFor Method Not Promoted')\n );\n }\n setLoading(false);\n setReminders(remindersList);\n }, [\n reminderFiledForSearchApiMethod,\n handleErrorSnackbar,\n nodeObj,\n manytoManyNodeObjKey,\n t,\n user\n ]);\n\n const openSheet = useCallback((value) => {\n setReminderId(value?.id || '');\n setSheetOpen(true);\n }, []);\n\n const closeSheet = useCallback(() => {\n setReminderId('');\n setSheetOpen(false);\n }, []);\n\n const handleEditPage = useCallback(\n (value) => {\n openSplitScreen({\n open: true,\n action: null,\n type: SplitScreenTypeEnums.Reminders,\n params: { id: value?.id || '', reloadReminders: getReminders }\n });\n },\n [openSplitScreen, getReminders]\n );\n\n const actionList = useMemo(\n () => [\n {\n id: 1, // Must be unique\n title: t('Reminder'),\n icon: ViewIcon,\n onClick: openSheet,\n disabled: false\n },\n {\n id: 2, // Must be unique\n title: t('Edit'),\n icon: EditIcon,\n onClick: handleEditPage,\n disabled: false\n }\n ],\n [t, openSheet, handleEditPage]\n );\n\n const getFiledToType = (params) => {\n const filedToType = FILE_TO_TYPES.find(\n (type) => type.value === params.data.filedToType\n );\n return filedToType?.label || '';\n };\n\n const getType = useCallback(\n (params) => {\n const type = typeOptions.find((t) => t.code === params.data.typeCode);\n return type?.name || '';\n },\n [typeOptions]\n );\n\n const columnDefs = [\n {\n headerName: 'Date',\n field: 'createdOn',\n resizable: true,\n sortable: true\n },\n {\n headerName: 'Subject',\n field: 'subject',\n resizable: true,\n sortable: true\n },\n {\n headerName: 'Reminder',\n field: 'content',\n resizable: true,\n sortable: true,\n valueGetter: (params) => params.data.content.replace(/(<([^>]+)>)/gi, '')\n },\n {\n headerName: 'Reminder Date',\n field: 'reminderDate',\n resizable: true,\n sortable: true\n },\n {\n headerName: 'Type',\n field: 'typeCode',\n resizable: true,\n sortable: true,\n valueGetter: getType\n },\n {\n headerName: 'Filed To Type',\n field: 'filedToType',\n resizable: true,\n sortable: true,\n valueGetter: getFiledToType\n },\n {\n headerName: 'Created By',\n field: 'userDisplayName',\n resizable: true,\n sortable: true\n },\n {\n headerName: '',\n cellRenderer: 'actionsRenderer',\n cellRendererParams: {\n actionList\n },\n pinned: 'right',\n suppressMenu: true,\n sortable: false\n }\n ];\n\n // no dependencies in the array because we only want getReminders to run once\n useEffect(() => {\n getReminders();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n const getTypeOptions = async () => {\n let options = [];\n if (reminderTypeGetAllApiMethod) {\n const typesResponse = await executeQueryAdHoc(\n { data: {} },\n reminderTypeGetAllApiMethod.apiMethodId\n );\n if (typesResponse?.status === 200) {\n options = typesResponse.data;\n }\n }\n setTypeOptions(options);\n };\n getTypeOptions();\n }, [reminderTypeGetAllApiMethod]);\n\n return (\n <>\n <SideSheet\n open={sheetOpen}\n onClose={closeSheet}\n title={t('Reminder')}\n width={600}\n >\n <RemindersScreen\n viewOnly={true}\n id={reminderId}\n shortcutContentFinderEnabled={false}\n formRef={formRef}\n />\n </SideSheet>\n <AmbientGridTemplate\n title={'Reminders'}\n data={reminders}\n columnDefs={columnDefs}\n loading={loading}\n frameworkComponents={{ actionsRenderer: ActionsRenderer }}\n groupingData={[]}\n />\n </>\n );\n};\n\nexport default UdpRemindersPage;\n","import React, {\n forwardRef,\n useCallback,\n useEffect,\n useMemo,\n useState\n} from 'react';\nimport WidgetCard from '../WidgetCard';\nimport { RemindersCard } from '../../../reminders/RemindersCard';\nimport { FluentButton } from '../../inputs/buttons/FluentButton';\nimport {\n CircularProgress,\n makeStyles,\n FormControlLabel,\n Switch\n} from '@material-ui/core';\nimport { useTranslation } from 'react-i18next';\nimport { useUser } from '../../../utilities/auth/useUser';\nimport {\n getSearchIdentifiers,\n getSearchObject\n} from '../../../utilities/search/SearchUtilities';\nimport {\n executeQueryAdHoc,\n executeQueryWithParameters,\n getBaseMethod\n} from '../../../udp/utilities/methodUtils';\nimport {\n LogicalSearchOperatorEnums,\n UdpEnums,\n UdpReminderFiledForType\n} from '../../../enums/unitySystemEnums';\nimport { useActionState } from '../../../hooks/useActions';\nimport { useHandleAxiosSnackbar } from '../../../utilities/apiHelpers';\nimport { FluentIconButton } from '../../inputs/buttons/FluentIconButton';\nimport { SortIcon } from '@fluentui/react-icons';\nimport { Alert } from '@material-ui/lab';\nimport { v4 as uuid } from 'uuid';\n\n// export const layout = {\n// w: { default: 2, min: 0, max: 4 },\n// h: { default: 2, min: 0, max: 4 }\n// };\n\nconst useStyles = makeStyles((theme) => ({\n root: {},\n actions: {\n display: 'flex',\n alignItems: 'center',\n width: '100%',\n justifyContent: 'flex-end'\n },\n actionButton: {\n marginRight: theme.spacing(0.25),\n position: 'relative'\n },\n fabProgress: {\n position: 'absolute',\n top: 4,\n left: '35%',\n zIndex: 1\n }\n}));\n\nexport const RemindersWidget = (props, ref) => {\n const { children, params, setParam, ...other } = props;\n const { onLoadedNodeClick, hideWidgetName, tree, catalogObjects } = params;\n\n const [sortDirection, setSortDirection] = useState(null);\n const [reminders, setReminders] = useState(null);\n const [loading, setLoading] = useState(false);\n const [allRemindersRequested, setAllRemindersRequested] = useState(false);\n const [buttonProgress, setButtonProgress] = useState(false);\n const [alertWarnings, setAlertWarnings] = useState([]);\n\n const classes = useStyles(props);\n const actionState = useActionState();\n const { catalogPromotedEntities } = actionState;\n const { handleErrorSnackbar } = useHandleAxiosSnackbar();\n const { t } = useTranslation();\n const user = useUser();\n\n const reminderFiledForSearchApiMethod = useMemo(() => {\n return getBaseMethod(\n UdpEnums.Udp_Reminder_Filed_For,\n 'unityBaseSearchMethod',\n catalogPromotedEntities\n );\n }, [catalogPromotedEntities]);\n\n const updateReminderApiMethod = useMemo(() => {\n return getBaseMethod(\n UdpEnums.Udp_Reminder,\n 'unityBaseUpdateMethod',\n catalogPromotedEntities\n );\n }, [catalogPromotedEntities]);\n\n const currentSortDirection = useMemo(() => {\n if (sortDirection === 'asc') {\n return 'desc';\n } else if (sortDirection === 'desc') {\n return 'asc';\n } else {\n return null;\n }\n }, [sortDirection]);\n\n const getNodeToLoad = useCallback(\n (reminder) => {\n const nodeToLoad = {};\n const domainObject = reminder?.domainObject;\n const entityBusinessKey = reminder?.entityBusinessKey || '';\n let treeStructureId = '';\n let apiMethodId = '';\n const matchingNode = tree?.treeStructure?.find(\n (node) => node.properties?.catalogReturnObject === domainObject\n );\n\n if (matchingNode) {\n treeStructureId = matchingNode.id;\n if (!matchingNode.parentId) {\n apiMethodId = tree.apiMethodInstance.apiMethodId;\n } else {\n const associatedInquiryTree =\n matchingNode.properties?.associatedInquiryTree;\n if (associatedInquiryTree) {\n apiMethodId =\n associatedInquiryTree.apiMethodInstance?.apiMethodId || '';\n }\n }\n }\n nodeToLoad.apiMethodId = apiMethodId;\n\n const searchIdentifiers = getSearchIdentifiers(\n catalogObjects,\n domainObject\n );\n const filterElements = [];\n const searchValue = entityBusinessKey.split('|')?.[1];\n const values = searchValue.split(',');\n\n searchIdentifiers.forEach((searchIdentifier, index) => {\n const searchField = searchIdentifier\n ? searchIdentifier.charAt(0).toUpperCase() + searchIdentifier.slice(1)\n : '';\n filterElements.push({\n searchField: searchField,\n searchOperator: '=',\n searchValue: values[index]\n });\n });\n\n nodeToLoad.queryPayload = getSearchObject(\n filterElements,\n 1,\n 50,\n true,\n LogicalSearchOperatorEnums.And\n );\n\n nodeToLoad.nodeDetails = {\n catalogReturnObject: domainObject,\n treeStructureId: treeStructureId\n };\n\n return nodeToLoad;\n },\n [tree, catalogObjects]\n );\n\n const getIcon = useCallback(\n (reminder) => {\n const domainObject = reminder?.domainObject;\n const matchingNode = tree?.treeStructure?.find(\n (node) => node.properties?.catalogReturnObject === domainObject\n );\n return matchingNode?.properties?.defaultIcon || {};\n },\n [tree]\n );\n\n const sortByDate = useCallback((reminderList, direction) => {\n const sortedReminders = [...reminderList];\n if (direction === 'asc') {\n sortedReminders.sort(\n (a, b) => new Date(b.reminderDate) - new Date(a.reminderDate)\n );\n } else if (direction === 'desc') {\n sortedReminders.sort(\n (a, b) => new Date(a.reminderDate) - new Date(b.reminderDate)\n );\n }\n setReminders(sortedReminders);\n }, []);\n\n const sort = useCallback(() => {\n sortByDate(reminders, sortDirection || 'desc');\n if (sortDirection === 'desc' || !sortDirection) {\n setSortDirection('asc');\n } else if (sortDirection === 'asc') {\n setSortDirection('desc');\n }\n }, [reminders, sortByDate, sortDirection]);\n\n const getReminders = useCallback(\n async (allRequested = false, rffSearchApiMethod) => {\n let remindersList = [];\n const warnings = [];\n\n if (!reminders) {\n setLoading(true);\n }\n\n let filterElements = [\n {\n searchField: 'Reminder.Acknowledged',\n searchValue: false,\n searchOperator: '=',\n groupId: 1\n },\n {\n searchField: 'Reminder.ReminderDate',\n searchValue: new Date(),\n searchOperator: '<=',\n groupId: 1\n },\n {\n searchField: 'Type',\n searchValue: UdpReminderFiledForType.System,\n searchOperator: '=',\n groupId: 2\n },\n {\n searchField: 'Type',\n searchValue: UdpReminderFiledForType.User,\n searchOperator: '=',\n groupId: 3\n },\n\n {\n searchField: 'Reminder.UnityUserID',\n searchValue: user.id,\n searchOperator: '=',\n groupId: 3\n }\n ];\n\n let filterGroups = [\n {\n groupId: 1,\n logicalSearchOperator: LogicalSearchOperatorEnums.And,\n parentGroupId: null\n },\n {\n groupId: 2,\n logicalSearchOperator: LogicalSearchOperatorEnums.Or,\n parentGroupId: null\n },\n {\n groupId: 3,\n logicalSearchOperator: LogicalSearchOperatorEnums.And,\n parentGroupId: 2\n }\n ];\n\n if (allRequested) {\n filterElements = [\n {\n searchField: 'Type',\n searchValue: UdpReminderFiledForType.System,\n searchOperator: '=',\n groupId: 2\n },\n {\n searchField: 'Type',\n searchValue: UdpReminderFiledForType.User,\n searchOperator: '=',\n groupId: 3\n },\n {\n searchField: 'Reminder.UnityUserID',\n searchValue: user.id,\n searchOperator: '=',\n groupId: 3\n }\n ];\n\n filterGroups = [\n {\n groupId: 2,\n logicalSearchOperator: LogicalSearchOperatorEnums.Or,\n parentGroupId: null\n },\n {\n groupId: 3,\n logicalSearchOperator: LogicalSearchOperatorEnums.And,\n parentGroupId: 2\n }\n ];\n }\n\n const searchObject = getSearchObject(\n filterElements,\n 1,\n 200,\n true,\n LogicalSearchOperatorEnums.And,\n filterGroups\n );\n const data = { data: searchObject };\n\n if (rffSearchApiMethod) {\n if (!rffSearchApiMethod.apiMethodId) {\n warnings.push({\n id: uuid(),\n severity: 'warning',\n message: t('Search ReminderFiledFor Method Not Promoted')\n });\n } else {\n const response = await executeQueryAdHoc(\n data,\n rffSearchApiMethod.apiMethodId\n ).catch((e) => {\n setLoading(false);\n });\n\n if (response?.status === 200) {\n const pageList = response.data.pageList;\n if (pageList?.length) {\n remindersList = pageList.map((item) => ({\n ...item.reminder,\n domainObject: item.domainObject,\n filedToType: item.type,\n entityBusinessKey: item.entityBusinessKey\n }));\n }\n } else {\n warnings.push({\n id: uuid(),\n severity: 'error',\n message: t('Could not retrieve reminders')\n });\n }\n }\n }\n // Filter for reminders that belong to any of the domains within the tree\n const treeDomains = tree?.treeStructure.map(\n (node) => node.properties?.catalogReturnObject\n );\n if (treeDomains.length) {\n remindersList = remindersList.filter((reminder) =>\n treeDomains.includes(reminder.domainObject)\n );\n } else {\n remindersList = [];\n }\n setAlertWarnings(warnings);\n setLoading(false);\n sortByDate(remindersList, currentSortDirection);\n },\n [t, user, reminders, sortByDate, currentSortDirection, tree]\n );\n\n const updateRemindersAcknowledgement = useCallback(\n async (reminders) => {\n if (updateReminderApiMethod) {\n const updatedPromises = [];\n reminders.forEach((reminder) => {\n reminder.acknowledged = reminder.checked;\n const data = {\n requestBody: {\n ...reminder\n }\n };\n data['{iD}'] = reminder.id;\n updatedPromises.push(\n executeQueryWithParameters(\n { data },\n updateReminderApiMethod.apiMethodId\n )\n );\n });\n await Promise.all(updatedPromises.map((p) => p.catch((e) => e))).then(\n (responses) => {\n responses.forEach((response) => {\n if (response.status === 200) {\n const entityBusinessKey = response.data.entityBusinessKey;\n const matchingReminder = reminders?.find(\n (nftu) => nftu.value === entityBusinessKey\n );\n if (!matchingReminder) {\n console.warn(`Reminder not updated for all file to entities`);\n }\n }\n });\n }\n );\n } else {\n handleErrorSnackbar(null, 'Update Reminder Method Not Promoted');\n }\n },\n [updateReminderApiMethod, handleErrorSnackbar]\n );\n\n const handleAcknowledgeClick = useCallback(async () => {\n const acknowledgedReminders = reminders?.filter((r) => r.checked);\n if (acknowledgedReminders.length) {\n setButtonProgress(true);\n await updateRemindersAcknowledgement(acknowledgedReminders);\n setButtonProgress(false);\n getReminders(allRemindersRequested, reminderFiledForSearchApiMethod);\n }\n }, [\n reminders,\n getReminders,\n updateRemindersAcknowledgement,\n allRemindersRequested,\n reminderFiledForSearchApiMethod\n ]);\n\n const handleSwitchChange = useCallback(\n async (event) => {\n setLoading(true);\n if (event.target.checked) {\n setAllRemindersRequested(event.target.checked);\n await getReminders(true, reminderFiledForSearchApiMethod);\n } else {\n setAllRemindersRequested(false);\n await getReminders(false, reminderFiledForSearchApiMethod);\n }\n setLoading(false);\n },\n [getReminders, reminderFiledForSearchApiMethod]\n );\n\n // no dependencies in the array because we only want getReminders to run once\n useEffect(() => {\n if (reminderFiledForSearchApiMethod) {\n getReminders(false, reminderFiledForSearchApiMethod);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [reminderFiledForSearchApiMethod]);\n\n return (\n <WidgetCard\n ref={ref}\n // title={'Reminders'}\n hideWidgetName={hideWidgetName}\n headerActions={\n <div className={classes.actions}>\n <FormControlLabel\n control={\n <Switch\n id='udpRecord-RemindersWidget-Switch'\n udprecordid='udpRecord-RemindersWidget-Switch'\n size='small'\n onChange={handleSwitchChange}\n />\n }\n label='All'\n style={{ marginRight: 8 }}\n />\n <FluentIconButton\n id='udpRecord-RemindersWidget-Sort'\n udprecordid='udpRecord-RemindersWidget-Sort'\n icon={SortIcon}\n onClick={sort}\n style={{ marginRight: 4 }}\n />\n <div className={classes.actionButton}>\n <FluentButton\n id='udpRecord-RemindersWidget-Complete'\n udprecordid='udpRecord-RemindersWidget-Complete'\n variant='contained'\n color='secondary'\n onClick={handleAcknowledgeClick}\n >\n {buttonProgress && (\n <CircularProgress\n size={24}\n color='primary'\n className={classes.fabProgress}\n />\n )}\n {t('Complete')}\n </FluentButton>\n </div>\n </div>\n }\n {...other}\n >\n {alertWarnings.length ? (\n alertWarnings.map((warning) => (\n <Alert severity={warning.severity || 'warning'}>\n {warning.message || ''}\n </Alert>\n ))\n ) : (\n <RemindersCard\n reminders={reminders}\n setReminders={setReminders}\n loading={loading}\n onLoadedNodeClick={onLoadedNodeClick}\n getNodeToLoad={getNodeToLoad}\n getIcon={getIcon}\n updateRemindersAcknowledgement={updateRemindersAcknowledgement}\n />\n )}\n\n {children}\n </WidgetCard>\n );\n};\n\nexport default forwardRef(RemindersWidget);\n","import React, { useMemo } from 'react';\nimport { UdpFormsRenderer } from 'udp-react-stencil-component-library';\nimport { useLocation } from 'react-router-dom';\nimport { useUser } from '../../utilities/auth/useUser';\nimport { ConfigService } from 'udp-react-stencil-component-library';\nimport { useActions } from '../../hooks/useActions';\nimport { acquireAccessToken } from '../../utilities/auth/authActions';\nimport { useSnackbar } from 'notistack';\n\n\nconst useSearchParams = () => {\n const search = useLocation().search;\n\n // when params are populated with an internal redirect, like on a Page menu, the useLocation hook does not get the query params\n // so it will fallback with window.location.search in that case\n return new URLSearchParams(search || window.location.search);\n}\nconst UdpPrivateForm = (props) => {\n const user = useUser();\n const { enqueueSnackbar, closeSnackbar } = useSnackbar();\n const { triggerAction } = useActions();\n const queryParams = useSearchParams();\n\n const formId = useMemo(() => {\n return queryParams.get('udpf_formId');\n }, [queryParams]);\n\n const versionId = useMemo(() => {\n return queryParams.get('udpf_version');\n }, [queryParams]);\n\n const submissionId = useMemo(() => {\n return queryParams.get('udpf_submissionId');\n }, [queryParams]);\n\n\n\n return (\n <UdpFormsRenderer\n formId={formId}\n triggerAction={triggerAction}\n version={versionId}\n submissionId={submissionId}\n getUserCallback={() => user}\n enqueueSnackbar={enqueueSnackbar}\n closeSnackbar={closeSnackbar}\n />\n );\n};\nexport default UdpPrivateForm;\n","import React, { useMemo, useState } from 'react';\nimport { UdpFormsList } from 'udp-react-stencil-component-library';\nimport { useUser } from '../../utilities/auth/useUser';\nimport { useTenant } from '../../utilities/tenant/useTenant';\nimport { useHistory } from 'react-router-dom';\n\nconst UdpFormsListPage = (props) => {\n const user = useUser();\n const tenant = useTenant();\n const history = useHistory();\n\n const tenantId = tenant?.activeTenant?.tenantId;\n\n return (\n <div>\n <UdpFormsList\n history={history}\n />\n </div>\n );\n};\nexport default UdpFormsListPage;\n","import React, { useEffect, useMemo, useState } from 'react';\nimport { useLocation, useHistory } from 'react-router-dom';\nimport { UdpFormsBuilder } from 'udp-react-stencil-component-library';\nimport { useUser } from '../../utilities/auth/useUser';\nimport { useTenant } from '../../utilities/tenant/useTenant';\nimport { useSnackbar } from 'notistack';\n\nconst UdpFormsBuilderPage = () => {\n const user = useUser();\n const tenant = useTenant();\n const location = useLocation(); // detects changes in the URL\n const history = useHistory();\n const { enqueueSnackbar, closeSnackbar } = useSnackbar();\n\n // Store search params in state so re-render happens when they change\n const [searchParams, setSearchParams] = useState(() => new URLSearchParams(location.search));\n\n // Recompute search params on location change\n useEffect(() => {\n setSearchParams(new URLSearchParams(location.search));\n }, [location.search]);\n\n // Extract values from searchParams\n const formId = searchParams.get('udpf_formId');\n const version = searchParams.get('udpf_version');\n const callbackUrl = searchParams.get('udpf_callback_url');\n\n return (\n <div>\n <UdpFormsBuilder\n formId={formId}\n version={version}\n enqueueSnackbar={enqueueSnackbar}\n closeSnackbar={closeSnackbar}\n history={history}\n />\n </div>\n );\n};\n\nexport default UdpFormsBuilderPage;\n","import React from 'react';\nimport { ImportDataFromFileMapping } from '../fileImportMapping/ImportDataFromFileMapping';\n\nconst UdpImportFromFileMappingPage = props => {\n return <ImportDataFromFileMapping/>\n};\n\nexport default UdpImportFromFileMappingPage;\n","export enum AuditEventTypeEnums {\n Create_Domain = 1,\n Update_Domain = 2,\n Delete_Domain = 3,\n}\n","import { DateTime } from 'luxon'\n\nexport function formatDateLong(value) {\n try {\n let date = new Date(value);\n const day = date.toLocaleString('default', { day: '2-digit' });\n const month = date.toLocaleString('default', { month: 'short' });\n const year = date.toLocaleString('default', { year: 'numeric' });\n const dayOfWeek = date.toLocaleString('default', { weekday: 'long' });\n return `${day} ${month}, ${year} (${dayOfWeek})`;\n } catch (error) {\n return '';\n }\n}\n\nexport function formatDate(value, formatStr = '') {\n try {\n let date = new Date(value);\n const day = date.toLocaleString('default', { day: '2-digit' });\n const month = date.toLocaleString('default', { month: 'short' });\n const year = date.toLocaleString('default', { year: 'numeric' });\n\n switch (formatStr.toLowerCase()) {\n case 'mon dd, yyyy':\n return `${day} ${month}, ${year}`;\n case 'dd/mm/yyyy':\n return `${date.getDate()}/${date.getMonth() + 1}/${date.getFullYear()}`;\n case 'yyyy-mm-dd':\n return date.toISOString().split('T')[0];\n default:\n return '';\n }\n } catch (error) {\n return '';\n }\n}\n\nexport function getDaysDiff(dateOne, dateTwo) {\n const d1 = new Date(dateOne);\n const d2 = new Date(dateTwo);\n const diff = d2.getTime() - d1.getTime();\n\n return diff / (1000 * 60 * 60 * 24);\n}\n\n/**\n * Creates a Date object based on an ISO 8601 date string.\n * @param dateString A ISO 8601 date string. EX: yyyy-MM-ddThh:mm:ss[Z|offset]\n * @returns A date object, or null if the format was invalid.\n */\nexport const getDateFromString = (dateString) => {\n if (!dateString || dateString.length === 0) {\n return null;\n }\n\n const date = DateTime.fromISO(dateString);\n\n return date ? date.toJSDate() : null;\n};\n\n/**\n * Formats a date string by converting it to a date in the specified time zone,\n * stripping out the time element and returning a localized date string.\n * @param date A Date or ISO 8601 date string. EX: yyyy-MM-ddThh:mm:ss[Z|offset]\n * @param timeZone An IANA time zone id. If supplied, convert the date into the specified time zone,\n * otherwise convert to local browser time.\n * @returns A date string without time based on the supplied time zone and the\n * user's browser locale settings.\n */\nexport const getLocalizedDateString = (date, timeZone = 'local') => {\n const convertedDate = date instanceof Date ? date : getDateFromString(date);\n\n return convertedDate\n ? DateTime.fromJSDate(convertedDate, { zone: timeZone }).toLocaleString(DateTime.DATE_SHORT)\n : '';\n};\n\n/**\n * Converts a date string to a date in the specified timezone,\n * and returning a converted date with the localized date and time.\n * @param date A Date or ISO 8601 date string. EX: yyyy-MM-ddThh:mm:ss[Z|offset]\n * @param timeZone If supplied, convert the date into the specified IANA time zone,\n * otherwise convert to local browser time.\n * @returns A converted date and time based on the user's browser locale settings.\n */\nexport const getLocalizedDateTime = (date, timeZone = 'local') => {\n const convertedDate = date instanceof Date ? date : getDateFromString(date);\n if (convertedDate === null) {\n return '';\n }\n const convertedDateTime = DateTime.fromJSDate(convertedDate, { zone: timeZone });\n\n return convertedDateTime;\n};\n\n/**\n * Formats a date string by converting it to a date in the specified timezone,\n * and returning a string with the localized date and time.\n * @param date A Date or ISO 8601 date string. EX: yyyy-MM-ddThh:mm:ss[Z|offset]\n * @param delimiter If supplied, split the date and time by this string when returned.\n * @param timeZone If supplied, convert the date into the specified IANA time zone,\n * otherwise convert to local browser time.\n * @returns A date and time string based on the user's browser locale settings.\n */\nexport const getLocalizedDateTimeString = (\n date,\n delimiter = null,\n timeZone = 'local',\n includeOffset = false,\n) => {\n const convertedDate = date instanceof Date ? date : getDateFromString(date);\n if (convertedDate === null) {\n return '';\n }\n const convertedDateTime = DateTime.fromJSDate(convertedDate, { zone: timeZone });\n\n if (delimiter !== null) {\n return (\n convertedDateTime.toLocaleString(DateTime.DATE_SHORT) +\n delimiter +\n convertedDateTime.toLocaleString(DateTime.TIME_WITH_SECONDS) +\n (includeOffset ? ' ' + convertedDateTime.offsetNameShort : '')\n );\n } else {\n return (\n convertedDateTime.toLocaleString(DateTime.DATETIME_SHORT_WITH_SECONDS) +\n (includeOffset ? ' ' + convertedDateTime.offsetNameShort : '')\n );\n }\n};\n\n/**\n * Formats a date string by converting it to a date in the specified time zone,\n * and returning a string as the localized time.\n * @param date A Date or ISO 8601 date string. EX: yyyy-MM-ddThh:mm:ss[Z|offset]\n * @param timeZone An IANA time zone id. If supplied, convert the date into the specified time zone,\n * otherwise convert to local browser time.\n * @returns A time string without the date based on the supplied time zone and user's\n * browser locale settings.\n */\nexport const getLocalizedTimeString = (date, timeZone = 'local') => {\n const convertedDate = date instanceof Date ? date : getDateFromString(date);\n\n return convertedDate\n ? DateTime.fromJSDate(convertedDate, { zone: timeZone }).toLocaleString(\n DateTime.TIME_WITH_SECONDS,\n )\n : '';\n};\n","import { IANAZone } from 'luxon';\nimport { useCallback } from 'react';\nimport {\n getLocalizedDateString,\n getLocalizedDateTimeString,\n} from '../../UI/widgets/utils/dateUtils';\nimport { useAuthedUser } from '../../utilities/auth/useAuthedUser'\n\n/**\n * Gets a function that can be used to convert a date or\n * ISO 8601 date string (EX: yyyy-MM-ddThh:mm:ss[Z|offset])\n * to a localized date string without time in the specified IANA time zone.\n * @param timeZone An IANA time zone to convert the date to before returning as a string.\n * @returns A function to convert a date to a localized string.\n */\n\nexport const useGetLocalizedDateString = (timeZone) => {\n const user = useAuthedUser();\n\n const getDateString = useCallback(\n (date) => {\n const validTimeZone =\n timeZone !== 'local' &&\n (timeZone === user?.additionalProperties?.activeUtilityTimeZone ||\n IANAZone.isValidZone(timeZone))\n ? timeZone\n : 'local'; // IANAZone.isValidZone is very slow, skip it if known valid timeZone passed\n return getLocalizedDateString(date, validTimeZone);\n },\n [user, timeZone],\n );\n\n return getDateString;\n};\n\n/**\n * Gets a function that can be used to convert a date or\n * ISO 8601 date string (EX: yyyy-MM-ddThh:mm:ss[Z|offset])\n * to a localized date time string in the specified IANA time zone.\n * @param timeZone The IANA time zone to convert the date before converting to\n * a localized string.\n * @param includeTimeZoneOffset If true, include the time zone offset in the localized string.\n * @returns A function to convert a date to a localized string.\n */\n\nexport const useGetLocalizedDateTimeString = (timeZone, includeTimeZoneOffset = false) => {\n const user = useAuthedUser();\n\n const getDateTimeString = useCallback(\n (date, delimiter = null) => {\n const validTimeZone =\n timeZone !== 'local' &&\n (timeZone === user?.additionalProperties?.activeUtilityTimeZone ||\n IANAZone.isValidZone(timeZone))\n ? timeZone\n : 'local'; // IANAZone.isValidZone is very slow, skip it if known valid timeZone passed\n return getLocalizedDateTimeString(date, delimiter, validTimeZone, includeTimeZoneOffset);\n },\n [user, timeZone, includeTimeZoneOffset],\n );\n\n return getDateTimeString;\n};\n\n/**\n * Gets a function that can be used to convert a date or\n * ISO 8601 date string (EX: yyyy-MM-ddThh:mm:ss[Z|offset])\n * to a localized date time string in the current user's time zone.\n * @param includeTimeZoneOffset If true, include the time zone offset in the localized string.\n * @returns A function to convert a date to a localized string.\n */\n\nexport const useGetLocalizedUserDateTimeString = (includeTimeZoneOffset = false) => {\n const user = useAuthedUser();\n\n const getDateTimeString = useCallback(\n (date, delimiter = null) => {\n return getLocalizedDateTimeString(\n date,\n delimiter,\n user?.additionalProperties?.timeZone,\n includeTimeZoneOffset,\n );\n },\n [user, includeTimeZoneOffset],\n );\n\n return getDateTimeString;\n};\n","import React, { useEffect, useMemo, useState } from 'react';\nimport { SideSheet } from '../../UI/surfaces/SideSheet';\nimport { useTranslation } from 'react-i18next';\nimport { FluentTextField } from '../../UI/inputs/textField/FluentTextField';\nimport { GridRow } from '../../layout/GridRow';\nimport { GridUnit } from '../../layout/GridUnit';\nimport { AmbientCard } from '../../UI/surfaces/cards/AmbientCard';\nimport { makeStyles, Box } from \"@material-ui/core\";\nimport { AuditEventTypeEnums } from '../../enums/auditEventEnums';\nimport ReactJson from 'react-json-view';\nimport { LinearProgress } from '../../UI/loading/LinearProgress';\nimport { useGetLocalizedUserDateTimeString } from '../utilities/dateLocalizationHooks';\nimport { UdpEnums } from '../../enums/unitySystemEnums';\nimport { executeQueryWithParameters, getBaseMethod } from '../utilities/methodUtils';\n\nconst useStyles = makeStyles((theme) => ({\n textField: {\n marginTop: theme.spacing(0),\n },\n loadingBar: {\n top: theme.spacing(-2),\n marginLeft: theme.spacing(-2),\n marginRight: theme.spacing(-2),\n },\n}));\n\nconst UdpAuditEventSidesheet = props => {\n const {\n auditEvent,\n isSideSheetOpen,\n handleSideSheet,\n promotedEntities,\n sheetProps,\n } = props;\n\n const { t } = useTranslation();\n const classes = useStyles();\n const getLocalizedDateTimeString = useGetLocalizedUserDateTimeString();\n const [auditEventDetail, setAuditEventDetail] = React.useState({});\n const [loading, setLoading] = useState(false);\n\n const auditEventDetailGetApiMethod = useMemo(() => {\n return getBaseMethod(\n UdpEnums.Udp_Audit_Event_Detail,\n 'unityBaseGetMethod',\n promotedEntities\n );\n }, [promotedEntities]);\n\n const onCloseSideSheet = () => {\n handleSideSheet(false);\n }\n\n useEffect(() => {\n const getAuditEventDetail = async () => {\n let auditEventDetail = {};\n const data = {};\n try {\n if (auditEventDetailGetApiMethod && auditEvent) {\n setLoading(true);\n data['{auditEventId}'] = auditEvent.id;\n const response = await executeQueryWithParameters(\n { data },\n auditEventDetailGetApiMethod.apiMethodId\n );\n if (response?.status === 200) {\n auditEventDetail = response.data;\n setAuditEventDetail(auditEventDetail);\n }\n }\n } finally {\n setLoading(false);\n }\n };\n getAuditEventDetail();\n }, [auditEvent, auditEventDetailGetApiMethod]);\n\n return (\n <SideSheet\n {...sheetProps}\n open={isSideSheetOpen}\n onClose={onCloseSideSheet}\n title={t(`Audit Event Details`)}\n width={800}\n color='primary'\n >\n {loading && (\n <LinearProgress className={classes.loadingBar} color=\"secondary\" />\n )}\n <GridRow>\n <GridUnit ratio=\"1:1\" width=\"100%\">\n <AmbientCard title={t('Event')} fullWidth={true} subCard>\n <>\n <FluentTextField\n className={classes.textField}\n id=\"auditEventTypeName\"\n label={t('Event Type')}\n value={auditEvent?.auditEventTypeName || ''}\n disabled={true}\n />\n <FluentTextField\n className={classes.textField}\n id=\"auditEventUserDisplayName\"\n label={t('User')}\n value={auditEvent?.userDisplayName || ''}\n disabled={true}\n />\n <FluentTextField\n className={classes.textField}\n id=\"auditEventDomain\"\n label={t('Description')}\n value={auditEvent?.domain || ''}\n disabled={true}\n />\n <FluentTextField\n className={classes.textField}\n id=\"auditEventCreatedOn\"\n label={t('Created On')}\n value={getLocalizedDateTimeString(auditEvent?.createdOn ?? '')}\n disabled={true}\n />\n <Box>\n {(auditEvent?.typeCode === AuditEventTypeEnums.Update_Domain ||\n auditEvent?.typeCode === AuditEventTypeEnums.Delete_Domain) &&\n <ReactJson\n src={auditEventDetail?.oldObj ? JSON.parse(auditEventDetail?.oldObj) : {}}\n name={t('Old Details')}\n displayDataTypes={false}\n displayObjectSize={false}\n />\n }\n {(auditEvent?.typeCode === AuditEventTypeEnums.Update_Domain ||\n auditEvent?.typeCode === AuditEventTypeEnums.Create_Domain) &&\n <ReactJson\n src={auditEventDetail?.newObj ? JSON.parse(auditEventDetail?.newObj) : {}}\n name={t('New Details')}\n displayDataTypes={false}\n displayObjectSize={false}\n />\n }\n </Box>\n </>\n </AmbientCard>\n </GridUnit>\n </GridRow>\n </SideSheet>\n )\n}\n\nexport default UdpAuditEventSidesheet;\n","import { DateTime, IANAZone } from 'luxon';\nimport { useMemo } from 'react';\nimport { getDateFromString } from '../../UI/widgets/utils/dateUtils';\nimport { GridExcelStyleEnums } from '../../enums/unitySystemEnums';\nimport { useAuthedUser } from '../../utilities/auth/useAuthedUser'\nimport { useGetLocalizedDateString, useGetLocalizedDateTimeString } from './dateLocalizationHooks';\n\n\nexport const useDateStringColumnDef = (\n includeTime = false,\n timeZone = null,\n includeTimeZoneOffset = false,\n) => {\n const user = useAuthedUser();\n\n const zone = useMemo(() => {\n const tz = timeZone ?? user?.additionalProperties?.timeZone ?? 'local';\n const validTimeZone =\n tz !== 'local' &&\n (tz === user?.additionalProperties?.timeZone || IANAZone.isValidZone(tz))\n ? tz\n : 'local'; // IANAZone.isValidZone is very slow, skip it if known valid timeZone passed\n return validTimeZone;\n }, [timeZone, user]);\n\n const getLocalizedDateTimeString = useGetLocalizedDateTimeString(zone, includeTimeZoneOffset);\n const getLocalizedDateString = useGetLocalizedDateString(zone);\n\n const columnDef = useMemo(() => {\n return !user\n ? {}\n : ({\n valueFormatter: (params) => {\n if (!params) {\n return '';\n }\n if (includeTime) {\n return getLocalizedDateTimeString(params.value);\n } else {\n return getLocalizedDateString(params.value);\n }\n },\n cellClass: includeTime\n ? GridExcelStyleEnums.DateTimeShortWithSeconds\n : GridExcelStyleEnums.DateShort,\n filter: 'agDateColumnFilter',\n filterParams: {\n comparator: function (filterLocalDateAtMidnight, cellValue) {\n const cellDate = getDateFromString(cellValue);\n if (!cellDate) {\n return null;\n }\n\n // Assume date picker is in the same time zone that we're displaying dates in so that the results make sense to the user\n const filterDateTimeMidnight = DateTime.fromJSDate(filterLocalDateAtMidnight).setZone(\n zone,\n { keepLocalTime: true },\n );\n const cellDateTimeMidnight = DateTime.fromJSDate(cellDate, { zone: zone }).set({\n hour: 0,\n minute: 0,\n second: 0,\n millisecond: 0,\n });\n\n if (cellDateTimeMidnight < filterDateTimeMidnight) {\n return -1;\n } else if (cellDateTimeMidnight > filterDateTimeMidnight) {\n return 1;\n } else {\n return 0;\n }\n },\n buttons: ['apply', 'reset'],\n closeOnApply: true,\n suppressAndOrCondition: true,\n filterOptions: ['equals', 'lessThan', 'greaterThan', 'inRange'],\n },\n });\n }, [includeTime, getLocalizedDateString, getLocalizedDateTimeString, user, zone]);\n\n return columnDef;\n};\n","import React, { useCallback, useEffect, useState, useMemo, useRef } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { makeStyles } from '@material-ui/core';\nimport { AmbientGridTemplate } from '../../UI/templates/AmbientGridTemplate';\nimport { useAgGridApi } from '../../utilities/aggrid/AgTable';\nimport { debounce } from 'lodash';\nimport { LogicalSearchOperatorEnums, UdpEnums } from '../../enums/unitySystemEnums';\nimport { LinearProgress } from '../../UI/loading/LinearProgress';\nimport { getSearchObject } from '../../utilities/search/SearchUtilities';\nimport { ViewIcon, RefreshIcon } from '@fluentui/react-icons';\nimport UdpAuditEventSidesheet from './UdpAuditEventSidesheet';\nimport { ActionsRenderer } from '../../UI/templates/ui/renderers/ActionsRenderer';\nimport { useDateStringColumnDef } from '../utilities/useDateStringColumnDef';\nimport { executeQueryAdHoc, getBaseMethod } from '../utilities/methodUtils';\nimport { useCatalogStore } from '../../stores/catalogStore';\nimport { useHandleAxiosSnackbar } from '../../utilities/apiHelpers';\nimport { SearchMethodUdpGrid } from '../../UI';\nimport { usePromotedMethodEntity } from '../../hooks';\n\nconst PAGE_SIZE = 15;\n\nconst baseSearchPayload = {\n pageNumber: 1,\n pageSize: PAGE_SIZE,\n filterElements: [],\n filterGroups: [],\n orderElements: [],\n groupingType: '',\n groupProperty: [],\n groupOperationList: [],\n eagerLoad: false,\n logicalSearchOperator: 1,\n};\n\nconst useStyles = makeStyles(theme => ({\n loadingBar: {\n bottom: theme.spacing(-0.5),\n marginLeft: theme.spacing(0.5),\n marginRight: theme.spacing(0.5),\n },\n}));\n\nconst UdpAuditEventsPage = (props) => {\n const { params } = props;\n\n // Hooks\n const { gridApi, gridColumnApi, onGridReady } = useAgGridApi();\n const { t } = useTranslation();\n const classes = useStyles();\n const dateStringColumnDef = useDateStringColumnDef(true);\n const { handleErrorSnackbar } = useHandleAxiosSnackbar();\n const gridApiRef = useRef(null);\n\n // States\n const [searchQuery, setSearchQuery] = useState('');\n const [displayProgressBar, setDisplayProgressBar] = useState(false);\n const [selectedAuditEvent, setSelectedAuditEvent] = useState(null);\n const [viewSideSheetOpen, setViewSideSheetOpen] = useState(false);\n const [auditEventTypes, setAuditEventTypes] = useState([]);\n const [searchObject, setSearchObject] = useState(baseSearchPayload);\n\n const currentApiCatalogId = useCatalogStore(\n (state) => state.currentApiCatalogId\n );\n\n const promotedMethodEntitiesMap = useCatalogStore(\n (state) => state.promotedMethodEntitiesMap\n );\n\n const promotedEntities = useMemo(() => {\n if (!currentApiCatalogId || !promotedMethodEntitiesMap) {\n return null;\n }\n return promotedMethodEntitiesMap[currentApiCatalogId] || [];\n }, [promotedMethodEntitiesMap, currentApiCatalogId]);\n\n const auditEventTypeGetAllApiMethod = useMemo(() => {\n return getBaseMethod(\n UdpEnums.Udp_Audit_Event_Type,\n 'unityBaseGetAllMethod',\n promotedEntities\n );\n }, [promotedEntities]);\n\n const auditEventSearchApiMethod = useMemo(() => {\n return getBaseMethod(\n UdpEnums.Udp_Audit_Event,\n 'unityBaseSearchMethod',\n promotedEntities\n );\n }, [promotedEntities]);\n\n const getAuditEventTypeName = useCallback(auditEventTypeCode => {\n if (!auditEventTypes) return '';\n const matchingAuditEventType = auditEventTypes.find(\n auditEventType => auditEventType.code === auditEventTypeCode\n );\n return matchingAuditEventType?.name || '';\n }, [auditEventTypes]);\n\n const handleSideSheet = useCallback((isOpen, auditEvent) => {\n setViewSideSheetOpen(isOpen);\n setSelectedAuditEvent(auditEvent);\n }, []);\n\n const columnDefs = useMemo(() => {\n return [\n {\n headerName: t('Event Type'),\n field: 'UdpAuditEventUdpAuditEventType.Name',\n valueGetter: params => getAuditEventTypeName(params.data.typeCode),\n resizable: true,\n sortable: false,\n },\n {\n headerName: t('User'),\n field: 'userDisplayName',\n resizable: true,\n sortable: false,\n },\n {\n headerName: t('Description'),\n field: 'domain',\n resizable: true,\n sortable: false,\n },\n {\n headerName: t('Created On'),\n field: 'createdOn',\n resizable: true,\n sortable: true,\n ...dateStringColumnDef\n },\n {\n field: 'actions',\n headerName: t('Details'),\n cellRenderer: 'actionsRenderer',\n cellRendererParams: {\n actionList: [\n {\n id: 0,\n title: t('View'),\n iconName: 'view',\n handleOnClick: (e, auditEvent) =>\n handleSideSheet(true, {...auditEvent?.data, auditEventTypeName: getAuditEventTypeName(auditEvent?.data?.typeCode)}),\n disabled: false,\n },\n\n ],\n },\n suppressMenu: true,\n sortable: false,\n filter: false,\n },\n ];\n }, [getAuditEventTypeName]);\n\n const gridFunctions = [\n { name: 'chipFilter' },\n { name: 'agGridExport' },\n { name: 'agGridSizeColumnsToFit' },\n { name: 'agGridAutoSizeColumns' },\n { name: 'agGridResetColumns' },\n { name: 'agGridHideShowColumns' },\n ];\n\n const gridOptions = useMemo(() => {\n return {\n pagination: true,\n };\n }, []);\n\n useEffect(() => {\n const getAuditEventTypes = async () => {\n let types = [];\n if (auditEventTypeGetAllApiMethod) {\n const response = await executeQueryAdHoc(\n { data: {}},\n auditEventTypeGetAllApiMethod.apiMethodId\n );\n if (response?.status === 200) {\n types = response.data;\n }\n }\n setAuditEventTypes(types);\n };\n getAuditEventTypes();\n }, [auditEventTypeGetAllApiMethod]);\n\n const handleGridApiCallback = api => {\n gridApiRef.current = api;\n };\n\n const searchMethodConfig = useMemo(() => {\n return {\n apiMethodId: auditEventSearchApiMethod?.apiMethodId,\n customSearchObject: searchObject,\n };\n }, [auditEventSearchApiMethod]);\n\n return (\n <>\n {(displayProgressBar) && (<LinearProgress className={classes.loadingBar} color=\"secondary\" />)}\n <SearchMethodUdpGrid\n searchMethodConfig={searchMethodConfig}\n columnDefs={columnDefs}\n gridHeaderConfig={{\n title: t('Audit Events'),\n }}\n gridOptions={gridOptions}\n gridApiCallback={handleGridApiCallback}\n gridFunctions={gridFunctions}\n />\n <UdpAuditEventSidesheet\n auditEvent={selectedAuditEvent}\n isSideSheetOpen={viewSideSheetOpen}\n handleSideSheet={handleSideSheet}\n promotedEntities={promotedEntities}\n />\n </>\n )\n}\n\n export default UdpAuditEventsPage;\n","import * as UdpNotesPage from './UdpNotesPage';\nimport * as UdpVerticalManagementPage from './UdpVerticalManagementPage';\nimport * as UdpGridPanelManagementPage from './UdpGridPanelManagementPage';\nimport * as UdpMaintenanceEnginePage from './UdpMaintenanceEnginePage';\nimport * as UdpInquiryMaintenanceEnginePage from './UdpInquiryMaintenanceEnginePage';\nimport * as UdpReportsPage from './UdpReportsPage';\nimport * as DonutChartWidget from '../../UI/widgets/library/DonutChartWidget';\nimport * as SparklineWidget from '../../UI/widgets/library/SparklineWidget';\nimport * as ProgressBarWidget from '../../UI/widgets/library/ProgressBarWidget';\nimport * as RecentlyLoadedNodesWidget from '../../UI/widgets/library/RecentlyLoadedNodesWidget';\nimport * as ChatUDP from './ChatUDP';\nimport * as UdpDataBrowserPage from './UdpDataBrowserPage';\nimport * as UdpRemindersPage from './UdpRemindersPage';\nimport * as RemindersWidget from '../../UI/widgets/library/RemindersWidget';\nimport * as UdpPublicForm from './UdpPublicForm'\nimport * as UdpPrivateForm from './UdpPrivateForm'\nimport * as UdpFormsListPage from './UdpFormsListPage';\nimport * as UdpFormsBuilderPage from './UdpFormsBuilderPage';\nimport * as UdpImportFromFileMappingPage from './UdpImportFromFileMappingPage'\nimport * as UdpAuditEventsPage from './UdpAuditEventsPage'\n\nexport const UdpPages = {\n UdpNotesPage,\n UdpVerticalManagementPage,\n UdpGridPanelManagementPage,\n UdpMaintenanceEnginePage,\n UdpInquiryMaintenanceEnginePage,\n UdpReportsPage,\n DonutChartWidget,\n SparklineWidget,\n ProgressBarWidget,\n RecentlyLoadedNodesWidget,\n ChatUDP,\n UdpDataBrowserPage,\n UdpRemindersPage,\n RemindersWidget,\n UdpPublicForm,\n UdpPrivateForm,\n UdpFormsBuilderPage,\n UdpFormsListPage,\n UdpImportFromFileMappingPage,\n UdpAuditEventsPage\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"udpPages-DbrOXPn2.js","names":["t","params","apiMutate","products","IconLibrary","apiMutate","UdpVerticalManagementSidesheet","apiMutate","grid","panel","UdpGridPanelManagementSidesheet","useStyles","useStyles","FluentTrendArrow","value","layout","FluentStatsSnippet","WidgetCard","ChartSummaryToggle","layout","useStyles","WidgetCard","FluentStatsSnippet","useStyles","FluentDisplayNumber","useStyles","FluentStatNumbers","useStyles","FluentStatNumber","useStyles","WidgetCard","FluentPrimaryStatNumber","FluentSecondaryStatNumber","WidgetCard","apiMutate","entityName","uuid","params","t","useStyles","uuid","reminders","WidgetCard","useStyles","getLocalizedDateTimeString","auditEventDetail","LinearProgress","getLocalizedDateTimeString","getLocalizedDateString","params","LinearProgress","UdpAuditEventSidesheet"],"sources":["../src/udp/pages/UdpNotesPage.jsx","../src/udp/pages/UdpVerticalManagementSidesheet.jsx","../src/udp/pages/UdpVerticalManagementPage.jsx","../src/udp/pages/UdpGridPanelManagementSidesheet.jsx","../src/udp/pages/UdpGridPanelManagementPage.jsx","../src/udp/pages/UdpInquiryMaintenanceEnginePage.jsx","../src/udp/pages/UdpReportsPage.jsx","../src/UI/widgets/FluentComponents/atoms/FluentTrendArrow.jsx","../src/UI/widgets/FluentComponents/atoms/FluentStatsSnippet.jsx","../src/UI/widgets/FluentComponents/ChartSummaryToggle.jsx","../src/UI/widgets/utils/ConvertISODate.js","../src/UI/widgets/library/DonutChartWidget.jsx","../src/UI/widgets/library/SparklineWidget.jsx","../src/UI/widgets/FluentComponents/molecules/FluentStatNumber.jsx","../src/UI/widgets/FluentComponents/molecules/FluentPrimaryStatNumber.jsx","../src/UI/widgets/FluentComponents/molecules/FluentSecondaryStatNumber.jsx","../src/UI/widgets/library/ProgressBarWidget.jsx","../src/UI/widgets/library/RecentlyLoadedNodesWidget.jsx","../src/udp/pages/ChatUDP.jsx","../src/udp/pages/UdpDataBrowserPage.jsx","../src/udp/pages/UdpRemindersPage.jsx","../src/UI/widgets/library/RemindersWidget.jsx","../src/udp/pages/UdpPrivateForm.jsx","../src/udp/pages/UdpFormsListPage.jsx","../src/udp/pages/UdpFormsBuilderPage.jsx","../src/udp/pages/UdpImportFromFileMappingPage.jsx","../src/enums/auditEventEnums.ts","../src/UI/widgets/utils/dateUtils.js","../src/udp/utilities/dateLocalizationHooks.jsx","../src/udp/pages/UdpAuditEventSidesheet.jsx","../src/udp/utilities/useDateStringColumnDef.js","../src/udp/pages/UdpAuditEventsPage.jsx","../src/udp/pages/udpPages.js"],"sourcesContent":["import React, {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState\n} from 'react';\nimport { AmbientGridTemplate } from '../../UI/templates/AmbientGridTemplate';\nimport { getSearchObject } from '../../utilities/search/SearchUtilities';\nimport { executeQueryAdHoc, getBaseMethod } from '../utilities/methodUtils';\nimport { UdpEnums } from '../../enums/unitySystemEnums';\nimport { useActionState } from '../../hooks/useActions';\nimport { useHandleAxiosSnackbar } from '../../utilities/apiHelpers';\nimport { useTranslation } from 'react-i18next';\nimport { EditIcon, ViewIcon } from '@fluentui/react-icons';\nimport { NotesScreen } from '../../notes/NotesScreen';\nimport { ActionsRenderer } from '../../UI/templates/ui/renderers/ActionsRenderer';\nimport { SideSheet } from '../../UI/surfaces/SideSheet';\nimport { useActions } from '../../hooks/useActions';\nimport { SplitScreenTypeEnums } from '../../enums/unitySystemEnums';\nimport { useUser } from '../../utilities/auth/useUser';\n\nconst UdpNotesPage = (props) => {\n const { params } = props;\n const { nodeObj, manytoManyNodeObjKey } = params;\n const [notes, setNotes] = useState([]);\n const [typeOptions, setTypeOptions] = useState([]);\n const [loading, setLoading] = useState(false);\n const [sheetOpen, setSheetOpen] = useState(false);\n const [noteId, setNoteId] = useState('');\n const { openSplitScreen } = useActions();\n const actionState = useActionState();\n const { catalogPromotedEntities } = actionState;\n const { handleErrorSnackbar } = useHandleAxiosSnackbar();\n const { t } = useTranslation();\n const formRef = useRef(null);\n const user = useUser();\n\n const noteFiledForSearchApiMethod = useMemo(() => {\n return getBaseMethod(\n UdpEnums.Udp_Note_Filed_For,\n 'unityBaseSearchMethod',\n catalogPromotedEntities\n );\n }, [catalogPromotedEntities]);\n\n const noteTypeGetAllApiMethod = useMemo(() => {\n return getBaseMethod(\n UdpEnums.Udp_Note_Type,\n 'unityBaseGetAllMethod',\n catalogPromotedEntities\n );\n }, [catalogPromotedEntities]);\n\n const getNotes = useCallback(async () => {\n if (!nodeObj) {\n return [];\n }\n let notesList = [];\n setLoading(true);\n const filterElements = [\n {\n searchField: 'entityBusinessKey',\n searchValue: manytoManyNodeObjKey\n ? nodeObj[manytoManyNodeObjKey]?.businessObjectKey\n : nodeObj?.businessObjectKey,\n searchOperator: '='\n }\n ];\n const searchObject = getSearchObject(filterElements, 1, 200, true);\n const data = { data: searchObject };\n\n if (noteFiledForSearchApiMethod) {\n const response = await executeQueryAdHoc(\n data,\n noteFiledForSearchApiMethod.apiMethodId\n );\n\n if (response?.status === 200) {\n const pageList = response.data.pageList;\n if (pageList?.length) {\n notesList = pageList.map((item) => item.note);\n }\n } else {\n handleErrorSnackbar(null, t('Could not retrieve notes'));\n }\n } else {\n handleErrorSnackbar(null, t('Search NoteFiledFor Method Not Promoted'));\n }\n setLoading(false);\n setNotes(notesList);\n }, [\n noteFiledForSearchApiMethod,\n handleErrorSnackbar,\n nodeObj,\n manytoManyNodeObjKey,\n t,\n user\n ]);\n\n const openSheet = useCallback((value) => {\n setNoteId(value?.id || '');\n setSheetOpen(true);\n }, []);\n\n const closeSheet = useCallback(() => {\n setNoteId('');\n setSheetOpen(false);\n }, []);\n\n const handleEditPage = useCallback(\n (value) => {\n openSplitScreen({\n open: true,\n action: null,\n type: SplitScreenTypeEnums.Notes,\n params: { id: value?.id || '', reloadNotes: getNotes }\n });\n },\n [openSplitScreen, getNotes]\n );\n\n const getType = useCallback(\n (params) => {\n const type = typeOptions.find((t) => t.code === params.data.typeCode);\n return type?.name || '';\n },\n [typeOptions]\n );\n\n const actionList = useMemo(\n () => [\n {\n id: 1, // Must be unique\n title: t('Note'),\n icon: ViewIcon,\n onClick: openSheet,\n disabled: false\n },\n {\n id: 2, // Must be unique\n title: t('Edit'),\n icon: EditIcon,\n onClick: handleEditPage,\n disabled: false\n }\n ],\n [t, openSheet, handleEditPage]\n );\n\n const columnDefs = [\n {\n headerName: 'Date',\n field: 'createdOn',\n resizable: true,\n sortable: true\n },\n {\n headerName: 'Subject',\n field: 'subject',\n resizable: true,\n sortable: true\n },\n {\n headerName: 'Note',\n field: 'content',\n resizable: true,\n sortable: true,\n valueGetter: (params) => params.data.content.replace(/(<([^>]+)>)/gi, '')\n },\n {\n headerName: 'Type',\n field: 'typeCode',\n resizable: true,\n sortable: true,\n valueGetter: getType\n },\n {\n headerName: 'Created By',\n field: 'userDisplayName',\n resizable: true,\n sortable: true\n },\n {\n headerName: '',\n cellRenderer: 'actionsRenderer',\n cellRendererParams: {\n actionList\n },\n pinned: 'right',\n suppressMenu: true,\n sortable: false\n }\n ];\n\n // no dependencies in the array because we only want getNotes to run once\n useEffect(() => {\n getNotes();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n const getTypeOptions = async () => {\n let options = [];\n if (noteTypeGetAllApiMethod) {\n const typesResponse = await executeQueryAdHoc(\n { data: {} },\n noteTypeGetAllApiMethod.apiMethodId\n );\n if (typesResponse?.status === 200) {\n options = typesResponse.data;\n }\n }\n setTypeOptions(options);\n };\n getTypeOptions();\n }, [noteTypeGetAllApiMethod]);\n\n return (\n <>\n <SideSheet\n open={sheetOpen}\n onClose={closeSheet}\n title={t('Note')}\n width={600}\n >\n <NotesScreen\n viewOnly={true}\n id={noteId}\n shortcutContentFinderEnabled={false}\n formRef={formRef}\n />\n </SideSheet>\n <AmbientGridTemplate\n title={'Notes'}\n data={notes}\n columnDefs={columnDefs}\n loading={loading}\n frameworkComponents={{ actionsRenderer: ActionsRenderer }}\n groupingData={[]}\n />\n </>\n );\n};\n\nexport default UdpNotesPage;\n","import React, {\n useCallback,\n useState,\n useMemo,\n useRef,\n useEffect,\n useLayoutEffect\n} from 'react';\nimport {\n TextField,\n Button,\n LinearProgress,\n IconButton\n} from '@material-ui/core';\nimport { Form } from '../../utilities/form/Form';\nimport { Field } from '../../utilities/form/Field';\nimport { SubmitButton } from '../../utilities/form/SubmitButton';\nimport { SideSheet } from '../../UI/surfaces/SideSheet';\nimport { AmbientGridTemplate } from '../../UI/templates/AmbientGridTemplate';\nimport { useActionState } from '../../hooks/useActions';\nimport { useTranslation } from 'react-i18next';\nimport { ActionsRenderer } from '../../UI/templates/ui/renderers/ActionsRenderer';\nimport { FluentCheckbox } from '../../UI/inputs/checkbox/FluentCheckbox';\nimport { UnityFluentIcon } from '../../utilities/iconLibrary/UnityFluentIcon';\nimport {\n findAllParentIds,\n getIconFromName\n} from '../../utilities/tree/TreeUtilities';\nimport { getUnityIconFromName } from '../../utilities/iconLibrary/UnityIconLibrary';\nimport IconLibrary from '../../utilities/iconLibrary/IconLibrary';\nimport { apiMutate } from '../../utilities/useAxiosMutate';\nimport { FormButtons } from '../../utilities/form';\nimport { useHandleAxiosSnackbar } from '../../utilities/apiHelpers';\nimport { ConfigService } from 'udp-react-stencil-component-library';\n\nconst UdpVerticalManagementSidesheet = (props) => {\n const {\n selectedVertical,\n environment,\n associatedProducts,\n isEdit,\n deleteVertical,\n open,\n selectedCatalog,\n closeSidesheet,\n onSubmit,\n ...sheetProps\n } = props;\n const { t } = useTranslation();\n const [loading, setLoading] = useState(false);\n const actionState = useActionState();\n const [displayedIcon, setDisplayedIcon] = useState({\n name: 'StatusCircleQuestionMarkIcon',\n color: '',\n type: ''\n });\n const [products, setProducts] = useState([]);\n const [openIconLibrary, setOpenIconLibrary] = useState(false);\n\n const [selectedProductIds, setSelectedProductIds] = useState([]);\n const [checkboxValues, setCheckboxValues] = useState([]);\n const [submitButtonDisabled, setSubmitButtonDisabled] = useState(true);\n const selectedProductIdsRef = useRef();\n selectedProductIdsRef.current = selectedProductIds;\n const displayedIconRef = useRef();\n displayedIconRef.current = displayedIcon;\n const selectedVerticalRef = useRef();\n selectedVerticalRef.current = selectedVertical;\n const formRef = useRef();\n const nameRef = useRef();\n\n const { handleErrorSnackbar, handleSuccessSnackbar } =\n useHandleAxiosSnackbar();\n\n const CheckBoxRenderer = ({ onChange, value, id, defaultChecked }) => {\n const isAssociatedToVertical = useCallback(\n (productId) => {\n if (!isEdit) return false;\n for (let product of associatedProducts) {\n if (\n product.productId === productId &&\n product.verticalId === selectedVerticalRef.current.verticalId\n ) {\n return true;\n }\n }\n // console.log(selectedVerticalRef.current.icon)\n const icon = getIconFromName(selectedVerticalRef.current.icon);\n // console.log(\"🚀 ~ file: UdpVerticalManagementSidesheet.jsx:81 ~ isAssociatedToVertical ~ icon:\", icon)\n\n return false;\n },\n [associatedProducts, selectedVerticalRef]\n );\n\n const handleCheckboxChange = (e) => {\n if (e.target.checked) {\n setSelectedProductIds((prevState) => [...prevState, id]);\n } else {\n setSelectedProductIds((prevState) =>\n prevState.filter((item) => item !== id)\n );\n }\n };\n\n return (\n <FluentCheckbox\n // checked={value}\n defaultChecked={isAssociatedToVertical(id)}\n onChange={handleCheckboxChange}\n aria='column-active'\n />\n );\n };\n\n // const actionList = useMemo(\n // () => [\n // {\n // id: 1, // Must be unique\n // title: t('Edit'),\n // icon: EditIcon,\n // onClick: handleEditPage,\n // disabled: false\n // },\n // {\n // id: 2, // Must be unique\n // title: t('Delete'),\n // icon: DeleteIcon,\n // onClick: handleDelete,\n // disabled: false\n // }\n // ],\n // [t, handleEditPage, handleDelete]\n // );\n\n const gridOptions = useMemo(\n () => ({\n frameworkComponents: {\n actionsRenderer: ActionsRenderer,\n checkboxRenderer: CheckBoxRenderer\n },\n columnDefs: [\n {\n headerName: '',\n field: 'select',\n cellRenderer: 'checkboxRenderer',\n cellRendererParams: (params) => ({\n // onChange: onChange,\n // value: checked[params.data.productId] || false,\n id: params.data.productId\n })\n },\n {\n headerName: t('Product Name'),\n field: 'name',\n minWidth: 200\n }\n ]\n }),\n [isEdit, selectedVertical, associatedProducts]\n );\n\n const executeMutation = useCallback(\n async (endpoint, method, data) =>\n apiMutate(\n ConfigService.uemV1ApiUrl,\n endpoint,\n {\n method: method || 'post'\n },\n data\n ),\n []\n );\n\n const getProducts = useCallback(\n async (data) => {\n setLoading(true);\n\n const response = await executeMutation('uem', 'post', data);\n if (response?.status === 200) {\n setProducts(response?.data);\n }\n setLoading(false);\n },\n [executeMutation, setProducts]\n );\n\n const createVertical = useCallback(\n async (data) => {\n setLoading(true);\n\n const response = await executeMutation(\n 'vertical/uemCreate',\n 'post',\n data\n );\n if (response?.status === 201) {\n closeSidesheet();\n handleSuccessSnackbar('Vertical Created Successfully');\n } else {\n handleErrorSnackbar('Something went wrong');\n }\n setLoading(false);\n },\n [executeMutation]\n );\n\n const updateVertical = useCallback(\n async (data) => {\n setLoading(true);\n\n const response = await executeMutation(\n `vertical/${selectedVertical.verticalId}/uemUpdate`,\n 'put',\n data\n );\n if (response?.status === 204) {\n closeSidesheet();\n handleSuccessSnackbar('Vertical Updated Successfully');\n } else {\n handleErrorSnackbar('Something went wrong');\n }\n setLoading(false);\n },\n [selectedVertical, executeMutation]\n );\n\n const handleSubmit = useCallback(\n (values) => {\n setLoading(true);\n const products = selectedProductIdsRef.current.map((productId) => ({\n productId\n }));\n\n !isEdit\n ? createVertical({\n data: {\n name: values.name,\n products: products,\n icon: displayedIconRef?.current.name,\n EnvironmentId: environment.environmentId,\n apiPath: 'api/v1/vertical/uemCreate'\n }\n })\n : updateVertical({\n data: {\n name: values.name,\n products: products,\n icon: displayedIconRef?.current.name,\n EnvironmentId: environment.environmentId,\n apiPath: `api/v1/vertical/${selectedVertical.verticalId}/uemUpdate`\n }\n });\n },\n [\n isEdit,\n createVertical,\n environment,\n updateVertical,\n selectedVertical,\n selectedProductIdsRef\n ]\n );\n\n useEffect(() => {\n if (environment && getProducts) {\n if (environment.environmentId) {\n const data = {\n data: {\n customerId: null,\n environmentId: environment.environmentId,\n apiPath: `tenantService/api/v2/product`\n }\n };\n getProducts(data);\n }\n }\n }, [environment, getProducts]);\n\n useEffect(() => {\n if (selectedVertical) {\n const associatedProductIds = selectedVertical.verticalProductVertical.map(\n (product) => product.productId\n );\n setSelectedProductIds((prevState) => [\n ...prevState,\n ...associatedProductIds\n ]);\n }\n }, [selectedVertical, setSelectedProductIds]);\n\n const setDisplayedIconCallback = useCallback(() => {\n setDisplayedIcon({\n name:\n isEdit && selectedVertical?.icon\n ? selectedVertical?.icon\n : 'StatusCircleQuestionMarkIcon'\n });\n }, [selectedVertical, isEdit]);\n\n useEffect(() => {\n setDisplayedIconCallback();\n }, [open]);\n\n const closeIconLibrary = () => {\n setOpenIconLibrary(false);\n };\n\n const onOpenLibrary = () => {\n setOpenIconLibrary(true);\n };\n\n const handleIconSelect = (icon) => {\n const updateddisplayedIcon = { ...props.displayedIcon };\n updateddisplayedIcon.name = icon.id;\n updateddisplayedIcon.type = icon.type || null;\n setDisplayedIcon(updateddisplayedIcon);\n closeIconLibrary();\n };\n\n const initialValues = useMemo(() => {\n return {\n name: isEdit ? selectedVertical?.name : ''\n };\n }, [associatedProducts, selectedVertical, isEdit]);\n\n return (\n <>\n <SideSheet\n open={open}\n onClose={() => closeSidesheet()}\n width={400}\n title={props.title}\n // buttonLabel={\"Create\"}\n // onSubmit={handleSubmit}\n >\n <Form\n ref={formRef}\n onSubmit={handleSubmit}\n initialValues={initialValues}\n >\n <div style={{ display: 'flex' }}>\n <Field\n ref={nameRef}\n component={TextField}\n label={t('Name')}\n id='name'\n name='name'\n variant='outlined'\n size='small'\n required={true}\n style={{ marginTop: 8 }}\n />\n\n <IconButton onClick={onOpenLibrary}>\n {displayedIcon && (\n <UnityFluentIcon\n type={displayedIcon?.type}\n icon={\n displayedIcon?.type === 'unity'\n ? getUnityIconFromName(displayedIcon?.name)\n : getIconFromName(displayedIcon?.name)\n }\n />\n )}\n </IconButton>\n </div>\n <AmbientGridTemplate\n data={products}\n title={t('Products')}\n loading={loading}\n height={'calc(100vh - 300px)'}\n hideGroupTab\n hideColumnTab\n disablePagination\n hideFitGrid\n hideExpandGrid\n hideExportGrid\n hideRemoveFilters\n hideFilterTab\n {...gridOptions}\n />\n <FormButtons>\n <SubmitButton\n variant='contained'\n color='secondary'\n marginTop={'50px'}\n disabled={false}\n disablePristine={false}\n >\n {t(isEdit ? 'Update' : 'Create')}\n </SubmitButton>\n </FormButtons>\n {loading && <LinearProgress />}\n </Form>\n </SideSheet>\n <SideSheet\n open={openIconLibrary}\n onClose={closeIconLibrary}\n title={t('Icon Library')}\n width={'100%'}\n anchor='bottom'\n >\n <IconLibrary\n addItem={handleIconSelect}\n selectedIconName={displayedIcon?.name}\n title={t('Select Icon')}\n />\n </SideSheet>\n </>\n );\n};\n\nexport default UdpVerticalManagementSidesheet;\n","import React, {\n useCallback,\n useEffect,\n useMemo,\n useState,\n useRef\n} from 'react';\nimport { AmbientGridTemplate } from '../../UI/templates/AmbientGridTemplate';\n// import { executeQueryAdHoc, getBaseMethod } from '../utilities/methodUtils';\nimport { AddIcon, DeleteIcon, EditIcon } from '@fluentui/react-icons';\nimport { Typography } from '@material-ui/core';\nimport { useTranslation } from 'react-i18next';\nimport { PrimaryActionButton } from '../../UI/inputs/buttons/PrimaryActionButton';\nimport { ActionsRenderer } from '../../UI/templates/ui/renderers/ActionsRenderer';\nimport { apiMutate } from '../../utilities/useAxiosMutate';\nimport UdpVerticalManagementSidesheet from './UdpVerticalManagementSidesheet';\nimport { FluentDialog } from '../../UI/feedback/FluentDialog';\nimport { useHandleAxiosSnackbar } from '../../utilities/apiHelpers';\nimport { ConfigService } from 'udp-react-stencil-component-library';\n\nconst UdpVerticalManagementPage = (props) => {\n const { params } = props;\n const { nodeObj: environment, inquiryNodeProperties } = params;\n const { t } = useTranslation();\n\n const [sideSheetOpen, setSideSheetOpen] = useState(false);\n const [sideSheetEdit, setSideSheetEdit] = useState(false);\n const [loading, setLoading] = useState(false);\n const [selectedVertical, setSelectedVertical] = useState(null);\n const [verticals, setVerticals] = useState([]);\n const [productVertical, setProductVertical] = useState([]);\n const [deleteDialogOpen, setDeleteDialogOpen] = useState(false);\n const selectedVerticalRef = useRef();\n selectedVerticalRef.current = selectedVertical ? selectedVertical : null;\n const { handleErrorSnackbar, handleSuccessSnackbar } =\n useHandleAxiosSnackbar();\n\n const openSheetAsEdit = useCallback((isEdit) => {\n setSideSheetOpen(true);\n setSideSheetEdit(isEdit);\n }, []);\n\n const closeDeleteDialog = useCallback(() => {\n setDeleteDialogOpen(false);\n }, [setDeleteDialogOpen]);\n\n const executeMutation = useCallback(\n async (endpoint, method, data) =>\n apiMutate(\n ConfigService.uemV1ApiUrl,\n endpoint,\n {\n method: method || 'post'\n },\n data\n ),\n []\n );\n\n const getVerticals = useCallback(\n async (data, isFirstLoad = false) => {\n if (isFirstLoad) {\n setLoading(true);\n }\n\n const response = await executeMutation('uem', 'post', data);\n if (response?.status === 200) {\n setVerticals(response?.data);\n }\n if (isFirstLoad) {\n setLoading(false);\n }\n },\n [executeMutation]\n );\n\n const deleteVertical = useCallback(async () => {\n const data = {\n data: {\n environmentId: environment.environmentId,\n apiPath: `TenantService/api/v2/Vertical/${selectedVerticalRef.current.verticalId}/uemDelete`\n }\n };\n const response = await executeMutation(\n `vertical/${selectedVerticalRef.current.verticalId}/uemDelete`,\n 'delete',\n data\n );\n if (response?.status === 204) {\n console.log('success');\n handleSuccessSnackbar('Vertical Deleted Successfully');\n }\n const getVerticalsData = {\n data: {\n customerId: null,\n environmentId: environment.environmentId,\n apiPath: `TenantService/api/v2/Vertical`\n }\n };\n getVerticals(getVerticalsData, true);\n closeDeleteDialog();\n }, [executeMutation, selectedVertical, closeDeleteDialog]);\n\n const getProductVerticals = useCallback(\n async (data) => {\n const response = await executeMutation('productVertical', 'get', data);\n if (response?.status === 200) {\n setProductVertical(response?.data);\n }\n },\n [executeMutation]\n );\n\n useEffect(() => {\n if (environment && getVerticals) {\n if (environment.environmentId) {\n const productVerticalData = {\n data: {\n apiPath: `api/v2/ProductVertical`\n }\n };\n getProductVerticals(productVerticalData);\n const data = {\n data: {\n customerId: null,\n environmentId: environment.environmentId,\n apiPath: `TenantService/api/v2/Vertical`\n }\n };\n getVerticals(data, true);\n }\n }\n }, [environment, getVerticals, getProductVerticals, deleteVertical]);\n\n const closeSheet = useCallback(() => {\n setSideSheetOpen(false);\n const data = {\n data: {\n customerId: null,\n environmentId: environment.environmentId,\n apiPath: `TenantService/api/v2/Vertical`\n }\n };\n\n getVerticals(data);\n }, [getVerticals, environment]);\n\n const handleEditPage = useCallback(\n (value) => {\n setSelectedVertical(value);\n console.log('Edit page, value: ', value);\n openSheetAsEdit(true);\n },\n [t]\n );\n\n const handleCreateVertical = useCallback(\n (value) => {\n openSheetAsEdit(false);\n },\n [t]\n );\n\n const handleDelete = useCallback(\n (value) => {\n setSelectedVertical(value);\n console.log('Delete page, value: ', value);\n setDeleteDialogOpen(true);\n },\n [t]\n );\n\n const actionList = useMemo(\n () => [\n {\n id: 1, // Must be unique\n title: t('Edit'),\n icon: EditIcon,\n onClick: handleEditPage,\n disabled: false\n },\n {\n id: 2, // Must be unique\n title: t('Delete'),\n icon: DeleteIcon,\n onClick: handleDelete,\n disabled: false\n }\n ],\n [t, handleEditPage, handleDelete]\n );\n\n const gridOptions = useMemo(\n () => ({\n frameworkComponents: {\n actionsRenderer: ActionsRenderer\n },\n columnDefs: [\n {\n headerName: t('Name'),\n field: 'name',\n minWidth: 300\n },\n {\n headerName: t('Icon'),\n field: 'icon'\n },\n {\n headerName: t('Actions'),\n cellRenderer: 'actionsRenderer',\n cellRendererParams: {\n actionList\n },\n pinned: 'right',\n suppressMenu: true,\n sortable: false\n }\n ]\n }),\n [t, actionList, productVertical]\n );\n\n const pab = (\n <PrimaryActionButton onClick={handleCreateVertical}>\n <Typography style={{ marginRight: 5 }}>Add</Typography>\n <AddIcon />\n </PrimaryActionButton>\n );\n\n return (\n <>\n <UdpVerticalManagementSidesheet\n open={sideSheetOpen}\n closeSidesheet={closeSheet}\n selectedVertical={selectedVertical}\n environment={environment}\n title={t(sideSheetEdit ? 'Edit Vertical' : 'Create Vertical')}\n associatedProducts={productVertical}\n isEdit={sideSheetEdit}\n />\n <AmbientGridTemplate\n title={t('Vertical Manager')}\n primaryActionButton={pab}\n data={verticals}\n // hideGroupTab\n // hideColumnTab\n loading={loading}\n gridOptions={gridOptions}\n groupingData={[]}\n />\n <FluentDialog\n open={deleteDialogOpen}\n handleClose={closeDeleteDialog}\n title={t('Delete Vertical')}\n message={\n t('Are you sure you want to Delete') + ` \"${selectedVertical?.name}\"?`\n }\n actionOne={deleteVertical}\n labelOne={t('Delete')}\n actionTwo={closeDeleteDialog}\n labelTwo={t('Cancel')}\n />\n </>\n );\n};\n\nexport default UdpVerticalManagementPage;\n","import React from \"react\";\nimport { SideSheet } from '../../UI/surfaces/SideSheet';\nimport { FluentTextFieldAutoComplete } from '../../UI/inputs/textField/FluentTextFieldAutoComplete';\n\n/**\n * @param {object} props\n * @param {object} props.selectedGridPanel\n * @param {string} props.environment\n * @param {boolean} props.open\n * @param {Function} props.onClose\n * @param {Function} props.onSubmit\n * @param {string} props.title\n * @param {any[]} props.grids\n * @param {any[]} props.panels\n * @param {any} props.grid\n * @param {Function} props.setGrid\n * @param {any} props.panel\n * @param {Function} props.setPanel\n * @returns {JSX.Element}\n */\nconst UdpGridPanelManagementSidesheet = (props) => {\n const {\n selectedGridPanel,\n environment,\n open,\n onClose,\n onSubmit,\n title,\n grids,\n panels,\n grid,\n setGrid,\n panel,\n setPanel,\n ...sheetProps\n } = props;\n\n return (\n <SideSheet \n open={open}\n onClose={() => onClose()}\n width={400}\n title={title}\n buttonLabel={'Save'}\n onSubmit={onSubmit}\n {...sheetProps}\n >\n <FluentTextFieldAutoComplete\n id={'grid'}\n label={\"Grid\"}\n options={grids}\n optionKey=\"name\"\n onChange={setGrid}\n value={grid}\n />\n <FluentTextFieldAutoComplete\n id={'panel'}\n label={\"Panel\"}\n options={panels}\n optionKey=\"name\"\n onChange={setPanel}\n value={panel}\n />\n </SideSheet>\n );\n};\n\nexport default UdpGridPanelManagementSidesheet;\n","import React, {\n useCallback,\n useEffect,\n useMemo,\n useState,\n useRef\n} from 'react';\nimport { AmbientGridTemplate } from '../../UI/templates/AmbientGridTemplate';\n// import { executeQueryAdHoc, getBaseMethod } from '../utilities/methodUtils';\nimport { AddIcon, DeleteIcon, EditIcon } from '@fluentui/react-icons';\nimport { Typography } from '@material-ui/core';\nimport { useTranslation } from 'react-i18next';\nimport { PrimaryActionButton } from '../../UI/inputs/buttons/PrimaryActionButton';\nimport { ActionsRenderer } from '../../UI/templates/ui/renderers/ActionsRenderer';\nimport { apiMutate } from '../../utilities/useAxiosMutate';\nimport UdpVerticalManagementSidesheet from './UdpVerticalManagementSidesheet';\nimport { FluentDialog } from '../../UI/feedback/FluentDialog';\nimport { useHandleAxiosSnackbar } from '../../utilities/apiHelpers';\nimport { SideSheet } from '../../UI/surfaces/SideSheet';\nimport UdpGridPanelManagementSidesheet from './UdpGridPanelManagementSidesheet';\nimport { useAgGridApi } from '../../utilities/aggrid/AgTable';\nimport { ConfigService } from 'udp-react-stencil-component-library';\n\nconst UdpGridPanelManagementPage = (props) => {\n const { params } = props;\n const { nodeObj: environment } = params;\n const { t } = useTranslation();\n const [loading, setLoading] = useState(false);\n const [gridPanels, setGridPanels] = useState([]);\n const [grids, setGrids] = useState([]);\n const [panels, setPanels] = useState([]);\n const [addSidesheetOpen, setAddSidesheetOpen] = useState(false);\n const [selectedRow, setSelectedRow] = useState();\n const [deleteDialogOpen, setDeleteDialogOpen] = useState();\n const [dataToDelete, setDataToDelete] = useState();\n\n const [grid, setGrid] = useState(null);\n const [panel, setPanel] = useState(null);\n const { handleErrorSnackbar, handleSuccessSnackbar } =\n useHandleAxiosSnackbar();\n\n const executeMutation = useCallback(\n async (endpoint, method, data) =>\n apiMutate(\n ConfigService.uemV1ApiUrl,\n endpoint,\n {\n method: method || 'post'\n },\n data\n ),\n []\n );\n\n const getGridPanels = useCallback(async () => {\n setLoading(true);\n const requestPayload = {\n data: {\n customerId: null,\n environmentId: environment.environmentId,\n apiPath: `TenantService/api/v2/gridPanel`\n }\n };\n\n const response = await executeMutation('uem', 'post', requestPayload);\n if (response?.status === 200) {\n setGridPanels(response?.data);\n }\n setLoading(false);\n }, [environment?.environmentId, executeMutation]);\n\n const getGrids = useCallback(async () => {\n const requestPayload = {\n data: {\n customerId: null,\n environmentId: environment.environmentId,\n apiPath: `TenantService/api/v2/grid`\n }\n };\n\n const response = await executeMutation('uem', 'post', requestPayload);\n if (response?.status === 200) {\n setGrids(response?.data);\n }\n }, [environment?.environmentId, executeMutation]);\n\n const getPanels = useCallback(async () => {\n const requestPayload = {\n data: {\n customerId: null,\n environmentId: environment.environmentId,\n apiPath: `IntegrationService/api/v2/panel`\n }\n };\n\n const response = await executeMutation('uem', 'post', requestPayload);\n if (response?.status === 200) {\n setPanels(response?.data);\n }\n }, [environment?.environmentId, executeMutation]);\n\n const createGridPanel = useCallback(async () => {\n setLoading(true);\n\n const requestPayload = {\n data: {\n customerId: null,\n gridId: grid.gridId,\n panelId: panel.panelId,\n environmentId: environment.environmentId,\n apiPath: `api/v1/gridPanel/uemCreate`\n }\n };\n\n const response = await executeMutation(\n 'gridPanel/uemCreate',\n 'post',\n requestPayload\n );\n if (response?.status === 201) {\n handleSuccessSnackbar('GridPanel Created Successfully');\n getGridPanels();\n setAddSidesheetOpen(false);\n } else {\n handleErrorSnackbar('Something went wrong');\n }\n setLoading(false);\n }, [\n environment,\n executeMutation,\n getGridPanels,\n grid,\n handleErrorSnackbar,\n handleSuccessSnackbar,\n panel\n ]);\n\n const updateGridPanel = useCallback(async () => {\n setLoading(true);\n\n const requestPayload = {\n data: {\n gridPanelId: selectedRow.gridPanelId,\n customerId: null,\n gridId: grid.gridId,\n panelId: panel.panelId,\n environmentId: environment.environmentId\n }\n };\n\n const response = await executeMutation(\n 'gridPanel/uemUpdate',\n 'put',\n requestPayload\n );\n if (response?.status === 204) {\n handleSuccessSnackbar('GridPanel Updated Successfully');\n getGridPanels();\n setAddSidesheetOpen(false);\n } else {\n handleErrorSnackbar('Something went wrong');\n }\n setLoading(false);\n }, [\n environment,\n executeMutation,\n getGridPanels,\n grid,\n handleErrorSnackbar,\n handleSuccessSnackbar,\n panel,\n selectedRow\n ]);\n\n const deleteGridPanel = useCallback(async () => {\n setLoading(true);\n\n const requestPayload = {\n data: {\n gridPanelId: dataToDelete.gridPanelId,\n customerId: null,\n gridId: dataToDelete.gridId,\n panelId: dataToDelete.panelId,\n environmentId: environment.environmentId\n }\n };\n\n const response = await executeMutation(\n 'gridPanel/uemDelete',\n 'delete',\n requestPayload\n );\n if (response?.status === 204) {\n handleSuccessSnackbar('GridPanel Deleted Successfully');\n getGridPanels();\n } else {\n handleErrorSnackbar('Something went wrong');\n }\n setDataToDelete();\n setLoading(false);\n }, [\n environment,\n executeMutation,\n getGridPanels,\n handleErrorSnackbar,\n handleSuccessSnackbar,\n dataToDelete\n ]);\n\n const openDeleteDialog = (data) => {\n setDeleteDialogOpen(true);\n setDataToDelete(data);\n console.log(data);\n };\n\n useEffect(() => {\n getGridPanels();\n getGrids();\n getPanels();\n }, [getGridPanels, getGrids, getPanels]);\n\n const handleEdit = useCallback((row) => {\n setSelectedRow(row);\n }, []);\n\n useEffect(() => {\n if (selectedRow) {\n const selectedGrid = grids.find(\n (grid) => grid.gridId === selectedRow.gridId\n );\n const selectedPanel = panels.find(\n (panel) => panel.panelId === selectedRow.panelId\n );\n setGrid(selectedGrid);\n setPanel(selectedPanel);\n setAddSidesheetOpen(true);\n }\n }, [grids, panels, selectedRow]);\n\n const actionList = useMemo(\n () => [\n {\n id: 1, // Must be unique\n title: t('Edit'),\n icon: EditIcon,\n onClick: handleEdit,\n disabled: false\n },\n {\n id: 2, // Must be unique\n title: t('Delete'),\n icon: DeleteIcon,\n onClick: openDeleteDialog,\n disabled: false\n }\n ],\n [t, handleEdit]\n );\n\n const gridOptions = useMemo(\n () => ({\n frameworkComponents: {\n actionsRenderer: ActionsRenderer\n },\n columnDefs: [\n {\n headerName: t('gridPanelId'),\n field: 'gridPanelId'\n },\n {\n headerName: t('gridId'),\n field: 'gridId'\n },\n {\n headerName: t('panelId'),\n field: 'panelId'\n },\n {\n headerName: t('Actions'),\n cellRenderer: 'actionsRenderer',\n cellRendererParams: {\n actionList\n },\n pinned: 'right',\n suppressMenu: true,\n sortable: false\n }\n ]\n }),\n [actionList, t]\n );\n\n const handleClose = useCallback(() => {\n setGrid();\n setPanel();\n setSelectedRow();\n setAddSidesheetOpen(false);\n }, []);\n\n return (\n <>\n <UdpGridPanelManagementSidesheet\n title={selectedRow ? 'Update GridPanel' : 'Create GridPanel'}\n open={addSidesheetOpen}\n onClose={handleClose}\n environment={environment}\n grids={grids}\n panels={panels}\n grid={grid}\n setGrid={setGrid}\n panel={panel}\n setPanel={setPanel}\n onSubmit={selectedRow ? updateGridPanel : createGridPanel}\n />\n <FluentDialog\n open={deleteDialogOpen}\n handleClose={() => setDeleteDialogOpen(false)}\n title={t('Delete GridPanel')}\n message={t('Are you sure?')}\n actionOne={deleteGridPanel}\n labelOne={t('Delete')}\n actionTwo={() => setDeleteDialogOpen(false)}\n labelTwo={t('Cancel')}\n />\n <AmbientGridTemplate\n title={t('Grid Panel Manager')}\n useNewHeader\n data={gridPanels}\n gridOptions={gridOptions}\n onPrimaryActionClick={() => setAddSidesheetOpen(true)}\n primaryActionLabel='Add'\n loading={loading}\n />\n </>\n );\n};\n\nexport default UdpGridPanelManagementPage;\n","import React, {\n useState,\n useEffect\n} from 'react';\nimport { useAxiosGet } from '../../utilities/useAxiosGet';\nimport { UdpMaintenanceEnginePage } from './UdpMaintenanceEnginePage';\nimport { ConfigService } from 'udp-react-stencil-component-library';\n\nconst UdpInquiryMaintenanceEnginePage = (props) => {\n const { params } = props;\n const { nodeObj } = params;\n const [loading, setLoading] = useState(false);\n\n const [{ data: catalogKey, loading: catalogKeyLoading }] = useAxiosGet(\n ConfigService.productV1ApiUrl,\n `UdpObjectInfo/getCatalogId/${nodeObj.businessObjectKey}?fromUdpObjectInfo=true`,\n {},\n !!!nodeObj,\n false\n );\n\n /*\n returns {\n entityName: Tenant,\n productId: 1,\n unityBaseGetAllMethod: {apiMethodId: 'f06f7853-5816-4950-a275-5085c3387d57', pathParameters: [{name: \"version\", in: \"path\", parameterType: \"string\", fullReference: \"\"}]},\n unityBaseGetMethod: {apiMethodId: '06f49cfd-0f1e-475a-812b-73cd3efd9f0d', pathParameters: [{name: \"id\", in: \"path\", parameterType: \"string\", fullReference: \"\"}, {name: \"version\", in: \"path\", parameterType: \"string\", fullReference: \"\"}]},\n unityBaseCreateMethod: {apiMethodId: '33310aad-8998-4661-800b-00649d280d31', pathParameters: [{name: \"version\", in: \"path\", parameterType: \"string\", fullReference: \"\"}]},\n unityBaseUpdateMethod: {apiMethodId: 'fe611db9-47ec-4a27-8840-871fe1323812', pathParameters: [{name: \"id\", in: \"path\", parameterType: \"string\", fullReference: \"\"}, {name: \"version\", in: \"path\", parameterType: \"string\", fullReference: \"\"}]},\n unityBaseDeleteMethod: {apiMethodId: 'dafb84b6-e424-43ff-9ef0-774a5795e420', pathParameters: [{name: \"id\", in: \"path\", parameterType: \"string\", fullReference: \"\"}, {name: \"version\", in: \"path\", parameterType: \"string\", fullReference: \"\"}]},\n }\n */\n\n // Set loading flag based on the API loading flags\n useEffect(() => {\n setLoading(catalogKeyLoading);\n }, [catalogKeyLoading])\n\n return (\n\n <UdpMaintenanceEnginePage\n catalogKey={catalogKey || ''}\n />\n );\n};\n\nexport default UdpInquiryMaintenanceEnginePage;\n","import React from 'react';\nimport { PowerBIReport } from '../../reports/PowerBIReport';\n\nconst UdpReportsPage = (props) => {\n const { params } = props;\n\n return <PowerBIReport id={params?.pbiReportCode || null} />;\n};\n\nexport default UdpReportsPage;\n","import React from 'react';\nimport { makeStyles, colors } from '@material-ui/core';\nimport DownArrow from '@material-ui/icons/esm/ArrowDownward';\nimport UpArrow from '@material-ui/icons/esm/ArrowUpward';\n\nconst useStyles = makeStyles(theme => ({\n root: {},\n DownArrow: {\n color: colors.red[500],\n fontSize: 16,\n },\n UpArrow: {\n color: colors.green[500],\n fontSize: 16,\n },\n}));\n\nconst FluentTrendArrow = props => {\n const { type } = props;\n const classes = useStyles();\n\n let trend = '';\n\n switch (type) {\n case 'up':\n trend = <UpArrow className={classes.UpArrow} />;\n break;\n case 'down':\n trend = <DownArrow className={classes.DownArrow} />;\n break;\n default:\n }\n\n return trend;\n};\nexport default FluentTrendArrow;\n","import React from 'react';\nimport { Typography, makeStyles } from '@material-ui/core';\nimport round from '@extra-number/round';\nimport FluentTrendArrow from './FluentTrendArrow';\n\nconst useStyles = makeStyles(theme => ({\n root: {},\n percent: {\n display: 'flex',\n flexDirection: 'row',\n marginTop: theme.spacing(-0.5),\n },\n arrow: {\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center',\n },\n percentAmount: {},\n}));\n\nconst FluentStatsSnippet = props => {\n const classes = useStyles(props);\n const {\n label,\n amount: rawAmount,\n prevAmount,\n percent: percentProp,\n trend: trendProp,\n } = props;\n\n // @todo Use an Intl formatter\n let amount = rawAmount;\n // TODO: Revisit below after Tampa Demo\n if (Math.abs(rawAmount) > 1_000_000) {\n //amount = Math.floor(rawAmount / 1_000_000) + 'M';\n let newNumber = rawAmount / 1_000_000;\n amount = [Math.round(newNumber * 10) / 10, 'M'];\n } else if (Math.abs(rawAmount) > 1_000) {\n //amount = Math.floor(rawAmount / 1_000) + 'K';\n let newNumber = rawAmount / 1_000;\n amount = [Math.round(newNumber * 10) / 10, 'K'];\n }\n\n let percent = percentProp;\n let trend = trendProp;\n if (typeof prevAmount === 'number') {\n const ratio = (rawAmount - prevAmount) / prevAmount;\n\n percent =\n Math.abs(round(ratio * 100, Math.abs(ratio) < 0.01 ? 0.01 : 1)) + '%';\n trend = ratio < 0 ? 'down' : 'up';\n }\n\n return (\n <div className={classes.root}>\n <Typography variant=\"overline\" component=\"div\">\n {label}\n </Typography>\n <Typography className={classes.stat} variant=\"h5\" component=\"div\">\n {amount}\n </Typography>\n <div className={classes.percent}>\n <div className={classes.arrow}>\n <FluentTrendArrow type={trend} />\n </div>\n <div className={classes.percentAmount}>\n <Typography variant=\"caption\">{percent}</Typography>\n </div>\n </div>\n </div>\n );\n};\nexport default FluentStatsSnippet;\n","import React, { useCallback } from 'react'\nimport ToggleButton from '@material-ui/lab/ToggleButton'\nimport ToggleButtonGroup from '@material-ui/lab/ToggleButtonGroup'\nimport { ChartIcon, NumberedListIcon } from '@fluentui/react-icons'\nimport { FluentIcon } from '../../../utilities/iconLibrary/FluentIcon'\n\nconst ChartSummaryToggle = (props) => {\n const { value, onChange } = props\n\n const change = useCallback((e, value) => onChange && onChange(value), [\n onChange\n ])\n\n return (\n <ToggleButtonGroup\n value={value}\n exclusive\n onChange={change}\n aria-label='chart summary mode toggle'\n >\n <ToggleButton\n name='chart-summary-mode'\n value='summary'\n aria-label='summary'\n >\n <FluentIcon component={NumberedListIcon} />\n </ToggleButton>\n <ToggleButton name='chart-summary-mode' value='chart' aria-label='chart'>\n <FluentIcon component={ChartIcon} />\n </ToggleButton>\n </ToggleButtonGroup>\n )\n}\n\nexport default ChartSummaryToggle\n","export const convertISODate = isoDate => {\n const date = new Date(isoDate);\n return date.toLocaleDateString('en-US');\n};\n","import React, { forwardRef, Fragment } from 'react'\nimport { Grid, Box, Typography } from '@material-ui/core'\nimport { MuiVegaLite } from '@material-vega/material-ui'\nimport WidgetCard from '../WidgetCard'\nimport FluentStatsSnippet from '../FluentComponents/atoms/FluentStatsSnippet'\nimport ChartSummaryToggle from '../FluentComponents/ChartSummaryToggle'\nimport { convertISODate } from '../utils/ConvertISODate'\n\nexport const layout = {\n w: { default: 2, min: 0, max: 4 },\n h: { default: 2, min: 0, max: 4 }\n}\n\nconst DonutChartWidget = (props, ref) => {\n const { children, params, setParam, ...other } = props\n const { mockData, apiUrl, theme, dateRange } = params\n\n let body = (\n <Fragment>\n {dateRange && (\n <Typography gutterBottom variant='caption' component='h3'>\n From: {convertISODate(dateRange.from)} to:{' '}\n {convertISODate(dateRange.to)}\n </Typography>\n )}\n <Grid container>\n {mockData?.stats?.map((stat) => (\n <Grid item xs={3} key={stat.label}>\n <FluentStatsSnippet\n label={stat.label}\n amount={stat.currentValue}\n prevAmount={stat.previousValue}\n />\n </Grid>\n ))}\n </Grid>\n <Box clone flex={1} mt={1} overflow='hidden'>\n <MuiVegaLite\n variant='donutChart'\n style={{\n overflow: 'auto',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: 0\n }}\n spec={{\n $schema: 'https://vega.github.io/schema/vega/v5.json',\n width: 200,\n height: 200,\n data: [\n {\n name: 'table',\n values: mockData?.data,\n transform: [\n {\n type: 'pie',\n field: 'value'\n }\n ]\n },\n {\n name: 'used',\n source: 'table',\n transform: [\n {\n type: 'formula',\n expr: \"datum.id === 'Other' ? 'Other' : 'Main'\",\n as: 'id'\n },\n {\n type: 'aggregate',\n fields: ['field'],\n groupby: ['id'],\n ops: ['sum'],\n as: ['sum']\n },\n {\n type: 'pivot',\n field: 'label',\n value: 'sum'\n }\n ]\n }\n ],\n scales: [\n {\n name: 'color',\n type: 'ordinal',\n domain: { data: 'table', field: 'label' },\n range: { scheme: 'greys' }\n }\n ],\n marks: [\n {\n type: 'arc',\n from: { data: 'table' },\n encode: {\n enter: {\n fill: { scale: 'color', field: 'label' },\n x: { signal: 'width / 2' },\n y: { signal: 'height / 2' },\n padAngle: { value: 0.01 }\n },\n update: {\n startAngle: { field: 'startAngle' },\n endAngle: { field: 'endAngle' },\n innerRadius: { signal: 'width / 2 - 10' },\n outerRadius: { signal: 'width / 2' }\n }\n }\n },\n {\n type: 'text',\n from: { data: 'used' },\n style: ['percent'],\n encode: {\n enter: {\n x: { signal: 'width / 2' },\n y: { signal: 'height / 2' },\n align: { value: 'center' },\n baseline: { value: 'middle' },\n fontSize: { value: 24 }\n }\n }\n }\n ],\n legends: [\n {\n fill: 'color',\n direction: 'vertical',\n encode: {\n labels: {\n name: 'legendLabel',\n enter: { text: { field: 'label' } }\n }\n },\n orient: 'right',\n labelColor: theme === 'dark' ? 'white' : 'rgba(0, 0, 0, 0.87)'\n }\n ]\n }}\n />\n </Box>\n {children}\n </Fragment>\n )\n\n return (\n <WidgetCard\n theme={theme}\n ref={ref}\n headerActions={\n <ChartSummaryToggle\n value={params.mode}\n onChange={(value) => setParam('mode', value)}\n />\n }\n {...other}\n title={mockData?.title}\n >\n {mockData ? (\n body\n ) : (\n <Typography variant='subtitle2'>\n Could not retrieve widget data. Please contact support.\n </Typography>\n )}\n </WidgetCard>\n )\n}\n\nexport default forwardRef(DonutChartWidget)\n","import React, { forwardRef, Fragment } from 'react'\nimport { Grid, Typography, makeStyles } from '@material-ui/core'\nimport WidgetCard from '../WidgetCard'\nimport { Sparklines, SparklinesLine } from 'react-sparklines'\nimport FluentStatsSnippet from '../FluentComponents/atoms/FluentStatsSnippet'\nimport { convertISODate } from '../utils/ConvertISODate'\n\nexport const layout = {\n w: { default: 2, min: 0, max: 4 },\n h: { default: 2, min: 0, max: 4 }\n}\n\nconst useStyles = makeStyles((theme) => ({\n statList: {\n display: 'flex',\n flexDirection: 'row',\n justifyContent: 'space-between'\n }\n}))\n\nconst SparklineWidget = (props, ref) => {\n const classes = useStyles()\n const { children, params, setParam, ...other } = props\n const { mockData, apiUrl, theme, dateRange } = params\n\n return (\n <WidgetCard\n className={classes.root}\n theme={theme}\n ref={ref}\n {...other}\n title={mockData?.title}\n >\n {mockData ? (\n <Fragment>\n {dateRange && (\n <Typography gutterBottom variant='caption' component='h3'>\n From: {convertISODate(dateRange.from)} to:{' '}\n {convertISODate(dateRange.to)}\n </Typography>\n )}\n <div className={classes.statList}>\n {mockData?.stats?.map((stat) => (\n <Grid item key={stat.label}>\n <FluentStatsSnippet\n label={stat.label}\n amount={stat.amount}\n percent={stat.percent && stat.percent}\n trend={stat.trend}\n />\n </Grid>\n ))}\n </div>\n\n <Sparklines data={mockData?.data} strokeWidth={0.5}>\n <SparklinesLine color='#067e7e' />\n </Sparklines>\n {children}\n </Fragment>\n ) : (\n <Typography variant='subtitle2'>\n Could not retrieve widget data. Please contact support.\n </Typography>\n )}\n </WidgetCard>\n )\n}\n\nexport default forwardRef(SparklineWidget)\n","import React from 'react'\nimport { Avatar, makeStyles, Typography } from '@material-ui/core'\nimport FluentDisplayNumber from '../atoms/FluentDisplayNumbers'\nimport { MarketIcon, MarketDownIcon } from '@fluentui/react-icons'\nimport { FluentIcon } from '../../../../utilities/iconLibrary/FluentIcon'\n\nconst useStyles = makeStyles(\n (theme) => ({\n root: {\n display: 'flex',\n flexDirection: 'row'\n },\n caption: {\n textAlign: 'left'\n },\n captionSmall: {\n textAlign: 'center'\n },\n trend: {\n marginTop: theme.spacing(2),\n marginLeft: theme.spacing(1)\n },\n upIcon: {\n color: 'green'\n },\n downIcon: {\n color: '#D50000'\n },\n avatar: {\n backgroundColor: 'white'\n }\n }),\n { next: 'FluentStatNumber' }\n)\n\nconst FluentStatNumber = (props) => {\n const classes = useStyles()\n const { small, trend, label, number } = props\n return (\n <div className={classes.root}>\n <div>\n <div>\n <FluentDisplayNumber small={small} number={Math.abs(number)} />\n </div>\n <div className={!small ? classes.caption : classes.captionSmall}>\n <Typography variant='overline'>{label}</Typography>\n </div>\n </div>\n\n <div className={classes.trend}>\n {small && (\n <Avatar className={classes.avatar}>\n {trend === 'down' ? (\n <FluentIcon\n component={MarketDownIcon}\n className={classes.downIcon}\n />\n ) : (\n <FluentIcon component={MarketIcon} className={classes.upIcon} />\n )}\n </Avatar>\n )}\n </div>\n </div>\n )\n}\nexport default FluentStatNumber\n","import React from 'react';\nimport { makeStyles } from '@material-ui/core';\nimport FluentStatNumbers from './FluentStatNumber';\n\nconst useStyles = makeStyles(\n theme => ({\n displayRow: {\n display: 'flex',\n flexDirection: 'row',\n },\n smallDisplay: {\n marginTop: theme.spacing(6),\n marginLeft: theme.spacing(3),\n },\n divider: {\n height: theme.spacing(6),\n marginTop: theme.spacing(6.5),\n marginLeft: theme.spacing(2),\n },\n }),\n { next: 'FluentPrimaryStatNumber' }\n);\n\nconst FluentPrimaryStatNumber = props => {\n const classes = useStyles();\n\n const { mainStat, mainLabel } = props;\n\n return (\n <div className={classes.displayRow}>\n <FluentStatNumbers label={mainLabel} number={mainStat} />\n </div>\n );\n};\n\nexport default FluentPrimaryStatNumber;\n","import React from 'react';\nimport { makeStyles } from '@material-ui/core';\nimport FluentStatNumber from './FluentStatNumber';\n\nconst useStyles = makeStyles(theme => ({\n displayRow: {\n display: 'flex',\n flexDirection: 'row',\n },\n // smallDisplay: {\n // marginTop: theme.spacing(6),\n // },\n divider: {\n height: theme.spacing(6),\n marginTop: theme.spacing(6.5),\n marginLeft: theme.spacing(1),\n },\n}));\n\nconst FluentSecondaryStatNumber = props => {\n const classes = useStyles();\n\n const { secondaryStat, secondaryLabel, trend } = props;\n\n return (\n <div className={classes.displayRow}>\n <div className={classes.smallDisplay}>\n <FluentStatNumber\n small\n trend={trend}\n label={secondaryLabel}\n number={secondaryStat}\n />\n </div>\n </div>\n );\n};\n\nexport default FluentSecondaryStatNumber;\n","import React, { forwardRef, Fragment } from 'react'\nimport FluentPrimaryStatNumber from '../FluentComponents/molecules/FluentPrimaryStatNumber'\nimport WidgetCard from '../WidgetCard'\nimport {\n LinearProgress,\n Typography,\n Divider,\n makeStyles\n} from '@material-ui/core'\nimport FluentSecondaryStatNumber from '../FluentComponents/molecules/FluentSecondaryStatNumber'\nimport { convertISODate } from '../utils/ConvertISODate'\n\nexport const layout = {\n w: { default: 2, min: 0, max: 4 },\n h: { default: 2, min: 0, max: 4 }\n}\n\nconst useStyles = makeStyles((theme) => ({\n root: {},\n displayItems: {\n display: 'flex',\n flexDirection: 'row',\n justifyContent: 'space-around',\n color: 'white'\n },\n divider: {\n marginTop: theme.spacing(4),\n marginBottom: theme.spacing(2)\n }\n}))\n\nconst ProgressBarWidget = (props, ref) => {\n const { children, params, setParam, ...other } = props\n const { mockData, apiUrl, theme, dateRange } = params\n const classes = useStyles()\n\n return (\n <WidgetCard\n theme={theme}\n ref={ref}\n {...other}\n title={mockData?.title}\n widgetType='ProgressBarWidget'\n >\n {mockData ? (\n <Fragment>\n {dateRange && (\n <Typography gutterBottom variant='caption' component='h3'>\n Starting: {convertISODate(dateRange.from)}\n </Typography>\n )}\n\n <FluentPrimaryStatNumber\n mainStat={mockData?.value}\n mainLabel={mockData?.label}\n />\n <div>\n <LinearProgress\n variant='determinate'\n color='secondary'\n value={mockData?.progress}\n />\n {mockData?.progress}%\n </div>\n {mockData?.data && (\n <Fragment>\n <div className={classes.divider}>\n <Divider style={{ background: 'white', opacity: 0.5 }} />\n </div>\n <div className={classes.displayItems}>\n {mockData?.data.map((item, index) => {\n return (\n <FluentSecondaryStatNumber\n secondaryStat={item.value}\n secondaryLabel={item.label}\n trend={item.trend}\n />\n )\n })}\n </div>\n </Fragment>\n )}\n {children}\n </Fragment>\n ) : (\n <Typography variant='subtitle2'>\n Could not retrieve widget data. Please contact support.\n </Typography>\n )}\n </WidgetCard>\n )\n}\n\nexport default forwardRef(ProgressBarWidget)\n","import React, { forwardRef } from 'react';\nimport WidgetCard from '../WidgetCard';\nimport { RecentlyLoadedNodesTable } from '../../../inquiry/dashboard/RecentlyLoadedNodesTable';\n\n// export const layout = {\n// w: { default: 2, min: 0, max: 4 },\n// h: { default: 2, min: 0, max: 4 }\n// };\n\nexport const RecentlyLoadedNodesWidget = (props, ref) => {\n const { children, params, setParam, ...other } = props;\n const {\n recentlyLoadedNodes,\n loading,\n onLoadedNodeClick,\n tree,\n hideWidgetName\n } = params;\n\n return (\n <WidgetCard\n ref={ref}\n title={'Recently Loaded'}\n hideWidgetName={hideWidgetName}\n {...other}\n >\n <RecentlyLoadedNodesTable\n recentlyLoadedNodes={recentlyLoadedNodes}\n loading={loading}\n onLoadedNodeClick={onLoadedNodeClick}\n tree={tree}\n hideTitle={true}\n />\n {children}\n </WidgetCard>\n );\n};\n\nexport default forwardRef(RecentlyLoadedNodesWidget);\n","import React from 'react';\nimport { ChatContainer } from '../../chatBot/ChatContainer';\n\nconst ChatUDP = () => {\n return (\n <ChatContainer />\n );\n};\n\nexport default ChatUDP;\n","import React, { useEffect, useState, useMemo, useCallback, memo } from 'react';\nimport { EditIcon, DeleteIcon, UploadIcon } from '@fluentui/react-icons';\nimport { useTranslation } from 'react-i18next';\nimport { DataBrowserContainer } from '../../dataBrowser/DataBrowserContainer';\nimport { CrudTableSidePanel } from '../../maintenanceEngine/crudBrowser/CrudTableSidePanel';\nimport {\n getPrimaryKeyValues,\n getPathObject\n} from '../../utilities/maintenanceEngine/CrudBrowserUtilities';\nimport { useAuthedUser } from '../../utilities/auth/useAuthedUser';\nimport { useAxiosGet } from '../../utilities/useAxiosGet';\nimport { apiMutate } from '../../utilities/useAxiosMutate';\nimport {\n toLowerFirstChar,\n toUpperFirstChar\n} from '../../utilities/input/StringUtilities';\nimport { getEntityAttributes } from '../../utilities/maintenanceEngine/CrudBrowserUtilities';\nimport { CardinalityTypeEnums } from '../../enums/unitySystemEnums';\nimport { executeQueryAdHoc } from '../utilities/methodUtils';\nimport { getSearchObject } from '../../utilities/search/SearchUtilities';\nimport { useApiCatalog } from '../../hooks/useApiCatalog';\nimport { useHandleAxiosSnackbar } from '../../utilities/apiHelpers';\nimport { usePromotedMethodEntity } from '../../hooks/usePromotedMethodEntity';\nimport { useSearchFilterParamsMap } from '../../hooks/useSearchFilterParamsMap';\nimport { Alert } from '@material-ui/lab';\nimport { v4 as uuid } from 'uuid';\nimport { useLocation } from 'react-router-dom';\nimport { useQueryExecutors } from '../../hooks/useQueryExecutors';\nimport { mapNodeObjValuesToSearchParameters } from '../../utilities/tree/TreeUtilities';\nimport { ConfigService } from 'udp-react-stencil-component-library';\n\n// const FILTER_PARAMS = [\n// {\n// name: 'tenantName',\n// value: 'ABC Company',\n// type: 'string'\n// },\n// {\n// name: 'productId',\n// value: 'UDP_PRODUCT_ID',\n// type: 'keyword'\n// },\n// {\n// name: 'productId',\n// value: 0,\n// type: 'function'\n// }\n// ];\n\n// const FUNCTION_LIST = [() => 1, () => 2];\n\nexport const UdpDataBrowserPage = (props) => {\n const { queryId, params } = props;\n const user = useAuthedUser();\n const { t } = useTranslation();\n const [entityData, setEntityData] = useState([]);\n const [gridApi, setGridApi] = useState(null);\n const [alertWarnings, setAlertWarnings] = useState([]);\n\n const location = useLocation();\n const state = location.state;\n let searchParamStr = location.search;\n let searchParams = new URLSearchParams(searchParamStr);\n const searchParamsQueryId = state?.queryId\n ? state.queryId\n : searchParams.has('queryId') === true\n ? toUpperFirstChar(searchParams.get('queryId'))\n : '';\n\n const { handleErrorSnackbar, handleSuccessSnackbar } =\n useHandleAxiosSnackbar();\n\n const { getCleanData } = useQueryExecutors();\n\n const udpQueryId = useMemo(\n () => params?.queryId || queryId || searchParamsQueryId || '',\n [params, queryId, searchParamsQueryId]\n );\n\n const udpTagId = params?.udpTagId || '';\n\n const [selectedEntity, setSelectedEntity] = useState(null);\n const [foreignKeyData, setForeignKeyData] = useState(null);\n const [udpFieldSearchApiId, setUdpFieldSearchApiId] = useState(null);\n\n const [loading, setLoading] = useState(false);\n const [apiCatalogId, setApiCatalogId] = useState(null);\n const [entityName, setEntityName] = useState(null);\n const [enteredFromConfig, setEnteredFromConfig] = useState(false);\n\n const { data: catalog } = useApiCatalog(apiCatalogId);\n\n const { data: udpOjectFieldInfo } = usePromotedMethodEntity(\n 'UdpObjectFieldInfo',\n true\n );\n\n // TODO: Params will be either passed in or hard coded for now until we have a way of configuring/storing them.\n const { getQueryFilterElements } = useSearchFilterParamsMap();\n\n const [{ data: tpacb, loading: tpacbLoading, error: tpacbError }] =\n useAxiosGet(\n ConfigService.integrationV1ApiUrl,\n `tenantProductApiCatalogBase/tenant/${user?.currentTenantId}/product/${ConfigService.config.UNITY_PRODUCT_ID}`,\n {},\n !!!user,\n false\n );\n\n const [\n {\n data: apiMethodInstance,\n loading: apiMethodInstancebLoading,\n error: apiMethodInstanceError\n }\n ] = useAxiosGet(\n ConfigService.integrationV1ApiUrl,\n `apiMethodInstance/${udpQueryId}`,\n {},\n !!!udpQueryId,\n false\n );\n\n const [\n { data: apiMethod, loading: apiMethodLoading, error: apiMethodError }\n ] = useAxiosGet(\n ConfigService.integrationV1ApiUrl,\n `apiMethod/${apiMethodInstance?.apiMethodId}`,\n {},\n !!!apiMethodInstance?.apiMethodId,\n false\n );\n\n const udpCatalogKey = useMemo(() => apiMethod?.entityName || '', [apiMethod]);\n\n /*\n returns {\n entityName: Tenant,\n productId: 1,\n unityBaseGetAllMethod: {apiMethodId: 'f06f7853-5816-4950-a275-5085c3387d57', pathParameters: [{name: \"version\", in: \"path\", parameterType: \"string\", fullReference: \"\"}]},\n unityBaseGetMethod: {apiMethodId: '06f49cfd-0f1e-475a-812b-73cd3efd9f0d', pathParameters: [{name: \"id\", in: \"path\", parameterType: \"string\", fullReference: \"\"}, {name: \"version\", in: \"path\", parameterType: \"string\", fullReference: \"\"}]},\n unityBaseCreateMethod: {apiMethodId: '33310aad-8998-4661-800b-00649d280d31', pathParameters: [{name: \"version\", in: \"path\", parameterType: \"string\", fullReference: \"\"}]},\n unityBaseUpdateMethod: {apiMethodId: 'fe611db9-47ec-4a27-8840-871fe1323812', pathParameters: [{name: \"id\", in: \"path\", parameterType: \"string\", fullReference: \"\"}, {name: \"version\", in: \"path\", parameterType: \"string\", fullReference: \"\"}]},\n unityBaseDeleteMethod: {apiMethodId: 'dafb84b6-e424-43ff-9ef0-774a5795e420', pathParameters: [{name: \"id\", in: \"path\", parameterType: \"string\", fullReference: \"\"}, {name: \"version\", in: \"path\", parameterType: \"string\", fullReference: \"\"}]},\n }\n */\n const { data: promotedMethodEntities, loading: promotedMethodsLoading } =\n usePromotedMethodEntity(entityName);\n\n const executeCreate = useCallback(\n async (data) =>\n apiMutate(\n ConfigService.integrationV1ApiUrl,\n `apimethod/executeQueryWithParameters/${selectedEntity?.unityBaseCreateMethod?.apiMethodId}`,\n {\n method: 'post'\n },\n data\n ),\n [selectedEntity]\n );\n\n const executeUpdate = useCallback(\n async (data) =>\n apiMutate(\n ConfigService.integrationV1ApiUrl,\n `apimethod/executeQueryWithParameters/${selectedEntity?.unityBaseUpdateMethod?.apiMethodId}`,\n {\n method: 'post'\n },\n data\n ),\n [selectedEntity]\n );\n\n const executeDelete = useCallback(\n async (data) =>\n apiMutate(\n ConfigService.integrationV1ApiUrl,\n `apimethod/executeQueryWithParameters/${selectedEntity?.unityBaseDeleteMethod?.apiMethodId}`,\n {\n method: 'post'\n },\n data\n ),\n [selectedEntity]\n );\n\n const onCreate = useCallback(\n async (data) => {\n return await executeCreate(data);\n },\n [executeCreate]\n );\n\n const onUpdate = useCallback(\n async (data) => {\n return await executeUpdate(data);\n },\n [executeUpdate]\n );\n\n const onDelete = useCallback(\n async (data) => {\n return await executeDelete(data);\n },\n [executeDelete]\n );\n\n // Configured columns data from data builder\n const queryColumnsData = useMemo(() => {\n if (!apiMethodInstance) return [];\n let catalogMods = [];\n try {\n const catalogModificationStr = apiMethodInstance.catalogModification;\n const catalogModification = JSON.parse(catalogModificationStr);\n catalogMods = catalogModification;\n } catch {\n console.warn('Error parsing apiMethodInstance catalogModification');\n }\n return catalogMods;\n }, [apiMethodInstance]);\n\n // Lookups map used for to map lookups to column entries\n const lookupsMap = useMemo(() => {\n // need to return null for Datasource to not render twice\n if (!queryColumnsData.length) return null;\n const map = {};\n const lookupColumns = queryColumnsData.filter(\n (column) => !!column.extendedProperties?.lookup\n );\n lookupColumns.forEach((lc) => {\n map[lc.name] = {\n lookupKeyName: lc.extendedProperties?.lookupKeyName || '',\n lookupValueName: lc.extendedProperties?.lookupKeyName || '',\n value: lc.extendedProperties?.lookup || '',\n filterOn: !!lc.filterOn || false\n };\n });\n\n return map;\n }, [queryColumnsData]);\n\n const nodeFilterParams = useMemo(() => {\n let filterParams = [];\n if (params?.nodeObj && params?.queryParamMapping) {\n const mappedParameters = mapNodeObjValuesToSearchParameters(\n params.nodeObj,\n params.queryParamMapping\n );\n if (Object.keys(mappedParameters).length) {\n Object.keys(mappedParameters).forEach((key) => {\n filterParams.push({\n name: key,\n value: mappedParameters[key],\n type: 'string'\n });\n });\n }\n }\n return filterParams;\n }, [params]);\n\n // Additional filter elements\n const searchFilterElements = useMemo(() => {\n const filterElements = [];\n if (!enteredFromConfig && udpTagId) {\n filterElements.push({\n searchField: 'UdpTags.UdpTagAssociationUdpTag.Id',\n searchOperator: '=',\n searchValue: udpTagId\n });\n }\n\n const queryFilterElements = getQueryFilterElements(\n apiMethodInstance,\n nodeFilterParams\n );\n return filterElements.concat(queryFilterElements);\n }, [\n udpTagId,\n enteredFromConfig,\n getQueryFilterElements,\n apiMethodInstance,\n nodeFilterParams\n ]);\n\n const entityAttributes = useMemo(() => {\n return getEntityAttributes(catalog, entityName);\n }, [catalog, entityName]);\n\n const getMetaDataForUdpField = useCallback(\n async (entityName) => {\n let fieldInfos = [];\n if (udpFieldSearchApiId) {\n const filterElements = [\n {\n searchField: 'ObjectInfo.SanitizedName',\n searchOperator: '=',\n searchValue: entityName\n }\n ];\n const requestObj = getSearchObject(filterElements, 1, 50, true);\n\n executeQueryAdHoc({ data: requestObj }, udpFieldSearchApiId).then(\n (resp) => {\n fieldInfos = resp.data?.pageList;\n }\n );\n }\n return fieldInfos;\n },\n [udpFieldSearchApiId]\n );\n\n const getFKMethodEntities = useCallback(\n async (attributes) => {\n if (!attributes) {\n return [];\n }\n let fkMethods = [];\n\n for (const attr of attributes) {\n // check if there is a property with this childEntity\n if (attr?.extendedProperties?.childEntity) {\n // get the list of child entity field names from the Keys array\n const ceFieldsArr = [];\n Object.keys(attr.extendedProperties.childEntityAssoc || {}).length &&\n (attr.extendedProperties.childEntityAssoc.Cardinality ===\n CardinalityTypeEnums.Many_To_Many ||\n attr.extendedProperties.childEntityAssoc.Cardinality ===\n CardinalityTypeEnums.One_To_Many) &&\n !attr.extendedProperties.childEntityAssoc.UdpType &&\n attr.extendedProperties.childEntityAssoc.Keys.forEach(\n (value, i) => {\n const name = value.split(',')[0];\n if (name) {\n // check name string: if 1 word, lowercase. if 2 words, lower first char\n ceFieldsArr.push({\n idx: i,\n name: /^[A-Z]*$/.test(name)\n ? name.toLowerCase()\n : toLowerFirstChar(name)\n });\n }\n }\n );\n\n // find the child entity attribute\n const ceAttr = attributes.find((p) =>\n ceFieldsArr.find((cef) => cef.name === p.name)\n );\n\n if (ceAttr) {\n // get list of entity if ceProp exists\n await apiMutate(\n ConfigService.integrationV1ApiUrl,\n `apicatalog/${apiCatalogId}/promotedMethodEntities/${attr.reference}/product/${ConfigService.config.UNITY_PRODUCT_ID}`,\n {\n method: 'get'\n },\n {}\n ).then((resp) => {\n if (resp && resp.data) {\n fkMethods.push({\n entityAttribute: ceAttr,\n entity: resp.data\n });\n }\n });\n }\n }\n }\n return fkMethods;\n },\n [apiCatalogId]\n );\n\n const getFKAssociationLabel = useCallback(\n async (entityName) => {\n let fieldsInfo = [];\n fieldsInfo = await getMetaDataForUdpField(entityName);\n if (fieldsInfo?.length <= 0) {\n return '';\n }\n const associationLabelInfo = fieldsInfo?.find(\n (fi) => fi.properties?.maintainenceConfig?.associationLabel === 'true'\n );\n return associationLabelInfo?.name;\n },\n [getMetaDataForUdpField]\n );\n\n const getDataByKey = (obj, k) => {\n if (!obj) return null;\n let val = obj[k] ?? null;\n if (!val) {\n const key = Object.keys(obj).find((objKey) =>\n objKey.toLowerCase().includes(k)\n );\n if (key) {\n val = obj[key];\n }\n }\n return val;\n };\n\n const getFKData = useCallback(async () => {\n if (!entityAttributes?.length) {\n return null;\n }\n const fkMethods = await getFKMethodEntities(entityAttributes);\n if (!fkMethods?.length) {\n setForeignKeyData([]);\n return [];\n }\n let fkData = [];\n let promises = [];\n let promiseDetails = [];\n const warnings = [];\n for (const method of fkMethods) {\n if (method && method?.entity?.unityBaseGetAllMethod) {\n const associationLabel = await getFKAssociationLabel(\n method.entity.entityName\n );\n promiseDetails.push({\n url:\n ConfigService.integrationV1ApiUrl +\n `/apimethod/executeQueryWithParameters/${method?.entity?.unityBaseGetAllMethod?.apiMethodId}`,\n fieldName: method.entityAttribute.name,\n name: method.entity.entityName,\n associationLabel: associationLabel\n });\n\n promises.push(\n apiMutate(\n ConfigService.integrationV1ApiUrl,\n `apimethod/executeQueryWithParameters/${method?.entity?.unityBaseGetAllMethod?.apiMethodId}`,\n {\n method: 'post'\n },\n { data: {} }\n )\n );\n } else {\n warnings.push({\n id: uuid(),\n message: `${method.entity.entityName}'s Get-All method needs to be promoted`\n });\n }\n }\n\n setAlertWarnings(warnings);\n\n Promise.all(promises).then((resp) => {\n resp.forEach((response, index) => {\n if (response.status === 200) {\n if (response?.data) {\n let respData = [];\n const promiseDetail = promiseDetails.find(\n (p) =>\n p.url === response?.config?.url &&\n !fkData.find(\n (fd) =>\n fd.entityName === p.Name && fd.fieldName === p.fieldName\n )\n );\n response.data.forEach((d) => {\n const idName =\n promiseDetail?.fieldName && d[promiseDetail.fieldName]\n ? promiseDetail.fieldName\n : 'id';\n const id = getDataByKey(d, idName);\n const name = getDataByKey(\n d,\n toLowerFirstChar(promiseDetail.associationLabel) || 'name'\n );\n\n respData.push({ id: id, name: name ?? id });\n });\n\n fkData.push({\n fieldName: promiseDetail.fieldName,\n entityName: promiseDetail.name,\n name: promiseDetail.fieldName,\n data: respData\n });\n }\n }\n });\n setForeignKeyData(fkData);\n });\n }, [entityAttributes, getFKMethodEntities, getFKAssociationLabel]);\n\n const handleOnCreate = useCallback(\n async (values) => {\n if (selectedEntity) {\n const entityName = selectedEntity?.entityName;\n if (selectedEntity?.unityBaseCreateMethod) {\n const data = { requestBody: values };\n const response = await onCreate({ data }).catch((res) => {\n handleErrorSnackbar(res);\n });\n\n if (response?.status === 200) {\n handleSuccessSnackbar(\n entityName\n ? t(`${entityName} has been created`)\n : t(`Entity has been created`)\n );\n gridApi?.refreshServerSideStore();\n return response;\n }\n }\n }\n },\n [\n selectedEntity,\n onCreate,\n t,\n handleErrorSnackbar,\n handleSuccessSnackbar,\n gridApi\n ]\n );\n\n const handleOnUpdate = useCallback(\n async (values, primaryKeyValues) => {\n if (selectedEntity) {\n const entityName = selectedEntity?.entityName;\n\n if (selectedEntity?.unityBaseUpdateMethod) {\n // Get primary key value object using path parameters and merge with data\n const pathObject = getPathObject(\n selectedEntity.unityBaseUpdateMethod.pathParameters,\n primaryKeyValues\n );\n let data = { requestBody: values };\n if (Array.isArray(pathObject)) {\n pathObject.forEach((po) => {\n data[Object.keys(po)[0]] = po[Object.keys(po)[0]];\n });\n } else {\n data = { ...pathObject, requestBody: values };\n }\n\n const response = await onUpdate({ data }).catch((res) => {\n handleErrorSnackbar(res);\n });\n\n if (response?.status === 200) {\n handleSuccessSnackbar(\n entityName\n ? t(`${entityName} has been updated`)\n : t(`Entity has been updated`)\n );\n\n gridApi?.refreshServerSideStore();\n }\n }\n }\n },\n [\n selectedEntity,\n onUpdate,\n t,\n gridApi,\n handleErrorSnackbar,\n handleSuccessSnackbar\n ]\n );\n\n const handleOnDelete = useCallback(\n async (value) => {\n value = getCleanData(value, lookupsMap);\n if (selectedEntity) {\n const entityName = selectedEntity?.entityName;\n\n if (selectedEntity?.unityBaseDeleteMethod) {\n // Get primary key value object using path parameters and merge with data\n const primaryKeyValues = getPrimaryKeyValues(entityAttributes, value);\n const pathObject = getPathObject(\n selectedEntity?.unityBaseDeleteMethod.pathParameters,\n primaryKeyValues\n );\n let data = {};\n if (Array.isArray(pathObject)) {\n pathObject.forEach((po) => {\n data[Object.keys(po)[0]] = po[Object.keys(po)[0]];\n });\n } else {\n data = { ...pathObject };\n }\n\n const response = await onDelete({ data }).catch((res) => {\n handleErrorSnackbar(res);\n });\n\n if (response?.status === 200) {\n handleSuccessSnackbar(\n entityName\n ? t(`${entityName} has been deleted`)\n : t(`Entity has been deleted`)\n );\n\n gridApi?.refreshServerSideStore();\n }\n }\n }\n },\n [\n selectedEntity,\n entityAttributes,\n onDelete,\n t,\n gridApi,\n handleErrorSnackbar,\n handleSuccessSnackbar,\n getCleanData,\n lookupsMap\n ]\n );\n\n const handleEntitySelect = useCallback((entityName) => {\n setAlertWarnings([]);\n setEntityName(entityName);\n setEnteredFromConfig(true);\n }, []);\n\n const removeWarning = useCallback(\n (id) => {\n const updatedWarnings = alertWarnings.filter(\n (warning) => warning.id !== id\n );\n setAlertWarnings(updatedWarnings);\n },\n [alertWarnings]\n );\n\n const actionList = useMemo(() => {\n if (!selectedEntity) {\n return;\n }\n\n const data = getCleanData(entityData, lookupsMap);\n\n const actions = [\n {\n id: 1, // Must be unique\n title: selectedEntity?.unityBaseUpdateMethod\n ? t('Edit')\n : t('Edit Method Not Accessible'),\n icon: EditIcon,\n onClick: null,\n opens: 'sideSheet',\n loading: !!!foreignKeyData,\n view: {\n component: CrudTableSidePanel,\n properties: {\n entityAttributes,\n foreignKeyData: foreignKeyData,\n crudTableEditionData: null,\n onUpdate: handleOnUpdate,\n valuePropName: 'crudTableEditionData',\n closeSideSheet: null,\n closeSideSheetPropName: 'closeSideSheet',\n pageId: selectedEntity?.unityBaseUpdateMethod?.pageId,\n isNewEntry: false,\n entityName,\n entityData: data\n }\n },\n disabled: !!!selectedEntity?.unityBaseUpdateMethod\n },\n {\n id: 2, // Must be unique\n title: selectedEntity?.unityBaseDeleteMethod\n ? t('Delete')\n : t('Delete Method Not Accessible'),\n icon: DeleteIcon,\n onClick: null,\n opens: 'dialog',\n loading: !!!foreignKeyData,\n view: {\n component: null,\n properties: {\n title: t('Delete'),\n message: t('Are you sure you want to delete this row?'),\n labelOne: t('Cancel'),\n actionTwo: handleOnDelete,\n labelTwo: t('Confirm')\n }\n },\n disabled: !!!selectedEntity?.unityBaseDeleteMethod\n }\n ];\n\n if (params?.loadInquiryNode && params?.displayLoadNodeButton) {\n actions.push({\n id: 5, // Must be unique\n title: t('Load to Tree'),\n icon: UploadIcon,\n onClick: (value) => {\n const obj = getCleanData(value, lookupsMap);\n params.loadInquiryNode(obj);\n },\n loading: !!!foreignKeyData,\n view: {}\n });\n }\n return actions;\n }, [\n selectedEntity,\n t,\n entityAttributes,\n foreignKeyData,\n handleOnUpdate,\n handleOnDelete,\n entityName,\n entityData,\n getCleanData,\n lookupsMap,\n params\n ]);\n\n useEffect(() => {\n const setFrKeyData = async () => {\n await getFKData();\n };\n if (entityAttributes && udpFieldSearchApiId !== null) {\n setFrKeyData();\n }\n }, [entityAttributes, getFKData, udpFieldSearchApiId]);\n\n useEffect(() => {\n if (promotedMethodEntities) {\n setSelectedEntity(promotedMethodEntities);\n }\n }, [promotedMethodEntities]);\n\n useEffect(() => {\n if (udpOjectFieldInfo) {\n setUdpFieldSearchApiId(\n udpOjectFieldInfo?.unityBaseSearchMethod?.apiMethodId || '' // If falsy lets set to empty string\n );\n }\n }, [udpOjectFieldInfo]);\n\n useEffect(() => {\n setAlertWarnings([]);\n if (udpCatalogKey) {\n setEntityName(udpCatalogKey);\n }\n }, [udpCatalogKey]);\n\n useEffect(() => {\n if (tpacb) {\n setApiCatalogId(tpacb.apiCatalogId);\n }\n }, [tpacb]);\n\n // Set loading flag based on the API loading flags\n useEffect(() => {\n setLoading(tpacbLoading || promotedMethodsLoading);\n }, [tpacbLoading, promotedMethodsLoading]);\n\n if (tpacbError) {\n return (\n <Alert severity='error'>\n {t('There is no Api Catalog associated with your tenant and product')}\n </Alert>\n );\n }\n\n return (\n <>\n {alertWarnings.map((warning) => (\n <Alert onClose={() => removeWarning(warning.id)} severity='warning'>\n {warning.message || ''}\n </Alert>\n ))}\n <DataBrowserContainer\n entityData={entityData}\n actionList={actionList}\n onCreate={handleOnCreate}\n entityAttributes={entityAttributes}\n foreignKeyData={foreignKeyData}\n isLoading={loading}\n promotedEntity={selectedEntity}\n setEntityData={setEntityData}\n isServerSide={true}\n apiMethod={{ apiCatalogId, entityName }}\n setGridApi={setGridApi}\n filterElements={searchFilterElements}\n backToConfigPage={\n enteredFromConfig ? () => handleEntitySelect(null) : null\n }\n queryColumnsData={queryColumnsData}\n lookupsMap={lookupsMap}\n disableRowSelction={!params?.loadInquiryNode}\n />\n </>\n );\n};\n\nexport default memo(UdpDataBrowserPage);\n","import React, {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState\n} from 'react';\nimport { AmbientGridTemplate } from '../../UI/templates/AmbientGridTemplate';\nimport { getSearchObject } from '../../utilities/search/SearchUtilities';\nimport { executeQueryAdHoc, getBaseMethod } from '../utilities/methodUtils';\nimport { UdpEnums } from '../../enums/unitySystemEnums';\nimport { useActionState } from '../../hooks/useActions';\nimport { useHandleAxiosSnackbar } from '../../utilities/apiHelpers';\nimport { useTranslation } from 'react-i18next';\nimport { EditIcon, ViewIcon } from '@fluentui/react-icons';\nimport { RemindersScreen } from '../../reminders/RemindersScreen';\nimport { ActionsRenderer } from '../../UI/templates/ui/renderers/ActionsRenderer';\nimport { SideSheet } from '../../UI/surfaces/SideSheet';\nimport { useActions } from '../../hooks/useActions';\nimport { SplitScreenTypeEnums } from '../../enums/unitySystemEnums';\nimport { FILE_TO_TYPES } from '../../constants/reminderConstants';\nimport { useUser } from '../../utilities/auth/useUser';\n\nconst UdpRemindersPage = (props) => {\n const { params } = props;\n const { nodeObj, manytoManyNodeObjKey } = params;\n const [reminders, setReminders] = useState([]);\n const [typeOptions, setTypeOptions] = useState([]);\n const [loading, setLoading] = useState(false);\n const [sheetOpen, setSheetOpen] = useState(false);\n const [reminderId, setReminderId] = useState('');\n const { openSplitScreen } = useActions();\n const actionState = useActionState();\n const { catalogPromotedEntities } = actionState;\n const { handleErrorSnackbar } = useHandleAxiosSnackbar();\n const { t } = useTranslation();\n const formRef = useRef(null);\n const user = useUser();\n\n const reminderFiledForSearchApiMethod = useMemo(() => {\n return getBaseMethod(\n UdpEnums.Udp_Reminder_Filed_For,\n 'unityBaseSearchMethod',\n catalogPromotedEntities\n );\n }, [catalogPromotedEntities]);\n\n const reminderTypeGetAllApiMethod = useMemo(() => {\n return getBaseMethod(\n UdpEnums.Udp_Reminder_Type,\n 'unityBaseGetAllMethod',\n catalogPromotedEntities\n );\n }, [catalogPromotedEntities]);\n\n const getReminders = useCallback(async () => {\n if (!nodeObj) {\n return [];\n }\n let remindersList = [];\n setLoading(true);\n const filterElements = [\n {\n searchField: 'entityBusinessKey',\n searchValue: manytoManyNodeObjKey\n ? nodeObj[manytoManyNodeObjKey]?.businessObjectKey\n : nodeObj?.businessObjectKey,\n searchOperator: '='\n },\n {\n searchField: 'Reminder.TenantID',\n searchValue: user.currentTenantId,\n searchOperator: '='\n }\n ];\n const searchObject = getSearchObject(filterElements, 1, 200, true);\n const data = { data: searchObject };\n\n if (reminderFiledForSearchApiMethod) {\n const response = await executeQueryAdHoc(\n data,\n reminderFiledForSearchApiMethod.apiMethodId\n );\n\n if (response?.status === 200) {\n const pageList = response.data.pageList;\n if (pageList?.length) {\n remindersList = pageList.map((item) => ({\n ...item.reminder,\n filedToType: item.type\n }));\n }\n } else {\n handleErrorSnackbar(null, t('Could not retrieve reminders'));\n }\n } else {\n handleErrorSnackbar(\n null,\n t('Search ReminderFiledFor Method Not Promoted')\n );\n }\n setLoading(false);\n setReminders(remindersList);\n }, [\n reminderFiledForSearchApiMethod,\n handleErrorSnackbar,\n nodeObj,\n manytoManyNodeObjKey,\n t,\n user\n ]);\n\n const openSheet = useCallback((value) => {\n setReminderId(value?.id || '');\n setSheetOpen(true);\n }, []);\n\n const closeSheet = useCallback(() => {\n setReminderId('');\n setSheetOpen(false);\n }, []);\n\n const handleEditPage = useCallback(\n (value) => {\n openSplitScreen({\n open: true,\n action: null,\n type: SplitScreenTypeEnums.Reminders,\n params: { id: value?.id || '', reloadReminders: getReminders }\n });\n },\n [openSplitScreen, getReminders]\n );\n\n const actionList = useMemo(\n () => [\n {\n id: 1, // Must be unique\n title: t('Reminder'),\n icon: ViewIcon,\n onClick: openSheet,\n disabled: false\n },\n {\n id: 2, // Must be unique\n title: t('Edit'),\n icon: EditIcon,\n onClick: handleEditPage,\n disabled: false\n }\n ],\n [t, openSheet, handleEditPage]\n );\n\n const getFiledToType = (params) => {\n const filedToType = FILE_TO_TYPES.find(\n (type) => type.value === params.data.filedToType\n );\n return filedToType?.label || '';\n };\n\n const getType = useCallback(\n (params) => {\n const type = typeOptions.find((t) => t.code === params.data.typeCode);\n return type?.name || '';\n },\n [typeOptions]\n );\n\n const columnDefs = [\n {\n headerName: 'Date',\n field: 'createdOn',\n resizable: true,\n sortable: true\n },\n {\n headerName: 'Subject',\n field: 'subject',\n resizable: true,\n sortable: true\n },\n {\n headerName: 'Reminder',\n field: 'content',\n resizable: true,\n sortable: true,\n valueGetter: (params) => params.data.content.replace(/(<([^>]+)>)/gi, '')\n },\n {\n headerName: 'Reminder Date',\n field: 'reminderDate',\n resizable: true,\n sortable: true\n },\n {\n headerName: 'Type',\n field: 'typeCode',\n resizable: true,\n sortable: true,\n valueGetter: getType\n },\n {\n headerName: 'Filed To Type',\n field: 'filedToType',\n resizable: true,\n sortable: true,\n valueGetter: getFiledToType\n },\n {\n headerName: 'Created By',\n field: 'userDisplayName',\n resizable: true,\n sortable: true\n },\n {\n headerName: '',\n cellRenderer: 'actionsRenderer',\n cellRendererParams: {\n actionList\n },\n pinned: 'right',\n suppressMenu: true,\n sortable: false\n }\n ];\n\n // no dependencies in the array because we only want getReminders to run once\n useEffect(() => {\n getReminders();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n const getTypeOptions = async () => {\n let options = [];\n if (reminderTypeGetAllApiMethod) {\n const typesResponse = await executeQueryAdHoc(\n { data: {} },\n reminderTypeGetAllApiMethod.apiMethodId\n );\n if (typesResponse?.status === 200) {\n options = typesResponse.data;\n }\n }\n setTypeOptions(options);\n };\n getTypeOptions();\n }, [reminderTypeGetAllApiMethod]);\n\n return (\n <>\n <SideSheet\n open={sheetOpen}\n onClose={closeSheet}\n title={t('Reminder')}\n width={600}\n >\n <RemindersScreen\n viewOnly={true}\n id={reminderId}\n shortcutContentFinderEnabled={false}\n formRef={formRef}\n />\n </SideSheet>\n <AmbientGridTemplate\n title={'Reminders'}\n data={reminders}\n columnDefs={columnDefs}\n loading={loading}\n frameworkComponents={{ actionsRenderer: ActionsRenderer }}\n groupingData={[]}\n />\n </>\n );\n};\n\nexport default UdpRemindersPage;\n","import React, {\n forwardRef,\n useCallback,\n useEffect,\n useMemo,\n useState\n} from 'react';\nimport WidgetCard from '../WidgetCard';\nimport { RemindersCard } from '../../../reminders/RemindersCard';\nimport { FluentButton } from '../../inputs/buttons/FluentButton';\nimport {\n CircularProgress,\n makeStyles,\n FormControlLabel,\n Switch\n} from '@material-ui/core';\nimport { useTranslation } from 'react-i18next';\nimport { useUser } from '../../../utilities/auth/useUser';\nimport {\n getSearchIdentifiers,\n getSearchObject\n} from '../../../utilities/search/SearchUtilities';\nimport {\n executeQueryAdHoc,\n executeQueryWithParameters,\n getBaseMethod\n} from '../../../udp/utilities/methodUtils';\nimport {\n LogicalSearchOperatorEnums,\n UdpEnums,\n UdpReminderFiledForType\n} from '../../../enums/unitySystemEnums';\nimport { useActionState } from '../../../hooks/useActions';\nimport { useHandleAxiosSnackbar } from '../../../utilities/apiHelpers';\nimport { FluentIconButton } from '../../inputs/buttons/FluentIconButton';\nimport { SortIcon } from '@fluentui/react-icons';\nimport { Alert } from '@material-ui/lab';\nimport { v4 as uuid } from 'uuid';\n\n// export const layout = {\n// w: { default: 2, min: 0, max: 4 },\n// h: { default: 2, min: 0, max: 4 }\n// };\n\nconst useStyles = makeStyles((theme) => ({\n root: {},\n actions: {\n display: 'flex',\n alignItems: 'center',\n width: '100%',\n justifyContent: 'flex-end'\n },\n actionButton: {\n marginRight: theme.spacing(0.25),\n position: 'relative'\n },\n fabProgress: {\n position: 'absolute',\n top: 4,\n left: '35%',\n zIndex: 1\n }\n}));\n\nexport const RemindersWidget = (props, ref) => {\n const { children, params, setParam, ...other } = props;\n const { onLoadedNodeClick, hideWidgetName, tree, catalogObjects } = params;\n\n const [sortDirection, setSortDirection] = useState(null);\n const [reminders, setReminders] = useState(null);\n const [loading, setLoading] = useState(false);\n const [allRemindersRequested, setAllRemindersRequested] = useState(false);\n const [buttonProgress, setButtonProgress] = useState(false);\n const [alertWarnings, setAlertWarnings] = useState([]);\n\n const classes = useStyles(props);\n const actionState = useActionState();\n const { catalogPromotedEntities } = actionState;\n const { handleErrorSnackbar } = useHandleAxiosSnackbar();\n const { t } = useTranslation();\n const user = useUser();\n\n const reminderFiledForSearchApiMethod = useMemo(() => {\n return getBaseMethod(\n UdpEnums.Udp_Reminder_Filed_For,\n 'unityBaseSearchMethod',\n catalogPromotedEntities\n );\n }, [catalogPromotedEntities]);\n\n const updateReminderApiMethod = useMemo(() => {\n return getBaseMethod(\n UdpEnums.Udp_Reminder,\n 'unityBaseUpdateMethod',\n catalogPromotedEntities\n );\n }, [catalogPromotedEntities]);\n\n const currentSortDirection = useMemo(() => {\n if (sortDirection === 'asc') {\n return 'desc';\n } else if (sortDirection === 'desc') {\n return 'asc';\n } else {\n return null;\n }\n }, [sortDirection]);\n\n const getNodeToLoad = useCallback(\n (reminder) => {\n const nodeToLoad = {};\n const domainObject = reminder?.domainObject;\n const entityBusinessKey = reminder?.entityBusinessKey || '';\n let treeStructureId = '';\n let apiMethodId = '';\n const matchingNode = tree?.treeStructure?.find(\n (node) => node.properties?.catalogReturnObject === domainObject\n );\n\n if (matchingNode) {\n treeStructureId = matchingNode.id;\n if (!matchingNode.parentId) {\n apiMethodId = tree.apiMethodInstance.apiMethodId;\n } else {\n const associatedInquiryTree =\n matchingNode.properties?.associatedInquiryTree;\n if (associatedInquiryTree) {\n apiMethodId =\n associatedInquiryTree.apiMethodInstance?.apiMethodId || '';\n }\n }\n }\n nodeToLoad.apiMethodId = apiMethodId;\n\n const searchIdentifiers = getSearchIdentifiers(\n catalogObjects,\n domainObject\n );\n const filterElements = [];\n const searchValue = entityBusinessKey.split('|')?.[1];\n const values = searchValue.split(',');\n\n searchIdentifiers.forEach((searchIdentifier, index) => {\n const searchField = searchIdentifier\n ? searchIdentifier.charAt(0).toUpperCase() + searchIdentifier.slice(1)\n : '';\n filterElements.push({\n searchField: searchField,\n searchOperator: '=',\n searchValue: values[index]\n });\n });\n\n nodeToLoad.queryPayload = getSearchObject(\n filterElements,\n 1,\n 50,\n true,\n LogicalSearchOperatorEnums.And\n );\n\n nodeToLoad.nodeDetails = {\n catalogReturnObject: domainObject,\n treeStructureId: treeStructureId\n };\n\n return nodeToLoad;\n },\n [tree, catalogObjects]\n );\n\n const getIcon = useCallback(\n (reminder) => {\n const domainObject = reminder?.domainObject;\n const matchingNode = tree?.treeStructure?.find(\n (node) => node.properties?.catalogReturnObject === domainObject\n );\n return matchingNode?.properties?.defaultIcon || {};\n },\n [tree]\n );\n\n const sortByDate = useCallback((reminderList, direction) => {\n const sortedReminders = [...reminderList];\n if (direction === 'asc') {\n sortedReminders.sort(\n (a, b) => new Date(b.reminderDate) - new Date(a.reminderDate)\n );\n } else if (direction === 'desc') {\n sortedReminders.sort(\n (a, b) => new Date(a.reminderDate) - new Date(b.reminderDate)\n );\n }\n setReminders(sortedReminders);\n }, []);\n\n const sort = useCallback(() => {\n sortByDate(reminders, sortDirection || 'desc');\n if (sortDirection === 'desc' || !sortDirection) {\n setSortDirection('asc');\n } else if (sortDirection === 'asc') {\n setSortDirection('desc');\n }\n }, [reminders, sortByDate, sortDirection]);\n\n const getReminders = useCallback(\n async (allRequested = false, rffSearchApiMethod) => {\n let remindersList = [];\n const warnings = [];\n\n if (!reminders) {\n setLoading(true);\n }\n\n let filterElements = [\n {\n searchField: 'Reminder.Acknowledged',\n searchValue: false,\n searchOperator: '=',\n groupId: 1\n },\n {\n searchField: 'Reminder.ReminderDate',\n searchValue: new Date(),\n searchOperator: '<=',\n groupId: 1\n },\n {\n searchField: 'Type',\n searchValue: UdpReminderFiledForType.System,\n searchOperator: '=',\n groupId: 2\n },\n {\n searchField: 'Type',\n searchValue: UdpReminderFiledForType.User,\n searchOperator: '=',\n groupId: 3\n },\n\n {\n searchField: 'Reminder.UnityUserID',\n searchValue: user.id,\n searchOperator: '=',\n groupId: 3\n }\n ];\n\n let filterGroups = [\n {\n groupId: 1,\n logicalSearchOperator: LogicalSearchOperatorEnums.And,\n parentGroupId: null\n },\n {\n groupId: 2,\n logicalSearchOperator: LogicalSearchOperatorEnums.Or,\n parentGroupId: null\n },\n {\n groupId: 3,\n logicalSearchOperator: LogicalSearchOperatorEnums.And,\n parentGroupId: 2\n }\n ];\n\n if (allRequested) {\n filterElements = [\n {\n searchField: 'Type',\n searchValue: UdpReminderFiledForType.System,\n searchOperator: '=',\n groupId: 2\n },\n {\n searchField: 'Type',\n searchValue: UdpReminderFiledForType.User,\n searchOperator: '=',\n groupId: 3\n },\n {\n searchField: 'Reminder.UnityUserID',\n searchValue: user.id,\n searchOperator: '=',\n groupId: 3\n }\n ];\n\n filterGroups = [\n {\n groupId: 2,\n logicalSearchOperator: LogicalSearchOperatorEnums.Or,\n parentGroupId: null\n },\n {\n groupId: 3,\n logicalSearchOperator: LogicalSearchOperatorEnums.And,\n parentGroupId: 2\n }\n ];\n }\n\n const searchObject = getSearchObject(\n filterElements,\n 1,\n 200,\n true,\n LogicalSearchOperatorEnums.And,\n filterGroups\n );\n const data = { data: searchObject };\n\n if (rffSearchApiMethod) {\n if (!rffSearchApiMethod.apiMethodId) {\n warnings.push({\n id: uuid(),\n severity: 'warning',\n message: t('Search ReminderFiledFor Method Not Promoted')\n });\n } else {\n const response = await executeQueryAdHoc(\n data,\n rffSearchApiMethod.apiMethodId\n ).catch((e) => {\n setLoading(false);\n });\n\n if (response?.status === 200) {\n const pageList = response.data.pageList;\n if (pageList?.length) {\n remindersList = pageList.map((item) => ({\n ...item.reminder,\n domainObject: item.domainObject,\n filedToType: item.type,\n entityBusinessKey: item.entityBusinessKey\n }));\n }\n } else {\n warnings.push({\n id: uuid(),\n severity: 'error',\n message: t('Could not retrieve reminders')\n });\n }\n }\n }\n // Filter for reminders that belong to any of the domains within the tree\n const treeDomains = tree?.treeStructure.map(\n (node) => node.properties?.catalogReturnObject\n );\n if (treeDomains.length) {\n remindersList = remindersList.filter((reminder) =>\n treeDomains.includes(reminder.domainObject)\n );\n } else {\n remindersList = [];\n }\n setAlertWarnings(warnings);\n setLoading(false);\n sortByDate(remindersList, currentSortDirection);\n },\n [t, user, reminders, sortByDate, currentSortDirection, tree]\n );\n\n const updateRemindersAcknowledgement = useCallback(\n async (reminders) => {\n if (updateReminderApiMethod) {\n const updatedPromises = [];\n reminders.forEach((reminder) => {\n reminder.acknowledged = reminder.checked;\n const data = {\n requestBody: {\n ...reminder\n }\n };\n data['{iD}'] = reminder.id;\n updatedPromises.push(\n executeQueryWithParameters(\n { data },\n updateReminderApiMethod.apiMethodId\n )\n );\n });\n await Promise.all(updatedPromises.map((p) => p.catch((e) => e))).then(\n (responses) => {\n responses.forEach((response) => {\n if (response.status === 200) {\n const entityBusinessKey = response.data.entityBusinessKey;\n const matchingReminder = reminders?.find(\n (nftu) => nftu.value === entityBusinessKey\n );\n if (!matchingReminder) {\n console.warn(`Reminder not updated for all file to entities`);\n }\n }\n });\n }\n );\n } else {\n handleErrorSnackbar(null, 'Update Reminder Method Not Promoted');\n }\n },\n [updateReminderApiMethod, handleErrorSnackbar]\n );\n\n const handleAcknowledgeClick = useCallback(async () => {\n const acknowledgedReminders = reminders?.filter((r) => r.checked);\n if (acknowledgedReminders.length) {\n setButtonProgress(true);\n await updateRemindersAcknowledgement(acknowledgedReminders);\n setButtonProgress(false);\n getReminders(allRemindersRequested, reminderFiledForSearchApiMethod);\n }\n }, [\n reminders,\n getReminders,\n updateRemindersAcknowledgement,\n allRemindersRequested,\n reminderFiledForSearchApiMethod\n ]);\n\n const handleSwitchChange = useCallback(\n async (event) => {\n setLoading(true);\n if (event.target.checked) {\n setAllRemindersRequested(event.target.checked);\n await getReminders(true, reminderFiledForSearchApiMethod);\n } else {\n setAllRemindersRequested(false);\n await getReminders(false, reminderFiledForSearchApiMethod);\n }\n setLoading(false);\n },\n [getReminders, reminderFiledForSearchApiMethod]\n );\n\n // no dependencies in the array because we only want getReminders to run once\n useEffect(() => {\n if (reminderFiledForSearchApiMethod) {\n getReminders(false, reminderFiledForSearchApiMethod);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [reminderFiledForSearchApiMethod]);\n\n return (\n <WidgetCard\n ref={ref}\n // title={'Reminders'}\n hideWidgetName={hideWidgetName}\n headerActions={\n <div className={classes.actions}>\n <FormControlLabel\n control={\n <Switch\n id='udpRecord-RemindersWidget-Switch'\n udprecordid='udpRecord-RemindersWidget-Switch'\n size='small'\n onChange={handleSwitchChange}\n />\n }\n label='All'\n style={{ marginRight: 8 }}\n />\n <FluentIconButton\n id='udpRecord-RemindersWidget-Sort'\n udprecordid='udpRecord-RemindersWidget-Sort'\n icon={SortIcon}\n onClick={sort}\n style={{ marginRight: 4 }}\n />\n <div className={classes.actionButton}>\n <FluentButton\n id='udpRecord-RemindersWidget-Complete'\n udprecordid='udpRecord-RemindersWidget-Complete'\n variant='contained'\n color='secondary'\n onClick={handleAcknowledgeClick}\n >\n {buttonProgress && (\n <CircularProgress\n size={24}\n color='primary'\n className={classes.fabProgress}\n />\n )}\n {t('Complete')}\n </FluentButton>\n </div>\n </div>\n }\n {...other}\n >\n {alertWarnings.length ? (\n alertWarnings.map((warning) => (\n <Alert severity={warning.severity || 'warning'}>\n {warning.message || ''}\n </Alert>\n ))\n ) : (\n <RemindersCard\n reminders={reminders}\n setReminders={setReminders}\n loading={loading}\n onLoadedNodeClick={onLoadedNodeClick}\n getNodeToLoad={getNodeToLoad}\n getIcon={getIcon}\n updateRemindersAcknowledgement={updateRemindersAcknowledgement}\n />\n )}\n\n {children}\n </WidgetCard>\n );\n};\n\nexport default forwardRef(RemindersWidget);\n","import React, { useMemo } from 'react';\nimport { UdpFormsRenderer } from 'udp-react-stencil-component-library';\nimport { useLocation, useHistory } from 'react-router-dom';\nimport { useUser } from '../../utilities/auth/useUser';\nimport { ConfigService } from 'udp-react-stencil-component-library';\nimport { useActions } from '../../hooks/useActions';\nimport { acquireAccessToken } from '../../utilities/auth/authActions';\nimport { useSnackbar } from 'notistack';\n\n\nconst useSearchParams = () => {\n const search = useLocation().search;\n\n // when params are populated with an internal redirect, like on a Page menu, the useLocation hook does not get the query params\n // so it will fallback with window.location.search in that case\n return new URLSearchParams(search || window.location.search);\n}\nconst UdpPrivateForm = (props) => {\n const user = useUser();\n const { enqueueSnackbar, closeSnackbar } = useSnackbar();\n const { triggerAction } = useActions();\n const queryParams = useSearchParams();\n const history = useHistory();\n\n const formId = useMemo(() => {\n return queryParams.get('udpf_formId');\n }, [queryParams]);\n\n const versionId = useMemo(() => {\n return queryParams.get('udpf_version');\n }, [queryParams]);\n\n const submissionId = useMemo(() => {\n return queryParams.get('udpf_submissionId');\n }, [queryParams]);\n\n return (\n <UdpFormsRenderer\n formId={formId}\n triggerAction={triggerAction}\n version={versionId}\n submissionId={submissionId}\n getUserCallback={() => user}\n enqueueSnackbar={enqueueSnackbar}\n closeSnackbar={closeSnackbar}\n history={history}\n isPublic={false}\n />\n );\n};\nexport default UdpPrivateForm;\n","import React, { useMemo, useState } from 'react';\nimport { UdpFormsList } from 'udp-react-stencil-component-library';\nimport { useUser } from '../../utilities/auth/useUser';\nimport { useTenant } from '../../utilities/tenant/useTenant';\nimport { useHistory } from 'react-router-dom';\n\nconst UdpFormsListPage = (props) => {\n const user = useUser();\n const tenant = useTenant();\n const history = useHistory();\n\n const tenantId = tenant?.activeTenant?.tenantId;\n\n return (\n <div>\n <UdpFormsList\n history={history}\n />\n </div>\n );\n};\nexport default UdpFormsListPage;\n","import React, { useEffect, useMemo, useState } from 'react';\nimport { useLocation, useHistory } from 'react-router-dom';\nimport { UdpFormsBuilder } from 'udp-react-stencil-component-library';\nimport { useUser } from '../../utilities/auth/useUser';\nimport { useTenant } from '../../utilities/tenant/useTenant';\nimport { useSnackbar } from 'notistack';\n\nconst UdpFormsBuilderPage = () => {\n const user = useUser();\n const tenant = useTenant();\n const location = useLocation(); // detects changes in the URL\n const history = useHistory();\n const { enqueueSnackbar, closeSnackbar } = useSnackbar();\n\n // Store search params in state so re-render happens when they change\n const [searchParams, setSearchParams] = useState(() => new URLSearchParams(location.search));\n\n // Recompute search params on location change\n useEffect(() => {\n setSearchParams(new URLSearchParams(location.search));\n }, [location.search]);\n\n // Extract values from searchParams\n const formId = searchParams.get('udpf_formId');\n const version = searchParams.get('udpf_version');\n const callbackUrl = searchParams.get('udpf_callback_url');\n\n return (\n <div>\n <UdpFormsBuilder\n formId={formId}\n version={version}\n enqueueSnackbar={enqueueSnackbar}\n closeSnackbar={closeSnackbar}\n history={history}\n />\n </div>\n );\n};\n\nexport default UdpFormsBuilderPage;\n","import React from 'react';\nimport { ImportDataFromFileMapping } from '../fileImportMapping/ImportDataFromFileMapping';\n\nconst UdpImportFromFileMappingPage = props => {\n return <ImportDataFromFileMapping/>\n};\n\nexport default UdpImportFromFileMappingPage;\n","export enum AuditEventTypeEnums {\n Create_Domain = 1,\n Update_Domain = 2,\n Delete_Domain = 3,\n}\n","import { DateTime } from 'luxon'\n\nexport function formatDateLong(value) {\n try {\n let date = new Date(value);\n const day = date.toLocaleString('default', { day: '2-digit' });\n const month = date.toLocaleString('default', { month: 'short' });\n const year = date.toLocaleString('default', { year: 'numeric' });\n const dayOfWeek = date.toLocaleString('default', { weekday: 'long' });\n return `${day} ${month}, ${year} (${dayOfWeek})`;\n } catch (error) {\n return '';\n }\n}\n\nexport function formatDate(value, formatStr = '') {\n try {\n let date = new Date(value);\n const day = date.toLocaleString('default', { day: '2-digit' });\n const month = date.toLocaleString('default', { month: 'short' });\n const year = date.toLocaleString('default', { year: 'numeric' });\n\n switch (formatStr.toLowerCase()) {\n case 'mon dd, yyyy':\n return `${day} ${month}, ${year}`;\n case 'dd/mm/yyyy':\n return `${date.getDate()}/${date.getMonth() + 1}/${date.getFullYear()}`;\n case 'yyyy-mm-dd':\n return date.toISOString().split('T')[0];\n default:\n return '';\n }\n } catch (error) {\n return '';\n }\n}\n\nexport function getDaysDiff(dateOne, dateTwo) {\n const d1 = new Date(dateOne);\n const d2 = new Date(dateTwo);\n const diff = d2.getTime() - d1.getTime();\n\n return diff / (1000 * 60 * 60 * 24);\n}\n\n/**\n * Creates a Date object based on an ISO 8601 date string.\n * @param dateString A ISO 8601 date string. EX: yyyy-MM-ddThh:mm:ss[Z|offset]\n * @returns A date object, or null if the format was invalid.\n */\nexport const getDateFromString = (dateString) => {\n if (!dateString || dateString.length === 0) {\n return null;\n }\n\n const date = DateTime.fromISO(dateString);\n\n return date ? date.toJSDate() : null;\n};\n\n/**\n * Formats a date string by converting it to a date in the specified time zone,\n * stripping out the time element and returning a localized date string.\n * @param date A Date or ISO 8601 date string. EX: yyyy-MM-ddThh:mm:ss[Z|offset]\n * @param timeZone An IANA time zone id. If supplied, convert the date into the specified time zone,\n * otherwise convert to local browser time.\n * @returns A date string without time based on the supplied time zone and the\n * user's browser locale settings.\n */\nexport const getLocalizedDateString = (date, timeZone = 'local') => {\n const convertedDate = date instanceof Date ? date : getDateFromString(date);\n\n return convertedDate\n ? DateTime.fromJSDate(convertedDate, { zone: timeZone }).toLocaleString(DateTime.DATE_SHORT)\n : '';\n};\n\n/**\n * Converts a date string to a date in the specified timezone,\n * and returning a converted date with the localized date and time.\n * @param date A Date or ISO 8601 date string. EX: yyyy-MM-ddThh:mm:ss[Z|offset]\n * @param timeZone If supplied, convert the date into the specified IANA time zone,\n * otherwise convert to local browser time.\n * @returns A converted date and time based on the user's browser locale settings.\n */\nexport const getLocalizedDateTime = (date, timeZone = 'local') => {\n const convertedDate = date instanceof Date ? date : getDateFromString(date);\n if (convertedDate === null) {\n return '';\n }\n const convertedDateTime = DateTime.fromJSDate(convertedDate, { zone: timeZone });\n\n return convertedDateTime;\n};\n\n/**\n * Formats a date string by converting it to a date in the specified timezone,\n * and returning a string with the localized date and time.\n * @param date A Date or ISO 8601 date string. EX: yyyy-MM-ddThh:mm:ss[Z|offset]\n * @param delimiter If supplied, split the date and time by this string when returned.\n * @param timeZone If supplied, convert the date into the specified IANA time zone,\n * otherwise convert to local browser time.\n * @returns A date and time string based on the user's browser locale settings.\n */\nexport const getLocalizedDateTimeString = (\n date,\n delimiter = null,\n timeZone = 'local',\n includeOffset = false,\n) => {\n const convertedDate = date instanceof Date ? date : getDateFromString(date);\n if (convertedDate === null) {\n return '';\n }\n const convertedDateTime = DateTime.fromJSDate(convertedDate, { zone: timeZone });\n\n if (delimiter !== null) {\n return (\n convertedDateTime.toLocaleString(DateTime.DATE_SHORT) +\n delimiter +\n convertedDateTime.toLocaleString(DateTime.TIME_WITH_SECONDS) +\n (includeOffset ? ' ' + convertedDateTime.offsetNameShort : '')\n );\n } else {\n return (\n convertedDateTime.toLocaleString(DateTime.DATETIME_SHORT_WITH_SECONDS) +\n (includeOffset ? ' ' + convertedDateTime.offsetNameShort : '')\n );\n }\n};\n\n/**\n * Formats a date string by converting it to a date in the specified time zone,\n * and returning a string as the localized time.\n * @param date A Date or ISO 8601 date string. EX: yyyy-MM-ddThh:mm:ss[Z|offset]\n * @param timeZone An IANA time zone id. If supplied, convert the date into the specified time zone,\n * otherwise convert to local browser time.\n * @returns A time string without the date based on the supplied time zone and user's\n * browser locale settings.\n */\nexport const getLocalizedTimeString = (date, timeZone = 'local') => {\n const convertedDate = date instanceof Date ? date : getDateFromString(date);\n\n return convertedDate\n ? DateTime.fromJSDate(convertedDate, { zone: timeZone }).toLocaleString(\n DateTime.TIME_WITH_SECONDS,\n )\n : '';\n};\n","import { IANAZone } from 'luxon';\nimport { useCallback } from 'react';\nimport {\n getLocalizedDateString,\n getLocalizedDateTimeString,\n} from '../../UI/widgets/utils/dateUtils';\nimport { useAuthedUser } from '../../utilities/auth/useAuthedUser'\n\n/**\n * Gets a function that can be used to convert a date or\n * ISO 8601 date string (EX: yyyy-MM-ddThh:mm:ss[Z|offset])\n * to a localized date string without time in the specified IANA time zone.\n * @param timeZone An IANA time zone to convert the date to before returning as a string.\n * @returns A function to convert a date to a localized string.\n */\n\nexport const useGetLocalizedDateString = (timeZone) => {\n const user = useAuthedUser();\n\n const getDateString = useCallback(\n (date) => {\n const validTimeZone =\n timeZone !== 'local' &&\n (timeZone === user?.additionalProperties?.activeUtilityTimeZone ||\n IANAZone.isValidZone(timeZone))\n ? timeZone\n : 'local'; // IANAZone.isValidZone is very slow, skip it if known valid timeZone passed\n return getLocalizedDateString(date, validTimeZone);\n },\n [user, timeZone],\n );\n\n return getDateString;\n};\n\n/**\n * Gets a function that can be used to convert a date or\n * ISO 8601 date string (EX: yyyy-MM-ddThh:mm:ss[Z|offset])\n * to a localized date time string in the specified IANA time zone.\n * @param timeZone The IANA time zone to convert the date before converting to\n * a localized string.\n * @param includeTimeZoneOffset If true, include the time zone offset in the localized string.\n * @returns A function to convert a date to a localized string.\n */\n\nexport const useGetLocalizedDateTimeString = (timeZone, includeTimeZoneOffset = false) => {\n const user = useAuthedUser();\n\n const getDateTimeString = useCallback(\n (date, delimiter = null) => {\n const validTimeZone =\n timeZone !== 'local' &&\n (timeZone === user?.additionalProperties?.activeUtilityTimeZone ||\n IANAZone.isValidZone(timeZone))\n ? timeZone\n : 'local'; // IANAZone.isValidZone is very slow, skip it if known valid timeZone passed\n return getLocalizedDateTimeString(date, delimiter, validTimeZone, includeTimeZoneOffset);\n },\n [user, timeZone, includeTimeZoneOffset],\n );\n\n return getDateTimeString;\n};\n\n/**\n * Gets a function that can be used to convert a date or\n * ISO 8601 date string (EX: yyyy-MM-ddThh:mm:ss[Z|offset])\n * to a localized date time string in the current user's time zone.\n * @param includeTimeZoneOffset If true, include the time zone offset in the localized string.\n * @returns A function to convert a date to a localized string.\n */\n\nexport const useGetLocalizedUserDateTimeString = (includeTimeZoneOffset = false) => {\n const user = useAuthedUser();\n\n const getDateTimeString = useCallback(\n (date, delimiter = null) => {\n return getLocalizedDateTimeString(\n date,\n delimiter,\n user?.additionalProperties?.timeZone,\n includeTimeZoneOffset,\n );\n },\n [user, includeTimeZoneOffset],\n );\n\n return getDateTimeString;\n};\n","import React, { useEffect, useMemo, useState } from 'react';\nimport { SideSheet } from '../../UI/surfaces/SideSheet';\nimport { useTranslation } from 'react-i18next';\nimport { FluentTextField } from '../../UI/inputs/textField/FluentTextField';\nimport { GridRow } from '../../layout/GridRow';\nimport { GridUnit } from '../../layout/GridUnit';\nimport { AmbientCard } from '../../UI/surfaces/cards/AmbientCard';\nimport { makeStyles, Box } from \"@material-ui/core\";\nimport { AuditEventTypeEnums } from '../../enums/auditEventEnums';\nimport ReactJson from 'react-json-view';\nimport { LinearProgress } from '../../UI/loading/LinearProgress';\nimport { useGetLocalizedUserDateTimeString } from '../utilities/dateLocalizationHooks';\nimport { UdpEnums } from '../../enums/unitySystemEnums';\nimport { executeQueryWithParameters, getBaseMethod } from '../utilities/methodUtils';\n\nconst useStyles = makeStyles((theme) => ({\n textField: {\n marginTop: theme.spacing(0),\n },\n loadingBar: {\n top: theme.spacing(-2),\n marginLeft: theme.spacing(-2),\n marginRight: theme.spacing(-2),\n },\n}));\n\nconst UdpAuditEventSidesheet = props => {\n const {\n auditEvent,\n isSideSheetOpen,\n handleSideSheet,\n promotedEntities,\n sheetProps,\n } = props;\n\n const { t } = useTranslation();\n const classes = useStyles();\n const getLocalizedDateTimeString = useGetLocalizedUserDateTimeString();\n const [auditEventDetail, setAuditEventDetail] = React.useState({});\n const [loading, setLoading] = useState(false);\n\n const auditEventDetailGetApiMethod = useMemo(() => {\n return getBaseMethod(\n UdpEnums.Udp_Audit_Event_Detail,\n 'unityBaseGetMethod',\n promotedEntities\n );\n }, [promotedEntities]);\n\n const onCloseSideSheet = () => {\n handleSideSheet(false);\n }\n\n useEffect(() => {\n const getAuditEventDetail = async () => {\n let auditEventDetail = {};\n const data = {};\n try {\n if (auditEventDetailGetApiMethod && auditEvent) {\n setLoading(true);\n data['{auditEventId}'] = auditEvent.id;\n const response = await executeQueryWithParameters(\n { data },\n auditEventDetailGetApiMethod.apiMethodId\n );\n if (response?.status === 200) {\n auditEventDetail = response.data;\n setAuditEventDetail(auditEventDetail);\n }\n }\n } finally {\n setLoading(false);\n }\n };\n getAuditEventDetail();\n }, [auditEvent, auditEventDetailGetApiMethod]);\n\n return (\n <SideSheet\n {...sheetProps}\n open={isSideSheetOpen}\n onClose={onCloseSideSheet}\n title={t(`Audit Event Details`)}\n width={800}\n color='primary'\n >\n {loading && (\n <LinearProgress className={classes.loadingBar} color=\"secondary\" />\n )}\n <GridRow>\n <GridUnit ratio=\"1:1\" width=\"100%\">\n <AmbientCard title={t('Event')} fullWidth={true} subCard>\n <>\n <FluentTextField\n className={classes.textField}\n id=\"auditEventTypeName\"\n label={t('Event Type')}\n value={auditEvent?.auditEventTypeName || ''}\n disabled={true}\n />\n <FluentTextField\n className={classes.textField}\n id=\"auditEventUserDisplayName\"\n label={t('User')}\n value={auditEvent?.userDisplayName || ''}\n disabled={true}\n />\n <FluentTextField\n className={classes.textField}\n id=\"auditEventDomain\"\n label={t('Description')}\n value={auditEvent?.domain || ''}\n disabled={true}\n />\n <FluentTextField\n className={classes.textField}\n id=\"auditEventCreatedOn\"\n label={t('Created On')}\n value={getLocalizedDateTimeString(auditEvent?.createdOn ?? '')}\n disabled={true}\n />\n <Box>\n {(auditEvent?.typeCode === AuditEventTypeEnums.Update_Domain ||\n auditEvent?.typeCode === AuditEventTypeEnums.Delete_Domain) &&\n <ReactJson\n src={auditEventDetail?.oldObj ? JSON.parse(auditEventDetail?.oldObj) : {}}\n name={t('Old Details')}\n displayDataTypes={false}\n displayObjectSize={false}\n />\n }\n {(auditEvent?.typeCode === AuditEventTypeEnums.Update_Domain ||\n auditEvent?.typeCode === AuditEventTypeEnums.Create_Domain) &&\n <ReactJson\n src={auditEventDetail?.newObj ? JSON.parse(auditEventDetail?.newObj) : {}}\n name={t('New Details')}\n displayDataTypes={false}\n displayObjectSize={false}\n />\n }\n </Box>\n </>\n </AmbientCard>\n </GridUnit>\n </GridRow>\n </SideSheet>\n )\n}\n\nexport default UdpAuditEventSidesheet;\n","import { DateTime, IANAZone } from 'luxon';\nimport { useMemo } from 'react';\nimport { getDateFromString } from '../../UI/widgets/utils/dateUtils';\nimport { GridExcelStyleEnums } from '../../enums/unitySystemEnums';\nimport { useAuthedUser } from '../../utilities/auth/useAuthedUser'\nimport { useGetLocalizedDateString, useGetLocalizedDateTimeString } from './dateLocalizationHooks';\n\n\nexport const useDateStringColumnDef = (\n includeTime = false,\n timeZone = null,\n includeTimeZoneOffset = false,\n) => {\n const user = useAuthedUser();\n\n const zone = useMemo(() => {\n const tz = timeZone ?? user?.additionalProperties?.timeZone ?? 'local';\n const validTimeZone =\n tz !== 'local' &&\n (tz === user?.additionalProperties?.timeZone || IANAZone.isValidZone(tz))\n ? tz\n : 'local'; // IANAZone.isValidZone is very slow, skip it if known valid timeZone passed\n return validTimeZone;\n }, [timeZone, user]);\n\n const getLocalizedDateTimeString = useGetLocalizedDateTimeString(zone, includeTimeZoneOffset);\n const getLocalizedDateString = useGetLocalizedDateString(zone);\n\n const columnDef = useMemo(() => {\n return !user\n ? {}\n : ({\n valueFormatter: (params) => {\n if (!params) {\n return '';\n }\n if (includeTime) {\n return getLocalizedDateTimeString(params.value);\n } else {\n return getLocalizedDateString(params.value);\n }\n },\n cellClass: includeTime\n ? GridExcelStyleEnums.DateTimeShortWithSeconds\n : GridExcelStyleEnums.DateShort,\n filter: 'agDateColumnFilter',\n filterParams: {\n comparator: function (filterLocalDateAtMidnight, cellValue) {\n const cellDate = getDateFromString(cellValue);\n if (!cellDate) {\n return null;\n }\n\n // Assume date picker is in the same time zone that we're displaying dates in so that the results make sense to the user\n const filterDateTimeMidnight = DateTime.fromJSDate(filterLocalDateAtMidnight).setZone(\n zone,\n { keepLocalTime: true },\n );\n const cellDateTimeMidnight = DateTime.fromJSDate(cellDate, { zone: zone }).set({\n hour: 0,\n minute: 0,\n second: 0,\n millisecond: 0,\n });\n\n if (cellDateTimeMidnight < filterDateTimeMidnight) {\n return -1;\n } else if (cellDateTimeMidnight > filterDateTimeMidnight) {\n return 1;\n } else {\n return 0;\n }\n },\n buttons: ['apply', 'reset'],\n closeOnApply: true,\n suppressAndOrCondition: true,\n filterOptions: ['equals', 'lessThan', 'greaterThan', 'inRange'],\n },\n });\n }, [includeTime, getLocalizedDateString, getLocalizedDateTimeString, user, zone]);\n\n return columnDef;\n};\n","import React, { useCallback, useEffect, useState, useMemo, useRef } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { makeStyles } from '@material-ui/core';\nimport { AmbientGridTemplate } from '../../UI/templates/AmbientGridTemplate';\nimport { useAgGridApi } from '../../utilities/aggrid/AgTable';\nimport { debounce } from 'lodash';\nimport { LogicalSearchOperatorEnums, UdpEnums } from '../../enums/unitySystemEnums';\nimport { LinearProgress } from '../../UI/loading/LinearProgress';\nimport { getSearchObject } from '../../utilities/search/SearchUtilities';\nimport { ViewIcon, RefreshIcon } from '@fluentui/react-icons';\nimport UdpAuditEventSidesheet from './UdpAuditEventSidesheet';\nimport { ActionsRenderer } from '../../UI/templates/ui/renderers/ActionsRenderer';\nimport { useDateStringColumnDef } from '../utilities/useDateStringColumnDef';\nimport { executeQueryAdHoc, getBaseMethod } from '../utilities/methodUtils';\nimport { useCatalogStore } from '../../stores/catalogStore';\nimport { useHandleAxiosSnackbar } from '../../utilities/apiHelpers';\nimport { SearchMethodUdpGrid } from '../../UI';\nimport { usePromotedMethodEntity } from '../../hooks';\n\nconst PAGE_SIZE = 15;\n\nconst baseSearchPayload = {\n pageNumber: 1,\n pageSize: PAGE_SIZE,\n filterElements: [],\n filterGroups: [],\n orderElements: [],\n groupingType: '',\n groupProperty: [],\n groupOperationList: [],\n eagerLoad: false,\n logicalSearchOperator: 1,\n};\n\nconst useStyles = makeStyles(theme => ({\n loadingBar: {\n bottom: theme.spacing(-0.5),\n marginLeft: theme.spacing(0.5),\n marginRight: theme.spacing(0.5),\n },\n}));\n\nconst UdpAuditEventsPage = (props) => {\n const { params } = props;\n\n // Hooks\n const { gridApi, gridColumnApi, onGridReady } = useAgGridApi();\n const { t } = useTranslation();\n const classes = useStyles();\n const dateStringColumnDef = useDateStringColumnDef(true);\n const { handleErrorSnackbar } = useHandleAxiosSnackbar();\n const gridApiRef = useRef(null);\n\n // States\n const [searchQuery, setSearchQuery] = useState('');\n const [displayProgressBar, setDisplayProgressBar] = useState(false);\n const [selectedAuditEvent, setSelectedAuditEvent] = useState(null);\n const [viewSideSheetOpen, setViewSideSheetOpen] = useState(false);\n const [auditEventTypes, setAuditEventTypes] = useState([]);\n const [searchObject, setSearchObject] = useState(baseSearchPayload);\n\n const currentApiCatalogId = useCatalogStore(\n (state) => state.currentApiCatalogId\n );\n\n const promotedMethodEntitiesMap = useCatalogStore(\n (state) => state.promotedMethodEntitiesMap\n );\n\n const promotedEntities = useMemo(() => {\n if (!currentApiCatalogId || !promotedMethodEntitiesMap) {\n return null;\n }\n return promotedMethodEntitiesMap[currentApiCatalogId] || [];\n }, [promotedMethodEntitiesMap, currentApiCatalogId]);\n\n const auditEventTypeGetAllApiMethod = useMemo(() => {\n return getBaseMethod(\n UdpEnums.Udp_Audit_Event_Type,\n 'unityBaseGetAllMethod',\n promotedEntities\n );\n }, [promotedEntities]);\n\n const auditEventSearchApiMethod = useMemo(() => {\n return getBaseMethod(\n UdpEnums.Udp_Audit_Event,\n 'unityBaseSearchMethod',\n promotedEntities\n );\n }, [promotedEntities]);\n\n const getAuditEventTypeName = useCallback(auditEventTypeCode => {\n if (!auditEventTypes) return '';\n const matchingAuditEventType = auditEventTypes.find(\n auditEventType => auditEventType.code === auditEventTypeCode\n );\n return matchingAuditEventType?.name || '';\n }, [auditEventTypes]);\n\n const handleSideSheet = useCallback((isOpen, auditEvent) => {\n setViewSideSheetOpen(isOpen);\n setSelectedAuditEvent(auditEvent);\n }, []);\n\n const columnDefs = useMemo(() => {\n return [\n {\n headerName: t('Event Type'),\n field: 'UdpAuditEventUdpAuditEventType.Name',\n valueGetter: params => getAuditEventTypeName(params.data.typeCode),\n resizable: true,\n sortable: false,\n },\n {\n headerName: t('User'),\n field: 'userDisplayName',\n resizable: true,\n sortable: false,\n },\n {\n headerName: t('Description'),\n field: 'domain',\n resizable: true,\n sortable: false,\n },\n {\n headerName: t('Created On'),\n field: 'createdOn',\n resizable: true,\n sortable: true,\n ...dateStringColumnDef\n },\n {\n field: 'actions',\n headerName: t('Details'),\n cellRenderer: 'actionsRenderer',\n cellRendererParams: {\n actionList: [\n {\n id: 0,\n title: t('View'),\n iconName: 'view',\n handleOnClick: (e, auditEvent) =>\n handleSideSheet(true, {...auditEvent?.data, auditEventTypeName: getAuditEventTypeName(auditEvent?.data?.typeCode)}),\n disabled: false,\n },\n\n ],\n },\n suppressMenu: true,\n sortable: false,\n filter: false,\n },\n ];\n }, [getAuditEventTypeName]);\n\n const gridFunctions = [\n { name: 'chipFilter' },\n { name: 'agGridExport' },\n { name: 'agGridSizeColumnsToFit' },\n { name: 'agGridAutoSizeColumns' },\n { name: 'agGridResetColumns' },\n { name: 'agGridHideShowColumns' },\n ];\n\n const gridOptions = useMemo(() => {\n return {\n pagination: true,\n };\n }, []);\n\n useEffect(() => {\n const getAuditEventTypes = async () => {\n let types = [];\n if (auditEventTypeGetAllApiMethod) {\n const response = await executeQueryAdHoc(\n { data: {}},\n auditEventTypeGetAllApiMethod.apiMethodId\n );\n if (response?.status === 200) {\n types = response.data;\n }\n }\n setAuditEventTypes(types);\n };\n getAuditEventTypes();\n }, [auditEventTypeGetAllApiMethod]);\n\n const handleGridApiCallback = api => {\n gridApiRef.current = api;\n };\n\n const searchMethodConfig = useMemo(() => {\n return {\n apiMethodId: auditEventSearchApiMethod?.apiMethodId,\n customSearchObject: searchObject,\n };\n }, [auditEventSearchApiMethod]);\n\n return (\n <>\n {(displayProgressBar) && (<LinearProgress className={classes.loadingBar} color=\"secondary\" />)}\n <SearchMethodUdpGrid\n searchMethodConfig={searchMethodConfig}\n columnDefs={columnDefs}\n gridHeaderConfig={{\n title: t('Audit Events'),\n }}\n gridOptions={gridOptions}\n gridApiCallback={handleGridApiCallback}\n gridFunctions={gridFunctions}\n />\n <UdpAuditEventSidesheet\n auditEvent={selectedAuditEvent}\n isSideSheetOpen={viewSideSheetOpen}\n handleSideSheet={handleSideSheet}\n promotedEntities={promotedEntities}\n />\n </>\n )\n}\n\n export default UdpAuditEventsPage;\n","import * as UdpNotesPage from './UdpNotesPage';\nimport * as UdpVerticalManagementPage from './UdpVerticalManagementPage';\nimport * as UdpGridPanelManagementPage from './UdpGridPanelManagementPage';\nimport * as UdpMaintenanceEnginePage from './UdpMaintenanceEnginePage';\nimport * as UdpInquiryMaintenanceEnginePage from './UdpInquiryMaintenanceEnginePage';\nimport * as UdpReportsPage from './UdpReportsPage';\nimport * as DonutChartWidget from '../../UI/widgets/library/DonutChartWidget';\nimport * as SparklineWidget from '../../UI/widgets/library/SparklineWidget';\nimport * as ProgressBarWidget from '../../UI/widgets/library/ProgressBarWidget';\nimport * as RecentlyLoadedNodesWidget from '../../UI/widgets/library/RecentlyLoadedNodesWidget';\nimport * as ChatUDP from './ChatUDP';\nimport * as UdpDataBrowserPage from './UdpDataBrowserPage';\nimport * as UdpRemindersPage from './UdpRemindersPage';\nimport * as RemindersWidget from '../../UI/widgets/library/RemindersWidget';\nimport * as UdpPublicForm from './UdpPublicForm'\nimport * as UdpPrivateForm from './UdpPrivateForm'\nimport * as UdpFormsListPage from './UdpFormsListPage';\nimport * as UdpFormsBuilderPage from './UdpFormsBuilderPage';\nimport * as UdpImportFromFileMappingPage from './UdpImportFromFileMappingPage'\nimport * as UdpAuditEventsPage from './UdpAuditEventsPage'\n\nexport const UdpPages = {\n UdpNotesPage,\n UdpVerticalManagementPage,\n UdpGridPanelManagementPage,\n UdpMaintenanceEnginePage,\n UdpInquiryMaintenanceEnginePage,\n UdpReportsPage,\n DonutChartWidget,\n SparklineWidget,\n ProgressBarWidget,\n RecentlyLoadedNodesWidget,\n ChatUDP,\n UdpDataBrowserPage,\n UdpRemindersPage,\n RemindersWidget,\n UdpPublicForm,\n UdpPrivateForm,\n UdpFormsBuilderPage,\n UdpFormsListPage,\n UdpImportFromFileMappingPage,\n UdpAuditEventsPage\n};\n"],"mappings":"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"}