// imports import yaml from 'yaml'; import React, { useEffect, useState } from 'react'; // icons import Tooltip from '../../../Tooltip'; import Loading from '../../../Loading'; import ApiSignal from '../../../../signals/Api'; import ButtonIcon from '../../../Button/Icon'; import { useSignal } from '../../../../signal'; import { ComponentsSignal } from '../../../../signals/Nodes'; import { IconTrash, IconRefresh } from '@chirper/react/src/icons'; /** * component studio messages * * @param props * @returns */ const ComponentWorkflowChatItem = (props = {}) => { // signals const [api] = useSignal(ApiSignal); const [components] = useSignal(ComponentsSignal); // retrying const [retrying, setRetrying] = useState(false); // parse nodes const [nodes, setNodes] = useState([]); // use effect useEffect(() => { setNodes(yaml.parse(props.item?.value || props.workflow?.commit?.value || '[]')); }, [props.item?.value, props.workflow?.commit?.value]); /** * on retry */ const onRetry = () => { // retrying setRetrying(true); // retry props.onRetry(props.item).then(() => { // retrying setRetrying(false); }).catch(() => { // retrying setRetrying(false); }); }; // return messages return (
{!props.isFirst && (

)}
{(props.item.path || []).map((key, i) => { // is last const isLast = ((props.item.state === 'failed') && (props.item.node === key)) || (i === props.item.path.length - 1); // node const node = nodes.find((n) => n.id === key); // check node if (!node?.type) return; if (node?.spec?.hidden) return; // component const Component = components[node.type]; // check component if (!Component) return null; // return jsx return ( ); })}
{retrying ? ( ) : ( )} props.onDelete(props.frame)} > {props.removing ? ( ) : ( )}
); }; /** * export component */ export default ComponentWorkflowChatItem;