udp-react-enterprise-component-library 25.1.0-beta.6 → 25.1.1-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. package/dist/{AmbientGridTemplate-BqlMt5Su.js → AmbientGridTemplate-6xfwTiz-.js} +24 -62
  2. package/dist/AmbientGridTemplate-6xfwTiz-.js.map +1 -0
  3. package/dist/ClientSideUdpGrid-CEhDqIId.js +56 -0
  4. package/dist/ClientSideUdpGrid-CEhDqIId.js.map +1 -0
  5. package/dist/{EnvironmentRibbon-DaDmKAPO.js → EnvironmentRibbon-oEmbWjEq.js} +4 -148
  6. package/dist/EnvironmentRibbon-oEmbWjEq.js.map +1 -0
  7. package/dist/{MenuPage-CO6_GWwB.js → MenuPage-CZHpoopY.js} +12 -13
  8. package/dist/{MenuPage-CO6_GWwB.js.map → MenuPage-CZHpoopY.js.map} +1 -1
  9. package/dist/{MyExportsPage-CX9tzqHk.js → MyExportsPage-CS2Bw2mF.js} +56 -69
  10. package/dist/{MyExportsPage-CX9tzqHk.js.map → MyExportsPage-CS2Bw2mF.js.map} +1 -1
  11. package/dist/MyExportsPage-hyX42CN6.js +11 -0
  12. package/dist/{PageContainer-k8KCfGsM.js → PageContainer-BPHLFGju.js} +12 -17
  13. package/dist/PageContainer-BPHLFGju.js.map +1 -0
  14. package/dist/{PageNotFoundRoute-CxYZNEhN.js → PageNotFoundRoute-D9dLbM_w.js} +1 -1
  15. package/dist/{PageNotFoundRoute-CxYZNEhN.js.map → PageNotFoundRoute-D9dLbM_w.js.map} +1 -1
  16. package/dist/PageNotFoundRoute-DUj0Q9J8.js +3 -0
  17. package/dist/{PasswordResetRedirect-BHnkAW40.js → PasswordResetRedirect-C3g8L0vA.js} +2 -3
  18. package/dist/{PasswordResetRedirect-BHnkAW40.js.map → PasswordResetRedirect-C3g8L0vA.js.map} +1 -1
  19. package/dist/PasswordResetRedirect-Dh-S5Ril.js +3 -0
  20. package/dist/{SearchUtilities-Bor3HbfB.js → SearchUtilities-Btugro8y.js} +11 -20
  21. package/dist/{SearchUtilities-Bor3HbfB.js.map → SearchUtilities-Btugro8y.js.map} +1 -1
  22. package/dist/{SideSheet-DUsxG1FN.js → SideSheet-BsDoeNmq.js} +7 -47
  23. package/dist/SideSheet-BsDoeNmq.js.map +1 -0
  24. package/dist/UdpMaintenanceConfigPage-DcHntunS.js +88 -0
  25. package/dist/UdpMaintenanceConfigPage-DcHntunS.js.map +1 -0
  26. package/dist/UdpPublicForm-DTt-lMfk.js +4 -0
  27. package/dist/{UdpPublicForm-Caa1tH6z.js → UdpPublicForm-LDSuOwV2.js} +2 -2
  28. package/dist/{UdpPublicForm-Caa1tH6z.js.map → UdpPublicForm-LDSuOwV2.js.map} +1 -1
  29. package/dist/{UtilitySideBar-D4CXGtW2.js → UtilitySideBar-95k0edSA.js} +45 -89
  30. package/dist/{UtilitySideBar-D4CXGtW2.js.map → UtilitySideBar-95k0edSA.js.map} +1 -1
  31. package/dist/{VirtualBrowser-BXL0hdy0.js → VirtualBrowser-_epMjUkE.js} +23 -29
  32. package/dist/{VirtualBrowser-BXL0hdy0.js.map → VirtualBrowser-_epMjUkE.js.map} +1 -1
  33. package/dist/{WorkflowContainer-DrqzuQtU.js → WorkflowContainer-ClPvY2mG.js} +14 -20
  34. package/dist/{WorkflowContainer-DrqzuQtU.js.map → WorkflowContainer-ClPvY2mG.js.map} +1 -1
  35. package/dist/WorkflowContainer-D0QUOc-f.js +11 -0
  36. package/dist/{apiHelpers-DZots3og.js → apiHelpers-CmM6DWAT.js} +7 -12
  37. package/dist/{apiHelpers-DZots3og.js.map → apiHelpers-CmM6DWAT.js.map} +1 -1
  38. package/dist/entityUtilities-Dy-jsB5c.js +22 -0
  39. package/dist/entityUtilities-Dy-jsB5c.js.map +1 -0
  40. package/dist/index.js +1494 -1984
  41. package/dist/index.js.map +1 -1
  42. package/dist/{propertyTypeEnums-Civy7RJv.js → propertyTypeEnums-BCCGQqVB.js} +2 -2
  43. package/dist/{propertyTypeEnums-Civy7RJv.js.map → propertyTypeEnums-BCCGQqVB.js.map} +1 -1
  44. package/dist/types/index.d.ts +1 -4
  45. package/dist/types/maintenanceEngine/crudBrowser/CrudTableColumnDefs.d.ts +1 -9
  46. package/dist/types/maintenanceEngine/crudBrowser/crudHelper.d.ts +1 -0
  47. package/dist/types/menuPage/MenuPage.d.ts +2 -1
  48. package/dist/types/shell/ui/ShellDropdown.d.ts +15 -0
  49. package/dist/types/shell/ui/SiteHeader.d.ts +1 -0
  50. package/dist/types/tsconfig.tsbuildinfo +1 -1
  51. package/dist/types/udp/pages/UdpMaintenanceConfigPage.d.ts +2 -1
  52. package/dist/useAxiosGet-Dh5pVURP.js +144 -0
  53. package/dist/useAxiosGet-Dh5pVURP.js.map +1 -0
  54. package/dist/useAxiosMutate-DlG255x9.js +43 -0
  55. package/dist/useAxiosMutate-DlG255x9.js.map +1 -0
  56. package/package.json +2 -2
  57. package/dist/AmbientGridTemplate-BqlMt5Su.js.map +0 -1
  58. package/dist/EnvironmentRibbon-DaDmKAPO.js.map +0 -1
  59. package/dist/MyExportsPage-CkzQ0MRq.js +0 -8
  60. package/dist/PageContainer-k8KCfGsM.js.map +0 -1
  61. package/dist/PageNotFoundRoute-BbBtA9Cz.js +0 -3
  62. package/dist/PasswordResetRedirect-tUV2yEkH.js +0 -3
  63. package/dist/SideSheet-DUsxG1FN.js.map +0 -1
  64. package/dist/UdpPublicForm-Cvw5tOHe.js +0 -4
  65. package/dist/WorkflowContainer-Q8gtuaB7.js +0 -9
  66. package/dist/types/maintenanceEngine/crudBrowser/CrudTableActionRender.d.ts +0 -3
@@ -1,9 +1,12 @@
1
- import { ActionsRenderer, AmbientGridTemplate, findTermByType, getPathObject, getSanitizedName } from "./AmbientGridTemplate-BqlMt5Su.js";
2
- import { Field, Form, SideSheet, useAxiosMutate } from "./SideSheet-DUsxG1FN.js";
3
- import { LayoutUnit, PrimaryActionButton_default, UdpEnums, executeQueryWithParameters, toLowerFirstChar, toTitleCase, useAxiosGet, useBuildEnvironment, useUser } from "./EnvironmentRibbon-DaDmKAPO.js";
4
- import { DateTimeField, FluentToggle, FormButtons, PropertyTypeEnum, SubmitButton } from "./propertyTypeEnums-Civy7RJv.js";
5
- import { useHandleAxiosSnackbar } from "./apiHelpers-DZots3og.js";
6
- import { PageContainer, useSetLocationState } from "./PageContainer-k8KCfGsM.js";
1
+ import { ActionsRenderer, AmbientGridTemplate, findTermByType, getPathObject } from "./AmbientGridTemplate-6xfwTiz-.js";
2
+ import { Field, Form, SideSheet } from "./SideSheet-BsDoeNmq.js";
3
+ import { LayoutUnit, PrimaryActionButton_default, UdpEnums, executeQueryWithParameters, useBuildEnvironment } from "./EnvironmentRibbon-oEmbWjEq.js";
4
+ import { DateTimeField, FluentToggle, FormButtons, PropertyTypeEnum, SubmitButton } from "./propertyTypeEnums-BCCGQqVB.js";
5
+ import { useHandleAxiosSnackbar } from "./apiHelpers-CmM6DWAT.js";
6
+ import { toLowerFirstChar, toTitleCase, useAxiosGet, useUser } from "./useAxiosGet-Dh5pVURP.js";
7
+ import { useAxiosMutate } from "./useAxiosMutate-DlG255x9.js";
8
+ import { getSanitizedName } from "./entityUtilities-Dy-jsB5c.js";
9
+ import { PageContainer, useSetLocationState } from "./PageContainer-BPHLFGju.js";
7
10
  import React, { useCallback, useEffect, useMemo, useState } from "react";
8
11
  import { Divider, FormControlLabel, TextField, Typography, makeStyles } from "@material-ui/core";
9
12
  import { ConfigService } from "udp-react-stencil-component-library";
@@ -56,7 +59,7 @@ const VirtualTableColumnDefs = (tableDescription, actionList, columnName = "Acti
56
59
  //#endregion
57
60
  //#region src/hooks/virtualActions.jsx
58
61
  function useVirtualActions() {
59
- const renderInputByFieldType = useCallback((formField, index, virtualTableFormData, classes) => {
62
+ return { renderInputByFieldType: useCallback((formField, index, virtualTableFormData, classes) => {
60
63
  const NUMBER_TYPE = [
61
64
  PropertyTypeEnum.Int,
62
65
  PropertyTypeEnum.Long,
@@ -123,8 +126,7 @@ function useVirtualActions() {
123
126
  });
124
127
  default: return null;
125
128
  }
126
- }, []);
127
- return { renderInputByFieldType };
129
+ }, []) };
128
130
  }
129
131
 
130
132
  //#endregion
@@ -161,8 +163,7 @@ const VirtualForm = (props) => {
161
163
  ...virtualTableFormData,
162
164
  ...values
163
165
  };
164
- const isNewRow = !rowValue;
165
- if (isNewRow) onCreate && await onCreate(newTableData);
166
+ if (!rowValue) onCreate && await onCreate(newTableData);
166
167
  else onUpdate && await onUpdate(newTableData);
167
168
  closeSideSheet && closeSideSheet();
168
169
  };
@@ -317,18 +318,15 @@ const VirtualBrowser = (props) => {
317
318
  }, [tableDescription, entityName]);
318
319
  const handleOnCreate = useCallback(async (values) => {
319
320
  if (selectedEntity?.unityBaseVirtualCreateMethod) {
320
- const requestArr = constructVirtualValuesForRequest(values);
321
321
  const data = {
322
- requestBody: requestArr,
322
+ requestBody: constructVirtualValuesForRequest(values),
323
323
  id: virtualId
324
324
  };
325
- const response = await executeQueryWithParameters({ data }, selectedEntity.unityBaseVirtualCreateMethod.apiMethodId).catch((res) => {
325
+ if ((await executeQueryWithParameters({ data }, selectedEntity.unityBaseVirtualCreateMethod.apiMethodId).catch((res) => {
326
326
  handleErrorSnackbar(res.message);
327
- });
328
- if (response?.status === 200) {
327
+ }))?.status === 200) {
329
328
  handleSuccessSnackbar(t(`Row has been created`));
330
- const queryData = { id: virtualId };
331
- fetchEntityData({ data: queryData });
329
+ fetchEntityData({ data: { id: virtualId } });
332
330
  }
333
331
  }
334
332
  }, [
@@ -353,13 +351,11 @@ const VirtualBrowser = (props) => {
353
351
  ...pathObject,
354
352
  requestBody: requestArr
355
353
  };
356
- const response = await executeQueryWithParameters({ data }, selectedEntity.unityBaseVirtualUpdateMethod.apiMethodId).catch((res) => {
354
+ if ((await executeQueryWithParameters({ data }, selectedEntity.unityBaseVirtualUpdateMethod.apiMethodId).catch((res) => {
357
355
  handleErrorSnackbar(res.message);
358
- });
359
- if (response?.status === 200) {
356
+ }))?.status === 200) {
360
357
  handleSuccessSnackbar(t(`Row has been updated`));
361
- const queryData = { id: virtualId };
362
- fetchEntityData({ data: queryData });
358
+ fetchEntityData({ data: { id: virtualId } });
363
359
  }
364
360
  }
365
361
  }, [
@@ -380,13 +376,11 @@ const VirtualBrowser = (props) => {
380
376
  data[Object.keys(po)[0]] = po[Object.keys(po)[0]];
381
377
  });
382
378
  else data = { ...pathObject };
383
- const response = await executeQueryWithParameters({ data }, selectedEntity.unityBaseVirtualDeleteMethod.apiMethodId).catch((res) => {
379
+ if ((await executeQueryWithParameters({ data }, selectedEntity.unityBaseVirtualDeleteMethod.apiMethodId).catch((res) => {
384
380
  handleErrorSnackbar(res.message);
385
- });
386
- if (response?.status === 200) {
381
+ }))?.status === 200) {
387
382
  handleSuccessSnackbar(t(`Row has been deleted`));
388
- const queryData = { id: virtualId };
389
- fetchEntityData({ data: queryData });
383
+ fetchEntityData({ data: { id: virtualId } });
390
384
  }
391
385
  }
392
386
  }, [
@@ -543,4 +537,4 @@ const VirtualBrowser = (props) => {
543
537
 
544
538
  //#endregion
545
539
  export { VirtualBrowser };
546
- //# sourceMappingURL=VirtualBrowser-BXL0hdy0.js.map
540
+ //# sourceMappingURL=VirtualBrowser-_epMjUkE.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"VirtualBrowser-BXL0hdy0.js","names":["useStyles","value","PrimaryActionButton"],"sources":["../src/maintenanceEngine/virtualBrowser/VirtualTableColumnDefs.js","../src/hooks/virtualActions.jsx","../src/UI/forms/VirtualForm.jsx","../src/maintenanceEngine/virtualBrowser/VirtualTableSidePanel.jsx","../src/maintenanceEngine/virtualBrowser/VirtualBrowser.jsx"],"sourcesContent":["import { toTitleCase } from '../../utilities/input/StringUtilities';\n\nconst defaultGridColumn = {\n headerName: '',\n field: '',\n minWidth: 80,\n autoHeight: false,\n sortable: true\n};\n\nexport const VirtualTableColumnDefs = (\n tableDescription,\n actionList,\n columnName = 'Actions',\n crudTableActionRenderName = 'actionsRenderer',\n panelDirection = 'right'\n) => {\n let columnDefs =\n tableDescription?.reduce((defs, element) => {\n defs.push({\n ...defaultGridColumn,\n headerName: toTitleCase(element?.name || ''),\n field: element?.name\n });\n return defs;\n }, []) || [];\n\n columnDefs.push({\n headerName:\n crudTableActionRenderName === 'actionsRenderer' ? 'Actions' : columnName,\n filter: false,\n pinned: panelDirection,\n width: 150,\n maxWidth: 180,\n cellRenderer: crudTableActionRenderName,\n cellRendererParams: {\n actionList\n },\n valueGetter: (params) => params.data,\n suppressMenu: true,\n sortable: false,\n cellStyle: { display: 'flex', alignItems: 'center' }\n });\n\n return columnDefs;\n};\n\nexport const defaultColActionsDef = {\n resizable: true,\n editable: false,\n sortable: true,\n filter: true,\n floatingFilter: false,\n enableRowGroup: true\n};\n","import { FormControlLabel, TextField } from '@material-ui/core';\nimport React, { useCallback } from 'react';\nimport { DateTimeField } from '../UI/inputs/datetimes/DateTimeField';\nimport { Field } from '../utilities/form';\nimport { findTermByType } from '../utilities/maintenanceEngine/CrudBrowserUtilities';\nimport { FluentToggle } from '../UI/inputs/toggle/FluentToggle';\nimport { PropertyTypeEnum } from '../enums/propertyTypeEnums';\nimport { toLowerFirstChar } from '../utilities/input/StringUtilities';\nimport { toTitleCase } from '../utilities/input/StringUtilities';\n\nexport function useVirtualActions() {\n const renderInputByFieldType = useCallback(\n (formField, index, virtualTableFormData, classes) => {\n const NUMBER_TYPE = [\n PropertyTypeEnum.Int,\n PropertyTypeEnum.Long,\n PropertyTypeEnum.Double\n ];\n\n if (\n formField.type === 'boolean' &&\n virtualTableFormData[toLowerFirstChar(formField.name)] === ''\n ) {\n virtualTableFormData[toLowerFirstChar(formField.name)] = false;\n }\n\n const fieldType = formField.type?.toLowerCase();\n let fieldIsNumberType = NUMBER_TYPE.includes(fieldType);\n\n const DefaultTextField = (\n <Field\n component={TextField}\n id={`${formField.name}${index}`}\n name={toLowerFirstChar(formField.name)}\n label={toTitleCase(formField.name)}\n initialValue={\n virtualTableFormData[toLowerFirstChar(formField.name)] || ''\n }\n type={fieldIsNumberType && 'number'}\n fullWidth\n variant='outlined'\n size='small'\n required={!formField?.nullable}\n margin='dense'\n InputProps={{\n classes: {\n root: classes?.input,\n input: classes?.formTextInput\n }\n }}\n InputLabelProps={{\n classes: {\n root: classes?.labelRoot\n }\n }}\n disabled={formField?.disabled}\n />\n );\n\n const DefaultFluentToggle = (\n <FormControlLabel\n control={\n <Field\n component={FluentToggle}\n type='checkbox'\n id={`${formField.name}${index}`}\n name={toLowerFirstChar(formField.name)}\n label={toTitleCase(formField.name)}\n initialValue={\n typeof virtualTableFormData[\n toLowerFirstChar(formField.name)\n ] === 'boolean'\n ? virtualTableFormData[toLowerFirstChar(formField.name)]\n : virtualTableFormData[toLowerFirstChar(formField.name)] ===\n 'true'\n ? true\n : false\n }\n disabled={formField?.disabled}\n classes={{ root: classes?.switchRoot }}\n color='secondary'\n inputProps={{ 'aria-label': 'Active condition' }}\n />\n }\n label={toTitleCase(formField.name)}\n labelPlacement='start'\n style={{ marginLeft: 4 }}\n />\n );\n\n switch (fieldType.toLowerCase()) {\n case findTermByType(fieldType, 'int'):\n case findTermByType(fieldType, 'long'):\n case findTermByType(fieldType, 'double'):\n case findTermByType(fieldType, 'string'):\n case findTermByType(fieldType, 'string uuid'):\n return DefaultTextField;\n case findTermByType(fieldType, 'boolean'):\n return DefaultFluentToggle;\n case findTermByType(fieldType, 'datetime'):\n return (\n <Field\n disabled={formField?.disabled}\n component={DateTimeField}\n id={`${formField.name}${index}`}\n name={toLowerFirstChar(formField.name)}\n label={toTitleCase(formField.name)}\n initialValue={\n virtualTableFormData[toLowerFirstChar(formField.name)]\n ? new Date(\n virtualTableFormData[toLowerFirstChar(formField.name)]\n )\n : ''\n }\n fullWidth\n variant='outlined'\n size='small'\n required={!formField?.nullable}\n style={{ marginTop: 8 }}\n />\n );\n default:\n return null;\n }\n },\n []\n );\n\n return {\n renderInputByFieldType\n };\n}\n","import { makeStyles, Typography } from '@material-ui/core';\nimport PropTypes from 'prop-types';\nimport React, { useState } from 'react';\nimport { Form, FormButtons, SubmitButton } from '../../utilities/form';\nimport { useVirtualActions } from '../../hooks/virtualActions';\n\nconst useStyles = makeStyles((theme) => ({\n actions: {\n marginTop: theme.spacing(2),\n marginBottom: theme.spacing(2),\n display: 'flex',\n flexDirection: 'row'\n },\n title: {\n flexGrow: 1\n },\n subject: {\n marginLeft: theme.spacing(1),\n display: 'flex',\n flexDirection: 'row',\n flexGrow: 1\n },\n switchRoot: {\n marginLeft: theme.spacing(1)\n },\n input: {\n height: 34,\n padding: 0\n },\n formTextInput: {\n fontSize: 13\n },\n labelRoot: {\n fontSize: 13\n }\n}));\n\nexport const VirtualForm = (props) => {\n const { tableDescription, rowValue, closeSideSheet, onCreate, onUpdate } =\n props;\n const { renderInputByFieldType } = useVirtualActions();\n\n const [virtualTableFormData, setVirtualTableFormData] = useState(\n rowValue || {}\n );\n const classes = useStyles();\n\n const handleSubmit = async (values) => {\n let newTableData = {\n ...virtualTableFormData,\n ...values\n };\n\n const isNewRow = !rowValue;\n\n if (isNewRow) {\n onCreate && (await onCreate(newTableData));\n } else {\n onUpdate && (await onUpdate(newTableData));\n }\n closeSideSheet && closeSideSheet();\n };\n\n return (\n <Form onSubmit={handleSubmit}>\n <div>\n {tableDescription?.map((formField, index) => {\n return (\n <React.Fragment key={`${formField.name}-${index}`}>\n <Typography variant='subtitle2' style={{ marginTop: 8 }}>\n {formField.friendlyName}\n </Typography>\n {renderInputByFieldType(\n formField,\n index,\n virtualTableFormData,\n classes\n )}\n </React.Fragment>\n );\n })}\n </div>\n\n <FormButtons>\n <SubmitButton\n variant='contained'\n color='secondary'\n disablePristine={false}\n disabled={false}\n style={{ marginTop: 15 }}\n >\n Save\n </SubmitButton>\n </FormButtons>\n </Form>\n );\n};\n\nVirtualForm.propTypes = {\n /**\n * onClick event for closing sidesheet\n */\n closeSideSheet: PropTypes.func,\n /**\n * onClick event for creating\n */\n onCreate: PropTypes.func,\n /**\n * onClick event for updating\n */\n onUpdate: PropTypes.func\n};\n","import { Divider, makeStyles } from '@material-ui/core';\nimport PropTypes from 'prop-types';\nimport React, { useMemo } from 'react';\nimport { useUser } from '../../utilities/auth/useUser';\nimport { DndProvider } from 'react-dnd';\nimport { HTML5Backend } from 'react-dnd-html5-backend';\nimport { PageContainer } from '../../page/PageContainer';\nimport { useAxiosGet } from '../../utilities/useAxiosGet';\nimport { Skeleton } from '@material-ui/lab';\nimport { LayoutUnit } from '../../layout/LayoutUnit';\nimport { VirtualForm } from '../../UI/forms/VirtualForm';\nimport { ConfigService } from 'udp-react-stencil-component-library';\n\nconst useStyles = makeStyles((theme) => ({\n root: {},\n divider: {\n marginTop: theme.spacing(2)\n }\n}));\n\nconst FIELD_NUMBER = 10;\n\nexport const VirtualTableSidePanel = (props) => {\n const {\n tableDescription,\n value,\n crudTableEditionData,\n closeSideSheet,\n onCreate,\n onUpdate,\n pageId,\n setSideSheetWidth,\n setSideSheetButtonLabel,\n setSideSheetOnSubmit,\n setSideSheetProps\n } = props;\n const user = useUser();\n const classes = useStyles();\n\n const [{ data: page, loading: loadingPage }] = useAxiosGet(\n ConfigService.tenantV1ApiUrl,\n `page/${pageId}`,\n {},\n !!!pageId,\n false\n );\n\n const skeleton = useMemo(() => {\n const skeletonArr = [];\n for (let i = 0; i < FIELD_NUMBER; i++) {\n skeletonArr.push(\n <>\n <Skeleton key={i} variant='rect' className={classes.skeleton} />\n <LayoutUnit unit='xxs' />\n </>\n );\n }\n return skeletonArr;\n }, [classes]);\n\n const sideSheetContent = useMemo(() => {\n if (page) {\n return (\n <DndProvider backend={HTML5Backend}>\n <PageContainer\n user={user}\n key={pageId}\n pageData={page}\n widgetParams={{\n pageId: page?.pageId,\n nodeObj: crudTableEditionData,\n setSideSheetWidth: setSideSheetWidth,\n setSideSheetButtonLabel: setSideSheetButtonLabel,\n setSideSheetOnSubmit: setSideSheetOnSubmit,\n closeSideSheet: closeSideSheet,\n setSideSheetProps: setSideSheetProps,\n onCreate: onCreate,\n onUpdate: onUpdate\n }}\n disableMargins={true}\n />\n </DndProvider>\n );\n } else {\n return (\n <>\n <VirtualForm\n tableDescription={tableDescription}\n rowValue={value}\n closeSideSheet={closeSideSheet}\n onCreate={onCreate}\n onUpdate={onUpdate}\n />\n <div className={classes.divider}>\n <Divider />\n </div>\n </>\n );\n }\n }, [\n page,\n user,\n pageId,\n crudTableEditionData,\n setSideSheetWidth,\n setSideSheetButtonLabel,\n setSideSheetOnSubmit,\n setSideSheetProps,\n closeSideSheet,\n onCreate,\n onUpdate,\n classes,\n tableDescription,\n value\n ]);\n\n return (\n <div>\n {loadingPage ? (\n <>\n {skeleton.map((sk) => sk)}\n <LayoutUnit unit='md' />\n <Skeleton variant='rect' className={classes.skeletonButton} />\n </>\n ) : (\n sideSheetContent\n )}\n </div>\n );\n};\n\nVirtualTableSidePanel.propTypes = {\n /**\n * Description of the table\n */\n tableDescription: PropTypes.array,\n /**\n * Entity data\n */\n crudTableEditionData: PropTypes.array,\n /**\n * onClick event for closing sidesheet\n */\n closeSideSheet: PropTypes.func,\n /**\n * onClick event for creating\n */\n onCreate: PropTypes.func,\n /**\n * onClick event for updating\n */\n onUpdate: PropTypes.func\n};\n","import React, { useMemo, useState, useCallback, useEffect } from 'react';\nimport PrimaryActionButton from '../../UI/inputs/buttons/PrimaryActionButton';\nimport { AmbientGridTemplate } from '../../UI/templates/AmbientGridTemplate';\nimport { SideSheet } from '../../UI/surfaces/SideSheet';\nimport { ActionsRenderer } from '../../UI/templates/ui/renderers/ActionsRenderer';\nimport { VirtualTableColumnDefs } from './VirtualTableColumnDefs';\nimport { AddIcon, DeleteIcon, EditIcon } from '@fluentui/react-icons';\nimport { Typography } from '@material-ui/core';\nimport { format } from 'date-fns';\nimport { getPathObject } from '../../utilities/maintenanceEngine/CrudBrowserUtilities';\nimport { cloneDeep } from 'lodash';\nimport { useTranslation } from 'react-i18next';\nimport { executeQueryWithParameters } from '../../udp/utilities/methodUtils';\nimport { useHandleAxiosSnackbar } from '../../utilities/apiHelpers';\nimport { useAxiosMutate } from '../../utilities/useAxiosMutate';\nimport { useLocation } from 'react-router-dom';\nimport { useUser } from '../../utilities/auth/useUser';\nimport { useAxiosGet } from '../../utilities/useAxiosGet';\nimport { VirtualTableSidePanel } from './VirtualTableSidePanel';\nimport { UdpEnums } from '../../enums/unitySystemEnums';\nimport { useBuildEnvironment } from '../../shell/ui/EnvironmentRibbon';\nimport { getSanitizedName } from '../../utilities/entities/entityUtilities';\nimport { useSetLocationState } from '../../hooks/useSetLocationState';\nimport { ConfigService } from 'udp-react-stencil-component-library';\n\nconst useSearchParams = () => {\n const { search } = useLocation();\n return useMemo(() => new URLSearchParams(search), [search]);\n};\n\nexport const VirtualBrowser = (props) => {\n const { ...other } = props;\n const urlSearchParams = useSearchParams();\n const location = useLocation();\n const { value, promotedEntity } = location.state || {};\n const parts = location?.pathname?.split('/');\n const virtualId = value\n ? value?.id\n : '' || parts\n ? parts[parts.length - 1]\n : null;\n\n const user = useUser();\n const buildEnv = useBuildEnvironment();\n const [isSheetOpen, setSheetOpen] = useState(false);\n const [sideSheetWidth, setSideSheetWidth] = useState(600);\n const [sideSheetButtonLabel, setSideSheetButtonLabel] = useState('');\n const [otherSideSheetProps, setOtherSideSheetProps] = useState({});\n const [sideSheetOnSubmit, setSideSheetOnSubmit] = useState(\n () => () => console.warn('onSubmit not set')\n );\n const [selectedEntity, setSelectedEntity] = useState(promotedEntity);\n const { t } = useTranslation();\n const { handleErrorSnackbar, handleSuccessSnackbar } =\n useHandleAxiosSnackbar();\n const setLocationState = useSetLocationState();\n\n const closeSheet = useCallback(() => {\n setSheetOpen(false);\n }, []);\n\n const entityName = useMemo(() => {\n if (selectedEntity) {\n return selectedEntity.entityName || '';\n } else {\n return urlSearchParams.has('entityName') === true\n ? urlSearchParams.get('entityName')\n : '';\n }\n }, [selectedEntity, urlSearchParams]);\n\n const createApiMethodPageId = useMemo(() => {\n return selectedEntity?.unityBaseCreateMethod?.pageId;\n }, [selectedEntity]);\n\n const [{ data: tpacb, loading: loadingTpacb, error: tpacbError }] =\n useAxiosGet(\n ConfigService.integrationV1ApiUrl,\n `tenantProductApiCatalogBase/tenant/${user?.currentTenantId}/product/${ConfigService.config.UNITY_PRODUCT_ID}`,\n {},\n !!!user || !!promotedEntity,\n false\n );\n\n const [{ data: promotedMethodEntities }] = useAxiosGet(\n ConfigService.integrationV1ApiUrl,\n `apicatalog/${tpacb?.apiCatalogId}/promotedMethodEntities/${entityName}/product/${ConfigService.config.UNITY_PRODUCT_ID}`,\n {},\n !!!tpacb || !!!user || !!!entityName,\n false\n );\n\n // Get all rows of an entity\n const [{ data: entityData, loading: isLoading }, fetchEntityData] =\n useAxiosMutate(\n ConfigService.integrationV1ApiUrl,\n `apimethod/executeQueryWithParameters/${selectedEntity?.unityBaseGetDataMethod?.apiMethodId}`,\n {\n method: 'post'\n }\n );\n\n // Get all rows of an entity\n const [\n { data: tableDescription, loading: tableDescriptionLoading },\n fetchTableDescription\n ] = useAxiosMutate(\n ConfigService.integrationV1ApiUrl,\n `apimethod/executeQueryWithParameters/${selectedEntity?.unityBaseDescribeMethod?.apiMethodId}`,\n {\n method: 'post'\n }\n );\n\n const constructVirtualValuesForRequest = useCallback(\n (values) => {\n if (!tableDescription) {\n return [];\n }\n const bodyArr = [];\n tableDescription.forEach((column) => {\n const valueExist =\n typeof values[column.name] == 'boolean' || values[column.name];\n if (column.name || valueExist) {\n switch (getSanitizedName(entityName?.toLowerCase())) {\n case UdpEnums.Udp_Lookup.toLowerCase():\n bodyArr.push({\n lookupColumnId: column.id,\n value: values[column.name]\n });\n break;\n default:\n }\n }\n });\n return bodyArr;\n },\n [tableDescription, entityName]\n );\n\n const handleOnCreate = useCallback(\n async (values) => {\n if (selectedEntity?.unityBaseVirtualCreateMethod) {\n const requestArr = constructVirtualValuesForRequest(values);\n const data = { requestBody: requestArr, id: virtualId };\n const response = await executeQueryWithParameters(\n { data },\n selectedEntity.unityBaseVirtualCreateMethod.apiMethodId\n ).catch((res) => {\n handleErrorSnackbar(res.message);\n });\n\n if (response?.status === 200) {\n handleSuccessSnackbar(t(`Row has been created`));\n const queryData = { id: virtualId };\n fetchEntityData({ data: queryData });\n }\n }\n },\n [\n selectedEntity,\n t,\n fetchEntityData,\n handleErrorSnackbar,\n handleSuccessSnackbar,\n virtualId,\n constructVirtualValuesForRequest\n ]\n );\n\n const handleOnUpdate = useCallback(\n async (values) => {\n if (selectedEntity?.unityBaseVirtualUpdateMethod) {\n // Get primary key value object using path parameters and merge with data\n const primaryKeyValues = [virtualId, values.udpVirtualRowId];\n const pathObject = getPathObject(\n selectedEntity.unityBaseVirtualUpdateMethod.pathParameters,\n primaryKeyValues\n );\n const requestArr = constructVirtualValuesForRequest(values);\n let data = { requestBody: requestArr };\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: requestArr };\n }\n\n const response = await executeQueryWithParameters(\n { data },\n selectedEntity.unityBaseVirtualUpdateMethod.apiMethodId\n ).catch((res) => {\n handleErrorSnackbar(res.message);\n });\n\n if (response?.status === 200) {\n handleSuccessSnackbar(t(`Row has been updated`));\n const queryData = { id: virtualId };\n fetchEntityData({ data: queryData });\n }\n }\n },\n [\n selectedEntity,\n t,\n fetchEntityData,\n handleErrorSnackbar,\n handleSuccessSnackbar,\n virtualId,\n constructVirtualValuesForRequest\n ]\n );\n\n const handleOnDelete = useCallback(\n async (value) => {\n if (selectedEntity?.unityBaseVirtualDeleteMethod) {\n // Get primary key value object using path parameters and merge with data\n const primaryKeyValues = [virtualId, value.udpVirtualRowId];\n const pathObject = getPathObject(\n selectedEntity?.unityBaseVirtualDeleteMethod.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 executeQueryWithParameters(\n { data },\n selectedEntity.unityBaseVirtualDeleteMethod.apiMethodId\n ).catch((res) => {\n handleErrorSnackbar(res.message);\n });\n\n if (response?.status === 200) {\n handleSuccessSnackbar(t(`Row has been deleted`));\n const queryData = { id: virtualId };\n fetchEntityData({ data: queryData });\n }\n }\n },\n [\n selectedEntity,\n t,\n fetchEntityData,\n handleErrorSnackbar,\n handleSuccessSnackbar,\n virtualId\n ]\n );\n\n const actionList = useMemo(() => {\n if (!selectedEntity) {\n return;\n }\n\n return [\n {\n id: 1, // Must be unique\n title: selectedEntity?.unityBaseVirtualUpdateMethod\n ? t('Edit')\n : t('Edit Method Not Accessible'),\n icon: EditIcon,\n onClick: null,\n opens: 'sideSheet',\n view: {\n component: VirtualTableSidePanel,\n properties: {\n tableDescription: tableDescription,\n onUpdate: handleOnUpdate,\n valuePropName: 'value',\n closeSideSheet: null,\n closeSideSheetPropName: 'closeSideSheet',\n pageId: selectedEntity?.unityBaseVirtualUpdateMethod?.pageId,\n isNewEntry: false\n }\n },\n disabled: !!!selectedEntity?.unityBaseVirtualUpdateMethod\n },\n {\n id: 2, // Must be unique\n title: selectedEntity?.unityBaseVirtualDeleteMethod\n ? t('Delete')\n : t('Delete Method Not Accessible'),\n icon: DeleteIcon,\n onClick: null,\n opens: 'dialog',\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?.unityBaseVirtualDeleteMethod\n }\n ];\n }, [selectedEntity, t, handleOnUpdate, handleOnDelete, tableDescription]);\n\n const columnDefs = useMemo(() => {\n if (tableDescription?.length) {\n return VirtualTableColumnDefs(tableDescription, actionList);\n }\n return [];\n }, [actionList, tableDescription]);\n\n const groupData = useMemo(() => {\n return columnDefs?.map((item) => {\n return {\n groupItem: item.field,\n label: item.headerName,\n value: item.field\n };\n });\n }, [columnDefs]);\n\n useEffect(() => {\n if (promotedMethodEntities) {\n setSelectedEntity(promotedMethodEntities);\n }\n }, [promotedMethodEntities]);\n\n useEffect(() => {\n if (virtualId) {\n const queryData = { id: virtualId };\n if (selectedEntity?.unityBaseGetDataMethod?.apiMethodId) {\n fetchEntityData({ data: queryData });\n }\n if (selectedEntity?.unityBaseDescribeMethod?.apiMethodId) {\n fetchTableDescription({ data: queryData });\n }\n }\n }, [selectedEntity, fetchEntityData, virtualId, fetchTableDescription]);\n\n // Setting location state label so that if this page was saved to favorites\n // we can determine the bread crumb\n useEffect(() => {\n setLocationState({ label: t(value?.name) || t('Virtual Lookup') });\n }, [setLocationState, t, value]);\n\n const pab = (\n <PrimaryActionButton onClick={() => setSheetOpen && setSheetOpen(true)}>\n <Typography style={{ marginRight: 5 }}>Add</Typography>\n <AddIcon />\n </PrimaryActionButton>\n );\n\n const SideOptionList = useMemo(\n () => (\n <SideSheet\n open={isSheetOpen}\n onClose={closeSheet}\n title={`Add new ${entityName}`}\n width={sideSheetWidth}\n buttonLabel={sideSheetButtonLabel}\n onSubmit={sideSheetOnSubmit}\n {...otherSideSheetProps}\n >\n <VirtualTableSidePanel\n onCreate={handleOnCreate}\n closeSideSheet={closeSheet}\n pageId={createApiMethodPageId}\n setSideSheetWidth={setSideSheetWidth}\n setSideSheetButtonLabel={setSideSheetButtonLabel}\n setSideSheetOnSubmit={setSideSheetOnSubmit}\n setSideSheetProps={setOtherSideSheetProps}\n tableDescription={tableDescription}\n />\n </SideSheet>\n ),\n [\n isSheetOpen,\n closeSheet,\n entityName,\n sideSheetWidth,\n sideSheetButtonLabel,\n sideSheetOnSubmit,\n handleOnCreate,\n createApiMethodPageId,\n otherSideSheetProps,\n tableDescription\n ]\n );\n\n const formatData = useCallback(() => {\n if (entityData?.data && tableDescription) {\n let formattedEntityData = cloneDeep(entityData?.data);\n\n // get list of attributes that are datetime\n const datetimeFields = tableDescription?.reduce((fields, element) => {\n if (element?.type === 'datetime') {\n fields.push(element?.name);\n }\n return fields;\n }, []);\n\n if (datetimeFields.length) {\n formattedEntityData.forEach((e) => {\n Object.keys(e).forEach((key) => {\n // format all datetime fields\n if (datetimeFields.find((field) => field === key)) {\n // LAA UNT-2977: add null check to prevent default date from being added when null\n if (e[key] === null) return;\n e[key] = format(new Date(e[key]), 'yyyy/MM/dd kk:mm:ss');\n }\n });\n });\n }\n\n return formattedEntityData;\n }\n return [];\n }, [entityData, tableDescription]);\n\n return (\n <>\n <AmbientGridTemplate\n title={value?.name || entityData?.name}\n data={entityData ? formatData(entityData?.data) : []}\n columnDefs={columnDefs}\n groupingData={groupData}\n primaryActionButton={pab}\n frameworkComponents={{ actionsRenderer: ActionsRenderer }}\n height={`calc(100vh - ${buildEnv ? '139px' : '114px'})`}\n disableRowSelection={true}\n loading={isLoading}\n {...other}\n />\n {SideOptionList}\n </>\n );\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAEA,MAAM,oBAAoB;CACxB,YAAY;CACZ,OAAO;CACP,UAAU;CACV,YAAY;CACZ,UAAU;;AAGZ,MAAa,0BACX,kBACA,YACA,aAAa,WACb,4BAA4B,mBAC5B,iBAAiB,YACd;CACH,IAAI,aACF,kBAAkB,QAAQ,MAAM,YAAY;AAC1C,OAAK,KAAK;GACR,GAAG;GACH,YAAY,YAAY,SAAS,QAAQ;GACzC,OAAO,SAAS;;AAElB,SAAO;IACN,OAAO;AAEZ,YAAW,KAAK;EACd,YACE,8BAA8B,oBAAoB,YAAY;EAChE,QAAQ;EACR,QAAQ;EACR,OAAO;EACP,UAAU;EACV,cAAc;EACd,oBAAoB,EAClB;EAEF,cAAc,WAAW,OAAO;EAChC,cAAc;EACd,UAAU;EACV,WAAW;GAAE,SAAS;GAAQ,YAAY;;;AAG5C,QAAO;;;;;AClCT,SAAgB,oBAAoB;CAClC,MAAM,yBAAyB,aAC5B,WAAW,OAAO,sBAAsB,YAAY;EACnD,MAAM,cAAc;GAClB,iBAAiB;GACjB,iBAAiB;GACjB,iBAAiB;;AAGnB,MACE,UAAU,SAAS,aACnB,qBAAqB,iBAAiB,UAAU,WAAW,GAE3D,sBAAqB,iBAAiB,UAAU,SAAS;EAG3D,MAAM,YAAY,UAAU,MAAM;EAClC,IAAI,oBAAoB,YAAY,SAAS;EAE7C,MAAM,mBACJ,oCAAC;GACC,WAAW;GACX,IAAI,GAAG,UAAU,OAAO;GACxB,MAAM,iBAAiB,UAAU;GACjC,OAAO,YAAY,UAAU;GAC7B,cACE,qBAAqB,iBAAiB,UAAU,UAAU;GAE5D,MAAM,qBAAqB;GAC3B;GACA,SAAQ;GACR,MAAK;GACL,UAAU,CAAC,WAAW;GACtB,QAAO;GACP,YAAY,EACV,SAAS;IACP,MAAM,SAAS;IACf,OAAO,SAAS;;GAGpB,iBAAiB,EACf,SAAS,EACP,MAAM,SAAS;GAGnB,UAAU,WAAW;;EAIzB,MAAM,sBACJ,oCAAC;GACC,SACE,oCAAC;IACC,WAAW;IACX,MAAK;IACL,IAAI,GAAG,UAAU,OAAO;IACxB,MAAM,iBAAiB,UAAU;IACjC,OAAO,YAAY,UAAU;IAC7B,cACE,OAAO,qBACL,iBAAiB,UAAU,WACvB,YACF,qBAAqB,iBAAiB,UAAU,SAChD,qBAAqB,iBAAiB,UAAU,WAChD,SACA,OACA;IAEN,UAAU,WAAW;IACrB,SAAS,EAAE,MAAM,SAAS;IAC1B,OAAM;IACN,YAAY,EAAE,cAAc;;GAGhC,OAAO,YAAY,UAAU;GAC7B,gBAAe;GACf,OAAO,EAAE,YAAY;;AAIzB,UAAQ,UAAU,eAAlB;GACE,KAAK,eAAe,WAAW;GAC/B,KAAK,eAAe,WAAW;GAC/B,KAAK,eAAe,WAAW;GAC/B,KAAK,eAAe,WAAW;GAC/B,KAAK,eAAe,WAAW,eAC7B,QAAO;GACT,KAAK,eAAe,WAAW,WAC7B,QAAO;GACT,KAAK,eAAe,WAAW,YAC7B,QACE,oCAAC;IACC,UAAU,WAAW;IACrB,WAAW;IACX,IAAI,GAAG,UAAU,OAAO;IACxB,MAAM,iBAAiB,UAAU;IACjC,OAAO,YAAY,UAAU;IAC7B,cACE,qBAAqB,iBAAiB,UAAU,SAC5C,IAAI,KACF,qBAAqB,iBAAiB,UAAU,UAElD;IAEN;IACA,SAAQ;IACR,MAAK;IACL,UAAU,CAAC,WAAW;IACtB,OAAO,EAAE,WAAW;;GAG1B,QACE,QAAO;;IAGb;AAGF,QAAO,EACL;;;;;AC3HJ,MAAMA,cAAY,YAAY,WAAW;CACvC,SAAS;EACP,WAAW,MAAM,QAAQ;EACzB,cAAc,MAAM,QAAQ;EAC5B,SAAS;EACT,eAAe;;CAEjB,OAAO,EACL,UAAU;CAEZ,SAAS;EACP,YAAY,MAAM,QAAQ;EAC1B,SAAS;EACT,eAAe;EACf,UAAU;;CAEZ,YAAY,EACV,YAAY,MAAM,QAAQ;CAE5B,OAAO;EACL,QAAQ;EACR,SAAS;;CAEX,eAAe,EACb,UAAU;CAEZ,WAAW,EACT,UAAU;;AAId,MAAa,eAAe,UAAU;CACpC,MAAM,EAAE,kBAAkB,UAAU,gBAAgB,UAAU,aAC5D;CACF,MAAM,EAAE,2BAA2B;CAEnC,MAAM,CAAC,sBAAsB,2BAA2B,SACtD,YAAY;CAEd,MAAM,UAAUA;CAEhB,MAAM,eAAe,OAAO,WAAW;EACrC,IAAI,eAAe;GACjB,GAAG;GACH,GAAG;;EAGL,MAAM,WAAW,CAAC;AAElB,MAAI,SACF,aAAa,MAAM,SAAS;MAE5B,aAAa,MAAM,SAAS;AAE9B,oBAAkB;;AAGpB,QACE,oCAAC,QAAK,UAAU,gBACd,oCAAC,aACE,kBAAkB,KAAK,WAAW,UAAU;AAC3C,SACE,oCAAC,MAAM,YAAS,KAAK,GAAG,UAAU,KAAK,GAAG,WACxC,oCAAC;GAAW,SAAQ;GAAY,OAAO,EAAE,WAAW;KACjD,UAAU,eAEZ,uBACC,WACA,OACA,sBACA;MAOV,oCAAC,mBACC,oCAAC;EACC,SAAQ;EACR,OAAM;EACN,iBAAiB;EACjB,UAAU;EACV,OAAO,EAAE,WAAW;IACrB;;AAQT,YAAY,YAAY;CAItB,gBAAgB,UAAU;CAI1B,UAAU,UAAU;CAIpB,UAAU,UAAU;;;;;ACjGtB,MAAM,YAAY,YAAY,WAAW;CACvC,MAAM;CACN,SAAS,EACP,WAAW,MAAM,QAAQ;;AAI7B,MAAM,eAAe;AAErB,MAAa,yBAAyB,UAAU;CAC9C,MAAM,EACJ,kBACA,OACA,sBACA,gBACA,UACA,UACA,QACA,mBACA,yBACA,sBACA,sBACE;CACJ,MAAM,OAAO;CACb,MAAM,UAAU;CAEhB,MAAM,CAAC,EAAE,MAAM,MAAM,SAAS,iBAAiB,YAC7C,cAAc,gBACd,QAAQ,UACR,IACA,CAAC,CAAC,CAAC,QACH;CAGF,MAAM,WAAW,cAAc;EAC7B,MAAM,cAAc;AACpB,OAAK,IAAI,IAAI,GAAG,IAAI,cAAc,IAChC,aAAY,KACV,0DACE,oCAAC;GAAS,KAAK;GAAG,SAAQ;GAAO,WAAW,QAAQ;MACpD,oCAAC,cAAW,MAAK;AAIvB,SAAO;IACN,CAAC;CAEJ,MAAM,mBAAmB,cAAc;AACrC,MAAI,KACF,QACE,oCAAC,eAAY,SAAS,gBACpB,oCAAC;GACO;GACN,KAAK;GACL,UAAU;GACV,cAAc;IACZ,QAAQ,MAAM;IACd,SAAS;IACU;IACM;IACH;IACN;IACG;IACT;IACA;;GAEZ,gBAAgB;;MAKtB,QACE,0DACE,oCAAC;GACmB;GAClB,UAAU;GACM;GACN;GACA;MAEZ,oCAAC,SAAI,WAAW,QAAQ,WACtB,oCAAC;IAKR;EACD;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF,QACE,oCAAC,aACE,cACC,0DACG,SAAS,KAAK,OAAO,KACtB,oCAAC,cAAW,MAAK,SACjB,oCAAC;EAAS,SAAQ;EAAO,WAAW,QAAQ;OAG9C;;AAMR,sBAAsB,YAAY;CAIhC,kBAAkB,UAAU;CAI5B,sBAAsB,UAAU;CAIhC,gBAAgB,UAAU;CAI1B,UAAU,UAAU;CAIpB,UAAU,UAAU;;;;;AC9HtB,MAAM,wBAAwB;CAC5B,MAAM,EAAE,WAAW;AACnB,QAAO,cAAc,IAAI,gBAAgB,SAAS,CAAC;;AAGrD,MAAa,kBAAkB,UAAU;CACvC,MAAM,EAAE,GAAG,UAAU;CACrB,MAAM,kBAAkB;CACxB,MAAM,WAAW;CACjB,MAAM,EAAE,OAAO,mBAAmB,SAAS,SAAS;CACpD,MAAM,QAAQ,UAAU,UAAU,MAAM;CACxC,MAAM,YAAY,QACd,OAAO,KACD,QACN,MAAM,MAAM,SAAS,KACrB;CAEJ,MAAM,OAAO;CACb,MAAM,WAAW;CACjB,MAAM,CAAC,aAAa,gBAAgB,SAAS;CAC7C,MAAM,CAAC,gBAAgB,qBAAqB,SAAS;CACrD,MAAM,CAAC,sBAAsB,2BAA2B,SAAS;CACjE,MAAM,CAAC,qBAAqB,0BAA0B,SAAS;CAC/D,MAAM,CAAC,mBAAmB,wBAAwB,qBACpC,QAAQ,KAAK;CAE3B,MAAM,CAAC,gBAAgB,qBAAqB,SAAS;CACrD,MAAM,EAAE,MAAM;CACd,MAAM,EAAE,qBAAqB,0BAC3B;CACF,MAAM,mBAAmB;CAEzB,MAAM,aAAa,kBAAkB;AACnC,eAAa;IACZ;CAEH,MAAM,aAAa,cAAc;AAC/B,MAAI,eACF,QAAO,eAAe,cAAc;MAEpC,QAAO,gBAAgB,IAAI,kBAAkB,OACzC,gBAAgB,IAAI,gBACpB;IAEL,CAAC,gBAAgB;CAEpB,MAAM,wBAAwB,cAAc;AAC1C,SAAO,gBAAgB,uBAAuB;IAC7C,CAAC;CAEJ,MAAM,CAAC,EAAE,MAAM,OAAO,SAAS,cAAc,OAAO,gBAClD,YACE,cAAc,qBACd,sCAAsC,MAAM,gBAAgB,WAAW,cAAc,OAAO,oBAC5F,IACA,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,gBACb;CAGJ,MAAM,CAAC,EAAE,MAAM,4BAA4B,YACzC,cAAc,qBACd,cAAc,OAAO,aAAa,0BAA0B,WAAW,WAAW,cAAc,OAAO,oBACvG,IACA,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,YAC1B;CAIF,MAAM,CAAC,EAAE,MAAM,YAAY,SAAS,aAAa,mBAC/C,eACE,cAAc,qBACd,wCAAwC,gBAAgB,wBAAwB,eAChF,EACE,QAAQ;CAKd,MAAM,CACJ,EAAE,MAAM,kBAAkB,SAAS,2BACnC,yBACE,eACF,cAAc,qBACd,wCAAwC,gBAAgB,yBAAyB,eACjF,EACE,QAAQ;CAIZ,MAAM,mCAAmC,aACtC,WAAW;AACV,MAAI,CAAC,iBACH,QAAO;EAET,MAAM,UAAU;AAChB,mBAAiB,SAAS,WAAW;GACnC,MAAM,aACJ,OAAO,OAAO,OAAO,SAAS,aAAa,OAAO,OAAO;AAC3D,OAAI,OAAO,QAAQ,WACjB,SAAQ,iBAAiB,YAAY,gBAArC;IACE,KAAK,SAAS,WAAW;AACvB,aAAQ,KAAK;MACX,gBAAgB,OAAO;MACvB,OAAO,OAAO,OAAO;;AAEvB;IACF;;;AAIN,SAAO;IAET,CAAC,kBAAkB;CAGrB,MAAM,iBAAiB,YACrB,OAAO,WAAW;AAChB,MAAI,gBAAgB,8BAA8B;GAChD,MAAM,aAAa,iCAAiC;GACpD,MAAM,OAAO;IAAE,aAAa;IAAY,IAAI;;GAC5C,MAAM,WAAW,MAAM,2BACrB,EAAE,QACF,eAAe,6BAA6B,aAC5C,OAAO,QAAQ;AACf,wBAAoB,IAAI;;AAG1B,OAAI,UAAU,WAAW,KAAK;AAC5B,0BAAsB,EAAE;IACxB,MAAM,YAAY,EAAE,IAAI;AACxB,oBAAgB,EAAE,MAAM;;;IAI9B;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;CAIJ,MAAM,iBAAiB,YACrB,OAAO,WAAW;AAChB,MAAI,gBAAgB,8BAA8B;GAEhD,MAAM,mBAAmB,CAAC,WAAW,OAAO;GAC5C,MAAM,aAAa,cACjB,eAAe,6BAA6B,gBAC5C;GAEF,MAAM,aAAa,iCAAiC;GACpD,IAAI,OAAO,EAAE,aAAa;AAC1B,OAAI,MAAM,QAAQ,YAChB,YAAW,SAAS,OAAO;AACzB,SAAK,OAAO,KAAK,IAAI,MAAM,GAAG,OAAO,KAAK,IAAI;;OAGhD,QAAO;IAAE,GAAG;IAAY,aAAa;;GAGvC,MAAM,WAAW,MAAM,2BACrB,EAAE,QACF,eAAe,6BAA6B,aAC5C,OAAO,QAAQ;AACf,wBAAoB,IAAI;;AAG1B,OAAI,UAAU,WAAW,KAAK;AAC5B,0BAAsB,EAAE;IACxB,MAAM,YAAY,EAAE,IAAI;AACxB,oBAAgB,EAAE,MAAM;;;IAI9B;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;CAIJ,MAAM,iBAAiB,YACrB,OAAO,YAAU;AACf,MAAI,gBAAgB,8BAA8B;GAEhD,MAAM,mBAAmB,CAAC,WAAWC,QAAM;GAC3C,MAAM,aAAa,cACjB,gBAAgB,6BAA6B,gBAC7C;GAEF,IAAI,OAAO;AACX,OAAI,MAAM,QAAQ,YAChB,YAAW,SAAS,OAAO;AACzB,SAAK,OAAO,KAAK,IAAI,MAAM,GAAG,OAAO,KAAK,IAAI;;OAGhD,QAAO,EAAE,GAAG;GAGd,MAAM,WAAW,MAAM,2BACrB,EAAE,QACF,eAAe,6BAA6B,aAC5C,OAAO,QAAQ;AACf,wBAAoB,IAAI;;AAG1B,OAAI,UAAU,WAAW,KAAK;AAC5B,0BAAsB,EAAE;IACxB,MAAM,YAAY,EAAE,IAAI;AACxB,oBAAgB,EAAE,MAAM;;;IAI9B;EACE;EACA;EACA;EACA;EACA;EACA;;CAIJ,MAAM,aAAa,cAAc;AAC/B,MAAI,CAAC,eACH;AAGF,SAAO,CACL;GACE,IAAI;GACJ,OAAO,gBAAgB,+BACnB,EAAE,UACF,EAAE;GACN,MAAM;GACN,SAAS;GACT,OAAO;GACP,MAAM;IACJ,WAAW;IACX,YAAY;KACQ;KAClB,UAAU;KACV,eAAe;KACf,gBAAgB;KAChB,wBAAwB;KACxB,QAAQ,gBAAgB,8BAA8B;KACtD,YAAY;;;GAGhB,UAAU,CAAC,CAAC,CAAC,gBAAgB;KAE/B;GACE,IAAI;GACJ,OAAO,gBAAgB,+BACnB,EAAE,YACF,EAAE;GACN,MAAM;GACN,SAAS;GACT,OAAO;GACP,MAAM;IACJ,WAAW;IACX,YAAY;KACV,OAAO,EAAE;KACT,SAAS,EAAE;KACX,UAAU,EAAE;KACZ,WAAW;KACX,UAAU,EAAE;;;GAGhB,UAAU,CAAC,CAAC,CAAC,gBAAgB;;IAGhC;EAAC;EAAgB;EAAG;EAAgB;EAAgB;;CAEvD,MAAM,aAAa,cAAc;AAC/B,MAAI,kBAAkB,OACpB,QAAO,uBAAuB,kBAAkB;AAElD,SAAO;IACN,CAAC,YAAY;CAEhB,MAAM,YAAY,cAAc;AAC9B,SAAO,YAAY,KAAK,SAAS;AAC/B,UAAO;IACL,WAAW,KAAK;IAChB,OAAO,KAAK;IACZ,OAAO,KAAK;;;IAGf,CAAC;AAEJ,iBAAgB;AACd,MAAI,uBACF,mBAAkB;IAEnB,CAAC;AAEJ,iBAAgB;AACd,MAAI,WAAW;GACb,MAAM,YAAY,EAAE,IAAI;AACxB,OAAI,gBAAgB,wBAAwB,YAC1C,iBAAgB,EAAE,MAAM;AAE1B,OAAI,gBAAgB,yBAAyB,YAC3C,uBAAsB,EAAE,MAAM;;IAGjC;EAAC;EAAgB;EAAiB;EAAW;;AAIhD,iBAAgB;AACd,mBAAiB,EAAE,OAAO,EAAE,OAAO,SAAS,EAAE;IAC7C;EAAC;EAAkB;EAAG;;CAEzB,MAAM,MACJ,oCAACC,+BAAoB,eAAe,gBAAgB,aAAa,SAC/D,oCAAC,cAAW,OAAO,EAAE,aAAa,OAAK,QACvC,oCAAC;CAIL,MAAM,iBAAiB,cAEnB,oCAAC;EACC,MAAM;EACN,SAAS;EACT,OAAO,WAAW;EAClB,OAAO;EACP,aAAa;EACb,UAAU;EACV,GAAI;IAEJ,oCAAC;EACC,UAAU;EACV,gBAAgB;EAChB,QAAQ;EACW;EACM;EACH;EACtB,mBAAmB;EACD;MAIxB;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;CAIJ,MAAM,aAAa,kBAAkB;AACnC,MAAI,YAAY,QAAQ,kBAAkB;GACxC,IAAI,sBAAsB,UAAU,YAAY;GAGhD,MAAM,iBAAiB,kBAAkB,QAAQ,QAAQ,YAAY;AACnE,QAAI,SAAS,SAAS,WACpB,QAAO,KAAK,SAAS;AAEvB,WAAO;MACN;AAEH,OAAI,eAAe,OACjB,qBAAoB,SAAS,MAAM;AACjC,WAAO,KAAK,GAAG,SAAS,QAAQ;AAE9B,SAAI,eAAe,MAAM,UAAU,UAAU,MAAM;AAEjD,UAAI,EAAE,SAAS,KAAM;AACrB,QAAE,OAAO,OAAO,IAAI,KAAK,EAAE,OAAO;;;;AAM1C,UAAO;;AAET,SAAO;IACN,CAAC,YAAY;AAEhB,QACE,0DACE,oCAAC;EACC,OAAO,OAAO,QAAQ,YAAY;EAClC,MAAM,aAAa,WAAW,YAAY,QAAQ;EACtC;EACZ,cAAc;EACd,qBAAqB;EACrB,qBAAqB,EAAE,iBAAiB;EACxC,QAAQ,gBAAgB,WAAW,UAAU,QAAQ;EACrD,qBAAqB;EACrB,SAAS;EACT,GAAI;KAEL"}
1
+ {"version":3,"file":"VirtualBrowser-_epMjUkE.js","names":["useStyles","value","PrimaryActionButton"],"sources":["../src/maintenanceEngine/virtualBrowser/VirtualTableColumnDefs.js","../src/hooks/virtualActions.jsx","../src/UI/forms/VirtualForm.jsx","../src/maintenanceEngine/virtualBrowser/VirtualTableSidePanel.jsx","../src/maintenanceEngine/virtualBrowser/VirtualBrowser.jsx"],"sourcesContent":["import { toTitleCase } from '../../utilities/input/StringUtilities';\n\nconst defaultGridColumn = {\n headerName: '',\n field: '',\n minWidth: 80,\n autoHeight: false,\n sortable: true\n};\n\nexport const VirtualTableColumnDefs = (\n tableDescription,\n actionList,\n columnName = 'Actions',\n crudTableActionRenderName = 'actionsRenderer',\n panelDirection = 'right'\n) => {\n let columnDefs =\n tableDescription?.reduce((defs, element) => {\n defs.push({\n ...defaultGridColumn,\n headerName: toTitleCase(element?.name || ''),\n field: element?.name\n });\n return defs;\n }, []) || [];\n\n columnDefs.push({\n headerName:\n crudTableActionRenderName === 'actionsRenderer' ? 'Actions' : columnName,\n filter: false,\n pinned: panelDirection,\n width: 150,\n maxWidth: 180,\n cellRenderer: crudTableActionRenderName,\n cellRendererParams: {\n actionList\n },\n valueGetter: (params) => params.data,\n suppressMenu: true,\n sortable: false,\n cellStyle: { display: 'flex', alignItems: 'center' }\n });\n\n return columnDefs;\n};\n\nexport const defaultColActionsDef = {\n resizable: true,\n editable: false,\n sortable: true,\n filter: true,\n floatingFilter: false,\n enableRowGroup: true\n};\n","import { FormControlLabel, TextField } from '@material-ui/core';\nimport React, { useCallback } from 'react';\nimport { DateTimeField } from '../UI/inputs/datetimes/DateTimeField';\nimport { Field } from '../utilities/form';\nimport { findTermByType } from '../utilities/maintenanceEngine/CrudBrowserUtilities';\nimport { FluentToggle } from '../UI/inputs/toggle/FluentToggle';\nimport { PropertyTypeEnum } from '../enums/propertyTypeEnums';\nimport { toLowerFirstChar } from '../utilities/input/StringUtilities';\nimport { toTitleCase } from '../utilities/input/StringUtilities';\n\nexport function useVirtualActions() {\n const renderInputByFieldType = useCallback(\n (formField, index, virtualTableFormData, classes) => {\n const NUMBER_TYPE = [\n PropertyTypeEnum.Int,\n PropertyTypeEnum.Long,\n PropertyTypeEnum.Double\n ];\n\n if (\n formField.type === 'boolean' &&\n virtualTableFormData[toLowerFirstChar(formField.name)] === ''\n ) {\n virtualTableFormData[toLowerFirstChar(formField.name)] = false;\n }\n\n const fieldType = formField.type?.toLowerCase();\n let fieldIsNumberType = NUMBER_TYPE.includes(fieldType);\n\n const DefaultTextField = (\n <Field\n component={TextField}\n id={`${formField.name}${index}`}\n name={toLowerFirstChar(formField.name)}\n label={toTitleCase(formField.name)}\n initialValue={\n virtualTableFormData[toLowerFirstChar(formField.name)] || ''\n }\n type={fieldIsNumberType && 'number'}\n fullWidth\n variant='outlined'\n size='small'\n required={!formField?.nullable}\n margin='dense'\n InputProps={{\n classes: {\n root: classes?.input,\n input: classes?.formTextInput\n }\n }}\n InputLabelProps={{\n classes: {\n root: classes?.labelRoot\n }\n }}\n disabled={formField?.disabled}\n />\n );\n\n const DefaultFluentToggle = (\n <FormControlLabel\n control={\n <Field\n component={FluentToggle}\n type='checkbox'\n id={`${formField.name}${index}`}\n name={toLowerFirstChar(formField.name)}\n label={toTitleCase(formField.name)}\n initialValue={\n typeof virtualTableFormData[\n toLowerFirstChar(formField.name)\n ] === 'boolean'\n ? virtualTableFormData[toLowerFirstChar(formField.name)]\n : virtualTableFormData[toLowerFirstChar(formField.name)] ===\n 'true'\n ? true\n : false\n }\n disabled={formField?.disabled}\n classes={{ root: classes?.switchRoot }}\n color='secondary'\n inputProps={{ 'aria-label': 'Active condition' }}\n />\n }\n label={toTitleCase(formField.name)}\n labelPlacement='start'\n style={{ marginLeft: 4 }}\n />\n );\n\n switch (fieldType.toLowerCase()) {\n case findTermByType(fieldType, 'int'):\n case findTermByType(fieldType, 'long'):\n case findTermByType(fieldType, 'double'):\n case findTermByType(fieldType, 'string'):\n case findTermByType(fieldType, 'string uuid'):\n return DefaultTextField;\n case findTermByType(fieldType, 'boolean'):\n return DefaultFluentToggle;\n case findTermByType(fieldType, 'datetime'):\n return (\n <Field\n disabled={formField?.disabled}\n component={DateTimeField}\n id={`${formField.name}${index}`}\n name={toLowerFirstChar(formField.name)}\n label={toTitleCase(formField.name)}\n initialValue={\n virtualTableFormData[toLowerFirstChar(formField.name)]\n ? new Date(\n virtualTableFormData[toLowerFirstChar(formField.name)]\n )\n : ''\n }\n fullWidth\n variant='outlined'\n size='small'\n required={!formField?.nullable}\n style={{ marginTop: 8 }}\n />\n );\n default:\n return null;\n }\n },\n []\n );\n\n return {\n renderInputByFieldType\n };\n}\n","import { makeStyles, Typography } from '@material-ui/core';\nimport PropTypes from 'prop-types';\nimport React, { useState } from 'react';\nimport { Form, FormButtons, SubmitButton } from '../../utilities/form';\nimport { useVirtualActions } from '../../hooks/virtualActions';\n\nconst useStyles = makeStyles((theme) => ({\n actions: {\n marginTop: theme.spacing(2),\n marginBottom: theme.spacing(2),\n display: 'flex',\n flexDirection: 'row'\n },\n title: {\n flexGrow: 1\n },\n subject: {\n marginLeft: theme.spacing(1),\n display: 'flex',\n flexDirection: 'row',\n flexGrow: 1\n },\n switchRoot: {\n marginLeft: theme.spacing(1)\n },\n input: {\n height: 34,\n padding: 0\n },\n formTextInput: {\n fontSize: 13\n },\n labelRoot: {\n fontSize: 13\n }\n}));\n\nexport const VirtualForm = (props) => {\n const { tableDescription, rowValue, closeSideSheet, onCreate, onUpdate } =\n props;\n const { renderInputByFieldType } = useVirtualActions();\n\n const [virtualTableFormData, setVirtualTableFormData] = useState(\n rowValue || {}\n );\n const classes = useStyles();\n\n const handleSubmit = async (values) => {\n let newTableData = {\n ...virtualTableFormData,\n ...values\n };\n\n const isNewRow = !rowValue;\n\n if (isNewRow) {\n onCreate && (await onCreate(newTableData));\n } else {\n onUpdate && (await onUpdate(newTableData));\n }\n closeSideSheet && closeSideSheet();\n };\n\n return (\n <Form onSubmit={handleSubmit}>\n <div>\n {tableDescription?.map((formField, index) => {\n return (\n <React.Fragment key={`${formField.name}-${index}`}>\n <Typography variant='subtitle2' style={{ marginTop: 8 }}>\n {formField.friendlyName}\n </Typography>\n {renderInputByFieldType(\n formField,\n index,\n virtualTableFormData,\n classes\n )}\n </React.Fragment>\n );\n })}\n </div>\n\n <FormButtons>\n <SubmitButton\n variant='contained'\n color='secondary'\n disablePristine={false}\n disabled={false}\n style={{ marginTop: 15 }}\n >\n Save\n </SubmitButton>\n </FormButtons>\n </Form>\n );\n};\n\nVirtualForm.propTypes = {\n /**\n * onClick event for closing sidesheet\n */\n closeSideSheet: PropTypes.func,\n /**\n * onClick event for creating\n */\n onCreate: PropTypes.func,\n /**\n * onClick event for updating\n */\n onUpdate: PropTypes.func\n};\n","import { Divider, makeStyles } from '@material-ui/core';\nimport PropTypes from 'prop-types';\nimport React, { useMemo } from 'react';\nimport { useUser } from '../../utilities/auth/useUser';\nimport { DndProvider } from 'react-dnd';\nimport { HTML5Backend } from 'react-dnd-html5-backend';\nimport { PageContainer } from '../../page/PageContainer';\nimport { useAxiosGet } from '../../utilities/useAxiosGet';\nimport { Skeleton } from '@material-ui/lab';\nimport { LayoutUnit } from '../../layout/LayoutUnit';\nimport { VirtualForm } from '../../UI/forms/VirtualForm';\nimport { ConfigService } from 'udp-react-stencil-component-library';\n\nconst useStyles = makeStyles((theme) => ({\n root: {},\n divider: {\n marginTop: theme.spacing(2)\n }\n}));\n\nconst FIELD_NUMBER = 10;\n\nexport const VirtualTableSidePanel = (props) => {\n const {\n tableDescription,\n value,\n crudTableEditionData,\n closeSideSheet,\n onCreate,\n onUpdate,\n pageId,\n setSideSheetWidth,\n setSideSheetButtonLabel,\n setSideSheetOnSubmit,\n setSideSheetProps\n } = props;\n const user = useUser();\n const classes = useStyles();\n\n const [{ data: page, loading: loadingPage }] = useAxiosGet(\n ConfigService.tenantV1ApiUrl,\n `page/${pageId}`,\n {},\n !!!pageId,\n false\n );\n\n const skeleton = useMemo(() => {\n const skeletonArr = [];\n for (let i = 0; i < FIELD_NUMBER; i++) {\n skeletonArr.push(\n <>\n <Skeleton key={i} variant='rect' className={classes.skeleton} />\n <LayoutUnit unit='xxs' />\n </>\n );\n }\n return skeletonArr;\n }, [classes]);\n\n const sideSheetContent = useMemo(() => {\n if (page) {\n return (\n <DndProvider backend={HTML5Backend}>\n <PageContainer\n user={user}\n key={pageId}\n pageData={page}\n widgetParams={{\n pageId: page?.pageId,\n nodeObj: crudTableEditionData,\n setSideSheetWidth: setSideSheetWidth,\n setSideSheetButtonLabel: setSideSheetButtonLabel,\n setSideSheetOnSubmit: setSideSheetOnSubmit,\n closeSideSheet: closeSideSheet,\n setSideSheetProps: setSideSheetProps,\n onCreate: onCreate,\n onUpdate: onUpdate\n }}\n disableMargins={true}\n />\n </DndProvider>\n );\n } else {\n return (\n <>\n <VirtualForm\n tableDescription={tableDescription}\n rowValue={value}\n closeSideSheet={closeSideSheet}\n onCreate={onCreate}\n onUpdate={onUpdate}\n />\n <div className={classes.divider}>\n <Divider />\n </div>\n </>\n );\n }\n }, [\n page,\n user,\n pageId,\n crudTableEditionData,\n setSideSheetWidth,\n setSideSheetButtonLabel,\n setSideSheetOnSubmit,\n setSideSheetProps,\n closeSideSheet,\n onCreate,\n onUpdate,\n classes,\n tableDescription,\n value\n ]);\n\n return (\n <div>\n {loadingPage ? (\n <>\n {skeleton.map((sk) => sk)}\n <LayoutUnit unit='md' />\n <Skeleton variant='rect' className={classes.skeletonButton} />\n </>\n ) : (\n sideSheetContent\n )}\n </div>\n );\n};\n\nVirtualTableSidePanel.propTypes = {\n /**\n * Description of the table\n */\n tableDescription: PropTypes.array,\n /**\n * Entity data\n */\n crudTableEditionData: PropTypes.array,\n /**\n * onClick event for closing sidesheet\n */\n closeSideSheet: PropTypes.func,\n /**\n * onClick event for creating\n */\n onCreate: PropTypes.func,\n /**\n * onClick event for updating\n */\n onUpdate: PropTypes.func\n};\n","import React, { useMemo, useState, useCallback, useEffect } from 'react';\nimport PrimaryActionButton from '../../UI/inputs/buttons/PrimaryActionButton';\nimport { AmbientGridTemplate } from '../../UI/templates/AmbientGridTemplate';\nimport { SideSheet } from '../../UI/surfaces/SideSheet';\nimport { ActionsRenderer } from '../../UI/templates/ui/renderers/ActionsRenderer';\nimport { VirtualTableColumnDefs } from './VirtualTableColumnDefs';\nimport { AddIcon, DeleteIcon, EditIcon } from '@fluentui/react-icons';\nimport { Typography } from '@material-ui/core';\nimport { format } from 'date-fns';\nimport { getPathObject } from '../../utilities/maintenanceEngine/CrudBrowserUtilities';\nimport { cloneDeep } from 'lodash';\nimport { useTranslation } from 'react-i18next';\nimport { executeQueryWithParameters } from '../../udp/utilities/methodUtils';\nimport { useHandleAxiosSnackbar } from '../../utilities/apiHelpers';\nimport { useAxiosMutate } from '../../utilities/useAxiosMutate';\nimport { useLocation } from 'react-router-dom';\nimport { useUser } from '../../utilities/auth/useUser';\nimport { useAxiosGet } from '../../utilities/useAxiosGet';\nimport { VirtualTableSidePanel } from './VirtualTableSidePanel';\nimport { UdpEnums } from '../../enums/unitySystemEnums';\nimport { useBuildEnvironment } from '../../shell/ui/EnvironmentRibbon';\nimport { getSanitizedName } from '../../utilities/entities/entityUtilities';\nimport { useSetLocationState } from '../../hooks/useSetLocationState';\nimport { ConfigService } from 'udp-react-stencil-component-library';\n\nconst useSearchParams = () => {\n const { search } = useLocation();\n return useMemo(() => new URLSearchParams(search), [search]);\n};\n\nexport const VirtualBrowser = (props) => {\n const { ...other } = props;\n const urlSearchParams = useSearchParams();\n const location = useLocation();\n const { value, promotedEntity } = location.state || {};\n const parts = location?.pathname?.split('/');\n const virtualId = value\n ? value?.id\n : '' || parts\n ? parts[parts.length - 1]\n : null;\n\n const user = useUser();\n const buildEnv = useBuildEnvironment();\n const [isSheetOpen, setSheetOpen] = useState(false);\n const [sideSheetWidth, setSideSheetWidth] = useState(600);\n const [sideSheetButtonLabel, setSideSheetButtonLabel] = useState('');\n const [otherSideSheetProps, setOtherSideSheetProps] = useState({});\n const [sideSheetOnSubmit, setSideSheetOnSubmit] = useState(\n () => () => console.warn('onSubmit not set')\n );\n const [selectedEntity, setSelectedEntity] = useState(promotedEntity);\n const { t } = useTranslation();\n const { handleErrorSnackbar, handleSuccessSnackbar } =\n useHandleAxiosSnackbar();\n const setLocationState = useSetLocationState();\n\n const closeSheet = useCallback(() => {\n setSheetOpen(false);\n }, []);\n\n const entityName = useMemo(() => {\n if (selectedEntity) {\n return selectedEntity.entityName || '';\n } else {\n return urlSearchParams.has('entityName') === true\n ? urlSearchParams.get('entityName')\n : '';\n }\n }, [selectedEntity, urlSearchParams]);\n\n const createApiMethodPageId = useMemo(() => {\n return selectedEntity?.unityBaseCreateMethod?.pageId;\n }, [selectedEntity]);\n\n const [{ data: tpacb, loading: loadingTpacb, error: tpacbError }] =\n useAxiosGet(\n ConfigService.integrationV1ApiUrl,\n `tenantProductApiCatalogBase/tenant/${user?.currentTenantId}/product/${ConfigService.config.UNITY_PRODUCT_ID}`,\n {},\n !!!user || !!promotedEntity,\n false\n );\n\n const [{ data: promotedMethodEntities }] = useAxiosGet(\n ConfigService.integrationV1ApiUrl,\n `apicatalog/${tpacb?.apiCatalogId}/promotedMethodEntities/${entityName}/product/${ConfigService.config.UNITY_PRODUCT_ID}`,\n {},\n !!!tpacb || !!!user || !!!entityName,\n false\n );\n\n // Get all rows of an entity\n const [{ data: entityData, loading: isLoading }, fetchEntityData] =\n useAxiosMutate(\n ConfigService.integrationV1ApiUrl,\n `apimethod/executeQueryWithParameters/${selectedEntity?.unityBaseGetDataMethod?.apiMethodId}`,\n {\n method: 'post'\n }\n );\n\n // Get all rows of an entity\n const [\n { data: tableDescription, loading: tableDescriptionLoading },\n fetchTableDescription\n ] = useAxiosMutate(\n ConfigService.integrationV1ApiUrl,\n `apimethod/executeQueryWithParameters/${selectedEntity?.unityBaseDescribeMethod?.apiMethodId}`,\n {\n method: 'post'\n }\n );\n\n const constructVirtualValuesForRequest = useCallback(\n (values) => {\n if (!tableDescription) {\n return [];\n }\n const bodyArr = [];\n tableDescription.forEach((column) => {\n const valueExist =\n typeof values[column.name] == 'boolean' || values[column.name];\n if (column.name || valueExist) {\n switch (getSanitizedName(entityName?.toLowerCase())) {\n case UdpEnums.Udp_Lookup.toLowerCase():\n bodyArr.push({\n lookupColumnId: column.id,\n value: values[column.name]\n });\n break;\n default:\n }\n }\n });\n return bodyArr;\n },\n [tableDescription, entityName]\n );\n\n const handleOnCreate = useCallback(\n async (values) => {\n if (selectedEntity?.unityBaseVirtualCreateMethod) {\n const requestArr = constructVirtualValuesForRequest(values);\n const data = { requestBody: requestArr, id: virtualId };\n const response = await executeQueryWithParameters(\n { data },\n selectedEntity.unityBaseVirtualCreateMethod.apiMethodId\n ).catch((res) => {\n handleErrorSnackbar(res.message);\n });\n\n if (response?.status === 200) {\n handleSuccessSnackbar(t(`Row has been created`));\n const queryData = { id: virtualId };\n fetchEntityData({ data: queryData });\n }\n }\n },\n [\n selectedEntity,\n t,\n fetchEntityData,\n handleErrorSnackbar,\n handleSuccessSnackbar,\n virtualId,\n constructVirtualValuesForRequest\n ]\n );\n\n const handleOnUpdate = useCallback(\n async (values) => {\n if (selectedEntity?.unityBaseVirtualUpdateMethod) {\n // Get primary key value object using path parameters and merge with data\n const primaryKeyValues = [virtualId, values.udpVirtualRowId];\n const pathObject = getPathObject(\n selectedEntity.unityBaseVirtualUpdateMethod.pathParameters,\n primaryKeyValues\n );\n const requestArr = constructVirtualValuesForRequest(values);\n let data = { requestBody: requestArr };\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: requestArr };\n }\n\n const response = await executeQueryWithParameters(\n { data },\n selectedEntity.unityBaseVirtualUpdateMethod.apiMethodId\n ).catch((res) => {\n handleErrorSnackbar(res.message);\n });\n\n if (response?.status === 200) {\n handleSuccessSnackbar(t(`Row has been updated`));\n const queryData = { id: virtualId };\n fetchEntityData({ data: queryData });\n }\n }\n },\n [\n selectedEntity,\n t,\n fetchEntityData,\n handleErrorSnackbar,\n handleSuccessSnackbar,\n virtualId,\n constructVirtualValuesForRequest\n ]\n );\n\n const handleOnDelete = useCallback(\n async (value) => {\n if (selectedEntity?.unityBaseVirtualDeleteMethod) {\n // Get primary key value object using path parameters and merge with data\n const primaryKeyValues = [virtualId, value.udpVirtualRowId];\n const pathObject = getPathObject(\n selectedEntity?.unityBaseVirtualDeleteMethod.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 executeQueryWithParameters(\n { data },\n selectedEntity.unityBaseVirtualDeleteMethod.apiMethodId\n ).catch((res) => {\n handleErrorSnackbar(res.message);\n });\n\n if (response?.status === 200) {\n handleSuccessSnackbar(t(`Row has been deleted`));\n const queryData = { id: virtualId };\n fetchEntityData({ data: queryData });\n }\n }\n },\n [\n selectedEntity,\n t,\n fetchEntityData,\n handleErrorSnackbar,\n handleSuccessSnackbar,\n virtualId\n ]\n );\n\n const actionList = useMemo(() => {\n if (!selectedEntity) {\n return;\n }\n\n return [\n {\n id: 1, // Must be unique\n title: selectedEntity?.unityBaseVirtualUpdateMethod\n ? t('Edit')\n : t('Edit Method Not Accessible'),\n icon: EditIcon,\n onClick: null,\n opens: 'sideSheet',\n view: {\n component: VirtualTableSidePanel,\n properties: {\n tableDescription: tableDescription,\n onUpdate: handleOnUpdate,\n valuePropName: 'value',\n closeSideSheet: null,\n closeSideSheetPropName: 'closeSideSheet',\n pageId: selectedEntity?.unityBaseVirtualUpdateMethod?.pageId,\n isNewEntry: false\n }\n },\n disabled: !!!selectedEntity?.unityBaseVirtualUpdateMethod\n },\n {\n id: 2, // Must be unique\n title: selectedEntity?.unityBaseVirtualDeleteMethod\n ? t('Delete')\n : t('Delete Method Not Accessible'),\n icon: DeleteIcon,\n onClick: null,\n opens: 'dialog',\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?.unityBaseVirtualDeleteMethod\n }\n ];\n }, [selectedEntity, t, handleOnUpdate, handleOnDelete, tableDescription]);\n\n const columnDefs = useMemo(() => {\n if (tableDescription?.length) {\n return VirtualTableColumnDefs(tableDescription, actionList);\n }\n return [];\n }, [actionList, tableDescription]);\n\n const groupData = useMemo(() => {\n return columnDefs?.map((item) => {\n return {\n groupItem: item.field,\n label: item.headerName,\n value: item.field\n };\n });\n }, [columnDefs]);\n\n useEffect(() => {\n if (promotedMethodEntities) {\n setSelectedEntity(promotedMethodEntities);\n }\n }, [promotedMethodEntities]);\n\n useEffect(() => {\n if (virtualId) {\n const queryData = { id: virtualId };\n if (selectedEntity?.unityBaseGetDataMethod?.apiMethodId) {\n fetchEntityData({ data: queryData });\n }\n if (selectedEntity?.unityBaseDescribeMethod?.apiMethodId) {\n fetchTableDescription({ data: queryData });\n }\n }\n }, [selectedEntity, fetchEntityData, virtualId, fetchTableDescription]);\n\n // Setting location state label so that if this page was saved to favorites\n // we can determine the bread crumb\n useEffect(() => {\n setLocationState({ label: t(value?.name) || t('Virtual Lookup') });\n }, [setLocationState, t, value]);\n\n const pab = (\n <PrimaryActionButton onClick={() => setSheetOpen && setSheetOpen(true)}>\n <Typography style={{ marginRight: 5 }}>Add</Typography>\n <AddIcon />\n </PrimaryActionButton>\n );\n\n const SideOptionList = useMemo(\n () => (\n <SideSheet\n open={isSheetOpen}\n onClose={closeSheet}\n title={`Add new ${entityName}`}\n width={sideSheetWidth}\n buttonLabel={sideSheetButtonLabel}\n onSubmit={sideSheetOnSubmit}\n {...otherSideSheetProps}\n >\n <VirtualTableSidePanel\n onCreate={handleOnCreate}\n closeSideSheet={closeSheet}\n pageId={createApiMethodPageId}\n setSideSheetWidth={setSideSheetWidth}\n setSideSheetButtonLabel={setSideSheetButtonLabel}\n setSideSheetOnSubmit={setSideSheetOnSubmit}\n setSideSheetProps={setOtherSideSheetProps}\n tableDescription={tableDescription}\n />\n </SideSheet>\n ),\n [\n isSheetOpen,\n closeSheet,\n entityName,\n sideSheetWidth,\n sideSheetButtonLabel,\n sideSheetOnSubmit,\n handleOnCreate,\n createApiMethodPageId,\n otherSideSheetProps,\n tableDescription\n ]\n );\n\n const formatData = useCallback(() => {\n if (entityData?.data && tableDescription) {\n let formattedEntityData = cloneDeep(entityData?.data);\n\n // get list of attributes that are datetime\n const datetimeFields = tableDescription?.reduce((fields, element) => {\n if (element?.type === 'datetime') {\n fields.push(element?.name);\n }\n return fields;\n }, []);\n\n if (datetimeFields.length) {\n formattedEntityData.forEach((e) => {\n Object.keys(e).forEach((key) => {\n // format all datetime fields\n if (datetimeFields.find((field) => field === key)) {\n // LAA UNT-2977: add null check to prevent default date from being added when null\n if (e[key] === null) return;\n e[key] = format(new Date(e[key]), 'yyyy/MM/dd kk:mm:ss');\n }\n });\n });\n }\n\n return formattedEntityData;\n }\n return [];\n }, [entityData, tableDescription]);\n\n return (\n <>\n <AmbientGridTemplate\n title={value?.name || entityData?.name}\n data={entityData ? formatData(entityData?.data) : []}\n columnDefs={columnDefs}\n groupingData={groupData}\n primaryActionButton={pab}\n frameworkComponents={{ actionsRenderer: ActionsRenderer }}\n height={`calc(100vh - ${buildEnv ? '139px' : '114px'})`}\n disableRowSelection={true}\n loading={isLoading}\n {...other}\n />\n {SideOptionList}\n </>\n );\n};\n"],"mappings":"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"}
@@ -1,7 +1,9 @@
1
- import { Field, Form, SideSheet, apiMutate as apiMutate$1 } from "./SideSheet-DUsxG1FN.js";
2
- import { APP_RIBBON_SPACE, FluentIcon, LayoutUnit, NodeActionTriggerEnums, TreeViewModeEnums, UnityFluentIcon, useAxiosGet, useBuildEnvironment, useShellStore, useUser } from "./EnvironmentRibbon-DaDmKAPO.js";
3
- import { AggregateChip, NodeLoader, UtilitySideBar, findAllParentIds, getIconFromName, getNodeIdForRightBorder, getUnityIconFromName, searchTree } from "./UtilitySideBar-D4CXGtW2.js";
4
- import { PageContainer, PrimaryActionHeader, useSetLocationState } from "./PageContainer-k8KCfGsM.js";
1
+ import { Field, Form, SideSheet } from "./SideSheet-BsDoeNmq.js";
2
+ import { APP_RIBBON_SPACE, FluentIcon, LayoutUnit, NodeActionTriggerEnums, TreeViewModeEnums, UnityFluentIcon, useBuildEnvironment, useShellStore } from "./EnvironmentRibbon-oEmbWjEq.js";
3
+ import { useAxiosGet, useUser } from "./useAxiosGet-Dh5pVURP.js";
4
+ import { apiMutate as apiMutate$1 } from "./useAxiosMutate-DlG255x9.js";
5
+ import { AggregateChip, NodeLoader, UtilitySideBar, findAllParentIds, getIconFromName, getNodeIdForRightBorder, getUnityIconFromName, searchTree } from "./UtilitySideBar-95k0edSA.js";
6
+ import { PageContainer, PrimaryActionHeader, useSetLocationState } from "./PageContainer-BPHLFGju.js";
5
7
  import React, { useCallback, useEffect, useMemo, useRef, useState } from "react";
6
8
  import { Box, Button, Card, CircularProgress, Grow, LinearProgress, Popper, Step, StepConnector, StepLabel, Stepper, TextField, Tooltip, Typography, darken, lighten, makeStyles, useTheme, withStyles } from "@material-ui/core";
7
9
  import { ConfigService } from "udp-react-stencil-component-library";
@@ -238,8 +240,7 @@ const WorkflowTreeMenuItem = (props) => {
238
240
  if (sourceNode) {
239
241
  const onDropActions = node?.properties?.nodeActions?.filter((na) => na?.triggerType === NodeActionTriggerEnums.On_Node_Drop);
240
242
  if (!onDropActions) return false;
241
- const nodeDragEntities = onDropActions?.map((action) => action?.dragEntityName);
242
- return nodeDragEntities.includes(sourceNode?.properties?.catalogReturnObject);
243
+ return (onDropActions?.map((action) => action?.dragEntityName)).includes(sourceNode?.properties?.catalogReturnObject);
243
244
  }
244
245
  }, [node]);
245
246
  const handleOnLabelClick = useCallback((e) => {
@@ -396,8 +397,7 @@ const WorkflowTreeMenu = (props) => {
396
397
  const treeCopy = cloneDeep(tree);
397
398
  setExpanded(nodeIds);
398
399
  const parentNode = searchTree(treeCopy, selectedNodeParentId);
399
- const initialAllParentNodeIds = selectedNodeParentId ? [selectedNodeParentId] : [];
400
- const allParentNodeIds = findAllParentIds(treeCopy, parentNode, initialAllParentNodeIds);
400
+ const allParentNodeIds = findAllParentIds(treeCopy, parentNode, selectedNodeParentId ? [selectedNodeParentId] : []);
401
401
  const selectedNodeShown = allParentNodeIds.every((id) => nodeIds.includes(id));
402
402
  if (isCurrentActiveTree && allParentNodeIds.length && !selectedNodeShown) setSelectedNodeIsHidden(true);
403
403
  else setSelectedNodeIsHidden(false);
@@ -718,8 +718,7 @@ const ColorLibConnector = withStyles((theme) => ({
718
718
  }))(StepConnector);
719
719
  const ColorlibStepIcon = (props) => {
720
720
  const { active, completed } = props;
721
- const classes = useStyles$7();
722
- const rootClass = `${classes.stepIconRoot} ${active ? "active" : ""} ${completed ? "completed" : ""}`;
721
+ const rootClass = `${useStyles$7().stepIconRoot} ${active ? "active" : ""} ${completed ? "completed" : ""}`;
723
722
  return /* @__PURE__ */ React.createElement("div", { className: rootClass }, completed ? /* @__PURE__ */ React.createElement(CheckCircleIcon, null) : active ? /* @__PURE__ */ React.createElement(RadioButtonCheckedIcon, null) : /* @__PURE__ */ React.createElement(RadioButtonUncheckedIcon, null));
724
723
  };
725
724
  const WorkflowTaskFlow = (props) => {
@@ -750,8 +749,7 @@ const WorkflowTaskFlow = (props) => {
750
749
  ]);
751
750
  const getFormattedDueDate = useCallback((date) => {
752
751
  if (!date) return "";
753
- const shortDate = formatDateToLocaleString(date, DateTime.DATE_SHORT);
754
- return `Due ${shortDate}`;
752
+ return `Due ${formatDateToLocaleString(date, DateTime.DATE_SHORT)}`;
755
753
  }, []);
756
754
  return /* @__PURE__ */ React.createElement("div", { className: classes.root }, /* @__PURE__ */ React.createElement("div", { className: classes.taskInfoBlock }, /* @__PURE__ */ React.createElement("div", { className: classes.description }, /* @__PURE__ */ React.createElement(Typography, { variant: "caption" }, task?.properties?.nodeLabel || "")), /* @__PURE__ */ React.createElement("div", { className: classes.description }, /* @__PURE__ */ React.createElement(Typography, {
757
755
  variant: "caption",
@@ -898,8 +896,7 @@ const WorkflowUiInterruptContent = (props) => {
898
896
  }, []);
899
897
  const workflowTaskSteps = useMemo(() => {
900
898
  if (!selectedNode?.properties?.interruptPages) return [];
901
- const orderedInterruptPages = orderBy(selectedNode.properties.interruptPages, ["sequenceNo"], ["asc"]);
902
- const steps = orderedInterruptPages.reduce((list, ip) => {
899
+ return orderBy(selectedNode.properties.interruptPages, ["sequenceNo"], ["asc"]).reduce((list, ip) => {
903
900
  const step = {
904
901
  label: ip.displayName || ip.page?.name,
905
902
  pageId: ip.page?.pageId,
@@ -908,7 +905,6 @@ const WorkflowUiInterruptContent = (props) => {
908
905
  list.push(step);
909
906
  return list;
910
907
  }, []);
911
- return steps;
912
908
  }, [selectedNode]);
913
909
  const assigneeOptions = useMemo(() => {
914
910
  const formattedUsers = users?.reduce((list, user$1) => {
@@ -925,8 +921,7 @@ const WorkflowUiInterruptContent = (props) => {
925
921
  });
926
922
  return list;
927
923
  }, []) || [];
928
- const options = formattedUsers.concat(formattedGroups);
929
- return options;
924
+ return formattedUsers.concat(formattedGroups);
930
925
  }, [users, groups]);
931
926
  const saveCurrentWorkflowData = useCallback(async () => {
932
927
  let playSceneData = null;
@@ -1089,8 +1084,7 @@ const WorkflowUiInterruptContent = (props) => {
1089
1084
  ]);
1090
1085
  const currentAssignee = useMemo(() => {
1091
1086
  if (!playScene?.assignee || !assigneeOptions?.length) return "";
1092
- const matchingAssignee = assigneeOptions.find((assignee) => assignee.id === playScene.assignee);
1093
- return matchingAssignee || "";
1087
+ return assigneeOptions.find((assignee) => assignee.id === playScene.assignee) || "";
1094
1088
  }, [playScene, assigneeOptions]);
1095
1089
  const pageHeight = useMemo(() => "calc(100vh - 162px)", []);
1096
1090
  useEffect(() => {
@@ -1558,4 +1552,4 @@ const WorkflowContainer = (props) => {
1558
1552
 
1559
1553
  //#endregion
1560
1554
  export { CircularProgress$1 as CircularProgress, FluentTextFieldAutoComplete, LinearProgress$1 as LinearProgress, UnitStateType, WorkflowContainer, WorkflowContent, WorkflowTreeMenu, formatDateToLocaleString, toUtcDate, transformWorkflowPlayTree, useWorkflowStore };
1561
- //# sourceMappingURL=WorkflowContainer-DrqzuQtU.js.map
1555
+ //# sourceMappingURL=WorkflowContainer-ClPvY2mG.js.map