import PropTypes from 'prop-types' import { Handle, Position, useUpdateNodeInternals } from 'reactflow' import { useEffect, useRef, useState, useContext } from 'react' // material-ui import { useTheme, styled } from '@mui/material/styles' import { Box, Typography, Tooltip } from '@mui/material' import { tooltipClasses } from '@mui/material/Tooltip' import { flowContext } from 'store/context/ReactFlowContext' import { isValidConnection } from 'utils/genericHelper' import { Dropdown } from 'ui-component/dropdown/Dropdown' const CustomWidthTooltip = styled(({ className, ...props }) => )({ [`& .${tooltipClasses.tooltip}`]: { maxWidth: 500 } }) // ===========================|| NodeOutputHandler ||=========================== // const NodeOutputHandler = ({ outputAnchor, data, disabled = false }) => { const theme = useTheme() const ref = useRef(null) const updateNodeInternals = useUpdateNodeInternals() const [position, setPosition] = useState(0) const [dropdownValue, setDropdownValue] = useState(null) const { reactFlowInstance } = useContext(flowContext) useEffect(() => { if (ref.current && ref.current?.offsetTop && ref.current?.clientHeight) { setTimeout(() => { setPosition(ref.current?.offsetTop + ref.current?.clientHeight / 2) updateNodeInternals(data.id) }, 0) } }, [data.id, ref, updateNodeInternals]) useEffect(() => { setTimeout(() => { updateNodeInternals(data.id) }, 0) }, [data.id, position, updateNodeInternals]) useEffect(() => { if (dropdownValue) { setTimeout(() => { updateNodeInternals(data.id) }, 0) } }, [data.id, dropdownValue, updateNodeInternals]) return (
{outputAnchor.type !== 'options' && !outputAnchor.options && ( <> isValidConnection(connection, reactFlowInstance)} style={{ height: 10, width: 10, backgroundColor: data.selected ? theme.palette.primary.main : theme.palette.text.secondary, top: position }} /> {outputAnchor.label} )} {outputAnchor.type === 'options' && outputAnchor.options && outputAnchor.options.length > 0 && ( <> opt.name === data.outputs?.[outputAnchor.name])?.type ?? outputAnchor.type } > opt.name === data.outputs?.[outputAnchor.name])?.id ?? ''} isValidConnection={(connection) => isValidConnection(connection, reactFlowInstance)} style={{ height: 10, width: 10, backgroundColor: data.selected ? theme.palette.primary.main : theme.palette.text.secondary, top: position }} /> { setDropdownValue(newValue) data.outputs[outputAnchor.name] = newValue }} value={data.outputs[outputAnchor.name] ?? outputAnchor.default ?? 'choose an option'} /> )}
) } NodeOutputHandler.propTypes = { outputAnchor: PropTypes.object, data: PropTypes.object, disabled: PropTypes.bool } export default NodeOutputHandler