{"version":3,"file":"WorkflowTreeMenuItem.mjs","names":["React","useCallback","makeStyles","lighten","Typography","CircularProgress","darken","useTheme","Tooltip","TreeItem","getIconFromName","clsx","UnityFluentIcon","getUnityIconFromName","useDrag","useDrop","NodeActionTriggerEnums","TreeViewModeEnums","AggregateChip","useStyles","theme","root","backgroundColor","getThemeData","mode","palette","grey","borderRight","primary","main","paddingLeft","display","props","sidebarExpanded","content","conditionalIconName","conditionalIconColor","labelRoot","alignItems","marginLeft","spacing","width","labelContainer","treeViewMode","Compact","conditionalIconContainer","labelText","fontSize","fontWeight","lineHeight","letterSpacing","captionText","labelOverflow","whiteSpace","overflow","textOverflow","marginTop","group","depth","showRightBorderColor","borderBottom","hideExpansion","isSelectedNode","iconContainer","justifyContent","marginBottom","marginRight","height","WorkflowTreeMenuItem","parentId","nodeId","iconName","iconType","conditionalIconType","label","iconColor","onNodeSelect","subLabel","isLastNode","loading","node","onDropNode","menuIndex","aggregateThresholdId","other","classes","isDragging","dragRef","type","item","sourceNodeMenuIndex","collect","monitor","handleOnDrop","sourceNode","didDrop","canDrop","isOver","dropRef","accept","drop","checkCanDrop","onDropActions","properties","nodeActions","filter","na","triggerType","On_Node_Drop","nodeDragEntities","map","action","dragEntityName","includes","catalogReturnObject","handleOnLabelClick","e","preventDefault","isDraggable","opacity","replace","color","secondary","Classic"],"sources":["../../../src/workflow/menus/WorkflowTreeMenuItem.jsx"],"sourcesContent":["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/iconLibrary/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"],"mappings":"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"}