diff --git a/frontend/src/components/ParsedAction.jsx b/frontend/src/components/ParsedAction.jsx
index d4cf0541..0e61c322 100755
--- a/frontend/src/components/ParsedAction.jsx
+++ b/frontend/src/components/ParsedAction.jsx
@@ -132,6 +132,7 @@ const ParsedAction = (props) => {
setSelectedResult,
selectedAction,
setSelectedApp,
+ selectedTrigger,
setSelectedTrigger,
setSelectedEdge,
setCurrentView,
@@ -640,7 +641,7 @@ const ParsedAction = (props) => {
setSelectedActionParameters(newParameters);
setActionlist(newActionList);
}, [workflow.execution_variables,paramUpdate, workflow.workflow_variables, workflowExecutions, workflow, selectedAction, listCache, getParents,setNewSelectedAction]);
- console.log("Selected Action:", selectedAction)
+
useEffect(() => {
selectedNameChange(appActionName)
@@ -1895,6 +1896,78 @@ const ParsedAction = (props) => {
}
}
+ if(workflow.triggers !== undefined && workflow.triggers !== null && workflow.triggers.length > 0) {
+ for(let [key,keyval] in Object.entries(workflow.triggers)) {
+ if(workflow.triggers[key].id === selectedTrigger.id) {
+ continue
+ }
+
+ const params = workflow.triggers[key].parameters
+ if (params === null || params === undefined) {
+ continue
+ }
+
+ for (let [subkey, subkeyval] in Object.entries(params)) {
+ const param = workflow.triggers[key].parameters[subkey];
+ if(param.name === "argument" || param.name === "alertinfo"){
+ if (!param.value.includes("$")) {
+ continue
+ }
+
+ // Should have a smarter way of discovering node names
+ // Do regex?
+ // Finding index(es) and replacing at the location
+ //
+
+ try {
+ var cnt = -1
+ var previous = 0
+ while (true) {
+ cnt += 1
+ // Need to make sure e.g. changing the first here doesn't change the 2nd
+ // $change_me
+ // $change_me_2
+ const foundindex = param.value.toLowerCase().indexOf(parsedBaseLabel, previous)
+ if (foundindex === previous && foundindex !== 0) {
+ break
+ }
+
+ if (foundindex >= 0) {
+ previous = foundindex+newname.length
+ // Need to add diff of length to word
+
+ // Check location:
+ // If it's a-zA-Z_ then don't replace
+ if (param.value.length > foundindex+parsedBaseLabel.length) {
+ const regex = /[a-zA-Z0-9_]/g;
+ const match = param.value[foundindex+parsedBaseLabel.length].match(regex);
+ if (match !== null) {
+ continue
+ }
+ }
+
+ console.log("Old found: ", workflow.triggers[key].parameters[subkey].value)
+ const extralength = newname.length-parsedBaseLabel.length
+ param.value = param.value.substring(0, foundindex) + newname + param.value.substring(foundindex-extralength+newname.length, param.value.length)
+
+ console.log("New: ", workflow.triggers[key].parameters[subkey].value)
+ } else {
+ break
+ }
+
+ // Break no matter what after 5 replaces. May need to increase
+ if (cnt >= 5) {
+ break
+ }
+
+ }
+ } catch (e) {
+ console.log("Failed value replacement based on index: ", e)
+ }
+ }
+ }
+ }
+ }
setWorkflow(workflow);
setUpdate(Math.random());
setPrevActionName(name)
@@ -3379,7 +3452,13 @@ const ParsedAction = (props) => {
if (parsedvalue === undefined || parsedvalue === null) {
parsedvalue = ""
}
-
+ console.log("Data sending to codeeditor(Action): ", {
+ "name": data.name,
+ "value": parsedvalue,
+ "field_number": count,
+ "actionlist": actionlist,
+ "field_id": clickedFieldId,
+ } )
setEditorData({
"name": data.name,
"value": parsedvalue,
diff --git a/frontend/src/components/ShuffleCodeEditor1.jsx b/frontend/src/components/ShuffleCodeEditor1.jsx
index 05830da8..667fafe3 100644
--- a/frontend/src/components/ShuffleCodeEditor1.jsx
+++ b/frontend/src/components/ShuffleCodeEditor1.jsx
@@ -109,6 +109,7 @@ const CodeEditor = (props) => {
setActiveDialog,
fieldname,
contentLoading,
+ selectedTrigger,
} = props
const [localcodedata, setlocalcodedata] = React.useState(codedata === undefined || codedata === null || codedata.length === 0 ? "" : codedata);
@@ -436,7 +437,8 @@ const CodeEditor = (props) => {
}
const autoFormat = (input) => {
- // Check if it's default too
+ if(selectedAction && selectedAction.parameters && selectedAction.parameters.length > 0){
+ // Check if it's default too
if (validation !== true) {
// Should try to automatically fix this input
@@ -475,6 +477,48 @@ const CodeEditor = (props) => {
if (input !== localcodedata) {
setlocalcodedata(input)
}
+ }
+
+ if(selectedTrigger && selectedTrigger.parameters && selectedTrigger.parameters.length > 0){
+ if (validation !== true) {
+
+ // Should try to automatically fix this input
+ console.log("Running AI input fixer")
+ if (aiSubmit !== undefined && parameterName !== undefined && selectedTrigger !== undefined) {
+
+ // Should remove params from selectedAction that aren't parameterName
+ var tmpAction = JSON.parse(JSON.stringify(selectedTrigger))
+ var tmpParams = selectedTrigger.parameters.filter((param) => param.name === parameterName)
+
+ var aiMsg = `Make it valid for trigger ${tmpAction.label} with parameter ${parameterName}: `
+ if (tmpParams.length > 0) {
+ aiMsg += tmpParams[0].value
+ }
+
+
+ if (localcodedata.startsWith("//")) {
+ aiMsg = localcodedata
+ }
+
+ tmpAction.parameters = tmpParams
+ console.log("Parameters: ", tmpParams.length)
+
+ aiSubmit(aiMsg, tmpAction)
+ }
+
+ return
+ }
+
+ try {
+ input = JSON.stringify(JSON.parse(input), null, 4)
+ } catch (e) {
+ console.log("Failed magic JSON stringification: ", e)
+ }
+
+ if (input !== localcodedata) {
+ setlocalcodedata(input)
+ }
+ }
}
const findIndex = (line, loc) => {
@@ -1802,4 +1846,4 @@ const CodeEditor = (props) => {
)
}
-export default CodeEditor;
+export default CodeEditor;
\ No newline at end of file
diff --git a/frontend/src/views/AngularWorkflow.jsx b/frontend/src/views/AngularWorkflow.jsx
index c6a1cb20..63540a32 100755
--- a/frontend/src/views/AngularWorkflow.jsx
+++ b/frontend/src/views/AngularWorkflow.jsx
@@ -1,5 +1,5 @@
/* eslint-disable react/no-multi-comp */
-import React, { useState, useEffect, useLayoutEffect, memo, useMemo, useRef } from "react";
+import React, { useState, useEffect, useLayoutEffect } from "react";
import ReactDOM from "react-dom"
import theme from "../theme.jsx";
@@ -69,6 +69,7 @@ import {
AvatarGroup,
Autocomplete,
Radio,
+ ButtonGroup,
} from "@mui/material";
import {
@@ -522,7 +523,9 @@ const AngularWorkflow = (defaultprops) => {
const [lastSaved, setLastSaved] = React.useState(true);
const [selectionOpen, setSelectionOpen] = React.useState(false);
-
+ const [menuPosition, setMenuPosition] = useState(null);
+ const [showDropdown, setShowDropdown] = React.useState(false);
+ const [subflowActionList, setSubflowActionlist] = React.useState([]);
// eslint-disable-next-line no-unused-vars
const [_, setUpdate] = useState(""); // Used to force rendring, don't remove
@@ -540,7 +543,7 @@ const AngularWorkflow = (defaultprops) => {
const [distributedFromParent, setDistributedFromParent] = React.useState("")
const [suborgWorkflows, setSuborgWorkflows] = React.useState([])
-
+ const [subflowExec, setSubflowExec] = React.useState("")
const [suggestionBox, setSuggestionBox] = React.useState({
"position": {
"top": 500,
@@ -549,7 +552,6 @@ const AngularWorkflow = (defaultprops) => {
"open": false,
"attachedTo": "",
})
-
useEffect(() => {
if (!firstrequest && isLoaded && isLoggedIn && editWorkflowModalOpen === false) {
saveWorkflow(workflow)
@@ -790,6 +792,142 @@ const releaseToConnectLabel = "Release to Connect"
}, [selectedApp])
+ useEffect(() => {
+
+ const newActionList = [];
+
+ // Process workflowExecutions
+ if (workflowExecutions.length > 0) {
+ for (let execution of workflowExecutions) {
+ const execArg = execution.execution_argument;
+ if (execArg && execArg.length > 0) {
+ const valid = validateJson(execArg);
+ if (valid.valid) {
+ newActionList.push({
+ type: "Execution Argument",
+ name: "Execution Argument",
+ value: "$exec",
+ highlight: "exec",
+ autocomplete: "exec",
+ example: valid.result,
+ });
+ break;
+ }
+ }
+ }
+ }
+
+ if (newActionList.length === 0) {
+ // FIXME: Have previous execution values in here
+ newActionList.push({
+ type: "Execution Argument",
+ name: "Execution Argument",
+ value: "$exec",
+ highlight: "exec",
+ autocomplete: "exec",
+ example: "hello",
+ })
+ newActionList.push({
+ type: "Shuffle Database",
+ name: "Shuffle Database",
+ value: "$shuffle_cache",
+ highlight: "shuffle_db",
+ autocomplete: "shuffle_cache",
+ example: "hello",
+ })
+ }
+
+ if (
+ workflow.workflow_variables !== null &&
+ workflow.workflow_variables !== undefined &&
+ workflow.workflow_variables.length > 0
+ ) {
+ for (let varkey in workflow.workflow_variables) {
+ const item = workflow.workflow_variables[varkey];
+ newActionList.push({
+ type: "workflow_variable",
+ name: item.name,
+ value: item.value,
+ id: item.id,
+ autocomplete: `${item.name.split(" ").join("_")}`,
+ example: item.value,
+ });
+ }
+ }
+
+ // FIXME: Add values from previous executions if they exist
+ if (
+ workflow.execution_variables !== null &&
+ workflow.execution_variables !== undefined &&
+ workflow.execution_variables.length > 0
+ ) {
+ for (let varkey in workflow.execution_variables) {
+ const item = workflow.execution_variables[varkey];
+ newActionList.push({
+ type: "execution_variable",
+ name: item.name,
+ value: item.value,
+ id: item.id,
+ autocomplete: `${item.name.split(" ").join("_")}`,
+ example: "",
+ });
+ }
+ }
+
+ if(getParents){
+ var parents = getParents(selectedTrigger);
+ if (parents.length > 1) {
+ for (let parentkey in parents) {
+ const item = parents[parentkey];
+ if (item.label === "Execution Argument") {
+ continue;
+ }
+
+ var exampledata = item.example === undefined ? "" : item.example;
+ // Find previous execution and their variables
+ if (workflowExecutions.length > 0) {
+ // Look for the ID
+ for (let execkey in workflowExecutions) {
+ if (
+ workflowExecutions[execkey].results === undefined ||
+ workflowExecutions[execkey].results === null
+ ) {
+ continue;
+ }
+
+ var foundResult = workflowExecutions[execkey].results.find(
+ (result) => result.action.id === item.id
+ );
+ if (foundResult === undefined) {
+ continue;
+ }
+
+ const validated = validateJson(foundResult.result)
+ if (validated.valid) {
+ exampledata = validateJson.result
+ break
+ }
+ }
+ }
+
+ // 1. Take
+ const actionvalue = {
+ type: "action",
+ id: item.id,
+ name: item.label,
+ autocomplete: `${item.label.split(" ").join("_")}`,
+ example: exampledata,
+ }
+ newActionList.push(actionvalue);
+ }
+ }
+ }
+
+ setSubflowActionlist(newActionList);
+
+ },[selectedTrigger, workflowExecutions, workflow.workflow_variables, workflow.execution_variables, workflow.branches,workflow]);
+
+
const [executionArgumentModalOpen, setExecutionArgumentModalOpen] = React.useState(false);
// This should all be set once, not on every iteration
@@ -4577,7 +4715,6 @@ const releaseToConnectLabel = "Release to Connect"
}
-
// Nodeselectbatching:
// https://stackoverflow.com/questions/16677856/cy-onselect-callback-only-once
// onNodeClick
@@ -4589,7 +4726,7 @@ const releaseToConnectLabel = "Release to Connect"
const data = event.target.data()
if (data.app_name === "Shuffle Workflow") {
- if ((data.parameters !== undefined) && (data.parameters.length > 0)) {
+ if ((data.parameters !== undefined) && (data?.parameters?.length > 0)) {
getWorkflowApps(data.parameters[0].value)
}
}
@@ -10301,7 +10438,7 @@ const releaseToConnectLabel = "Release to Connect"
var maxiter = 10;
while (true) {
for (let parentkey in allkeys) {
- var currentnode = cy.getElementById(allkeys[parentkey]);
+ var currentnode = cy?.getElementById(allkeys[parentkey]);
if (currentnode === undefined || currentnode === null) {
continue;
}
@@ -12740,124 +12877,98 @@ const releaseToConnectLabel = "Release to Connect"
);
};
- const SubflowSidebar = () => {
- const [menuPosition, setMenuPosition] = useState(null);
- const [showDropdown, setShowDropdown] = React.useState(false);
- const [actionlist, setActionlist] = React.useState([]);
- if (actionlist.length === 0) {
- // FIXME: Have previous execution values in here
- actionlist.push({
- type: "Execution Argument",
- name: "Execution Argument",
- value: "$exec",
- highlight: "exec",
- autocomplete: "exec",
- example: "hello",
- })
- actionlist.push({
- type: "Shuffle Database",
- name: "Shuffle Database",
- value: "$shuffle_cache",
- highlight: "shuffle_db",
- autocomplete: "shuffle_cache",
- example: "hello",
- })
- if (
- workflow.workflow_variables !== null &&
- workflow.workflow_variables !== undefined &&
- workflow.workflow_variables.length > 0
- ) {
- for (let varkey in workflow.workflow_variables) {
- const item = workflow.workflow_variables[varkey];
- actionlist.push({
- type: "workflow_variable",
- name: item.name,
- value: item.value,
- id: item.id,
- autocomplete: `${item.name.split(" ").join("_")}`,
- example: item.value,
- });
- }
+ var handleSubflowStartnodeSelection = (e) => {
+ setSubworkflowStartnode(e.target.value);
+
+ if (e.target.value === null || e.target.value === undefined) {
+ return
}
- // FIXME: Add values from previous executions if they exist
- if (
- workflow.execution_variables !== null &&
- workflow.execution_variables !== undefined &&
- workflow.execution_variables.length > 0
- ) {
- for (let varkey in workflow.execution_variables) {
- const item = workflow.execution_variables[varkey];
- actionlist.push({
- type: "execution_variable",
- name: item.name,
- value: item.value,
- id: item.id,
- autocomplete: `${item.name.split(" ").join("_")}`,
- example: "",
- });
- }
- }
+ const branchId = uuidv4();
+ const newbranch = {
+ source_id: workflow.triggers[selectedTriggerIndex].id,
+ destination_id: e.target.value.id,
+ source: workflow.triggers[selectedTriggerIndex].id,
+ target: e.target.value.id,
+ has_errors: false,
+ id: branchId,
+ _id: branchId,
+ label: "Subflow",
+ decorator: true,
+ };
- var parents = getParents(selectedTrigger);
- if (parents.length > 1) {
- for (let parentkey in parents) {
- const item = parents[parentkey];
- if (item.label === "Execution Argument") {
- continue;
- }
-
- var exampledata = item.example === undefined ? "" : item.example;
- // Find previous execution and their variables
- if (workflowExecutions.length > 0) {
- // Look for the ID
- for (let execkey in workflowExecutions) {
- if (
- workflowExecutions[execkey].results === undefined ||
- workflowExecutions[execkey].results === null
- ) {
- continue;
- }
-
- var foundResult = workflowExecutions[execkey].results.find(
- (result) => result.action.id === item.id
- );
- if (foundResult === undefined) {
- continue;
- }
-
- const validated = validateJson(foundResult.result)
- if (validated.valid) {
- exampledata = validateJson.result
- break
- }
+ if (workflow.visual_branches !== undefined) {
+ if (workflow.visual_branches === null) {
+ workflow.visual_branches = [newbranch];
+ } else if (workflow.visual_branches.length === 0) {
+ workflow.visual_branches.push(newbranch);
+ } else {
+ const foundIndex = workflow.visual_branches.findIndex(
+ (branch) => branch.source_id === newbranch.source_id
+ );
+ if (foundIndex !== -1) {
+ const currentEdge = cy.getElementById(
+ workflow.visual_branches[foundIndex].id
+ );
+ if (
+ currentEdge !== undefined &&
+ currentEdge !== null
+ ) {
+ currentEdge.remove();
}
}
- // 1. Take
- const actionvalue = {
- type: "action",
- id: item.id,
- name: item.label,
- autocomplete: `${item.label.split(" ").join("_")}`,
- example: exampledata,
- }
- actionlist.push(actionvalue);
+ workflow.visual_branches.splice(foundIndex, 1);
+ workflow.visual_branches.push(newbranch);
}
}
- setActionlist(actionlist);
- }
+ if (workflow.id === subworkflow.id) {
+ const cybranch = {
+ group: "edges",
+ source: newbranch.source_id,
+ target: newbranch.destination_id,
+ id: branchId,
+ data: newbranch,
+ };
+
+ cy.add(cybranch);
+ }
+
+ console.log("Value to be set: ", e.target.value);
+ try {
+ workflow.triggers[
+ selectedTriggerIndex
+ ].parameters[3].value = e.target.value.id;
+ } catch {
+ workflow.triggers[selectedTriggerIndex].parameters[3] =
+ {
+ name: "startnode",
+ value: e.target.value.id,
+ };
+ }
+
+ setWorkflow(workflow);
+ };
+
+
+ var subflowtypes = [
+ {
+ name: "Any",
+ },
+ {
+ name: "Enrich",
+ }
+ ]
- const handleMenuClose = () => {
- setUpdate(Math.random());
- setMenuPosition(null);
- };
+ const handleMenuClose = () => {
+ setUpdate(Math.random());
+ setMenuPosition(null);
+ };
- const handleItemClick = (values) => {
- console.log("VALUES: ", values)
+ const handleItemClick = (values) => {
if (values === undefined || values === null || values.length === 0) {
return;
}
@@ -12879,988 +12990,38 @@ const releaseToConnectLabel = "Release to Connect"
}
*/
- console.log("SELECTED TRIGGER: ", selectedTrigger)
if (selectedTrigger.name === "Shuffle Workflow") {
const toComplete = selectedTrigger.parameters[1].value + "$" + values[0].autocomplete
- selectedTrigger.parameters[1].value = toComplete
- setSelectedTrigger(selectedTrigger)
+ // selectedTrigger.parameters[1].value = toComplete
+ workflow.triggers[selectedTriggerIndex].parameters[1].value = toComplete
+ const foundfield = document.getElementById("subflow_field")
+ if (foundfield !== undefined && foundfield !== null) {
+ foundfield.value = toComplete
+ }
+ // setSelectedTrigger(selectedTrigger)
+ // setSubflowExec(toComplete)
+ setWorkflow(workflow)
+ }
+
+ if(selectedTrigger.name === "User Input"){
+ const toComplete = selectedTrigger.parameters[0].value + "$" + values[0].autocomplete
+ // selectedTrigger.parameters[1].value = toComplete
+ workflow.triggers[selectedTriggerIndex].parameters[0].value = toComplete
+ const foundfield = document.getElementById("userinput_info")
+ if (foundfield !== undefined && foundfield !== null) {
+ foundfield.value = toComplete
+ }
+ // setSelectedTrigger(selectedTrigger)
+ // setSubflowExec(toComplete)
+ setWorkflow(workflow)
}
setUpdate(Math.random());
setShowDropdown(false);
setMenuPosition(null);
- };
+ };
- const iconStyle = {
- marginRight: 15,
- };
-
-
- if (Object.getOwnPropertyNames(selectedTrigger).length > 0) {
- if (workflow.triggers[selectedTriggerIndex] === undefined) {
- return null;
- }
-
- if (
- workflow.triggers[selectedTriggerIndex].parameters === undefined ||
- workflow.triggers[selectedTriggerIndex].parameters === null ||
- workflow.triggers[selectedTriggerIndex].parameters.length === 0
- ) {
- workflow.triggers[selectedTriggerIndex].parameters = [];
- workflow.triggers[selectedTriggerIndex].parameters[0] = {
- name: "workflow",
- value: "",
- };
- workflow.triggers[selectedTriggerIndex].parameters[1] = {
- name: "argument",
- value: "",
- };
- workflow.triggers[selectedTriggerIndex].parameters[2] = {
- name: "user_apikey",
- value: "",
- };
- workflow.triggers[selectedTriggerIndex].parameters[3] = {
- name: "startnode",
- value: "",
- };
- workflow.triggers[selectedTriggerIndex].parameters[4] = {
- name: "check_result",
- value: "false",
- };
- workflow.triggers[selectedTriggerIndex].parameters[5] = {
- name: "auth_override",
- value: "",
- };
-
- /*
- // API-key has been replaced by auth key for the execution.
- // Parents can now automatically execute children without auth from a user, as long as the subflow in question is owned by the same org and the subflow is actually referencing it during checkin.
- console.log("SETTINGS: ", userSettings);
- if (
- userSettings !== undefined &&
- userSettings !== null &&
- userSettings.apikey !== null &&
- userSettings.apikey !== undefined &&
- userSettings.apikey.length > 0
- ) {
- workflow.triggers[selectedTriggerIndex].parameters[2] = {
- name: "user_apikey",
- value: userSettings.apikey,
- };
- }
- */
- }
-
- const handleSubflowStartnodeSelection = (e) => {
- setSubworkflowStartnode(e.target.value);
-
- if (e.target.value === null || e.target.value === undefined) {
- return
- }
-
- const branchId = uuidv4();
- const newbranch = {
- source_id: workflow.triggers[selectedTriggerIndex].id,
- destination_id: e.target.value.id,
- source: workflow.triggers[selectedTriggerIndex].id,
- target: e.target.value.id,
- has_errors: false,
- id: branchId,
- _id: branchId,
- label: "Subflow",
- decorator: true,
- };
-
- if (workflow.visual_branches !== undefined) {
- if (workflow.visual_branches === null) {
- workflow.visual_branches = [newbranch];
- } else if (workflow.visual_branches.length === 0) {
- workflow.visual_branches.push(newbranch);
- } else {
- const foundIndex = workflow.visual_branches.findIndex(
- (branch) => branch.source_id === newbranch.source_id
- );
- if (foundIndex !== -1) {
- const currentEdge = cy.getElementById(
- workflow.visual_branches[foundIndex].id
- );
- if (
- currentEdge !== undefined &&
- currentEdge !== null
- ) {
- currentEdge.remove();
- }
- }
-
- workflow.visual_branches.splice(foundIndex, 1);
- workflow.visual_branches.push(newbranch);
- }
- }
-
- if (workflow.id === subworkflow.id) {
- const cybranch = {
- group: "edges",
- source: newbranch.source_id,
- target: newbranch.destination_id,
- id: branchId,
- data: newbranch,
- };
-
- cy.add(cybranch);
- }
-
- console.log("Value to be set: ", e.target.value);
- try {
- workflow.triggers[
- selectedTriggerIndex
- ].parameters[3].value = e.target.value.id;
- } catch {
- workflow.triggers[selectedTriggerIndex].parameters[3] =
- {
- name: "startnode",
- value: e.target.value.id,
- };
- }
-
- setWorkflow(workflow);
- }
-
-
- const subflowtypes = [
- {
- name: "Any",
- },
- {
- name: "Enrich",
- }
- ]
-
- return (
-
-
-
- {selectedTrigger.app_name}
-
-
-
-
-
-
- What are subflows?
-
-
-
-
- Name
-
-
-
-
-
-
- Delay
- {
- if (isNaN(event.target.value)) {
- console.log("NAN: ", event.target.value)
- return
- }
-
- const parsedNumber = parseInt(event.target.value)
- if (parsedNumber > 86400) {
- console.log("Max number is 1 day (86400)")
- return
- }
-
- selectedTrigger.execution_delay = parseInt(event.target.value)
- setSelectedTrigger(selectedTrigger)
- }}
- />
-
-
-
-
-
-
{
- const newvalue = workflow.triggers[selectedTriggerIndex].parameters[4] === undefined || workflow.triggers[selectedTriggerIndex].parameters[4].value === "false"? "true" : "false";
- workflow.triggers[selectedTriggerIndex].parameters[4] = {
- name: "check_result",
- value: newvalue,
- };
-
- setWorkflow(workflow);
- setUpdate(Math.random());
- }}
- color="primary"
- value="Wait for results"
- />
- }
- style={{ marginTop: 10 }}
- label={Wait for results
}
- />
-
-
-
-
-
- Select a workflow to execute
-
-
- {workflow.triggers[selectedTriggerIndex].parameters[0].value
- .length === 0 ? null : workflow.triggers[selectedTriggerIndex]
- .parameters[0].value === props.match.params.key ? null : (
-
- )}
-
-
- {workflows === undefined ||
- workflows === null ||
- workflows.length === 0 ? null : (
-
-
option.id === value.id}
- getOptionLabel={(option) => {
- if (
- option === undefined ||
- option === null ||
- option.name === undefined ||
- option.name === null
- ) {
- return "No Workflow Selected";
- }
-
- const newname = (
- option.name.charAt(0).toUpperCase() + option.name.substring(1)
- ).replaceAll("_", " ");
- return newname;
- }}
- options={workflows}
- fullWidth
- style={{
- backgroundColor: theme.palette.inputColor,
- height: 50,
- borderRadius: theme.palette.borderRadius,
- }}
- onChange={(event, newValue) => {
- setLastSaved(false)
- console.log("Found value: ", newValue)
-
- var parsedinput = { target: { value: newValue } }
-
- // For variables
- if (typeof newValue === 'string' && newValue.startsWith("$")) {
- parsedinput = {
- target: {
- value: {
- "name": newValue,
- "id": newValue,
- "actions": [],
- "triggers": [],
- }
- }
- }
- }
-
- handleWorkflowSelectionUpdate(parsedinput)
- }}
- renderOption={(props, data, state) => {
- if (data.id === workflow.id) {
- data = workflow;
- }
-
- //key={index}
- return (
-
- {data.image !== undefined && data.image !== null && data.image.length > 0 ?
-
- : null}
-
- Choose Subflow '{data.name}'
-
-
- }>
-
-
- )
- }}
- renderInput={(params) => {
- return (
-
- );
- }}
- />
- )}
-
- {subworkflow === undefined ||
- subworkflow === null ||
- subworkflow.id === undefined ||
- subworkflow.actions === null ||
- subworkflow.actions === undefined ||
- subworkflow.actions.length === 0 ? null : (
-
-
-
- Select the Startnode
-
-
- option.id === value.id}
- getOptionLabel={(option) => {
- if (option === undefined || option === null || option.label === undefined || option.label === null) {
- if (option.length === 36) {
-
- }
-
- return "TMP";
- }
-
- const newname = (
- option.label.charAt(0).toUpperCase() + option.label.substring(1)
- ).replaceAll("_", " ");
- return newname;
- }}
- options={subworkflow.actions}
- fullWidth
- style={{
- backgroundColor: theme.palette.inputColor,
- height: 50,
- borderRadius: theme.palette.borderRadius,
- }}
- onChange={(event, newValue) => {
- setLastSaved(false)
- handleSubflowStartnodeSelection({ target: { value: newValue } })
- }}
- renderOption={(props, action, state) => {
- const isParent = getParents(selectedTrigger).find(
- (parent) => parent.id === action.id
- )
-
- return (
-
- );
- }}
- renderInput={(params) => {
- return (
-
- );
- }}
- />
-
- )}
-
-
- Execution Argument
-
-
-
-
- {
- setMenuPosition({
- top: event.pageY + 10,
- left: event.pageX + 10,
- });
- //setShowDropdownNumber(3)
- setShowDropdown(true);
- }}
- />
-
-
- ),
- }}
- rows="6"
- multiline
- fullWidth
- color="primary"
- placeholder="Some execution data"
- defaultValue={
- workflow.triggers[selectedTriggerIndex].parameters[1].value
- }
- onBlur={(e) => {
- setLastSaved(false)
-
- workflow.triggers[selectedTriggerIndex].parameters[1].value = e.target.value
- setWorkflow(workflow)
- }}
- />
- {!showDropdown ? null :
-
- }
- parentMenuOpen={!!menuPosition}
- style={{
- backgroundColor: theme.palette.inputColor,
- color: "white",
- minWidth: 250,
- }}
- onClick={() => {
- handleItemClick([innerdata]);
- }}
- >
- {parsedPaths.map((pathdata, index) => {
- // FIXME: Should be recursive in here
- const icon =
- pathdata.type === "value" ? (
-
- ) : pathdata.type === "list" ? (
-
- ) : (
-
- )
-
- return (
-
- );
- })}
-
- */}
-
-
- {icon} {innerdata.name}
-
- }
- parentMenuOpen={!!menuPosition}
- style={{
- color: "white",
- minWidth: 250,
- maxWidth: 250,
- maxHeight: 50,
- overflow: "hidden",
- }}
- onClick={() => {
- console.log("CLICKED: ", innerdata);
- console.log(innerdata.example)
- handleItemClick([innerdata]);
- }}
- >
-
-
-
-
- {parsedPaths.map((pathdata, index) => {
- // FIXME: Should be recursive in here
- //
- const icon =
- pathdata.type === "value" ? (
-
- ) : pathdata.type === "list" ? (
-
- ) : (
-
- );
- //
-
- const indentation_count = (pathdata.name.match(/\./g) || []).length+1
- const baseIndent =
- //const boxPadding = pathdata.type === "object" ? "10px 0px 0px 0px" : 0
- const boxPadding = 0
- const namesplit = pathdata.name.split(".")
- const newname = namesplit[namesplit.length-1]
- return (
-
- );
- })}
-
-
-
- ) : (
-
- );
- })}
-
- }
- {/*
-
- {
- workflow.triggers[selectedTriggerIndex].parameters[2].value =
- e.target.value;
- setWorkflow(workflow);
- }}
- />
- */}
-
-
-
-
-
-
-
-
- Authentication Override
-
-
-
-
-
-
-
-
- );
- }
-
- return null;
- };
+
const CommentSidebar = () => {
if (Object.getOwnPropertyNames(selectedComment).length > 0) {
@@ -14047,20 +13208,32 @@ const releaseToConnectLabel = "Release to Connect"
// Special SCHEDULE handler
var trigger_header_auth = ""
- if (Object.getOwnPropertyNames(selectedTrigger).length > 0 && workflow.triggers !== null && workflow.triggers !== undefined && workflow.triggers.length >= selectedTriggerIndex && workflow.triggers[selectedTriggerIndex] !== undefined ) {
- if (selectedTrigger.trigger_type === "SCHEDULE" && workflow.triggers[selectedTriggerIndex].parameters === undefined || workflow.triggers[selectedTriggerIndex].parameters === null) {
- console.log("Autofixing schedule")
- workflow.triggers[selectedTriggerIndex].parameters = [];
- workflow.triggers[selectedTriggerIndex].parameters[0] = {
- name: "cron",
- value: isCloud ? "*/25 * * * *" : "60",
- };
- workflow.triggers[selectedTriggerIndex].parameters[1] = {
- name: "execution_argument",
- value: '{"example": {"json": "is cool"}}',
- };
- setWorkflow(workflow);
+ if (Object.getOwnPropertyNames(selectedTrigger).length > 0 && workflow.triggers !== null && workflow.triggers !== undefined && workflow.triggers.length >= selectedTriggerIndex && workflow.triggers[selectedTriggerIndex] !== undefined ) {
+
+ if (selectedTrigger.trigger_type === "SCHEDULE") {
+ if (workflow.triggers[selectedTriggerIndex] === undefined) {
+ return null;
+ }
+
+ if (
+ workflow.triggers[selectedTriggerIndex].parameters === undefined ||
+ workflow.triggers[selectedTriggerIndex].parameters === null ||
+ workflow.triggers[selectedTriggerIndex].parameters.length === 0
+ ) {
+ console.log("Autofixing schedule")
+
+ workflow.triggers[selectedTriggerIndex].parameters = [];
+ workflow.triggers[selectedTriggerIndex].parameters[0] = {
+ name: "cron",
+ value: isCloud ? "*/25 * * * *" : "60",
+ };
+ workflow.triggers[selectedTriggerIndex].parameters[1] = {
+ name: "execution_argument",
+ value: '{"example": {"json": "is cool"}}',
+ };
+ setWorkflow(workflow);
+ }
} else if (selectedTrigger.trigger_type === "WEBHOOK") {
if (workflow.triggers[selectedTriggerIndex] === undefined) {
return null;
@@ -14120,6 +13293,7 @@ const releaseToConnectLabel = "Release to Connect"
) {
workflow.triggers[selectedTriggerIndex].parameters = [];
workflow.triggers[selectedTriggerIndex].parameters[0] = {
+ id:"userinput_info",
name: "alertinfo",
value: "Do you want to continue the workflow? Start parameters: $exec",
};
@@ -14151,9 +13325,63 @@ const releaseToConnectLabel = "Release to Connect"
setWorkflow(workflow);
}
+ }else if(selectedTrigger.trigger_type === "SUBFLOW"){
+
+ if (
+ workflow.triggers[selectedTriggerIndex].parameters === undefined ||
+ workflow.triggers[selectedTriggerIndex].parameters === null ||
+ workflow.triggers[selectedTriggerIndex].parameters.length === 0
+ ) {
+ workflow.triggers[selectedTriggerIndex].parameters = [];
+ workflow.triggers[selectedTriggerIndex].parameters[0] = {
+ name: "workflow",
+ value: "",
+ };
+ workflow.triggers[selectedTriggerIndex].parameters[1] = {
+ name: "argument",
+ value: "",
+ id:"subflow_field"
+ };
+ workflow.triggers[selectedTriggerIndex].parameters[2] = {
+ name: "user_apikey",
+ value: "",
+ };
+ workflow.triggers[selectedTriggerIndex].parameters[3] = {
+ name: "startnode",
+ value: "",
+ };
+ workflow.triggers[selectedTriggerIndex].parameters[4] = {
+ name: "check_result",
+ value: "false",
+ };
+ workflow.triggers[selectedTriggerIndex].parameters[5] = {
+ name: "auth_override",
+ value: "",
+ };
+ setWorkflow(workflow)
+ /*
+ // API-key has been replaced by auth key for the execution.
+ // Parents can now automatically execute children without auth from a user, as long as the subflow in question is owned by the same org and the subflow is actually referencing it during checkin.
+ console.log("SETTINGS: ", userSettings);
+ if (
+ userSettings !== undefined &&
+ userSettings !== null &&
+ userSettings.apikey !== null &&
+ userSettings.apikey !== undefined &&
+ userSettings.apikey.length > 0
+ ) {
+ workflow.triggers[selectedTriggerIndex].parameters[2] = {
+ name: "user_apikey",
+ value: userSettings.apikey,
+ };
+ }
+ */
+ }
}
}
+ console.log(selectedTrigger)
+
const WebhookSidebar = Object.getOwnPropertyNames(selectedTrigger).length === 0 || workflow.triggers[selectedTriggerIndex] === undefined || selectedTrigger.trigger_type !== "WEBHOOK" ? null :
@@ -15026,6 +14254,7 @@ const releaseToConnectLabel = "Release to Connect"
+
+
+ {
+ event.preventDefault()
+ // setFieldCount(count)
+ setCodeEditorModalOpen(true)
+ setActiveDialog("codeeditor")
+ //setcodedata(data.value)
+ var parsedvalue = workflow?.triggers[selectedTriggerIndex]?.parameters[0]?.value
+ // if (parsedvalue === undefined || parsedvalue === null) {
+ // parsedvalue = ""
+ // }
+ console.log("Data sending to codeeditor: ",{
+ "name": workflow.triggers[selectedTriggerIndex].parameters[0].name,
+ "value": parsedvalue,
+ "field_number": 0,
+ "actionlist": subflowActionList,
+ "field_id": "userinput_info",
+ })
+ setEditorData({
+ "name": workflow.triggers[selectedTriggerIndex].parameters[0].name,
+ "value": parsedvalue,
+ "field_number": 0,
+ "actionlist": subflowActionList,
+ "field_id": "userinput_info",
+ })
+ }}
+ />
+
+
+ {
+ setMenuPosition({
+ top: event.pageY + 10,
+ left: event.pageX + 10,
+ });
+ //setShowDropdownNumber(3)
+ setShowDropdown(true);
+ }}
+ />
+
+
+
+ ),
}}
fullWidth
- rows="4"
+ rows="6"
multiline
defaultValue={
workflow.triggers !== undefined && workflow.triggers !== null && workflow.triggers[selectedTriggerIndex].parameters !== undefined && workflow.triggers[selectedTriggerIndex].parameters.length > 0 && workflow.triggers[selectedTriggerIndex].parameters[0] !== undefined && workflow.triggers[selectedTriggerIndex].parameters[0].value !== undefined ? workflow.triggers[selectedTriggerIndex].parameters[0].value : ""
@@ -15046,6 +14324,300 @@ const releaseToConnectLabel = "Release to Connect"
setTriggerTextInformationWrapper(e.target.value);
}}
/>
+ {!showDropdown ? null :
+
+ }
+
const defaultEnvironment = environments.find(
(env) => env.default && env.Name.toLowerCase() !== "cloud"
);
if (selectedTrigger.trigger_type === "PIPELINE" && selectedTrigger.environment === "onprem" && defaultEnvironment !== undefined) {
selectedTrigger.environment = defaultEnvironment.Name
- setSelectedTrigger(selectedTrigger) }
+ setSelectedTrigger(selectedTrigger)
+ }
- const PipelineSidebar = Object.getOwnPropertyNames(selectedTrigger).length === 0 || workflow.triggers[selectedTriggerIndex] === undefined && selectedTrigger.trigger_type !== "SCHEDULE" ? null :
+ const PipelineSidebar = Object.getOwnPropertyNames(selectedTrigger).length === 0 || workflow.triggers[selectedTriggerIndex] === undefined && selectedTrigger.trigger_type !== "PIPELINE" ? null :
{selectedTrigger.app_name}: {selectedTrigger.status}
@@ -15911,6 +15485,863 @@ const releaseToConnectLabel = "Release to Connect"
+ const SubflowSidebar = Object.getOwnPropertyNames(selectedTrigger).length === 0 || workflow.triggers[selectedTriggerIndex] === undefined || selectedTrigger.trigger_type !== "SUBFLOW" ? null :
+
+
+
+ {selectedTrigger.app_name}
+
+
+
+
+
+
+ What are subflows?
+
+
+
+
+ Name
+
+
+
+
+
+
+ Delay
+ {
+ if (isNaN(event.target.value)) {
+ console.log("NAN: ", event.target.value)
+ return
+ }
+
+ const parsedNumber = parseInt(event.target.value)
+ if (parsedNumber > 86400) {
+ console.log("Max number is 1 day (86400)")
+ return
+ }
+
+ selectedTrigger.execution_delay = parseInt(event.target.value)
+ setSelectedTrigger(selectedTrigger)
+ }}
+ />
+
+
+
+
+
+
{
+ const newvalue = workflow.triggers[selectedTriggerIndex].parameters[4] === undefined || workflow.triggers[selectedTriggerIndex].parameters[4].value === "false"? "true" : "false";
+ workflow.triggers[selectedTriggerIndex].parameters[4] = {
+ name: "check_result",
+ value: newvalue,
+ };
+
+ setWorkflow(workflow);
+ setUpdate(Math.random());
+ }}
+ color="primary"
+ value="Wait for results"
+ />
+ }
+ style={{ marginTop: 10 }}
+ label={Wait for results
}
+ />
+
+
+
+
+
+ Select a workflow to execute
+
+
+ {workflow.triggers[selectedTriggerIndex].parameters[0].value
+ .length === 0 ? null : workflow.triggers[selectedTriggerIndex]
+ .parameters[0].value === props.match.params.key ? null : (
+
+ )}
+
+
+ {workflows === undefined ||
+ workflows === null ||
+ workflows.length === 0 ? null : (
+
+
option.id === value.id}
+ getOptionLabel={(option) => {
+ if (
+ option === undefined ||
+ option === null ||
+ option.name === undefined ||
+ option.name === null
+ ) {
+ return "No Workflow Selected";
+ }
+
+ const newname = (
+ option.name.charAt(0).toUpperCase() + option.name.substring(1)
+ ).replaceAll("_", " ");
+ return newname;
+ }}
+ options={workflows}
+ fullWidth
+ style={{
+ backgroundColor: theme.palette.inputColor,
+ height: 50,
+ borderRadius: theme.palette.borderRadius,
+ }}
+ onChange={(event, newValue) => {
+ setLastSaved(false)
+ console.log("Found value: ", newValue)
+
+ var parsedinput = { target: { value: newValue } }
+
+ // For variables
+ if (typeof newValue === 'string' && newValue.startsWith("$")) {
+ parsedinput = {
+ target: {
+ value: {
+ "name": newValue,
+ "id": newValue,
+ "actions": [],
+ "triggers": [],
+ }
+ }
+ }
+ }
+
+ handleWorkflowSelectionUpdate(parsedinput)
+ }}
+ renderOption={(props, data, state) => {
+ if (data.id === workflow.id) {
+ data = workflow;
+ }
+
+ //key={index}
+ return (
+
+ {data.image !== undefined && data.image !== null && data.image.length > 0 ?
+
+ : null}
+
+ Choose Subflow '{data.name}'
+
+
+ }>
+
+
+ )
+ }}
+ renderInput={(params) => {
+ return (
+
+ );
+ }}
+ />
+ )}
+
+ {subworkflow === undefined ||
+ subworkflow === null ||
+ subworkflow.id === undefined ||
+ subworkflow.actions === null ||
+ subworkflow.actions === undefined ||
+ subworkflow.actions.length === 0 ? null : (
+
+
+
+ Select the Startnode
+
+
+ option.id === value.id}
+ getOptionLabel={(option) => {
+ if (option === undefined || option === null || option.label === undefined || option.label === null) {
+ if (option.length === 36) {
+
+ }
+
+ return "TMP";
+ }
+
+ const newname = (
+ option.label.charAt(0).toUpperCase() + option.label.substring(1)
+ ).replaceAll("_", " ");
+ return newname;
+ }}
+ options={subworkflow.actions}
+ fullWidth
+ style={{
+ backgroundColor: theme.palette.inputColor,
+ height: 50,
+ borderRadius: theme.palette.borderRadius,
+ }}
+ onChange={(event, newValue) => {
+ setLastSaved(false)
+ handleSubflowStartnodeSelection({ target: { value: newValue } })
+ }}
+ renderOption={(props, action, state) => {
+ const isParent = getParents(selectedTrigger).find(
+ (parent) => parent.id === action.id
+ )
+
+ return (
+
+ );
+ }}
+ renderInput={(params) => {
+ return (
+
+ );
+ }}
+ />
+
+ )}
+
+
+ Execution Argument
+
+
+
+
+
+ {
+ event.preventDefault()
+ // setFieldCount(count)
+ setCodeEditorModalOpen(true)
+ setActiveDialog("codeeditor")
+ //setcodedata(data.value)
+ var parsedvalue = workflow?.triggers[selectedTriggerIndex]?.parameters[1]?.value
+ // if (parsedvalue === undefined || parsedvalue === null) {
+ // parsedvalue = ""
+ // }
+ console.log("Data sending to codeeditor: ",{
+ "name": workflow.triggers[selectedTriggerIndex].parameters[1].name,
+ "value": parsedvalue,
+ "field_number": 1,
+ "actionlist": subflowActionList,
+ "field_id": "subflow_field",
+ })
+ setEditorData({
+ "name": workflow.triggers[selectedTriggerIndex].parameters[1].name,
+ "value": parsedvalue,
+ "field_number": 1,
+ "actionlist": subflowActionList,
+ "field_id": "subflow_field",
+ })
+ }}
+ />
+
+
+ {
+ setMenuPosition({
+ top: event.pageY + 10,
+ left: event.pageX + 10,
+ });
+ //setShowDropdownNumber(3)
+ setShowDropdown(true);
+ }}
+ />
+
+
+
+ ),
+ }}
+ rows="6"
+ multiline
+ fullWidth
+ color="primary"
+ placeholder="Some execution data"
+ defaultValue={
+ workflow?.triggers[selectedTriggerIndex]?.parameters[1]?.value
+ }
+ onBlur={(e) => {
+ workflow.triggers[selectedTriggerIndex].parameters[1].value = e.target.value
+ setWorkflow(workflow)
+ setLastSaved(false)
+
+ }}
+ />
+ {!showDropdown ? null :
+
+ }
+ parentMenuOpen={!!menuPosition}
+ style={{
+ backgroundColor: theme.palette.inputColor,
+ color: "white",
+ minWidth: 250,
+ }}
+ onClick={() => {
+ handleItemClick([innerdata]);
+ }}
+ >
+ {parsedPaths.map((pathdata, index) => {
+ // FIXME: Should be recursive in here
+ const icon =
+ pathdata.type === "value" ? (
+
+ ) : pathdata.type === "list" ? (
+
+ ) : (
+
+ )
+
+ return (
+
+ );
+ })}
+
+ */}
+
+
+ {icon} {innerdata.name}
+
+ }
+ parentMenuOpen={!!menuPosition}
+ style={{
+ color: "white",
+ minWidth: 250,
+ maxWidth: 250,
+ maxHeight: 50,
+ overflow: "hidden",
+ }}
+ onClick={() => {
+ console.log("CLICKED: ", innerdata);
+ console.log(innerdata.example)
+ handleItemClick([innerdata]);
+ }}
+ >
+
+
+
+
+ {parsedPaths.map((pathdata, index) => {
+ // FIXME: Should be recursive in here
+ //
+ const icon =
+ pathdata.type === "value" ? (
+
+ ) : pathdata.type === "list" ? (
+
+ ) : (
+
+ );
+ //
+
+ const indentation_count = (pathdata.name.match(/\./g) || []).length+1
+ const baseIndent =
+ //const boxPadding = pathdata.type === "object" ? "10px 0px 0px 0px" : 0
+ const boxPadding = 0
+ const namesplit = pathdata.name.split(".")
+ const newname = namesplit[namesplit.length-1]
+ return (
+
+ );
+ })}
+
+
+
+ ) : (
+
+ );
+ })}
+
+ }
+ {/*
+
+ {
+ workflow.triggers[selectedTriggerIndex].parameters[2].value =
+ e.target.value;
+ setWorkflow(workflow);
+ }}
+ />
+ */}
+
+
+
+
+
+
+
+
+ Authentication Override
+
+
+
+
+
+
+
+
+
const cytoscapeViewWidths = isMobile ? 50 : 950;
const bottomBarStyle = {
position: "fixed",
@@ -20208,6 +20639,7 @@ const releaseToConnectLabel = "Release to Connect"
workflowExecutions={workflowExecutions}
setSelectedResult={setSelectedResult}
setSelectedApp={setSelectedApp}
+ selectedTrigger={selectedTrigger}
setSelectedTrigger={setSelectedTrigger}
setSelectedEdge={setSelectedEdge}
setCurrentView={setCurrentView}
@@ -20243,7 +20675,7 @@ const releaseToConnectLabel = "Release to Connect"
{/* Looks for triggers" */}
{/* Only fixed the ones that require scrolling on a small screen */}
{/* Most important: Actions. But these are a lot more complex */}
- {rightSideBarOpen && (selectedTrigger.trigger_type === "SCHEDULE" || selectedTrigger.trigger_type === "WEBHOOK" || selectedTrigger.trigger_type === "PIPELINE" || selectedTrigger.trigger_type === "USERINPUT") ?
+ {rightSideBarOpen && (selectedTrigger.trigger_type === "SCHEDULE" || selectedTrigger.trigger_type === "WEBHOOK" || selectedTrigger.trigger_type === "PIPELINE" || selectedTrigger.trigger_type === "USERINPUT" || selectedTrigger.trigger_type === "SUBFLOW") ?
{Object.getOwnPropertyNames(selectedTrigger).length > 0 ?
selectedTrigger.trigger_type === "SCHEDULE" ?
@@ -20254,17 +20686,19 @@ const releaseToConnectLabel = "Release to Connect"
WebhookSidebar
: selectedTrigger.trigger_type === "USERINPUT" ?
UserinputSidebar
+ : selectedTrigger.trigger_type === "SUBFLOW" ?
+ SubflowSidebar
: null
: null}
: null}
- {
+ {/* {
rightSideBarOpen && selectedTrigger.trigger_type === "SUBFLOW"&& Object.getOwnPropertyNames(selectedTrigger).length > 0 ?
: null
- }
+ } */}
{/*
const changeActionParameterCodeMirror = (event, count, data, actionlist) => {
- // Check if event.target.value is an array. If it is, split with comma
- console.log("1 - SELECTED ACTION: ", selectedAction)
- console.log("1 - DATA: ", data)
+
+ if(selectedAction && selectedAction.parameters && selectedAction.parameters.length > 0){
- if (data.startsWith("${") && data.endsWith("}")) {
- // PARAM FIX - Gonna use the ID field, even though it's a hack
- const paramcheck = selectedAction.parameters.find(param => param.name === "body")
- if (paramcheck !== undefined) {
- // Escapes all double quotes
- const toReplace = event.target.value.trim().replaceAll("\\\"", "\"").replaceAll("\"", "\\\"");
- if (paramcheck["value_replace"] === undefined || paramcheck["value_replace"] === null) {
- paramcheck["value_replace"] = [{
- "key": data.name,
- "value": toReplace,
- }]
+ // Check if event.target.value is an array. If it is, split with comma
+ console.log("1 - SELECTED ACTION: ", selectedAction)
+ console.log("1 - DATA: ", data)
- } else {
- const subparamindex = paramcheck["value_replace"].findIndex(param => param.key === data.name)
- if (subparamindex === -1) {
- paramcheck["value_replace"].push({
- "key": data.name,
- "value": toReplace,
- })
- } else {
- paramcheck["value_replace"][subparamindex]["value"] = toReplace
- }
- }
+ if (data.startsWith("${") && data.endsWith("}")) {
+ // PARAM FIX - Gonna use the ID field, even though it's a hack
+ const paramcheck = selectedAction.parameters.find(param => param.name === "body")
+ if (paramcheck !== undefined) {
+ // Escapes all double quotes
+ const toReplace = event.target.value.trim().replaceAll("\\\"", "\"").replaceAll("\"", "\\\"");
+ if (paramcheck["value_replace"] === undefined || paramcheck["value_replace"] === null) {
+ paramcheck["value_replace"] = [{
+ "key": data.name,
+ "value": toReplace,
+ }]
- if (paramcheck["value_replace"] === undefined) {
- selectedAction.parameters[count]["value_replace"] = paramcheck
- } else {
- //selectedActionParameters[count]["value_replace"] = paramcheck["value_replace"]
- selectedAction.parameters[count]["value_replace"] = paramcheck["value_replace"]
- }
- setSelectedAction(selectedAction)
- //setUpdate(Math.random())
- return
- }
- }
+ } else {
+ const subparamindex = paramcheck["value_replace"].findIndex(param => param.key === data.name)
+ if (subparamindex === -1) {
+ paramcheck["value_replace"].push({
+ "key": data.name,
+ "value": toReplace,
+ })
+ } else {
+ paramcheck["value_replace"][subparamindex]["value"] = toReplace
+ }
+ }
- if (event.target.value[event.target.value.length-1] === "." && actionlist.length > 0) {
- var curstring = ""
- var record = false
- for (let [key,keyval] in Object.entries(selectedAction.parameters[count].value)) {
- const item = selectedAction.parameters[count].value[key]
- if (record) {
- curstring += item
- }
+ if (paramcheck["value_replace"] === undefined) {
+ selectedAction.parameters[count]["value_replace"] = paramcheck
+ } else {
+ //selectedActionParameters[count]["value_replace"] = paramcheck["value_replace"]
+ selectedAction.parameters[count]["value_replace"] = paramcheck["value_replace"]
+ }
+ setSelectedAction(selectedAction)
+ //setUpdate(Math.random())
+ return
+ }
+ }
- if (item === "$") {
- record = true
- curstring = ""
- }
- }
+ if (event.target.value[event.target.value.length-1] === "." && actionlist.length > 0) {
+ var curstring = ""
+ var record = false
+ for (let [key,keyval] in Object.entries(selectedAction.parameters[count].value)) {
+ const item = selectedAction.parameters[count].value[key]
+ if (record) {
+ curstring += item
+ }
- if (curstring.length > 0 && actionlist !== null) {
- // Search back in the action list
- curstring = curstring.split(" ").join("_").toLowerCase()
- var actionItem = actionlist.find(data => data.autocomplete.split(" ").join("_").toLowerCase() === curstring)
- if (actionItem !== undefined) {
- console.log("Found item: ", actionItem)
+ if (item === "$") {
+ record = true
+ curstring = ""
+ }
+ }
- var jsonvalid = true
- try {
- const tmp = String(JSON.parse(actionItem.example))
- if (!actionItem.example.includes("{") && !actionItem.example.includes("[")) {
- jsonvalid = false
- }
- } catch (e) {
- jsonvalid = false
- }
- }
- }
- }
+ if (curstring.length > 0 && actionlist !== null) {
+ // Search back in the action list
+ curstring = curstring.split(" ").join("_").toLowerCase()
+ var actionItem = actionlist.find(data => data.autocomplete.split(" ").join("_").toLowerCase() === curstring)
+ if (actionItem !== undefined) {
+ console.log("Found item: ", actionItem)
- if (selectedAction.app_name === "Shuffle Tools" && selectedAction.name === "filter_list" && count === 0) {
- const parsedvalue = data
- if (parsedvalue.includes("#")) {
- const splitparsed = parsedvalue.split(".#.")
- //console.log("Cant contain #: ", splitparsed)
- if (splitparsed.length > 1) {
- //data.value = splitparsed[0]
+ var jsonvalid = true
+ try {
+ const tmp = String(JSON.parse(actionItem.example))
+ if (!actionItem.example.includes("{") && !actionItem.example.includes("[")) {
+ jsonvalid = false
+ }
+ } catch (e) {
+ jsonvalid = false
+ }
+ }
+ }
+ }
- selectedAction.parameters[0].value = splitparsed[0]
- selectedAction.parameters[1].value = splitparsed[1]
+ console.log("2 - SELECTED ACTION: ", selectedAction)
+ console.log("2 - DATA: ", data)
- selectedAction.parameters[0].autocompleted = true
- selectedAction.parameters[1].autocompleted = true
- setUpdate(Math.random())
- }
- }
- } else {
- selectedAction.parameters[count].autocompleted = false
- selectedAction.parameters[count].value = data
- }
+ if (selectedAction.app_name === "Shuffle Tools" && selectedAction.name === "filter_list" && count === 0) {
+ const parsedvalue = data
+ console.log("Parsed value: ", parsedvalue)
+ if (parsedvalue.includes("#")) {
+ const splitparsed = parsedvalue.split(".#.")
+ //console.log("Cant contain #: ", splitparsed)
+ if (splitparsed.length > 1) {
+ console.log("IN HERE AY")
+ //data.value = splitparsed[0]
- setSelectedAction(selectedAction)
+ selectedAction.parameters[0].value = splitparsed[0]
+ selectedAction.parameters[1].value = splitparsed[1]
+
+ selectedAction.parameters[0].autocompleted = true
+ selectedAction.parameters[1].autocompleted = true
+ setUpdate(Math.random())
+ }
+ }
+ } else {
+ selectedAction.parameters[count].autocompleted = false
+ selectedAction.parameters[count].value = data
+ }
+
+ setSelectedAction(selectedAction)
+ }
+
+ if(selectedTrigger && selectedTrigger.parameters && selectedTrigger.parameters.length > 0){
+
+ if (event.target.value[event.target.value.length-1] === "." && actionlist.length > 0) {
+ var curstring = ""
+ var record = false
+ for (let [key,keyval] in Object.entries(selectedTrigger.parameters[count].value)) {
+ const item = selectedTrigger.parameters[count].value[key]
+ if (record) {
+ curstring += item
+ }
+
+ if (item === "$") {
+ record = true
+ curstring = ""
+ }
+ }
+
+ if (curstring.length > 0 && actionlist !== null) {
+ // Search back in the action list
+ curstring = curstring.split(" ").join("_").toLowerCase()
+ var actionItem = actionlist.find(data => data.autocomplete.split(" ").join("_").toLowerCase() === curstring)
+ if (actionItem !== undefined) {
+ console.log("Found item: ", actionItem)
+
+ var jsonvalid = true
+ try {
+ const tmp = String(JSON.parse(actionItem.example))
+ if (!actionItem.example.includes("{") && !actionItem.example.includes("[")) {
+ jsonvalid = false
+ }
+ } catch (e) {
+ jsonvalid = false
+ }
+ }
+ }
+ }
+
+ selectedTrigger.parameters[count].value = data
+ setSelectedTrigger(selectedTrigger);
+ console.log("get into trigger controller", selectedTrigger,data)
+ }
//setUpdate(Math.random())
}
@@ -22101,7 +22586,7 @@ const releaseToConnectLabel = "Release to Connect"
fieldCount={editorData.field_number}
actionlist={editorData.actionlist}
fieldname={editorData.field_id}
-
+ selectedTrigger={selectedTrigger}
changeActionParameterCodeMirror={changeActionParameterCodeMirror}
activeDialog={activeDialog}
setActiveDialog={setActiveDialog}
@@ -22231,4 +22716,4 @@ const releaseToConnectLabel = "Release to Connect"
);
};
-export default AngularWorkflow;
+export default AngularWorkflow;
\ No newline at end of file