udp-react-enterprise-component-library 25.1.0-beta.9 → 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 (64) 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 +1528 -2114
  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 +0 -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/tsconfig.tsbuildinfo +1 -1
  49. package/dist/types/udp/pages/UdpMaintenanceConfigPage.d.ts +2 -1
  50. package/dist/useAxiosGet-Dh5pVURP.js +144 -0
  51. package/dist/useAxiosGet-Dh5pVURP.js.map +1 -0
  52. package/dist/useAxiosMutate-DlG255x9.js +43 -0
  53. package/dist/useAxiosMutate-DlG255x9.js.map +1 -0
  54. package/package.json +2 -2
  55. package/dist/AmbientGridTemplate-BqlMt5Su.js.map +0 -1
  56. package/dist/EnvironmentRibbon-DaDmKAPO.js.map +0 -1
  57. package/dist/MyExportsPage-CkzQ0MRq.js +0 -8
  58. package/dist/PageContainer-k8KCfGsM.js.map +0 -1
  59. package/dist/PageNotFoundRoute-BbBtA9Cz.js +0 -3
  60. package/dist/PasswordResetRedirect-tUV2yEkH.js +0 -3
  61. package/dist/SideSheet-DUsxG1FN.js.map +0 -1
  62. package/dist/UdpPublicForm-Cvw5tOHe.js +0 -4
  63. package/dist/WorkflowContainer-Q8gtuaB7.js +0 -9
  64. package/dist/types/maintenanceEngine/crudBrowser/CrudTableActionRender.d.ts +0 -3
@@ -1 +1 @@
1
- {"version":3,"file":"WorkflowContainer-DrqzuQtU.js","names":["useStyles","value","useStyles","other","useStyles","tree","expanded","useWorkflowStore: () => WorkflowState","useStyles","useStyles","makeStyles","LinearProgress","MuiLinearProgress","useStyles","makeStyles","CircularProgress","MuiCircularProgress","useStyles","apiMutate","user","LinearProgress","CircularProgress","useStyles","useStyles","useStyles"],"sources":["../src/UI/inputs/textField/FluentTextFieldAutoComplete.jsx","../src/utilities/input/DateUtilities.js","../src/workflow/menus/WorkflowTreeMenuItem.jsx","../src/workflow/menus/WorkflowTreeMenu.jsx","../src/enums/workflowEnums.ts","../src/utilities/workflow/workflowUtilities.js","../src/stores/workflowStore.ts","../src/workflow/components/WorkflowTaskFlow.jsx","../src/UI/loading/LinearProgress.jsx","../src/UI/loading/CircularProgress.jsx","../src/workflow/WorkflowUiInterruptContent.jsx","../src/UI/components/dataDisplay/SmsDisplay.jsx","../src/UI/components/dataDisplay/EmailDisplay.jsx","../src/workflow/WorkflowContent.jsx","../src/hooks/useUpdateSearchParams.js","../src/workflow/WorkflowContainer.jsx"],"sourcesContent":["/* eslint-disable no-use-before-define */\nimport React, { useCallback, useState } from 'react';\nimport { TextField, makeStyles, Popper } from '@material-ui/core';\nimport Autocomplete from '@material-ui/lab/Autocomplete';\nimport clsx from 'clsx';\n\nconst useStyles = makeStyles((theme) => ({\n formTextInput: {\n fontSize: 14\n },\n labelRoot: {\n fontSize: 14\n }\n}));\n\nconst AutoCompletePopper = (props) => {\n return <Popper {...props} placement='bottom-start' />;\n};\n\nexport const FluentTextFieldAutoComplete = (props) => {\n const {\n label,\n placeholder,\n options,\n textFieldProps,\n disabled,\n onChange: onChangeProp,\n value,\n optionKey,\n additionalOnChangeAction,\n classes: classProps,\n variant = 'outlined',\n inputProps,\n inputPropClasses,\n customPopper,\n disableClearable = false,\n defaultValue,\n additionalOptionKey,\n isMultiple = false,\n limitTags,\n renderTags,\n optionLabelDisplayFunction = (option) => option,\n groupBy = null,\n size = 'medium',\n id,\n udprecordid,\n freeSolo = false,\n formatUserInputValue,\n ...other\n } = props;\n\n const classes = useStyles();\n const { autocompleteRoot } = classProps || {};\n const [inputValue, setInputValue] = useState('');\n\n const onChange = useCallback(\n (e, value) => {\n if (additionalOnChangeAction) {\n additionalOnChangeAction(value);\n }\n return onChangeProp?.(value);\n },\n [onChangeProp, additionalOnChangeAction]\n );\n\n const handleInputChange = useCallback((e, newInputValue) => {\n setInputValue(newInputValue ?? '');\n }, []);\n\n const handleClose = useCallback(\n (event, reason) => {\n if (!freeSolo) return;\n if (isMultiple) return;\n\n if (value && typeof value === 'object') return;\n\n const raw = (inputValue || '').trim();\n if (!raw) return;\n\n if (\n reason === 'blur' ||\n reason === 'enter' ||\n reason === 'create-option'\n ) {\n const updatedValue = formatUserInputValue\n ? formatUserInputValue(raw)\n : raw;\n if (additionalOnChangeAction) additionalOnChangeAction(updatedValue);\n onChangeProp?.(updatedValue);\n }\n },\n [\n freeSolo,\n isMultiple,\n value,\n inputValue,\n formatUserInputValue,\n additionalOnChangeAction,\n onChangeProp\n ]\n );\n\n return (\n <Autocomplete\n id='autocomplete'\n multiple={isMultiple}\n limitTags={limitTags}\n disabled={disabled}\n options={options || []}\n getOptionLabel={(option) =>\n option &&\n (optionKey\n ? `${optionLabelDisplayFunction(option[optionKey])}${\n additionalOptionKey ? ` - (${option[additionalOptionKey]})` : ''\n }`\n : optionLabelDisplayFunction(option) || '')\n }\n getOptionSelected={(option, val) =>\n optionKey ? option[optionKey] === val[optionKey] : option === val\n }\n groupBy={groupBy}\n onChange={onChange}\n inputValue={inputValue}\n onInputChange={handleInputChange}\n onClose={handleClose}\n value={value || (isMultiple ? [] : null)}\n className={autocompleteRoot}\n classes={{\n root: classProps?.formControl\n }}\n PopperComponent={customPopper || AutoCompletePopper}\n disableClearable={disableClearable}\n defaultValue={defaultValue}\n size={size}\n renderInput={(params) => (\n <TextField\n {...textFieldProps}\n {...params}\n {...other}\n inputProps={{\n ...params.inputProps,\n id: id,\n udprecordid: udprecordid\n }}\n label={label}\n margin='dense'\n variant={variant}\n placeholder={placeholder}\n size='small'\n InputProps={{\n ...params.InputProps,\n ...inputProps,\n classes: {\n root: classProps?.inputPropRoot,\n input: clsx(classes.formTextInput, classProps?.inputPropInput)\n }\n }}\n InputLabelProps={{\n classes: {\n root: clsx(classes.labelRoot, classProps?.formLabelRoot)\n }\n }}\n />\n )}\n renderTags={renderTags}\n freeSolo={freeSolo}\n />\n );\n};\n","import { DateTime } from 'luxon';\n\nexport const formatDateToLocaleString = (isoDate, luxonFormat = '') => {\n return DateTime.fromISO(isoDate, { zone: 'utc' })\n .toLocal()\n .toLocaleString(luxonFormat);\n};\n\n// convert date into UTC date format\nexport const toUtcDate = (date) => {\n if (!date) {\n return null;\n }\n\n if (date.endsWith('Z')) {\n return new Date(date);\n } else {\n return new Date(date + 'Z');\n }\n};\n","import React, { useCallback } from 'react';\nimport {\n makeStyles,\n lighten,\n Typography,\n CircularProgress,\n darken,\n useTheme,\n Tooltip\n} from '@material-ui/core';\nimport TreeItem from '@material-ui/lab/TreeItem';\nimport { getIconFromName } from '../../utilities/tree/TreeUtilities';\nimport clsx from 'clsx';\nimport { UnityFluentIcon } from '../../utilities/UnityFluentIcon';\nimport { getUnityIconFromName } from '../../utilities/iconLibrary/UnityIconLibrary';\nimport { useDrag, useDrop } from 'react-dnd';\nimport {\n NodeActionTriggerEnums,\n TreeViewModeEnums\n} from '../../enums/unitySystemEnums.ts';\nimport { AggregateChip } from '../../UI/utilityDisplay/AggregateChip';\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n '&.Mui-selected > .MuiTreeItem-content': {\n backgroundColor:\n theme?.getThemeData()?.mode === 'dark'\n ? theme.palette.grey[700]\n : theme.palette.grey[300],\n borderRight: `4px solid ${theme.palette.primary.main}`\n },\n '&.Mui-selected > .MuiTreeItem-content .MuiTreeItem-label': {\n backgroundColor: 'transparent',\n paddingLeft: 0\n },\n '&.Mui-selected > .MuiTreeItem-content > .MuiCollapse-wrapperInner': {\n backgroundColor:\n theme?.getThemeData()?.mode !== 'dark' && theme.palette.grey[50]\n },\n '& .MuiTreeItem-content .MuiTreeItem-iconContainer': {\n display: (props) => (props.sidebarExpanded ? 'flex' : 'none')\n }\n },\n content: {\n backgroundColor: (props) =>\n theme?.getThemeData()?.mode !== 'dark' &&\n !props.sidebarExpanded &&\n props.conditionalIconName &&\n props.conditionalIconColor\n ? lighten(props.conditionalIconColor, 0.92)\n : ''\n },\n labelRoot: {\n display: 'flex',\n alignItems: 'center',\n marginLeft: (props) => (props.sidebarExpanded ? 0 : theme.spacing(1.5)),\n width: '100%'\n },\n labelContainer: {\n display: (props) => (!props.sidebarExpanded ? 'none' : ''),\n width: (props) =>\n props.treeViewMode === TreeViewModeEnums.Compact\n ? `calc(100% - ${theme.spacing(6.25)}px)`\n : `calc(100% - ${theme.spacing(7.75)}px)`\n },\n conditionalIconContainer: {\n display: 'inline-flex'\n },\n labelText: {\n fontSize: '0.75rem',\n fontWeight: 600,\n lineHeight: '1rem',\n letterSpacing: 0.1\n },\n captionText: {\n marginLeft: (props) =>\n props.treeViewMode === TreeViewModeEnums.Compact ? theme.spacing(1) : '',\n fontSize: '0.65rem',\n fontWeight: 400,\n lineHeight: 1,\n letterSpacing: 0.4\n },\n labelOverflow: {\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n marginTop: `-${theme.spacing(0.25)}px`\n },\n group: {\n width: '100%',\n '& .MuiTreeItem-group': {\n marginLeft: 0\n },\n '& .MuiTreeItem-content': {\n paddingLeft: (props) =>\n props.sidebarExpanded ? (props.depth || 1) * theme.spacing(1) : 0,\n borderRight: (props) =>\n props.showRightBorderColor\n ? `4px solid ${theme.palette.primary.main}`\n : '',\n borderBottom: (props) =>\n props.treeViewMode === TreeViewModeEnums.Compact\n ? `1px solid ${theme.palette.grey[200]}`\n : ''\n },\n '& .MuiTreeItem-content .MuiTreeItem-label': {\n paddingLeft: 0,\n width: (props) =>\n props.sidebarExpanded && `calc(100% - ${theme.spacing(2.5)}px)`\n },\n '& .MuiTreeItem-content .MuiTreeItem-iconContainer span': {\n display: (props) => (props.hideExpansion ? 'none' : '')\n },\n '& .MuiCollapse-wrapperInner': {\n backgroundColor: (props) =>\n theme?.getThemeData()?.mode !== 'dark' && props.isSelectedNode\n ? theme.palette.grey[50]\n : ''\n }\n },\n iconContainer: {\n display: 'flex',\n // alignItems: 'center',\n justifyContent: 'center',\n // borderRadius: 50,\n marginTop: (props) =>\n props.treeViewMode === TreeViewModeEnums.Compact\n ? theme.spacing(0.25)\n : theme.spacing(0.5),\n marginBottom: (props) =>\n props.treeViewMode === TreeViewModeEnums.Compact\n ? theme.spacing(0.25)\n : theme.spacing(0.5),\n marginRight: theme.spacing(1),\n width: (props) =>\n props.treeViewMode === TreeViewModeEnums.Compact\n ? theme.spacing(3)\n : theme.spacing(4),\n height: (props) =>\n props.treeViewMode === TreeViewModeEnums.Compact\n ? theme.spacing(3)\n : theme.spacing(4)\n // border: (props) =>\n // props.iconColor\n // ? `1px solid ${darken(props.iconColor, 0.1)}`\n // : `1px solid ${theme.palette.secondary.main}`,\n // backgroundColor: '#ffffff'\n }\n}));\n\nexport const WorkflowTreeMenuItem = (props) => {\n const {\n parentId,\n nodeId,\n iconName,\n iconType,\n conditionalIconName,\n conditionalIconType,\n conditionalIconColor,\n label,\n iconColor,\n onNodeSelect,\n isSelectedNode,\n subLabel,\n sidebarExpanded,\n isLastNode,\n loading,\n node,\n onDropNode,\n treeViewMode,\n menuIndex,\n aggregateThresholdId,\n ...other\n } = props;\n const classes = useStyles(props);\n const theme = useTheme();\n\n const [{ isDragging }, dragRef] = useDrag({\n type: 'BaseTreeMenuItem',\n item: { ...node, sourceNodeMenuIndex: menuIndex },\n collect: (monitor) => ({\n isDragging: monitor.isDragging()\n })\n });\n\n const handleOnDrop = useCallback(\n (sourceNode, monitor) => {\n if (!monitor.didDrop()) {\n if (onDropNode) {\n const { sourceNodeMenuIndex, ...other } = sourceNode;\n onDropNode({ ...other }, node, sourceNodeMenuIndex, menuIndex);\n }\n }\n },\n [onDropNode, node, menuIndex]\n );\n\n const [{ canDrop, isOver }, dropRef] = useDrop(\n () => ({\n accept: ['BaseTreeMenuItem'],\n drop: (sourceNode, monitor) => {\n // condition to only handle first drop\n handleOnDrop(sourceNode, monitor);\n },\n canDrop: (sourceNode) => checkCanDrop(sourceNode),\n collect: (monitor) => ({\n isOver: monitor.isOver(),\n canDrop: !!monitor.canDrop()\n })\n }),\n [handleOnDrop]\n );\n\n const checkCanDrop = useCallback(\n (sourceNode) => {\n if (sourceNode) {\n const onDropActions = node?.properties?.nodeActions?.filter(\n (na) => na?.triggerType === NodeActionTriggerEnums.On_Node_Drop\n );\n if (!onDropActions) {\n return false;\n }\n const nodeDragEntities = onDropActions?.map(\n (action) => action?.dragEntityName\n );\n return nodeDragEntities.includes(\n sourceNode?.properties?.catalogReturnObject\n );\n }\n },\n [node]\n );\n\n const handleOnLabelClick = useCallback(\n (e) => {\n e.preventDefault();\n onNodeSelect(e, nodeId);\n },\n [onNodeSelect, nodeId]\n );\n\n return (\n <TreeItem\n className={classes.group}\n key={nodeId}\n nodeId={nodeId}\n label={\n <div ref={dropRef}>\n <Tooltip title={sidebarExpanded ? '' : label}>\n <div\n ref={(node?.properties?.isDraggable && dragRef) || null}\n style={{ opacity: isDragging ? 0.5 : 1 }}\n >\n {loading ? (\n <CircularProgress size={12} />\n ) : (\n <div\n id={\n 'udpRecord-BaseTreeMenuItem-' + label?.replace(/\\s+/g, '')\n }\n udprecordid={\n 'udpRecord-BaseTreeMenuItem-' + label?.replace(/\\s+/g, '')\n }\n className={classes.labelRoot}\n style={{\n fontWeight: isSelectedNode ? 'bold' : ''\n }}\n >\n {iconName && (\n <div className={classes.iconContainer}>\n <UnityFluentIcon\n size={\n treeViewMode === TreeViewModeEnums.Compact\n ? 'small'\n : 'large'\n }\n color={iconColor}\n type={iconType}\n icon={\n iconType === 'unity'\n ? getUnityIconFromName(iconName)\n : getIconFromName(iconName)\n }\n style={{\n color: iconColor\n ? darken(iconColor, 0.1)\n : theme.palette.secondary.main\n }}\n />\n </div>\n )}\n <div className={classes.labelContainer}>\n <Typography\n variant='subtitle2'\n className={clsx(classes.labelText, classes.labelOverflow)}\n >\n {label}\n {subLabel &&\n treeViewMode === TreeViewModeEnums.Compact && (\n <Typography\n variant='caption'\n className={clsx(\n classes.captionText,\n classes.labelOverflow\n )}\n >\n {subLabel}\n </Typography>\n )}\n </Typography>\n {subLabel && treeViewMode === TreeViewModeEnums.Classic && (\n <div className={classes.labelOverflow}>\n <Typography\n variant='caption'\n className={clsx(classes.captionText)}\n >\n {subLabel}\n </Typography>\n </div>\n )}\n </div>\n <AggregateChip aggregateThresholdId={aggregateThresholdId} />\n {conditionalIconName && sidebarExpanded && (\n <div className={classes.conditionalIconContainer}>\n <UnityFluentIcon\n size={\n treeViewMode === TreeViewModeEnums.Compact\n ? 'small'\n : 'default'\n }\n color={conditionalIconColor}\n type={conditionalIconType}\n icon={\n conditionalIconType === 'unity'\n ? getUnityIconFromName(conditionalIconName)\n : getIconFromName(conditionalIconName)\n }\n style={{\n color: conditionalIconColor\n }}\n />\n </div>\n )}\n </div>\n )}\n </div>\n </Tooltip>\n </div>\n }\n onLabelClick={handleOnLabelClick}\n classes={{ root: classes.root, content: classes.content }}\n {...other}\n />\n );\n};\n","import React, { useCallback, useState, useEffect } from 'react';\nimport {\n makeStyles,\n useTheme,\n lighten,\n CircularProgress,\n Typography\n} from '@material-ui/core';\nimport TreeView from '@material-ui/lab/TreeView';\nimport { WorkflowTreeMenuItem } from './WorkflowTreeMenuItem';\nimport {\n searchTree,\n findAllParentIds,\n getNodeIdForRightBorder\n} from '../../utilities/tree/TreeUtilities';\nimport { FluentIcon } from '../../utilities/FluentIcon';\nimport { CaretUpSolid8Icon, CaretDownSolid8Icon } from '@fluentui/react-icons';\nimport { cloneDeep } from 'lodash';\nimport { TreeViewModeEnums } from '../../enums/unitySystemEnums.ts';\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n marginBottom: theme.spacing(1.75),\n borderTop: (props) =>\n props.treeViewMode === TreeViewModeEnums.Compact\n ? `1px solid ${theme.palette.grey[200]}`\n : ''\n },\n noChildrenContainer: {\n borderBottom: (props) =>\n props.treeViewMode === TreeViewModeEnums.Compact\n ? `1px solid ${theme.palette.grey[200]}`\n : ''\n }\n}));\n\nexport const WorkflowTreeMenu = (props) => {\n const {\n menuItems,\n onSelectNode,\n onDropNode,\n menuIndex,\n selectedNodeId,\n selectedNodeParentId,\n sidebarExpanded,\n treeViewMode,\n childrenKey = 'children'\n } = props;\n const [expanded, setExpanded] = useState(null);\n const [isCurrentActiveTree, setIsCurrentActiveTree] = useState(false);\n const [selectedNodeIsHidden, setSelectedNodeIsHidden] = useState(false);\n const [tree, setTree] = useState(menuItems);\n const theme = useTheme();\n const classes = useStyles(props);\n\n const handleSelectedNode = useCallback(\n (e, value) => {\n const selectedNode = searchTree(tree, value);\n if (onSelectNode) {\n onSelectNode(selectedNode, menuIndex);\n setSelectedNodeIsHidden(false);\n }\n },\n [tree, menuIndex, onSelectNode]\n );\n\n const renderTree = useCallback(\n (node, depth = 1) => {\n let label = node.properties?.nodeLabel || node.properties?.name;\n let subLabel = node.properties?.nodeSubLabel;\n let iconName = node.properties?.defaultIcon?.name;\n let iconType = node.properties?.defaultIcon?.type;\n let conditionalIconName = node.properties?.conditionalIcon?.name || '';\n let conditionalIconType = node.properties?.conditionalIcon?.name\n ? node.properties.conditionalIcon?.type\n : '';\n let conditionalIconColor = node.properties?.conditionalIcon?.name\n ? node.properties?.conditionalIcon?.color\n : '';\n let nodeId = node.id;\n let iconColor = node.properties?.conditionalIconName\n ? node.properties?.conditionalIconColor\n : node.properties?.defaultIcon?.color?.hex;\n let aggregateThresholdId = node.properties?.aggregateThresholdId || '';\n\n if (node.isGroupNode) {\n label = node.properties?.label;\n subLabel = node.properties?.subLabel;\n iconName = node.properties?.icon?.name;\n iconType = node.properties?.icon?.type;\n iconColor = node.properties?.icon?.color?.hex;\n }\n\n return (\n <WorkflowTreeMenuItem\n key={nodeId}\n nodeId={nodeId}\n label={label}\n subLabel={subLabel}\n iconName={iconName}\n iconType={iconType}\n conditionalIconName={conditionalIconName}\n conditionalIconType={conditionalIconType}\n conditionalIconColor={conditionalIconColor}\n parentId={node.parentId}\n iconColor={iconColor}\n onNodeSelect={handleSelectedNode}\n selectedNodeId={selectedNodeId}\n isSelectedNode={selectedNodeId === node.id}\n showRightBorderColor={\n selectedNodeIsHidden &&\n isCurrentActiveTree &&\n getNodeIdForRightBorder(expanded, tree, selectedNodeParentId) ===\n node.id\n }\n isCurrentActiveTree={isCurrentActiveTree}\n sidebarExpanded={sidebarExpanded}\n depth={depth}\n hideExpansion={!!!node[childrenKey]?.length}\n node={node}\n onDropNode={onDropNode}\n treeViewMode={treeViewMode}\n menuIndex={menuIndex}\n aggregateThresholdId={aggregateThresholdId}\n >\n {node.properties?.lazyLoad &&\n !!!node[childrenKey]?.length &&\n !node.completedLoadingChildren && (\n <CircularProgress\n size={12}\n style={{ marginLeft: (depth || 1) * theme.spacing(1) }}\n />\n )}\n {node.properties?.lazyLoad &&\n !!!node[childrenKey]?.length &&\n node.completedLoadingChildren &&\n sidebarExpanded &&\n !node.errorRetrievingChildren && (\n <div className={classes.noChildrenContainer}>\n <Typography\n variant='caption'\n style={{\n marginLeft: (depth || 1) * theme.spacing(3),\n fontWeight: 400\n }}\n >\n No Children\n </Typography>\n </div>\n )}\n {node.properties?.lazyLoad &&\n node.completedLoadingChildren &&\n sidebarExpanded &&\n node.errorRetrievingChildren && (\n <div className={classes.noChildrenContainer}>\n <Typography\n variant='caption'\n style={{\n marginLeft: (depth || 1) * theme.spacing(3),\n fontWeight: 400\n }}\n >\n {`Error Retrieving ${\n !!node[childrenKey]?.length ? `Additional ` : ''\n }Children`}\n </Typography>\n </div>\n )}\n {Array.isArray(node[childrenKey])\n ? node[childrenKey].map((n, i) => renderTree(n, depth + 1))\n : null}\n </WorkflowTreeMenuItem>\n );\n },\n [\n handleSelectedNode,\n selectedNodeId,\n selectedNodeIsHidden,\n isCurrentActiveTree,\n sidebarExpanded,\n expanded,\n tree,\n selectedNodeParentId,\n theme,\n classes,\n onDropNode,\n treeViewMode,\n menuIndex,\n childrenKey\n ]\n );\n\n const handleNodeExpansion = useCallback(\n async (evt, nodeIds) => {\n const treeCopy = cloneDeep(tree);\n setExpanded(nodeIds);\n\n const parentNode = searchTree(treeCopy, selectedNodeParentId);\n const initialAllParentNodeIds = selectedNodeParentId\n ? [selectedNodeParentId]\n : [];\n const allParentNodeIds = findAllParentIds(\n treeCopy,\n parentNode,\n initialAllParentNodeIds\n );\n const selectedNodeShown = allParentNodeIds.every((id) =>\n nodeIds.includes(id)\n );\n if (\n isCurrentActiveTree &&\n allParentNodeIds.length &&\n !selectedNodeShown\n ) {\n setSelectedNodeIsHidden(true);\n } else {\n setSelectedNodeIsHidden(false);\n }\n },\n [isCurrentActiveTree, tree, selectedNodeParentId]\n );\n\n const getExpandedRecursively = useCallback(\n (tree) => {\n if (!tree) return [];\n return tree.reduce((expandedIds, item) => {\n if (item?.isExpanded) {\n expandedIds.push(item.id);\n }\n if (item && item[childrenKey]?.length) {\n expandedIds = expandedIds.concat(\n getExpandedRecursively(item[childrenKey])\n );\n }\n return expandedIds;\n }, []);\n },\n [childrenKey]\n );\n\n useEffect(() => {\n setTree(menuItems);\n }, [menuItems]);\n\n useEffect(() => {\n if (!tree) {\n return;\n }\n let expanded = [];\n if (tree?.isExpanded) {\n expanded.push(tree.id);\n }\n expanded = expanded.concat(getExpandedRecursively(tree[childrenKey]));\n setExpanded(expanded);\n }, [getExpandedRecursively, tree, childrenKey]);\n\n useEffect(() => {\n if (!!searchTree(tree, selectedNodeId)) {\n setIsCurrentActiveTree(true);\n } else {\n setIsCurrentActiveTree(false);\n }\n }, [tree, selectedNodeId]);\n\n if (!expanded) {\n return null;\n }\n\n return (\n <TreeView\n key={tree}\n className={classes.root}\n defaultCollapseIcon={\n <FluentIcon\n size='small'\n component={CaretUpSolid8Icon}\n style={{\n color: lighten(theme.palette.primary.main, 0.5),\n width: theme.spacing(1.5),\n height: theme.spacing(1.5)\n }}\n />\n }\n expanded={expanded || []}\n onNodeToggle={handleNodeExpansion}\n defaultExpandIcon={\n <FluentIcon\n size='small'\n component={CaretDownSolid8Icon}\n style={{\n color: lighten(theme.palette.primary.main, 0.5),\n width: theme.spacing(1.5),\n height: theme.spacing(1.5)\n }}\n />\n }\n selected={selectedNodeId}\n >\n {tree && renderTree(tree)}\n </TreeView>\n );\n};\n","export enum UnitTypeEnums {\n Scope = 0,\n Sequence = 1,\n Group = 2,\n Fork = 3,\n Branch = 4,\n Retry = 5,\n Attempt = 6,\n Iterator = 7,\n Loop = 8,\n Break = 9,\n Block = 10,\n Adaptor = 11,\n Code = 12,\n Pause = 13,\n Fault = 14,\n Trace = 15,\n Catcher = 16,\n Thrower = 17,\n Plan = 18,\n Task = 19,\n Sprint = 20,\n Auth = 21,\n Rest = 22,\n Fuse = 23,\n Mail = 24,\n Sms = 25,\n Publisher = 26,\n Fiber = 27,\n Mapper = 28,\n Section = 29,\n Scene = 30,\n Placeholder = 100\n}\n\nexport enum UnitStateType {\n Initial = 0,\n Started = 1,\n Completed = 2,\n Cancelled = 3,\n Failed = 4\n}\n","import { UnitStateType, UnitTypeEnums } from '../../enums/workflowEnums';\nimport { DateTime } from 'luxon';\nimport { formatDateToLocaleString } from '../input/DateUtilities';\n\nexport const getWorkflowTaskIconByActionType = (type) => {\n let iconName = 'ClipboardListIcon';\n switch (type) {\n case UnitTypeEnums.Rest:\n iconName = 'CloudImportExportIcon';\n break;\n case UnitTypeEnums.Sms:\n iconName = 'MessageFillIcon';\n break;\n case UnitTypeEnums.Mail:\n iconName = 'MailSolidIcon';\n break;\n case UnitTypeEnums.Scene:\n iconName = 'ReleaseGateIcon';\n break;\n default:\n break;\n }\n return iconName;\n};\n\nexport const getWorkflowTaskStateIconByStateType = (type) => {\n let iconName = '';\n switch (type) {\n case UnitStateType.Initial:\n iconName = 'StopwatchIcon';\n break;\n case UnitStateType.Started:\n iconName = 'ProgressLoopOuterIcon';\n break;\n case UnitStateType.Completed:\n iconName = 'CheckMarkIcon';\n break;\n case UnitStateType.Cancelled:\n iconName = 'CancelIcon';\n break;\n case UnitStateType.Failed:\n default:\n iconName = 'ErrorBadgeIcon';\n break;\n }\n return iconName;\n};\n\nexport const getWorkflowTaskStateIconColorByStateType = (type) => {\n let color = '';\n switch (type) {\n case UnitStateType.Initial:\n color = '#ffa726';\n break;\n case UnitStateType.Started:\n color = '#29b6f6';\n break;\n case UnitStateType.Completed:\n color = '#66bb6a';\n break;\n case UnitStateType.Cancelled:\n color = '#f44336';\n break;\n case UnitStateType.Failed:\n default:\n color = '#f44336';\n break;\n }\n return color;\n};\n\nconst SELECTABLE_NODE_TYPES = [\n UnitTypeEnums.Sms,\n UnitTypeEnums.Mail,\n UnitTypeEnums.Scene\n];\n\nexport const transformWorkflowPlayTree = (node) => {\n if (!node) return null;\n const label = node.name || '';\n const expanded = 'expanded';\n const startedAt = node.startedAt\n ? formatDateToLocaleString(node.startedAt, DateTime.DATETIME_SHORT)\n : null;\n\n const updatedNode = {\n id: node.id,\n parentId: node.parentId,\n isExpanded: expanded,\n isSelectable: !!node.type && SELECTABLE_NODE_TYPES.includes(node.type),\n properties: {\n defaultIcon: {\n type: '',\n name: getWorkflowTaskIconByActionType(node.type),\n color: ''\n },\n conditionalIcon: {\n type: '',\n name: !!node.type && getWorkflowTaskStateIconByStateType(node.state),\n color:\n !!node.type && getWorkflowTaskStateIconColorByStateType(node.state)\n },\n nodeLabel: label,\n nodeSubLabel: node.parentId ? node.description : startedAt || '',\n state: node.state,\n type: node.type,\n interruptPages: node.interruptPages,\n playSceneId: node.playSceneId,\n startedAt: node.startedAt,\n endedAt: node.endedAt,\n dueDate: node.dueDate,\n variables: node.variables,\n sms:\n node.type === UnitTypeEnums.Sms\n ? {\n templateData: node.templateData,\n to: node.to,\n from: node.from,\n body: node.body\n }\n : null,\n email:\n node.type === UnitTypeEnums.Mail\n ? {\n templateData: node.templateData,\n to: node.to,\n from: node.from,\n subject: node.subject,\n text: node.text,\n html: node.html\n }\n : null\n },\n children: []\n };\n\n for (const child of node.children) {\n const updatedChild = transformWorkflowPlayTree(child);\n if (updatedChild) {\n updatedNode.children.push(updatedChild);\n }\n }\n\n return updatedNode;\n};\n\nexport const updateWorkflowPlayNodeState = (node, nodeId, nodeState) => {\n if (!node) return null;\n\n // Check if the current node matches the nodeId\n if (node.id === nodeId) {\n node.properties.state = nodeState;\n node.properties.defaultIcon = {\n type: '',\n name: getWorkflowTaskIconByActionType(node.properties.type),\n color: ''\n };\n node.properties.conditionalIcon = {\n type: '',\n name:\n !!node.properties.type &&\n getWorkflowTaskStateIconByStateType(nodeState),\n color:\n !!node.properties.type &&\n getWorkflowTaskStateIconColorByStateType(nodeState)\n };\n return node; // Return the updated node\n }\n\n // Recursively check and update children nodes if any\n if (node.children && node.children.length) {\n for (const child of node.children) {\n const updatedChild = updateWorkflowPlayNodeState(\n child,\n nodeId,\n nodeState\n );\n if (updatedChild) {\n return node; // Return the updated node\n }\n }\n }\n\n return null; // If no matching nodeId is found\n};\n","import { create } from 'zustand';\nimport { devtools } from 'zustand/middleware';\n\ninterface PageDataMap {\n [pageId: string]: Object | null | undefined;\n}\n\ninterface TaskDataMap {\n [taskId: string]: PageDataMap;\n}\n\ninterface WorkflowState {\n title: string | null | undefined;\n setWorkflowToolbarTitle: (title: string) => void;\n taskDataMap: TaskDataMap | null | undefined;\n updateTaskDataMap: (taskId: string, pageId: string, data: Object) => void;\n setTaskDataMap: (taskId: string, data: PageDataMap) => void;\n}\n\nexport const useWorkflowStore: () => WorkflowState = create<WorkflowState>()(\n devtools((set) => ({\n title: '',\n setWorkflowToolbarTitle: (title) => set((state) => ({ title: title })),\n taskDataMap: {},\n updateTaskDataMap: (taskId, pageId, data) =>\n set((state) => {\n const updatedTaskDataMap = { ...state.taskDataMap };\n if (updatedTaskDataMap[taskId]) {\n if (updatedTaskDataMap[taskId][pageId]) {\n updatedTaskDataMap[taskId][pageId] = data;\n } else {\n updatedTaskDataMap[taskId] = {\n [pageId]: data\n };\n }\n } else {\n updatedTaskDataMap[taskId] = {\n [pageId]: data\n };\n }\n return {\n taskDataMap: updatedTaskDataMap\n };\n }),\n setTaskDataMap: (taskId, data) =>\n set((state) => {\n const updatedTaskDataMap = { ...state.taskDataMap };\n updatedTaskDataMap[taskId] = data;\n return {\n taskDataMap: updatedTaskDataMap\n };\n })\n }))\n);\n","import React, { useCallback, useState } from 'react';\nimport {\n Stepper,\n Step,\n StepLabel,\n StepConnector,\n Typography,\n makeStyles,\n withStyles,\n lighten,\n Button\n} from '@material-ui/core';\nimport CheckCircleIcon from '@material-ui/icons/CheckCircle';\nimport RadioButtonUncheckedIcon from '@material-ui/icons/RadioButtonUnchecked';\nimport RadioButtonCheckedIcon from '@material-ui/icons/RadioButtonChecked';\nimport { FluentIcon } from '../../utilities/FluentIcon';\nimport { ChevronRightIcon, ChevronLeftIcon } from '@fluentui/react-icons';\nimport { formatDateToLocaleString } from '../../utilities/input/DateUtilities';\nimport { DateTime } from 'luxon';\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n display: 'flex'\n },\n taskInfoBlock: {\n backgroundColor: lighten(theme.palette.primary.main, 0.3),\n width: theme.spacing(25),\n color: theme.palette.common.white,\n padding: `${theme.spacing(0.5)}px ${theme.spacing(2.25)}px`\n },\n description: {\n textOverflow: 'ellipsis',\n overflow: 'hidden',\n whiteSpace: 'nowrap'\n },\n button: {\n backgroundColor: theme.palette.primary.main,\n color: theme.palette.common.white,\n borderRadius: 0,\n '&:hover': {\n backgroundColor: theme.palette.primary.dark\n },\n minWidth: theme.spacing(3)\n },\n stepperContainer: {\n width: '100%',\n padding: 0,\n marginTop: `-${theme.spacing(1.5)}px`,\n background: 'none'\n },\n stepIconRoot: {\n zIndex: 1,\n color: theme.palette.primary.main,\n width: theme.spacing(3),\n height: theme.spacing(3),\n display: 'flex',\n borderRadius: '50%',\n justifyContent: 'center',\n alignItems: 'center',\n '&.active': {\n backgroundColor: theme.palette.primary.main,\n color: theme.palette.common.white\n },\n '&.completed': {\n backgroundColor: theme.palette.common.white,\n color: theme.palette.success.main\n }\n },\n stepLabel: {\n '& > .MuiStepLabel-label': {\n marginTop: theme.spacing(0.5)\n }\n }\n}));\n\nconst ColorLibConnector = withStyles((theme) => ({\n connectorRoot: {\n top: 10,\n left: 'calc(-50% + 12px)',\n right: 'calc(50% + 12px)'\n },\n alternativeLabel: {\n left: 'calc(-50% + 12px)',\n right: 'calc(50% + 12px)'\n },\n active: {\n '& $line': {\n borderColor: theme.palette.primary.main\n }\n },\n completed: {\n '& $line': {\n borderColor: theme.palette.primary.main\n }\n },\n line: {\n borderTopWidth: 3,\n borderRadius: 1\n }\n}))(StepConnector);\n\nconst ColorlibStepIcon = (props) => {\n const { active, completed } = props;\n const classes = useStyles();\n const rootClass = `${classes.stepIconRoot} ${active ? 'active' : ''} ${\n completed ? 'completed' : ''\n }`;\n\n return (\n <div className={rootClass}>\n {completed ? (\n <CheckCircleIcon />\n ) : active ? (\n <RadioButtonCheckedIcon />\n ) : (\n <RadioButtonUncheckedIcon />\n )}\n </div>\n );\n};\n\nexport const WorkflowTaskFlow = (props) => {\n const { steps = [], handleClick = () => {}, task } = props;\n const classes = useStyles();\n const [activeStep, setActiveStep] = useState(0);\n\n const handleStepClick = (stepIndex) => {\n handleClick(stepIndex);\n setActiveStep(stepIndex);\n };\n\n const handleOnLeftButtonClick = useCallback(() => {\n if (activeStep > 0) {\n const newIndex = activeStep - 1;\n handleClick(newIndex);\n setActiveStep(newIndex);\n }\n }, [activeStep, handleClick]);\n\n const handleOnRightButtonClick = useCallback(() => {\n if (activeStep !== steps?.length - 1) {\n const newIndex = activeStep + 1;\n handleClick(newIndex);\n setActiveStep(newIndex);\n }\n }, [steps, activeStep, handleClick]);\n\n const getFormattedDueDate = useCallback((date) => {\n if (!date) {\n return '';\n }\n const shortDate = formatDateToLocaleString(date, DateTime.DATE_SHORT);\n return `Due ${shortDate}`;\n }, []);\n\n return (\n <div className={classes.root}>\n <div className={classes.taskInfoBlock}>\n <div className={classes.description}>\n <Typography variant='caption'>\n {task?.properties?.nodeLabel || ''}\n </Typography>\n </div>\n <div className={classes.description}>\n <Typography variant='caption' style={{ fontWeight: 500 }}>\n {getFormattedDueDate(task?.properties?.dueDate)}\n </Typography>\n </div>\n </div>\n <Button className={classes.button} onClick={handleOnLeftButtonClick}>\n <FluentIcon component={ChevronLeftIcon} />\n </Button>\n <Stepper\n alternativeLabel\n activeStep={activeStep}\n connector={<ColorLibConnector />}\n className={classes.stepperContainer}\n >\n {steps.map((step, index) => (\n <Step key={step.label} onClick={() => handleStepClick(index)}>\n <StepLabel\n classes={{ labelContainer: classes.stepLabel }}\n StepIconComponent={ColorlibStepIcon}\n >\n <Typography variant='caption'>{step.label}</Typography>\n </StepLabel>\n </Step>\n ))}\n </Stepper>\n <Button className={classes.button} onClick={handleOnRightButtonClick}>\n <FluentIcon component={ChevronRightIcon} />\n </Button>\n </div>\n );\n};\n","import React from 'react';\nimport { LinearProgress as MuiLinearProgress } from '@material-ui/core';\nimport { makeStyles } from '@material-ui/core/styles';\nimport clsx from 'clsx';\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n backgroundColor: theme.palette.grey[300]\n },\n barColorPrimary: {\n backgroundColor: theme.palette.primary.main\n },\n barColorSecondary: {\n backgroundColor: theme.palette.secondary.main\n },\n barColorSuccess: {\n backgroundColor: theme.palette.success.main\n },\n barColorError: {\n backgroundColor: theme.palette.error.main\n },\n barColorWarning: {\n backgroundColor: theme.palette.warning.main\n },\n barColorInfo: {\n backgroundColor: theme.palette.info.main\n },\n // Custom bar color class\n customColorBar: (props) => ({\n backgroundColor: props.color\n })\n}));\n\nexport const LinearProgress = (props) => {\n const {\n variant = 'indeterminate',\n value,\n color = 'primary',\n ...otherProps\n } = props;\n\n const isPredefinedColor = [\n 'primary',\n 'secondary',\n 'success',\n 'error',\n 'warning',\n 'info'\n ].includes(color);\n const classes = useStyles({ color });\n\n return (\n <MuiLinearProgress\n {...otherProps}\n variant={variant}\n value={value}\n classes={{\n root: classes.root,\n bar: clsx({\n [classes.barColorPrimary]: color === 'primary',\n [classes.barColorSecondary]: color === 'secondary',\n [classes.barColorSuccess]: color === 'success',\n [classes.barColorError]: color === 'error',\n [classes.barColorWarning]: color === 'warning',\n [classes.barColorInfo]: color === 'info',\n [classes.customColorBar]: !isPredefinedColor\n })\n }}\n />\n );\n};\n","import React from 'react';\nimport { CircularProgress as MuiCircularProgress } from '@material-ui/core';\nimport { makeStyles } from '@material-ui/core/styles';\nimport clsx from 'clsx';\n\nconst useStyles = makeStyles(theme => ({\n circleColorPrimary: {\n color: theme.palette.primary.main,\n },\n circleColorSecondary: {\n color: theme.palette.secondary.main,\n },\n circleColorSuccess: {\n color: theme.palette.success.main,\n },\n circleColorError: {\n color: theme.palette.error.main,\n },\n circleColorWarning: {\n color: theme.palette.warning.main,\n },\n circleColorInfo: {\n color: theme.palette.info.main,\n },\n // Custom circle color class\n customColorCircle: props => ({\n backgroundColor: props.color,\n }),\n}));\n\nexport const CircularProgress = props => {\n const {\n variant = 'indeterminate',\n value,\n color = 'primary',\n ...otherProps\n } = props;\n\n const isPredefinedColor = [\n 'primary',\n 'secondary',\n 'success',\n 'error',\n 'warning',\n 'info',\n ].includes(color);\n const classes = useStyles({ color });\n\n return (\n <MuiCircularProgress\n {...otherProps}\n variant={variant}\n value={value}\n classes={{\n root: classes.root,\n circle: clsx({\n [classes.circleColorPrimary]: color === 'primary',\n [classes.circleColorSecondary]: color === 'secondary',\n [classes.circleColorSuccess]: color === 'success',\n [classes.circleColorError]: color === 'error',\n [classes.circleColorWarning]: color === 'warning',\n [classes.circleColorInfo]: color === 'info',\n [classes.customColorCircle]: !isPredefinedColor,\n }),\n }}\n />\n );\n};\n","import React, {\n useCallback,\n useEffect,\n useMemo,\n useState,\n useRef\n} from 'react';\nimport { useAxiosGet } from '../utilities/useAxiosGet';\nimport { makeStyles } from '@material-ui/core';\nimport { PageContainer } from '../page/PageContainer';\nimport { useUser } from '../utilities/auth/useUser';\nimport { PrimaryActionHeader } from '../UI/utilityDisplay/utilityHeader/PrimaryActionHeader';\nimport { Card } from '@material-ui/core';\nimport { useWorkflowStore } from '../stores/workflowStore';\nimport { apiMutate } from '../utilities/useAxiosMutate';\nimport { WorkflowTaskFlow } from './components/WorkflowTaskFlow';\nimport { orderBy } from 'lodash';\nimport { UnitStateType } from '../enums/workflowEnums';\nimport { LinearProgress } from '../UI/loading/LinearProgress';\nimport { FluentTextFieldAutoComplete } from '../UI/inputs/textField/FluentTextFieldAutoComplete';\nimport { useTranslation } from 'react-i18next';\nimport { CancelIcon, ForwardIcon } from '@fluentui/react-icons';\nimport { SideSheet } from '../UI/surfaces/SideSheet';\nimport { Field, Form } from '../utilities/form';\nimport { cloneDeep } from 'lodash';\nimport { CircularProgress } from '../UI/loading/CircularProgress';\nimport { ConfigService } from 'udp-react-stencil-component-library';\n\nconst useStyles = makeStyles((theme) => ({\n root: {},\n loadingContent: {\n flex: 1,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n height: 'calc(100vh - 160px)'\n }\n}));\n\nexport const WorkflowUiInterruptContent = (props) => {\n const {\n selectedNode,\n workflow,\n reloadWorkflow,\n users,\n groups,\n handleClose,\n inquiryPageParams = {}\n } = props;\n const classes = useStyles();\n const [selectedPageId, setSelectedPageId] = useState('');\n const [currentWorkflowStep, setCurrentWorkflowStep] = useState(0);\n const [loading, setLoading] = useState(false);\n const [loadingTaskData, setLoadingTaskData] = useState(true);\n const [reassignSidesheetOpen, setReassignSidesheetOpen] = useState(false);\n const [reassigningAssignee, setReassigningAssignee] = useState(false);\n const [workflowPageData, setWorkflowPageData] = useState(null);\n const [orderedPageData, setOrderedPageData] = useState([]);\n const user = useUser();\n const taskDataMap = useWorkflowStore((state) => state.taskDataMap);\n const setTaskDataMap = useWorkflowStore((state) => state.setTaskDataMap);\n const { t } = useTranslation();\n const formRef = useRef(null);\n\n const [{ data: pageData, loading: pageLoading, error: pageError }] =\n useAxiosGet(\n ConfigService.tenantV1ApiUrl,\n `page/${selectedPageId}`,\n {},\n !!!selectedPageId,\n false\n );\n\n const [\n { data: playScene, loading: playSceneLoading, error: playSceneError },\n fetchPlayScene\n ] = useAxiosGet(\n ConfigService.maestroV1ApiUrl,\n `maestro/play/scene/${\n selectedNode?.properties?.playSceneId || null\n }?includeData=true`,\n {},\n !!!selectedNode?.properties?.playSceneId,\n false\n );\n\n const updatePlaySceneData = useCallback(\n async (data = '') =>\n apiMutate(\n ConfigService.maestroV1ApiUrl,\n `maestro/play/scene/${\n selectedNode?.properties?.playSceneId || null\n }/data`,\n {\n method: 'put'\n },\n { data: data }\n ),\n [selectedNode]\n );\n\n const updatePlaySceneState = useCallback(\n async (data = {}, sceneState) =>\n apiMutate(\n ConfigService.maestroV1ApiUrl,\n `maestro/play/scene/${\n selectedNode?.properties?.playSceneId || null\n }/${sceneState}`,\n {\n method: 'put'\n },\n { data: data }\n ),\n [selectedNode]\n );\n\n const updatePlaySceneAssignee = useCallback(\n async (data = '') =>\n apiMutate(\n ConfigService.maestroV1ApiUrl,\n `maestro/play/scene/${\n selectedNode?.properties?.playSceneId || null\n }/assignee`,\n {\n method: 'put'\n },\n { data: data }\n ),\n [selectedNode]\n );\n\n const closeReassignmentSheet = useCallback(() => {\n setReassignSidesheetOpen(false);\n }, []);\n\n const workflowTaskSteps = useMemo(() => {\n if (!selectedNode?.properties?.interruptPages) {\n return [];\n }\n const orderedInterruptPages = orderBy(\n selectedNode.properties.interruptPages,\n ['sequenceNo'],\n ['asc']\n );\n const steps = orderedInterruptPages.reduce((list, ip) => {\n const step = {\n label: ip.displayName || ip.page?.name,\n pageId: ip.page?.pageId,\n requiredFieldMapping: ip.requiredFieldMapping\n };\n list.push(step);\n return list;\n }, []);\n return steps;\n }, [selectedNode]);\n\n const assigneeOptions = useMemo(() => {\n const formattedUsers =\n users?.reduce((list, user) => {\n list.push({\n id: user?.unityId || '',\n name: `${user?.displayName} - (User)` || ''\n });\n return list;\n }, []) || [];\n const formattedGroups =\n groups.reduce((list, group) => {\n list.push({\n id: group?.groupId || '',\n name: `${group?.name} - (Group)` || ''\n });\n return list;\n }, []) || [];\n const options = formattedUsers.concat(formattedGroups);\n return options;\n }, [users, groups]);\n\n const saveCurrentWorkflowData = useCallback(async () => {\n let playSceneData = null;\n if (selectedNode?.properties?.playSceneId) {\n playSceneData = taskDataMap[selectedNode.properties.playSceneId];\n }\n if (playSceneData) {\n await updatePlaySceneData({\n data: JSON.stringify(playSceneData)\n });\n await fetchPlayScene();\n }\n }, [taskDataMap, fetchPlayScene, updatePlaySceneData, selectedNode]);\n\n const updateWorkflowPageData = useCallback(\n async (data, pageId) => {\n if (!selectedNode?.properties?.playSceneId || !pageId) {\n console.warn('No TaskId or PageId availble to save Workflow Page Data');\n return;\n }\n if (\n selectedNode?.properties?.state === UnitStateType.Initial ||\n selectedNode?.properties?.state === UnitStateType.Completed ||\n selectedNode?.properties?.state === UnitStateType.Cancelled ||\n selectedNode?.properties?.state === UnitStateType.Failed\n ) {\n return;\n }\n\n let playSceneData = null;\n if (selectedNode?.properties?.playSceneId) {\n playSceneData = taskDataMap[selectedNode.properties.playSceneId];\n if (playSceneData) {\n playSceneData[pageId] = data;\n }\n }\n if (playSceneData) {\n await updatePlaySceneData({\n data: JSON.stringify(playSceneData)\n });\n await fetchPlayScene();\n }\n },\n [selectedNode, fetchPlayScene, taskDataMap, updatePlaySceneData]\n );\n\n const handleTaskChange = useCallback(async (step) => {\n setCurrentWorkflowStep(step);\n }, []);\n\n const handleTaskSubmit = useCallback(async () => {\n setLoading(true);\n await saveCurrentWorkflowData();\n await updatePlaySceneState('', 2);\n await reloadWorkflow();\n setLoading(false);\n }, [updatePlaySceneState, reloadWorkflow, saveCurrentWorkflowData]);\n\n const secondaryButtons = useMemo(() => {\n const buttons = [];\n if (handleClose) {\n buttons.push({\n label: t('Close'),\n component: CancelIcon,\n click: () => handleClose()\n });\n }\n if (selectedNode?.properties?.state !== UnitStateType.Started) {\n return buttons;\n }\n buttons.push({\n label: t('Reassign'),\n component: ForwardIcon,\n click: () => setReassignSidesheetOpen(true)\n });\n return buttons;\n }, [t, selectedNode, handleClose]);\n\n const handleReassignment = useCallback(() => {\n formRef?.current.form.submit();\n }, []);\n\n const reassignTask = useCallback(\n async (values) => {\n setReassigningAssignee(true);\n await updatePlaySceneAssignee({\n data: values?.assignee?.id || ''\n });\n await fetchPlayScene();\n setReassigningAssignee(false);\n closeReassignmentSheet();\n },\n [updatePlaySceneAssignee, fetchPlayScene, closeReassignmentSheet]\n );\n\n const requiredFieldMapping = useMemo(() => {\n const step = workflowTaskSteps?.find(\n (wts) => wts.pageId === pageData?.pageId\n );\n let fieldMapping = step?.requiredFieldMapping\n ? cloneDeep(step.requiredFieldMapping)\n : {};\n const workflowVariables = selectedNode?.properties?.variables || null;\n if (!!fieldMapping && !!workflowVariables) {\n Object.keys(fieldMapping)?.forEach((rfmKey) => {\n const requiredField = fieldMapping[rfmKey];\n if (!!requiredField?.value) {\n if (requiredField?.type === 'workflowVariable') {\n let matchedVariable = false;\n Object.keys(workflowVariables).forEach((key) => {\n if (requiredField.value === key) {\n requiredField.value = workflowVariables[key] || '';\n matchedVariable = true;\n return;\n }\n });\n if (!matchedVariable) {\n requiredField.value = null;\n }\n }\n }\n });\n }\n return fieldMapping || {};\n }, [pageData?.pageId, selectedNode, workflowTaskSteps]);\n\n const pageWidgetParams = useMemo(() => {\n const requiredFieldsMap = Object.keys(requiredFieldMapping).reduce(\n (fieldMap, key) => {\n fieldMap[key] = requiredFieldMapping[key]?.value || '';\n return fieldMap;\n },\n {}\n );\n\n // have to pass in unimplemented parameters because certain pages\n // are used in action sheets/screens\n return {\n setSideSheetWidth: () => {\n console.warn('setSideSheetWidth Not implemented');\n },\n setSideSheetButtonLabel: () => {\n console.warn('setSideSheetButtonLabel Not implemented');\n },\n setSideSheetOnSubmit: () => {\n console.warn('setSideSheetOnSubmit Not implemented');\n },\n setSideSheetAdditionalOnClose: () => {\n console.warn('setSideSheetAdditionalOnClose Not implemented');\n },\n setSideSheetProps: () => {\n console.warn('setSideSheetProps Not implemented');\n },\n closeSideSheet: () => {\n console.warn('closeSideSheet Not implemented');\n },\n onCreate: () => {\n console.warn('onCreate Not implemented');\n },\n onUpdate: () => {\n console.warn('onUpdate Not implemented');\n },\n ...inquiryPageParams,\n pageId: pageData?.pageId,\n updateWorkflowPageData: (data) =>\n updateWorkflowPageData(data, pageData?.pageId),\n workflowTask: selectedNode,\n workflowPageData: { ...requiredFieldsMap, ...workflowPageData }, // workflowPageData will overwrite the requiredField values\n requiredFieldsMap: requiredFieldMapping || null,\n currentWorkflowStep,\n orderedWorkflowPageData: orderedPageData\n };\n }, [\n pageData?.pageId,\n selectedNode,\n workflowPageData,\n updateWorkflowPageData,\n requiredFieldMapping,\n inquiryPageParams,\n currentWorkflowStep,\n orderedPageData\n ]);\n\n const currentAssignee = useMemo(() => {\n if (!playScene?.assignee || !assigneeOptions?.length) {\n return '';\n }\n const matchingAssignee = assigneeOptions.find(\n (assignee) => assignee.id === playScene.assignee\n );\n return matchingAssignee || '';\n }, [playScene, assigneeOptions]);\n\n const pageHeight = useMemo(() => 'calc(100vh - 162px)', []);\n\n useEffect(() => {\n if (\n !selectedNode?.properties?.playSceneId ||\n !selectedPageId ||\n loadingTaskData\n ) {\n setWorkflowPageData(null);\n return;\n }\n if (\n taskDataMap?.[selectedNode.properties.playSceneId] &&\n taskDataMap[selectedNode.properties.playSceneId][selectedPageId]\n ) {\n setWorkflowPageData(\n taskDataMap[selectedNode.properties.playSceneId][selectedPageId]\n );\n return;\n }\n // Use this condition for making sure workflowPageData is resolved before\n // returning value so that PageContainer will render\n if (\n Object.keys(taskDataMap).length &&\n selectedNode?.properties?.playSceneId &&\n selectedPageId &&\n !playSceneLoading &&\n !loadingTaskData\n ) {\n setWorkflowPageData((prevData) => {\n if (!prevData) {\n return {};\n } else if (!Object.keys(prevData).length) {\n return prevData;\n }\n });\n return;\n }\n setWorkflowPageData(null);\n }, [\n selectedNode,\n selectedPageId,\n taskDataMap,\n loadingTaskData,\n playSceneLoading,\n workflowTaskSteps\n ]);\n\n useEffect(() => {\n if (workflowTaskSteps?.length) {\n setSelectedPageId(workflowTaskSteps[currentWorkflowStep]?.pageId);\n }\n }, [workflowTaskSteps, currentWorkflowStep]);\n\n useEffect(() => {\n setLoadingTaskData(true);\n if (!playSceneLoading && selectedNode?.properties?.playSceneId) {\n const json = playScene?.data ? JSON.parse(playScene.data) : {};\n setTaskDataMap(selectedNode.properties.playSceneId, json);\n }\n setLoadingTaskData(false);\n }, [playScene, playSceneLoading, setTaskDataMap, selectedNode]);\n\n useEffect(() => {\n const orderedData = [];\n if (taskDataMap?.[selectedNode.properties.playSceneId]) {\n workflowTaskSteps.forEach((step) => {\n orderedData.push(\n taskDataMap[selectedNode.properties.playSceneId][step.pageId] || {}\n );\n });\n }\n setOrderedPageData(orderedData);\n }, [taskDataMap, workflowTaskSteps, selectedNode]);\n\n return (\n <div>\n <Card\n variant={'outlined'}\n style={{\n border: 'none',\n paddingBottom: workflowTaskSteps?.length > 1 ? 10 : 0\n }}\n >\n <PrimaryActionHeader\n single\n title={workflow?.name}\n buttonLabel={'Submit'}\n handleClick={handleTaskSubmit}\n pabDisabled={\n selectedNode?.properties?.state !== UnitStateType.Started\n }\n secondaryButtons={secondaryButtons}\n />\n {loading && <LinearProgress />}\n </Card>\n {workflowTaskSteps?.length > 1 && (\n <WorkflowTaskFlow\n steps={workflowTaskSteps}\n handleClick={handleTaskChange}\n task={selectedNode}\n />\n )}\n {selectedPageId && workflowPageData ? (\n <PageContainer\n user={user}\n // key={playScene?.playSceneId || selectedNode?.id}\n key={selectedPageId}\n pageData={pageData}\n pageLoading={pageLoading}\n widgetParams={pageWidgetParams}\n disableMargins={true}\n fromMenu={true}\n height={pageHeight}\n />\n ) : (\n <div className={classes.loadingContent}>\n <CircularProgress size={64} />\n </div>\n )}\n <SideSheet\n open={reassignSidesheetOpen}\n buttonLabel={t('Reassign')}\n onClose={closeReassignmentSheet}\n onSubmit={handleReassignment}\n title={t('Reassign Task')}\n width={'25%'}\n progress={reassigningAssignee}\n variant='indeterminate'\n >\n <Form onSubmit={reassignTask} ref={formRef}>\n <Field\n component={FluentTextFieldAutoComplete}\n name='assignee'\n id='assignee'\n label={t('Assignee')}\n initialValue={currentAssignee || ''}\n options={assigneeOptions || []}\n optionKey={'name'}\n variant='outlined'\n margin='dense'\n />\n </Form>\n </SideSheet>\n </div>\n );\n};\n","import React, { useEffect, useMemo, useRef, useState } from 'react';\nimport { makeStyles, Box, Grow, Card } from '@material-ui/core';\nimport PhoneImage from '../../../assets/images/phone.png';\nimport { PrimaryActionHeader } from '../../utilityDisplay/utilityHeader/PrimaryActionHeader';\nimport { useTranslation } from 'react-i18next';\nimport { CancelIcon } from '@fluentui/react-icons';\n\nconst useStyles = makeStyles((theme) => ({\n messages: {\n flex: '1',\n // height: '100%',\n margin: '0 20px',\n overflow: 'hidden'\n },\n messagesBox: {\n paddingRight: '3%',\n paddingLeft: '3%',\n width: '23vw',\n height: '88%',\n overflowY: 'auto',\n boxSizing: 'border-box',\n display: 'flex',\n justifyContent: 'center'\n },\n message: {\n backgroundColor: '#E9E9EB',\n borderRadius: '10px',\n padding: '10px',\n marginBottom: '10px',\n alignSelf: 'flex-start',\n overflowWrap: 'break-word',\n margin: theme.spacing(1)\n },\n messageSection: {\n flex: '1',\n overflowY: 'auto',\n padding: '20px',\n backgroundImage: `url(${PhoneImage})`,\n backgroundSize: 'contain',\n backgroundRepeat: 'no-repeat',\n backgroundPosition: 'center',\n position: 'relative',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n height: 'calc(100vh - 140px)' // Ensures the container takes full viewport height\n }\n}));\n\nexport const SmsDisplay = (props) => {\n const { messages = [], to, from, title, handleClose } = props;\n const classes = useStyles();\n const [messagesList, setMessagesList] = useState(messages);\n const { t } = useTranslation();\n\n const messagesBoxRef = useRef(null);\n\n const secondaryButtons = useMemo(() => {\n const buttons = [];\n if (handleClose) {\n buttons.push({\n label: t('Close'),\n component: CancelIcon,\n click: () => handleClose()\n });\n }\n return buttons;\n }, [t, handleClose]);\n\n useEffect(() => {\n if (messagesBoxRef.current) {\n messagesBoxRef.current.scrollTop = messagesBoxRef.current.scrollHeight;\n }\n }, [messagesList]);\n\n return (\n <>\n <Card square>\n <PrimaryActionHeader\n // key={`${selectedNode?.id}-${inSearch}`}\n // title={headerTitle}\n // buttonLabel={'Load'}\n // secondaryButtons={secondaryButtons}\n // handleClick={handlePrimaryAction}\n // single\n hidePAB={true}\n title={title}\n subheader={`To: ${to} . From: ${from}`}\n secondaryButtons={secondaryButtons}\n />\n </Card>\n <Box className={classes.messages}>\n <Box className={classes.messageSection}>\n <Box className={classes.messagesBox} ref={messagesBoxRef}>\n {messagesList.map((message, index) => (\n <Grow key={index} in={true} timeout={800}>\n <Box\n className={classes.message}\n dangerouslySetInnerHTML={{ __html: message }}\n />\n </Grow>\n ))}\n </Box>\n </Box>\n </Box>\n </>\n );\n};\n","import React, { useMemo } from 'react';\nimport { makeStyles, Card } from '@material-ui/core';\nimport ReactHtmlParser from 'react-html-parser';\nimport { PrimaryActionHeader } from '../../utilityDisplay/utilityHeader/PrimaryActionHeader';\nimport { LayoutUnit } from '../../../layout/LayoutUnit';\nimport { useTranslation } from 'react-i18next';\nimport { CancelIcon } from '@fluentui/react-icons';\n\nconst useStyles = makeStyles((theme) => ({\n htmlContainer: { display: 'flex', justifyContent: 'center' }\n}));\n\nexport const EmailDisplay = (props) => {\n const { html = '', to, from, title, handleClose } = props;\n const classes = useStyles();\n const { t } = useTranslation();\n\n const secondaryButtons = useMemo(() => {\n const buttons = [];\n if (handleClose) {\n buttons.push({\n label: t('Close'),\n component: CancelIcon,\n click: () => handleClose()\n });\n }\n return buttons;\n }, [t, handleClose]);\n\n return (\n <>\n <Card square>\n <PrimaryActionHeader\n // key={`${selectedNode?.id}-${inSearch}`}\n // title={headerTitle}\n // buttonLabel={'Load'}\n // secondaryButtons={secondaryButtons}\n // handleClick={handlePrimaryAction}\n // single\n hidePAB={true}\n title={title}\n subheader={`To: ${to} . From: ${from}`}\n secondaryButtons={secondaryButtons}\n />\n </Card>\n <LayoutUnit unit='sm' />\n <div className={classes.htmlContainer}>{ReactHtmlParser(html)}</div>\n </>\n );\n};\n","import React, { useMemo } from 'react';\nimport { useAxiosGet } from '../utilities/useAxiosGet';\nimport { makeStyles } from '@material-ui/core';\nimport { PageContainer } from '../page/PageContainer';\nimport { useUser } from '../utilities/auth/useUser';\nimport {\n APP_RIBBON_SPACE,\n useBuildEnvironment\n} from '../shell/ui/EnvironmentRibbon';\nimport { UnitTypeEnums } from '../enums/workflowEnums';\nimport { WorkflowUiInterruptContent } from './WorkflowUiInterruptContent';\nimport { SmsDisplay } from '../UI/components/dataDisplay/SmsDisplay';\nimport { EmailDisplay } from '../UI/components/dataDisplay/EmailDisplay';\nimport { ConfigService } from 'udp-react-stencil-component-library';\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n height: '100%'\n }\n}));\n\nexport const WorkflowContent = (props) => {\n const {\n selectedNode,\n workflow,\n reloadWorkflow,\n users,\n groups,\n handleClose,\n inquiryPageParams = {}\n } = props;\n const buildEnv = useBuildEnvironment();\n const classes = useStyles({\n ...props,\n appRibbonSpace: buildEnv ? APP_RIBBON_SPACE : 0\n });\n const user = useUser();\n\n const [{ data: pageData, loading: pageLoading, error: pageError }] =\n useAxiosGet(\n ConfigService.tenantV1ApiUrl,\n `page/${selectedNode?.properties?.page?.id}`,\n {},\n !!!selectedNode?.properties?.page?.id,\n false\n );\n\n const content = useMemo(() => {\n let res = null;\n if (selectedNode?.properties?.type === UnitTypeEnums.Scene) {\n res = (\n <WorkflowUiInterruptContent\n key={selectedNode.id}\n selectedNode={selectedNode}\n workflow={workflow}\n reloadWorkflow={reloadWorkflow}\n users={users}\n groups={groups}\n handleClose={handleClose}\n inquiryPageParams={inquiryPageParams}\n />\n );\n } else if (selectedNode?.properties?.type === UnitTypeEnums.Sms) {\n res = (\n <SmsDisplay\n messages={[selectedNode?.properties?.sms?.body || '']}\n to={selectedNode?.properties?.sms?.to || ''}\n from={selectedNode?.properties?.sms?.from || ''}\n title={selectedNode?.properties?.nodeLabel || ''}\n handleClose={handleClose}\n />\n );\n } else if (selectedNode?.properties?.type === UnitTypeEnums.Mail) {\n res = (\n <EmailDisplay\n html={\n selectedNode?.properties?.email?.html ||\n selectedNode?.properties?.email?.text ||\n ''\n }\n to={selectedNode?.properties?.email?.to || ''}\n from={selectedNode?.properties?.email?.from || ''}\n title={selectedNode?.properties?.nodeLabel || ''}\n handleClose={handleClose}\n />\n );\n } else if (selectedNode?.properties?.page?.id) {\n res = (\n <PageContainer\n user={user}\n key={selectedNode?.id}\n pageData={pageData}\n pageLoading={pageLoading}\n widgetParams={{\n pageId: pageData?.pageId,\n entityName: selectedNode?.properties?.page?.entity?.entityName,\n pbiReportCode: selectedNode?.properties?.page?.pbiReportCode,\n requiredFieldsMap:\n selectedNode?.properties?.page?.requiredFieldMapping,\n udpTagId: selectedNode?.properties?.page?.udpTagId,\n queryId: selectedNode?.properties?.page?.queryId,\n inquiryTreeId: selectedNode?.properties?.page?.inquiryTreeId\n }}\n disableMargins={true}\n fromMenu={true}\n />\n );\n }\n return res;\n }, [\n groups,\n pageData,\n pageLoading,\n reloadWorkflow,\n selectedNode,\n user,\n users,\n workflow,\n handleClose\n ]);\n\n return <div className={classes.root}>{content}</div>;\n};\n","import { useHistory, useLocation } from 'react-router-dom';\n\nexport const useUpdateSearchParams = () => {\n const history = useHistory();\n const location = useLocation();\n\n const updateSearchParams = (params) => {\n const searchParams = new URLSearchParams(location.search);\n\n Object.keys(params).forEach((key) => {\n if (params[key] !== null) {\n searchParams.set(key, params[key]);\n } else {\n searchParams.delete(key);\n }\n });\n\n history.push({\n pathname: location.pathname,\n search: searchParams.toString()\n });\n };\n\n return updateSearchParams;\n};\n","import React, { useCallback, useEffect, useState } from 'react';\nimport { useLocation } from 'react-router-dom';\nimport { useAxiosGet } from '../utilities/useAxiosGet';\nimport { UtilitySideBar } from '../UI/utilityDisplay/UtilitySideBar';\nimport { makeStyles } from '@material-ui/core';\nimport { WorkflowTreeMenu } from './menus/WorkflowTreeMenu';\nimport { TreeViewModeEnums } from '../enums/unitySystemEnums';\nimport { DndProvider } from 'react-dnd';\nimport { HTML5Backend } from 'react-dnd-html5-backend';\nimport { useShellStore } from '../stores/shellStore';\nimport { NodeLoader } from '../UI/feedback/NodeLoader';\nimport {\n APP_RIBBON_SPACE,\n useBuildEnvironment\n} from '../shell/ui/EnvironmentRibbon';\nimport { WorkflowContent } from './WorkflowContent';\nimport {\n transformWorkflowPlayTree,\n updateWorkflowPlayNodeState\n} from '../utilities/workflow/workflowUtilities';\nimport { useUpdateSearchParams } from '../hooks/useUpdateSearchParams';\nimport { useUser } from '../utilities/auth/useUser';\nimport { apiMutate } from '../utilities/useAxiosMutate';\nimport { useSetLocationState } from '../hooks/useSetLocationState';\nimport { useTranslation } from 'react-i18next';\nimport { ConfigService } from 'udp-react-stencil-component-library';\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n flex: 1,\n minHeight: ({ appRibbonSpace }) => `calc(100vh - ${appRibbonSpace + 56}px)`,\n display: 'grid',\n gridTemplateAreas: ['sidebar content'].map((line) => `\"${line}\"`).join(' '),\n gridTemplateColumns: 'auto 1fr',\n gridTemplateRows: 'auto 1fr'\n },\n sidebar: {\n gridArea: 'sidebar',\n marginRight: theme.spacing(1)\n },\n content: {\n gridArea: 'content',\n display: 'flex',\n flexDirection: 'column',\n position: 'relative',\n zIndex: 1,\n height: ({ appRibbonSpace }) => `calc(100vh - ${appRibbonSpace + 56}px)`,\n overflowY: 'auto'\n },\n menuContent: {\n marginTop: theme.spacing(1),\n height: ({ appRibbonSpace }) => `calc(100vh - ${appRibbonSpace + 116}px)`,\n overflowX: 'hidden'\n },\n loader: {\n marginRight: theme.spacing(1),\n marginLeft: theme.spacing(1)\n },\n loadingContent: {\n flex: 1,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center'\n }\n}));\n\nexport const WorkflowContainer = (props) => {\n const { playId, taskId, autoCollapseNav = true } = props;\n const buildEnv = useBuildEnvironment();\n const classes = useStyles({\n ...props,\n appRibbonSpace: buildEnv ? APP_RIBBON_SPACE : 0\n });\n const location = useLocation();\n const updateSearchParams = useUpdateSearchParams();\n const user = useUser();\n const setLocationState = useSetLocationState();\n const { t } = useTranslation();\n\n const [menuItemsList, setMenuItemsList] = useState([]); // holds a list of trees\n const [selectedNode, setSelectedNode] = useState(null);\n const [sidebarExpanded, setSidebarExpanded] = useState(true);\n const [reloadFromPage, setReloadFromPage] = useState(false);\n const [workflow, setWorkflow] = useState(false);\n\n const state = location.state;\n let searchParamStr = location.search;\n let searchParams = new URLSearchParams(searchParamStr);\n const urlPlayId = location.pathname.replace('/workflowtask/', '');\n const udpPlayId =\n playId ||\n urlPlayId ||\n (state\n ? state.playId\n : searchParams.has('playId') === true\n ? searchParams.get('playId')\n : '');\n\n const udpTaskId =\n taskId ||\n (state\n ? state.taskId\n : searchParams.has('taskId') === true\n ? searchParams.get('taskId')\n : '');\n\n const [{ data: workflowPlay, loading: workflowPlayLoading }, reloadWorkflow] =\n useAxiosGet(\n ConfigService.builderV1ApiUrl,\n `workflow/play/${udpPlayId}`,\n {},\n !!!udpPlayId,\n false\n );\n\n const [{ data: users }] = useAxiosGet(\n ConfigService.securityV1ApiUrl,\n `users?tenantId=${user?.currentTenantId || ''}`,\n {},\n !!!user?.currentTenantId\n );\n\n const [{ data: groups }] = useAxiosGet(\n ConfigService.tenantV1ApiUrl,\n `groups?tenantId=${user?.currentTenantId || ''}&productId=${\n ConfigService.config.UNITY_PRODUCT_ID\n }`,\n {},\n !!!user?.currentTenantId\n );\n\n // const getNodeState = useCallback(\n // async (nodeId) =>\n // apiMutate(\n // ConfigService.builderV1ApiUrl,\n // `workflow/play/${udpPlayId}/node/${nodeId}/state`,\n // {\n // method: 'get'\n // }\n // ),\n // [udpPlayId]\n // );\n\n const { setSubHeaderActionHasChildren, setNavigationExpanded } =\n useShellStore();\n\n const handleReloadWorkflow = useCallback(async () => {\n setReloadFromPage(true);\n await reloadWorkflow();\n setReloadFromPage(false);\n }, [reloadWorkflow]);\n\n const handleSelectedNode = useCallback(\n async (node, menuIndex) => {\n if (node.isSelectable) {\n setSelectedNode(node);\n await handleReloadWorkflow();\n if (node?.properties?.playSceneId) {\n updateSearchParams({ taskId: node.properties.playSceneId });\n }\n }\n },\n [updateSearchParams, handleReloadWorkflow]\n );\n\n const handleDropNode = useCallback(\n (sourceNode, targetNode, sourceNodeMenuIndex, targetNodeMenuIndex) => {\n // TODO: Implement if we need to for next Phase\n },\n []\n );\n\n const handleSidebarExpandClick = useCallback(() => {\n setSidebarExpanded((expanded) => !expanded);\n }, []);\n\n useEffect(() => {\n if (workflowPlay) {\n setWorkflow(workflowPlay);\n }\n }, [workflowPlay]);\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('Workflow') });\n }, [setLocationState, t]);\n\n // this is used for updating the state node for page use\n useEffect(() => {\n if (workflow) {\n setSelectedNode((prevNode) => {\n if (!!prevNode) {\n const foundNode = workflow.workflowPlayNode?.children?.find(\n (child) => child.id === prevNode.id\n );\n if (!!foundNode) {\n const updatedNode = { ...prevNode };\n // TODO: using this to update state for now but may need to update\n // other properties of the selected node when we pull workflow tree\n updatedNode.properties.state = foundNode.state;\n return updatedNode;\n } else {\n return prevNode;\n }\n }\n });\n }\n }, [workflow]);\n\n useEffect(() => {\n if (workflow) {\n const list = [];\n const updatedMenu = transformWorkflowPlayTree(workflow.workflowPlayNode);\n if (updatedMenu) {\n list.push(updatedMenu);\n }\n setMenuItemsList(list);\n }\n }, [workflow]);\n\n useEffect(() => {\n if (!selectedNode) {\n const menu = menuItemsList[0];\n // Use Task Id to find the first matching node in tree\n if (menu) {\n if (!!udpTaskId) {\n const matchingTaskNode = menu.children.find(\n (child) => child?.properties?.playSceneId === udpTaskId\n );\n setSelectedNode(matchingTaskNode || menu.children[0] || null);\n } else {\n const firstSelectableMenuItem = menu?.children?.find(\n (item) => item.isSelectable\n );\n setSelectedNode(firstSelectableMenuItem || null);\n }\n if (autoCollapseNav) {\n setNavigationExpanded(false);\n }\n }\n }\n }, [\n udpTaskId,\n menuItemsList,\n selectedNode,\n setNavigationExpanded,\n autoCollapseNav\n ]);\n\n useEffect(() => {\n setSubHeaderActionHasChildren(false);\n }, [setSubHeaderActionHasChildren]);\n\n // useEffect(() => {\n // if (selectedNode) {\n // const getState = async () => {\n // const response = await getNodeState(selectedNode.id);\n // if (response.status === 200) {\n // setMenuItemsList((prevMenuList) => {\n // let updatedList = [];\n // prevMenuList.forEach((menu) => {\n // const updatedMenu = updateWorkflowPlayNodeState(\n // menu,\n // selectedNode.id,\n // response.data\n // );\n // updatedList.push(updatedMenu);\n // });\n // return updatedList;\n // });\n // }\n // };\n // getState();\n // }\n // }, [selectedNode, getNodeState]);\n\n return (\n <DndProvider backend={HTML5Backend}>\n <div className={classes.root}>\n <div className={classes.sidebar}>\n <UtilitySideBar\n title={'Workflow'}\n isUsingChildren={true}\n resizable={true}\n removePadding={true}\n removeTopLayoutUnit={true}\n onUtilitySidebarToggleExpandClick={handleSidebarExpandClick}\n collapsedWidth={64}\n >\n <div className={classes.menuContent} key={playId}>\n {menuItemsList?.length > 0 &&\n (!workflowPlayLoading || reloadFromPage) &&\n menuItemsList.map((menuItems, index) => (\n <div key={menuItems.id} className={classes.nodeContainer}>\n <WorkflowTreeMenu\n menuItems={menuItems}\n onSelectNode={handleSelectedNode}\n onDropNode={handleDropNode}\n menuIndex={index}\n selectedNodeId={selectedNode?.id}\n selectedNodeParentId={selectedNode?.parentId}\n sidebarExpanded={sidebarExpanded}\n treeViewMode={TreeViewModeEnums.Classic}\n />\n </div>\n ))}\n {workflowPlayLoading && !reloadFromPage && (\n <div className={classes.loader}>\n <NodeLoader loading={workflowPlayLoading} />\n </div>\n )}\n </div>\n </UtilitySideBar>\n </div>\n <div className={classes.content}>\n <WorkflowContent\n selectedNode={selectedNode}\n workflow={workflow}\n reloadWorkflow={handleReloadWorkflow}\n users={users}\n groups={groups}\n />\n </div>\n </div>\n </DndProvider>\n );\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"WorkflowContainer-ClPvY2mG.js","names":["useStyles","value","useStyles","other","useStyles","tree","expanded","useWorkflowStore: () => WorkflowState","useStyles","useStyles","makeStyles","LinearProgress","MuiLinearProgress","useStyles","makeStyles","CircularProgress","MuiCircularProgress","useStyles","apiMutate","user","LinearProgress","CircularProgress","useStyles","useStyles","useStyles"],"sources":["../src/UI/inputs/textField/FluentTextFieldAutoComplete.jsx","../src/utilities/input/DateUtilities.js","../src/workflow/menus/WorkflowTreeMenuItem.jsx","../src/workflow/menus/WorkflowTreeMenu.jsx","../src/enums/workflowEnums.ts","../src/utilities/workflow/workflowUtilities.js","../src/stores/workflowStore.ts","../src/workflow/components/WorkflowTaskFlow.jsx","../src/UI/loading/LinearProgress.jsx","../src/UI/loading/CircularProgress.jsx","../src/workflow/WorkflowUiInterruptContent.jsx","../src/UI/components/dataDisplay/SmsDisplay.jsx","../src/UI/components/dataDisplay/EmailDisplay.jsx","../src/workflow/WorkflowContent.jsx","../src/hooks/useUpdateSearchParams.js","../src/workflow/WorkflowContainer.jsx"],"sourcesContent":["/* eslint-disable no-use-before-define */\nimport React, { useCallback, useState } from 'react';\nimport { TextField, makeStyles, Popper } from '@material-ui/core';\nimport Autocomplete from '@material-ui/lab/Autocomplete';\nimport clsx from 'clsx';\n\nconst useStyles = makeStyles((theme) => ({\n formTextInput: {\n fontSize: 14\n },\n labelRoot: {\n fontSize: 14\n }\n}));\n\nconst AutoCompletePopper = (props) => {\n return <Popper {...props} placement='bottom-start' />;\n};\n\nexport const FluentTextFieldAutoComplete = (props) => {\n const {\n label,\n placeholder,\n options,\n textFieldProps,\n disabled,\n onChange: onChangeProp,\n value,\n optionKey,\n additionalOnChangeAction,\n classes: classProps,\n variant = 'outlined',\n inputProps,\n inputPropClasses,\n customPopper,\n disableClearable = false,\n defaultValue,\n additionalOptionKey,\n isMultiple = false,\n limitTags,\n renderTags,\n optionLabelDisplayFunction = (option) => option,\n groupBy = null,\n size = 'medium',\n id,\n udprecordid,\n freeSolo = false,\n formatUserInputValue,\n ...other\n } = props;\n\n const classes = useStyles();\n const { autocompleteRoot } = classProps || {};\n const [inputValue, setInputValue] = useState('');\n\n const onChange = useCallback(\n (e, value) => {\n if (additionalOnChangeAction) {\n additionalOnChangeAction(value);\n }\n return onChangeProp?.(value);\n },\n [onChangeProp, additionalOnChangeAction]\n );\n\n const handleInputChange = useCallback((e, newInputValue) => {\n setInputValue(newInputValue ?? '');\n }, []);\n\n const handleClose = useCallback(\n (event, reason) => {\n if (!freeSolo) return;\n if (isMultiple) return;\n\n if (value && typeof value === 'object') return;\n\n const raw = (inputValue || '').trim();\n if (!raw) return;\n\n if (\n reason === 'blur' ||\n reason === 'enter' ||\n reason === 'create-option'\n ) {\n const updatedValue = formatUserInputValue\n ? formatUserInputValue(raw)\n : raw;\n if (additionalOnChangeAction) additionalOnChangeAction(updatedValue);\n onChangeProp?.(updatedValue);\n }\n },\n [\n freeSolo,\n isMultiple,\n value,\n inputValue,\n formatUserInputValue,\n additionalOnChangeAction,\n onChangeProp\n ]\n );\n\n return (\n <Autocomplete\n id='autocomplete'\n multiple={isMultiple}\n limitTags={limitTags}\n disabled={disabled}\n options={options || []}\n getOptionLabel={(option) =>\n option &&\n (optionKey\n ? `${optionLabelDisplayFunction(option[optionKey])}${\n additionalOptionKey ? ` - (${option[additionalOptionKey]})` : ''\n }`\n : optionLabelDisplayFunction(option) || '')\n }\n getOptionSelected={(option, val) =>\n optionKey ? option[optionKey] === val[optionKey] : option === val\n }\n groupBy={groupBy}\n onChange={onChange}\n inputValue={inputValue}\n onInputChange={handleInputChange}\n onClose={handleClose}\n value={value || (isMultiple ? [] : null)}\n className={autocompleteRoot}\n classes={{\n root: classProps?.formControl\n }}\n PopperComponent={customPopper || AutoCompletePopper}\n disableClearable={disableClearable}\n defaultValue={defaultValue}\n size={size}\n renderInput={(params) => (\n <TextField\n {...textFieldProps}\n {...params}\n {...other}\n inputProps={{\n ...params.inputProps,\n id: id,\n udprecordid: udprecordid\n }}\n label={label}\n margin='dense'\n variant={variant}\n placeholder={placeholder}\n size='small'\n InputProps={{\n ...params.InputProps,\n ...inputProps,\n classes: {\n root: classProps?.inputPropRoot,\n input: clsx(classes.formTextInput, classProps?.inputPropInput)\n }\n }}\n InputLabelProps={{\n classes: {\n root: clsx(classes.labelRoot, classProps?.formLabelRoot)\n }\n }}\n />\n )}\n renderTags={renderTags}\n freeSolo={freeSolo}\n />\n );\n};\n","import { DateTime } from 'luxon';\n\nexport const formatDateToLocaleString = (isoDate, luxonFormat = '') => {\n return DateTime.fromISO(isoDate, { zone: 'utc' })\n .toLocal()\n .toLocaleString(luxonFormat);\n};\n\n// convert date into UTC date format\nexport const toUtcDate = (date) => {\n if (!date) {\n return null;\n }\n\n if (date.endsWith('Z')) {\n return new Date(date);\n } else {\n return new Date(date + 'Z');\n }\n};\n","import React, { useCallback } from 'react';\nimport {\n makeStyles,\n lighten,\n Typography,\n CircularProgress,\n darken,\n useTheme,\n Tooltip\n} from '@material-ui/core';\nimport TreeItem from '@material-ui/lab/TreeItem';\nimport { getIconFromName } from '../../utilities/tree/TreeUtilities';\nimport clsx from 'clsx';\nimport { UnityFluentIcon } from '../../utilities/UnityFluentIcon';\nimport { getUnityIconFromName } from '../../utilities/iconLibrary/UnityIconLibrary';\nimport { useDrag, useDrop } from 'react-dnd';\nimport {\n NodeActionTriggerEnums,\n TreeViewModeEnums\n} from '../../enums/unitySystemEnums.ts';\nimport { AggregateChip } from '../../UI/utilityDisplay/AggregateChip';\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n '&.Mui-selected > .MuiTreeItem-content': {\n backgroundColor:\n theme?.getThemeData()?.mode === 'dark'\n ? theme.palette.grey[700]\n : theme.palette.grey[300],\n borderRight: `4px solid ${theme.palette.primary.main}`\n },\n '&.Mui-selected > .MuiTreeItem-content .MuiTreeItem-label': {\n backgroundColor: 'transparent',\n paddingLeft: 0\n },\n '&.Mui-selected > .MuiTreeItem-content > .MuiCollapse-wrapperInner': {\n backgroundColor:\n theme?.getThemeData()?.mode !== 'dark' && theme.palette.grey[50]\n },\n '& .MuiTreeItem-content .MuiTreeItem-iconContainer': {\n display: (props) => (props.sidebarExpanded ? 'flex' : 'none')\n }\n },\n content: {\n backgroundColor: (props) =>\n theme?.getThemeData()?.mode !== 'dark' &&\n !props.sidebarExpanded &&\n props.conditionalIconName &&\n props.conditionalIconColor\n ? lighten(props.conditionalIconColor, 0.92)\n : ''\n },\n labelRoot: {\n display: 'flex',\n alignItems: 'center',\n marginLeft: (props) => (props.sidebarExpanded ? 0 : theme.spacing(1.5)),\n width: '100%'\n },\n labelContainer: {\n display: (props) => (!props.sidebarExpanded ? 'none' : ''),\n width: (props) =>\n props.treeViewMode === TreeViewModeEnums.Compact\n ? `calc(100% - ${theme.spacing(6.25)}px)`\n : `calc(100% - ${theme.spacing(7.75)}px)`\n },\n conditionalIconContainer: {\n display: 'inline-flex'\n },\n labelText: {\n fontSize: '0.75rem',\n fontWeight: 600,\n lineHeight: '1rem',\n letterSpacing: 0.1\n },\n captionText: {\n marginLeft: (props) =>\n props.treeViewMode === TreeViewModeEnums.Compact ? theme.spacing(1) : '',\n fontSize: '0.65rem',\n fontWeight: 400,\n lineHeight: 1,\n letterSpacing: 0.4\n },\n labelOverflow: {\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n marginTop: `-${theme.spacing(0.25)}px`\n },\n group: {\n width: '100%',\n '& .MuiTreeItem-group': {\n marginLeft: 0\n },\n '& .MuiTreeItem-content': {\n paddingLeft: (props) =>\n props.sidebarExpanded ? (props.depth || 1) * theme.spacing(1) : 0,\n borderRight: (props) =>\n props.showRightBorderColor\n ? `4px solid ${theme.palette.primary.main}`\n : '',\n borderBottom: (props) =>\n props.treeViewMode === TreeViewModeEnums.Compact\n ? `1px solid ${theme.palette.grey[200]}`\n : ''\n },\n '& .MuiTreeItem-content .MuiTreeItem-label': {\n paddingLeft: 0,\n width: (props) =>\n props.sidebarExpanded && `calc(100% - ${theme.spacing(2.5)}px)`\n },\n '& .MuiTreeItem-content .MuiTreeItem-iconContainer span': {\n display: (props) => (props.hideExpansion ? 'none' : '')\n },\n '& .MuiCollapse-wrapperInner': {\n backgroundColor: (props) =>\n theme?.getThemeData()?.mode !== 'dark' && props.isSelectedNode\n ? theme.palette.grey[50]\n : ''\n }\n },\n iconContainer: {\n display: 'flex',\n // alignItems: 'center',\n justifyContent: 'center',\n // borderRadius: 50,\n marginTop: (props) =>\n props.treeViewMode === TreeViewModeEnums.Compact\n ? theme.spacing(0.25)\n : theme.spacing(0.5),\n marginBottom: (props) =>\n props.treeViewMode === TreeViewModeEnums.Compact\n ? theme.spacing(0.25)\n : theme.spacing(0.5),\n marginRight: theme.spacing(1),\n width: (props) =>\n props.treeViewMode === TreeViewModeEnums.Compact\n ? theme.spacing(3)\n : theme.spacing(4),\n height: (props) =>\n props.treeViewMode === TreeViewModeEnums.Compact\n ? theme.spacing(3)\n : theme.spacing(4)\n // border: (props) =>\n // props.iconColor\n // ? `1px solid ${darken(props.iconColor, 0.1)}`\n // : `1px solid ${theme.palette.secondary.main}`,\n // backgroundColor: '#ffffff'\n }\n}));\n\nexport const WorkflowTreeMenuItem = (props) => {\n const {\n parentId,\n nodeId,\n iconName,\n iconType,\n conditionalIconName,\n conditionalIconType,\n conditionalIconColor,\n label,\n iconColor,\n onNodeSelect,\n isSelectedNode,\n subLabel,\n sidebarExpanded,\n isLastNode,\n loading,\n node,\n onDropNode,\n treeViewMode,\n menuIndex,\n aggregateThresholdId,\n ...other\n } = props;\n const classes = useStyles(props);\n const theme = useTheme();\n\n const [{ isDragging }, dragRef] = useDrag({\n type: 'BaseTreeMenuItem',\n item: { ...node, sourceNodeMenuIndex: menuIndex },\n collect: (monitor) => ({\n isDragging: monitor.isDragging()\n })\n });\n\n const handleOnDrop = useCallback(\n (sourceNode, monitor) => {\n if (!monitor.didDrop()) {\n if (onDropNode) {\n const { sourceNodeMenuIndex, ...other } = sourceNode;\n onDropNode({ ...other }, node, sourceNodeMenuIndex, menuIndex);\n }\n }\n },\n [onDropNode, node, menuIndex]\n );\n\n const [{ canDrop, isOver }, dropRef] = useDrop(\n () => ({\n accept: ['BaseTreeMenuItem'],\n drop: (sourceNode, monitor) => {\n // condition to only handle first drop\n handleOnDrop(sourceNode, monitor);\n },\n canDrop: (sourceNode) => checkCanDrop(sourceNode),\n collect: (monitor) => ({\n isOver: monitor.isOver(),\n canDrop: !!monitor.canDrop()\n })\n }),\n [handleOnDrop]\n );\n\n const checkCanDrop = useCallback(\n (sourceNode) => {\n if (sourceNode) {\n const onDropActions = node?.properties?.nodeActions?.filter(\n (na) => na?.triggerType === NodeActionTriggerEnums.On_Node_Drop\n );\n if (!onDropActions) {\n return false;\n }\n const nodeDragEntities = onDropActions?.map(\n (action) => action?.dragEntityName\n );\n return nodeDragEntities.includes(\n sourceNode?.properties?.catalogReturnObject\n );\n }\n },\n [node]\n );\n\n const handleOnLabelClick = useCallback(\n (e) => {\n e.preventDefault();\n onNodeSelect(e, nodeId);\n },\n [onNodeSelect, nodeId]\n );\n\n return (\n <TreeItem\n className={classes.group}\n key={nodeId}\n nodeId={nodeId}\n label={\n <div ref={dropRef}>\n <Tooltip title={sidebarExpanded ? '' : label}>\n <div\n ref={(node?.properties?.isDraggable && dragRef) || null}\n style={{ opacity: isDragging ? 0.5 : 1 }}\n >\n {loading ? (\n <CircularProgress size={12} />\n ) : (\n <div\n id={\n 'udpRecord-BaseTreeMenuItem-' + label?.replace(/\\s+/g, '')\n }\n udprecordid={\n 'udpRecord-BaseTreeMenuItem-' + label?.replace(/\\s+/g, '')\n }\n className={classes.labelRoot}\n style={{\n fontWeight: isSelectedNode ? 'bold' : ''\n }}\n >\n {iconName && (\n <div className={classes.iconContainer}>\n <UnityFluentIcon\n size={\n treeViewMode === TreeViewModeEnums.Compact\n ? 'small'\n : 'large'\n }\n color={iconColor}\n type={iconType}\n icon={\n iconType === 'unity'\n ? getUnityIconFromName(iconName)\n : getIconFromName(iconName)\n }\n style={{\n color: iconColor\n ? darken(iconColor, 0.1)\n : theme.palette.secondary.main\n }}\n />\n </div>\n )}\n <div className={classes.labelContainer}>\n <Typography\n variant='subtitle2'\n className={clsx(classes.labelText, classes.labelOverflow)}\n >\n {label}\n {subLabel &&\n treeViewMode === TreeViewModeEnums.Compact && (\n <Typography\n variant='caption'\n className={clsx(\n classes.captionText,\n classes.labelOverflow\n )}\n >\n {subLabel}\n </Typography>\n )}\n </Typography>\n {subLabel && treeViewMode === TreeViewModeEnums.Classic && (\n <div className={classes.labelOverflow}>\n <Typography\n variant='caption'\n className={clsx(classes.captionText)}\n >\n {subLabel}\n </Typography>\n </div>\n )}\n </div>\n <AggregateChip aggregateThresholdId={aggregateThresholdId} />\n {conditionalIconName && sidebarExpanded && (\n <div className={classes.conditionalIconContainer}>\n <UnityFluentIcon\n size={\n treeViewMode === TreeViewModeEnums.Compact\n ? 'small'\n : 'default'\n }\n color={conditionalIconColor}\n type={conditionalIconType}\n icon={\n conditionalIconType === 'unity'\n ? getUnityIconFromName(conditionalIconName)\n : getIconFromName(conditionalIconName)\n }\n style={{\n color: conditionalIconColor\n }}\n />\n </div>\n )}\n </div>\n )}\n </div>\n </Tooltip>\n </div>\n }\n onLabelClick={handleOnLabelClick}\n classes={{ root: classes.root, content: classes.content }}\n {...other}\n />\n );\n};\n","import React, { useCallback, useState, useEffect } from 'react';\nimport {\n makeStyles,\n useTheme,\n lighten,\n CircularProgress,\n Typography\n} from '@material-ui/core';\nimport TreeView from '@material-ui/lab/TreeView';\nimport { WorkflowTreeMenuItem } from './WorkflowTreeMenuItem';\nimport {\n searchTree,\n findAllParentIds,\n getNodeIdForRightBorder\n} from '../../utilities/tree/TreeUtilities';\nimport { FluentIcon } from '../../utilities/FluentIcon';\nimport { CaretUpSolid8Icon, CaretDownSolid8Icon } from '@fluentui/react-icons';\nimport { cloneDeep } from 'lodash';\nimport { TreeViewModeEnums } from '../../enums/unitySystemEnums.ts';\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n marginBottom: theme.spacing(1.75),\n borderTop: (props) =>\n props.treeViewMode === TreeViewModeEnums.Compact\n ? `1px solid ${theme.palette.grey[200]}`\n : ''\n },\n noChildrenContainer: {\n borderBottom: (props) =>\n props.treeViewMode === TreeViewModeEnums.Compact\n ? `1px solid ${theme.palette.grey[200]}`\n : ''\n }\n}));\n\nexport const WorkflowTreeMenu = (props) => {\n const {\n menuItems,\n onSelectNode,\n onDropNode,\n menuIndex,\n selectedNodeId,\n selectedNodeParentId,\n sidebarExpanded,\n treeViewMode,\n childrenKey = 'children'\n } = props;\n const [expanded, setExpanded] = useState(null);\n const [isCurrentActiveTree, setIsCurrentActiveTree] = useState(false);\n const [selectedNodeIsHidden, setSelectedNodeIsHidden] = useState(false);\n const [tree, setTree] = useState(menuItems);\n const theme = useTheme();\n const classes = useStyles(props);\n\n const handleSelectedNode = useCallback(\n (e, value) => {\n const selectedNode = searchTree(tree, value);\n if (onSelectNode) {\n onSelectNode(selectedNode, menuIndex);\n setSelectedNodeIsHidden(false);\n }\n },\n [tree, menuIndex, onSelectNode]\n );\n\n const renderTree = useCallback(\n (node, depth = 1) => {\n let label = node.properties?.nodeLabel || node.properties?.name;\n let subLabel = node.properties?.nodeSubLabel;\n let iconName = node.properties?.defaultIcon?.name;\n let iconType = node.properties?.defaultIcon?.type;\n let conditionalIconName = node.properties?.conditionalIcon?.name || '';\n let conditionalIconType = node.properties?.conditionalIcon?.name\n ? node.properties.conditionalIcon?.type\n : '';\n let conditionalIconColor = node.properties?.conditionalIcon?.name\n ? node.properties?.conditionalIcon?.color\n : '';\n let nodeId = node.id;\n let iconColor = node.properties?.conditionalIconName\n ? node.properties?.conditionalIconColor\n : node.properties?.defaultIcon?.color?.hex;\n let aggregateThresholdId = node.properties?.aggregateThresholdId || '';\n\n if (node.isGroupNode) {\n label = node.properties?.label;\n subLabel = node.properties?.subLabel;\n iconName = node.properties?.icon?.name;\n iconType = node.properties?.icon?.type;\n iconColor = node.properties?.icon?.color?.hex;\n }\n\n return (\n <WorkflowTreeMenuItem\n key={nodeId}\n nodeId={nodeId}\n label={label}\n subLabel={subLabel}\n iconName={iconName}\n iconType={iconType}\n conditionalIconName={conditionalIconName}\n conditionalIconType={conditionalIconType}\n conditionalIconColor={conditionalIconColor}\n parentId={node.parentId}\n iconColor={iconColor}\n onNodeSelect={handleSelectedNode}\n selectedNodeId={selectedNodeId}\n isSelectedNode={selectedNodeId === node.id}\n showRightBorderColor={\n selectedNodeIsHidden &&\n isCurrentActiveTree &&\n getNodeIdForRightBorder(expanded, tree, selectedNodeParentId) ===\n node.id\n }\n isCurrentActiveTree={isCurrentActiveTree}\n sidebarExpanded={sidebarExpanded}\n depth={depth}\n hideExpansion={!!!node[childrenKey]?.length}\n node={node}\n onDropNode={onDropNode}\n treeViewMode={treeViewMode}\n menuIndex={menuIndex}\n aggregateThresholdId={aggregateThresholdId}\n >\n {node.properties?.lazyLoad &&\n !!!node[childrenKey]?.length &&\n !node.completedLoadingChildren && (\n <CircularProgress\n size={12}\n style={{ marginLeft: (depth || 1) * theme.spacing(1) }}\n />\n )}\n {node.properties?.lazyLoad &&\n !!!node[childrenKey]?.length &&\n node.completedLoadingChildren &&\n sidebarExpanded &&\n !node.errorRetrievingChildren && (\n <div className={classes.noChildrenContainer}>\n <Typography\n variant='caption'\n style={{\n marginLeft: (depth || 1) * theme.spacing(3),\n fontWeight: 400\n }}\n >\n No Children\n </Typography>\n </div>\n )}\n {node.properties?.lazyLoad &&\n node.completedLoadingChildren &&\n sidebarExpanded &&\n node.errorRetrievingChildren && (\n <div className={classes.noChildrenContainer}>\n <Typography\n variant='caption'\n style={{\n marginLeft: (depth || 1) * theme.spacing(3),\n fontWeight: 400\n }}\n >\n {`Error Retrieving ${\n !!node[childrenKey]?.length ? `Additional ` : ''\n }Children`}\n </Typography>\n </div>\n )}\n {Array.isArray(node[childrenKey])\n ? node[childrenKey].map((n, i) => renderTree(n, depth + 1))\n : null}\n </WorkflowTreeMenuItem>\n );\n },\n [\n handleSelectedNode,\n selectedNodeId,\n selectedNodeIsHidden,\n isCurrentActiveTree,\n sidebarExpanded,\n expanded,\n tree,\n selectedNodeParentId,\n theme,\n classes,\n onDropNode,\n treeViewMode,\n menuIndex,\n childrenKey\n ]\n );\n\n const handleNodeExpansion = useCallback(\n async (evt, nodeIds) => {\n const treeCopy = cloneDeep(tree);\n setExpanded(nodeIds);\n\n const parentNode = searchTree(treeCopy, selectedNodeParentId);\n const initialAllParentNodeIds = selectedNodeParentId\n ? [selectedNodeParentId]\n : [];\n const allParentNodeIds = findAllParentIds(\n treeCopy,\n parentNode,\n initialAllParentNodeIds\n );\n const selectedNodeShown = allParentNodeIds.every((id) =>\n nodeIds.includes(id)\n );\n if (\n isCurrentActiveTree &&\n allParentNodeIds.length &&\n !selectedNodeShown\n ) {\n setSelectedNodeIsHidden(true);\n } else {\n setSelectedNodeIsHidden(false);\n }\n },\n [isCurrentActiveTree, tree, selectedNodeParentId]\n );\n\n const getExpandedRecursively = useCallback(\n (tree) => {\n if (!tree) return [];\n return tree.reduce((expandedIds, item) => {\n if (item?.isExpanded) {\n expandedIds.push(item.id);\n }\n if (item && item[childrenKey]?.length) {\n expandedIds = expandedIds.concat(\n getExpandedRecursively(item[childrenKey])\n );\n }\n return expandedIds;\n }, []);\n },\n [childrenKey]\n );\n\n useEffect(() => {\n setTree(menuItems);\n }, [menuItems]);\n\n useEffect(() => {\n if (!tree) {\n return;\n }\n let expanded = [];\n if (tree?.isExpanded) {\n expanded.push(tree.id);\n }\n expanded = expanded.concat(getExpandedRecursively(tree[childrenKey]));\n setExpanded(expanded);\n }, [getExpandedRecursively, tree, childrenKey]);\n\n useEffect(() => {\n if (!!searchTree(tree, selectedNodeId)) {\n setIsCurrentActiveTree(true);\n } else {\n setIsCurrentActiveTree(false);\n }\n }, [tree, selectedNodeId]);\n\n if (!expanded) {\n return null;\n }\n\n return (\n <TreeView\n key={tree}\n className={classes.root}\n defaultCollapseIcon={\n <FluentIcon\n size='small'\n component={CaretUpSolid8Icon}\n style={{\n color: lighten(theme.palette.primary.main, 0.5),\n width: theme.spacing(1.5),\n height: theme.spacing(1.5)\n }}\n />\n }\n expanded={expanded || []}\n onNodeToggle={handleNodeExpansion}\n defaultExpandIcon={\n <FluentIcon\n size='small'\n component={CaretDownSolid8Icon}\n style={{\n color: lighten(theme.palette.primary.main, 0.5),\n width: theme.spacing(1.5),\n height: theme.spacing(1.5)\n }}\n />\n }\n selected={selectedNodeId}\n >\n {tree && renderTree(tree)}\n </TreeView>\n );\n};\n","export enum UnitTypeEnums {\n Scope = 0,\n Sequence = 1,\n Group = 2,\n Fork = 3,\n Branch = 4,\n Retry = 5,\n Attempt = 6,\n Iterator = 7,\n Loop = 8,\n Break = 9,\n Block = 10,\n Adaptor = 11,\n Code = 12,\n Pause = 13,\n Fault = 14,\n Trace = 15,\n Catcher = 16,\n Thrower = 17,\n Plan = 18,\n Task = 19,\n Sprint = 20,\n Auth = 21,\n Rest = 22,\n Fuse = 23,\n Mail = 24,\n Sms = 25,\n Publisher = 26,\n Fiber = 27,\n Mapper = 28,\n Section = 29,\n Scene = 30,\n Placeholder = 100\n}\n\nexport enum UnitStateType {\n Initial = 0,\n Started = 1,\n Completed = 2,\n Cancelled = 3,\n Failed = 4\n}\n","import { UnitStateType, UnitTypeEnums } from '../../enums/workflowEnums';\nimport { DateTime } from 'luxon';\nimport { formatDateToLocaleString } from '../input/DateUtilities';\n\nexport const getWorkflowTaskIconByActionType = (type) => {\n let iconName = 'ClipboardListIcon';\n switch (type) {\n case UnitTypeEnums.Rest:\n iconName = 'CloudImportExportIcon';\n break;\n case UnitTypeEnums.Sms:\n iconName = 'MessageFillIcon';\n break;\n case UnitTypeEnums.Mail:\n iconName = 'MailSolidIcon';\n break;\n case UnitTypeEnums.Scene:\n iconName = 'ReleaseGateIcon';\n break;\n default:\n break;\n }\n return iconName;\n};\n\nexport const getWorkflowTaskStateIconByStateType = (type) => {\n let iconName = '';\n switch (type) {\n case UnitStateType.Initial:\n iconName = 'StopwatchIcon';\n break;\n case UnitStateType.Started:\n iconName = 'ProgressLoopOuterIcon';\n break;\n case UnitStateType.Completed:\n iconName = 'CheckMarkIcon';\n break;\n case UnitStateType.Cancelled:\n iconName = 'CancelIcon';\n break;\n case UnitStateType.Failed:\n default:\n iconName = 'ErrorBadgeIcon';\n break;\n }\n return iconName;\n};\n\nexport const getWorkflowTaskStateIconColorByStateType = (type) => {\n let color = '';\n switch (type) {\n case UnitStateType.Initial:\n color = '#ffa726';\n break;\n case UnitStateType.Started:\n color = '#29b6f6';\n break;\n case UnitStateType.Completed:\n color = '#66bb6a';\n break;\n case UnitStateType.Cancelled:\n color = '#f44336';\n break;\n case UnitStateType.Failed:\n default:\n color = '#f44336';\n break;\n }\n return color;\n};\n\nconst SELECTABLE_NODE_TYPES = [\n UnitTypeEnums.Sms,\n UnitTypeEnums.Mail,\n UnitTypeEnums.Scene\n];\n\nexport const transformWorkflowPlayTree = (node) => {\n if (!node) return null;\n const label = node.name || '';\n const expanded = 'expanded';\n const startedAt = node.startedAt\n ? formatDateToLocaleString(node.startedAt, DateTime.DATETIME_SHORT)\n : null;\n\n const updatedNode = {\n id: node.id,\n parentId: node.parentId,\n isExpanded: expanded,\n isSelectable: !!node.type && SELECTABLE_NODE_TYPES.includes(node.type),\n properties: {\n defaultIcon: {\n type: '',\n name: getWorkflowTaskIconByActionType(node.type),\n color: ''\n },\n conditionalIcon: {\n type: '',\n name: !!node.type && getWorkflowTaskStateIconByStateType(node.state),\n color:\n !!node.type && getWorkflowTaskStateIconColorByStateType(node.state)\n },\n nodeLabel: label,\n nodeSubLabel: node.parentId ? node.description : startedAt || '',\n state: node.state,\n type: node.type,\n interruptPages: node.interruptPages,\n playSceneId: node.playSceneId,\n startedAt: node.startedAt,\n endedAt: node.endedAt,\n dueDate: node.dueDate,\n variables: node.variables,\n sms:\n node.type === UnitTypeEnums.Sms\n ? {\n templateData: node.templateData,\n to: node.to,\n from: node.from,\n body: node.body\n }\n : null,\n email:\n node.type === UnitTypeEnums.Mail\n ? {\n templateData: node.templateData,\n to: node.to,\n from: node.from,\n subject: node.subject,\n text: node.text,\n html: node.html\n }\n : null\n },\n children: []\n };\n\n for (const child of node.children) {\n const updatedChild = transformWorkflowPlayTree(child);\n if (updatedChild) {\n updatedNode.children.push(updatedChild);\n }\n }\n\n return updatedNode;\n};\n\nexport const updateWorkflowPlayNodeState = (node, nodeId, nodeState) => {\n if (!node) return null;\n\n // Check if the current node matches the nodeId\n if (node.id === nodeId) {\n node.properties.state = nodeState;\n node.properties.defaultIcon = {\n type: '',\n name: getWorkflowTaskIconByActionType(node.properties.type),\n color: ''\n };\n node.properties.conditionalIcon = {\n type: '',\n name:\n !!node.properties.type &&\n getWorkflowTaskStateIconByStateType(nodeState),\n color:\n !!node.properties.type &&\n getWorkflowTaskStateIconColorByStateType(nodeState)\n };\n return node; // Return the updated node\n }\n\n // Recursively check and update children nodes if any\n if (node.children && node.children.length) {\n for (const child of node.children) {\n const updatedChild = updateWorkflowPlayNodeState(\n child,\n nodeId,\n nodeState\n );\n if (updatedChild) {\n return node; // Return the updated node\n }\n }\n }\n\n return null; // If no matching nodeId is found\n};\n","import { create } from 'zustand';\nimport { devtools } from 'zustand/middleware';\n\ninterface PageDataMap {\n [pageId: string]: Object | null | undefined;\n}\n\ninterface TaskDataMap {\n [taskId: string]: PageDataMap;\n}\n\ninterface WorkflowState {\n title: string | null | undefined;\n setWorkflowToolbarTitle: (title: string) => void;\n taskDataMap: TaskDataMap | null | undefined;\n updateTaskDataMap: (taskId: string, pageId: string, data: Object) => void;\n setTaskDataMap: (taskId: string, data: PageDataMap) => void;\n}\n\nexport const useWorkflowStore: () => WorkflowState = create<WorkflowState>()(\n devtools((set) => ({\n title: '',\n setWorkflowToolbarTitle: (title) => set((state) => ({ title: title })),\n taskDataMap: {},\n updateTaskDataMap: (taskId, pageId, data) =>\n set((state) => {\n const updatedTaskDataMap = { ...state.taskDataMap };\n if (updatedTaskDataMap[taskId]) {\n if (updatedTaskDataMap[taskId][pageId]) {\n updatedTaskDataMap[taskId][pageId] = data;\n } else {\n updatedTaskDataMap[taskId] = {\n [pageId]: data\n };\n }\n } else {\n updatedTaskDataMap[taskId] = {\n [pageId]: data\n };\n }\n return {\n taskDataMap: updatedTaskDataMap\n };\n }),\n setTaskDataMap: (taskId, data) =>\n set((state) => {\n const updatedTaskDataMap = { ...state.taskDataMap };\n updatedTaskDataMap[taskId] = data;\n return {\n taskDataMap: updatedTaskDataMap\n };\n })\n }))\n);\n","import React, { useCallback, useState } from 'react';\nimport {\n Stepper,\n Step,\n StepLabel,\n StepConnector,\n Typography,\n makeStyles,\n withStyles,\n lighten,\n Button\n} from '@material-ui/core';\nimport CheckCircleIcon from '@material-ui/icons/CheckCircle';\nimport RadioButtonUncheckedIcon from '@material-ui/icons/RadioButtonUnchecked';\nimport RadioButtonCheckedIcon from '@material-ui/icons/RadioButtonChecked';\nimport { FluentIcon } from '../../utilities/FluentIcon';\nimport { ChevronRightIcon, ChevronLeftIcon } from '@fluentui/react-icons';\nimport { formatDateToLocaleString } from '../../utilities/input/DateUtilities';\nimport { DateTime } from 'luxon';\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n display: 'flex'\n },\n taskInfoBlock: {\n backgroundColor: lighten(theme.palette.primary.main, 0.3),\n width: theme.spacing(25),\n color: theme.palette.common.white,\n padding: `${theme.spacing(0.5)}px ${theme.spacing(2.25)}px`\n },\n description: {\n textOverflow: 'ellipsis',\n overflow: 'hidden',\n whiteSpace: 'nowrap'\n },\n button: {\n backgroundColor: theme.palette.primary.main,\n color: theme.palette.common.white,\n borderRadius: 0,\n '&:hover': {\n backgroundColor: theme.palette.primary.dark\n },\n minWidth: theme.spacing(3)\n },\n stepperContainer: {\n width: '100%',\n padding: 0,\n marginTop: `-${theme.spacing(1.5)}px`,\n background: 'none'\n },\n stepIconRoot: {\n zIndex: 1,\n color: theme.palette.primary.main,\n width: theme.spacing(3),\n height: theme.spacing(3),\n display: 'flex',\n borderRadius: '50%',\n justifyContent: 'center',\n alignItems: 'center',\n '&.active': {\n backgroundColor: theme.palette.primary.main,\n color: theme.palette.common.white\n },\n '&.completed': {\n backgroundColor: theme.palette.common.white,\n color: theme.palette.success.main\n }\n },\n stepLabel: {\n '& > .MuiStepLabel-label': {\n marginTop: theme.spacing(0.5)\n }\n }\n}));\n\nconst ColorLibConnector = withStyles((theme) => ({\n connectorRoot: {\n top: 10,\n left: 'calc(-50% + 12px)',\n right: 'calc(50% + 12px)'\n },\n alternativeLabel: {\n left: 'calc(-50% + 12px)',\n right: 'calc(50% + 12px)'\n },\n active: {\n '& $line': {\n borderColor: theme.palette.primary.main\n }\n },\n completed: {\n '& $line': {\n borderColor: theme.palette.primary.main\n }\n },\n line: {\n borderTopWidth: 3,\n borderRadius: 1\n }\n}))(StepConnector);\n\nconst ColorlibStepIcon = (props) => {\n const { active, completed } = props;\n const classes = useStyles();\n const rootClass = `${classes.stepIconRoot} ${active ? 'active' : ''} ${\n completed ? 'completed' : ''\n }`;\n\n return (\n <div className={rootClass}>\n {completed ? (\n <CheckCircleIcon />\n ) : active ? (\n <RadioButtonCheckedIcon />\n ) : (\n <RadioButtonUncheckedIcon />\n )}\n </div>\n );\n};\n\nexport const WorkflowTaskFlow = (props) => {\n const { steps = [], handleClick = () => {}, task } = props;\n const classes = useStyles();\n const [activeStep, setActiveStep] = useState(0);\n\n const handleStepClick = (stepIndex) => {\n handleClick(stepIndex);\n setActiveStep(stepIndex);\n };\n\n const handleOnLeftButtonClick = useCallback(() => {\n if (activeStep > 0) {\n const newIndex = activeStep - 1;\n handleClick(newIndex);\n setActiveStep(newIndex);\n }\n }, [activeStep, handleClick]);\n\n const handleOnRightButtonClick = useCallback(() => {\n if (activeStep !== steps?.length - 1) {\n const newIndex = activeStep + 1;\n handleClick(newIndex);\n setActiveStep(newIndex);\n }\n }, [steps, activeStep, handleClick]);\n\n const getFormattedDueDate = useCallback((date) => {\n if (!date) {\n return '';\n }\n const shortDate = formatDateToLocaleString(date, DateTime.DATE_SHORT);\n return `Due ${shortDate}`;\n }, []);\n\n return (\n <div className={classes.root}>\n <div className={classes.taskInfoBlock}>\n <div className={classes.description}>\n <Typography variant='caption'>\n {task?.properties?.nodeLabel || ''}\n </Typography>\n </div>\n <div className={classes.description}>\n <Typography variant='caption' style={{ fontWeight: 500 }}>\n {getFormattedDueDate(task?.properties?.dueDate)}\n </Typography>\n </div>\n </div>\n <Button className={classes.button} onClick={handleOnLeftButtonClick}>\n <FluentIcon component={ChevronLeftIcon} />\n </Button>\n <Stepper\n alternativeLabel\n activeStep={activeStep}\n connector={<ColorLibConnector />}\n className={classes.stepperContainer}\n >\n {steps.map((step, index) => (\n <Step key={step.label} onClick={() => handleStepClick(index)}>\n <StepLabel\n classes={{ labelContainer: classes.stepLabel }}\n StepIconComponent={ColorlibStepIcon}\n >\n <Typography variant='caption'>{step.label}</Typography>\n </StepLabel>\n </Step>\n ))}\n </Stepper>\n <Button className={classes.button} onClick={handleOnRightButtonClick}>\n <FluentIcon component={ChevronRightIcon} />\n </Button>\n </div>\n );\n};\n","import React from 'react';\nimport { LinearProgress as MuiLinearProgress } from '@material-ui/core';\nimport { makeStyles } from '@material-ui/core/styles';\nimport clsx from 'clsx';\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n backgroundColor: theme.palette.grey[300]\n },\n barColorPrimary: {\n backgroundColor: theme.palette.primary.main\n },\n barColorSecondary: {\n backgroundColor: theme.palette.secondary.main\n },\n barColorSuccess: {\n backgroundColor: theme.palette.success.main\n },\n barColorError: {\n backgroundColor: theme.palette.error.main\n },\n barColorWarning: {\n backgroundColor: theme.palette.warning.main\n },\n barColorInfo: {\n backgroundColor: theme.palette.info.main\n },\n // Custom bar color class\n customColorBar: (props) => ({\n backgroundColor: props.color\n })\n}));\n\nexport const LinearProgress = (props) => {\n const {\n variant = 'indeterminate',\n value,\n color = 'primary',\n ...otherProps\n } = props;\n\n const isPredefinedColor = [\n 'primary',\n 'secondary',\n 'success',\n 'error',\n 'warning',\n 'info'\n ].includes(color);\n const classes = useStyles({ color });\n\n return (\n <MuiLinearProgress\n {...otherProps}\n variant={variant}\n value={value}\n classes={{\n root: classes.root,\n bar: clsx({\n [classes.barColorPrimary]: color === 'primary',\n [classes.barColorSecondary]: color === 'secondary',\n [classes.barColorSuccess]: color === 'success',\n [classes.barColorError]: color === 'error',\n [classes.barColorWarning]: color === 'warning',\n [classes.barColorInfo]: color === 'info',\n [classes.customColorBar]: !isPredefinedColor\n })\n }}\n />\n );\n};\n","import React from 'react';\nimport { CircularProgress as MuiCircularProgress } from '@material-ui/core';\nimport { makeStyles } from '@material-ui/core/styles';\nimport clsx from 'clsx';\n\nconst useStyles = makeStyles(theme => ({\n circleColorPrimary: {\n color: theme.palette.primary.main,\n },\n circleColorSecondary: {\n color: theme.palette.secondary.main,\n },\n circleColorSuccess: {\n color: theme.palette.success.main,\n },\n circleColorError: {\n color: theme.palette.error.main,\n },\n circleColorWarning: {\n color: theme.palette.warning.main,\n },\n circleColorInfo: {\n color: theme.palette.info.main,\n },\n // Custom circle color class\n customColorCircle: props => ({\n backgroundColor: props.color,\n }),\n}));\n\nexport const CircularProgress = props => {\n const {\n variant = 'indeterminate',\n value,\n color = 'primary',\n ...otherProps\n } = props;\n\n const isPredefinedColor = [\n 'primary',\n 'secondary',\n 'success',\n 'error',\n 'warning',\n 'info',\n ].includes(color);\n const classes = useStyles({ color });\n\n return (\n <MuiCircularProgress\n {...otherProps}\n variant={variant}\n value={value}\n classes={{\n root: classes.root,\n circle: clsx({\n [classes.circleColorPrimary]: color === 'primary',\n [classes.circleColorSecondary]: color === 'secondary',\n [classes.circleColorSuccess]: color === 'success',\n [classes.circleColorError]: color === 'error',\n [classes.circleColorWarning]: color === 'warning',\n [classes.circleColorInfo]: color === 'info',\n [classes.customColorCircle]: !isPredefinedColor,\n }),\n }}\n />\n );\n};\n","import React, {\n useCallback,\n useEffect,\n useMemo,\n useState,\n useRef\n} from 'react';\nimport { useAxiosGet } from '../utilities/useAxiosGet';\nimport { makeStyles } from '@material-ui/core';\nimport { PageContainer } from '../page/PageContainer';\nimport { useUser } from '../utilities/auth/useUser';\nimport { PrimaryActionHeader } from '../UI/utilityDisplay/utilityHeader/PrimaryActionHeader';\nimport { Card } from '@material-ui/core';\nimport { useWorkflowStore } from '../stores/workflowStore';\nimport { apiMutate } from '../utilities/useAxiosMutate';\nimport { WorkflowTaskFlow } from './components/WorkflowTaskFlow';\nimport { orderBy } from 'lodash';\nimport { UnitStateType } from '../enums/workflowEnums';\nimport { LinearProgress } from '../UI/loading/LinearProgress';\nimport { FluentTextFieldAutoComplete } from '../UI/inputs/textField/FluentTextFieldAutoComplete';\nimport { useTranslation } from 'react-i18next';\nimport { CancelIcon, ForwardIcon } from '@fluentui/react-icons';\nimport { SideSheet } from '../UI/surfaces/SideSheet';\nimport { Field, Form } from '../utilities/form';\nimport { cloneDeep } from 'lodash';\nimport { CircularProgress } from '../UI/loading/CircularProgress';\nimport { ConfigService } from 'udp-react-stencil-component-library';\n\nconst useStyles = makeStyles((theme) => ({\n root: {},\n loadingContent: {\n flex: 1,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n height: 'calc(100vh - 160px)'\n }\n}));\n\nexport const WorkflowUiInterruptContent = (props) => {\n const {\n selectedNode,\n workflow,\n reloadWorkflow,\n users,\n groups,\n handleClose,\n inquiryPageParams = {}\n } = props;\n const classes = useStyles();\n const [selectedPageId, setSelectedPageId] = useState('');\n const [currentWorkflowStep, setCurrentWorkflowStep] = useState(0);\n const [loading, setLoading] = useState(false);\n const [loadingTaskData, setLoadingTaskData] = useState(true);\n const [reassignSidesheetOpen, setReassignSidesheetOpen] = useState(false);\n const [reassigningAssignee, setReassigningAssignee] = useState(false);\n const [workflowPageData, setWorkflowPageData] = useState(null);\n const [orderedPageData, setOrderedPageData] = useState([]);\n const user = useUser();\n const taskDataMap = useWorkflowStore((state) => state.taskDataMap);\n const setTaskDataMap = useWorkflowStore((state) => state.setTaskDataMap);\n const { t } = useTranslation();\n const formRef = useRef(null);\n\n const [{ data: pageData, loading: pageLoading, error: pageError }] =\n useAxiosGet(\n ConfigService.tenantV1ApiUrl,\n `page/${selectedPageId}`,\n {},\n !!!selectedPageId,\n false\n );\n\n const [\n { data: playScene, loading: playSceneLoading, error: playSceneError },\n fetchPlayScene\n ] = useAxiosGet(\n ConfigService.maestroV1ApiUrl,\n `maestro/play/scene/${\n selectedNode?.properties?.playSceneId || null\n }?includeData=true`,\n {},\n !!!selectedNode?.properties?.playSceneId,\n false\n );\n\n const updatePlaySceneData = useCallback(\n async (data = '') =>\n apiMutate(\n ConfigService.maestroV1ApiUrl,\n `maestro/play/scene/${\n selectedNode?.properties?.playSceneId || null\n }/data`,\n {\n method: 'put'\n },\n { data: data }\n ),\n [selectedNode]\n );\n\n const updatePlaySceneState = useCallback(\n async (data = {}, sceneState) =>\n apiMutate(\n ConfigService.maestroV1ApiUrl,\n `maestro/play/scene/${\n selectedNode?.properties?.playSceneId || null\n }/${sceneState}`,\n {\n method: 'put'\n },\n { data: data }\n ),\n [selectedNode]\n );\n\n const updatePlaySceneAssignee = useCallback(\n async (data = '') =>\n apiMutate(\n ConfigService.maestroV1ApiUrl,\n `maestro/play/scene/${\n selectedNode?.properties?.playSceneId || null\n }/assignee`,\n {\n method: 'put'\n },\n { data: data }\n ),\n [selectedNode]\n );\n\n const closeReassignmentSheet = useCallback(() => {\n setReassignSidesheetOpen(false);\n }, []);\n\n const workflowTaskSteps = useMemo(() => {\n if (!selectedNode?.properties?.interruptPages) {\n return [];\n }\n const orderedInterruptPages = orderBy(\n selectedNode.properties.interruptPages,\n ['sequenceNo'],\n ['asc']\n );\n const steps = orderedInterruptPages.reduce((list, ip) => {\n const step = {\n label: ip.displayName || ip.page?.name,\n pageId: ip.page?.pageId,\n requiredFieldMapping: ip.requiredFieldMapping\n };\n list.push(step);\n return list;\n }, []);\n return steps;\n }, [selectedNode]);\n\n const assigneeOptions = useMemo(() => {\n const formattedUsers =\n users?.reduce((list, user) => {\n list.push({\n id: user?.unityId || '',\n name: `${user?.displayName} - (User)` || ''\n });\n return list;\n }, []) || [];\n const formattedGroups =\n groups.reduce((list, group) => {\n list.push({\n id: group?.groupId || '',\n name: `${group?.name} - (Group)` || ''\n });\n return list;\n }, []) || [];\n const options = formattedUsers.concat(formattedGroups);\n return options;\n }, [users, groups]);\n\n const saveCurrentWorkflowData = useCallback(async () => {\n let playSceneData = null;\n if (selectedNode?.properties?.playSceneId) {\n playSceneData = taskDataMap[selectedNode.properties.playSceneId];\n }\n if (playSceneData) {\n await updatePlaySceneData({\n data: JSON.stringify(playSceneData)\n });\n await fetchPlayScene();\n }\n }, [taskDataMap, fetchPlayScene, updatePlaySceneData, selectedNode]);\n\n const updateWorkflowPageData = useCallback(\n async (data, pageId) => {\n if (!selectedNode?.properties?.playSceneId || !pageId) {\n console.warn('No TaskId or PageId availble to save Workflow Page Data');\n return;\n }\n if (\n selectedNode?.properties?.state === UnitStateType.Initial ||\n selectedNode?.properties?.state === UnitStateType.Completed ||\n selectedNode?.properties?.state === UnitStateType.Cancelled ||\n selectedNode?.properties?.state === UnitStateType.Failed\n ) {\n return;\n }\n\n let playSceneData = null;\n if (selectedNode?.properties?.playSceneId) {\n playSceneData = taskDataMap[selectedNode.properties.playSceneId];\n if (playSceneData) {\n playSceneData[pageId] = data;\n }\n }\n if (playSceneData) {\n await updatePlaySceneData({\n data: JSON.stringify(playSceneData)\n });\n await fetchPlayScene();\n }\n },\n [selectedNode, fetchPlayScene, taskDataMap, updatePlaySceneData]\n );\n\n const handleTaskChange = useCallback(async (step) => {\n setCurrentWorkflowStep(step);\n }, []);\n\n const handleTaskSubmit = useCallback(async () => {\n setLoading(true);\n await saveCurrentWorkflowData();\n await updatePlaySceneState('', 2);\n await reloadWorkflow();\n setLoading(false);\n }, [updatePlaySceneState, reloadWorkflow, saveCurrentWorkflowData]);\n\n const secondaryButtons = useMemo(() => {\n const buttons = [];\n if (handleClose) {\n buttons.push({\n label: t('Close'),\n component: CancelIcon,\n click: () => handleClose()\n });\n }\n if (selectedNode?.properties?.state !== UnitStateType.Started) {\n return buttons;\n }\n buttons.push({\n label: t('Reassign'),\n component: ForwardIcon,\n click: () => setReassignSidesheetOpen(true)\n });\n return buttons;\n }, [t, selectedNode, handleClose]);\n\n const handleReassignment = useCallback(() => {\n formRef?.current.form.submit();\n }, []);\n\n const reassignTask = useCallback(\n async (values) => {\n setReassigningAssignee(true);\n await updatePlaySceneAssignee({\n data: values?.assignee?.id || ''\n });\n await fetchPlayScene();\n setReassigningAssignee(false);\n closeReassignmentSheet();\n },\n [updatePlaySceneAssignee, fetchPlayScene, closeReassignmentSheet]\n );\n\n const requiredFieldMapping = useMemo(() => {\n const step = workflowTaskSteps?.find(\n (wts) => wts.pageId === pageData?.pageId\n );\n let fieldMapping = step?.requiredFieldMapping\n ? cloneDeep(step.requiredFieldMapping)\n : {};\n const workflowVariables = selectedNode?.properties?.variables || null;\n if (!!fieldMapping && !!workflowVariables) {\n Object.keys(fieldMapping)?.forEach((rfmKey) => {\n const requiredField = fieldMapping[rfmKey];\n if (!!requiredField?.value) {\n if (requiredField?.type === 'workflowVariable') {\n let matchedVariable = false;\n Object.keys(workflowVariables).forEach((key) => {\n if (requiredField.value === key) {\n requiredField.value = workflowVariables[key] || '';\n matchedVariable = true;\n return;\n }\n });\n if (!matchedVariable) {\n requiredField.value = null;\n }\n }\n }\n });\n }\n return fieldMapping || {};\n }, [pageData?.pageId, selectedNode, workflowTaskSteps]);\n\n const pageWidgetParams = useMemo(() => {\n const requiredFieldsMap = Object.keys(requiredFieldMapping).reduce(\n (fieldMap, key) => {\n fieldMap[key] = requiredFieldMapping[key]?.value || '';\n return fieldMap;\n },\n {}\n );\n\n // have to pass in unimplemented parameters because certain pages\n // are used in action sheets/screens\n return {\n setSideSheetWidth: () => {\n console.warn('setSideSheetWidth Not implemented');\n },\n setSideSheetButtonLabel: () => {\n console.warn('setSideSheetButtonLabel Not implemented');\n },\n setSideSheetOnSubmit: () => {\n console.warn('setSideSheetOnSubmit Not implemented');\n },\n setSideSheetAdditionalOnClose: () => {\n console.warn('setSideSheetAdditionalOnClose Not implemented');\n },\n setSideSheetProps: () => {\n console.warn('setSideSheetProps Not implemented');\n },\n closeSideSheet: () => {\n console.warn('closeSideSheet Not implemented');\n },\n onCreate: () => {\n console.warn('onCreate Not implemented');\n },\n onUpdate: () => {\n console.warn('onUpdate Not implemented');\n },\n ...inquiryPageParams,\n pageId: pageData?.pageId,\n updateWorkflowPageData: (data) =>\n updateWorkflowPageData(data, pageData?.pageId),\n workflowTask: selectedNode,\n workflowPageData: { ...requiredFieldsMap, ...workflowPageData }, // workflowPageData will overwrite the requiredField values\n requiredFieldsMap: requiredFieldMapping || null,\n currentWorkflowStep,\n orderedWorkflowPageData: orderedPageData\n };\n }, [\n pageData?.pageId,\n selectedNode,\n workflowPageData,\n updateWorkflowPageData,\n requiredFieldMapping,\n inquiryPageParams,\n currentWorkflowStep,\n orderedPageData\n ]);\n\n const currentAssignee = useMemo(() => {\n if (!playScene?.assignee || !assigneeOptions?.length) {\n return '';\n }\n const matchingAssignee = assigneeOptions.find(\n (assignee) => assignee.id === playScene.assignee\n );\n return matchingAssignee || '';\n }, [playScene, assigneeOptions]);\n\n const pageHeight = useMemo(() => 'calc(100vh - 162px)', []);\n\n useEffect(() => {\n if (\n !selectedNode?.properties?.playSceneId ||\n !selectedPageId ||\n loadingTaskData\n ) {\n setWorkflowPageData(null);\n return;\n }\n if (\n taskDataMap?.[selectedNode.properties.playSceneId] &&\n taskDataMap[selectedNode.properties.playSceneId][selectedPageId]\n ) {\n setWorkflowPageData(\n taskDataMap[selectedNode.properties.playSceneId][selectedPageId]\n );\n return;\n }\n // Use this condition for making sure workflowPageData is resolved before\n // returning value so that PageContainer will render\n if (\n Object.keys(taskDataMap).length &&\n selectedNode?.properties?.playSceneId &&\n selectedPageId &&\n !playSceneLoading &&\n !loadingTaskData\n ) {\n setWorkflowPageData((prevData) => {\n if (!prevData) {\n return {};\n } else if (!Object.keys(prevData).length) {\n return prevData;\n }\n });\n return;\n }\n setWorkflowPageData(null);\n }, [\n selectedNode,\n selectedPageId,\n taskDataMap,\n loadingTaskData,\n playSceneLoading,\n workflowTaskSteps\n ]);\n\n useEffect(() => {\n if (workflowTaskSteps?.length) {\n setSelectedPageId(workflowTaskSteps[currentWorkflowStep]?.pageId);\n }\n }, [workflowTaskSteps, currentWorkflowStep]);\n\n useEffect(() => {\n setLoadingTaskData(true);\n if (!playSceneLoading && selectedNode?.properties?.playSceneId) {\n const json = playScene?.data ? JSON.parse(playScene.data) : {};\n setTaskDataMap(selectedNode.properties.playSceneId, json);\n }\n setLoadingTaskData(false);\n }, [playScene, playSceneLoading, setTaskDataMap, selectedNode]);\n\n useEffect(() => {\n const orderedData = [];\n if (taskDataMap?.[selectedNode.properties.playSceneId]) {\n workflowTaskSteps.forEach((step) => {\n orderedData.push(\n taskDataMap[selectedNode.properties.playSceneId][step.pageId] || {}\n );\n });\n }\n setOrderedPageData(orderedData);\n }, [taskDataMap, workflowTaskSteps, selectedNode]);\n\n return (\n <div>\n <Card\n variant={'outlined'}\n style={{\n border: 'none',\n paddingBottom: workflowTaskSteps?.length > 1 ? 10 : 0\n }}\n >\n <PrimaryActionHeader\n single\n title={workflow?.name}\n buttonLabel={'Submit'}\n handleClick={handleTaskSubmit}\n pabDisabled={\n selectedNode?.properties?.state !== UnitStateType.Started\n }\n secondaryButtons={secondaryButtons}\n />\n {loading && <LinearProgress />}\n </Card>\n {workflowTaskSteps?.length > 1 && (\n <WorkflowTaskFlow\n steps={workflowTaskSteps}\n handleClick={handleTaskChange}\n task={selectedNode}\n />\n )}\n {selectedPageId && workflowPageData ? (\n <PageContainer\n user={user}\n // key={playScene?.playSceneId || selectedNode?.id}\n key={selectedPageId}\n pageData={pageData}\n pageLoading={pageLoading}\n widgetParams={pageWidgetParams}\n disableMargins={true}\n fromMenu={true}\n height={pageHeight}\n />\n ) : (\n <div className={classes.loadingContent}>\n <CircularProgress size={64} />\n </div>\n )}\n <SideSheet\n open={reassignSidesheetOpen}\n buttonLabel={t('Reassign')}\n onClose={closeReassignmentSheet}\n onSubmit={handleReassignment}\n title={t('Reassign Task')}\n width={'25%'}\n progress={reassigningAssignee}\n variant='indeterminate'\n >\n <Form onSubmit={reassignTask} ref={formRef}>\n <Field\n component={FluentTextFieldAutoComplete}\n name='assignee'\n id='assignee'\n label={t('Assignee')}\n initialValue={currentAssignee || ''}\n options={assigneeOptions || []}\n optionKey={'name'}\n variant='outlined'\n margin='dense'\n />\n </Form>\n </SideSheet>\n </div>\n );\n};\n","import React, { useEffect, useMemo, useRef, useState } from 'react';\nimport { makeStyles, Box, Grow, Card } from '@material-ui/core';\nimport PhoneImage from '../../../assets/images/phone.png';\nimport { PrimaryActionHeader } from '../../utilityDisplay/utilityHeader/PrimaryActionHeader';\nimport { useTranslation } from 'react-i18next';\nimport { CancelIcon } from '@fluentui/react-icons';\n\nconst useStyles = makeStyles((theme) => ({\n messages: {\n flex: '1',\n // height: '100%',\n margin: '0 20px',\n overflow: 'hidden'\n },\n messagesBox: {\n paddingRight: '3%',\n paddingLeft: '3%',\n width: '23vw',\n height: '88%',\n overflowY: 'auto',\n boxSizing: 'border-box',\n display: 'flex',\n justifyContent: 'center'\n },\n message: {\n backgroundColor: '#E9E9EB',\n borderRadius: '10px',\n padding: '10px',\n marginBottom: '10px',\n alignSelf: 'flex-start',\n overflowWrap: 'break-word',\n margin: theme.spacing(1)\n },\n messageSection: {\n flex: '1',\n overflowY: 'auto',\n padding: '20px',\n backgroundImage: `url(${PhoneImage})`,\n backgroundSize: 'contain',\n backgroundRepeat: 'no-repeat',\n backgroundPosition: 'center',\n position: 'relative',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n height: 'calc(100vh - 140px)' // Ensures the container takes full viewport height\n }\n}));\n\nexport const SmsDisplay = (props) => {\n const { messages = [], to, from, title, handleClose } = props;\n const classes = useStyles();\n const [messagesList, setMessagesList] = useState(messages);\n const { t } = useTranslation();\n\n const messagesBoxRef = useRef(null);\n\n const secondaryButtons = useMemo(() => {\n const buttons = [];\n if (handleClose) {\n buttons.push({\n label: t('Close'),\n component: CancelIcon,\n click: () => handleClose()\n });\n }\n return buttons;\n }, [t, handleClose]);\n\n useEffect(() => {\n if (messagesBoxRef.current) {\n messagesBoxRef.current.scrollTop = messagesBoxRef.current.scrollHeight;\n }\n }, [messagesList]);\n\n return (\n <>\n <Card square>\n <PrimaryActionHeader\n // key={`${selectedNode?.id}-${inSearch}`}\n // title={headerTitle}\n // buttonLabel={'Load'}\n // secondaryButtons={secondaryButtons}\n // handleClick={handlePrimaryAction}\n // single\n hidePAB={true}\n title={title}\n subheader={`To: ${to} . From: ${from}`}\n secondaryButtons={secondaryButtons}\n />\n </Card>\n <Box className={classes.messages}>\n <Box className={classes.messageSection}>\n <Box className={classes.messagesBox} ref={messagesBoxRef}>\n {messagesList.map((message, index) => (\n <Grow key={index} in={true} timeout={800}>\n <Box\n className={classes.message}\n dangerouslySetInnerHTML={{ __html: message }}\n />\n </Grow>\n ))}\n </Box>\n </Box>\n </Box>\n </>\n );\n};\n","import React, { useMemo } from 'react';\nimport { makeStyles, Card } from '@material-ui/core';\nimport ReactHtmlParser from 'react-html-parser';\nimport { PrimaryActionHeader } from '../../utilityDisplay/utilityHeader/PrimaryActionHeader';\nimport { LayoutUnit } from '../../../layout/LayoutUnit';\nimport { useTranslation } from 'react-i18next';\nimport { CancelIcon } from '@fluentui/react-icons';\n\nconst useStyles = makeStyles((theme) => ({\n htmlContainer: { display: 'flex', justifyContent: 'center' }\n}));\n\nexport const EmailDisplay = (props) => {\n const { html = '', to, from, title, handleClose } = props;\n const classes = useStyles();\n const { t } = useTranslation();\n\n const secondaryButtons = useMemo(() => {\n const buttons = [];\n if (handleClose) {\n buttons.push({\n label: t('Close'),\n component: CancelIcon,\n click: () => handleClose()\n });\n }\n return buttons;\n }, [t, handleClose]);\n\n return (\n <>\n <Card square>\n <PrimaryActionHeader\n // key={`${selectedNode?.id}-${inSearch}`}\n // title={headerTitle}\n // buttonLabel={'Load'}\n // secondaryButtons={secondaryButtons}\n // handleClick={handlePrimaryAction}\n // single\n hidePAB={true}\n title={title}\n subheader={`To: ${to} . From: ${from}`}\n secondaryButtons={secondaryButtons}\n />\n </Card>\n <LayoutUnit unit='sm' />\n <div className={classes.htmlContainer}>{ReactHtmlParser(html)}</div>\n </>\n );\n};\n","import React, { useMemo } from 'react';\nimport { useAxiosGet } from '../utilities/useAxiosGet';\nimport { makeStyles } from '@material-ui/core';\nimport { PageContainer } from '../page/PageContainer';\nimport { useUser } from '../utilities/auth/useUser';\nimport {\n APP_RIBBON_SPACE,\n useBuildEnvironment\n} from '../shell/ui/EnvironmentRibbon';\nimport { UnitTypeEnums } from '../enums/workflowEnums';\nimport { WorkflowUiInterruptContent } from './WorkflowUiInterruptContent';\nimport { SmsDisplay } from '../UI/components/dataDisplay/SmsDisplay';\nimport { EmailDisplay } from '../UI/components/dataDisplay/EmailDisplay';\nimport { ConfigService } from 'udp-react-stencil-component-library';\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n height: '100%'\n }\n}));\n\nexport const WorkflowContent = (props) => {\n const {\n selectedNode,\n workflow,\n reloadWorkflow,\n users,\n groups,\n handleClose,\n inquiryPageParams = {}\n } = props;\n const buildEnv = useBuildEnvironment();\n const classes = useStyles({\n ...props,\n appRibbonSpace: buildEnv ? APP_RIBBON_SPACE : 0\n });\n const user = useUser();\n\n const [{ data: pageData, loading: pageLoading, error: pageError }] =\n useAxiosGet(\n ConfigService.tenantV1ApiUrl,\n `page/${selectedNode?.properties?.page?.id}`,\n {},\n !!!selectedNode?.properties?.page?.id,\n false\n );\n\n const content = useMemo(() => {\n let res = null;\n if (selectedNode?.properties?.type === UnitTypeEnums.Scene) {\n res = (\n <WorkflowUiInterruptContent\n key={selectedNode.id}\n selectedNode={selectedNode}\n workflow={workflow}\n reloadWorkflow={reloadWorkflow}\n users={users}\n groups={groups}\n handleClose={handleClose}\n inquiryPageParams={inquiryPageParams}\n />\n );\n } else if (selectedNode?.properties?.type === UnitTypeEnums.Sms) {\n res = (\n <SmsDisplay\n messages={[selectedNode?.properties?.sms?.body || '']}\n to={selectedNode?.properties?.sms?.to || ''}\n from={selectedNode?.properties?.sms?.from || ''}\n title={selectedNode?.properties?.nodeLabel || ''}\n handleClose={handleClose}\n />\n );\n } else if (selectedNode?.properties?.type === UnitTypeEnums.Mail) {\n res = (\n <EmailDisplay\n html={\n selectedNode?.properties?.email?.html ||\n selectedNode?.properties?.email?.text ||\n ''\n }\n to={selectedNode?.properties?.email?.to || ''}\n from={selectedNode?.properties?.email?.from || ''}\n title={selectedNode?.properties?.nodeLabel || ''}\n handleClose={handleClose}\n />\n );\n } else if (selectedNode?.properties?.page?.id) {\n res = (\n <PageContainer\n user={user}\n key={selectedNode?.id}\n pageData={pageData}\n pageLoading={pageLoading}\n widgetParams={{\n pageId: pageData?.pageId,\n entityName: selectedNode?.properties?.page?.entity?.entityName,\n pbiReportCode: selectedNode?.properties?.page?.pbiReportCode,\n requiredFieldsMap:\n selectedNode?.properties?.page?.requiredFieldMapping,\n udpTagId: selectedNode?.properties?.page?.udpTagId,\n queryId: selectedNode?.properties?.page?.queryId,\n inquiryTreeId: selectedNode?.properties?.page?.inquiryTreeId\n }}\n disableMargins={true}\n fromMenu={true}\n />\n );\n }\n return res;\n }, [\n groups,\n pageData,\n pageLoading,\n reloadWorkflow,\n selectedNode,\n user,\n users,\n workflow,\n handleClose\n ]);\n\n return <div className={classes.root}>{content}</div>;\n};\n","import { useHistory, useLocation } from 'react-router-dom';\n\nexport const useUpdateSearchParams = () => {\n const history = useHistory();\n const location = useLocation();\n\n const updateSearchParams = (params) => {\n const searchParams = new URLSearchParams(location.search);\n\n Object.keys(params).forEach((key) => {\n if (params[key] !== null) {\n searchParams.set(key, params[key]);\n } else {\n searchParams.delete(key);\n }\n });\n\n history.push({\n pathname: location.pathname,\n search: searchParams.toString()\n });\n };\n\n return updateSearchParams;\n};\n","import React, { useCallback, useEffect, useState } from 'react';\nimport { useLocation } from 'react-router-dom';\nimport { useAxiosGet } from '../utilities/useAxiosGet';\nimport { UtilitySideBar } from '../UI/utilityDisplay/UtilitySideBar';\nimport { makeStyles } from '@material-ui/core';\nimport { WorkflowTreeMenu } from './menus/WorkflowTreeMenu';\nimport { TreeViewModeEnums } from '../enums/unitySystemEnums';\nimport { DndProvider } from 'react-dnd';\nimport { HTML5Backend } from 'react-dnd-html5-backend';\nimport { useShellStore } from '../stores/shellStore';\nimport { NodeLoader } from '../UI/feedback/NodeLoader';\nimport {\n APP_RIBBON_SPACE,\n useBuildEnvironment\n} from '../shell/ui/EnvironmentRibbon';\nimport { WorkflowContent } from './WorkflowContent';\nimport {\n transformWorkflowPlayTree,\n updateWorkflowPlayNodeState\n} from '../utilities/workflow/workflowUtilities';\nimport { useUpdateSearchParams } from '../hooks/useUpdateSearchParams';\nimport { useUser } from '../utilities/auth/useUser';\nimport { apiMutate } from '../utilities/useAxiosMutate';\nimport { useSetLocationState } from '../hooks/useSetLocationState';\nimport { useTranslation } from 'react-i18next';\nimport { ConfigService } from 'udp-react-stencil-component-library';\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n flex: 1,\n minHeight: ({ appRibbonSpace }) => `calc(100vh - ${appRibbonSpace + 56}px)`,\n display: 'grid',\n gridTemplateAreas: ['sidebar content'].map((line) => `\"${line}\"`).join(' '),\n gridTemplateColumns: 'auto 1fr',\n gridTemplateRows: 'auto 1fr'\n },\n sidebar: {\n gridArea: 'sidebar',\n marginRight: theme.spacing(1)\n },\n content: {\n gridArea: 'content',\n display: 'flex',\n flexDirection: 'column',\n position: 'relative',\n zIndex: 1,\n height: ({ appRibbonSpace }) => `calc(100vh - ${appRibbonSpace + 56}px)`,\n overflowY: 'auto'\n },\n menuContent: {\n marginTop: theme.spacing(1),\n height: ({ appRibbonSpace }) => `calc(100vh - ${appRibbonSpace + 116}px)`,\n overflowX: 'hidden'\n },\n loader: {\n marginRight: theme.spacing(1),\n marginLeft: theme.spacing(1)\n },\n loadingContent: {\n flex: 1,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center'\n }\n}));\n\nexport const WorkflowContainer = (props) => {\n const { playId, taskId, autoCollapseNav = true } = props;\n const buildEnv = useBuildEnvironment();\n const classes = useStyles({\n ...props,\n appRibbonSpace: buildEnv ? APP_RIBBON_SPACE : 0\n });\n const location = useLocation();\n const updateSearchParams = useUpdateSearchParams();\n const user = useUser();\n const setLocationState = useSetLocationState();\n const { t } = useTranslation();\n\n const [menuItemsList, setMenuItemsList] = useState([]); // holds a list of trees\n const [selectedNode, setSelectedNode] = useState(null);\n const [sidebarExpanded, setSidebarExpanded] = useState(true);\n const [reloadFromPage, setReloadFromPage] = useState(false);\n const [workflow, setWorkflow] = useState(false);\n\n const state = location.state;\n let searchParamStr = location.search;\n let searchParams = new URLSearchParams(searchParamStr);\n const urlPlayId = location.pathname.replace('/workflowtask/', '');\n const udpPlayId =\n playId ||\n urlPlayId ||\n (state\n ? state.playId\n : searchParams.has('playId') === true\n ? searchParams.get('playId')\n : '');\n\n const udpTaskId =\n taskId ||\n (state\n ? state.taskId\n : searchParams.has('taskId') === true\n ? searchParams.get('taskId')\n : '');\n\n const [{ data: workflowPlay, loading: workflowPlayLoading }, reloadWorkflow] =\n useAxiosGet(\n ConfigService.builderV1ApiUrl,\n `workflow/play/${udpPlayId}`,\n {},\n !!!udpPlayId,\n false\n );\n\n const [{ data: users }] = useAxiosGet(\n ConfigService.securityV1ApiUrl,\n `users?tenantId=${user?.currentTenantId || ''}`,\n {},\n !!!user?.currentTenantId\n );\n\n const [{ data: groups }] = useAxiosGet(\n ConfigService.tenantV1ApiUrl,\n `groups?tenantId=${user?.currentTenantId || ''}&productId=${\n ConfigService.config.UNITY_PRODUCT_ID\n }`,\n {},\n !!!user?.currentTenantId\n );\n\n // const getNodeState = useCallback(\n // async (nodeId) =>\n // apiMutate(\n // ConfigService.builderV1ApiUrl,\n // `workflow/play/${udpPlayId}/node/${nodeId}/state`,\n // {\n // method: 'get'\n // }\n // ),\n // [udpPlayId]\n // );\n\n const { setSubHeaderActionHasChildren, setNavigationExpanded } =\n useShellStore();\n\n const handleReloadWorkflow = useCallback(async () => {\n setReloadFromPage(true);\n await reloadWorkflow();\n setReloadFromPage(false);\n }, [reloadWorkflow]);\n\n const handleSelectedNode = useCallback(\n async (node, menuIndex) => {\n if (node.isSelectable) {\n setSelectedNode(node);\n await handleReloadWorkflow();\n if (node?.properties?.playSceneId) {\n updateSearchParams({ taskId: node.properties.playSceneId });\n }\n }\n },\n [updateSearchParams, handleReloadWorkflow]\n );\n\n const handleDropNode = useCallback(\n (sourceNode, targetNode, sourceNodeMenuIndex, targetNodeMenuIndex) => {\n // TODO: Implement if we need to for next Phase\n },\n []\n );\n\n const handleSidebarExpandClick = useCallback(() => {\n setSidebarExpanded((expanded) => !expanded);\n }, []);\n\n useEffect(() => {\n if (workflowPlay) {\n setWorkflow(workflowPlay);\n }\n }, [workflowPlay]);\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('Workflow') });\n }, [setLocationState, t]);\n\n // this is used for updating the state node for page use\n useEffect(() => {\n if (workflow) {\n setSelectedNode((prevNode) => {\n if (!!prevNode) {\n const foundNode = workflow.workflowPlayNode?.children?.find(\n (child) => child.id === prevNode.id\n );\n if (!!foundNode) {\n const updatedNode = { ...prevNode };\n // TODO: using this to update state for now but may need to update\n // other properties of the selected node when we pull workflow tree\n updatedNode.properties.state = foundNode.state;\n return updatedNode;\n } else {\n return prevNode;\n }\n }\n });\n }\n }, [workflow]);\n\n useEffect(() => {\n if (workflow) {\n const list = [];\n const updatedMenu = transformWorkflowPlayTree(workflow.workflowPlayNode);\n if (updatedMenu) {\n list.push(updatedMenu);\n }\n setMenuItemsList(list);\n }\n }, [workflow]);\n\n useEffect(() => {\n if (!selectedNode) {\n const menu = menuItemsList[0];\n // Use Task Id to find the first matching node in tree\n if (menu) {\n if (!!udpTaskId) {\n const matchingTaskNode = menu.children.find(\n (child) => child?.properties?.playSceneId === udpTaskId\n );\n setSelectedNode(matchingTaskNode || menu.children[0] || null);\n } else {\n const firstSelectableMenuItem = menu?.children?.find(\n (item) => item.isSelectable\n );\n setSelectedNode(firstSelectableMenuItem || null);\n }\n if (autoCollapseNav) {\n setNavigationExpanded(false);\n }\n }\n }\n }, [\n udpTaskId,\n menuItemsList,\n selectedNode,\n setNavigationExpanded,\n autoCollapseNav\n ]);\n\n useEffect(() => {\n setSubHeaderActionHasChildren(false);\n }, [setSubHeaderActionHasChildren]);\n\n // useEffect(() => {\n // if (selectedNode) {\n // const getState = async () => {\n // const response = await getNodeState(selectedNode.id);\n // if (response.status === 200) {\n // setMenuItemsList((prevMenuList) => {\n // let updatedList = [];\n // prevMenuList.forEach((menu) => {\n // const updatedMenu = updateWorkflowPlayNodeState(\n // menu,\n // selectedNode.id,\n // response.data\n // );\n // updatedList.push(updatedMenu);\n // });\n // return updatedList;\n // });\n // }\n // };\n // getState();\n // }\n // }, [selectedNode, getNodeState]);\n\n return (\n <DndProvider backend={HTML5Backend}>\n <div className={classes.root}>\n <div className={classes.sidebar}>\n <UtilitySideBar\n title={'Workflow'}\n isUsingChildren={true}\n resizable={true}\n removePadding={true}\n removeTopLayoutUnit={true}\n onUtilitySidebarToggleExpandClick={handleSidebarExpandClick}\n collapsedWidth={64}\n >\n <div className={classes.menuContent} key={playId}>\n {menuItemsList?.length > 0 &&\n (!workflowPlayLoading || reloadFromPage) &&\n menuItemsList.map((menuItems, index) => (\n <div key={menuItems.id} className={classes.nodeContainer}>\n <WorkflowTreeMenu\n menuItems={menuItems}\n onSelectNode={handleSelectedNode}\n onDropNode={handleDropNode}\n menuIndex={index}\n selectedNodeId={selectedNode?.id}\n selectedNodeParentId={selectedNode?.parentId}\n sidebarExpanded={sidebarExpanded}\n treeViewMode={TreeViewModeEnums.Classic}\n />\n </div>\n ))}\n {workflowPlayLoading && !reloadFromPage && (\n <div className={classes.loader}>\n <NodeLoader loading={workflowPlayLoading} />\n </div>\n )}\n </div>\n </UtilitySideBar>\n </div>\n <div className={classes.content}>\n <WorkflowContent\n selectedNode={selectedNode}\n workflow={workflow}\n reloadWorkflow={handleReloadWorkflow}\n users={users}\n groups={groups}\n />\n </div>\n </div>\n </DndProvider>\n );\n};\n"],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import "./SideSheet-BsDoeNmq.js";
2
+ import "./EnvironmentRibbon-oEmbWjEq.js";
3
+ import "./apiHelpers-CmM6DWAT.js";
4
+ import "./useAxiosGet-Dh5pVURP.js";
5
+ import "./useAxiosMutate-DlG255x9.js";
6
+ import { WorkflowContainer } from "./WorkflowContainer-ClPvY2mG.js";
7
+ import "./UtilitySideBar-95k0edSA.js";
8
+ import "./SearchUtilities-Btugro8y.js";
9
+ import "./PageContainer-BPHLFGju.js";
10
+
11
+ export { WorkflowContainer };