/* ┌──────────────────────────────────────────────────────────────────────────────┐ │ @author: Davidson Gomes │ │ @file: /app/agents/workflows/nodes/components/message/MessageNode.tsx │ │ Developed by: Davidson Gomes │ │ Creation date: May 13, 2025 │ │ Contact: contato@evolution-api.com │ ├──────────────────────────────────────────────────────────────────────────────┤ │ @copyright © Evolution API 2025. All rights reserved. │ │ Licensed under the Apache License, Version 2.0 │ │ │ │ You may not use this file except in compliance with the License. │ │ You may obtain a copy of the License at │ │ │ │ http://www.apache.org/licenses/LICENSE-2.0 │ │ │ │ Unless required by applicable law or agreed to in writing, software │ │ distributed under the License is distributed on an "AS IS" BASIS, │ │ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. │ │ See the License for the specific language governing permissions and │ │ limitations under the License. │ ├──────────────────────────────────────────────────────────────────────────────┤ │ @important │ │ For any future changes to the code in this file, it is recommended to │ │ include, together with the modification, the information of the developer │ │ who changed it and the date of modification. │ └──────────────────────────────────────────────────────────────────────────────┘ */ /* eslint-disable no-unused-vars */ /* eslint-disable @typescript-eslint/no-explicit-any */ import { Handle, NodeProps, Position, useEdges } from "@xyflow/react"; import { MessageCircle, Text, Image, File, Video, ArrowRight } from "lucide-react"; import { MessageType, MessageTypeEnum } from "../../nodeFunctions"; import { Badge } from "@/components/ui/badge"; import { cn } from "@/lib/utils"; import { BaseNode } from "../../BaseNode"; export function MessageNode(props: NodeProps) { const { selected, data } = props; const edges = useEdges(); const isExecuting = data.isExecuting as boolean | undefined; const isHandleConnected = (handleId: string) => { return edges.some( (edge) => edge.source === props.id && edge.sourceHandle === handleId ); }; const isBottomHandleConnected = isHandleConnected("bottom-handle"); const message = data.message as MessageType | undefined; const getMessageTypeIcon = (type: string) => { switch (type) { case MessageTypeEnum.TEXT: return ; case "image": return ; case "file": return ; case "video": return ; default: return ; } }; const getMessageTypeColor = (type: string) => { switch (type) { case MessageTypeEnum.TEXT: return 'bg-orange-900/30 text-orange-400 border-orange-700/40'; case "image": return 'bg-blue-900/30 text-blue-400 border-blue-700/40'; case "file": return 'bg-emerald-900/30 text-emerald-400 border-emerald-700/40'; case "video": return 'bg-purple-900/30 text-purple-400 border-purple-700/40'; default: return 'bg-orange-900/30 text-orange-400 border-orange-700/40'; } }; const getMessageTypeName = (type: string) => { const messageTypes: Record = { text: "Text Message", image: "Image", file: "File", video: "Video", }; return messageTypes[type] || type; }; return ( {data.label as string} {message ? ( {getMessageTypeIcon(message.type)} {getMessageTypeName(message.type)} {message.type} {message.content && ( {message.content.slice(0, 80)} {message.content.length > 80 && '...'} )} ) : ( No message configured Click to configure )} Next step ); }
{data.label as string}
{message.content.slice(0, 80)} {message.content.length > 80 && '...'}
No message configured
Click to configure