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.
- package/dist/{AmbientGridTemplate-BqlMt5Su.js → AmbientGridTemplate-6xfwTiz-.js} +24 -62
- package/dist/AmbientGridTemplate-6xfwTiz-.js.map +1 -0
- package/dist/ClientSideUdpGrid-CEhDqIId.js +56 -0
- package/dist/ClientSideUdpGrid-CEhDqIId.js.map +1 -0
- package/dist/{EnvironmentRibbon-DaDmKAPO.js → EnvironmentRibbon-oEmbWjEq.js} +4 -148
- package/dist/EnvironmentRibbon-oEmbWjEq.js.map +1 -0
- package/dist/{MenuPage-CO6_GWwB.js → MenuPage-CZHpoopY.js} +12 -13
- package/dist/{MenuPage-CO6_GWwB.js.map → MenuPage-CZHpoopY.js.map} +1 -1
- package/dist/{MyExportsPage-CX9tzqHk.js → MyExportsPage-CS2Bw2mF.js} +56 -69
- package/dist/{MyExportsPage-CX9tzqHk.js.map → MyExportsPage-CS2Bw2mF.js.map} +1 -1
- package/dist/MyExportsPage-hyX42CN6.js +11 -0
- package/dist/{PageContainer-k8KCfGsM.js → PageContainer-BPHLFGju.js} +12 -17
- package/dist/PageContainer-BPHLFGju.js.map +1 -0
- package/dist/{PageNotFoundRoute-CxYZNEhN.js → PageNotFoundRoute-D9dLbM_w.js} +1 -1
- package/dist/{PageNotFoundRoute-CxYZNEhN.js.map → PageNotFoundRoute-D9dLbM_w.js.map} +1 -1
- package/dist/PageNotFoundRoute-DUj0Q9J8.js +3 -0
- package/dist/{PasswordResetRedirect-BHnkAW40.js → PasswordResetRedirect-C3g8L0vA.js} +2 -3
- package/dist/{PasswordResetRedirect-BHnkAW40.js.map → PasswordResetRedirect-C3g8L0vA.js.map} +1 -1
- package/dist/PasswordResetRedirect-Dh-S5Ril.js +3 -0
- package/dist/{SearchUtilities-Bor3HbfB.js → SearchUtilities-Btugro8y.js} +11 -20
- package/dist/{SearchUtilities-Bor3HbfB.js.map → SearchUtilities-Btugro8y.js.map} +1 -1
- package/dist/{SideSheet-DUsxG1FN.js → SideSheet-BsDoeNmq.js} +7 -47
- package/dist/SideSheet-BsDoeNmq.js.map +1 -0
- package/dist/UdpMaintenanceConfigPage-DcHntunS.js +88 -0
- package/dist/UdpMaintenanceConfigPage-DcHntunS.js.map +1 -0
- package/dist/UdpPublicForm-DTt-lMfk.js +4 -0
- package/dist/{UdpPublicForm-Caa1tH6z.js → UdpPublicForm-LDSuOwV2.js} +2 -2
- package/dist/{UdpPublicForm-Caa1tH6z.js.map → UdpPublicForm-LDSuOwV2.js.map} +1 -1
- package/dist/{UtilitySideBar-D4CXGtW2.js → UtilitySideBar-95k0edSA.js} +45 -89
- package/dist/{UtilitySideBar-D4CXGtW2.js.map → UtilitySideBar-95k0edSA.js.map} +1 -1
- package/dist/{VirtualBrowser-BXL0hdy0.js → VirtualBrowser-_epMjUkE.js} +23 -29
- package/dist/{VirtualBrowser-BXL0hdy0.js.map → VirtualBrowser-_epMjUkE.js.map} +1 -1
- package/dist/{WorkflowContainer-DrqzuQtU.js → WorkflowContainer-ClPvY2mG.js} +14 -20
- package/dist/{WorkflowContainer-DrqzuQtU.js.map → WorkflowContainer-ClPvY2mG.js.map} +1 -1
- package/dist/WorkflowContainer-D0QUOc-f.js +11 -0
- package/dist/{apiHelpers-DZots3og.js → apiHelpers-CmM6DWAT.js} +7 -12
- package/dist/{apiHelpers-DZots3og.js.map → apiHelpers-CmM6DWAT.js.map} +1 -1
- package/dist/entityUtilities-Dy-jsB5c.js +22 -0
- package/dist/entityUtilities-Dy-jsB5c.js.map +1 -0
- package/dist/index.js +1494 -1984
- package/dist/index.js.map +1 -1
- package/dist/{propertyTypeEnums-Civy7RJv.js → propertyTypeEnums-BCCGQqVB.js} +2 -2
- package/dist/{propertyTypeEnums-Civy7RJv.js.map → propertyTypeEnums-BCCGQqVB.js.map} +1 -1
- package/dist/types/index.d.ts +1 -4
- package/dist/types/maintenanceEngine/crudBrowser/CrudTableColumnDefs.d.ts +1 -9
- package/dist/types/maintenanceEngine/crudBrowser/crudHelper.d.ts +1 -0
- package/dist/types/menuPage/MenuPage.d.ts +2 -1
- package/dist/types/shell/ui/ShellDropdown.d.ts +15 -0
- package/dist/types/shell/ui/SiteHeader.d.ts +1 -0
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/dist/types/udp/pages/UdpMaintenanceConfigPage.d.ts +2 -1
- package/dist/useAxiosGet-Dh5pVURP.js +144 -0
- package/dist/useAxiosGet-Dh5pVURP.js.map +1 -0
- package/dist/useAxiosMutate-DlG255x9.js +43 -0
- package/dist/useAxiosMutate-DlG255x9.js.map +1 -0
- package/package.json +2 -2
- package/dist/AmbientGridTemplate-BqlMt5Su.js.map +0 -1
- package/dist/EnvironmentRibbon-DaDmKAPO.js.map +0 -1
- package/dist/MyExportsPage-CkzQ0MRq.js +0 -8
- package/dist/PageContainer-k8KCfGsM.js.map +0 -1
- package/dist/PageNotFoundRoute-BbBtA9Cz.js +0 -3
- package/dist/PasswordResetRedirect-tUV2yEkH.js +0 -3
- package/dist/SideSheet-DUsxG1FN.js.map +0 -1
- package/dist/UdpPublicForm-Cvw5tOHe.js +0 -4
- package/dist/WorkflowContainer-Q8gtuaB7.js +0 -9
- package/dist/types/maintenanceEngine/crudBrowser/CrudTableActionRender.d.ts +0 -3
|
@@ -1,9 +1,12 @@
|
|
|
1
|
-
import { ActionsRenderer, AmbientGridTemplate, findTermByType, getPathObject
|
|
2
|
-
import { Field, Form, SideSheet
|
|
3
|
-
import { LayoutUnit, PrimaryActionButton_default, UdpEnums, executeQueryWithParameters,
|
|
4
|
-
import { DateTimeField, FluentToggle, FormButtons, PropertyTypeEnum, SubmitButton } from "./propertyTypeEnums-
|
|
5
|
-
import { useHandleAxiosSnackbar } from "./apiHelpers-
|
|
6
|
-
import {
|
|
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
|
-
|
|
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
|
-
|
|
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:
|
|
322
|
+
requestBody: constructVirtualValuesForRequest(values),
|
|
323
323
|
id: virtualId
|
|
324
324
|
};
|
|
325
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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-
|
|
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":"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"}
|
|
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
|
|
2
|
-
import { APP_RIBBON_SPACE, FluentIcon, LayoutUnit, NodeActionTriggerEnums, TreeViewModeEnums, UnityFluentIcon,
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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-
|
|
1555
|
+
//# sourceMappingURL=WorkflowContainer-ClPvY2mG.js.map
|