/* eslint-disable react/no-multi-comp */ import React, {useState, useEffect, useContext} from 'react'; import ReactDOM from "react-dom" import ReactJson from "react-json-view-ssr"; import { green, yellow, red, grey} from "../views/AngularWorkflow.jsx"; import { CodeHandler, Img, OuterLink, } from "../views/Docs.jsx"; import { useNavigate, Link, useParams } from "react-router-dom"; import { validateJson, collapseField, GetIconInfo } from "../views/Workflows2.jsx"; import EditWorkflow from "../components/EditWorkflow.jsx" import { toast } from "react-toastify" import { makeStyles } from '@mui/material/styles'; import { useInterval } from "react-powerhooks"; import { isMobile } from "react-device-detect"; import Markdown from "react-markdown"; import {getTheme} from '../theme.jsx'; import rehypeRaw from "rehype-raw"; import RecentWorkflow from "../components/RecentWorkflow.jsx"; import { Tooltip, Fade, Select, IconButton, CircularProgress, TextField, Button, ButtonGroup, Paper, Typography, Divider, Dialog, DialogTitle, DialogContent, MenuItem, Autocomplete, } from '@mui/material'; import { Preview as PreviewIcon, ContentCopy as ContentCopyIcon, ArrowBack as ArrowBackIcon, ArrowForward as ArrowForwardIcon, Lock as LockIcon, LockOpen as LockOpenIcon, OpenInNew as OpenInNewIcon, Edit as EditIcon, Polyline as PolylineIcon, CheckCircle as CheckCircleIcon, DirectionsRun as DirectionsRunIcon, Error as ErrorIcon, Pause as PauseIcon, } from '@mui/icons-material'; import { Context } from '../context/ContextApi.jsx'; const hrefStyle = { color: "white", textDecoration: "none" } const RunWorkflow = (defaultprops) => { const { globalUrl, userdata, isLoaded, isLoggedIn, setIsLoggedIn, setCookie, register, serverside } = defaultprops; const { themeMode, brandColor } = useContext(Context); const theme = getTheme(themeMode, brandColor); const { supportEmail } = useContext(Context); let navigate = useNavigate(); const [_, setUpdate] = useState(""); // Used to force rendring, don't remove const [explorerUi, setExplorerUi] = useState(false) const [message, setMessage] = useState(""); const [workflow, setWorkflow] = React.useState({}); const [executionRequest, setExecutionRequest] = React.useState({}); const [executionArgument, setExecutionArgument] = useState(""); const [executionLoading, setExecutionLoading] = useState(false); const [executionData, setExecutionData] = React.useState({}); const [executionRunning, setExecutionRunning] = useState(false); const [disableButtons, setDisableButtons] = useState(false); const [workflowQuestion, setWorkflowQuestion] = useState(""); const [selectedOrganization, setSelectedOrganization] = React.useState(undefined); const [apps, setApps] = React.useState([]); const [buttonClicked, setButtonClicked] = React.useState(""); const [foundSourcenode, setFoundSourcenode] = React.useState(undefined); const [editWorkflowModalOpen, setEditWorkflowModalOpen] = React.useState(false) const [sharingOpen, setSharingOpen] = React.useState(false) const [realtimeMarkdown, setRealtimeMarkdown] = React.useState("") const [forms, setForms] = React.useState([]) const [workflows, setWorkflows] = React.useState([]) const [boxWidth, setBoxWidth] = React.useState(500) const [inputQuestions, setInputQuestions] = React.useState([]) const [agentic, setAgentic] = React.useState(false) const searchParams = new URLSearchParams(window.location.search) const answer = searchParams.get("answer") const execution_id = searchParams.get("reference_execution") const authorization = searchParams.get("authorization") const sourceNode = searchParams.get("source_node") || searchParams.get("start") const decisionId = searchParams.get("decision_id") // ONLY for agentic workflows const backendUrl = searchParams.get("backend_url") || globalUrl useEffect(() => { if (workflow === undefined || workflow === null || Object.keys(workflow).length === 0) { return } if (workflow.input_questions === undefined || workflow.input_questions === null) { return } // Checks if it's a user input-node based or not if ((answer !== undefined && answer !== null) || (foundSourcenode !== undefined && foundSourcenode !== null)) { } else { setInputQuestions(workflow.input_questions) setUpdate(Math.random()) } }, [workflow]) const IframeWrapper = (props) => { var propsCopy = JSON.parse(JSON.stringify(props)) propsCopy.width = 400 propsCopy.height = 225 return