import { Flex } from '@chakra-ui/react' import { ContextMenu } from 'components/shared/ContextMenu' import { Coordinates, useGraph } from 'contexts/GraphContext' import { NodePosition, useDragDistance } from 'contexts/GraphDndContext' import { useTypebot } from 'contexts/TypebotContext' import { ButtonItem, ChoiceInputStep, Item, ItemIndices, ItemType, } from 'models' import React, { useRef, useState } from 'react' import { setMultipleRefs } from 'services/utils' import { SourceEndpoint } from '../../Endpoints/SourceEndpoint' import { ItemNodeContent } from './ItemNodeContent' import { ItemNodeContextMenu } from './ItemNodeContextMenu' type Props = { item: Item indices: ItemIndices isReadOnly: boolean onMouseDown?: ( stepNodePosition: { absolute: Coordinates; relative: Coordinates }, item: ButtonItem ) => void } export const ItemNode = ({ item, indices, isReadOnly, onMouseDown }: Props) => { const { typebot } = useTypebot() const { previewingEdge } = useGraph() const [isMouseOver, setIsMouseOver] = useState(false) const itemRef = useRef(null) const isPreviewing = previewingEdge?.from.itemId === item.id const isConnectable = !( typebot?.blocks[indices.blockIndex].steps[ indices.stepIndex ] as ChoiceInputStep )?.options?.isMultipleChoice const onDrag = (position: NodePosition) => { if (!onMouseDown || item.type !== ItemType.BUTTON) return onMouseDown(position, item) } useDragDistance({ ref: itemRef, onDrag, isDisabled: !onMouseDown || item.type !== ItemType.BUTTON, }) const handleMouseEnter = () => setIsMouseOver(true) const handleMouseLeave = () => setIsMouseOver(false) return ( renderMenu={() => } > {(ref, isOpened) => ( {typebot && isConnectable && ( )} )} ) }